diff --git a/.clang-tidy b/.clang-tidy index fc5ec979..4f74e301 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -14,7 +14,7 @@ Checks: > WarningsAsErrors: [ ] -HeaderFilterRegex: '^src/.*|^include/.*' +HeaderFilterRegex: '^v3/(src|include)/.*|^kernel/(src|include)/.*' AnalyzeTemporaryDtors: false FormatStyle: none diff --git a/.clang-tidy-ignore b/.clang-tidy-ignore index a9f4fa42..53a4a208 100644 --- a/.clang-tidy-ignore +++ b/.clang-tidy-ignore @@ -6,8 +6,8 @@ # clang-tidy will ALWAYS false-positive them. Always. # --------------------------------------------------------- -src/platform/** -src/platform/* +v3/src/platform/** +v3/src/platform/* # --------------------------------------------------------- # Skip test infrastructure @@ -15,8 +15,8 @@ src/platform/* # and stress edge conditions clang-tidy will never grok. # --------------------------------------------------------- -src/test_runner/** -src/test_runner/* +v3/src/test_runner/** +v3/src/test_runner/* # --------------------------------------------------------- # Skip word definitions generated or "mechanically patterned" @@ -24,30 +24,30 @@ src/test_runner/* # clang-tidy gives ZERO useful feedback on them. # --------------------------------------------------------- -src/word_source/string_words.c -src/word_source/block_words.c -src/word_source/arithmetic_words.c -src/word_source/mixed_arithmetic_words.c -src/word_source/return_stack_words.c -src/word_source/defining_words.c -src/word_source/stack_words.c -src/word_source/logical_words.c -src/word_source/memory_words.c -src/word_source/io_words.c -src/word_source/dictionary_words.c -src/word_source/dictionary_manipulation_words.c -src/word_source/vocabulary_words.c -src/word_source/system_words.c -src/word_source/starforth_words.c -src/word_source/editor_words.c -src/word_source/format_words.c +v3/src/word_source/string_words.c +v3/src/word_source/block_words.c +v3/src/word_source/arithmetic_words.c +v3/src/word_source/mixed_arithmetic_words.c +v3/src/word_source/return_stack_words.c +v3/src/word_source/defining_words.c +v3/src/word_source/stack_words.c +v3/src/word_source/logical_words.c +v3/src/word_source/memory_words.c +v3/src/word_source/io_words.c +v3/src/word_source/dictionary_words.c +v3/src/word_source/dictionary_manipulation_words.c +v3/src/word_source/vocabulary_words.c +v3/src/word_source/system_words.c +v3/src/word_source/starforth_words.c +v3/src/word_source/editor_words.c +v3/src/word_source/format_words.c # --------------------------------------------------------- # Skip headers belonging to the word system # Same reason: no signal, infinite false positives. # --------------------------------------------------------- -src/word_source/include/* +v3/src/word_source/include/* # --------------------------------------------------------- # Skip anything that implements performance knobs, @@ -55,15 +55,15 @@ src/word_source/include/* # These are meant to be weird, and tidy can't reason about them. # --------------------------------------------------------- -src/stack_management.c -src/profiler.c -src/vm_debug.c -src/physics_runtime.c +v3/src/stack_management.c +v3/src/profiler.c +v3/src/vm_debug.c +v3/src/physics_runtime.c # --------------------------------------------------------- # Skip integration + stress torture-tests. # These *intentionally* do UB-like bullshit. # --------------------------------------------------------- -src/test_runner/modules/*stress* -src/test_runner/modules/*integration* +v3/src/test_runner/modules/*stress* +v3/src/test_runner/modules/*integration* diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index b6348859..5e76a959 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -176,7 +176,9 @@ capsule files — accurate): previously described a 1024-byte-per-block budget — right by arithmetic, wrong as a rule): `validate_forth_blocks` enforces a **64-char × 16-line** format — **line length ≤ 64 chars, ≤ 16 content lines per block** (`mkcapsule.c:344-345`, `:430`) — and -a block number in **`[2048, 5120)`** (`:408-409`). 64 × 16 = 1024, which is where the old +a block number of **2048 or more, with no upper bound** (`:408-411`; ruled 2026-10-05, +`docs/v4.0.0/NUCLEUS.md` §5.2 — blocks 0–2047, the VM's fast RAM, are the only ones a capsule +may not claim; the check was `[2048, 5120)` before). 64 × 16 = 1024, which is where the old figure came from, but the enforcement is per-line and per-line-count: **8 lines of 128 chars is 1024 bytes and still fails.** Verify with `mkcapsule --lint capsules/`, not `wc -c`. @@ -224,43 +226,43 @@ changes with any new C word registration). ```bash # Build kernel for a given architecture (amd64 default) -make -f Makefile.starkernel ARCH=amd64 -make -f Makefile.starkernel ARCH=aarch64 -make -f Makefile.starkernel ARCH=riscv64 +make -f kernel/Makefile ARCH=amd64 +make -f kernel/Makefile ARCH=aarch64 +make -f kernel/Makefile ARCH=riscv64 # Run in QEMU with OVMF -make -f Makefile.starkernel qemu -make -f Makefile.starkernel ARCH=aarch64 qemu -make -f Makefile.starkernel ARCH=riscv64 qemu +make -f kernel/Makefile qemu +make -f kernel/Makefile ARCH=aarch64 qemu +make -f kernel/Makefile ARCH=riscv64 qemu # Clean -make -f Makefile.starkernel clean +make -f kernel/Makefile clean ``` Output: `build//kernel/starkernel_loader.efi` + `build//kernel/starkernel_kernel.elf`. Two independently tracked version strings flow into the generated `include/version.h`: -`VERSION` (`Makefile.starkernel` — the embedded StarForth engine version, currently `3.1.0`; +`VERSION` (`kernel/Makefile` — the embedded StarForth engine version, currently `3.1.0`; note this does **not** auto-sync with the standalone StarForth repo's own version) and -`LITHOS_VERSION` (`Makefile.starkernel` — the kernel version, currently **`2.0.0`**; +`LITHOS_VERSION` (`kernel/Makefile` — the kernel version, currently **`2.0.0`**; corrected 2026-09-19 — this file said `2.0.1`, but `FABRIC-3.md` §I.2 rolled it back to `2.0.0` on 2026-09-04 because `2.0.1` names the SER5 hardware-track line and claims hardware progress not yet verified. The versioning policy is **semantic, not sequential** — see the -roadmap table in `Makefile.starkernel` before choosing any version). +roadmap table in `kernel/Makefile` before choosing any version). ### Build configuration (Kconfig — real, wired, not vestigial) Every kernel-only knob (`STARFORTH_ENABLE_VM`, `PARITY_MODE`, the shared physics/heartbeat family, etc.) is an optional Kconfig symbol defined across `Kconfig`, `Kconfig.arch`, `Kconfig.heartbeat`, `Kconfig.kernel`, `Kconfig.physics`, `Kconfig.variant` (~40 symbols -total). `Makefile.starkernel` pulls its defaults from this system via a `kconfig_bool(...)` +total). `kernel/Makefile` pulls its defaults from this system via a `kconfig_bool(...)` mechanism — e.g. `STARFORTH_ENABLE_VM` defaults to **1** (confirmed at -`Makefile.starkernel:61`), meaning a plain `make -f Makefile.starkernel` already builds with +`kernel/Makefile:61`), meaning a plain `make -f kernel/Makefile` already builds with VM + capsule-birth + ACL active. A bare invocation uses the defaults it always has: ```bash -make -f Makefile.starkernel ARCH=amd64 menuconfig -make -f Makefile.starkernel ARCH=amd64 kernel_amd64_defconfig +make -f kernel/Makefile ARCH=amd64 menuconfig +make -f kernel/Makefile ARCH=amd64 kernel_amd64_defconfig ``` ### Hosted VM (vendored, for local sanity only) @@ -277,7 +279,7 @@ StarForth repo) were removed 2026-08-15 — they referenced in the actual generated `include/version.h` (which only has `STARFORTH_VERSION`, `STARFORTH_ARCH`, `STARFORTH_TARGET`, `STARFORTH_TIMESTAMP`, `STARFORTH_VERSION_FULL`, `LITHOS_VERSION`, `LITHOS_VERSION_STR`), so they could never have worked. Bump versions by hand-editing the `VERSION`/ -`LITHOS_VERSION` variables in `Makefile.starkernel` instead. Report the broken targets if +`LITHOS_VERSION` variables in `kernel/Makefile` instead. Report the broken targets if asked, don't silently fix them. ### Important: Linker Configuration @@ -298,9 +300,9 @@ The vendored hosted `make` build (above) is NEVER used to validate kernel change ```bash # Run in this exact order for every kernel change: -make -f Makefile.starkernel ARCH=amd64 clean qemu -make -f Makefile.starkernel ARCH=aarch64 clean qemu -make -f Makefile.starkernel ARCH=riscv64 clean qemu +make -f kernel/Makefile ARCH=amd64 clean qemu +make -f kernel/Makefile ARCH=aarch64 clean qemu +make -f kernel/Makefile ARCH=riscv64 clean qemu ``` **QEMU rule — non-negotiable:** Only ONE QEMU instance may run at a time, always in the @@ -475,7 +477,7 @@ listed in `proof/ROOT` (corrected 2026-09-19; this file said 23, and `proof/COVE said 52 all along). **Read `proof/COVERAGE.md` first**: its stated goal is not a green build but "identify precisely what cannot be proven and why — the boundary between 'formally verified' and 'not, for this specific reason'." Run `isabelle build -D proof/` -directly; neither `Makefile` nor `Makefile.starkernel` in this repo defines an +directly; neither `Makefile` nor `kernel/Makefile` in this repo defines an `isabelle-build`/`isabelle-check` target (unlike the standalone StarForth repo, which has a broken one — this repo simply doesn't have the target at all, so there's nothing to mistakenly invoke). @@ -495,7 +497,7 @@ status for kernel work. - **Strict ANSI C99** — No GNU extensions, no C++ features - **Zero warnings target, with four explicit exceptions — corrected 2026-08-18, previous - claim was wrong.** Build with `-Wall -Wextra -Werror`, but `Makefile.starkernel` carries + claim was wrong.** Build with `-Wall -Wextra -Werror`, but `kernel/Makefile` carries `-Wno-error=unused-parameter -Wno-error=shift-negative-value -Wno-error=sign-compare -Wno-error=missing-field-initializers` — those four classes are enabled (still visible as warnings) but deliberately downgraded from fatal, everything else is. The previous version diff --git a/Doxyfile b/Doxyfile index 517db1c4..4d6cd19a 100644 --- a/Doxyfile +++ b/Doxyfile @@ -933,10 +933,12 @@ WARN_LOGFILE = docs/api/doxygen_warnings.log # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = include \ - src \ - src/word_source \ - src/test_runner \ +INPUT = v3/include \ + v3/src \ + v3/src/word_source \ + v3/src/test_runner \ + kernel/include \ + kernel/src \ README.md # This tag can be used to specify the character encoding of the source files @@ -2366,9 +2368,10 @@ SEARCH_INCLUDES = YES # RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = include \ - src/word_source/include \ - src/test_runner/include +INCLUDE_PATH = v3/include \ + kernel/include \ + v3/src/word_source/include \ + v3/src/test_runner/include # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the diff --git a/Kconfig.arch b/Kconfig.arch index 9cc52bee..21e5bdc0 100644 --- a/Kconfig.arch +++ b/Kconfig.arch @@ -5,7 +5,7 @@ choice default ARCH_AMD64 help Selects the value passed as ARCH= to whichever Makefile - (Makefile or Makefile.starkernel) is driven from this config. + (Makefile or kernel/Makefile) is driven from this config. Both Makefiles already accept "amd64"/"aarch64"/"riscv64" as canonical spellings (each has its own alias-normalizing logic for other spellings like x86_64/arm64/riscv), so this choice diff --git a/Kconfig.heartbeat b/Kconfig.heartbeat index eb6750ea..c0880d72 100644 --- a/Kconfig.heartbeat +++ b/Kconfig.heartbeat @@ -17,7 +17,7 @@ config HEARTBEAT_THREAD_ENABLED builds without needing a special case. This is UI/model correctness (menuconfig can't offer a choice LithosAnanke has no way to honor -- there are no pthreads in a freestanding kernel), - not the sole enforcement mechanism: Makefile.starkernel additionally + not the sole enforcement mechanism: kernel/Makefile additionally keeps its own unconditional `VM_FEATURE_OVERRIDES += -DHEARTBEAT_THREAD_ENABLED=0` post-override exactly as it was before this migration. Deliberately redundant with the `depends diff --git a/Kconfig.kernel b/Kconfig.kernel index bb8cc681..25c5017a 100644 --- a/Kconfig.kernel +++ b/Kconfig.kernel @@ -11,7 +11,18 @@ config STARFORTH_ENABLE_VM kernel that only reaches the M0-M6 hardware milestones (console, PMM, VMM, interrupts, timers, kmalloc) with no FORTH interpreter, no capsules, no "ok" REPL. Gates a large source-file selection - block in Makefile.starkernel, not just a handful of -D flags. + block in kernel/Makefile, not just a handful of -D flags. + +config STARFORTH_V4 + bool "Boot StarForth v4, the F18-derived engine, at a single prompt (STARFORTH_V4)" + default n + help + Instead of the v3 VM and its fleet, the kernel starts one StarForth + v4 host node after the M0-M6 hardware milestones: the golden model + of the 32-opcode engine (v4/src) running the capsule image built + from v4/capsule, with its console on the kernel's serial console. + It reaches v4's "ok> " prompt and stays there. The v3 VM is still + compiled in but is not started. See docs/v4.0.0/DECOMPOSITION.md. config PARITY_MODE bool "Deterministic parity harness mode (PARITY_MODE)" diff --git a/Makefile b/Makefile index d3757f86..e2d16cb5 100644 --- a/Makefile +++ b/Makefile @@ -1,1340 +1,159 @@ # ============================================================================== -# StarForth Build System - The Fastest Forth in the West! -# ============================================================================== +# LithosAnanke / StarForth -- top-level Makefile # -# Quick Start: -# make - Standard optimized build (auto ARCH, TARGET=standard) -# make TARGET=fastest - Maximum performance build -# make ARCH=arm64 TARGET=fastest - Build for arm64 (e.g., Raspberry Pi 4) -# make help - Show all available targets +# Thin dispatcher. The real build lives in: +# v3/Makefile -- hosted StarForth v3 (Linux userland VM, POST, DoE) +# kernel/Makefile -- LithosAnanke kernel (UEFI loader, kernel ELF, QEMU) +# boards// -- one directory per physical target (board.mk + boot files) +# docs/book/Makefile -- the single LaTeX book (build/docs/*.pdf) +# Every sub-make runs from this directory, so paths are always repo-relative. # +# TARGET is either a board (SER5 RASPI MILKV ZYNQ7020), a hosted v3 profile +# (standard fast fastest turbo asan ...), or empty: +# +# make [all] every board that has a kernel port, the +# hosted v3 build, and the book +# make [all] TARGET= that board's boot image + its book +# make [all] TARGET= hosted v3 build with that profile +# +# make boot_image TARGET= only the board's boot image +# make boot_images every board that has a kernel port +# make docs [TARGET=] the book; a board adds its appendix +# +# make clean all of build/ except build/cache/ +# make clean TARGET= the board's image + book and its ISA's kernel objects +# make clean TARGET= build// for every arch +# make clean-docs build/docs/ +# +# make kernel ARCH= [GOAL=g] kernel/Makefile goal (default: all) +# make boards list boards and whether they can be built +# make goes to v3/Makefile (make help-hosted) # ============================================================================== -# ============================================================================== -# CONFIGURATION -# ============================================================================== +# Board name (as typed on the command line) -> boards/ directory. +BOARD_DIR_SER5 := ser5 +BOARD_DIR_RASPI := raspi +BOARD_DIR_MILKV := milkv +BOARD_DIR_ZYNQ7020 := zynq7020 +BOARDS := SER5 RASPI MILKV ZYNQ7020 +empty := +space := $(empty) $(empty) -VERSION ?= 3.2.0 -CC = gcc +board_field = $(if $(BOARD_DIR_$(1)),$(shell sed -n 's/^$(2) *:= *//p' boards/$(BOARD_DIR_$(1))/board.mk)) +board_arch = $(call board_field,$(1),BOARD_ARCH) +# A board can be built once its ISA's kernel port exists. +board_ready = $(if $(call board_arch,$(1)),$(wildcard kernel/src/arch/$(call board_arch,$(1))/.)) -# Isabelle configuration -# NOTE: Isabelle must be installed separately and available on PATH -# See docs/DEVELOPER.md for installation instructions -ISABELLE ?= isabelle +READY_BOARDS := $(foreach b,$(BOARDS),$(if $(call board_ready,$(b)),$(b))) +UNREADY_BOARDS := $(filter-out $(READY_BOARDS),$(BOARDS)) -# Architecture / target selection -ARCH ?= $(shell uname -m) -ARCH := $(strip $(ARCH)) -TARGET ?= standard -TARGET := $(strip $(TARGET)) +TARGET := $(strip $(TARGET)) +BOARD_DIR := $(if $(TARGET),$(BOARD_DIR_$(TARGET))) -# Friendly guardrail: 32-bit builds are not supported -unsupported_32bit_arches := i386 i486 i586 i686 x86 armv6 armv7 armv7l arm -ifneq ($(filter $(ARCH),$(unsupported_32bit_arches)),) - $(error StarForth targets 64-bit platforms only. ARCH='$(ARCH)' is unsupported. Please build on amd64/arm64/raspi/riscv64.) -endif +SUBMAKE := $(MAKE) --no-print-directory -# Canonical architecture normalization (x86_64→amd64, aarch64→arm64, etc.) -canon_arch = $(strip $(if $(filter x86_64,$1),amd64,$(if $(filter amd64,$1),amd64,$(if $(filter aarch64 arm64,$1),arm64,$(if $(filter riscv riscv64,$1),riscv64,$1))))) -ARCH_DIR := $(call canon_arch,$(ARCH)) -# Normalize ARCH for consistent ifeq matching -ARCH := $(call canon_arch,$(ARCH)) - -# Kconfig bridge (menuconfig/xconfig/config/oldconfig/*_defconfig). See -# mk/Kconfig.mk for why KCONFIG_ARCH_DIR must be set here, before include. -# .DEFAULT_GOAL is pinned explicitly because mk/Kconfig.mk's first rule -# would otherwise silently become Make's default goal, since it's included -# before this Makefile's own `all:` target is defined below. .DEFAULT_GOAL := all -KCONFIG_ARCH_DIR := $(ARCH_DIR) -include mk/Kconfig.mk - -# Kconfig platform-mode choice (Phase 5): PLATFORM_DEFAULT/PLATFORM_MINIMAL -# in Kconfig.variant (PLATFORM_L4RE removed -- L4Re support is historical, -# see the "Platform support" section below). Must run this early -- before -# anything below that branches on MINIMAL -- since Make evaluates a Makefile -# top-to-bottom and a variable's value at the point an `ifdef` is reached is -# whatever it resolved to *so far*, not its final value. Only applies when a -# developer hasn't already set MINIMAL explicitly (command line or -# environment) -- `ifdef` in the "Platform support" section below cares -# about definedness, not value, so this can't reuse the kconfig_bool/ -# kconfig_int pattern (those always define their target variable once -# active). Checked with $(origin ...) so an explicit `make MINIMAL=1` (or -# unset) always wins over whatever .config says. -ifeq ($(KCONFIG_ACTIVE),1) -ifeq ($(origin MINIMAL),undefined) -ifeq ($(CONFIG_PLATFORM_MINIMAL),y) -MINIMAL := 1 -endif -endif -endif - -ifeq ($(ARCH),amd64) - ARCH_NAME = x86_64 - ARCH_FLAGS = -march=native - ARCH_DEFINES = -DARCH_X86_64=1 - ASM_SYNTAX = -masm=intel -else ifeq ($(ARCH),arm64) - ARCH_NAME = ARM64 - ARCH_FLAGS = -march=armv8-a+crc+simd -mtune=cortex-a72 - ARCH_DEFINES = -DARCH_ARM64=1 - ASM_SYNTAX = -else ifeq ($(ARCH),raspi) - ARCH_NAME = Raspberry Pi 4 (ARM64) - ARCH_FLAGS = -march=armv8-a+crc+simd -mtune=cortex-a72 - ARCH_DEFINES = -DARCH_ARM64=1 -DRASPBERRY_PI_BUILD=1 - ASM_SYNTAX = -else ifeq ($(ARCH),riscv64) - ARCH_NAME = RISC-V 64 (QEMU) - ARCH_FLAGS = -march=rv64gc -mabi=lp64d -mcmodel=medany - ARCH_DEFINES = -DARCH_RISCV64=1 - ASM_SYNTAX = -else ifeq ($(ARCH),riscv) - ARCH_NAME = RISC-V 64 (QEMU) - ARCH_FLAGS = -march=rv64gc -mabi=lp64d -mcmodel=medany - ARCH_DEFINES = -DARCH_RISCV64=1 - ASM_SYNTAX = -else - $(warning Unknown architecture: $(ARCH), using generic flags) - ARCH_NAME = generic - ARCH_FLAGS = - ARCH_DEFINES = - ASM_SYNTAX = -endif - -# Compiler flags -# Feature switches (default: enabled) -# Physics/SSM knob family: repointed through the Kconfig bridge (see -# mk/Kconfig.mk's kconfig_bool/kconfig_int) as of the Kconfig migration's -# Phase 3. Each call below is a drop-in replacement for a bare `?=`: when -# no build/$(ARCH)/.config exists (KCONFIG_ACTIVE unset), it's exactly -# `VAR ?= default`, identical to before; once a .config exists, the -# Kconfig-fed value takes over. `make VAR=x` on the command line always -# wins regardless of which branch fires. -# -# STRICT_PTR: VM memory bounds checking on every pointer access -# Default: 1 (enabled). Disable only for raw benchmarking comparisons. -$(eval $(call kconfig_bool,STRICT_PTR,1)) - -# ENABLE_HOTWORDS_CACHE: Physics-driven hot-words cache (1.78× speedup on dictionary lookups) -# Default: 1 (enabled - experiments show cache is optimal) -# Set ENABLE_HOTWORDS_CACHE=0 to disable (for research comparison only) -$(eval $(call kconfig_bool,ENABLE_HOTWORDS_CACHE,0)) - -# ENABLE_PIPELINING: Speculative execution via word transition prediction -# Default: 1 (enabled - experiments show pipelining is optimal) -# Set ENABLE_PIPELINING=0 to disable (for research comparison only) -# NOTE: As of 2025-11-19, all future experiments use both cache and pipelining enabled -$(eval $(call kconfig_bool,ENABLE_PIPELINING,0)) - -# EMERGENCY_CONSOLE_ENABLED: 1 = REPL recovers from errors and continues (interactive fallthrough) -# 0 = errors are non-recoverable; REPL exits and vm_fault_handler() is called instead -# Default: 1 (dev/recovery builds) -# Set EMERGENCY_CONSOLE_ENABLED=0 for production, embedded, or high-security builds -# where no interactive fallthrough surface should exist. -# Heartbeat family: repointed through the Kconfig bridge (Phase 4). Same -# drop-in-replacement-for-`?=` behavior as the physics/SSM family (Phase 3). -$(eval $(call kconfig_bool,EMERGENCY_CONSOLE_ENABLED,1)) - -# Heartbeat configuration -# HEARTBEAT_THREAD_ENABLED: 1 = run vm_tick() in background thread (OPTIMAL), 0 = inline (legacy) -# Default: 1 (experiments show threaded heartbeat is optimal for adaptive tuning) -# NOTE: As of 2025-11-19, all future experiments use heartbeat enabled -$(eval $(call kconfig_bool,HEARTBEAT_THREAD_ENABLED,1)) - -# HEARTBEAT_TICK_NS: Wake frequency for heartbeat thread (default 1ms) -$(eval $(call kconfig_int,HEARTBEAT_TICK_NS,10000)) - -# HEARTBEAT_CHECK_FREQUENCY / HEARTBEAT_WINDOW_TUNING_FREQUENCY / -# HEARTBEAT_SLOPE_VALIDATION_FREQUENCY: previously unwired in the hosted -# Makefile -- no `?=` and no -D forwarding existed for any of these three -# before Phase 4, so hosted builds always got starforth_config.h's bare -# defaults (256/1000/5000) with no override mechanism at all. The kernel -# Makefile has always had opt-in forwarding for them (VM_FEATURE_FLAG_VARS). -# Promoted here for parity, same treatment as Phase 3's SSM_* knobs. -$(eval $(call kconfig_int,HEARTBEAT_CHECK_FREQUENCY,256)) -$(eval $(call kconfig_int,HEARTBEAT_WINDOW_TUNING_FREQUENCY,1000)) -$(eval $(call kconfig_int,HEARTBEAT_SLOPE_VALIDATION_FREQUENCY,5000)) - -# HISTORICAL: L4Re had no pthreads, so this forced HEARTBEAT_THREAD_ENABLED -# off whenever L4RE=1 was set. L4Re support is no longer an active target; -# see "Platform support" below. -# ifeq ($(L4RE),1) -# HEARTBEAT_THREAD_ENABLED := 0 -# endif - -# Feedback Loop Toggle Switches (for systematic performance measurement) -# ============================================================================ -# These allow turning each feedback loop on/off to measure additive performance gains -# EXP_00-BASELINE: all loops OFF (plain FORTH-79) -# EXP_01: Loop #1 ON -# EXP_02: Loops #1-2 ON -# ... etc, building cumulatively to measure each loop's contribution - -# ============================================================================== -# SSM (Steady State Machine) Configuration - Data-Driven Architecture -# ============================================================================== -# Based on 2^7 DoE with 300 reps (128 configs, 38,400 runs). -# Top 5% analysis (speed + stability) reveals optimal loop combinations. -# -# Experimentally Validated Architecture: -# L1 (heat_tracking): DISABLED (harmful in 86% of top configs) -# L4 (pipelining_metrics): DISABLED (harmful in 100% of top configs) -# L7 (adaptive_heartrate): ALWAYS ON (beneficial in 71% of top configs) -# L2, L3, L5, L6: Runtime-controlled by L8 (workload-dependent) -# L8 (Jacquard): 4-bit mode selector (16 modes: C0-C15) -# -# L8 dynamically controls L2/L3/L5/L6 based on entropy, CV, and temporal metrics. -# Top 5% validated modes: C4, C7, C9, C11, C12 (see src/ssm_jacquard.c) - -# Tuning Knobs (Physics-driven Optimization System) -# ============================================================================ -# Knob #7: ROLLING_WINDOW_SIZE (Initial execution history capture) -# - Default: 4096 (conservative, ensures statistical significance at cold start) -# - Usage: make ROLLING_WINDOW_SIZE=8192 (larger for complex workloads) -# or ROLLING_WINDOW_SIZE=2048 (smaller for memory constraints) -# - System AUTOMATICALLY shrinks during execution if diminishing returns detected -# - Window starts conservative, self-tunes down if pattern diversity plateaus -# - Window becomes "warm" (representative) after N executions, then adapts -$(eval $(call kconfig_int,ROLLING_WINDOW_SIZE,4096)) - -# Knob #6: TRANSITION_WINDOW_SIZE (Pipelining context depth) -# - Default: 8 (see starforth_config.h for the exact shipped value) -# - Usage: make TRANSITION_WINDOW_SIZE=1 (or 2, 4 for shallower context) -# - Empirically tuned via binary chop: 1 vs 2 vs 4 vs 8 -$(eval $(call kconfig_int,TRANSITION_WINDOW_SIZE,8)) - -# SPECULATION_THRESHOLD_Q48 / SPECULATION_DEPTH / MIN_SAMPLES_FOR_SPECULATION / -# MISPREDICTION_COST_Q48 / MINIMUM_PREFETCH_ROI: previously hardcoded, -# non-overridable #define in physics_pipelining_metrics.h -- no Makefile -# knob or -D forwarding existed for any of these five before Phase 5. -# Promoted here for parity, same treatment as Phase 3/4's other -# previously-unwired constants. All five are Q48.16-fixed-point or plain -# counts meaningful only when ENABLE_PIPELINING is on; see Kconfig.physics -# for the exact hex/decimal defaults. MINIMUM_PREFETCH_ROI's default was -# corrected from the long-shipped 0x11999A to 0x1199A (rev y) -- the -# former was ~17.6 in Q48.16, not the documented 1.10. -$(eval $(call kconfig_int,SPECULATION_THRESHOLD_Q48,0x8000)) -$(eval $(call kconfig_int,SPECULATION_DEPTH,1)) -$(eval $(call kconfig_int,MIN_SAMPLES_FOR_SPECULATION,10)) -$(eval $(call kconfig_int,MISPREDICTION_COST_Q48,0x190000)) -$(eval $(call kconfig_int,MINIMUM_PREFETCH_ROI,0x1199A)) - -# Knobs #8-11: Adaptive Window Shrinking Control -# ============================================================================ -# These control how aggressively the rolling window learns and adapts -# (NOT the initial window size - that's ROLLING_WINDOW_SIZE above) - -# Knob #8: ADAPTIVE_SHRINK_RATE (percentage to retain when shrinking) -# - Default: 50 (shrink to 50% = discard 50% each cycle) -# - Range: 50-95 (lower = more aggressive, higher = more conservative) -# - Usage: make ADAPTIVE_SHRINK_RATE=75 (slower learning) or 90 (slow learning) -$(eval $(call kconfig_int,ADAPTIVE_SHRINK_RATE,50)) - -# Knob #9: ADAPTIVE_MIN_WINDOW_SIZE (floor to prevent over-shrinking) -# - Default: 256 (never shrink below 256 word IDs) -# - Range: 64-1024 (smaller = leaner, larger = safer) -# - Usage: make ADAPTIVE_MIN_WINDOW_SIZE=512 (conservative) or 128 (lean) -$(eval $(call kconfig_int,ADAPTIVE_MIN_WINDOW_SIZE,256)) - -# Knob #10: ADAPTIVE_CHECK_FREQUENCY (how often to measure diversity) -# - Default: 512 (check after every 512 executions) -# - Range: 32-1024 (more = faster response, less = less overhead) -# - Usage: make ADAPTIVE_CHECK_FREQUENCY=128 (responsive) or 256 (default of comparable knobs) -$(eval $(call kconfig_int,ADAPTIVE_CHECK_FREQUENCY,512)) - -# Knob #11: ADAPTIVE_GROWTH_THRESHOLD (growth rate that signals saturation) -# - Default: 5 (shrink when growth < 5%) -# - Range: 0-10 (lower = eager shrinking, higher = cautious) -# - Usage: make ADAPTIVE_GROWTH_THRESHOLD=0 (aggressive) or 1 (less conservative) -$(eval $(call kconfig_int,ADAPTIVE_GROWTH_THRESHOLD,5)) - -# Knob #11a: INITIAL_DECAY_SLOPE_Q48 (Starting decay slope for inference engine) -# - Default: 21845 (1/3 in Q48.16 format, = 0.333... starting slope) -# - Range: 13107-43691 (0.2 to 0.67 in Q48.16) -# - Usage: make INITIAL_DECAY_SLOPE_Q48=13107 (0.2) or 32768 (0.5) or 43691 (0.67) -# - DoE: OPP #3 tests 0.2, 0.33, 0.5, 0.67 to find optimal starting point for convergence -# - Note: Inference engine adapts this value at runtime; this is just the cold-start value -$(eval $(call kconfig_int,INITIAL_DECAY_SLOPE_Q48,21845)) - -# Knob #11b: DECAY_MIN_INTERVAL (Minimum time before decay applies) -# - Default: 500 (nanoseconds) -# - Range: 500-5000 (balance between decay sensitivity and overhead) -# - Usage: make DECAY_MIN_INTERVAL=1000 (slower decay) or 2000 (slower still) -# - NOTE: as of the tick-based Loop #3 decay conversion (rev t, see -# docs/working/architecture/VM-FLEET-ATTRACTOR-DESIGN-20260705.md), -# Loop #3 no longer consults this value at all -- decay is gated on -# elapsed heartbeat ticks, not elapsed nanoseconds. Kept only because -# doe_metrics.c still reports it as a metrics field; informational, -# not load-bearing. -$(eval $(call kconfig_int,DECAY_MIN_INTERVAL,500)) - -# Knob #11d: HEARTBEAT_INFERENCE_FREQUENCY (How often to run inference engine) -# - Default: 1000 (ticks between inference runs) -# - Set VERY HIGH (999999) to effectively disable inference (static mode) -# - Set LOW for frequent inference (adaptive mode) -# - DoE: OPP #3 tests 999999 (static, no Loop #6) vs 1000 (adaptive, with Loop #6) -# - Measures: Inference engine cost vs benefit in optimized performance -$(eval $(call kconfig_int,HEARTBEAT_INFERENCE_FREQUENCY,1000)) - -# Knob #12: DECAY_RATE_PER_US_Q16 (Heat decay rate in Q16 fixed-point) -# - Default: 1 (1/65536 heat units decayed per microsecond) -# - Range: 0-65536 (0 = no decay, 65536 = 1 heat/µs) -# - Half-life: ~6.5 seconds at default (100-heat word → 50-heat in 6.5s) -# - Usage: make DECAY_RATE_PER_US_Q16=2 (faster decay) or 0 (no decay for baseline) -# - DoE: Vary this to measure impact of heat decay on performance -$(eval $(call kconfig_int,DECAY_RATE_PER_US_Q16,1)) - -# L8 Jacquard mode selector thresholds (ssm_jacquard.h). Previously unwired -- -# no Makefile knob or -D forwarding existed for these before the Kconfig -# migration's Phase 3; ssm_jacquard.h's own #ifndef fallback was the only -# place any of these five values lived. See Kconfig.physics for the -# rationale behind modeling the four float thresholds as Kconfig `string` -# symbols (Kconfig has no native float type). -$(eval $(call kconfig_int,SSM_ENTROPY_HIGH_THRESHOLD,0.75)) -$(eval $(call kconfig_int,SSM_CV_HIGH_THRESHOLD,0.15)) -$(eval $(call kconfig_int,SSM_TEMPORAL_DECAY_THRESHOLD,0.5)) -$(eval $(call kconfig_int,SSM_TEMPORAL_DECAY_LOW_THRESHOLD,0.3)) -$(eval $(call kconfig_int,SSM_HYSTERESIS_TICKS,5)) - -# Build the CFLAGS with tuning knobs -# L8 FINAL INTEGRATION: All experimental loop flags removed. -# L1-L7 are now always-on internal physics layers. -# L8 Jacquard mode selector is the sole policy engine. -BASE_CFLAGS = -std=c99 -Wall -Werror -Iinclude -Isrc/word_source -Isrc/test_runner/include \ - -DSTRICT_PTR=$(STRICT_PTR) \ - -DENABLE_HOTWORDS_CACHE=$(ENABLE_HOTWORDS_CACHE) \ - -DENABLE_PIPELINING=$(ENABLE_PIPELINING) \ - -DROLLING_WINDOW_SIZE=$(ROLLING_WINDOW_SIZE) \ - -DTRANSITION_WINDOW_SIZE=$(TRANSITION_WINDOW_SIZE) \ - -DSPECULATION_THRESHOLD_Q48=$(SPECULATION_THRESHOLD_Q48) \ - -DSPECULATION_DEPTH=$(SPECULATION_DEPTH) \ - -DMIN_SAMPLES_FOR_SPECULATION=$(MIN_SAMPLES_FOR_SPECULATION) \ - -DMISPREDICTION_COST_Q48=$(MISPREDICTION_COST_Q48) \ - -DMINIMUM_PREFETCH_ROI=$(MINIMUM_PREFETCH_ROI) \ - -DADAPTIVE_SHRINK_RATE=$(ADAPTIVE_SHRINK_RATE) \ - -DADAPTIVE_MIN_WINDOW_SIZE=$(ADAPTIVE_MIN_WINDOW_SIZE) \ - -DADAPTIVE_CHECK_FREQUENCY=$(ADAPTIVE_CHECK_FREQUENCY) \ - -DADAPTIVE_GROWTH_THRESHOLD=$(ADAPTIVE_GROWTH_THRESHOLD) \ - -DINITIAL_DECAY_SLOPE_Q48=$(INITIAL_DECAY_SLOPE_Q48) \ - -DDECAY_RATE_PER_US_Q16=$(DECAY_RATE_PER_US_Q16) \ - -DHEARTBEAT_THREAD_ENABLED=$(HEARTBEAT_THREAD_ENABLED) \ - -DHEARTBEAT_TICK_NS=$(HEARTBEAT_TICK_NS) \ - -DHEARTBEAT_INFERENCE_FREQUENCY=$(HEARTBEAT_INFERENCE_FREQUENCY) \ - -DHEARTBEAT_CHECK_FREQUENCY=$(HEARTBEAT_CHECK_FREQUENCY) \ - -DHEARTBEAT_WINDOW_TUNING_FREQUENCY=$(HEARTBEAT_WINDOW_TUNING_FREQUENCY) \ - -DHEARTBEAT_SLOPE_VALIDATION_FREQUENCY=$(HEARTBEAT_SLOPE_VALIDATION_FREQUENCY) \ - -DEMERGENCY_CONSOLE_ENABLED=$(EMERGENCY_CONSOLE_ENABLED) \ - -DSSM_ENTROPY_HIGH_THRESHOLD=$(SSM_ENTROPY_HIGH_THRESHOLD) \ - -DSSM_CV_HIGH_THRESHOLD=$(SSM_CV_HIGH_THRESHOLD) \ - -DSSM_TEMPORAL_DECAY_THRESHOLD=$(SSM_TEMPORAL_DECAY_THRESHOLD) \ - -DSSM_TEMPORAL_DECAY_LOW_THRESHOLD=$(SSM_TEMPORAL_DECAY_LOW_THRESHOLD) \ - -DSSM_HYSTERESIS_TICKS=$(SSM_HYSTERESIS_TICKS) - -ifeq ($(HEARTBEAT_THREAD_ENABLED),1) -# HISTORICAL: this used to branch on L4RE (no pthreads there) -- -# THREAD_FLAGS := if L4RE else -pthread. L4Re support is no longer an -# active target; see "Platform support" below. -THREAD_FLAGS := -pthread -else -THREAD_FLAGS := -endif - -BASE_CFLAGS += $(THREAD_FLAGS) - -# Build profiles (TARGET values) -SUPPORTED_TARGETS := standard fast fastest turbo asan - -TARGET_DESCRIPTION_standard := Standard optimized build -TARGET_CFLAGS_standard := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O2 -flto=auto -fuse-linker-plugin -DNDEBUG \ - -DUSE_ASM_OPT=1 \ - -ffunction-sections -fdata-sections -fomit-frame-pointer \ - -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-strict-aliasing -TARGET_LDFLAGS_standard := -Wl,--gc-sections -s -flto=auto -fuse-linker-plugin -static $(THREAD_FLAGS) - -TARGET_DESCRIPTION_fast := Fast optimized build (no LTO, easier debugging) -TARGET_CFLAGS_fast := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -TARGET_LDFLAGS_fast := -s $(THREAD_FLAGS) - -TARGET_DESCRIPTION_fastest := Maximum performance build (ASM + LTO + direct threading) -TARGET_CFLAGS_fastest := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG \ - -flto=auto -fuse-linker-plugin -funroll-loops -finline-functions -fomit-frame-pointer -fno-plt -fno-semantic-interposition -TARGET_LDFLAGS_fastest := -flto=auto -fuse-linker-plugin -s -Wl,--gc-sections $(THREAD_FLAGS) - -TARGET_DESCRIPTION_turbo := Assembly-optimized build (no direct threading) -TARGET_CFLAGS_turbo := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O3 -DUSE_ASM_OPT=1 -DNDEBUG -flto -TARGET_LDFLAGS_turbo := -flto -s $(THREAD_FLAGS) - -TARGET_DESCRIPTION_asan := ASan/UBSan instrumented build for memory error detection -TARGET_CFLAGS_asan := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O1 -g \ - -fsanitize=address,undefined -fno-omit-frame-pointer -TARGET_LDFLAGS_asan := -fsanitize=address,undefined $(THREAD_FLAGS) - -define TARGET_POST_fastest - @echo "" - @echo "🎯 You've built the FASTEST FORTH IN THE WEST!" - @echo "" - @echo "Quick-draw benchmark:" - @time -f " ⏱️ Time: %E seconds" ./$(BINARY) -c ": BENCH 1000000 0 DO 1 2 + DROP LOOP ; BENCH BYE" 2>/dev/null || true -endef - -TARGET_DESCRIPTION := $(TARGET_DESCRIPTION_$(TARGET)) -ifeq ($(strip $(TARGET_DESCRIPTION)),) - $(error Unknown TARGET '$(TARGET)'. Supported targets: $(SUPPORTED_TARGETS)) -endif - -TARGET_CFLAGS_SELECTED := $(TARGET_CFLAGS_$(TARGET)) -TARGET_LDFLAGS_SELECTED := $(TARGET_LDFLAGS_$(TARGET)) -TARGET_POST := $(or $(TARGET_POST_$(TARGET)),@:) - -CFLAGS ?= $(TARGET_CFLAGS_SELECTED) -LDFLAGS ?= $(TARGET_LDFLAGS_SELECTED) - -CFLAGS += $(EXTRA_CFLAGS) -LDFLAGS += $(EXTRA_LDFLAGS) - -USE_ASM_OPT := $(if $(findstring -DUSE_ASM_OPT=1,$(CFLAGS)),1,0) -USE_LTO := $(if $(or $(findstring -flto,$(CFLAGS)),$(findstring -flto,$(LDFLAGS))),1,0) - -# Platform support -# -# HISTORICAL: L4Re/Fiasco.OC was a supported platform target (`make L4RE=1`) -# through mid-2026. Removed as an active target; src/platform/l4re/time.c -# is retained for reference but no longer wired into any build. To restore: -# reinstate the `else ifdef L4RE` branch below and the L4RE-conditional -# logic marked HISTORICAL elsewhere in this Makefile (search "L4RE"/"L4Re"). -# -# ifdef MINIMAL -# ... -# else ifdef L4RE -# CFLAGS += -D__l4__=1 -# PLATFORM_TIME_SRC = src/platform/l4re/time.c src/platform/platform_init.c -# PLATFORM_ALLOC_SRC = src/platform/alloc_kernel.c -# else -# ... -# endif -ifdef MINIMAL -# DISABLED 2026-07-08: this was never a finished feature, not a small bug. -# src/platform/starforth_minimal.c (referenced below) does not exist -# anywhere in the repo, and only 5 of ~90 source files under src/ have any -# STARFORTH_MINIMAL awareness despite -nostdlib -ffreestanding applying to -# the entire tree. Confirmed by trying it: even a throwaway empty stub for -# the missing file lets the build report "success" while linking a binary -# with no _start entry point (this build's specific -nostdlib/-static/ -# -pthread/-flto flag combination doesn't actually exclude libc, so most -# calls silently resolve anyway -- the illusion of success is the trap). -# Reviving this needs an actual freestanding platform layer written from -# scratch, not a quick fix -- failing loudly here instead of letting -# anyone hit a confusing compile error or, worse, a binary that "builds" -# but can't run. See .claude/CLAUDE.md's punch list for status. -$(error MINIMAL=1 build is disabled: incomplete freestanding platform layer, not currently supported. See the comment immediately above this line for why) -CFLAGS += -DSTARFORTH_MINIMAL=1 -nostdlib -ffreestanding -LDFLAGS += -nostdlib -PLATFORM_SRC = src/platform/starforth_minimal.c -PLATFORM_ALLOC_SRC = src/platform/alloc_kernel.c -else -PLATFORM_TIME_SRC = src/platform/linux/time.c src/platform/linux/io.c src/platform/platform_init.c -PLATFORM_ALLOC_SRC = src/platform/alloc_host.c -endif - -PLATFORM_COMMON_SRC = src/platform/threading.c $(PLATFORM_ALLOC_SRC) - -# Source and object files -SRC = $(wildcard src/*.c src/word_source/*.c src/test_runner/*.c src/test_runner/modules/*.c) $(PLATFORM_SRC) $(PLATFORM_TIME_SRC) $(PLATFORM_COMMON_SRC) -BUILD_ROOT ?= build -build_dir = $(BUILD_ROOT)/$(call canon_arch,$(or $2,$(ARCH)))/$1 -binary_path = $(call build_dir,$1,$2)/starforth -BUILD_DIR = $(call build_dir,$(TARGET),$(ARCH)) -BINARY = $(call binary_path,$(TARGET),$(ARCH)) -OBJ = $(patsubst src/%.c,$(BUILD_DIR)/%.o,$(SRC)) -ASM_FILES = $(patsubst src/%.c,$(BUILD_DIR)/%.s,$(SRC)) - -# Profiler support for test targets -PROFILE_LEVEL := $(strip $(PROFILE)) -ifeq ($(PROFILE_LEVEL),) -PROFILE_ARGS := -else -PROFILE_ARGS := --profile $(PROFILE_LEVEL) -PROFILE_REPORT ?= 1 -ifneq ($(strip $(PROFILE_REPORT)),0) -PROFILE_ARGS += --profile-report -endif -endif - -# Installation directories -PREFIX ?= . -BINDIR = $(PREFIX)/bin -MANDIR = $(PREFIX)/share/man/man1 -INFODIR = $(PREFIX)/share/info -DOCDIR = $(PREFIX)/share/doc/starforth -CONFDIR = $(PREFIX)/etc/starforth - -# ============================================================================== -# PHONY TARGETS -# ============================================================================== - -.PHONY: all banner help clean clean-obj clean-docs starkernel mkcapsule capsule-gen capsule-manifest -.PHONY: fastest fast turbo -.PHONY: rpi4 rpi4-cross rpi4-fastest riscv64-clang -.PHONY: minimal debug profile performance -.PHONY: test bench benchmark -.PHONY: asm sbom -.PHONY: docs api-docs docs-latex docs-isabelle isabelle-build isabelle-check info math-companion math-companion-clean -.PHONY: refinement-status refinement-init refinement-phase1 verify-defect refinement-annotate-check refinement-report -.PHONY: install uninstall package deb rpm -.PHONY: quality compile_commands clang_tidy cppcheck gcc_analyzer -.PHONY: FORCE version-info build-manifest - -# ============================================================================== -# MAIN TARGETS -# ============================================================================== - -all: banner $(BINARY) - @echo "" - @echo "✓ Build complete: $(BINARY)" - @echo " Architecture: $(ARCH_NAME)" - @echo " Profile: $(TARGET_DESCRIPTION) ($(TARGET))" - @echo " Output directory: $(BUILD_DIR)" - @echo " Optimizations: $(if $(findstring USE_ASM_OPT,$(CFLAGS)),Enabled,Disabled)" - @echo " Direct Threading: $(if $(findstring USE_DIRECT_THREADING,$(CFLAGS)),Enabled,Disabled)" - @mkdir -p lfs/$(ARCH_DIR) - @cp $(BINARY) lfs/$(ARCH_DIR)/starforth - @echo " LFS copy: lfs/$(ARCH_DIR)/starforth" - $(TARGET_POST) - -banner: - @echo "════════════════════════════════════════════════════════════" - @echo " ⚡ Building the Fastest Forth in the West! ⚡" - @echo "════════════════════════════════════════════════════════════" - @echo " Target Architecture: $(ARCH_NAME) ($(ARCH_DIR))" - @echo " Build Profile: $(TARGET_DESCRIPTION) ($(TARGET))" - @echo "" - -# ============================================================================== -# OPTIMIZATION BUILDS - The Fastest in the West -# ============================================================================== - -# Maximum performance - no compromises -fastest: - @echo "🏆 Building FASTEST configuration..." - @echo " - Architecture: $(ARCH_NAME)" - @echo " - Assembly optimizations: ENABLED" - @echo " - Direct threading: ENABLED" - @echo "" - @$(MAKE) TARGET=fastest all - -# Fast without LTO (easier debugging) -fast: - @echo "⚡ Building FAST configuration (no LTO for debugging)..." - @$(MAKE) TARGET=fast all - -# Assembly optimizations only (no direct threading) -turbo: - @echo "🚀 Building TURBO configuration (ASM only)..." - @$(MAKE) TARGET=turbo all - -# ============================================================================== -# PLATFORM-SPECIFIC BUILDS -# ============================================================================== - -# Raspberry Pi 4 - native build -rpi4: - @echo "🥧 Building for Raspberry Pi 4 (native)..." - @$(MAKE) ARCH=raspi TARGET=fastest CFLAGS="$(BASE_CFLAGS) -march=armv8-a+crc+simd -mtune=cortex-a72 -DARCH_ARM64=1 -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -flto" LDFLAGS="-flto -s" all - @echo "✓ Raspberry Pi build ready: $(call binary_path,fastest,raspi)" - -# Raspberry Pi 4 - cross-compile from x86_64 -rpi4-cross: - @echo "🥧 Cross-compiling for Raspberry Pi 4..." - @$(MAKE) ARCH=raspi TARGET=fastest CC=aarch64-linux-gnu-gcc \ - CFLAGS="$(BASE_CFLAGS) -march=armv8-a+crc+simd -mtune=cortex-a72 -DARCH_ARM64=1 -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -flto -static" \ - LDFLAGS="-flto -s -static" \ - all - @echo "✓ Cross-compiled binary ready: $(call binary_path,fastest,raspi)" - @echo " Copy to RPi4: scp $(call binary_path,fastest,raspi) pi@raspberrypi.local:~/" - -# Raspberry Pi 4 - maximum optimization -rpi4-fastest: - @echo "🥧⚡ Building FASTEST for Raspberry Pi 4..." - @$(MAKE) ARCH=raspi TARGET=fastest CC=aarch64-linux-gnu-gcc \ - CFLAGS="$(BASE_CFLAGS) -march=armv8-a+crc+simd+crypto -mtune=cortex-a72 -DARCH_ARM64=1 -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -flto -funroll-loops -finline-functions" \ - LDFLAGS="-flto -s -static" \ - all - @echo "✓ Raspberry Pi FASTEST build ready: $(call binary_path,fastest,raspi)" - -# RISC-V 64 - cross-compile via clang (GCC fails to build this tree under -# -std=c99: a nanosleep visibility failure, not yet root-caused — see -# docs/lithosananke/hosted-acceptance-test/README.md and -# docs/working/archive/session-logs/2026-07-24-punch-list.md item #3). -# CFLAGS deliberately does NOT reuse $(BASE_CFLAGS): BASE_CFLAGS hardcodes -# -std=c99, and clang needs -std=c11 -pthread here. This mirrors the exact -# recipe verified in the hosted-acceptance-test doc, kept in sync with it. -riscv64-clang: - @echo "🦀 Cross-compiling for RISC-V 64 (clang)..." - @$(MAKE) ARCH=riscv64 TARGET=fastest \ - CC="clang-18 --target=riscv64-linux-gnu --sysroot=/usr/riscv64-linux-gnu" \ - CFLAGS="-std=c11 -pthread -Wall -Werror -Iinclude -Isrc/word_source -Isrc/test_runner/include -DSTRICT_PTR=1 -march=rv64gc -mabi=lp64d -mcmodel=medany -DARCH_RISCV64=1 -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -flto -static" \ - LDFLAGS="-flto -s -static -fuse-ld=lld" \ - all - @echo "✓ Cross-compiled binary ready: $(call binary_path,fastest,riscv64)" - @echo " Run: qemu-riscv64 $(call binary_path,fastest,riscv64)" - -# Minimal/embedded build -minimal: - $(MAKE) MINIMAL=1 - -# HISTORICAL: L4Re support removed as an active target (see "Platform -# support" above). This target cross-compiled a minimal build with the -# L4Re toolchain (l4-gcc) for smoke-testing without real L4Re headers. -# fake-l4re: -# $(MAKE) MINIMAL=1 CC=l4-gcc CFLAGS="$(BASE_CFLAGS) -DL4RE_TARGET=1" - -# ============================================================================== -# DEBUG & DEVELOPMENT BUILDS -# ============================================================================== - -# Debug build with symbols -debug: banner - @echo "🐛 Building DEBUG configuration..." - $(MAKE) CFLAGS="$(BASE_CFLAGS) -O0 -g -DDEBUG" LDFLAGS="" $(BINARY) - -# Build with profiler support -profile: - $(MAKE) CFLAGS="$(BASE_CFLAGS) -g -O1" $(BINARY) - -# Performance build (legacy alias - redirects to 'fastest') -performance: fastest - -# ============================================================================== -# BUILD RULES -# ============================================================================== - -# Generate version header from Makefile VERSION, ARCH, TARGET, and timestamp -include/version.h: FORCE - @mkdir -p include - @echo "Generating version header..." - @BUILD_TS=$$(date -Iseconds 2>/dev/null || echo "unknown"); \ - printf '#ifndef STARFORTH_VERSION_H\n#define STARFORTH_VERSION_H\n\n' > $@; \ - printf '#define STARFORTH_VERSION "%s"\n' "$(VERSION)" >> $@; \ - printf '#define STARFORTH_ARCH "%s"\n' "$(ARCH_NAME)" >> $@; \ - printf '#define STARFORTH_TARGET "%s"\n' "$(TARGET)" >> $@; \ - printf '#define STARFORTH_TIMESTAMP "%s"\n' "$$BUILD_TS" >> $@; \ - printf '#define STARFORTH_VERSION_FULL "StarForth v%s %s %s %s"\n\n' "$(VERSION)" "$(ARCH_NAME)" "$(TARGET)" "$$BUILD_TS" >> $@; \ - printf '#endif /* STARFORTH_VERSION_H */\n' >> $@ - -# Ensure version.h exists and is up-to-date before compilation -FORCE: - -# ============================================================================== -# CAPSULE SUBSYSTEM -# ============================================================================== - -CAPSULES_DIR ?= capsules -MKCAPSULE_SRC = tools/mkcapsule.c -MKCAPSULE_BIN = $(BUILD_DIR)/tools/mkcapsule -CAPSULE_GENERATED = $(BUILD_DIR)/capsule_generated.c -CAPSULE_GENERATED_OBJ = $(BUILD_DIR)/capsule_generated.o -CAPSULE_MANIFEST = $(CAPSULES_DIR)/MANIFEST_AUTO.md - -# Build the mkcapsule host tool -$(MKCAPSULE_BIN): $(MKCAPSULE_SRC) - @mkdir -p $(dir $@) - @echo " HOSTCC $<" - @$(CC) -O2 -Wall -o $@ $< - -# Run mkcapsule to generate the capsule directory C source -$(CAPSULE_GENERATED): $(MKCAPSULE_BIN) $(CAPSULES_DIR) - @mkdir -p $(dir $@) - @echo " MKCAP $(CAPSULES_DIR) -> $@" - @$(MKCAPSULE_BIN) $(CAPSULES_DIR) $@ - -# Compile the generated capsule directory -$(CAPSULE_GENERATED_OBJ): $(CAPSULE_GENERATED) | include/version.h - @mkdir -p $(dir $@) - @echo " CC $<" - @$(CC) $(CFLAGS) -c $< -o $@ - -.PHONY: mkcapsule capsule-gen capsule-manifest -mkcapsule: $(MKCAPSULE_BIN) -capsule-manifest: $(MKCAPSULE_BIN) - @echo " MANIFEST $(CAPSULES_DIR) -> $(CAPSULE_MANIFEST)" - @$(MKCAPSULE_BIN) --manifest $(CAPSULES_DIR) $(CAPSULE_MANIFEST) -capsule-gen: $(CAPSULE_GENERATED) capsule-manifest - -# starkernel: full capsule-aware build -# 1. Build mkcapsule tool -# 2. Generate capsule_generated.c from capsules/ -# 3. Compile StarForth with __STARKERNEL__ and capsule_generated.o linked in -starkernel: $(MKCAPSULE_BIN) $(CAPSULE_GENERATED_OBJ) - @$(MAKE) $(BINARY) \ - EXTRA_CFLAGS="-D__STARKERNEL__=1 -Iinclude" \ - EXTRA_OBJ="$(CAPSULE_GENERATED_OBJ)" - -# ============================================================================== -# Main executable -$(BINARY): $(OBJ) $(EXTRA_OBJ) - @echo "🔗 Linking $(BINARY)..." - @mkdir -p $(dir $@) - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) - -# Pattern rule for all C files (consolidates 5 repetitive rules) -# Order-only dependency: version.h must exist before compilation, but changes don't trigger rebuild -$(BUILD_DIR)/%.o: src/%.c | include/version.h - @mkdir -p $(dir $@) - @echo " CC $<" - @$(CC) $(CFLAGS) -c $< -o $@ -ifdef ASM - @$(CC) $(CFLAGS) -S $(ASM_SYNTAX) $< -o $(patsubst %.o,%.s,$@) -endif - -# Files that include version.h - rebuild when timestamp changes -$(BUILD_DIR)/main.o: include/version.h -$(BUILD_DIR)/cli.o: include/version.h -$(BUILD_DIR)/word_source/starforth_words.o: include/version.h - -# ============================================================================== -# TESTING & BENCHMARKING -# ============================================================================== - -# Quick benchmark -bench: $(BINARY) - @echo "" - @echo "🏇 Running quick-draw benchmark..." - @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - @echo "Test: 1 million stack operations" - @time -f "Time: %E seconds" ./$(BINARY) -c ": BENCH 1000000 0 DO 1 2 + DROP LOOP ; BENCH BYE" 2>/dev/null || echo "Benchmark complete" - @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - -# Full benchmark suite -benchmark: $(BINARY) - @echo "" - @echo "🎯 Full Benchmark Suite - Fastest Forth in the West" - @echo "════════════════════════════════════════════════════════════" - @echo "" - @echo "📊 Stack Operations (1M iterations):" - @time -f " ⏱️ %E seconds" ./$(BINARY) -c ": BENCH-STACK 1000000 0 DO 1 2 3 DROP DROP DROP LOOP ; BENCH-STACK BYE" 2>/dev/null || true - @echo "" - @echo "📊 Arithmetic Operations (1M iterations):" - @time -f " ⏱️ %E seconds" ./$(BINARY) -c ": BENCH-MATH 1000000 0 DO 10 20 + 5 * 100 / DROP LOOP ; BENCH-MATH BYE" 2>/dev/null || true - @echo "" - @echo "📊 Logic Operations (1M iterations):" - @time -f " ⏱️ %E seconds" ./$(BINARY) -c ": BENCH-LOGIC 1000000 0 DO 255 DUP AND DUP OR XOR DROP LOOP ; BENCH-LOGIC BYE" 2>/dev/null || true - @echo "" - @echo "════════════════════════════════════════════════════════════" - -# ============================================================================== -# ASSEMBLY OUTPUT & ANALYSIS -# ============================================================================== - -# Generate assembly files for inspection -asm: banner - @echo "📝 Generating assembly output..." - @echo " Cleaning to force rebuild..." - @$(MAKE) clean-obj > /dev/null 2>&1 - $(MAKE) ASM=1 CFLAGS="$(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1" LDFLAGS="" $(BINARY) - @echo "✓ Assembly files generated in $(BUILD_DIR)/" - @echo " Files generated: $$(find $(BUILD_DIR) -name '*.s' | wc -l)" - @echo " Example: less $(BUILD_DIR)/stack_management.s" - -# Generate Software Bill of Materials (SBOM) in SPDX format -sbom: - @echo "📋 Generating SBOM (Software Bill of Materials)..." - @if ! which syft >/dev/null 2>&1; then \ - echo "Error: syft not found. Install from https://github.com/anchore/syft"; \ - exit 1; \ - fi - @syft dir:. -o spdx-json=sbom.spdx.json -o spdx=sbom.spdx \ - --source-name LithosAnanke \ - --source-version $(VERSION) \ - --exclude './build/**' --exclude './tools/**' --exclude './.git/**' - @echo "✅ SBOM generated:" - @echo " SPDX JSON: sbom.spdx.json" - @echo " SPDX: sbom.spdx" - @echo " Version: $(VERSION)" - -# ============================================================================== -# DOCUMENTATION -# ============================================================================== - -# Generate API documentation (Doxygen XML → AsciiDoc) -api-docs: - @echo "📚 Generating API documentation from Doxygen..." - @if [ ! -f scripts/generate-doxygen-appendix.sh ]; then \ - echo "Error: scripts/generate-doxygen-appendix.sh not found"; \ - exit 1; \ - fi - @./scripts/generate-doxygen-appendix.sh - @echo "✅ API documentation generated: docs/src/appendix/" - -# ---------------------------------------------------------------------------- -# Math companion to the SSRN paper. -# Builds docs/SSRN_companion/Math_Companion_SSRN.pdf from the LaTeX source. -# Requires: pdflatex (texlive-latex-base, texlive-latex-extra, texlive-science). -# ---------------------------------------------------------------------------- -math-companion: - @echo "Building SSRN math companion (docs/SSRN_companion/Math_Companion_SSRN.pdf)..." - @if ! command -v pdflatex >/dev/null 2>&1; then \ - echo "Error: pdflatex not found."; \ - echo " Install with: apt-get install texlive-latex-base texlive-latex-extra texlive-science"; \ - exit 1; \ - fi - @cd docs/SSRN_companion && \ - pdflatex -interaction=nonstopmode -halt-on-error Math_Companion_SSRN.tex >/dev/null && \ - pdflatex -interaction=nonstopmode -halt-on-error Math_Companion_SSRN.tex >/dev/null && \ - pdflatex -interaction=nonstopmode -halt-on-error Math_Companion_SSRN.tex >/dev/null - @echo "Built: docs/SSRN_companion/Math_Companion_SSRN.pdf" - @cd docs/SSRN_companion && ls -lh Math_Companion_SSRN.pdf | awk '{print " Size:", $$5, " Pages: see pdfinfo"}' - -math-companion-clean: - @rm -f docs/SSRN_companion/Math_Companion_SSRN.{aux,log,out,toc,lof,lot,nav,snm,vrb} - @rm -f docs/SSRN_companion/Math_Companion_SSRN.pdf - @echo "Cleaned math companion build artifacts." - -# Convert all AsciiDoc to LaTeX -docs-latex: - @echo "📄 Converting AsciiDoc to LaTeX..." - @if [ ! -f scripts/asciidoc-to-latex.sh ]; then \ - echo "Error: scripts/asciidoc-to-latex.sh not found"; \ - exit 1; \ - fi - @./scripts/asciidoc-to-latex.sh - @echo "✅ LaTeX files generated: docs/latex/" - -# Build and verify Isabelle theories -isabelle-build: - @echo "🔬 Building Isabelle formal verification theories..." - @if ! command -v $(ISABELLE) >/dev/null 2>&1; then \ - echo "Error: Isabelle not found: $(ISABELLE)"; \ - echo " Install Isabelle or set ISABELLE variable"; \ - exit 1; \ - fi - @echo " Using: $$(command -v $(ISABELLE))" - @echo " Building StarForth_Formal session (VM + Physics)..." - @cd docs/src/internal/formal && $(ISABELLE) build -v -d . StarForth_Formal - @echo "✅ Isabelle theories verified successfully" - -# Quick check of Isabelle theories (faster than full build) -isabelle-check: - @echo "🔬 Quick-checking Isabelle theories..." - @if ! command -v $(ISABELLE) >/dev/null 2>&1; then \ - echo "Error: Isabelle not found: $(ISABELLE)"; \ - exit 1; \ - fi - @cd docs/src/internal/formal && \ - for thy in *.thy; do \ - echo " Checking $$thy..."; \ - $(ISABELLE) process -T "$$thy" 2>&1 | head -5; \ - done - @echo "✅ Quick check complete" - -# Generate comprehensive Isabelle documentation (for auditing & CI/CD) -# This generates documentation and verification reports regardless of proof status -# Suitable for Jenkinsfile pipelines - shows complete state including errors -docs-isabelle: - @echo "📚 Generating comprehensive Isabelle documentation (audit mode)..." - @mkdir -p docs/src/isabelle - @echo "" - @echo "Step 1: Attempting to verify Isabelle theories..." - @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - @cd docs/src/internal/formal && \ - if $(ISABELLE) build -v -d . StarForth_Formal > "$(CURDIR)/docs/src/isabelle/build.log" 2>&1; then \ - echo "✅ All theories verified successfully"; \ - else \ - echo "⚠️ Some theories have incomplete proofs (see build.log for details)"; \ - fi - @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - @echo "" - @echo "Step 2: Generating documentation from theory source..." - @if [ ! -f scripts/isabelle-to-adoc.sh ]; then \ - echo "⚠️ Warning: scripts/isabelle-to-adoc.sh not found"; \ - echo " Creating default script..."; \ - mkdir -p scripts; \ - echo '#!/bin/bash' > scripts/isabelle-to-adoc.sh; \ - echo 'echo "Generating Isabelle theory reports to AsciiDoc..."' >> scripts/isabelle-to-adoc.sh; \ - echo 'cd docs/src/internal/formal' >> scripts/isabelle-to-adoc.sh; \ - echo 'for thy in *.thy; do' >> scripts/isabelle-to-adoc.sh; \ - echo ' base=$$(basename "$$thy" .thy)' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "= $$base Theory" > "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "Formal verification theory for StarForth VM." >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "== Theory Source" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "[source,isabelle]" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "----" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' cat "$$thy" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo ' echo "----" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ - echo 'done' >> scripts/isabelle-to-adoc.sh; \ - chmod +x scripts/isabelle-to-adoc.sh; \ - fi - @bash scripts/isabelle-to-adoc.sh - @echo "" - @echo "Step 3: Creating audit summary..." - @echo "✅ Comprehensive Isabelle documentation generated: docs/src/isabelle/" - @echo "" - @echo "📂 Documentation includes:" - @echo " • index.adoc - Master index of all theories" - @echo " • VERIFICATION_REPORT.adoc - Audit report" - @echo " • .adoc - Individual theory documentation with source" - @echo " • build.log - Isabelle build output (verification status)" - -# ============================================================================== -# REFINEMENT VERIFICATION (C ⊑ Isabelle) -# ============================================================================== - -# Refinement status dashboard -refinement-status: - @echo "════════════════════════════════════════════════════════════" - @echo " StarForth C ⊑ Isabelle Refinement Status" - @echo "════════════════════════════════════════════════════════════" - @echo "" - @if [ ! -f docs/REFINEMENT_CAPA.adoc ]; then \ - echo "⚠️ No REFINEMENT_CAPA.adoc found. Initialize with: make refinement-init"; \ - echo ""; \ - echo "Refinement infrastructure status: UNINITIALIZED"; \ - else \ - echo "📋 Defect Summary:"; \ - echo ""; \ - echo -n " Total Defects: "; grep -c "^== DEFECT-" docs/REFINEMENT_CAPA.adoc || echo "0"; \ - echo -n " OPEN: "; grep "| OPEN" docs/REFINEMENT_CAPA.adoc | wc -l; \ - echo -n " IN-PROGRESS: "; grep "| IN-PROGRESS" docs/REFINEMENT_CAPA.adoc | wc -l; \ - echo -n " CLOSED: "; grep "| CLOSED" docs/REFINEMENT_CAPA.adoc | wc -l; \ - fi - @echo "" - @echo "🏆 Phase Status:" - @echo " Phase 1: vm.c core .............. NOT STARTED" - @echo " Phase 2: Root utilities ......... NOT STARTED" - @echo " Phase 3: Test harness .......... NOT STARTED" - @echo " Phase 4: Primitive dictionary .. NOT STARTED" - @echo " Phase 5: VM expansion .......... NOT STARTED" - @echo "" - @echo "📂 Documentation:" - @echo " • docs/REFINEMENT_CAPA.adoc - Defect tracking" - @echo " • docs/REFINEMENT_ANNOTATIONS.adoc - Code annotation guide" - @echo "" - @echo "Next steps: make refinement-phase1 (to start Phase 1 proofs)" - @echo "════════════════════════════════════════════════════════════" - -# Initialize refinement tracking -refinement-init: - @echo "Initializing refinement tracking..." - @if [ -f docs/REFINEMENT_CAPA.adoc ]; then \ - echo "✅ docs/REFINEMENT_CAPA.adoc already exists"; \ - else \ - echo "📋 Creating REFINEMENT_CAPA.adoc"; \ - fi - @if [ -f docs/REFINEMENT_ANNOTATIONS.adoc ]; then \ - echo "✅ docs/REFINEMENT_ANNOTATIONS.adoc already exists"; \ - else \ - echo "📋 Creating REFINEMENT_ANNOTATIONS.adoc"; \ - fi - @echo "✅ Refinement infrastructure ready" - @echo "" - @echo "Next: Review docs/REFINEMENT_ANNOTATIONS.adoc" - @echo " Then: make refinement-phase1" - -# Phase 1: VM Core refinement -refinement-phase1: - @echo "════════════════════════════════════════════════════════════" - @echo " ⚙️ PHASE 1: VM Core Refinement (C ⊑ Isabelle)" - @echo "════════════════════════════════════════════════════════════" - @echo "" - @echo "Building refinement proofs for:" - @echo " • stack_push / stack_pop (DEFECT-001, DEFECT-002)" - @echo " • execute_call / execute_return (DEFECT-002)" - @echo " • instruction_dispatch (DEFECT-003)" - @echo "" - @echo "Proof target: StarForth_Refinement (Isabelle theory)" - @if ! command -v $(ISABELLE) >/dev/null 2>&1; then \ - echo "Error: Isabelle not found. Install or set ISABELLE variable"; \ - exit 1; \ - fi - @echo "" - @echo "Step 1: Creating StarForth_Refinement.thy if needed..." - @if [ ! -f docs/src/internal/formal/StarForth_Refinement.thy ]; then \ - echo "Creating template..."; \ - mkdir -p docs/src/internal/formal; \ - touch docs/src/internal/formal/StarForth_Refinement.thy; \ - echo "TODO: Add refinement proofs here" > docs/src/internal/formal/StarForth_Refinement.thy; \ - fi - @echo "" - @echo "Step 2: Attempting to build refinement proofs..." - @echo "(This will fail until proofs are written)" - @cd docs/src/internal/formal && \ - $(ISABELLE) build -v -d . StarForth_Formal 2>&1 | tail -20 - @echo "" - @echo "📋 Next steps:" - @echo " 1. Review open defects: grep 'OPEN' docs/REFINEMENT_CAPA.adoc" - @echo " 2. Start working on DEFECT-001 (stack_push)" - @echo " 3. Add refinement proofs to StarForth_Refinement.thy" - @echo " 4. Run: make verify-defect DEFECT=001" - -# Verify specific defect resolution -verify-defect: - @if [ -z "$(DEFECT)" ]; then \ - echo "Usage: make verify-defect DEFECT=001"; \ - echo ""; \ - echo "Available defects:"; \ - grep "== DEFECT-" docs/REFINEMENT_CAPA.adoc | sed 's/== / /'; \ - exit 1; \ - fi - @echo "════════════════════════════════════════════════════════════" - @echo " 🔍 Verifying Resolution: $(DEFECT)" - @echo "════════════════════════════════════════════════════════════" - @echo "" - @if ! grep -q "== DEFECT-$(DEFECT):" docs/REFINEMENT_CAPA.adoc; then \ - echo "❌ DEFECT-$(DEFECT) not found in REFINEMENT_CAPA.adoc"; \ - exit 1; \ - fi - @echo "Defect Details:" - @grep -A 30 "== DEFECT-$(DEFECT):" docs/REFINEMENT_CAPA.adoc | head -35 - @echo "" - @echo "Next: Implement corrective action, then run this again" - -# Check code annotation coverage -refinement-annotate-check: - @echo "════════════════════════════════════════════════════════════" - @echo " 📝 Checking Code Annotation Coverage" - @echo "════════════════════════════════════════════════════════════" - @echo "" - @echo "Phase 1 target functions:" - @echo "" - @for func in stack_push stack_pop execute_instruction execute_call execute_return; do \ - if grep -q "REFINEMENT.*$$func\|void $$func" src/vm.c; then \ - if grep -q "REFINEMENT:" src/vm.c | grep -q "$$func"; then \ - echo " ✅ $$func - ANNOTATED"; \ - else \ - echo " ❌ $$func - MISSING ANNOTATION"; \ - fi; \ - else \ - echo " ⚠️ $$func - NOT FOUND"; \ - fi; \ +.PHONY: all boot_image boot_images docs clean clean-docs kernel boards help help-hosted + +# ------------------------------------------------------------------------------ +# all +# ------------------------------------------------------------------------------ +ifeq ($(TARGET),) +all: + @for b in $(READY_BOARDS); do \ + $(SUBMAKE) boot_image TARGET=$$b || exit 1; \ done + @$(SUBMAKE) -f v3/Makefile all + @$(SUBMAKE) docs @echo "" - @echo "Guide: docs/REFINEMENT_ANNOTATIONS.adoc" + @echo "Built:" + @for b in $(READY_BOARDS); do \ + d=$$(echo $$b | tr A-Z a-z); ls build/boards/$$d/*.img | sed 's/^/ /'; \ + done + @echo " build/docs/LithosAnanke.pdf" + @$(foreach b,$(UNREADY_BOARDS),echo "Skipped $(b): needs kernel/src/arch/$(call board_arch,$(b)), which does not exist yet";) +else ifneq ($(BOARD_DIR),) +all: + @$(SUBMAKE) boot_image TARGET=$(TARGET) + @$(SUBMAKE) docs TARGET=$(TARGET) +else +all: + @$(SUBMAKE) -f v3/Makefile all TARGET=$(TARGET) +endif -# Generate refinement report -refinement-report: - @echo "🔄 Generating refinement status report..." - @mkdir -p docs/reports - @echo "# StarForth Refinement Status" > docs/reports/refinement-status.md - @echo "" >> docs/reports/refinement-status.md - @echo "Generated: $$(date)" >> docs/reports/refinement-status.md - @echo "" >> docs/reports/refinement-status.md - @echo "## Summary" >> docs/reports/refinement-status.md - @echo "" >> docs/reports/refinement-status.md - @grep -c "== DEFECT-" docs/REFINEMENT_CAPA.adoc | xargs -I {} echo "Total Defects: {}" >> docs/reports/refinement-status.md - @echo "" >> docs/reports/refinement-status.md - @echo "See docs/REFINEMENT_CAPA.adoc for details" >> docs/reports/refinement-status.md - @echo "✅ Report: docs/reports/refinement-status.md" - -# Generate GNU info documentation -docs/starforth.info: - @if [ ! -f docs/starforth.texi ]; then \ - echo "⚠️ Skipping info docs: docs/starforth.texi not present"; \ - touch docs/starforth.info; \ - else \ - echo "📖 Building GNU info documentation..."; \ - if ! command -v makeinfo >/dev/null 2>&1; then \ - echo "Warning: makeinfo not found. Install with: sudo apt-get install texinfo"; \ - touch docs/starforth.info; \ - else \ - makeinfo docs/starforth.texi -o docs/starforth.info && \ - echo "✅ Info documentation: docs/starforth.info"; \ - fi; \ +# ------------------------------------------------------------------------------ +# boot images +# ------------------------------------------------------------------------------ +boot_image: + @if [ -z "$(BOARD_DIR)" ]; then \ + echo "Usage: make boot_image TARGET=<$(subst $(space),|,$(BOARDS))>"; \ + [ -z "$(TARGET)" ] || echo "Unknown board TARGET='$(TARGET)'"; \ + exit 1; \ fi + @if [ -z "$(call board_ready,$(TARGET))" ]; then \ + echo "Error: $(TARGET) needs the $(call board_arch,$(TARGET)) kernel port (kernel/src/arch/$(call board_arch,$(TARGET))), which does not exist yet."; \ + echo " $(call board_field,$(TARGET),BOARD_DESC)"; \ + exit 1; \ + fi + @$(SUBMAKE) -f kernel/Makefile \ + BOARD=$(BOARD_DIR) ARCH=$(call board_arch,$(TARGET)) TARGET=kernel boot_image -# Generate all documentation -docs: api-docs docs-isabelle - @echo "✅ All documentation generated!" - @echo "" - @echo "📂 Documentation locations:" - @echo " • API docs: docs/src/appendix/" - @echo " • Isabelle docs: docs/src/isabelle/" - @echo " • LaTeX: docs/latex/" +boot_images: + @for b in $(READY_BOARDS); do \ + $(SUBMAKE) boot_image TARGET=$$b || exit 1; \ + done + @$(foreach b,$(UNREADY_BOARDS),echo "Skipped $(b): needs kernel/src/arch/$(call board_arch,$(b)), which does not exist yet";) + +# ------------------------------------------------------------------------------ +# docs +# ------------------------------------------------------------------------------ +docs: + @if [ -n "$(TARGET)" ] && [ -z "$(BOARD_DIR)" ]; then \ + echo "Error: make docs takes TARGET=<$(subst $(space),|,$(BOARDS))> or no TARGET; '$(TARGET)' is not a board."; \ + exit 1; \ + fi + @$(SUBMAKE) -f docs/book/Makefile BOARD=$(BOARD_DIR) BOARD_NAME=$(TARGET) -# Clean generated documentation clean-docs: - @echo "🗑️ Cleaning generated documentation..." - @rm -rf docs/src/appendix/ docs/latex/ docs/src/isabelle/ - @echo "✅ Documentation cleaned" - -# ============================================================================== -# INSTALLATION -# ============================================================================== - -install: $(BINARY) - @echo "📦 Installing StarForth to $(PREFIX)..." - @install -d $(BINDIR) - @install -m 755 $(BINARY) $(BINDIR)/starforth - @echo " ✓ Binary installed: $(BINDIR)/starforth" - @if [ -f capsules/init.4th ]; then \ - install -d $(CONFDIR); \ - install -m 644 capsules/init.4th $(CONFDIR)/init.4th; \ - echo " ✓ Config installed: $(CONFDIR)/init.4th"; \ - fi - @if [ -f man/starforth.1 ]; then \ - install -d $(MANDIR); \ - install -m 644 man/starforth.1 $(MANDIR)/starforth.1; \ - echo " ✓ Man page installed: $(MANDIR)/starforth.1"; \ - fi - @if [ -f docs/starforth.info ]; then \ - install -d $(INFODIR); \ - install -m 644 docs/starforth.info $(INFODIR)/starforth.info; \ - install-info --info-dir=$(INFODIR) $(INFODIR)/starforth.info 2>/dev/null || true; \ - echo " ✓ Info docs installed: $(INFODIR)/starforth.info"; \ - fi - @install -d $(DOCDIR) - @if [ -f README.md ]; then install -m 644 README.md $(DOCDIR)/; fi - @if [ -f QUICKSTART.md ]; then install -m 644 QUICKSTART.md $(DOCDIR)/; fi - @if ls docs/*.md >/dev/null 2>&1; then install -m 644 docs/*.md $(DOCDIR)/ 2>/dev/null || true; fi - @echo " ✓ Documentation installed: $(DOCDIR)/" - @echo "✅ Installation complete!" - -uninstall: - @echo "🗑️ Uninstalling StarForth from $(PREFIX)..." - @rm -f $(BINDIR)/starforth - @rm -f $(MANDIR)/starforth.1 - @install-info --delete --info-dir=$(INFODIR) $(INFODIR)/starforth.info 2>/dev/null || true - @rm -f $(INFODIR)/starforth.info - @rm -rf $(DOCDIR) - @rm -rf $(CONFDIR) - @echo "✅ Uninstall complete!" - -# ============================================================================== -# PACKAGING -# ============================================================================== - -# Build Debian package -deb: $(BINARY) - @echo "📦 Building Debian package..." - @if ! command -v fpm >/dev/null 2>&1; then \ - echo "Error: fpm not found. Install with: gem install fpm"; \ - echo " or: sudo apt-get install ruby-dev && gem install fpm"; \ - exit 1; \ - fi - @mkdir -p package/deb - @fpm -s dir -t deb \ - -n starforth \ - -v $(VERSION) \ - -a native \ - --description "StarForth - The Fastest Forth in the West" \ - --url "https://github.com/yourusername/starforth" \ - --maintainer "StarForth Team" \ - --license "MIT" \ - --category "devel" \ - --package package/deb/ \ - --deb-compression xz \ - $(BINARY)=/usr/bin/starforth \ - capsules/init.4th=/etc/starforth/init.4th \ - README.md=/usr/share/doc/starforth/README.md - @echo "✅ Debian package created: package/deb/starforth_$(VERSION)_*.deb" - -# Build RPM package -rpm: $(BINARY) - @echo "📦 Building RPM package..." - @if ! command -v fpm >/dev/null 2>&1; then \ - echo "Error: fpm not found. Install with: gem install fpm"; \ - exit 1; \ - fi - @mkdir -p package/rpm - @fpm -s dir -t rpm \ - -n starforth \ - -v $(VERSION) \ - -a native \ - --description "StarForth - The Fastest Forth in the West" \ - --url "https://github.com/yourusername/starforth" \ - --maintainer "StarForth Team" \ - --license "MIT" \ - --category "Development/Languages" \ - --package package/rpm/ \ - $(BINARY)=/usr/bin/starforth \ - capsules/init.4th=/etc/starforth/init.4th \ - README.md=/usr/share/doc/starforth/README.md - @echo "✅ RPM package created: package/rpm/starforth-$(VERSION)-*.rpm" - -# Build all packages -package: deb rpm - @echo "" - @echo "✅ All packages built successfully!" - @echo " Debian: package/deb/" - @echo " RPM: package/rpm/" - -# ============================================================================== -# VERSIONING & BUILD MANIFEST (Workflow/Governance Integration) -# ============================================================================== - -# Parse version from include/version.h -GET_VERSION = $(shell grep "define STARFORTH_VERSION" include/version.h | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+' | head -1) - -.PHONY: version-info -version-info: - @echo "Current Version: $(GET_VERSION)" - @grep "STARFORTH_VERSION" include/version.h | grep define - -.PHONY: build-manifest -build-manifest: $(BINARY) - @echo "📋 Generating BUILD_MANIFEST.json..." - @mkdir -p builds/manifest - @VERSION=$$(grep "STARFORTH_VERSION_STRING" include/version.h | grep -o '"[^"]*"' | tr -d '"'); \ - GIT_HASH=$$(git rev-parse --short HEAD 2>/dev/null || echo "0000000"); \ - GIT_BRANCH=$$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown"); \ - BUILD_TIME=$$(date -Iseconds); \ - BINARY_PATH="$(BINARY)"; \ - if [ -f "$$BINARY_PATH" ]; then \ - BINARY_SHA256=$$(sha256sum "$$BINARY_PATH" | awk '{print $$1}'); \ - else \ - BINARY_SHA256="not-built"; \ - fi; \ - cat > builds/manifest/BUILD_MANIFEST.json << EOF; \ -{ \ - "version": "$$VERSION", \ - "timestamp": "$$BUILD_TIME", \ - "git": { \ - "commit_hash": "$$GIT_HASH", \ - "branch": "$$GIT_BRANCH", \ - "tag": "v$$VERSION" \ - }, \ - "build": { \ - "timestamp": "$$BUILD_TIME", \ - "compiler": "$$(gcc --version | head -1)", \ - "compiler_flags": "$(CFLAGS) $(ARCH_FLAGS)", \ - "target_architecture": "$(ARCH_NAME)", \ - "use_asm_opt": $(USE_ASM_OPT), \ - "use_lto": $(USE_LTO) \ - }, \ - "testing": { \ - "total_tests": 936, \ - "passed_tests": 0, \ - "failed_tests": 0, \ - "code_coverage_percent": 0, \ - "smoke_test_result": "N/A" \ - }, \ - "binary": { \ - "path": "$$BINARY_PATH", \ - "sha256": "$$BINARY_SHA256" \ - }, \ - "signatures": { \ - "builder": "jenkins-agent", \ - "approval_timestamp": "$(shell date -Iseconds)" \ - } \ -} \ -EOF - @echo "✓ BUILD_MANIFEST created: builds/manifest/BUILD_MANIFEST.json" - @cat builds/manifest/BUILD_MANIFEST.json | head -20 - -# ============================================================================== -# CLEANUP -# ============================================================================== + rm -rf build/docs +# ------------------------------------------------------------------------------ +# clean +# ------------------------------------------------------------------------------ +ifeq ($(TARGET),) clean: - @echo "🧹 Cleaning build artifacts..." - @rm -rfv build/* - @rm -f src/*.gcda src/word_source/*.gcda src/*.gcno src/word_source/*.gcno - @echo "✓ Clean complete" + @if [ -d build ]; then find build -mindepth 1 -maxdepth 1 ! -name cache -exec rm -rf {} +; fi + rm -f v3/include/version.h + rm -f v3/src/*.gcda v3/src/*.gcno v3/src/word_source/*.gcda v3/src/word_source/*.gcno + @echo "Cleaned build/ (kept build/cache/)" +else ifneq ($(BOARD_DIR),) +clean: + rm -rf build/boards/$(BOARD_DIR) build/$(call board_arch,$(TARGET))/kernel build/docs/$(BOARD_DIR) \ + build/docs/LithosAnanke-$(BOARD_DIR).pdf +else +clean: + rm -rf build/*/$(TARGET) +endif -clean-obj: - @echo "🧹 Cleaning object files..." - @find build -name "*.o" -type f -delete 2>/dev/null || true - @echo "✓ Object files cleaned" +# ------------------------------------------------------------------------------ +# misc +# ------------------------------------------------------------------------------ +GOAL ?= all +kernel: + @$(SUBMAKE) -f kernel/Makefile TARGET=kernel $(GOAL) -# ============================================================================== -# HELP -# ============================================================================== +boards: + @$(foreach b,$(BOARDS),printf ' %-9s %-8s %s\n' "$(b)" \ + "$(if $(call board_ready,$(b)),ready,no port)" "$(call board_field,$(b),BOARD_DESC)";) help: - @echo "════════════════════════════════════════════════════════════" - @echo " ⚡ StarForth Build System - Fastest in the West! ⚡" - @echo "════════════════════════════════════════════════════════════" - @echo "" - @echo "🛠️ Variables:" - @echo " ARCH= (default: $(ARCH); canonical directory: $(ARCH_DIR))" - @echo " TARGET= (standard | fast | fastest | turbo)" - @echo "" - @echo "🏆 OPTIMIZATION BUILDS:" - @echo " fastest - Maximum performance (ASM + direct threading + LTO)" - @echo " fast - Fast without LTO (easier debugging)" - @echo " turbo - Assembly optimizations only" - @echo "" - @echo "🥧 PLATFORM-SPECIFIC BUILDS:" - @echo " rpi4 - Native build on Raspberry Pi 4" - @echo " rpi4-cross - Cross-compile from x86_64" - @echo " rpi4-fastest - Maximum optimization for RPi4" - @echo " riscv64-clang - Cross-compile for RISC-V 64 via clang (GCC fails here)" - @echo " minimal - Minimal/embedded build" - @echo "" - @echo "🔧 DEBUG & DEVELOPMENT:" - @echo " all - Standard optimized build (default)" - @echo " debug - Debug build with symbols (-g -O0)" - @echo " profile - Build with profiling support" - @echo " performance - Legacy performance build (use 'fastest')" - @echo "" - @echo "🧪 TESTING & BENCHMARKING:" - @echo " test - Run full test suite" - @echo " bench - Quick benchmark" - @echo " benchmark - Full benchmark suite" - @echo "" - @echo "📝 ANALYSIS & DOCUMENTATION:" - @echo " asm - Generate assembly output" - @echo " sbom - Generate SBOM (Software Bill of Materials, SPDX)" - @echo " docs - Generate all documentation" - @echo " api-docs - Generate API docs (Doxygen → AsciiDoc)" - @echo " docs-latex - Convert AsciiDoc to LaTeX" - @echo " docs-isabelle - Generate Isabelle documentation for auditing (includes build log)" - @echo " isabelle-build - Build and verify Isabelle formal theories (strict verification)" - @echo " isabelle-check - Quick-check Isabelle theories" - @echo " info - Build GNU info documentation" - @echo "" - @echo "🔬 REFINEMENT VERIFICATION (C ⊑ Isabelle):" - @echo " refinement-init - Initialize refinement tracking (CAPA + annotations)" - @echo " refinement-status - Show refinement defect summary and phase status" - @echo " refinement-phase1 - Build Phase 1 refinement proofs (vm.c core)" - @echo " verify-defect - Verify specific defect (Usage: make verify-defect DEFECT=001)" - @echo " refinement-annotate-check - Check code annotation coverage" - @echo " refinement-report - Generate refinement status report" - @echo "" - @echo "📦 INSTALLATION & PACKAGING:" - @echo " install - Install to PREFIX (default: .)" - @echo " uninstall - Uninstall from PREFIX" - @echo " deb - Build Debian package" - @echo " rpm - Build RPM package" - @echo " package - Build all packages" - @echo "" - @echo "🧹 CLEANUP:" - @echo " clean - Remove all build artifacts" - @echo " clean-obj - Remove object files only" - @echo " clean-docs - Remove generated documentation" - @echo "" - @echo "⚙️ CONFIGURATION VARIABLES:" - @echo " CC - Compiler (default: gcc)" - @echo " CFLAGS - Compiler flags (override defaults)" - @echo " LDFLAGS - Linker flags (override defaults)" - @echo " PREFIX - Install prefix (default: .)" - @echo " MINIMAL=1 - Minimal build mode (DISABLED -- incomplete, errors out)" - @echo " ASM=1 - Generate assembly files during build" - @echo "" - @echo "📋 EXAMPLES:" - @echo " make fastest # Fastest build for current platform" - @echo " make rpi4-cross # Cross-compile for Raspberry Pi 4" - @echo " make riscv64-clang # Cross-compile for RISC-V 64 (clang)" - @echo " make asm # Generate assembly for inspection" - @echo " make debug # Debug build" - @echo " make PREFIX=/usr/local install # Install system-wide" - @echo "" - @echo "🌟 CURRENT PLATFORM: $(ARCH_NAME)" - @echo "════════════════════════════════════════════════════════════" + @sed -n '/^# TARGET is/,/^# =====/p' Makefile | sed '$$d; s/^# \{0,1\}//' -quality: compile_commands clang_tidy cppcheck gcc_analyzer +help-hosted: + @$(SUBMAKE) -f v3/Makefile help -compile_commands: - bear --output build/compile_commands.json -- make -j$(nproc) - -clang_tidy: - clang-tidy -p build $(shell find src -name '*.c' -o -name '*.h') | tee build/clang-tidy.txt - -cppcheck: - cppcheck --enable=all --inconclusive --std=c99 src 2> build/cppcheck.txt || true - -gcc_analyzer: - $(MAKE) clean - CFLAGS="$(CFLAGS) -fanalyzer -Wall -Wextra" $(MAKE) all 2>&1 | tee build/gcc-analyzer.txt +# Everything else is the hosted v3 build, unchanged. (The empty Makefile +# rule stops the match-anything rule from trying to remake this file.) +Makefile: ; +%: + @$(SUBMAKE) -f v3/Makefile $@ diff --git a/README.md b/README.md index f3d8355e..58957de6 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,25 @@ --- +## Products + +StarForth v4 moves the engine onto a 32-instruction core derived from Chuck Moore's F18 +(`docs/v4.0.0/`). With it, this repository carries three products, not one: + +| Product | What it is | +|---|---| +| **Hosted StarForth F18** | The v4 engine as a native Linux build, for amd64, arm64 and riscv64, on real hardware. | +| **FPGA StarForth F18** | A 32-bit build of the same engine loaded into the FPGA. It is the gateway to the rest: the foundation everything else is built up from. | +| **StarshipOS** | The bare-metal product: LithosAnanke running the v4 F18 engine. | + +FORTH-79 is recomposed on the F18 engine and stored as a capsule; the StarshipOS-specific +vocabulary gets the same treatment. The source tree will be reorganised around this split. + +v3 remains the reference system until v4 meets its acceptance criteria +(`docs/v4.0.0/JUSTIFICATION.md` §16). Everything below describes v3 as it stands today. + +--- + ## Status — M7.1 (Capsule System · Multi-VM Fleet) | Milestone | | Status | @@ -48,19 +67,39 @@ POST at boot: **parity hash verified across amd64/aarch64/riscv64 · Mama capsul ## Quick Start ```bash +# One boot image per physical target (output: build/boards//) +make boot_image TARGET=SER5 # Beelink SER5 -- GPT/ESP, BOOTX64.EFI +make boot_image TARGET=RASPI # Raspberry Pi 5 -- FAT, config.txt + kernel_2712.img + DTB +make boot_image TARGET=MILKV # Milk-V Mars -- GPT/ESP, BOOTRISCV64.EFI (U-Boot bootefi) +make boot_image TARGET=ZYNQ7020 # Zynq-7020 -- ARMv7 port in progress +make boards # list boards + +# The same TARGET drives all, docs and clean (make help) +make # every board with a kernel port + hosted v3 + the book +make TARGET=RASPI # one board's image + build/docs/LithosAnanke-raspi.pdf +make docs # build/docs/LithosAnanke.pdf (LaTeX master: docs/book/main.tex) +make clean TARGET=RASPI # that board's outputs and build/aarch64/kernel +make clean # all of build/ except build/cache/ + # Build kernel (requires cross-compilation toolchain, or native gcc) -make -f Makefile.starkernel ARCH=amd64 +make -f kernel/Makefile ARCH=amd64 # Run in QEMU with OVMF -make -f Makefile.starkernel qemu +make -f kernel/Makefile qemu # Other architectures -make -f Makefile.starkernel ARCH=aarch64 qemu -make -f Makefile.starkernel ARCH=riscv64 qemu +make -f kernel/Makefile ARCH=aarch64 qemu +make -f kernel/Makefile ARCH=riscv64 qemu ``` Artifacts: `build/amd64/kernel/starkernel_loader.efi` · `build/amd64/kernel/starkernel_kernel.elf` +Tree: `kernel/` (LithosAnanke: `Makefile`, `src/`, `include/starkernel/`, `linker/`), +`v3/` (StarForth v3 engine and hosted build: `Makefile`, `src/`, `include/`), +`v4/` (StarForth v4, see `docs/v4.0.0/`), `boards//` (`board.mk` + boot files). +Every makefile runs from the repo root; the root `Makefile` forwards any other goal to +`v3/Makefile` (hosted build). + For the hosted VM by itself (Linux, no cross-compiler needed, no bare-metal tooling): see the separate **StarForth** repository — LithosAnanke used to be a branch inside that repo, now it's its own project with its own `master`. @@ -69,12 +108,12 @@ now it's its own project with its own `master`. Every kernel-only knob (`STARFORTH_ENABLE_VM`, `PARITY_MODE`, the shared physics/heartbeat family, etc.) is an optional Kconfig symbol — a plain -`make -f Makefile.starkernel` uses the same defaults it always has unless +`make -f kernel/Makefile` uses the same defaults it always has unless you opt in: ```bash -make -f Makefile.starkernel ARCH=amd64 menuconfig -make -f Makefile.starkernel ARCH=amd64 kernel_amd64_defconfig +make -f kernel/Makefile ARCH=amd64 menuconfig +make -f kernel/Makefile ARCH=amd64 kernel_amd64_defconfig ``` --- diff --git a/boards/README.md b/boards/README.md new file mode 100644 index 00000000..3816786f --- /dev/null +++ b/boards/README.md @@ -0,0 +1,29 @@ +# boards/ + +One directory per physical target. `make boot_image TARGET=` (repo root) maps the +name to a directory here, reads its `board.mk`, and builds the single file that goes on +that board's boot medium into `build/boards//`. + +| TARGET | Directory | ISA | Boot path | Image | +|---|---|---|---|---| +| `SER5` | `ser5/` | amd64 | UEFI firmware, removable-media path | GPT + FAT32 ESP: `EFI/BOOT/BOOTX64.EFI` | +| `RASPI` | `raspi/` | aarch64 | Pi 5 EEPROM firmware, native | MBR + FAT32: `config.txt`, `kernel_2712.img`, `bcm2712-rpi-5-b.dtb` | +| `MILKV` | `milkv/` | riscv64 | SPI-flash U-Boot + OpenSBI, `bootefi` | GPT + FAT32 ESP: `EFI/BOOT/BOOTRISCV64.EFI` | +| `ZYNQ7020` | `zynq7020/` | armv7 | BootROM, `BOOT.BIN`, U-Boot | not yet: needs `kernel/src/arch/armv7` | + +`board.mk` sets: + +- `BOARD_DESC`: one-line description (`make boards`) +- `BOARD_ARCH`: kernel ISA (`kernel/src/arch/`) +- `BOARD_BOOT`: image recipe in `kernel/Makefile` (`uefi-esp`, `rpi-native`, ...) +- `BOARD_IMAGE`: output file name + +Disk images are assembled by `scripts/mkdiskimage.sh`, which needs no root access and no loop +devices. `KERNEL_ARGS="..."` is written as `starforth.cfg` (UEFI boards) or `cmdline.txt` +(Pi 5, where the firmware copies it into `/chosen/bootargs`). `BOOT_IMAGE_SIZE_MIB` sets the +image size; the default is 128. + +Hardware status: none of these images has been booted on real silicon from this build. The +SER5 image has been booted in QEMU (q35 + OVMF, from its own disk) through POST. The Pi 5 +native path (`raspi/README.md`) and the JH7110 peripherals have still only been checked by +compiling. diff --git a/boards/milkv/README.md b/boards/milkv/README.md new file mode 100644 index 00000000..63a9c99a --- /dev/null +++ b/boards/milkv/README.md @@ -0,0 +1,30 @@ +# Milk-V Mars boot media + +`make boot_image TARGET=MILKV` builds `build/boards/milkv/lithos-milkv.img`: a GPT disk with one +FAT32 EFI System Partition. Write it to an SD card with `dd`. The partition holds: + +- `EFI/BOOT/BOOTRISCV64.EFI`: the riscv64 monolithic loader, the same one QEMU boots. +- `startup.nsh`: for a UEFI shell, if one is used. +- `starforth.cfg`: only present when `KERNEL_ARGS="..."` is given. + +The board's own SPI-flash U-Boot, with OpenSBI underneath, finds the loader through its standard +`bootefi` scan of the removable-media path. U-Boot passes its devicetree to the loader through the +EFI configuration table. + +Status: booted in QEMU through the same chain the board uses: OpenSBI, then U-Boot +`qemu-riscv64_smode`, then `bootefi` from this image's ESP, then the loader and the kernel. POST +passed, Stadium conservation was exact (resident 43691 + reservoir 21845 = 65536 = `Q48_ONE`), and +Hestia and Artemis came up. Not yet booted on the Mars itself. The JH7110 peripherals +(framebuffer, RNG) have only been checked by compiling. + +To repeat the QEMU boot (`qemu-system-riscv64` is in Ubuntu 26.04's `qemu-system-riscv` package; +OpenSBI and U-Boot come from `opensbi` and `u-boot-qemu`). Use a copy, because the kernel writes +to its disk: + +``` +cp build/boards/milkv/lithos-milkv.img /tmp/mv.img +qemu-system-riscv64 -machine virt -cpu rv64 -m 2048 -nographic \ + -bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_dynamic.bin \ + -kernel /usr/lib/u-boot/qemu-riscv64_smode/u-boot.bin \ + -drive if=none,format=raw,file=/tmp/mv.img,id=d0 -device virtio-blk-device,drive=d0 +``` diff --git a/boards/milkv/board.mk b/boards/milkv/board.mk new file mode 100644 index 00000000..64ed1490 --- /dev/null +++ b/boards/milkv/board.mk @@ -0,0 +1,11 @@ +# boards/milkv/board.mk -- Milk-V Mars (StarFive JH7110, SiFive U74, RV64GC). +# +# The board's own SPI-flash U-Boot (OpenSBI underneath) runs the EFI +# application through its standard distro/bootefi scan: the SD card is a GPT +# disk with one FAT32 EFI System Partition holding EFI/BOOT/BOOTRISCV64.EFI, +# the same riscv64 monolithic loader QEMU boots. U-Boot passes its own +# devicetree through the EFI configuration table. +BOARD_DESC := Milk-V Mars (StarFive JH7110, RV64GC, U-Boot bootefi) +BOARD_ARCH := riscv64 +BOARD_BOOT := uefi-esp +BOARD_IMAGE := lithos-milkv.img diff --git a/boards/raspi/README.md b/boards/raspi/README.md new file mode 100644 index 00000000..d3e3e2d6 --- /dev/null +++ b/boards/raspi/README.md @@ -0,0 +1,20 @@ +# Raspberry Pi 5 native boot media + +`make boot_image TARGET=RASPI` builds `build/boards/raspi/lithos-raspi.img`: an MBR disk +with one FAT32 (LBA) partition. Write it to an SD card with `dd`. The partition holds: + +- `config.txt`: checked in here (FABRIC-3.md §IV.3 item 6). It pins `kernel_address=0x80000` + because Pi 5 firmware loads `kernel_2712.img` at 0x200000 by default. +- `kernel_2712.img`: the aarch64 kernel objects relinked at 0x80000 by + `kernel/linker/starkernel-native-rpi5.ld`, entered at `rpi5_native_start` + (`kernel/src/arch/aarch64/native_rpi5_entry.S`, which zeroes `.bss` first), and flattened + with `objcopy -O binary`. +- `bcm2712-rpi-5-b.dtb`: the Raspberry Pi firmware's own stock DTB. It is not built by this + project; it is fetched once from the firmware release pinned in `board.mk` + (`RPI_FIRMWARE_TAG`) into `build/cache/`. To use a local copy, pass `RPI5_DTB=/path/to/dtb`. +- `cmdline.txt`: only present when `KERNEL_ARGS="..."` is given. The firmware copies it into + `/chosen/bootargs`, which `rpi5_native_boot()` parses. + +Not yet verified on hardware. The native path still assumes everything `kernel_main()` +needs after a UEFI handoff. The firmware enters at EL2 with the MMU off, which is not what +UEFI hands over, and that difference has not been exercised. diff --git a/boards/raspi/board.mk b/boards/raspi/board.mk new file mode 100644 index 00000000..9555bbf9 --- /dev/null +++ b/boards/raspi/board.mk @@ -0,0 +1,18 @@ +# boards/raspi/board.mk -- Raspberry Pi 5 (BCM2712, Cortex-A76, aarch64). +# +# Native firmware boot, no UEFI (FABRIC-3.md §IV): the Pi 5 bootloader +# lives in EEPROM and reads config.txt, kernel_2712.img and the board DTB +# from the first FAT partition of the SD card. kernel_2712.img is the +# aarch64 kernel relinked at 0x80000 (kernel/linker/starkernel-native-rpi5.ld) +# and flattened to a raw binary. +# +# The DTB is the Raspberry Pi firmware's own stock file, not built here. It +# is fetched once from the pinned firmware release below into build/cache/ +# unless RPI5_DTB points at a local copy. +BOARD_DESC := Raspberry Pi 5 (BCM2712, Cortex-A76, native firmware boot) +BOARD_ARCH := aarch64 +BOARD_BOOT := rpi-native +BOARD_IMAGE := lithos-raspi.img +RPI_FIRMWARE_TAG ?= 1.20260915 +RPI5_DTB_URL ?= https://raw.githubusercontent.com/raspberrypi/firmware/$(RPI_FIRMWARE_TAG)/boot/bcm2712-rpi-5-b.dtb +RPI5_DTB ?= build/cache/raspi-$(RPI_FIRMWARE_TAG)/bcm2712-rpi-5-b.dtb diff --git a/boot_media/rpi5/config.txt b/boards/raspi/config.txt similarity index 91% rename from boot_media/rpi5/config.txt rename to boards/raspi/config.txt index 3f084b85..546b7491 100644 --- a/boot_media/rpi5/config.txt +++ b/boards/raspi/config.txt @@ -12,6 +12,13 @@ # firmware picks up. kernel=kernel_2712.img +# Pin the load address to the one the image is linked at +# (kernel/linker/starkernel-native-rpi5.ld). Pi 5 firmware's own default +# for kernel_2712.img is 0x200000, not the classic 0x80000 -- leaving it +# implicit would load a 0x80000-linked flat image 1.5 MiB away from where +# every absolute address in it points. +kernel_address=0x80000 + # Disable the firmware's Linux-compatible-image sanity check. Without # this, official docs describe it as checking for "a compatible Device # Tree file before attempting to boot" and warn that "older non-compatible diff --git a/boards/ser5/README.md b/boards/ser5/README.md new file mode 100644 index 00000000..af4eee17 --- /dev/null +++ b/boards/ser5/README.md @@ -0,0 +1,14 @@ +# Beelink SER5 boot media + +`make boot_image TARGET=SER5` builds `build/boards/ser5/lithos-ser5.img`: a GPT disk with one +FAT32 EFI System Partition. Write it to a USB stick with `dd`. The partition holds: + +- `EFI/BOOT/BOOTX64.EFI`: the amd64 monolithic loader, with the whole kernel embedded. Firmware + finds it through the UEFI removable-media path, so no boot entry has to be created. +- `startup.nsh`: runs the loader if the firmware drops into the UEFI shell. +- `starforth.cfg`: only present when `KERNEL_ARGS="..."` is given. + +Nothing in the image is SER5-specific. It follows the generic UEFI/ACPI path in FABRIC-3.md §III. + +Status: booted in QEMU (q35 + OVMF, from this image as its own disk) through POST, with Stadium +conservation exact (sum 65536 = `Q48_ONE`). Not yet booted on the SER5 itself. diff --git a/boards/ser5/board.mk b/boards/ser5/board.mk new file mode 100644 index 00000000..33df360f --- /dev/null +++ b/boards/ser5/board.mk @@ -0,0 +1,10 @@ +# boards/ser5/board.mk -- Beelink SER5 (AMD Ryzen, x86-64, UEFI/ACPI). +# +# Generic standards-compliant UEFI path (FABRIC-3.md §III): nothing in the +# image is SER5-specific. The monolithic loader embeds the whole kernel, so +# the image is a GPT disk with one FAT32 EFI System Partition holding +# EFI/BOOT/BOOTX64.EFI. Write it to a USB stick with dd. +BOARD_DESC := Beelink SER5 (AMD Ryzen, x86-64, UEFI) +BOARD_ARCH := amd64 +BOARD_BOOT := uefi-esp +BOARD_IMAGE := lithos-ser5.img diff --git a/boards/zynq7020/README.md b/boards/zynq7020/README.md new file mode 100644 index 00000000..b28cad8d --- /dev/null +++ b/boards/zynq7020/README.md @@ -0,0 +1,17 @@ +# Xilinx Zynq-7020 boot media + +The Zynq-7020's processing system is a dual Cortex-A9: ARMv7-A, 32-bit. It is the host for the +StarForth v4 mesh (`docs/v4.0.0/JUSTIFICATION.md` §5, §8). + +Boot chain: BootROM, then `BOOT.BIN` (U-Boot SPL with the board's `ps7_init` DDR and clock setup), +then U-Boot, then LithosAnanke. Everything is read from the SD card's FAT partition. + +Status: no image yet. `make boot_image TARGET=ZYNQ7020` stops with an error, because there is no +ARMv7 kernel port (`kernel/src/arch/armv7`: entry code, MMU, GIC, private timer). A trial +compile for Cortex-A9 built 147 of the 151 kernel and engine sources. The four that failed use +`__int128` or have no ARMv7 branch: `kernel/src/crypto/fe25519.c`, +`kernel/src/crypto/scalar25519.c`, `kernel/src/hal/hal.c` and +`v3/src/word_source/mixed_arithmetic_words.c`. + +`BOOT.BIN` depends on the exact board (Zybo Z7-20, PYNQ-Z2, Arty Z7-20, ZedBoard, ...), because +`ps7_init` holds that board's DDR timing. The board has not been chosen yet. diff --git a/boards/zynq7020/board.mk b/boards/zynq7020/board.mk new file mode 100644 index 00000000..9fbd1ab5 --- /dev/null +++ b/boards/zynq7020/board.mk @@ -0,0 +1,11 @@ +# boards/zynq7020/board.mk -- Xilinx Zynq-7020 (dual Cortex-A9, ARMv7-A, 32-bit). +# +# Boot chain: BootROM -> BOOT.BIN (U-Boot SPL with the board's ps7_init DDR/ +# clock setup) -> U-Boot -> LithosAnanke, all from the SD card's FAT +# partition. Needs the ARMv7 kernel port (kernel/src/arch/armv7), which is +# in progress: until it exists, boot_image stops with an explicit error +# rather than producing an image that cannot run. +BOARD_DESC := Xilinx Zynq-7020 (Cortex-A9, ARMv7-A, BOOT.BIN) -- ARMv7 port in progress +BOARD_ARCH := armv7 +BOARD_BOOT := zynq-bootbin +BOARD_IMAGE := lithos-zynq7020.img diff --git a/boot_media/rpi5/README.md b/boot_media/rpi5/README.md deleted file mode 100644 index a1f7cd4e..00000000 --- a/boot_media/rpi5/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Raspberry Pi 5 native boot media - -What goes on the SD card for the native (non-UEFI) boot path (FABRIC-3.md §IV): - -- `config.txt` — checked in here, done (§IV.3 item 6). -- `bcm2712-rpi-5-b.dtb` — Raspberry Pi firmware's own stock DTB; not built by this - project, copied from the firmware release the card is otherwise built from. -- `kernel_2712.img` — **does not exist yet.** `config.txt` names it, but no build target - in `Makefile.starkernel` currently emits a raw image by this name at load address - 0x80000 — item 1 (entry stub) explicitly scoped a separate-image build target as future - work, not part of that item. Building this file is the remaining prerequisite before - item 7 (assembling the card) is possible. diff --git a/capsules/BLOCK_MAP.md b/capsules/BLOCK_MAP.md index 57fdf053..733aa0a4 100644 --- a/capsules/BLOCK_MAP.md +++ b/capsules/BLOCK_MAP.md @@ -1,5 +1,5 @@ # Capsule Block Manifest — Auto-generated - + @@ -8,42 +8,46 @@ | Capsule | Blocks claimed | xxHash64 | Signed | |---------|----------------|----------|--------| -| `ACL.4th` | 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4015 | `0xf8890c05c0d8f921` | yes | -| `acl-std79.4th` | 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048 | `0x773bf9209df191d1` | yes | -| `artemis:init.4th` | 4110, 4111, 4112, 4113, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4177, 4178, 4179, 4180, 4181, 4182, 4851, 4852, 4853, 4854, 4856, 4857, 4858, 4860 | `0xe6fba9ae56e1c916` | yes | -| `block-acl.4th` | 4019, 4020 | `0xf6cc2a59e3a6734e` | yes | -| `doe-campaign.4th` | 4060, 4061, 4062, 4063, 4064, 4065 | `0x26fb485e5c9dc6ff` | yes | -| `doe.4th` | 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107 | `0xf154616d248e861f` | yes | -| `fabric.4th` | 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 5000, 5001, 5002 | `0x9d9489cbeca4099b` | yes | -| `font.4th` | 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985 | `0x3f305911500c78f6` | yes | -| `hestia:init.4th` | 4986, 4987, 4988 | `0x64e111990fbc45ff` | yes | -| `init-l8-diverse.4th` | 4820, 4821, 4822 | `0xaa293201a6c91838` | yes | -| `init-l8-omni.4th` | 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079 | `0x5979e314d6452045` | yes | -| `init-l8-stable.4th` | 4806 | `0xdc3830f189063a9a` | yes | -| `init-l8-temporal.4th` | 4830, 4831 | `0x51abd4c138246651` | yes | -| `init-l8-transition.4th` | 4840, 4841, 4842 | `0xbcc1a81976f0a4c9` | yes | -| `init-l8-volatile.4th` | 4810, 4811, 4812, 4813 | `0x98caabbbd92abac4` | yes | -| `init.4th` | 2049, 2050, 2057 | `0xea038ba684c53443` | yes | -| `lib.4th` | 4050 | `0x4b216635c359ef73` | yes | -| `multiuser-doe.4th` | 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055 | `0x22140588ee7c39e6` | yes | -| `sdk.4th` | 5109, 5110, 5111, 5112, 5113, 5114, 5115 | `0x008fdbbb62c94a3a` | yes | -| `turtle.4th` | 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108 | `0x4d470418ca543365` | yes | -| `user-font-demo.4th` | 4200, 4201, 4202 | `0xce1fd7d1b581a56d` | yes | -| `workload-0.4th` | 2200, 2201 | `0x93f86f60aeba8feb` | yes | -| `workload-1-lite.4th` | 5058, 5059 | `0x44a7a7e3176dcc8d` | yes | -| `workload-1.4th` | 4406, 4415, 4425, 4435 | `0x63e251adb0a03613` | yes | -| `workload-2.4th` | 4506, 4515, 4525, 4535, 4545 | `0xf113b3d0bcccae47` | yes | -| `workload-3.4th` | 4606, 4615, 4625, 4635, 4645, 4655, 4665 | `0x62b7a71576ad1041` | yes | -| `workload-4.4th` | 2130, 2131, 2132 | `0x099619264e650b1c` | yes | -| `workload-5-lite.4th` | 5056, 5057 | `0xea0303f38824f254` | yes | -| `workload-5.4th` | *(none — raw code capsule)* | `0x526964c7c9506a11` | yes | -| `workload-6.4th` | 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095 | `0x06fc0ce1e369ef5a` | yes | -| `workload-7.4th` | 2150 | `0x02862291387eb7ac` | yes | -| `workload-8.4th` | 2160 | `0x56b7f2f0efa000df` | yes | -| `workload-9.4th` | 4706, 4715, 4725, 4735, 4745 | `0x3f2bec73142aa424` | yes | -| `workload-calib1.4th` | 5043 | `0x3b9f2d17b554fabc` | yes | -| `zuse-eligibility.4th` | 4021, 4022 | `0x7b28f4776a32e0b7` | yes | -| `zuse.4th` | 4016, 4017, 4018 | `0x490ded9be257a90b` | yes | +| `ACL.4th` | 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4015 | `0xf8890c05c0d8f921` | n/a | +| `acl-std79.4th` | 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048 | `0x773bf9209df191d1` | n/a | +| `artemis:init.4th` | 4110, 4111, 4112, 4113, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4177, 4178, 4179, 4180, 4181, 4182, 4851, 4852, 4853, 4854, 4856, 4857, 4858, 4860 | `0xe6fba9ae56e1c916` | n/a | +| `block-acl.4th` | 4019, 4020 | `0xf6cc2a59e3a6734e` | n/a | +| `doe-campaign.4th` | 4060, 4061, 4062, 4063, 4064, 4065 | `0x26fb485e5c9dc6ff` | n/a | +| `doe.4th` | 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107 | `0xf154616d248e861f` | n/a | +| `fabric.4th` | 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 5000, 5001, 5002 | `0x9d9489cbeca4099b` | n/a | +| `font.4th` | 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985 | `0x3f305911500c78f6` | n/a | +| `hestia:init.4th` | 4986, 4987, 4988 | `0x64e111990fbc45ff` | n/a | +| `init-l8-diverse.4th` | 4820, 4821, 4822 | `0xaa293201a6c91838` | n/a | +| `init-l8-omni.4th` | 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079 | `0x5979e314d6452045` | n/a | +| `init-l8-stable.4th` | 4806 | `0xdc3830f189063a9a` | n/a | +| `init-l8-temporal.4th` | 4830, 4831 | `0x51abd4c138246651` | n/a | +| `init-l8-transition.4th` | 4840, 4841, 4842 | `0xbcc1a81976f0a4c9` | n/a | +| `init-l8-volatile.4th` | 4810, 4811, 4812, 4813 | `0x98caabbbd92abac4` | n/a | +| `init.4th` | 2049, 2050, 2057 | `0xea038ba684c53443` | n/a | +| `lib.4th` | 4050 | `0x4b216635c359ef73` | n/a | +| `multiuser-doe.4th` | 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055 | `0x22140588ee7c39e6` | n/a | +| `sdk.4th` | 5109, 5110, 5111, 5112, 5113, 5114, 5115 | `0x008fdbbb62c94a3a` | n/a | +| `turtle.4th` | 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108 | `0x4d470418ca543365` | n/a | +| `user-font-demo.4th` | 4200, 4201, 4202 | `0xce1fd7d1b581a56d` | n/a | +| `v4:forth79.4th` | 6000, 6001, 6002 | `0x4055641ee17d176b` | n/a | +| `v4:hera.4th` | 8000, 8001, 8002, 8003, 8004 | `0x526252bfef9b722b` | n/a | +| `workload-0.4th` | 2200, 2201 | `0x93f86f60aeba8feb` | n/a | +| `workload-1-lite.4th` | 5058, 5059 | `0x44a7a7e3176dcc8d` | n/a | +| `workload-1.4th` | 4406, 4415, 4425, 4435 | `0x63e251adb0a03613` | n/a | +| `workload-2.4th` | 4506, 4515, 4525, 4535, 4545 | `0xf113b3d0bcccae47` | n/a | +| `workload-3.4th` | 4606, 4615, 4625, 4635, 4645, 4655, 4665 | `0x62b7a71576ad1041` | n/a | +| `workload-4.4th` | 2130, 2131, 2132 | `0x099619264e650b1c` | n/a | +| `workload-5-lite.4th` | 5056, 5057 | `0xea0303f38824f254` | n/a | +| `workload-5.4th` | *(none — raw code capsule)* | `0x526964c7c9506a11` | n/a | +| `workload-6.4th` | 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095 | `0x06fc0ce1e369ef5a` | n/a | +| `workload-7.4th` | 2150 | `0x02862291387eb7ac` | n/a | +| `workload-8.4th` | 2160 | `0x56b7f2f0efa000df` | n/a | +| `workload-9.4th` | 4706, 4715, 4725, 4735, 4745 | `0x3f2bec73142aa424` | n/a | +| `workload-calib1.4th` | 5043 | `0x3b9f2d17b554fabc` | n/a | +| `zuse-eligibility.4th` | 4021, 4022 | `0x7b28f4776a32e0b7` | n/a | +| `zuse.4th` | 4016, 4017, 4018 | `0xa14d5a7a88791cf6` | n/a | + +*Signed column is `n/a`: this manifest run had no `--sign-key`. Re-run with `--sign-key ` to check signing status (does not modify or require rebuilding capsule_generated.c).* ## Block Map (sorted by LBN) @@ -109,9 +113,9 @@ | 4007 | `ACL.4th` | `0xf8890c05c0d8f921` | ok | | 4008 | `ACL.4th` | `0xf8890c05c0d8f921` | ok | | 4015 | `ACL.4th` | `0xf8890c05c0d8f921` | ok | -| 4016 | `zuse.4th` | `0x490ded9be257a90b` | ok | -| 4017 | `zuse.4th` | `0x490ded9be257a90b` | ok | -| 4018 | `zuse.4th` | `0x490ded9be257a90b` | ok | +| 4016 | `zuse.4th` | `0xa14d5a7a88791cf6` | ok | +| 4017 | `zuse.4th` | `0xa14d5a7a88791cf6` | ok | +| 4018 | `zuse.4th` | `0xa14d5a7a88791cf6` | ok | | 4019 | `block-acl.4th` | `0xf6cc2a59e3a6734e` | ok | | 4020 | `block-acl.4th` | `0xf6cc2a59e3a6734e` | ok | | 4021 | `zuse-eligibility.4th` | `0x7b28f4776a32e0b7` | ok | @@ -364,10 +368,18 @@ | 5113 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok | | 5114 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok | | 5115 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok | +| 6000 | `v4:forth79.4th` | `0x4055641ee17d176b` | ok | +| 6001 | `v4:forth79.4th` | `0x4055641ee17d176b` | ok | +| 6002 | `v4:forth79.4th` | `0x4055641ee17d176b` | ok | +| 8000 | `v4:hera.4th` | `0x526252bfef9b722b` | ok | +| 8001 | `v4:hera.4th` | `0x526252bfef9b722b` | ok | +| 8002 | `v4:hera.4th` | `0x526252bfef9b722b` | ok | +| 8003 | `v4:hera.4th` | `0x526252bfef9b722b` | ok | +| 8004 | `v4:hera.4th` | `0x526252bfef9b722b` | ok | ## Conflicts None. --- -*36 capsule(s) scanned. Re-run `mkcapsule --manifest ` to refresh.* +*38 capsule(s) scanned. Re-run `mkcapsule --manifest ` to refresh.* diff --git a/capsules/v4/forth79.4th b/capsules/v4/forth79.4th new file mode 100644 index 00000000..105d58c9 --- /dev/null +++ b/capsules/v4/forth79.4th @@ -0,0 +1,28 @@ +Block 6000 +( forth79.4th -- the FORTH-79 Required Word Set for v4, ) +( as colon definitions, loaded when the system boots. ) +( docs/v4.0.0/NUCLEUS.md. Blocks 6000 up. ) +( A word moves here from the assembled nucleus, v4/capsule, ) +( once its colon definition passes POST. ) +Block 6001 +( U* U/MOD -- FORTH-79 unsigned multiply and divide. ) +( Neither v3 nor the v4 nucleus had them. ) +( The first two words count the bits in a cell. ) +: (BITS) ( -- n ) + 0 1 BEGIN DUP WHILE 2* SWAP 1+ SWAP REPEAT DROP ; +(BITS) CONSTANT (NB) +VARIABLE (UD) +( u1 u2 -- ud the unsigned double product ) +: U* UM* ; +Block 6002 +( ud u1 -- u2 u3 unsigned: u2 the remainder, u3 the quotient ) +( One bit a step: shift ud left, and take u1 from its high ) +( cell whenever it goes, counting that in the low cell. ) +( A zero divisor is error 11, Division by zero. ) +: U/MOD + DUP 0= IF DROP DROP DROP 11 NODE-ERROR ! THEN (UD) ! + (NB) 0 DO + DUP 0< >R 2* OVER 0< IF 1+ THEN SWAP 2* SWAP + R> IF (UD) @ - SWAP 1+ SWAP + ELSE DUP (UD) @ U< 0= IF (UD) @ - SWAP 1+ SWAP THEN THEN + LOOP SWAP ; diff --git a/capsules/v4/hera.4th b/capsules/v4/hera.4th new file mode 100644 index 00000000..6eda8ebd --- /dev/null +++ b/capsules/v4/hera.4th @@ -0,0 +1,80 @@ +Block 8000 +( hera.4th -- Hera: the node that has the others born and ) +( manages them. docs/v4.0.0/MESH.md sections 9 and 10. ) +( She asks whoever holds the fabric for a node, wires it, ) +( and sends it its capsules through the port that joins ) +( them. The unit rule is here and nowhere else: four outer ) +( nodes round a centre, an outer node wired only inside its ) +( unit. ) +( Text for another node is built in PAD. ) +VARIABLE (T#) +: (T0) ( -- ) 0 (T#) ! ; +: (TC) ( c -- ) PAD (T#) @ + C! 1 (T#) +! ; +: (TS) ( baddr u -- ) + DUP IF 0 DO DUP I + C@ (TC) LOOP DROP ELSE DROP DROP THEN ; +: (TN) ( n -- ) 0 <# #S #> (TS) 32 (TC) ; +: (T) ( -- baddr u ) PAD (T#) @ ; +Block 8001 +( The node being born: its place in the fabric, the number ) +( it is to have, and the port of this node that leads to it. ) +VARIABLE (KID) VARIABLE (KID#) VARIABLE (KIDP) +: (FAIL) ( -- ) + ." BIRTH: node " (KID#) @ . ." did not do as it was told" CR + -1 NODE-ERROR ! ; +: (TOLD) ( how -- ) 1 - IF (FAIL) THEN ; +: (TELL) ( baddr u -- ) (KID#) @ SEND (KID#) @ AWAIT (TOLD) ; +( the nucleus, a capsule of F18 code, cell by cell to its port ) +: (NUCLEUS) ( -- ) + S" v4:nucleus-64.f18" CAPSULE-OPEN 0= IF (FAIL) THEN + BEGIN CAPSULE-CELL WHILE (KIDP) @ PORT! REPEAT DROP ; +( a capsule of FORTH blocks, a line at a time ) +: (LINES) ( baddr u -- ) CAPSULE-OPEN 0= IF (FAIL) THEN + BEGIN PAD CAPSULE-LINE DUP 0< 0= WHILE PAD SWAP (TELL) REPEAT + DROP ; +Block 8002 +( who it is, where its printing goes, and that everything ) +( not told of goes by its port 2, where this node is ) +: (WHO) ( -- ) + (T0) (KID#) @ (TN) S" (ME) ! " (TS) + (CONSOLE) @ (TN) S" (CONSOLE) ! 2 DEFAULT-ROUTE " (TS) + (ME) @ (TN) S" 2 NEIGHBOUR" (TS) + (T) 0 (KIDP) @ SEND-ON (KID#) @ AWAIT (TOLD) ; +( number port -- place A NODE IS BORN on that port of ) +( this one: empty, then the nucleus, then FORTH-79. ) +: BIRTH ( number port -- place ) + (KIDP) ! (KID#) ! + NODE-BORN DUP 0< IF (FAIL) THEN (KID) ! + NODE-ME (KIDP) @ (KID) @ 2 NODE-WIRE 0= IF (FAIL) THEN + (NUCLEUS) + (KID#) @ (KIDP) @ ROUTE (KID#) @ (KIDP) @ NEIGHBOUR (WHO) + S" v4:forth79.4th" (LINES) +Block 8003 + S" (SEAL)" (TELL) + (KID) @ (KID#) @ NODE-PARITY + (KID) @ ; +( Two outer nodes are joined: port 3 of X to port 4 of Y, ) +( and each is told the other is there. ) +VARIABLE (XP) VARIABLE (XN) VARIABLE (YP) VARIABLE (YN) +: (X) ( place number -- ) (XN) ! (XP) ! ; +: (Y) ( place number -- ) (YN) ! (YP) ! ; +: (SAY) ( them port me -- ) (KID#) ! + (T0) OVER (TN) DUP (TN) S" ROUTE " (TS) + SWAP (TN) (TN) S" NEIGHBOUR" (TS) (T) (TELL) ; +: (JOIN) ( -- ) + (XP) @ 3 (YP) @ 4 NODE-WIRE 0= IF (FAIL) THEN + (YN) @ 3 (XN) @ (SAY) (XN) @ 4 (YN) @ (SAY) ; +Block 8004 +( n -- A UNIT: four outer nodes, n+1 to n+4, on ports 2 ) +( to 5 of this one, and joined in a square: 1-2, 2-4, 4-3, ) +( 3-1. The corners across from each other are not wired: ) +( what one sends the other goes by this node. ) +VARIABLE (U) +VARIABLE (P1) VARIABLE (P2) VARIABLE (P3) VARIABLE (P4) +: (N) ( k -- number ) (U) @ + ; +: UNIT ( n -- ) (U) ! + 1 (N) 2 BIRTH (P1) ! 2 (N) 3 BIRTH (P2) ! + 3 (N) 4 BIRTH (P3) ! 4 (N) 5 BIRTH (P4) ! + (P1) @ 1 (N) (X) (P2) @ 2 (N) (Y) (JOIN) + (P2) @ 2 (N) (X) (P4) @ 4 (N) (Y) (JOIN) + (P4) @ 4 (N) (X) (P3) @ 3 (N) (Y) (JOIN) + (P3) @ 3 (N) (X) (P1) @ 1 (N) (Y) (JOIN) ; diff --git a/capsules/v4/nucleus-64.f18 b/capsules/v4/nucleus-64.f18 new file mode 100644 index 00000000..1f73d1a1 Binary files /dev/null and b/capsules/v4/nucleus-64.f18 differ diff --git a/configs/README.md b/configs/README.md index dfe48f80..1cc77e37 100644 --- a/configs/README.md +++ b/configs/README.md @@ -1,7 +1,7 @@ # configs/ Example Kconfig `defconfig` files — starting points for `make -f -Makefile.starkernel ARCH= defconfig` (kernel) or the equivalent +kernel/Makefile ARCH= defconfig` (kernel) or the equivalent hosted target, matching the current committed default build behavior for each profile. Loaded via `tools/kconfig/conf`. diff --git a/ONTOLOGY.md b/docs/ONTOLOGY.md similarity index 100% rename from ONTOLOGY.md rename to docs/ONTOLOGY.md diff --git a/ROADMAP.md b/docs/ROADMAP.md similarity index 100% rename from ROADMAP.md rename to docs/ROADMAP.md diff --git a/docs/book/Makefile b/docs/book/Makefile new file mode 100644 index 00000000..43481d7c --- /dev/null +++ b/docs/book/Makefile @@ -0,0 +1,112 @@ +# docs/book/Makefile -- the single LithosAnanke book, built from LaTeX. +# +# Run from the repo root (the root Makefile does this): +# make docs -> build/docs/LithosAnanke.pdf +# make docs TARGET= -> build/docs/LithosAnanke-.pdf +# (same book + that board's appendix) +# +# docs/book/main.tex is the master. Markdown sources are converted by pandoc +# into LaTeX fragments under build/docs/gen/ and \input from main.tex; the +# Markdown stays the source of truth until a chapter is rewritten in LaTeX. +# Figures and tables that present data read the CSV directly at LaTeX time +# (pgfplots / pgfplotstable) and cite it with \datasource{path}; see +# docs/book/README.md. + +BOOK_DIR := docs/book +OUT := build/docs +GEN := $(OUT)/gen + +BOARD ?= +BOARD_NAME ?= +VARIANT := $(if $(BOARD),$(BOARD),book) +VAR_DIR := $(OUT)/$(VARIANT) +PDF := $(OUT)/LithosAnanke$(if $(BOARD),-$(BOARD)).pdf + +PANDOC ?= pandoc +LATEXMK ?= latexmk +PANDOC_FILTERS := $(BOOK_DIR)/pandoc/table-widths.lua $(BOOK_DIR)/pandoc/code-breaks.lua +PANDOC_FLAGS := -f gfm -t latex --top-level-division=chapter --wrap=preserve \ + $(foreach f,$(PANDOC_FILTERS),--lua-filter=$(f)) + +# fragment name : Markdown source. The order of \input lines is main.tex's. +CHAPTERS := \ + ontology:docs/ONTOLOGY.md \ + roadmap:docs/ROADMAP.md \ + boards:boards/README.md \ + justification:docs/v4.0.0/JUSTIFICATION.md \ + decomposition:docs/v4.0.0/DECOMPOSITION.md \ + fabric-0:docs/fabric/FABRIC-0.md \ + fabric-1:docs/fabric/FABRIC-1.md \ + fabric-2:docs/fabric/FABRIC-2.md \ + fabric-3:docs/fabric/FABRIC-3.md \ + fabric-3-5:docs/fabric/FABRIC-3.5.md \ + fabric-3-6:docs/fabric/FABRIC-3.6.md \ + fabric-3-7:docs/fabric/FABRIC-3.7.md \ + fabric-4:docs/fabric/FABRIC-4.md + +ifneq ($(BOARD),) +ifeq ($(wildcard boards/$(BOARD)/README.md),) + $(error boards/$(BOARD)/README.md is missing: it is the board's appendix) +endif +CHAPTERS += board-$(BOARD):boards/$(BOARD)/README.md +endif + +chapter_name = $(word 1,$(subst :, ,$(1))) +chapter_src = $(word 2,$(subst :, ,$(1))) +FRAGMENTS := $(foreach c,$(CHAPTERS),$(GEN)/$(call chapter_name,$(c)).tex) + +.PHONY: all tools FORCE +all: $(PDF) + +tools: + @missing=""; \ + for t in $(PANDOC) $(LATEXMK) xelatex; do command -v $$t >/dev/null 2>&1 || missing="$$missing $$t"; done; \ + if [ -n "$$missing" ]; then \ + echo "Error: make docs needs:$$missing"; \ + echo " sudo apt-get install -y pandoc latexmk texlive-xetex texlive-latex-extra texlive-pictures texlive-fonts-recommended fonts-dejavu fonts-dejavu-extra"; \ + echo " (or a user-local TinyTeX + pandoc in ~/.local; see docs/book/README.md)"; \ + exit 1; \ + fi + +# --id-prefix keeps heading labels unique across documents that reuse +# section names ("Summary", "Open questions", ...). +define chapter_rule +$(GEN)/$(call chapter_name,$(1)).tex: $(call chapter_src,$(1)) $(PANDOC_FILTERS) | tools + @mkdir -p $(GEN) + @echo " PANDOC $$< -> $$@" + @$(PANDOC) $(PANDOC_FLAGS) --id-prefix=$(call chapter_name,$(1))- $$< -o $$@ +endef +$(foreach c,$(CHAPTERS),$(eval $(call chapter_rule,$(c)))) + +# Pandoc's syntax-highlighting macros, taken from the installed pandoc so the +# fragments and their macros always come from the same version. +$(GEN)/pandoc-highlighting.tex: $(BOOK_DIR)/pandoc/highlighting.latex | tools + @mkdir -p $(GEN) + @printf '```c\nx\n```\n' | $(PANDOC) -f gfm -t latex -s --template=$< -o $@ + +# Per-build facts the book prints: the commit every \datasource refers to, +# and which board appendix (if any) is included. +$(VAR_DIR)/meta.tex: FORCE + @mkdir -p $(VAR_DIR) + @{ \ + c=$$(git rev-parse --short=12 HEAD 2>/dev/null || echo unknown); \ + git diff --quiet HEAD -- 2>/dev/null || c="$$c (+ uncommitted changes)"; \ + printf '\\newcommand{\\bookcommit}{%s}\n' "$$c"; \ + printf '\\newcommand{\\bookdate}{%s}\n' "$$(date -u +%Y-%m-%d)"; \ + printf '\\def\\bookboard{%s}\n' "$(BOARD_NAME)"; \ + $(if $(BOARD),printf '\\newcommand{\\bookboardappendix}{board-%s}\n' "$(BOARD)";) \ + } > $@.tmp + @cmp -s $@.tmp $@ && rm -f $@.tmp || mv $@.tmp $@ + +FORCE: + +TEXINPUTS_BOOK := $(abspath $(VAR_DIR)):$(abspath $(GEN)):$(abspath $(BOOK_DIR)): + +$(PDF): $(BOOK_DIR)/main.tex $(FRAGMENTS) $(GEN)/pandoc-highlighting.tex $(VAR_DIR)/meta.tex | tools + @echo " LATEXMK $(BOOK_DIR)/main.tex -> $@" + @TEXINPUTS=$(TEXINPUTS_BOOK) $(LATEXMK) -xelatex -interaction=nonstopmode -halt-on-error \ + -file-line-error -outdir=$(VAR_DIR) $(BOOK_DIR)/main.tex > $(VAR_DIR)/latexmk.log 2>&1 || { \ + grep -A4 -E '^(.*:[0-9]+:|!)' $(VAR_DIR)/main.log | head -40; \ + echo "Error: LaTeX failed; full log: $(VAR_DIR)/main.log"; exit 1; } + @cp $(VAR_DIR)/main.pdf $@ + @echo " PDF $@" diff --git a/docs/book/README.md b/docs/book/README.md new file mode 100644 index 00000000..eedb4db7 --- /dev/null +++ b/docs/book/README.md @@ -0,0 +1,66 @@ +# docs/book/ + +`make docs` builds one PDF, `build/docs/LithosAnanke.pdf`, from `main.tex` with xelatex. +`make docs TARGET=` builds `build/docs/LithosAnanke-.pdf`: the same book with +`boards//README.md` added as an appendix. + +Tools: `sudo apt-get install -y pandoc latexmk texlive-xetex texlive-latex-extra texlive-pictures texlive-fonts-recommended fonts-dejavu fonts-dejavu-extra` + +Without root, a user-local TeX Live works too (this is how the book was first built): +TinyTeX (`curl -sL https://yihui.org/tinytex/install-bin-unix.sh | sh`) plus +`tlmgr install latexmk xetex fontspec pgf pgfplots booktabs multirow fancyvrb fvextra lineno upquote ulem enumitem newunicodechar bookmark hyperref geometry xcolor graphics tools etoolbox fancyhdr truncate amsfonts`, +and the pandoc release tarball unpacked into `~/.local`. + +The installed DejaVu decides italics: `fonts-dejavu-core` alone has no serif italic, so +`main.tex` falls back to a slanted upright face; `fonts-dejavu-extra` gives real italics. + +## How it fits together + +- `main.tex` is the master file. It sets the parts and the chapter order. +- Chapters that are still Markdown are listed in `Makefile` (`CHAPTERS`, as `name:source.md`). + At build time pandoc converts each one into `build/docs/gen/.tex`, and `main.tex` + includes it with `\input{}`. The Markdown stays the source until the chapter is + rewritten in LaTeX. At that point the `.tex` moves into this directory and the `CHAPTERS` + entry is removed. +- `pandoc/highlighting.latex` extracts the code-highlighting macros from the installed pandoc, + so the macros and the fragments always come from the same pandoc version. +- Two Lua filters run on every chapter. `pandoc/table-widths.lua` gives wide tables + proportional wrapping columns, because pandoc's gfm reader leaves column widths unset. + `pandoc/code-breaks.lua` lets long inline identifiers and paths break after `_ / . - :`. + Code blocks wrap through fvextra (`breaklines`). +- `build/docs//meta.tex` is written on every build. It records the commit (and + whether there were uncommitted changes), the date, and the board. + +## Rule for data + +Any figure or table that shows measured numbers is generated from the CSV when the book is +built. Numbers are never typed in by hand: + +```latex +\begin{tikzpicture} + \begin{axis}[xlabel=run, ylabel=K] + \addplot table[col sep=comma, x=run, y=K]{experiments//results.csv}; + \end{axis} +\end{tikzpicture} +\datasource{experiments//results.csv} +``` + +Use `\pgfplotstabletypeset[col sep=comma]{...}` for tables. `\datasource` prints the CSV path +and the commit, so a reader can find the exact file the figure was drawn from. CSV paths are +repo-relative, because xelatex runs from the repo root. + +## Older pipelines to fold in or retire + +These still exist and still have their own targets. Each one needs a decision during the +curation pass: move it into this book, or retire it. + +| Source | Current target | Produces | +|---|---|---| +| `docs/formal/vol1-vm-physics`, `vol2-kernel`, `vol3-research` | `make -C docs/formal vols` | three volume PDFs | +| `docs/formal/dev-guide`, `user-guide`, `cookbook` | `make -C docs/formal books` | three practitioner PDFs | +| `docs/formal/experiments`, `proofs`, `ssrn`, `patent` | `make -C docs/formal standalone` | four standalone PDFs | +| Doxygen (`Doxyfile`) | `make -C docs/formal doxygen` | API reference PDF | +| `scripts/generate-doxygen-appendix.sh` | `make -f v3/Makefile api-docs` | AsciiDoc API appendix | +| `docs/src/internal/formal/*.thy` | `make -f v3/Makefile docs-isabelle` | Isabelle report | +| `scripts/asciidoc-to-latex.sh` | `make -f v3/Makefile docs-latex` | `docs/latex/` | +| `docs/SSRN_companion/Math_Companion_SSRN.tex` | `make -f v3/Makefile math-companion` | SSRN math companion | diff --git a/docs/book/main.tex b/docs/book/main.tex new file mode 100644 index 00000000..5435e9dc --- /dev/null +++ b/docs/book/main.tex @@ -0,0 +1,161 @@ +% docs/book/main.tex -- master file of the single LithosAnanke book. +% +% Built by `make docs [TARGET=]` (docs/book/Makefile) with xelatex. +% Fragments named below (ontology, fabric-0, ...) are generated by pandoc +% from the Markdown listed in docs/book/Makefile's CHAPTERS into +% build/docs/gen/; meta.tex is generated per build. Neither is committed. +\documentclass[11pt,openany]{book} + +\usepackage{amsmath,amssymb} +\usepackage{fontspec} +% fonts-dejavu-core has no serif/sans italics (fonts-dejavu-extra does); when a +% shape is missing, slant the upright one rather than silently drop emphasis. +\setmainfont{DejaVu Serif}[AutoFakeSlant=0.2] +\setsansfont{DejaVu Sans}[AutoFakeSlant=0.2] +\setmonofont{DejaVu Sans Mono}[Scale=0.85] +\newfontfamily\symbolfont{DejaVu Sans} + +\usepackage[letterpaper,margin=1in]{geometry} +\usepackage{xcolor} +\usepackage{graphicx} +\usepackage{longtable,booktabs,array,calc,multirow} +\usepackage{fancyvrb} +\usepackage[normalem]{ulem} +\usepackage{enumitem} +\usepackage{newunicodechar} +\usepackage{pgfplots} +\usepackage{pgfplotstable} +\pgfplotsset{compat=1.18} +\usepackage[hidelinks]{hyperref} +\usepackage{bookmark} + +% --- what pandoc's LaTeX fragments expect (normally from its own template) +\providecommand{\tightlist}{\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +\providecommand{\pandocbounded}[1]{#1} +\providecommand{\st}[1]{\sout{#1}} +\newcounter{none} % pandoc: {\def\LTcaptype{none} ...} marks unnumbered tables +\usepackage{etoolbox} +\makeatletter +\def\fnum@table{\tablename~\thetable} +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +\usepackage{fvextra} +\input{pandoc-highlighting} +% Code and diagrams are wider than the page in places: wrap, never overflow. +\RecustomVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},breaklines,breakanywhere,fontsize=\small} +\RecustomVerbatimEnvironment{verbatim}{Verbatim}{breaklines,breakanywhere,fontsize=\small} +\setlistdepth{9} +\renewlist{itemize}{itemize}{9} +\setlist[itemize]{label=\textbullet} +\renewlist{enumerate}{enumerate}{9} +\setlist[enumerate]{label=\arabic*.} +% Running heads: chapter on the left page, section on the right, both cut to +% the page width (several design-record titles are a full sentence long). +\usepackage{fancyhdr} +\usepackage[fit]{truncate} +\pagestyle{fancy} +\fancyhf{} +\renewcommand{\chaptermark}[1]{\markboth{#1}{}} +\renewcommand{\sectionmark}[1]{\markright{#1}} +\fancyhead[LE]{\small\truncate{\dimexpr\headwidth-3em}{\leftmark}} +\fancyhead[RO]{\small\truncate{\dimexpr\headwidth-3em}{\rightmark}} +\fancyhead[RE,LO]{\small\thepage} +\renewcommand{\headrulewidth}{0.4pt} +\setlength{\headheight}{14pt} +\fancypagestyle{plain}{\fancyhf{}\fancyfoot[C]{\small\thepage}\renewcommand{\headrulewidth}{0pt}} +\setlength{\emergencystretch}{3em} +\setlength{\parindent}{0pt} +\setlength{\parskip}{0.5em} + +% --- glyphs DejaVu Serif lacks: the status marks used across the docs +\newunicodechar{✅}{{\symbolfont ✔}} +\newunicodechar{✓}{{\symbolfont ✓}} +\newunicodechar{❌}{{\symbolfont ✘}} +\newunicodechar{✗}{{\symbolfont ✗}} +\newunicodechar{⬜}{{\symbolfont ☐}} +\newunicodechar{⭐}{{\symbolfont ★}} +\newunicodechar{🔶}{{\symbolfont ◆}} +\newunicodechar{⚠}{{\symbolfont ⚠}} +\newunicodechar{📋}{} +\newunicodechar{🐛}{[bug]} +\newunicodechar{🎯}{[goal]} +\newunicodechar{🟡}{{\symbolfont ●}} +\newunicodechar{📍}{{\symbolfont ▸}} +\newunicodechar{🔓}{[unlocked]} +\newunicodechar{❓}{?} +\newunicodechar{⟺}{\ensuremath{\Longleftrightarrow}} +\newunicodechar{⋯}{\ensuremath{\cdots}} +\newunicodechar{^^^^fe0f}{} + +% --- the documents number their own sections (§III.1, D-3, ...) +\setcounter{secnumdepth}{0} +\setcounter{tocdepth}{1} + +\input{meta} + +% \datasource{path/to/data.csv}: cite the data behind a figure or table. +% Every figure or table of measured numbers reads its CSV at build time +% (\addplot table / \pgfplotstabletypeset) and is followed by this line, so +% the reader can find the exact file at the exact commit. +\newcommand{\datasource}[1]{% + \par{\small Data: \texttt{\detokenize{#1}} at commit \texttt{\bookcommit}.}\par} + +\title{LithosAnanke and StarForth} +\author{} +\date{Built \bookdate{} from commit \texttt{\bookcommit}% + \ifx\bookboard\empty\else\\Board appendix: \bookboard\fi} + +\begin{document} +\frontmatter +\maketitle +\tableofcontents + +\chapter{About this book} +This book is generated from the repository by \texttt{make docs}. Each +chapter below is still maintained as the Markdown file named in the table and +converted at build time; a chapter moves into LaTeX source when it is +rewritten. Part~III is the design record: those documents are archival and +are reproduced as written, including their struck-through corrections. + +\begin{longtable}{@{}ll@{}} +\toprule +Chapter & Source \\ +\midrule +\endhead +Ontology & \texttt{docs/ONTOLOGY.md} \\ +Roadmap & \texttt{docs/ROADMAP.md} \\ +Boot targets & \texttt{boards/README.md} \\ +v4 justification & \texttt{docs/v4.0.0/JUSTIFICATION.md} \\ +v4 decomposition & \texttt{docs/v4.0.0/DECOMPOSITION.md} \\ +FABRIC-0 \dots{} FABRIC-4 & \texttt{docs/fabric/FABRIC-*.md} \\ +Board appendix (\texttt{TARGET=}) & \texttt{boards//README.md} \\ +\bottomrule +\end{longtable} + +\mainmatter + +\part{The system} +\input{ontology} +\input{roadmap} +\input{boards} + +\part{StarForth v4} +\input{justification} +\input{decomposition} + +\part{Design record (FABRIC series)} +\input{fabric-0} +\input{fabric-1} +\input{fabric-2} +\input{fabric-3} +\input{fabric-3-5} +\input{fabric-3-6} +\input{fabric-3-7} +\input{fabric-4} + +\ifdefined\bookboardappendix +\appendix +\input{\bookboardappendix} +\fi + +\end{document} diff --git a/docs/book/pandoc/code-breaks.lua b/docs/book/pandoc/code-breaks.lua new file mode 100644 index 00000000..ec8bc5f5 --- /dev/null +++ b/docs/book/pandoc/code-breaks.lua @@ -0,0 +1,29 @@ +-- docs/book/pandoc/code-breaks.lua +-- +-- Inline code in the design record is full of long identifiers and paths +-- (g_wirebind_attached_username, kernel/src/arch/riscv64/...), which LaTeX +-- cannot break, so they run into the margin. Emit inline code as \texttt +-- ourselves, escaped the same way pandoc does, with a break opportunity +-- after each separator character. + +local BREAK_AFTER = { ["_"] = true, ["/"] = true, ["."] = true, ["-"] = true, + [":"] = true, [","] = true, ["("] = true, ["="] = true } + +local ESCAPE = { + ["\\"] = "\\textbackslash{}", ["{"] = "\\{", ["}"] = "\\}", + ["$"] = "\\$", ["&"] = "\\&", ["#"] = "\\#", ["%"] = "\\%", ["_"] = "\\_", + ["^"] = "\\textasciicircum{}", ["~"] = "\\textasciitilde{}", + ["'"] = "\\textquotesingle{}", ["`"] = "\\textasciigrave{}", + [" "] = "\\ ", +} + +function Code(el) + if not FORMAT:match("latex") then return nil end + local out = {} + for _, cp in utf8.codes(el.text) do + local ch = utf8.char(cp) + out[#out + 1] = ESCAPE[ch] or ch + if BREAK_AFTER[ch] then out[#out + 1] = "\\allowbreak{}" end + end + return pandoc.RawInline("latex", "\\texttt{" .. table.concat(out) .. "}") +end diff --git a/docs/book/pandoc/highlighting.latex b/docs/book/pandoc/highlighting.latex new file mode 100644 index 00000000..c8427f53 --- /dev/null +++ b/docs/book/pandoc/highlighting.latex @@ -0,0 +1,3 @@ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ diff --git a/docs/book/pandoc/table-widths.lua b/docs/book/pandoc/table-widths.lua new file mode 100644 index 00000000..4f74a020 --- /dev/null +++ b/docs/book/pandoc/table-widths.lua @@ -0,0 +1,55 @@ +-- docs/book/pandoc/table-widths.lua +-- +-- pandoc's gfm reader leaves every column width unset, so the LaTeX writer +-- emits `l` columns and a table with long cells runs off the page. For any +-- table wider than WIDE characters, give each column a width proportional +-- to its longest cell (clamped to [MIN_COL, MAX_COL] characters); the +-- writer then emits wrapping p{} columns that together fill \linewidth. + +local WIDE = 72 +local MIN_COL = 6 +local MAX_COL = 60 + +local stringify = pandoc.utils.stringify + +local function measure(rows, widths) + for _, row in ipairs(rows) do + local col = 1 + for _, cell in ipairs(row.cells) do + local span = cell.col_span or 1 + local len = utf8.len(stringify(cell.contents)) or #stringify(cell.contents) + local per = len / span + for c = col, col + span - 1 do + if per > (widths[c] or 0) then widths[c] = per end + end + col = col + span + end + end +end + +function Table(tbl) + local n = #tbl.colspecs + local widths = {} + for i = 1, n do widths[i] = 0 end + + measure(tbl.head.rows, widths) + for _, body in ipairs(tbl.bodies) do + measure(body.head, widths) + measure(body.body, widths) + end + measure(tbl.foot.rows, widths) + + local total = 0 + for i = 1, n do total = total + widths[i] end + if total <= WIDE then return nil end + + local sum = 0 + for i = 1, n do + widths[i] = math.max(MIN_COL, math.min(MAX_COL, widths[i])) + sum = sum + widths[i] + end + for i = 1, n do + tbl.colspecs[i] = { tbl.colspecs[i][1], widths[i] / sum } + end + return tbl +end diff --git a/FABRIC-0.md b/docs/fabric/FABRIC-0.md similarity index 100% rename from FABRIC-0.md rename to docs/fabric/FABRIC-0.md diff --git a/FABRIC-1.md b/docs/fabric/FABRIC-1.md similarity index 100% rename from FABRIC-1.md rename to docs/fabric/FABRIC-1.md diff --git a/FABRIC-2.md b/docs/fabric/FABRIC-2.md similarity index 100% rename from FABRIC-2.md rename to docs/fabric/FABRIC-2.md diff --git a/FABRIC-3.5.md b/docs/fabric/FABRIC-3.5.md similarity index 100% rename from FABRIC-3.5.md rename to docs/fabric/FABRIC-3.5.md diff --git a/FABRIC-3.6.md b/docs/fabric/FABRIC-3.6.md similarity index 100% rename from FABRIC-3.6.md rename to docs/fabric/FABRIC-3.6.md diff --git a/FABRIC-3.7.md b/docs/fabric/FABRIC-3.7.md similarity index 100% rename from FABRIC-3.7.md rename to docs/fabric/FABRIC-3.7.md diff --git a/FABRIC-3.md b/docs/fabric/FABRIC-3.md similarity index 100% rename from FABRIC-3.md rename to docs/fabric/FABRIC-3.md diff --git a/FABRIC-4.md b/docs/fabric/FABRIC-4.md similarity index 100% rename from FABRIC-4.md rename to docs/fabric/FABRIC-4.md diff --git a/docs/v4.0.0/DECOMPOSITION.md b/docs/v4.0.0/DECOMPOSITION.md index ae8a99d1..3216d022 100644 --- a/docs/v4.0.0/DECOMPOSITION.md +++ b/docs/v4.0.0/DECOMPOSITION.md @@ -18,7 +18,7 @@ model produces the same results as the v3 C primitive it replaces. 0. [Fates](#0-fates) 1. [The v4 core ISA](#1-the-v4-core-isa) 2. [Compiler conventions](#2-compiler-conventions) -3. [Open decisions](#3-open-decisions) +3. [Decisions](#3-decisions) 4. [Foundation layer (new words)](#4-foundation-layer-new-words) 5. [Fate of every v3 primitive](#5-fate-of-every-v3-primitive) 6. [Messaging between nodes](#6-messaging-between-nodes) @@ -48,9 +48,9 @@ model produces the same results as the v3 C primitive it replaces. | Item | v4 node | | --- | --- | | Cell | 32 bits (mesh node). The host node's width is a build parameter; see D-5. | -| Addressing | Word-addressed (pending D-1). | +| Addressing | Word-addressed (D-1). | | Registers | `T` (top of data stack), `S` (second), `R` (top of return stack), `P` (program counter), `A` and `B` (address registers). | -| Stacks | Hardware stacks below `S` and `R`. Depth and visibility are D-2. | +| Stacks | F18 hardware stacks, not addressable by code: data stack `T`, `S` + 8 (10 deep), return stack `R` + 8 (9 deep). Each counts what it holds, and a push onto a full stack or a pop from an empty one is a **fault** (D-16, which replaces D-2's silent wrap-around). | | Instruction word | Six 5-bit slots, plus 2 spare bits. | ### 1.2 Instruction word layout @@ -147,28 +147,47 @@ IF body1 ELSE body2 THEN → if L1 drop body1 jump L2 times, as on the F18. `FOR ... UNEXT` is the same but the body must fit in one instruction word. **Register conventions.** `A` and `B` are caller-saved. A word that uses them says so. Words in this -document that clobber `A`: `@ ! +! -! 2@ 2! C@ C! UM* * UM/MOD SEND RECV`. Words that clobber `B`: -`SEND RECV`. +document that clobber `A`: `@ ! +! -! 2@ 2! C@ C! D2/ M* FILL ERASE MOVE COUNT CMOVE CMOVE> BLANK -TRAILING COMPARE SEARCH SCAN SKIP DECIMAL HEX OCTAL UM* * UM/MOD Q.FROM-INT Q.TO-INT Q.* Q./ Q.EXP Q.SQRT Q.LOG Q.SIN Q.COS +LOOP J HOLD SIGN # #S . .R U. U.R D. D.R ? DUMP Q.PRINT TYPE SEND RECV`. Words that clobber `B`: +`COMPARE SEARCH Q./ Q.EXP Q.SQRT Q.LOG Q.SIN Q.COS <# HOLD SIGN # #S #> . .R U. U.R D. D.R ? DUMP Q.PRINT EMIT CR SPACE SPACES TYPE KEY ?TERMINAL SEND RECV`. **Return-stack words** (`>R R> R@ 2>R 2R> 2R@ I J UNLOOP` and the loop runtimes) are always IN. --- -## 3. Open decisions +## 3. Decisions -These must be settled before the golden model is built. Where a definition below depends on one, it -says so. +Ruled by Captain Bob, 2026-10-01, except D-4 and D-6, which are deferred to development step 2 (the +hosted mesh, `JUSTIFICATION.md` §10) because only the mesh and the RTL depend on them. Where a +definition below depends on one, it says so. -| ID | Decision | Default in this document | +| ID | Decision | Ruling | | --- | --- | --- | -| **D-1** | Word addressing (pure Moore) or byte addressing. | Word addressing. `C@`/`C!` are CAP; `CELLS` is a no-op. | -| **D-2** | Stack depth, and whether the stacks are visible (needed by `DEPTH`, `PICK`, `ROLL`, `SP@`, `SP!`). | Stacks backed by node RAM, with the data stack pointer exposed as MM register `DSP`. | -| **D-3** | Exact `+*` semantics at 32 bits: whether the add carries out of `T` into the shift. | Carry is kept (extended multiply step), so `UM*` returns a full 64-bit product. | -| **D-4** | Node memory map, including port and register addresses. | Symbolic names only (§6, §7). | -| **D-5** | Host node cell width. | 32 on a Zynq-7000 (Cortex-A9); 64 on an aarch64 host. The compiler capsule is written width-independent. | -| **D-6** | Which heat structures exist in hardware: per-opcode counters only, or also per-call-target and word-to-word transition counters. | Per-opcode and per-call-target. Transition counters deferred. | -| **D-7** | `ROLL` semantics. | Fix to ANS (count from the top). v3's bottom-counting `ROLL` is retired. | -| **D-8** | Q48.16 signedness. | Signed. v3's unsigned comparisons and `Q.FROM-INT` clamping are retired. | +| **D-1** | Word addressing (pure Moore) or byte addressing. | **Word addressing.** `C@`/`C!` are CAP; `CELLS` is a no-op. | +| **D-2** | Stack depth, and whether the stacks are visible. | **F18 circular stacks, hidden.** Data stack 10 deep (`T`, `S` + 8 circular), return stack 9 deep (`R` + 8 circular), exactly as the F18. No stack pointer is visible to code, so `DEPTH`, `PICK`, `ROLL`, `.S`, `SP@` and `SP!` are **retired everywhere**, host node included. **Revised by D-16 (2026-10-04):** the sizes stand and the stacks are still not addressable, but they are no longer circular in effect — they are counted and guarded — and `DEPTH`, `PICK` and `ROLL` are back. | +| **D-3** | Exact `+*` semantics at 32 bits: whether the add carries out of `T` into the shift. | **Plain F18 semantics.** The carry out of `T` is not kept. `UM*` in §4 is written for this and is exact over the full range (revised and proven on the golden model, 2026-10-02). | +| **D-4** | Node memory map, including port and register addresses. | **Deferred** to step 2. Symbolic names only for now (§6, §7). | +| **D-5** | Host node cell width. | **Match the host CPU:** 32 on a Zynq-7000 (Cortex-A9), 64 on an aarch64 host. The compiler capsule is written width-independent. | +| **D-6** | Which heat structures exist in hardware: per-opcode counters only, or also per-call-target and word-to-word transition counters. | **Deferred** to step 2. The golden model implements per-opcode and per-call-target heat in the meantime. | +| **D-7** | `ROLL` semantics. | **FORTH-79** (2026-10-04, with D-16): `n ROLL` takes out the n-th value, counting from one and not counting `n`, and puts it on top; `3 ROLL` is `ROT`, `1 ROLL` does nothing; `n < 1` is an error. `PICK` counts the same way: `1 PICK` is `DUP`. v3's count from zero. | +| **D-8** | Q48.16 signedness. | **Signed.** v3's unsigned comparisons and `Q.FROM-INT` clamping are retired. | +| **D-9** | Instruction word width on a 64-bit-cell host (ruled 2026-10-02). | **32 bits at every cell width.** Six 5-bit slots plus 2 spare bits, as in §1.2. On a 64-bit host the instruction word is the low 32 bits of the cell and the high half is ignored, so compiled code is identical at both widths. Only data and `@p` literals are a full cell wide. | +| **D-10** | Q48.16 width on a 64-bit-cell node (ruled 2026-10-02). | **Two cells at every cell width.** A Q value is a signed double on 32- and 64-bit nodes alike, so every Q word is the same double word at both widths. At 32-bit cells this is bit-for-bit v3's 64-bit Q. At 64-bit cells the low cell is v3's value, and where v3 wraps on Q48.16 overflow (a sum past Q max, `ABS` or `NEG` of Q min) the high cell carries the true result instead. | +| **D-11** | `Q./` semantics: division by zero, rounding, overflow (ruled 2026-10-02). | **Saturate and flag; round toward zero; saturate on overflow.** The quotient of `a * 2^16 / b` is rounded toward zero, like `SM/REM`. When it does not fit a Q value it is clamped to Q max or Q min by its sign. Division by zero returns Q max or Q min by the sign of the dividend (`0 / 0` gives 0) and sets the node's `NODE-ERROR` register (§7), which `VM-ERROR?` reads. v3 returned 0 on division by zero and saturated whenever the dividend was 2^48 or more, even when the quotient would have fit. | +| **D-12** | Q approximations outside their domain (ruled 2026-10-02). | **Return 0 and set `NODE-ERROR`.** `Q.SQRT` of a negative value and `Q.LOG` of zero or a negative value return 0 and set `NODE-ERROR` (§7), as `Q./` does on division by zero (D-11). v3 returned 0 for `ln(0)` without a flag and read negative arguments as large unsigned values. | +| **D-13** | Pictured-output hold buffer: size and errors (ruled 2026-10-03). | **63 characters, as v3; on error set `NODE-ERROR` and drop the character.** The buffer holds 63 characters at either cell width. `HOLD` of a value outside 0–255, or into a full buffer, stores nothing and sets `NODE-ERROR` (§7), which is v3's behaviour (it set its error flag and dropped the character). A full double in base 2 therefore does not fit, as in v3. | +| **D-14** | An address outside the node's memory (ruled 2026-10-04). | **Guarded: an address fault.** Every address a running programme uses is checked before it is used — `P` when an instruction word or an `@p` literal is fetched or `!p` stores, `A` for `@ @+ ! !+`, `B` for `@b !b`. Outside `0 … memory size − 1` the opcode does nothing (no fetch, no store, `A` and `B` untouched), the rest of its instruction word is not executed, both stacks are emptied (D-16), and `P` becomes the node's **fault handler** for that kind of fault. The handler does not return to the programme. On the host node the handler is `(FAULT)` (`v4/capsule/quit.v4`): it prints `Address out of range`, ends any definition that was open, prints ` ERROR` and returns to the prompt, from however deep the fault was. A node with no handler stops. v3 printed ` ERROR` alone. What a mesh node's handler does — it has no console — comes with the mesh (step 2). Executed on the golden model (2026-10-04): `tests/test_exec.c` for every memory opcode and for `P`, `tests/test_host_quit.c` from the prompt. | +| **D-15** | Division by zero in `/` `MOD` `/MOD` `*/` `*/MOD` `M/MOD` (ruled 2026-10-04). | **Guarded: the word reports it and the line ends.** Each of these words tests its divisor before anything else. If it is zero the word prints v3's message, its own name and `: Division by zero`, takes its operands off the stack as v3 does, ends any definition that was open, prints ` ERROR` and returns to the prompt, from however deep; its caller is not returned to. `M/MOD` says so too, where v3 printed ` ERROR` alone. Source in `v4/capsule/forth.v4`; executed on the golden model's host node (2026-10-04), including transcripts of the v3 binary. `Q./` keeps D-11 (saturate and flag). `UM/MOD` and `SM/REM` are internal and unguarded: their callers have checked. What a mesh node, with no console, does on a zero divisor comes with the mesh (step 2); §4's definitions, which the mesh-node tests execute, still leave it unspecified. | +| **D-16** | Stack overflow and underflow; `DEPTH`, `PICK`, `ROLL` (ruled 2026-10-04; revises D-2). | **Guarded: a stack fault.** Each stack counts what it holds. Before every opcode the node checks that the stacks hold what the opcode takes — including a `T` or `S` it only reads — and have room for what it leaves. If not, the opcode does nothing and the node faults exactly as for a bad address (D-14), to that kind's handler: `Stack overflow`, `Stack underflow`, `Return stack overflow`, `Return stack underflow`, then ` ERROR` and the prompt. **Every fault, D-14's included, empties both stacks**: the handler does not return, and what a word stopped part-way has left on the data stack is of no use to its caller. (v3 keeps what the failing word had not taken, and names the word: `DROP: Stack underflow`.) The fault handler is a table of five words, one per kind, each a jump (`(FAULTS)` in `v4/capsule/quit.v4`). Two registers (§7) are all a programme sees of the stacks: `DSTACK-DEPTH` and `RSTACK-DEPTH` read as the depth, and a store to one empties that stack. There is still no stack pointer and no address for a stack cell, so `SP@` and `SP!` stay retired; `.S` waits for number output to reach the capsule. The sizes were unchanged by this ruling, 10 and 9 (D-17 then deepens the host node's): one more value, or one more level of call, is now an error message where it used to be silent corruption. Executed on the golden model (2026-10-04): `tests/test_exec.c` for every opcode at every depth of both stacks, `tests/test_host_quit.c` from the prompt. | +| **D-17** | Stack sizes on the host node (2026-10-04, following D-16). | **32 values and 32 return entries on the host node; a mesh node keeps the F18's 10 and 9.** Once the stacks are counted (D-16) their size is a parameter of the node, like its memory, and the host node is the one that runs the interpreter and the compiler underneath the user's programme: at 10 and 9 the prompt left a programme about six values, and `/` could be used only four words deep. The mechanism is the same at both sizes — top registers over a ring — and so is every word's definition. v3's stacks are deeper still. In the golden model the sizes are `V4_DATA_RING` and `V4_RET_RING` (`stack.h`), set for the host-node tests in `v4/Makefile`. | +| **D-18** | Every other error (ruled 2026-10-04: "guard all errors"). | **A word that finds an error raises it, and the line ends there.** The word takes its own arguments off the stack and stores an error code in `NODE-ERROR` (§7). On a node with a prompt that store is a trap, a sixth kind of fault beside D-14's and D-16's: nothing after it executes, the return stack is emptied, and the prompt prints the code's message, ends any definition that was open, prints ` ERROR` and waits for the next line. Unlike the other faults it leaves the data stack as the word left it. The codes: 1 `Negative count` (`CMOVE`, `TYPE`), 2 `Not a number` (`NUMBER`), 3 `Number too long` (`HOLD` into a full buffer), 4 `Not a character` (`HOLD`), 5 `Dictionary full` (`,` `C,` `ALLOT`, any defining word), 6 `Name missing` (a defining word with nothing after it), 7 `Control structure mismatch`, 8 `Control structures too deep`, 9 `Shift count out of range`, 10 `Protected word`, 11 `Division by zero` (`Q./`), 12 `Argument out of range`, 13 `Block out of range`, 14 `No block is being loaded`, 15 `Deferred word not set`, 16 `Not a word`; −1 means the word printed its own message (`UNKNOWN WORD: 'xxx'`, `xxx: compile-only`). Before this ruling these set the flag and the line ran on to its end. v3 stops at once too; its messages name the word (`LOOP: missing DO`) where v4's name the fault. With the trap not attached `NODE-ERROR` is plain memory and the word returns, which is how the words are tested below the prompt. D-11, D-12 and D-13 said "set `NODE-ERROR`"; on a node with a prompt that now means this. Executed on the golden model (2026-10-04): `tests/test_exec.c`, `tests/test_host_quit.c`. | +| **D-19** | Block storage on the golden model (2026-10-05). **Replaced 2026-10-07:** the four registers are gone; the block words are kernel requests on port 0, by block number, and the kernel keeps the node's window of four slots (`MESH.md` section 8, `v4/include/v4/blocks.h`). What follows is the decision as it was. | **Four memory-mapped registers on the host node, until the mesh carries the storage service.** `BLOCK-NUMBER`, `BLOCK-ADDRESS` (the word address of 256 cells), `BLOCK-COMMAND` (a store of 1 reads the block into those cells, 2 writes it from them) and `BLOCK-STATUS` (0 when the command worked, −1 for a block the device has not got or cells not all in memory). A block is 1024 bytes: 256 cells, four bytes to a cell, the first byte lowest, at either cell width. This is the console's arrangement (§7) applied to storage; like it, it is the model's stand-in and not the mesh protocol, which §5.11 still leaves to the device node. | + +**Consequences of D-2 that every definition must respect.** The data stack holds 10 items and the +return stack 9, and every `call`, `FOR`, `DO` loop frame and `push` uses return-stack slots. Nesting +is therefore shallow, and exceeding either depth is a stack fault (D-16; before 2026-10-04 it +corrupted silently). Every CAP +definition in §4 and §5 must be re-checked against these limits before it is accepted as a POST +target; the hand traces so far assumed unbounded stacks. --- @@ -193,31 +212,91 @@ dependency order. : U< ( u1 u2 -- flag ) 2DUP xor 0< IF NIP 0< ELSE - 0< THEN ; \ ---- multiply (D-3) ----------------------------------------------------- -: UM* ( u1 u2 -- ulo uhi ) a! 0 31 FOR +* UNEXT push drop a pop ; +\ Plain F18 +* loses the carry out of T, and its shift keeps T's sign bit, so +\ the loop is exact only while the multiplicand in S and the running T both +\ lie in [-2^(n-2), 2^(n-2)). UM* therefore multiplies by s = u1 2/, which +\ always does, starting T at t0 = u2 2/ when u1 is odd, and gets +\ hi:lo = t0 + s*u2. Then u1*u2 = 2*(hi:lo) + c_lo + c_hi*2^n, where +\ c_lo = u1 & u2 & 1 +\ c_hi = (u1<0 ? u2 : 0) + (u1 odd and u2<0 ? 1 : 0) +\ restore the bits the two halvings dropped and the unsigned reading of +\ both top bits. Exact over the full range; proven on the golden model. +: UM* ( u1 u2 -- ulo uhi ) + over 1 and inv 1 + over 2/ and \ u1 u2 t0 t0 = u2 2/ if u1 odd + over a! 31 push \ A: u2 R: loop count (FOR's push, early) + push over 2/ pop \ u1 u2 s t0 s = u1 2/ + L: +* unext \ u1 u2 s hi A: lo + push drop pop \ u1 u2 hi + 2* a -if L0 drop 1 + jump L1 L0: drop L1: push \ R: 2hi + top bit of lo + over -if L2 drop dup jump L3 L2: drop 0 L3: push \ R: + (u1<0 ? u2 : 0) + dup -if L4 drop over 1 and jump L5 L4: drop 0 L5: \ u2<0 ? u1&1 : 0 + pop + pop + push \ u1 u2 R: hi' + and 1 and a 2* + pop ; \ lo' hi' +\ u1 and u2 wait on the data stack under the loop (+* touches only T, S and +\ A), so the corrections are made after it, with -if in place of 0< calls, +\ and the return stack holds at most two temporaries. The loop count is +\ pushed before s is made, so the data stack never holds more than four. +\ Leaves its caller 6 data cells under its arguments and 6 return entries +\ (revised 2026-10-02; the first full-range version parked its three +\ corrections on the return stack and left 4). \ ---- divide: 32-step restoring division, divisor held in A -------------- +\ Each step shifts hi:lo left one bit and, when the shifted-out bit of hi was +\ set or hi' >= d, subtracts d from hi' and sets the new low bit of lo. The +\ unsigned compare is done by sign tests in line (as U< does), and x - d is +\ `inv a + inv`, so the loop body makes no calls: it needs one return-stack +\ entry beyond its own count. : UM/MOD ( ulo uhi ud -- urem uquot ) - a! - 31 FOR - over 0< NEGATE push \ R: lo's top bit (1/0) - dup 0< push \ R: hi's top bit (-1/0) - 2* pop pop SWAP push OR pop \ lo hi' t hi shifted, lo bit brought in - push SWAP 2* SWAP pop \ lo' hi' t - over a U< 0= OR \ lo' hi' flag t OR hi' >= d - IF a - SWAP 1 OR SWAP THEN + a! 31 FOR + -if L0 \ hi's top bit set: + 2* over -if L1 drop 1 + jump L2 \ hi' = 2hi + top bit of lo + L1: drop L2: push 2* pop \ lo' = 2lo + jump SUB \ true hi' >= 2^n > d + L0: + 2* over -if L3 drop 1 + jump L4 + L3: drop L4: push 2* pop + dup a xor -if L5 \ top bits of hi' and d differ: + drop -if NOSUB jump SUB \ hi' >= d iff hi' has it + L5: drop dup inv a + inv -if L6 \ same: hi' >= d iff hi'-d >= 0 + drop jump NOSUB + L6: push drop pop jump SETBIT + SUB: inv a + inv \ hi' - d + SETBIT: push 1 + pop \ lo' is even: + 1 sets bit 0 + NOSUB: NEXT - SWAP ; + over push push drop pop pop ; \ SWAP in line +\ Executed on the golden model (2026-10-02): exact, q*d + r = uhi:ulo with +\ r < d, for every uhi < ud at 32- and 64-bit cells. Outside that range +\ (uhi >= ud, including ud = 0) the result is unspecified, as in FORTH-79; it +\ always terminates after 32 steps. Stack use (D-2): up to 6 data cells may +\ lie under the three arguments and up to 6 return-stack entries under its +\ return address. For UM* the same limits are 6 and 6. This replaces a +\ first version built on U<, 0<, SWAP and OR calls, which was also exact but +\ left only 3 and 3 (too few for SM/REM inside /MOD) and stepped about five +\ times as many instruction words. \ ---- signed division, truncating toward zero (v3 semantics) ------------- +\ The quotient takes the sign of d xor n, the remainder the sign of d. Sign +\ tests are native -if (as in 0<) and NEGATE is in line, so the only calls +\ are DNEGATE and UM/MOD, both call-free inside. : SM/REM ( d n -- rem quot ) - 2DUP xor push \ R: quotient sign - over push \ R: remainder sign (sign of dividend) - ABS push DABS pop UM/MOD - pop 0< IF push NEGATE pop THEN - pop 0< IF NEGATE THEN ; + over over xor push \ R: quotient sign (top bit) + over push \ R: + remainder sign (top bit of d) + -if L0 inv 1 + L0: push \ R: + |n| + -if L1 DNEGATE L1: \ |d| + pop UM/MOD \ urem uquot + pop -if L2 drop push inv 1 + pop jump L3 L2: drop L3: + pop -if L4 drop inv 1 + ; L4: drop ; +\ Executed on the golden model (2026-10-02): exact whenever the truncated +\ quotient fits a signed cell, at 32- and 64-bit cells. Stack use (D-2): up +\ to 5 data cells under the three arguments and 3 return-stack entries under +\ its return address; /MOD, one call further out, leaves 2. The first +\ version, built on ABS, DABS, 0< and NEGATE calls, overflowed the return +\ stack inside DABS -> DNEGATE -> D+ -> U> and never returned correctly for +\ a negative dividend. ``` -`2DUP`, `-`, `ABS`, and `DABS` are defined in §5; the compiler resolves forward references within the +`2DUP`, `-`, and `DNEGATE` are defined in §5; the compiler resolves forward references within the core capsule. --- @@ -233,53 +312,71 @@ Section numbers match the v3 primitive reference. | `DROP` | OP | `drop` | | `DUP` | OP | `dup` | | `OVER` | OP | `over` | -| `SWAP` | CAP | §4 | -| `?DUP` | CAP | `dup IF dup THEN` | -| `ROT` | CAP | §4 | -| `-ROT` | CAP | `ROT ROT` | -| `DEPTH` | MM | Read `DSP` (D-2). | -| `PICK` | MM + CAP | Read stack RAM at `DSP − n` (D-2). 0-based, as in v3. | -| `ROLL` | CAP | Rewritten with ANS semantics (D-7), using `PICK` and a copy loop. | +| `SWAP` | CAP | §4. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 7 data cells and 6 return entries. | +| `?DUP` | CAP | `if Z dup ; Z: ;` (`dup IF dup THEN` without the extra copy). Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `ROT` | CAP | §4. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 6 data cells and 4 return entries; in line, with `SWAP` in line, it calls nothing. | +| `-ROT` | CAP | `SWAP push SWAP pop`, `SWAP` in line (`ROT ROT` in one pass). Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 6 data cells and 5 return entries. | +| `DEPTH` | CAP | FORTH-79: how many values were on the stack before `DEPTH`. `DSTACK-DEPTH b! @b` (D-16). Source in `v4/capsule/forth.v4`; executed on the golden model's host node (2026-10-04), including a transcript of the v3 binary. | +| `PICK` | CAP | FORTH-79 (D-7): `( n -- x )`, a copy of the n-th value counting from one; `1 PICK` is `DUP`, `2 PICK` is `OVER`. The stack has no addresses, so the `n - 1` values above the one wanted are set aside in memory and put back. `n < 1` prints `PICK: Invalid index`; `n` greater than the depth is a stack underflow fault. It works with the stack full (every cell but one holding a value, and `n`). v3's `PICK` counts from zero. Source in `v4/capsule/forth.v4`; executed on the golden model's host node (2026-10-04). | +| `ROLL` | CAP | FORTH-79 (D-7): `( n -- )`, the n-th value counting from one is taken out and put on top; `3 ROLL` is `ROT`, `1 ROLL` does nothing. Built as `PICK` is, with the same errors. v3's `ROLL` counts from zero. Source in `v4/capsule/forth.v4`; executed on the golden model's host node (2026-10-04). | ### 5.2 Return stack | Word | Fate | v4 definition | | --- | --- | --- | -| `>R` | IN | `push` | -| `R>` | IN | `pop` | -| `R@` | IN | `pop dup push` | +| `>R` | IN | `push` — executed on the golden model (2026-10-03) with `R@` and `R>`, including a transcript of the v3 binary. | +| `R>` | IN | `pop` — executed on the golden model (2026-10-03), see `>R`. | +| `R@` | IN | `pop dup push` — executed on the golden model (2026-10-03), see `>R`. | ### 5.3 Memory | Word | Fate | v4 definition / notes | | --- | --- | --- | -| `@` | IN | `a! @` | -| `!` | IN | `a! !` | -| `+!` | CAP | `a! @ + !` | -| `-!` | CAP | `a! NEGATE @ + !` | -| `2@` | CAP | `a! @+ @` (low cell at `addr`, high at `addr+1`, as in v3) | -| `2!` | CAP | `a! SWAP !+ !` | -| `C@` | CAP | See below (D-1). | -| `C!` | CAP | See below (D-1). | -| `FILL` | CAP | See below. | -| `MOVE` | CAP | `push 2DUP U< IF pop CMOVE> ELSE pop CMOVE THEN` | -| `ERASE` | CAP | `0 FILL` | -| `CELLS` | IN | Empty (word-addressed). Becomes `2* 2*` if D-1 chooses bytes. | +| `@` | IN | `a! @` — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `!` | IN | `a! !` — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `+!` | CAP | `a! @ + !` — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `-!` | CAP | `a! NEGATE @ + !`, `NEGATE` in line — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `2@` | CAP | `a! @+ @` (low cell at `addr`, high at `addr+1`, as in v3) — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `2!` | CAP | `a! SWAP !+ !`, `SWAP` in line — executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 7 data cells and 6 return entries. | +| `C@` | CAP | See below (D-1). Call-free. Executed on the golden model (2026-10-03). Leaves its caller 8 data cells and 7 return entries. | +| `C!` | CAP | See below (D-1). Call-free. Executed on the golden model (2026-10-03). | +| `FILL` | CAP | `( baddr u c -- )`: the low byte of `c`. See below. Nothing for `u = 0`; for `u < 0` nothing is written and `NODE-ERROR` is set (v3 read a negative count as a huge unsigned one). Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 5 data cells and 5 return entries. Clobbers `A` and, on error, `B`. | +| `MOVE` | CAP | `( addr1 addr2 n -- )` — FORTH-79 (ruled 2026-10-04): `n` cells from `addr1` to `addr2`, the cell at `addr1` first; nothing for `n <= 0`. The addresses are word addresses (D-1). `-if OK drop drop drop ; OK: if DONE push over a! @ over a! ! 1 + push 1 + pop pop -1 + jump OK DONE: drop drop drop ;` v3's `MOVE` moved bytes, in whichever direction did not overwrite what it had yet to read; that is `CMOVE` and `CMOVE>`. Executed on the golden model (2026-10-04) against C, overlapping both ways. Leaves its caller 6 data cells and 6 return entries. Clobbers `A`. | +| `ERASE` | CAP | `0 FILL`, as `0 jump FILL`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `CELLS` | IN | Empty (word-addressed, D-1); v3 answers 24 for `3 CELLS`. Executed on the golden model (2026-10-03). | ```forth -\ byte access on a word-addressed node, little-endian +\ byte access on a word-addressed node, little-endian: four bytes to a cell at +\ either cell width (so compiled code is the same, D-9), byte address = 4 * word +\ address + byte index. `@` and `!` inside are the opcodes, addressing through A. +\ C@ is call-free, like C!: one case per byte position, the cell shifted down +\ with a 2/ loop and masked. It replaces a version built on LSHIFT, RSHIFT and +\ SWAP calls, which was correct but left its caller 4 return-stack entries. : C@ ( baddr -- c ) - dup 3 and 3 LSHIFT SWAP 2 RSHIFT a! @ SWAP RSHIFT 255 and ; + dup 2/ 2/ a! 3 and \ k A: word address + if K0 -1 + if K1 -1 + if K2 + drop @ 23 FOR 2/ UNEXT 255 and ; \ byte 3 + K2: drop @ 15 FOR 2/ UNEXT 255 and ; \ byte 2 + K1: drop @ 7 FOR 2/ UNEXT 255 and ; \ byte 1 + K0: drop @ 255 and ; \ byte 0 +\ C! is call-free: one case per byte position. The byte is shifted up with a +\ 2* loop, that byte of the cell cleared with a constant mask, and the two added. +\ It replaces a version built on LSHIFT, RSHIFT, SWAP and OR calls, which was +\ correct but left its caller 4 return-stack entries; this leaves 7. : C! ( c baddr -- ) - dup 2 RSHIFT a! \ A = word address - 3 and 3 LSHIFT \ c bits - SWAP 255 and over LSHIFT \ bits c' - SWAP 255 SWAP LSHIFT inv \ c' ~mask - @ and OR ! ; + dup 2/ 2/ a! 3 and push 255 and pop \ c' k A: word address + if K0 -1 + if K1 -1 + if K2 + drop 23 FOR 2* UNEXT @ 4278190080 inv and + ! ; \ byte 3 + K2: drop 15 FOR 2* UNEXT @ -16711681 and + ! ; \ byte 2 + K1: drop 7 FOR 2* UNEXT @ -65281 and + ! ; \ byte 1 + K0: drop @ -256 and + ! ; \ byte 0 : FILL ( baddr u c -- ) - SWAP BEGIN dup WHILE 1- push 2DUP SWAP C! SWAP 1+ SWAP pop REPEAT 2DROP drop ; + -ROT \ c baddr u + -if OK drop drop drop NODE-ERROR b! -1 !b ; \ u < 0 + OK: if DONE push over over C! 1 + pop -1 + jump OK + DONE: drop drop drop ; ``` ### 5.4 Arithmetic @@ -287,17 +384,17 @@ Section numbers match the v3 primitive reference. | Word | Fate | v4 definition / notes | | --- | --- | --- | | `+` | OP | `+` | -| `-` | CAP | `NEGATE +` | -| `*` | CAP | `UM* drop` | -| `/` | CAP | `/MOD NIP` | +| `-` | CAP | `NEGATE +`, `NEGATE` in line — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `*` | CAP | `UM* drop` — executed on the golden model (2026-10-03) against C's wrapping product. Leaves its caller 6 data cells and 5 return entries. | +| `/` | CAP | `/MOD NIP`, as `push S>D pop SM/REM push drop pop` (`/MOD`'s body and `NIP` in line, so it runs no deeper than `/MOD`). Truncates toward zero, as v3. Executed on the golden model (2026-10-03) against C wherever the quotient fits a cell. Leaves its caller 5 data cells and 2 return entries. Division by zero is guarded on the host node (D-15). **On the host node** (`v4/capsule/forth.v4`) `SM/REM` has `UM/MOD` written into it and keeps its two signs in memory, not on the return stack, so that at nine return entries `/`, `MOD` and `/MOD` worked from four words deep at the prompt, and `*/` and `*/MOD`, with `M*` written in, from two and three (with D-17's 32 entries there is room to spare); the answers are the same, checked against C on every pair of the edge values. | | `MOD` `/MOD` `*/` `*/MOD` (§4 versions) | RET | Shadowed duplicates. Only the §6 versions survive. | -| `1+` `1-` `2+` `2-` | IN | `1 +`, `-1 +`, `2 +`, `-2 +` | +| `1+` `1-` `2+` `2-` | IN | `1 +`, `-1 +`, `2 +`, `-2 +` — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | | `2*` | OP | `2*` | | `2/` | OP | `2/` | -| `ABS` | CAP | `dup 0< IF NEGATE THEN` | -| `NEGATE` | CAP | §4 | -| `MIN` | CAP | `2DUP > IF SWAP THEN drop` | -| `MAX` | CAP | `2DUP < IF SWAP THEN drop` | +| `ABS` | CAP | `dup 0< IF NEGATE THEN` — executed on the golden model (2026-10-02). | +| `NEGATE` | CAP | §4. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `MIN` | CAP | `over over < if B drop drop ; B: drop push drop pop ;` — the smaller, signed. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 4 data cells and 6 return entries. | +| `MAX` | CAP | `over over < if A drop push drop pop ; A: drop drop ;` — the larger, signed. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 4 data cells and 6 return entries. | ### 5.5 Logic and comparison @@ -305,25 +402,25 @@ Section numbers match the v3 primitive reference. | --- | --- | --- | | `AND` | OP | `and` | | `XOR` | OP | `xor` | -| `OR` | CAP | §4 | +| `OR` | CAP | §4. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | | `INVERT` | OP | `inv` | -| `NOT` | CAP | `0=` (FORTH-79 logical not, as in v3) | -| `LSHIFT` | CAP | `BEGIN dup WHILE 1- SWAP 2* SWAP REPEAT drop` | -| `RSHIFT` | CAP | `BEGIN dup WHILE 1- SWAP 2/ MSB inv and SWAP REPEAT drop` (clears the sign bit each step; `MSB` is the cell-width top-bit constant) | -| `0=` `0<` | CAP | §4 | -| `0<>` | CAP | `0= 0=` | -| `0>` | CAP | `dup 0< SWAP 0= OR 0=` (correct for the most negative number) | -| `=` | CAP | `xor 0=` | -| `<>` | CAP | `xor 0<>` | -| `<` | CAP | `2DUP xor 0< IF drop 0< ELSE - 0< THEN` (overflow-safe) | -| `>` | CAP | `SWAP <` | -| `<=` | CAP | `> 0=` | -| `>=` | CAP | `< 0=` | -| `U<` | CAP | §4 | -| `U>` | CAP | `SWAP U<` | -| `WITHIN` | CAP | `over - push - pop U<` | -| `TRUE` | IN | `-1` | -| `FALSE` | IN | `0` | +| `NOT` | CAP | `0=` (FORTH-79 logical not, as in v3), as `jump 0=`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `LSHIFT` | CAP | `BEGIN dup WHILE 1- SWAP 2* SWAP REPEAT drop` — executed on the golden model (2026-10-03). | +| `RSHIFT` | CAP | `BEGIN dup WHILE 1- SWAP 2/ MSB inv and SWAP REPEAT drop` (clears the sign bit each step; `MSB` is the cell-width top-bit constant) — executed on the golden model (2026-10-03). | +| `0=` `0<` | CAP | §4. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `0<>` | CAP | `if Z drop -1 ; Z: ;` (`0= 0=` without calls). Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `0>` | CAP | `-if NN drop 0 ; NN: if Z drop -1 ; Z: ;` — two native sign tests in place of `dup 0< SWAP 0= OR 0=`; correct for the most negative number. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `=` | CAP | `xor 0=` — executed on the golden model (2026-10-02). | +| `<>` | CAP | `xor 0<>`, as `xor jump 0<>`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `<` | CAP | `2DUP xor 0< IF drop 0< ELSE - 0< THEN` (overflow-safe) — executed on the golden model (2026-10-02). | +| `>` | CAP | `SWAP <`, as `SWAP jump <` with `SWAP` in line. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 6 data cells and 6 return entries. | +| `<=` | CAP | `> 0=`, as `SWAP < jump 0=`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 6 data cells and 6 return entries. | +| `>=` | CAP | `< 0=`, as `< jump 0=`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 6 data cells and 6 return entries. | +| `U<` | CAP | §4. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 6 data cells and 7 return entries. | +| `U>` | CAP | `SWAP U<` — executed on the golden model (2026-10-02). | +| `WITHIN` | CAP | `( n low high -- flag )`: `push over pop < push < inv pop and` — `low <= n < high`, both comparisons signed, which is what v3 computes. It replaces `over - push - pop U<`, the circular form, which answers differently when `low > high` (`5 10 0 WITHIN` is false in v3 and here, true in that form). Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 4 data cells and 5 return entries. | +| `TRUE` | IN | `-1` — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | +| `FALSE` | IN | `0` — executed on the golden model (2026-10-03), including a transcript of the v3 binary. | ### 5.6 Mixed-precision arithmetic @@ -331,40 +428,41 @@ A double is two 32-bit cells on a mesh node. | Word | Fate | v4 definition | | --- | --- | --- | -| `M+` | CAP | `S>D D+` | -| `M-` | CAP | `NEGATE M+` | -| `M*` | CAP | `2DUP xor push ABS SWAP ABS UM* pop 0< IF DNEGATE THEN` | -| `M/MOD` | CAP | `SM/REM` | -| `MOD` | CAP | `/MOD drop` | -| `/MOD` | CAP | `push S>D pop SM/REM` | -| `*/` | CAP | `*/MOD NIP` | -| `*/MOD` | CAP | `push M* pop SM/REM` | +| `M+` | CAP | `S>D D+` — executed on the golden model (2026-10-02). | +| `M-` | CAP | `( d n -- d )`: `S>D DNEGATE jump D+`, `S>D` by a sign test in line. `n` is widened before it is negated, so the most negative `n` is subtracted correctly; `NEGATE M+` would add it. Executed on the golden model (2026-10-03) against C and results recorded from the v3 binary (v3 took the double with its low cell on top; the standard order is kept here, as for `M+`). Leaves its caller 5 data cells and 5 return entries. | +| `M*` | CAP | `( n1 n2 -- d )`: `over over xor push -if A inv 1 + A: push -if B inv 1 + B: pop UM* pop -if P drop jump DNEGATE P: drop ;` — the unsigned product of the magnitudes, negated when the signs differ; the sign tests are native. Executed on the golden model (2026-10-03) against C and results recorded from the v3 binary. Leaves its caller 6 data cells and 4 return entries. Clobbers `A`. | +| `M/MOD` | CAP | `( d n -- rem quot )`: `jump SM/REM`. Truncating, the remainder with the dividend's sign, as v3. v3 took the double with its low cell on top (`dhigh dlow n`), the reverse of what its own `M*` leaves; the standard order is kept here, so `M* ... M/MOD` composes. Executed on the golden model (2026-10-03), including results recorded from the v3 binary with the double's cells exchanged. Leaves its caller 5 data cells and 3 return entries. | +| `MOD` | CAP | `/MOD drop`, with `/MOD`'s body in line: `push S>D pop SM/REM drop`. The remainder has the dividend's sign, as v3. Executed on the golden model (2026-10-03) against C and results recorded from the v3 binary. Leaves its caller 5 data cells and 2 return entries. Division by zero is guarded on the host node (D-15). | +| `/MOD` | CAP | `push S>D pop SM/REM` — executed on the golden model (2026-10-02). | +| `*/` | CAP | `*/MOD NIP`, as `push M* pop SM/REM push drop pop`. Executed on the golden model (2026-10-03). Leaves its caller 5 data cells and 2 return entries. | +| `*/MOD` | CAP | `( n1 n2 n3 -- rem quot )`: `push M* pop jump SM/REM` — the product is a full double, so the answer is exact whenever the quotient fits a cell. v3 multiplied in one cell at 64-bit cells and so was right only while `n1 * n2` fitted one; the two agree there. Executed on the golden model (2026-10-03) against the identity `quot * n3 + rem = n1 * n2` on every combination of the edge values, and results recorded from the v3 binary. Leaves its caller 5 data cells and 2 return entries. | ### 5.7 Double-cell numbers | Word | Fate | v4 definition | | --- | --- | --- | -| `S>D` | CAP | `dup 0<` | -| `D+` | CAP | `push SWAP push over + 2DUP U> ROT drop NEGATE pop pop + +` | -| `DNEGATE` | CAP | `inv SWAP inv SWAP 1 0 D+` | -| `D-` | CAP | `DNEGATE D+` | -| `DABS` | CAP | `dup 0< IF DNEGATE THEN` | -| `D0=` | CAP | `OR 0=` | -| `D0<` | CAP | `NIP 0<` | -| `D=` | CAP | `D- D0=` | -| `D<` | CAP | `ROT 2DUP = IF 2DROP U< ELSE SWAP < NIP NIP THEN` | -| `DMAX` | CAP | `2OVER 2OVER D< IF 2SWAP THEN 2DROP` | -| `DMIN` | CAP | `2OVER 2OVER D< 0= IF 2SWAP THEN 2DROP` | -| `D2*` | CAP | `2* over 0< NEGATE OR SWAP 2* SWAP` | -| `D2/` | CAP | `dup 1 and push 2/ SWAP 1 RSHIFT pop IF MSB OR THEN SWAP` | -| `2DROP` | IN | `drop drop` | -| `2DUP` | IN | `over over` | -| `2SWAP` | CAP | `ROT push ROT pop` | -| `2OVER` | CAP | `push push 2DUP pop pop 2SWAP` | -| `2ROT` | CAP | `2>R 2SWAP 2R> 2SWAP` | -| `2>R` | IN | `SWAP push push` | -| `2R>` | IN | `pop pop SWAP` | -| `2R@` | IN | `pop pop 2DUP push push SWAP` | +| `S>D` | CAP | `dup 0<` — executed on the golden model (2026-10-02). | +| `D+` | CAP | `push over push push drop pop over over xor -if L1 drop + -if C1 jump C0 L1: drop over -if L2 drop + jump C1 L2: drop + C0: pop pop + ; C1: pop pop + 1 + ;` — call-free. The carry out of the low cells is found by sign tests: if their top bits differ, there is a carry exactly when the sum's top bit is clear; if they match, exactly when both are set. Executed on the golden model (2026-10-02); leaves its caller 6 data cells under its arguments and 5 return entries. Replaces `push SWAP push over + 2DUP U> ROT drop NEGATE pop pop + +`, which was exact but left 1 return entry. | +| `DNEGATE` | CAP | `inv over if L1 drop push inv 1 + pop ; L1: drop 1 + ;` — call-free: `~d + 1`, carrying into the high cell exactly when the low cell is 0. Executed on the golden model (2026-10-02). Replaces `inv SWAP inv SWAP 1 0 D+`, which left a caller no return-stack room, so `DABS` could not run at all. | +| `D-` | CAP | `DNEGATE D+` — executed on the golden model (2026-10-02). | +| `DABS` | CAP | `dup 0< IF DNEGATE THEN` — executed on the golden model (2026-10-02). | +| `D0=` | CAP | `OR 0=` — executed on the golden model (2026-10-02). | +| `D0<` | CAP | `NIP 0<`, as `push drop pop jump 0<`. Executed on the golden model (2026-10-03), including results recorded from the v3 binary. | +| `D=` | CAP | `D- D0=` — executed on the golden model (2026-10-02). | +| `D<` | CAP | `ROT 2DUP = IF 2DROP U< ELSE SWAP < NIP NIP THEN` — executed on the golden model (2026-10-02). | +| `(D<)` | CAP | `( d1 d2 -- d1 d2 flag )`, call-free; internal to `DMAX` and `DMIN`. Copies of the high cells go on top; if they differ the flag comes from them, else from the low cells unsigned. The value tested always has its top bit set exactly when `d1 < d2`: `ah` (high signs differ), `ah - bh` (agree), `bl` (low top bits differ), `al - bl` (agree); `x - y` with `y` on top is `push inv pop + inv`. `dup push push over pop over over xor if TIE drop over over xor -if HS drop drop jump S1 HS: drop push inv pop + inv S1: -if N1 drop -1 jump D1 N1: drop 0 D1: pop SWAP ; TIE: drop drop drop dup push push over pop over over xor -if LS drop NIP jump S2 LS: drop push inv pop + inv S2: -if N2 drop -1 jump D2 N2: drop 0 D2: pop pop ROT ;` with `SWAP`, `NIP` and `ROT` in line. Executed on the golden model (2026-10-02). | +| `DMAX` | CAP | `(D<) if L drop push push drop drop pop pop ; L: drop drop drop ;` Executed on the golden model (2026-10-02). Replaces `2OVER 2OVER D< IF 2SWAP THEN 2DROP`, which needs 8 data cells plus `D<`'s 2: the whole 10-deep data stack, so it failed whenever the caller held anything at all (D-2). | +| `DMIN` | CAP | `(D<) if L drop drop drop ; L: drop push push drop drop pop pop ;` Executed on the golden model (2026-10-02); replaces `2OVER 2OVER D< 0= IF 2SWAP THEN 2DROP` for the same reason as `DMAX`. | +| `D2*` | CAP | `2* over -if P drop 1 + jump J P: drop J: push 2* pop` — the low cell's top bit enters the high cell; a native sign test in place of `over 0< NEGATE OR`. Executed on the golden model (2026-10-03), including results recorded from the v3 binary. | +| `D2/` | CAP | `push a! 0 pop +* push drop a pop` — one `+*` with `S = 0` is an exact arithmetic right shift of `T:A`, as in `Q.FROM-INT`. It replaces `dup 1 and push 2/ SWAP 1 RSHIFT pop IF MSB OR THEN SWAP`. Executed on the golden model (2026-10-03), including results recorded from the v3 binary. Clobbers `A`. | +| `2DROP` | IN | `drop drop` — executed on the golden model (2026-10-03). | +| `2DUP` | IN | `over over` — executed on the golden model (2026-10-03). | +| `2SWAP` | CAP | `ROT push ROT pop`, with `ROT` and `SWAP` in line so it makes no calls. Executed on the golden model (2026-10-02). Called, `ROT` and `SWAP` left its caller 2 return entries; in line, 4. | +| `2OVER` | CAP | `push push 2DUP pop pop 2SWAP` — executed on the golden model (2026-10-02). | +| `2ROT` | CAP | `push push 2SWAP pop pop jump 2SWAP`. Executed on the golden model (2026-10-03), including a result recorded from the v3 binary. With six cells of its own it leaves its caller 3 data cells and 1 return entry. | +| `2>R` | IN | `SWAP push push` — executed on the golden model (2026-10-03) with `2R@` and `2R>`; the high cell is on top of the return stack, as in v3. | +| `2R>` | IN | `pop pop SWAP` — see `2>R`. | +| `2R@` | IN | `pop pop 2DUP push push SWAP` — see `2>R`. | ### 5.8 Number formatting and output @@ -372,54 +470,199 @@ All output reaches the console through `EMIT` (DEV). | Word | Fate | Notes | | --- | --- | --- | -| `<#` `#` `#S` `HOLD` `SIGN` `#>` | CAP | Standard pictured-output definitions over `UM/MOD` and a hold buffer. v3's tolerant `#>` (pops `ud` only if present) is not kept; v4 follows the standard stack effect. | -| `.` `.R` `U.` `U.R` `D.` `D.R` | CAP | Built on pictured output and `TYPE`. | -| `.S` | CAP | Walks the stack via `DSP` (D-2). | -| `?` | CAP | `@ .` | -| `DUMP` | CAP | Loop over `@`/`C@` with pictured output. | -| `BASE` | CAP | Variable. | -| `DECIMAL` `HEX` `OCTAL` | CAP | `10 BASE !` and so on. | +| `<#` `#` `#S` `HOLD` `SIGN` `#>` | CAP | Pictured output over `UM/MOD` and a 64-byte hold buffer, filled backwards from its end `HEND` through the pointer `HLD`. Standard stack effects (v3 took its double low cell on top, and its tolerant `#>` popped `ud` only if present; neither is kept). Otherwise v3's behaviour: digits `0`–`9` then `A`–`Z`; `BASE` outside 2–36 reads as 10; 63 characters; `HOLD` of a value outside 0–255 or into a full buffer stores nothing and sets `NODE-ERROR` (D-13). Definitions below. Executed on the golden model (2026-10-03) against a C reference in bases 2, 3, 8, 10, 16, 36 and four invalid ones. `<# #S #>` leaves its caller 4 data cells and 3 return entries; the signed picture `dup push ABS 0 <# #S pop SIGN #>` leaves 2 return entries. `#`, `#S`, `HOLD` and `SIGN` clobber `A` and `B`. | +| `HLD` | CAP | Variable: byte address of the first held character. `HLD ( -- addr )` is the variable's word address, a literal. Not a v3 word. Executed on the golden model (2026-10-03): after `<#` and each `HOLD` or `#`, `HLD @` is the address `#>` returns. | +| `.` `.R` `U.` `U.R` `D.` `D.R` | CAP | Built on pictured output and `TYPE`; definitions below. `.`, `U.` and `D.` print the number in the current base, then one space. The `.R` words right-justify it in `width` columns, print a wider number whole, pad nothing for `width <= 0`, and print no space after it: that is FORTH-79's reference word (ruled 2026-10-04); v3 printed a space after these too. Where v4 parts from v3: a double is `( lo hi )`, where v3's `D.` took the low cell on top; `D.` prints the whole double, where v3 printed `DOUBLE-OVERFLOW` unless it fitted one signed cell (they agree whenever it does); printing honours the `BASE` variable, where v3 printed in a host copy that only `DECIMAL`, `HEX` and `OCTAL` set, so `n BASE !` changed v3's input base but not its output; and the number is built in the 63-character hold buffer, so a longer one — a 64-bit cell in base 2, a large double in a small base — loses its leading characters and sets `NODE-ERROR` (D-13), where v3 printed from a private 80-character buffer. Executed on the golden model (2026-10-03) against a C reference in the ten bases of the pictured-output test and eleven field widths, and against five transcripts of the v3 binary (a sixth, the extreme cells, at 64-bit cells). Each leaves its caller 4 data cells; `U.` and `U.R` leave 3 return entries, the signed words 2, their sign waiting on the return stack. All clobber `A` and `B`. | +| `(W)` | CAP | Variable, 2 cells: the field width of the `.R` words, and whether a blank follows the number. Like `BASE` and `HLD`, it lives in node memory, so the width is on neither stack while the picture runs. | +| `.S` | CC | As v3: ` `, then every value on the stack, the deepest first, each followed by a blank, then a new line; the stack is left as it was. Built on `DEPTH`, `PICK` and `.` (D-16). It works on the stack it is printing, so it needs six cells of it free: on the host node's 32 it prints a stack of up to 26 values, and a fuller one is a stack overflow. Source in `v4/capsule/numout.v4`; executed on the golden model's host node (2026-10-04), including transcripts of the v3 binary. | +| `?` | CAP | `( addr -- )`: `a! @ jump .` — the cell at word address `addr` (D-1), printed as `.` prints it. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 4 data cells and 2 return entries. Clobbers `A` and `B`. | +| `DUMP` | CAP | `( baddr u -- )`: `u` bytes from byte address `baddr`, sixteen to a line, in v3's format: the address in hex, `": "`, each byte as two hex digits and a space (three spaces where the line runs out), `" \|"`, the bytes as characters with `.` for anything outside 32–126, `"\|"` and a new line. Always hex, whatever `BASE` is, and `BASE` is put back. The address is two hex digits per byte of a cell — 8 at 32-bit cells, 16 at 64, which is v3's width. Nothing for `u = 0`; for `u < 0` nothing is printed and `NODE-ERROR` is set, as `TYPE` does, where v3 raised its error flag. Addresses are not range-checked (open, `node.h`). Definition below. Executed on the golden model (2026-10-03) against a C reference at six alignments and every length 0–50, and at 64-bit cells against a transcript of the v3 binary, byte for byte. Leaves its caller 4 data cells and 4 return entries. Clobbers `A` and `B`. | +| `(DP)` | CAP | Variable, 4 cells: `DUMP`'s saved `BASE`, address, count and column. | +| `BASE` | CAP | Variable. `BASE ( -- addr )` is its word address (D-1), a literal. Executed on the golden model (2026-10-03). Storing to it changes what is printed, which it did not in v3 (see `.`). | +| `DECIMAL` `HEX` `OCTAL` | CAP | `10 BASE !`, `16 BASE !`, `8 BASE !`, with `!` in line as `a! !`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Each leaves its caller 8 data cells and 8 return entries. Clobber `A`. | + +```forth +\ pictured output. HEND is the byte address just past the hold buffer. +: (BASE) ( -- b ) BASE b! @b dup -2 + -if L1 drop drop 10 ; + L1: drop dup -37 + -if L2 drop ; L2: drop drop 10 ; +: <# ( -- ) HEND HLD b! !b ; +: HOLD ( c -- ) dup -256 and if OKC drop jump ERR + OKC: drop HLD b! @b -(HEND-62) + -if ROOM drop + ERR: drop NODE-ERROR b! -1 !b ; + ROOM: drop HLD b! @b -1 + dup !b jump C! +: SIGN ( n -- ) -if L1 drop 45 jump HOLD L1: drop ; +: # ( ud1 -- ud2 ) + 0 (BASE) UM/MOD -ROT \ qhi lo rem1 + (BASE) UM/MOD -ROT \ qlo qhi rem + dup -10 + -if L1 drop 48 + jump L2 L1: drop 55 + L2: jump HOLD +: #S ( ud -- 0 0 ) L: # over over OR if L1 drop jump L L1: drop ; +: #> ( ud -- baddr u ) drop drop HLD b! @b HEND over push inv pop + inv ; +``` + +`#` divides the double by the base in two `UM/MOD` steps, the high cell first and its remainder +leading the low cell; the last remainder is the digit. `HOLD`, `SIGN` and `#` end with a jump to the +next word rather than a call, so `C!` returns straight to their caller and two return-stack entries +are saved. `#` keeps the high quotient under the second division on the data stack, not on the +return stack. `-ROT` is in line (`SWAP push SWAP pop`). + +```forth +\ number output. ABS is in line: -if A inv 1 + A: +: .R ( n width -- ) + 0 (W) 1 + b! !b \ no blank after it + BODY: (W) b! !b dup push ABS 0 <# #S pop SIGN #> \ baddr u + TAIL: (W) b! @b -if POS drop jump OUT \ width < 0 + POS: over - SPACES \ width - u spaces + OUT: TYPE (W) 1 + b! @b if DONE drop jump SPACE + DONE: drop ; +: . ( n -- ) -1 (W) 1 + b! !b 0 jump BODY \ a blank after it +: U.R ( u width -- ) 0 (W) 1 + b! !b UBODY: (W) b! !b 0 <# #S #> jump TAIL +: U. ( u -- ) -1 (W) 1 + b! !b 0 jump UBODY +: D.R ( d width -- ) 0 (W) 1 + b! !b + DBODY: (W) b! !b dup push -if A DNEGATE A: <# #S pop SIGN #> jump TAIL +: D. ( d -- ) -1 (W) 1 + b! !b 0 jump DBODY +``` + +```forth +\ DUMP. DIGITS is two per byte of a cell. +: (DB) ( -- c ) (DP) 1 + b! @b (DP) 3 + b! @b + jump C@ \ the byte in this column +: DUMP ( baddr u -- ) + -if OK drop drop NODE-ERROR b! -1 !b ; \ u < 0 + OK: (DP) 2 + b! !b (DP) 1 + b! !b \ count, address + BASE b! @b (DP) b! !b 16 BASE b! !b \ hex + LINE: (DP) 2 + b! @b if DONE drop + (DP) 1 + b! @b 0 <# DIGITS (DP) 3 + b! !b \ the address + AD: # (DP) 3 + b! @b -1 + dup !b if ADX drop jump AD + ADX: drop #> TYPE 58 EMIT SPACE + 0 (DP) 3 + b! !b \ the bytes in hex + HX: (DP) 2 + b! @b (DP) 3 + b! @b inv + -if HAVE \ count - column - 1 + drop SPACE SPACE SPACE jump HN + HAVE: drop (DB) 0 <# # # #> TYPE SPACE + HN: (DP) 3 + b! @b 1 + dup !b -16 + -if HXX drop jump HX + HXX: drop SPACE 124 EMIT + 0 (DP) 3 + b! !b \ the bytes as characters + CH: (DP) 2 + b! @b (DP) 3 + b! @b inv + -if HAVC jump CHX + HAVC: drop (DB) + dup -32 + -if GE drop drop 46 jump EM + GE: drop dup -127 + -if BIG drop jump EM + BIG: drop drop 46 + EM: EMIT + (DP) 3 + b! @b 1 + dup !b -16 + -if CHX drop jump CH + CHX: drop 124 EMIT CR + (DP) 1 + b! @b 16 + !b \ next line + (DP) 2 + b! @b -16 + -if MORE jump DONE + MORE: !b jump LINE + DONE: drop (DP) b! @b BASE b! !b ; +``` + +Everything `DUMP` keeps between words — the address, the count, the column and the saved `BASE` — is +in the variable `(DP)`, so the stacks carry only what each picture and `TYPE` need, and no loop count +sits on the return stack across a call. + +**In the capsule.** `v4/capsule/numout.v4` holds these words for the host node — `<# # #S HOLD SIGN #>`, `. .R U. U.R D. D.R`, `?`, `SPACES`, `DECIMAL HEX OCTAL` — each the definition above, with the shared body and tail of the number words as words of their own (`(.BODY)`, `(U.BODY)`, `(D.BODY)`, `(.TAIL)`), since a jump cannot land inside another word. Executed from the prompt on the golden model's host node (2026-10-04), including transcripts of the v3 binary (`tests/test_host_quit.c`). At 64-bit cells a 64-digit binary number is one digit more than the hold buffer's 63 (D-13): 63 digits are printed and the line ends with ` ERROR`. + +There is one picture for signed singles, one for unsigned and one for doubles; each plain word is +its `.R` word with a width of 0 and the blank flag set, entered by a jump past where `.R` clears +that flag, and all six share one tail, which prints the blank only when the flag is set. The width is tested for sign before `width - u`, which could wrap for a very negative +width and print a flood of spaces. ### 5.9 Strings, parsing, and input | Word | Fate | Notes | | --- | --- | --- | -| `COUNT` | CAP | `dup 1+ SWAP C@` | -| `CMOVE` | CAP | See below. | -| `CMOVE>` | CAP | See below. | -| `BLANK` | CAP | `32 FILL` | -| `-TRAILING` | CAP | Loop from the end while the character is a space. | -| `COMPARE` | CAP | Byte loop returning `-1`, `0`, or `1`. v3's counted-string auto-detection is not kept. | -| `SEARCH` | CAP | Nested loop over `COMPARE`. Same note. | -| `SCAN` `SKIP` | CAP | Byte loops. | -| `BL` | IN | `32` | -| `EXPECT` `QUERY` | CC | Built on `KEY` (DEV). | -| `SPAN` `TIB` `>IN` `SOURCE` | CC | Interpreter state on the host node. | -| `WORD` `ENCLOSE` | CC | Parser. | -| `NUMBER` `CONVERT` | CC | Rewritten to honour `BASE` (v3's `NUMBER` is base 10 only). | -| `S"` `(s")` `[']` | CC | Compiler words. | +| `COUNT` | CAP | `( baddr -- baddr+1 c )`: `dup C@ push 1 + pop`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 7 data cells and 6 return entries. Clobbers `A`. | +| `CMOVE` | CAP | `( src dst u -- )`, low byte first. See below. Nothing for `u = 0`; for `u < 0` nothing is written and `NODE-ERROR` is set, where v3 raised its error flag. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 5 data cells and 5 return entries. | +| `CMOVE>` | CAP | `( src dst u -- )`, high byte first. See below. Errors as `CMOVE`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 4 data cells and 5 return entries. | +| `BLANK` | CAP | `32 FILL`, as `32 jump FILL`. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. v3's counted-string auto-detection is not kept. | +| `-TRAILING` | CAP | `( baddr u -- baddr u' )`. See below. A negative count reads as 0, as v3. v3's counted-string auto-detection is not kept. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 6 data cells and 6 return entries. | +| `COMPARE` | CAP | `( a1 u1 a2 u2 -- n )`: `-1`, `0` or `1` by the first differing byte, unsigned, else the shorter string is less. See below. Negative counts read as 0, as v3. v3's counted-string auto-detection is not kept. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 4 data cells and 5 return entries. Clobbers `A` and `B`. | +| `SEARCH` | CAP | `( a1 u1 a2 u2 -- a3 u3 flag )`: the rest of string 1 from the first place string 2 occurs and `-1`, or string 1 and `0`; an empty string 2 is found at the start. See below; the inner comparison is in line, not a call to `COMPARE`. Same notes. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 3 data cells and 5 return entries. Clobbers `A` and `B`. | +| `SCAN` `SKIP` | CAP | `( baddr u c -- baddr' u' )`: `SCAN` stops at the first byte equal to the low byte of `c` (or at the end, with `u' = 0`); `SKIP` stops at the first byte not equal to it. See below. A negative count reads as 0, as v3. v3's counted-string auto-detection is not kept. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Each leaves its caller 5 data cells and 5 return entries. Clobber `A`. | +| `(S)` | CAP | Variable, 4 cells: `COMPARE`'s two lengths; `SEARCH`'s string 2 and the whole of string 1. | +| `BL` | IN | `32` — executed on the golden model (2026-10-04). | +| `EXPECT` `QUERY` | CC | Built on `KEY` (DEV); source in `v4/capsule/input.v4`. FORTH-79 (ruled 2026-10-04). `EXPECT ( baddr n -- )` stores characters from `baddr` upward until a new-line (taken, not stored) or until `n` have been received, then a zero; no action for `n <= 0`; a line longer than `n` leaves the rest to be read next. It also sets `SPAN`, which is not FORTH-79 but is v3's. `QUERY` is `TIB 80 EXPECT 0 >IN !`. v3's `EXPECT` was C's `fgets` and took `n-1` characters, and its `QUERY` took 1024. Executed on the golden model's host node (2026-10-04) against C for every size and line length. `EXPECT` is what the prompt reads every line with, on top of whatever the user has left on the stack, so it keeps where it is in memory: it leaves its caller 7 data cells and 7 return entries. A line of exactly 80 characters fills `QUERY`'s count before its new-line arrives, so the new-line is read as an empty line after it; a longer line is read as 80 characters and then the rest. | +| `SPAN` `TIB` `>IN` `SOURCE` | CC | Interpreter state on the host node. `TIB` is the buffer's byte address and `>IN` and `SPAN` their variables' word addresses, all in line; `SOURCE ( -- baddr u )` is `TIB` and `SPAN @`, a negative `SPAN` read as 0. Executed on the golden model's host node (2026-10-04). | +| `WORD` `ENCLOSE` | CC | Parser; source in `v4/capsule/input.v4`. `WORD ( c -- baddr )` is FORTH-79 (ruled 2026-10-04): characters are taken from `TIB` until the delimiter `c` or the end of the text, leading delimiters ignored, and stored as a counted string; the delimiter met (`c`, or a zero if the text ran out) is stored after them, uncounted; `>IN` is left just past it; with nothing left the count is 0. The count is a byte, so a word over 255 characters is cut to 255; the buffer is 257 bytes. v3's `WORD` skipped every delimiter after the word, always stored a zero, and cut at 62. `ENCLOSE ( baddr c -- baddr n1 n2 n3 )`, not a FORTH-79 word, works on a zero-terminated string as v3's. Executed on the golden model's host node (2026-10-04) against C, and `ENCLOSE` against values recorded from the v3 binary. `WORD` keeps what it works on in memory and has at most three cells of its own on the data stack: it leaves its caller 7 data cells and 6 return entries. `(PARSE) ( c -- baddr )` is `WORD` without the skipping of leading delimiters: the text starts at `>IN` and may be empty. It is what `."` and `ABORT"` use, so that `." "` is an empty string. | +| `NUMBER` `CONVERT` | CC | FORTH-79, not v3 (ruled 2026-10-04); source in `v4/capsule/input.v4`. `CONVERT ( d1 baddr1 -- d2 baddr2 )` takes the characters from `baddr1 + 1` on as digits in the current `BASE`, in either case, accumulating each into the double after multiplying it by `BASE`, and stops at the first that is not one; the double is `( lo hi )`. v3's was base 10 only, started at `baddr1`, and took the double low cell on top. `NUMBER ( baddr -- d )` is the counted string as a signed double in the current `BASE`, with an optional leading minus; anything else gives 0 and sets `NODE-ERROR`. v3's returned `( n flag )` in base 10. Executed on the golden model's host node (2026-10-04) against C in eight bases, including a digit that carries out of the low cell. `NUMBER` leaves its caller 3 data cells and 2 return entries; the interpreter does not use it (it has a single-cell conversion of its own that needs far less of the stack). | +| `S"` `(S")` `[']` | CC | Source in `v4/capsule/quit.v4` and `compile.v4`. `S" text"` `( -- baddr u )`, as v3: in a definition the text is compiled after a call to `(S")`, as `."` compiles it, and `(S")` leaves its address and length and returns past it. At the prompt the text is copied to `PAD` and stays there until `PAD` is used again. `['] xxx` compiles `xxx`'s address as a literal. v3 also has `[LITERAL]`, another name for `LITERAL`. Executed on the golden model's host node (2026-10-04), including transcripts of the v3 binary. | | `LITERAL` `[LITERAL]` (placeholders) | RET | The working `LITERAL` is in §5.17. | ```forth +\ SWAP and the subtractions ( - ) are in line. : CMOVE ( src dst u -- ) - BEGIN dup WHILE 1- push over C@ over C! 1+ SWAP 1+ SWAP pop REPEAT drop 2DROP ; + -if OK drop drop drop NODE-ERROR b! -1 !b ; \ u < 0 + OK: if DONE push \ src dst R: u + over C@ over C! 1 + push 1 + pop pop -1 + jump OK + DONE: drop drop drop ; : CMOVE> ( src dst u -- ) - BEGIN dup WHILE 1- push over R@ + C@ over R@ + C! pop REPEAT drop 2DROP ; + -if OK drop drop drop NODE-ERROR b! -1 !b ; \ u < 0 + OK: if DONE -1 + push \ src dst R: i = u - 1 + over pop dup push + C@ \ src dst c + over pop dup push + C! \ src dst + pop jump OK + DONE: drop drop drop ; + +: -TRAILING ( baddr u -- baddr u' ) + -if L drop 0 ; \ u < 0 + L: if DONE over over + -1 + C@ -32 + if SP drop ; \ not a space + SP: drop -1 + jump L + DONE: ; + +: COMPARE ( a1 u1 a2 u2 -- n ) + -if A drop 0 A: (S) 1 + b! !b \ a1 u1 a2 + SWAP -if B drop 0 B: dup (S) b! !b \ a1 a2 u1 + (S) 1 + b! @b \ a1 a2 u1 u2 + over over - -if GE drop drop jump M \ the smaller + GE: drop push drop pop + M: \ a1 a2 m + L: if EQ push \ a1 a2 R: m + over C@ over C@ - if SAME \ c1 - c2 + -if GT drop drop drop pop drop -1 ; + GT: drop drop drop pop drop 1 ; + SAME: drop 1 + push 1 + pop pop -1 + jump L + EQ: drop drop drop (S) b! @b (S) 1 + b! @b - \ u1 - u2 + -if NN drop -1 ; + NN: if ZZ drop 1 ; + ZZ: ; + +: SEARCH ( a1 u1 a2 u2 -- a3 u3 flag ) + -if A drop 0 A: (S) 1 + b! !b (S) b! !b \ a1 u1 (S): a2 u2 + -if B drop 0 B: dup (S) 3 + b! !b over (S) 2 + b! !b \ a u (S)+2: a1 u1 + L: dup (S) 1 + b! @b - -if TRY \ u - u2 + drop drop drop (S) 2 + b! @b (S) 3 + b! @b 0 ; \ not found + TRY: drop over (S) b! @b (S) 1 + b! @b \ a u p q k + I: if MATCH push \ a u p q R: k + over C@ over C@ xor if SAME + drop drop drop pop drop push 1 + pop -1 + jump L \ next place + SAME: drop 1 + push 1 + pop pop -1 + jump I + MATCH: drop drop drop -1 ; + +: SCAN ( baddr u c -- baddr' u' ) + 255 and push -if L drop 0 \ baddr u R: c + L: if DONE over C@ pop dup push xor if FOUND + drop push 1 + pop -1 + jump L + FOUND: drop + DONE: pop drop ; + +: SKIP ( baddr u c -- baddr' u' ) + 255 and push -if L drop 0 \ baddr u R: c + L: if DONE over C@ pop dup push xor if SAME drop jump DONE + SAME: drop push 1 + pop -1 + jump L + DONE: pop drop ; ``` ### 5.10 Terminal I/O | Word | Fate | Notes | | --- | --- | --- | -| `EMIT` | DEV | Console service: one-character message. | -| `KEY` | DEV | Console service: blocking receive. | -| `?TERMINAL` | DEV | Console service: non-blocking status. | -| `TYPE` | CAP | Loop of `C@ EMIT`, or one string message to the console node. | -| `CR` | CAP | `10 EMIT` | -| `SPACE` | CAP | `BL EMIT` | -| `SPACES` | CAP | `BEGIN dup 0> WHILE SPACE 1- REPEAT drop` | -| `."` `(do-string)` | CC | Compiler words. | +| `EMIT` | DEV | Console service: one-character message. Until the mesh exists it is a store to the `CONSOLE-TX` register (§7): `CONSOLE-TX b! !b`. As in v3, the low byte of the cell is the character. Executed on the golden model (2026-10-03). Clobbers `B`. | +| `KEY` | DEV | Console service: blocking receive. Until the mesh exists it reads the `CONSOLE-STATUS` and `CONSOLE-RX` registers (§7): `L: CONSOLE-STATUS b! @b if WAIT drop CONSOLE-RX b! @b ; WAIT: drop jump L` — it asks whether a character is pending until one is, then takes it. The character is 0–255. v3's `KEY` returned −1 at the end of its input; here there is no end of input, and `KEY` waits. Executed on the golden model (2026-10-03), including a transcript of the v3 binary, and shown still waiting after 5000 instruction words with nothing pending. Leaves its caller 9 data cells and 8 return entries. Clobbers `B`. | +| `?TERMINAL` | DEV | Console service: non-blocking status. Until the mesh exists: `CONSOLE-STATUS b! @b` — −1 when a character is pending, 0 when not, as v3; it takes nothing. Executed on the golden model (2026-10-03). Clobbers `B`. | +| `TYPE` | CAP | `( baddr u -- )`. Loop of `C@ EMIT`, or one string message to the console node: `-if OK drop drop NODE-ERROR b! -1 !b ; OK: if DONE over C@ EMIT push 1 + pop -1 + jump OK DONE: drop drop ;` — nothing for `u = 0`; for `u < 0` nothing is printed and `NODE-ERROR` is set, where v3 printed nothing and raised its error flag. An address outside the node's memory is an address fault (D-14). Executed on the golden model (2026-10-03). Leaves its caller 6 data cells and 6 return entries. Clobbers `A` and `B`. | +| `CR` | CAP | `10 EMIT`, as `10 jump EMIT` — executed on the golden model (2026-10-03). Character 10, as v3; the console turns it into a new line. | +| `SPACE` | CAP | `BL EMIT`, as `32 jump EMIT` — executed on the golden model (2026-10-03). | +| `SPACES` | CAP | `( n -- )`: `-if L drop ; L: if DONE SPACE -1 + jump L DONE: drop ;` — `n` spaces, none for `n <= 0`, as v3. Executed on the golden model (2026-10-03), including a transcript of the v3 binary. Leaves its caller 7 data cells and 7 return entries. Clobbers `B`. | +| `."` `(.")` | CC | FORTH-79; source in `v4/capsule/quit.v4`. `." text"` takes the text up to the next `"` (none at all is allowed; with no closing `"` it is the rest of the line). Interpreting, it prints it. Compiling, it lays a call to `(.")` and after it the text as a counted string — count byte, characters, four to a cell, the last cell filled with zeros. `(.")` finds the string by the return address its call left and returns to the cell after it: `pop 4* dup C@ L: if DONE push 1 + dup C@ EMIT pop -1 + jump L DONE: drop 4/ 1 + push ;`. It takes the return address off before it calls anything, so a word that prints text goes no deeper than one that calls any other word. v3's `(do-string)` has no counterpart. Executed on the golden model's host node (2026-10-04), every length from 0 to 12 and 76, including transcripts of the v3 binary. | ### 5.11 Blocks and mass storage @@ -427,10 +670,10 @@ The storage service belongs to the Artemis role, now a device node. | Word | Fate | Notes | | --- | --- | --- | -| `BLOCK` `BUFFER` `UPDATE` `SAVE-BUFFERS` `EMPTY-BUFFERS` `FLUSH` | DEV | Block-service messages. Buffers live in the requesting node's RAM or in DDR. | -| `LOAD` `THRU` `-->` | CC | The interpreter reads blocks through the service. | -| `LIST` | CAP | `BLOCK` plus `TYPE`. | -| `SCR` | CAP | Variable. | +| `BLOCK` `BUFFER` `UPDATE` `SAVE-BUFFERS` `EMPTY-BUFFERS` `FLUSH` | DEV | FORTH-79 (`FLUSH` is v3's, the same as `SAVE-BUFFERS`). Source in `v4/capsule/blocks.v4`, over the device of D-19. There are **two buffers**, so two blocks can be in memory at once; a buffer goes to the block that asks, turn about, and a block that was `UPDATE`d is written before its buffer is given away. `BLOCK` and `BUFFER` give a **byte address**, as `PAD` and `TIB` are — what `C@`, `CMOVE` and `TYPE` take. A block number below 1, or one the device has not got, is D-18's code 13, `Block out of range` (v3 says ` ERROR` alone). Executed on the golden model's host node (2026-10-05), including transcripts of the v3 binary, with the bytes on the device checked after each step. | +| `LOAD` `THRU` `-->` `BLK` | CC | `LOAD` and `BLK` are FORTH-79; `THRU` and `-->` are v3's. Source in `v4/capsule/blocks.v4`. The text being interpreted is at the address in the variable `(SRC)`, `SPAN` characters long, `>IN` the place in it; `QUERY` makes that the terminal's buffer and `LOAD` a block's, all 1024 characters as one stream. `LOAD` saves `(SRC)`, `SPAN`, `>IN` and `BLK` on the return stack and puts them back, so a block may `LOAD` another and **the rest of the line `LOAD` was on is interpreted afterwards** (v3 drops it). `BLK` is the block being interpreted, 0 at the terminal; v3 has no `BLK`. When words are split at blanks a zero byte reads as a blank, so a block that was never written, or whose lines were put there one at a time, loads cleanly. A buffer can be given to another block between one word of the text and the next, so while a block is loading `WORD` first makes sure it is in a buffer (a hook `LOAD` installs). In a block `\` skips to the next 64-character line. `-->` at the terminal is code 14, `No block is being loaded`. An error while loading ends every `LOAD` under way and the terminal is the input again. Executed on the golden model's host node (2026-10-05), three blocks deep on two buffers, including transcripts of the v3 binary. | +| `LIST` | CAP | As v3: a new line, `Block n`, sixteen lines of 64 characters each after its two-digit number and a colon, and an empty line; a character that is not printable shows as a blank. Leaves `n` in `SCR`. Executed on the golden model's host node (2026-10-05) against a transcript of the v3 binary. | +| `SCR` | CAP | Variable: the block `LIST` showed last. | | `BLK-CONFIRM-FORMAT` `RELOCATE-BLOCK` | DEV | Owner-only storage messages. | | `BLK-ACL-ALLOW@` `BLK-ACL-ALLOW!` `BLK-ACL-TTL@` `BLK-ACL-TTL!` | HERA | ACL state is held by Hera. | | `BLK-OWNER@` | HERA | Read-only, as in v3. | @@ -440,78 +683,180 @@ The storage service belongs to the Artemis role, now a device node. | Word | Fate | Notes | | --- | --- | --- | -| `HERE` `ALIGN` `ALLOT` `,` `C,` `2,` `PAD` `LATEST` | CC | The dictionary lives on the host node. | -| `SP@` `SP!` | MM | `DSP` register (D-2). | +| `HERE` `ALIGN` `ALLOT` `,` `C,` `2,` `PAD` `LATEST` | CC | The dictionary lives on the host node; source in `v4/capsule/dict.v4`. The dictionary pointer `DP` is a byte address, so `C,` packs four characters to a cell; `HERE` is the next whole cell (a word address); `,` and `ALLOT` align first. An address unit is a cell (D-1), so `ALLOT` counts cells where v3's counted bytes; a negative count gives space back. `2,` stores the low cell first, as v3. Going outside the dictionary space stores nothing, moves nothing and sets `NODE-ERROR`. `PAD` is a fixed scratch area, as in v3, given as a byte address. `LATEST` is the xt of the newest entry, 0 if there is none (v3's pushes `HERE`, which looks like a bug; reported, not changed). Executed on the golden model's host node (2026-10-04). `,` calls nothing and leaves its caller 7 data cells and 8 return entries; `ALLOT` leaves 7 and 7. | +| `SP@` `SP!` | RET | A stack cell has no address (D-2, D-16). `DEPTH`, and a store to `DSTACK-DEPTH` to empty the stack, are what remain of them. | ### 5.13 Dictionary manipulation | Word | Fate | | --- | --- | -| `'` `FIND` `SMUDGE` `HIDDEN` `>BODY` `>NAME` `NAME>` `>LINK` `LINK>` `CFA` `LFA` `NFA` `PFA` `TRAVERSE` `INTERPRET` | CC | +| `FIND` | CC | `( -- xt \| 0 )`, FORTH-79 and v3 alike: the compilation address of the next word in the input stream, or 0 if it is not in the dictionary. `32 WORD` then a search from the newest entry back, skipping hidden ones; names are case sensitive, as v3, and 31 characters are significant (FORTH-79). Executed on the golden model's host node (2026-10-04) against a list kept in C, 300 entries. Leaves its caller 7 data cells and 5 return entries. | +| `'` | CC | `( -- addr )`, FORTH-79: the parameter field address of the next word in the input stream; not found is an error (0, and `NODE-ERROR` set). v3's `'` returned what `FIND` returns. For a word that is code the two are the same address; for a data word the parameter field is the cell after its code, which is what FORTH-79's `n ' NAME !` needs. It is immediate: inside a definition the address is compiled as a literal (FORTH-79), where v3's `'` parsed when the definition ran. Executed on the golden model's host node (2026-10-04). | +| `>LINK` `LFA` `LINK>` `>NAME` `NFA` `NAME>` `CFA` `PFA` `>BODY` `TRAVERSE` | CC | The fields of an entry, all reached from its xt, as in v3 where the xt was the entry: `>LINK`/`LFA` the link's address, `LINK>` the older entry's xt, `>NAME`/`NFA` the byte address of the counted name, `NAME>` back to the xt, `CFA` the xt itself, `PFA`/`>BODY` the parameter field, `TRAVERSE` from a name's count byte to past its last character (for `n > 0`; otherwise unchanged, as v3). Executed on the golden model's host node (2026-10-04). | +| `SMUDGE` `HIDDEN` | CC | `SMUDGE` toggles the hidden flag of the newest entry; `HIDDEN` sets it. v3 refuses both outside compilation; that check comes with the compiler words. Executed on the golden model's host node (2026-10-04). | +| `INTERPRET` | CC | FORTH-79; source in `v4/capsule/compile.v4`. Takes words from the input stream until it is exhausted: a word in the dictionary is executed, or, when compiling and not immediate, compiled; anything else must be a number in the current `BASE` (a single cell, with an optional leading minus), left on the stack or compiled as a literal. What is neither, or a compile-only word met while interpreting, abandons the line: compiling stops, the definition under way stays hidden, the rest of the input is skipped and `NODE-ERROR` is set, after v3's message: `UNKNOWN WORD: 'xxx'` or `xxx: compile-only`. `INTERPRET` then returns to `QUIT`, which prints ` ERROR`. Executed on the golden model's host node (2026-10-04). | + +An entry, as `v4/capsule/dict.v4` builds it. A word's execution address (xt) is the address of its +code, and everything else is found from it: + +``` +name the count byte, then the characters, four bytes to a cell, zero-padded to a whole cell +xt - 3 flags: 1 immediate, 2 hidden, 4 data +xt - 2 the word address of the name +xt - 1 the link: the xt of the entry before this one, 0 for the first +xt the code +``` + +A name holds at most 31 characters. A *data* word (one made by `CREATE`, `VARIABLE` or `CONSTANT`) is +one whose code is a single call to its run-time routine, with its parameter field in the cell after +it, `xt + 1`; for any other word the parameter field is the code itself. ### 5.14 Vocabularies | Word | Fate | | --- | --- | -| `VOCABULARY` `DEFINITIONS` `CONTEXT` `CURRENT` `FORTH` `ORDER` `(FIND)` | CC | +| `VOCABULARY` `DEFINITIONS` `CONTEXT` `CURRENT` `FORTH` `ORDER` | CC | FORTH-79 (`ORDER` is v3's). Source in `v4/capsule/system.v4`, `dict.v4` and `compile.v4`. A vocabulary is two cells — its head, the xt of its newest entry, and the address of the vocabulary defined before it. `CONTEXT` and `CURRENT` each hold the address of a vocabulary's head cell; FORTH's is `(LATEST)`. A name is looked up in the `CONTEXT` vocabulary and then, if that is not FORTH, in FORTH ("new vocabularies chain to FORTH"). A new entry goes into the `CURRENT` vocabulary, and `:` makes the `CURRENT` vocabulary `CONTEXT`. `VOCABULARY xxx` makes an empty one whose name, executed, makes it `CONTEXT`; `FORTH` does the same for FORTH and is immediate; `DEFINITIONS` makes the `CONTEXT` vocabulary `CURRENT`. `WORDS` lists the `CONTEXT` vocabulary. `FORGET` takes what was defined later out of every vocabulary, and a vocabulary that goes with it gives way to FORTH. `ORDER` prints `Search order:` and `Current:` by name. v3's vocabularies do not separate anything: a word defined in one is found from every other, and a word redefined in one replaces FORTH's permanently; its `FORTH` is not immediate. Executed on the golden model's host node (2026-10-05). | +| `(FIND)` | CC | | ### 5.15 System | Word | Fate | Notes | | --- | --- | --- | -| `(` `\` | CC | | -| `EXECUTE` | CAP | `push ;` (tail-jumps to the xt; the xt returns to `EXECUTE`'s caller) | +| `(` `\` | CC | `(` is `41 WORD drop`; `\` is `SPAN @ >IN !`. In `v4/capsule/input.v4` under the names `PAREN` and `BACKSLASH`. Executed on the golden model's host node (2026-10-04). | +| `EXECUTE` | CAP | `push ;` (tail-jumps to the xt; the xt returns to `EXECUTE`'s caller). Executed on the golden model's host node (2026-10-04). | | `NOP` | OP | `nop` | -| `QUIT` `ABORT` `ABORT"` `(ABORT")` `COLD` `WARM` | CC | | +| `QUIT` | CC | FORTH-79; source in `v4/capsule/quit.v4`. Clears the return stack, sets execution mode, returns control to the terminal; no message. It is the prompt: after a new line it prints `ok> `, reads a line with `QUERY`, clears `NODE-ERROR`, runs `INTERPRET`, prints ` ok` — or, if `NODE-ERROR` is set, ends any definition that was open and prints ` ERROR` — and goes round again, for as long as the node runs. The text is v3's. The line is not sent back; the terminal shows what is typed. It empties the return stack first, by a store to `RSTACK-DEPTH` (D-16), so it works from however deep, with the return stack full. The data stack is left alone. A definition open when `QUIT` runs is ended and stays hidden. Executed on the golden model's host node (2026-10-04): the node is started at `QUIT`, fed characters and its output read, including 16 sessions recorded from the v3 binary. v3's `QUIT` goes on with the rest of the line and cannot be compiled into a definition. | +| `ABORT` | CC | FORTH-79; source in `v4/capsule/quit.v4`. As `QUIT`, and it empties the data stack too (a store to `DSTACK-DEPTH`, D-16); the line it stops ends with ` ok`, as v3. Executed on the golden model's host node (2026-10-04), from six calls down and from inside two loops, forty times over, including transcripts of the v3 binary. | +| `ABORT"` `(ABORT")` | CC | Not FORTH-79 (it is FORTH-83's); kept because v3 has it. `ABORT" text"` `( flag -- )`: if the flag is not zero, print the text, start a new line and `ABORT`. Compiled as `."` is, with `(ABORT")` as the run-time word; it also works at the prompt. Executed on the golden model's host node (2026-10-04). v3's crashes (SIGSEGV) when a word compiled with it runs, and at the prompt prints the text and carries on with the line. | +| `COLD` `WARM` | CC | Source in `v4/capsule/system.v4`. `WARM` prints v3's two lines and `ABORT`s: both stacks emptied, the dictionary kept. `COLD` first puts the system back as the loader left it — `DP` and the newest FORTH entry from the two cells `(BOOT)`, one vocabulary, decimal, empty block buffers, `FENCE` at the capsule's end — so everything defined since is gone. Executed on the golden model's host node (2026-10-05). | | `BYE` `REBOOT` | HERA | | | `SAVE-SYSTEM` | HERA | Snapshot becomes a capsule-image request. | -| `WORDS` `VLIST` `SEE` | CC | | -| `PAGE` | DEV | | -| `79-STANDARD` | CC | | +| `WORDS` `VLIST` | CC | Source in `v4/capsule/system.v4`. The names in the dictionary, the newest first, a blank after each, a new line whenever one has passed column 64; a definition under way is not shown. v3 prints a heading, eight names to a line and a total. Executed on the golden model's host node (2026-10-04). | +| `SEE` | CC | FORTH source, `v4/capsule/tools.fth`, compiled by the node. v4 code is native, so `SEE xxx` is a disassembler: the name, then each instruction word on a line — the opcodes by name, a literal's value after its `@p`, and after a call or a branch the name of the word it goes to, or the address if that is not a word. Text compiled by `."`, `S"` or `ABORT"` is shown in quotes after its call (the three run-time words `(.")` `(S")` `(ABORT")` have names for this, and are compile-only). Padding is not shown. It stops at the first `;`, `ex` or `jump` that no earlier branch goes past. A data word shows what it holds; an immediate word says so. v3's `SEE` lists the words of threaded code, which v4 has not got. Executed on the golden model's host node (2026-10-05), on definitions with literals, text, `IF` and loops, on the capsule's own words, and on itself. | +| `PAGE` | DEV | As v3 on a terminal: `ESC [2J ESC [H`. Source in `v4/capsule/system.v4`; executed on the golden model's host node (2026-10-05). | +| `79-STANDARD` | CC | FORTH-79: executes if a FORTH-79 system is there. It is, so nothing happens. v3's prints two lines and leaves a flag, which the standard does not have. | ### 5.16 Line editor | Word | Fate | | --- | --- | -| `L` `S` `SHOW` `EDIT` | CC | +| `L` `S` `SHOW` `EDIT` and the `EDITOR` vocabulary | CC | **Redone for v4** (ruled 2026-10-05: v3's `EDIT`, a small shell of its own on stdin, is not the editor). The editor is FORTH source, `v4/capsule/editor.fth`, which the node compiles itself; it is a vocabulary, `EDITOR`, whose words are used at the ordinary prompt. `n EDIT` lists screen `n` and makes `EDITOR` the `CONTEXT` vocabulary. Then: `L` list the screen, `N` `B` the next and the one before, `n T` type a line, `n P text` put the rest of the input line on line `n`, `n E` erase, `n D` delete (the lines below move up; the line is held in `PAD`), `n S` spread (a blank line at `n`), `n H` hold, `n R` replace from `PAD`, `n I` insert `PAD`'s line, `WIPE` blank the screen, `DONE` write what changed and go back to FORTH. Every change is `UPDATE`d. In FORTH itself are v3's three as they were — `L ( n -- )` a line, `S ( baddr u n -- )` a line set from a string, `SHOW` the screen — and `COPY ( from to -- )`. A line outside 0–15 is `ABORT"`ed with `Line out of range`. Executed on the golden model's host node (2026-10-05): the source compiled line by line, every command, and what reaches storage. A screen editor, with a cursor, is not written. | ### 5.17 Defining words and the compiler | Word | Fate | Notes | | --- | --- | --- | -| `:` `;` `CREATE` `VARIABLE` `CONSTANT` `DOES>` `IMMEDIATE` `STATE` `[` `]` `LITERAL` `COMPILE` `[COMPILE]` `FORGET` `FENCE` | CC | | +| `:` `;` `EXIT` `IMMEDIATE` `STATE` `[` `]` `LITERAL` `COMPILE` `[COMPILE]` | CC | Source in `v4/capsule/compile.v4`, all to FORTH-79. `:` makes an entry and starts compiling; the word cannot be found until `;`, so a redefinition can use the old word. `;` lays the return, reveals the word and stops compiling. `LITERAL` compiles the number on the stack when compiling. `COMPILE xxx` lays code that compiles `xxx` when the word it is in runs; `[COMPILE] xxx` compiles `xxx` though it is immediate. Executed on the golden model's host node (2026-10-04) against results recorded from the v3 binary; v3's `COMPILE` does not work (`: C1 COMPILE DUP ; IMMEDIATE : U3 C1 + ;` gives `DUP: Stack underflow`), reported, not fixed. | +| `CREATE` `VARIABLE` `CONSTANT` `DOES>` | CC | FORTH-79. A data word's code is one instruction word, a call to its run-time routine, and its parameter field is the cell after it: `(DOVAR)` is `pop ;` (the call's return address is the parameter field's address) and `(DOCON)` is `pop a! @ ;`. `VARIABLE` allots one cell, set to 0. `DOES>` lays a call to `(DOES)` and then `pop`: `(DOES)`, run by the defining word, rewrites the newest entry's code into a call to the code after it and returns from the defining word; that code's `pop` fetches the parameter field address. Executed on the golden model's host node (2026-10-04) against results recorded from the v3 binary. | +| `FORGET` `FENCE` | CC | Source in `v4/capsule/system.v4`. `FORGET xxx` is FORTH-79: `xxx` and every word defined after it are removed and their space is free again. A word that is not there is an error (`UNKNOWN WORD`), and so is one that starts below the address in the variable `FENCE` — where the capsule's own words are — which is D-18's code 10, `Protected word`. v3's `FORGET DUP` succeeds and takes `FORGET` itself with it. Executed on the golden model's host node (2026-10-04), including a transcript of the v3 binary. | | `LIT` | OP | `@p` | | `does_rt` | RET | Internal helper; `DOES>` is implemented by the compiler capsule. | +**How a word is compiled.** v4 code is native: a colon definition is instruction words, and +compiling a word into one lays down a call to it. Two flags on an entry change that. An **in-line** +word's code is a straight run of opcodes and literals ending in `;`, and that run is copied in place +of a call; this is fate IN (§0), and everything that touches the return stack must be in line, since a +call would bury what it works on. A **compile-only** word may not be executed by the interpreter. +`v4/capsule/forth.v4` holds the first words of the vocabulary flagged this way (`DUP`, `+`, `>R`, `I`, +`LEAVE`, `@`, the in-line variables and so on). + +**The vocabulary at the prompt.** The host node's capsule is `v4/capsule/`, loaded in this order: `core.v4` (bytes, console, strings the rest rest on), `input.v4`, `dict.v4`, `codegen.v4`, `compile.v4`, `quit.v4` (the prompt, faults and errors), `forth.v4` (stack, arithmetic, division, `DEPTH` `PICK` `ROLL`), `numout.v4` (number output, `.S`), `system.v4` (vocabularies, `WORDS`, `FORGET`, `COLD`, `DEFER`), then the two files of FORTH source the node compiles itself, `editor.fth`, `tools.fth` (`SEE`) and `ACL.fth` (the access control policy); `blocks.v4` (mass storage and `LOAD`), `log.v4` (logging), `acl.v4` (access control), `qmath.v4` (the Q48.16 words of §5.26: `Q.FROM-INT Q.TO-INT Q.1 Q.0 Q.SCALE Q.+ Q.- Q.* Q./ Q.ABS Q.NEG Q.= Q.< Q.> Q.0= Q.MAX Q.MIN Q.EXP Q.SQRT Q.LOG Q.SIN Q.COS Q.PRINT`; `DUMP` is in `numout.v4`) and `words.v4` (the stack, comparison, shift, double, mixed and string words of §5.1–5.9: `2SWAP 2OVER 2ROT 2>R 2R> 2R@ 2@ 2! -! 0<> 0> <> <= >= U< U> ABS MAX MIN WITHIN LSHIFT RSHIFT D- DABS D0= D0< D= D2* D2/ D< DMAX DMIN M+ M- CMOVE> MOVE FILL ERASE BLANK -TRAILING COMPARE SEARCH SCAN SKIP ?TERMINAL TRUE FALSE INVERT NOP`). Each is the definition this document gives; `tests/test_host_quit.c` runs them from the prompt against transcripts of the v3 binary. From the prompt, 122 results of the Q words printed by `Q.PRINT` — which shows all sixteen bits of a fraction — are digit for digit v3's, at both cell widths. Under D-18, `Q./` by zero and `Q.SQRT` and `Q.LOG` outside their domain leave the result D-11 and D-12 give and then raise an error (codes 11 `Division by zero` and 12 `Argument out of range`); v3 returns 0 and says nothing. As v3, `LSHIFT` and `RSHIFT` with a count that is negative or as large as the cell is wide are an error (D-18, code 9, `Shift count out of range`). `M+`, like `M-` and `M/MOD`, takes its double in the standard order, low cell first; v3 takes it low cell on top. + +**The stacks and the compiler.** The interpreter and compiler run on the same stacks as the user's +words, with the user's values beneath them. The capsule was written for stacks of ten cells and nine +entries (D-2), and is as sparing as that needed; the host node's are now 32 and 32 (D-17). The two +habits built into the capsule stay, and the measurements below are for the host node as it is now: + +- Every word of the capsule keeps what it works on in memory and has at most three cells of its own on + the data stack. Measured on the golden model: a line may have **28 values on the stack** while the + interpreter reads its next word, 29 may wait there while the next line is typed and interpreted + (the prompt and the interpreter take no more than four cells), and defining and running a word + leaves 26 cells under it untouched. (At ten cells these were 6, 6 and 4.) +- The capsule's words call each other as little as they can: byte access shifts without a loop, + opcodes are shifted into the word being built instead of placed by a counted shift, and the long + jobs (laying a loop's end, making a data word) are single words reached by a jump. Measured on the + golden model: the prompt has one return entry under each line, its call of `INTERPRET`, so words + run from the prompt may call each other **31 deep** (8 deep at nine entries), and one more is + reported as a return stack overflow; a line that runs a word which calls nothing uses four + entries; and a defining word (`CREATE … DOES>`) works from the prompt, from a word, and from a + word that calls that. A `DO` loop takes two return + entries. `*` is therefore not `UM* drop` on the host node but N steps of `+*` with + only the count on the return stack; it gives the same low cell (what `+*` loses at the top of `T` + takes N shifts to reach the bit that moves into `A`, and the loop ends first). + +A programme that v3 runs with more than that on its stacks does not run here; that is D-2, not the +compiler. + +**The code generator** (`v4/capsule/codegen.v4`) is what these words are built on. It packs opcodes, +literals and branches into instruction words at `HERE`, by the rules of §1.2 and §2: slots filled left +to right, unused slots `nop`, a literal's value in the cell after its word, `;` `ex` and any branch +closing the word. A branch goes only in a slot whose address field reaches all of the node's memory +(slots 0–2 on a 16,384-word host node, 0–3 on a 1,024-word one); otherwise it starts the next word, so +no reach check is ever needed. + +| Word | Does | +| --- | --- | +| `(OP,)` | `( op -- )` any opcode that is neither a branch nor `@p` | +| `(LIT,)` | `( x -- )` `@p` and its value | +| `(LABEL)` | `( -- addr )` closes the word being built; the address of the next: a branch target | +| `(BRANCH,)` | `( target op -- )` a branch to a known address; `(JUMP,)` and `(CALL,)` `( addr -- )` are the two commonest | +| `(BRANCH>)` `(RESOLVE)` | `( op -- ref )` a branch whose address is not known yet, and `( target ref -- )` filling it in | +| `(FLUSH)` `(CG-RESET)` | append the word being built; forget it | + +Executed on the golden model's host node (2026-10-04) by laying the same programmes down with the text +assembler on one node and with the code generator, running, on another, and comparing memory word for +word: every opcode, literals and branches in every slot position, and 600 random programmes. What it +lays down was then run. + ### 5.18 Control flow | Word | Fate | v4 definition / notes | | --- | --- | --- | -| `IF` `ELSE` `THEN` `BEGIN` `UNTIL` `AGAIN` `WHILE` `REPEAT` `DO` `?DO` `LOOP` `+LOOP` `LEAVE` `CASE` `OF` `ENDOF` `ENDCASE` | CC | Compile-time structure words. Expansions per §2 and below. | +| `IF` `ELSE` `THEN` `BEGIN` `UNTIL` `AGAIN` `WHILE` `REPEAT` `DO` `?DO` `LOOP` `+LOOP` | CC | Compile-time structure words, immediate and compile-only; source in `v4/capsule/compile.v4`. Expansions per §2 and below. What an opening word leaves for the word that closes it goes on a **control-flow stack in memory** (32 cells), not on the data stack, with a number saying which word left it; a closing word that finds the wrong number, or nothing, abandons the line. A loop that tests at its end (`UNTIL`) must drop the flag on both ways out, so `BEGIN` lays `jump L0 Ld: drop L0:` and `UNTIL` lays `if Ld drop`. Executed on the golden model's host node (2026-10-04): the code laid down for each is word for word what the text assembler makes of the expansion given here, and the programmes run give what the v3 binary gave. | +| `LEAVE` `I` `J` `UNLOOP` | CC | In-line words (below), compile-only. | +| `CASE` `OF` `ENDOF` `ENDCASE` | CC | Source in `v4/capsule/compile.v4`; not FORTH-79, as v3. The value chosen on stays on the stack through the clauses. Each `x OF a ENDOF` is laid as `over xor if M drop jump N M: drop drop a jump END N:`, and `ENDCASE` lays the `drop` that the part after the last `ENDOF` leaves the value for, with `END` after it. The control-flow stack holds the jumps to `END`, how many there are, and the tag 7; inside a clause, the jump to `N` and 8. They nest, and a word out of place is a `Control structure mismatch`. Executed on the golden model's host node (2026-10-04), including transcripts of the v3 binary. | | `EXIT` | OP | `;` | | `(BRANCH)` | OP | `jump` | -| `(0BRANCH)` | IN | `if L … drop` (§2) | -| `(DO)` | IN | `SWAP push push` (R: limit index) | -| `(?DO)` | IN | `2DUP = IF 2DROP jump past-loop THEN SWAP push push` | -| `(LOOP)` | IN | See below. | -| `(+LOOP)` | IN | Sign-aware boundary-crossing test; specified in the compiler capsule. | -| `(LEAVE)` | IN | `pop drop pop dup push push jump loop-test` (sets index to limit) | -| `I` | IN | `pop dup push` | -| `J` | IN | `pop pop pop dup push SWAP push SWAP push` | -| `UNLOOP` | IN | `pop pop drop drop` | +| `(0BRANCH)` | IN | `if L … drop` (§2) — executed on the golden model (2026-10-03) as `IF 1 ELSE 2 THEN`, including results recorded from the v3 binary. | +| `(DO)` | IN | `over push push drop` (R: limit index) — `SWAP push push` without the `SWAP`. The body always runs once, as v3. Executed on the golden model (2026-10-03). | +| `(?DO)` | IN | `over over xor if SKIP drop (DO) … body and loop end … jump PAST SKIP: drop drop drop PAST:` — skips the loop when index = limit, as v3. Executed on the golden model (2026-10-03). | +| `(LOOP)` | IN | See below. Adds 1 and goes round again while index < limit, signed, as v3. Executed on the golden model (2026-10-03) against C on every pair of 14 loop ends, and sequences recorded from the v3 binary. | +| `(+LOOP)` | IN | See below. `( n -- )`: adds `n` and goes round again while index < limit for `n >= 0`, while index >= limit for `n < 0`, as v3. Executed on the golden model (2026-10-03) against C on every pair of 14 loop ends with 11 steps, and sequences recorded from the v3 binary. Clobbers `A`. | +| `(LEAVE)` | IN | `pop pop drop dup push push` — FORTH-79 (ruled 2026-10-04): the limit is set equal to the index, so the loop ends at the next `LOOP` or `+LOOP`; the index is unchanged and the rest of the body still runs. v3's `LEAVE` left the loop at once (FORTH-83's behaviour) and, having set the index to the limit, left both on its return stack, so a `LEAVE` in an inner loop made the outer `LOOP` count the inner loop's leftovers and stop: `: T 3 0 DO 10 0 DO I . I 1 = IF LEAVE THEN LOOP I . LOOP ;` prints `0 1 10` in v3 and `0 1 0 0 1 1 0 1 2` here. Executed on the golden model (2026-10-04) in `LOOP` and `+LOOP`, up, down and with a step of 0. | +| `I` | IN | `pop dup push` — executed on the golden model (2026-10-03). | +| `J` | IN | `pop pop pop dup push a! push push a` — the outer index waits in `A` while the inner pair goes back, so `J` needs no return entry beyond the two loops' own (with two in-line `SWAP`s it needed one more). Executed on the golden model (2026-10-03), including a sequence recorded from the v3 binary. Clobbers `A`. | +| `UNLOOP` | IN | `pop drop pop drop` — executed on the golden model (2026-10-03) as `UNLOOP EXIT`, including a sequence recorded from the v3 binary. | ``` +, used by both loop ends: ( i' lim -- i' lim s ), the top bit of s set +exactly when i' < lim, signed -- i' itself when the two differ in sign, else +i' - lim (the subtraction in line): + over over xor -if SAME + drop over jump T +SAME: drop over over - +T: + (LOOP) expansion: pop 1 + pop \ index' limit - 2DUP xor \ index' limit flag (0 when equal) - if Lexit + \ index' limit s + -if Lexit \ not less: done drop push push \ R: limit index' jump Lbody Lexit: drop drop drop + +(+LOOP) expansion: ( n -- ) + dup a! pop + pop \ index' limit A: n + a xor \ top bit set: go round again + -if Lexit + drop push push + jump Lbody +Lexit: drop drop drop ``` -`(LOOP)` terminates when the index reaches the limit, which matches v3 for every loop where -`start < limit`. +`(LOOP)` goes round again while `index' < limit`, signed, which is v3's rule. So `0 5 DO … LOOP` runs +once, as in v3; a test for `index' = limit`, which this document had first, would run it round the whole +number circle. `(+LOOP)` goes round again exactly when `s` and `n` differ in sign: `index' < limit` for +`n >= 0` and the opposite for `n < 0`. A loop costs its word two return-stack entries while it runs. **New in v4:** `FOR`, `NEXT`, and `UNEXT` are native (§2). Counted loops that don't need an ascending index should use them; they cost one instruction per iteration. @@ -523,7 +868,7 @@ index should use them; they cost one instruction per iteration. | `ENTROPY@` `ENTROPY!` | MM | Per-call-target heat table (D-6). | | `WORD-ENTROPY` `RESET-ENTROPY` `TOP-WORDS` | CC | Reports over the heat registers. | | `(-` `INIT` | CC | | -| `VERSION` | CC | | +| `VERSION` | CC | Prints `StarForth v4.0.0 F18 32-bit` (or `64-bit`). Source in `v4/capsule/system.v4`. | | `SEED` `RANDOM` | CAP | Deterministic PRNG (xorshift) in capsule code, reproducible from the seed. | | `WAIT` | CAP | Loop until the `ANTICLOCK` register has advanced `n`. | | `HEARTBEAT-TICKS@` | MM | `HEARTBEAT` register. | @@ -531,11 +876,37 @@ index should use them; they cost one instruction per iteration. ### 5.20 Word-level ACL +On the host node, as v3 has it at its prompt (2026-10-05). Source in `v4/capsule/acl.v4` (the fields), +`compile.v4` (the check) and `ACL.fth` (the policy, FORTH source, which is v3's `capsules/ACL.4th`). +Executed on the golden model's host node against transcripts of the v3 binary. Between nodes, access control +is still the router's and Hera's (§6); nothing here decides that. + +**The fields.** Each entry's flags cell (§5.13) also holds: bit 5 *denied*, bit 6 *pinned*, bits 8–15 the +*mode* (0 TTL, 1 STRICT), bits 16–31 the *TTL*, a count of uses left before the next recheck. A new entry has +all of them zero. v3's TTL is 32 bits; its own policy never sets more than 65535, which is the most 16 bits +hold. + +**The check.** `INTERPRET` runs it on every word it is about to execute or compile: if the TTL is 0 the word +is rechecked, otherwise the TTL is counted down; then a denied word is refused with v3's line — +`WARN: ACL: denied 'xxx'` — the data stack emptied and the line ended. The recheck is the word whose address +is in the variable `ACL-HOOK`; with none there, the word is allowed and given the longest TTL. `ACL.fth` puts +its `ACL-RECHECK` there (v3 finds it by name each time). + +**Where this is weaker than v3.** v3's inner interpreter checks every execution, inside definitions too. v4 +code is native: a compiled call goes straight to its word, and no opcode asks permission. So v4 checks a +word when it is *compiled* as well as when it is interpreted — a denied word cannot be built into anything +new — but a call compiled while the word was allowed is not checked again when it runs. Closing that needs +the check in the node itself (the `call` opcode), which is a hardware decision and is not taken here. + | Word | Fate | Notes | | --- | --- | --- | -| `ACL-MODE@` `ACL-MODE!` `ACL-TTL@` `ACL-TTL!` `ACL-ALLOW@` `ACL-ALLOW!` `ACL-PINNED?` `ACL-PIN` `ACL-INHERIT` `ACL-INIT-PRIMITIVES` | HERA | Hera holds the ACL table. In the fabric, per-message ACL checks happen in the router (§6). | -| `ACL-HEAT@` | MM | | -| `ACL-WORD-ID` | CC | | +| `ACL-MODE@` `ACL-MODE!` `ACL-TTL@` `ACL-TTL!` `ACL-ALLOW@` `ACL-ALLOW!` `ACL-PINNED?` `ACL-PIN` | CAP | As v3, on an xt. The `!` words do nothing to a pinned word. `ACL-TTL!` takes a negative count as 0 and one above 65535 as 65535; `ACL-MODE!` keeps the low byte. An xt of 0 is D-18's code 16, `Not a word`. | +| `ACL-INHERIT` | CAP | `( src dst -- )`, as v3: `dst` takes `src`'s mode, is unpinned, allowed, TTL 0. The one word that unpins. | +| `ACL-INIT-PRIMITIVES` | CAP | As v3: every word that is not pinned, in every vocabulary, back to TTL mode, TTL 0, allowed. | +| `ACL-HEAT@` | MM | `( xt -- heat )`. The node's heat counters are not readable from a programme yet (D-6): 0, so `ACL.fth` gives every word its base TTL of 256. | +| `ACL-WORD-ID` | CC | `( xt -- n )`: a number for the word that never changes. Here that is its address. | +| `ACL-HOOK` | CAP | Variable: the xt of the recheck word, or 0. Not in v3. | +| `ACL-STRICT` `ACL-TTL-MODE` `ACL-TTL-COMPUTE` `ACL-RECHECK` `ACL-BOOT` `ACL-ENTRY` `HERMES-CHANNEL-OPEN?` and the constants | CC | `ACL.fth`: v3's policy file, word for word but for `ACL-BOOT`, which pins only the words v4 has (`EXEC` and `BYE` are not on this node) and sets `ACL-HOOK`. Loading the file runs `ACL-BOOT`; a system that does not load it has no access control. `COLD` removes it. | ### 5.21 Physics: benchmark and diagnostics @@ -569,32 +940,55 @@ index should use them; they cost one instruction per iteration. ### 5.25 Logging +A message has a level, and is printed if its level is at or below `LOG-LEVEL`. Source in +`v4/capsule/log.v4`; executed on the golden model's host node (2026-10-05) against transcripts of the v3 +binary. + | Word | Fate | Notes | | --- | --- | --- | -| `LOG-ERROR` … `LOG-DEBUG` (levels) | IN | Constants. | -| `LOG-LEVEL!` `LOG-LEVEL@` | CAP | Variable. | -| `LOG-ERROR"` … `LOG-DEBUG"` | CC | | -| `LOG-*-STR` | DEV | Log-ring service on the recorder (the ARM). | -| `(do-log-*)` | CC | | +| `LOG-ERROR` … `LOG-DEBUG` (levels) | IN | Constants, as v3: `LOG-ERROR` 0, `LOG-WARN` 1, `LOG-INFO` 2, `LOG-TEST` 3, `LOG-DEBUG` 4. | +| `LOG-LEVEL!` `LOG-LEVEL@` | CAP | A variable, 2 (`LOG-INFO`) at switch-on and after `COLD`. As v3, `LOG-LEVEL!` takes a level below 0 as 0 and one above 4 as 4. | +| `LOG-ERROR"` … `LOG-DEBUG"` | CC | `LOG-xxx" text"` logs the text now, if interpreting, or when the word it is compiled into runs. Compiled as `."` is: the level as a literal, a call to `(LOG")`, and the text after it. | +| `LOG-*-STR` | DEV | `( baddr u -- )`: log a string at that level. On the mesh this is the log-ring service on the recorder (the ARM); until then it goes to the console. | +| `(LOG")` | CC | The run-time word of `LOG-xxx"`, compile-only. It stands for v3's five `(do-log-*)`. | | `(LOG-APPEND-RAW)` | DEV | | +**What is printed** is v3's line without its time of day, which a node has not got: the level's colour, its +name and a colon, the colour off, the text, a new line — `ESC[32mINFO: ESC[0mtext` — with red for `ERROR`, +yellow `WARN`, green `INFO`, magenta `TEST`, blue `DEBUG`. v3's `LOG-DEBUG` level also turns on the +interpreter's own trace of every word; v4 has no such trace. A string logged with a negative length is +D-18's `Negative count` when its level is shown, and is ignored when it is not. + ### 5.26 Q48.16 fixed-point math A Q48.16 value is 64 bits, so on a 32-bit node it occupies **two cells** and every Q word is a double -word. Per D-8, v4 Q values are signed. +word. Per D-10 it occupies two cells on a 64-bit node too. Per D-8, v4 Q values are signed. | Word | Fate | Notes | | --- | --- | --- | -| `Q.+` `Q.-` | CAP | `D+`, `D-` | -| `Q.*` | CAP | 64×64 product from four `UM*` partial products, shifted right 16. | -| `Q./` | CAP | Shifted long division. **Division by zero sets an error** (v3 returned 0 silently). | -| `Q.ABS` `Q.NEG` | CAP | `DABS`, `DNEGATE` | -| `Q.LOG` `Q.EXP` `Q.SQRT` `Q.SIN` `Q.COS` | CAP | Algorithms ported from `q48_words.c`; the hosted C versions are the golden model. | -| `Q.FROM-INT` | CAP | `S>D` shifted left 16. Negative values are no longer clamped to 0. | -| `Q.TO-INT` | CAP | Shift right 16, take the low cell. | -| `Q.1` `Q.0` `Q.SCALE` | IN | Double-cell constants. | -| `Q.=` `Q.<` `Q.>` `Q.0=` `Q.MAX` `Q.MIN` | CAP | `D=`, `D<`, `SWAP D<` (for `Q.>`), `D0=`, `DMAX`, `DMIN`. Signed. | -| `Q.PRINT` | CAP | Pictured output, five fractional digits. | +| `Q.+` `Q.-` | CAP | `D+`, `D-` — executed on the golden model (2026-10-02) against v3's `q48_add`/`q48_sub` (`uint64_t` wrapping): bit-for-bit at 32-bit cells; at 64-bit cells the low cell is v3's, per D-10. | +| `Q.*` | CAP | `SWAP push over over UM* drop push push over pop -if L1 SWAP jump L2 L1: SWAP drop 0 L2: pop SWAP - push push over pop UM* pop + ROT pop dup push over -if L3 drop dup jump L4 L3: drop 0 L4: push UM* pop - D+ ROT pop UM* SWAP push 0 D+ pop push over pop SWAP Q.TO-INT push Q.TO-INT pop SWAP` (`SWAP` and `ROT` in line) — `floor(a*b / 2^16)`, signed (D-8), cut to two cells. Cells 0–2 of the product come from the unsigned cell products `a1*b1` (low cell), `a0*b1`, `a1*b0`, `a0*b0`, in that order, each input dropped after its last use and `b0` waiting on the return stack. Reading `a1` and `b1` as signed takes `(b1<0 ? a0 : 0)` and `(a1<0 ? b0 : 0)` off cell 2; each is folded in as soon as its operands are adjacent. The result is cells 0–2 shifted right 16 with `Q.TO-INT` twice. Executed on the golden model (2026-10-02) against an independent limb-by-limb reference, and against v3's `q48_mul` for non-negative operands. Leaves its caller 3 data cells under its arguments and 3 return entries. Clobbers `A`. | +| `Q./` | CAP | `over over OR if ZERO drop push over pop SWAP over xor (Q/) 4 + b! !b -if L1 DNEGATE L1: push push -if L2 DNEGATE L2: pop pop dup if CHK drop jump DIV CHK: drop over -131072 and if CHK2 drop jump DIV CHK2: drop push push dup pop dup push N-18 FOR 2* UNEXT over over xor -if SAME drop drop -if NOOV jump OV SAME: drop push inv pop + inv -if OV NOOV: drop pop pop jump DIV OV: drop drop drop pop pop drop drop (Q/) 4 + b! @b -if OVP drop 0 MSB ; OVP: drop -1 MAXHI ; DIV: (UQ/) (Q/) 4 + b! @b -if L3 drop DNEGATE ; L3: drop ; ZERO: drop drop drop NODE-ERROR b! -1 !b over over OR if Z0 drop -if ZP drop drop 0 MSB ; ZP: drop drop -1 MAXHI ; Z0: drop ;` — D-11: `a * 2^16 / b`, rounded toward zero; saturated to Q max / Q min on overflow; on division by zero, Q max / Q min by the dividend's sign (0 for `0 / 0`) and `NODE-ERROR` set. The sign of the result waits in `(Q/)`. Overflow needs no division: the quotient reaches `2^(2N-1)` exactly when `|a| * 2^16 >= |b| * 2^(2N-1)`, possible only for `|b| < 2^17`, where it is `a1 >= b0 << (N-17)` unsigned. `MSB` and `MAXHI` are the high cells of Q min and Q max. Executed on the golden model (2026-10-02) against an independent limb-by-limb reference (including `NODE-ERROR`), on width-native edge values, and against v3's `q48_div` for non-negative `a < 2^48`. Leaves its caller 3 data cells under its arguments and 3 return entries. Clobbers `A` and `B`. | +| `(UQ/)` | CAP | Internal to `Q./`: unsigned `floor(a * 2^16 / b)` for `b != 0` and no overflow. Restoring division, `2N+16` steps, on one shifting register — quotient (starting as `a`) above remainder — with the quotient and divisor in `(Q/)` so the stacks carry only the remainder, the quotient bit and the loop count. Each step's quotient bit enters at the next step's shift; with no overflow the bits leaving the quotient in the last 16 steps are zeros. Trial subtraction by in-line sign tests (`x - y` with `y` on top is `push inv pop + inv`), including the full double subtraction with its borrow, so the loop calls nothing but `D2*C`. Executed on the golden model (2026-10-02). Clobbers `A` and `B`. | +| `D2*C` | CAP | `( lo hi cin -- lo' hi' cout )`: the double shifted left one bit, `cin` entering at the bottom and `cout` the bit leaving the top (both 0 or 1). `a! dup -if L1 drop 1 jump L2 L1: drop 0 L2: push over -if L3 drop 1 jump L4 L3: drop 0 L4: over + + push 2* a + pop pop` — `cin` waits in `A`, and `2hi + m` is `over + +`, so it needs one return entry. Executed on the golden model (2026-10-02). Clobbers `A`. | +| `(Q/)` | CAP | Variable, 5 cells: `Q./`'s quotient register, divisor and result sign. Like `BASE` and the hold buffer, it lives in node memory. | +| `Q.ABS` `Q.NEG` | CAP | `DABS`, `DNEGATE` — executed on the golden model (2026-10-02) against v3's `q48_abs` and `0 - q`: bit-for-bit at 32-bit cells, including v3's wrap of Q min to itself; at 64-bit cells the low cell is v3's and the high cell is the true sign, per D-10. | +| `Q.COS` | CAP | v3's `q48_cos_approx`: on `xu = |(Q.REDUCE) x|`, `1 - xu^2/2! + xu^4/4! - …` to `n = 10`, run by `Q.SIN`'s loop: `(Q.REDUCE) -if A1 inv 1 + A1: 0 (QT) b! !b 0 over 0 Q.* drop (QT) 1 + b! !b 65536 (QT) 2 + b! !b 65536 (QT) 3 + b! !b 2 (QT) 4 + b! !b -1 (QT) 5 + b! !b jump TRIG` — term and sum start at 1.0, `n` at 2, and the sign cell is 0 so nothing is negated at the end. It jumps into the loop rather than calling it, so it costs no extra return entry. Executed on the golden model (2026-10-03): bit for bit v3's result on angles of every size and sign. Leaves its caller 3 data cells under its argument and 2 return entries. Clobbers `A` and `B`. | +| `Q.SIN` | CAP | v3's `q48_sin_approx`: on `r = (Q.REDUCE) x` and `xu = |r|`, `xu - xu^3/3! + xu^5/5! - …` to `n = 11`, each term the last times `xu^2` over `n(n-1)`, stopping once a term is below 10 ulp; negated if `r < 0`. After the reduction every value fits one cell, so the variable `(QT)` holds single cells and the only calls are `(Q.REDUCE)`, `Q.*`, `Q./` and `UM*`. The Taylor loop is written so that `Q.COS` can jump into it. Executed on the golden model (2026-10-03): bit for bit v3's result on angles of every size and sign. Leaves its caller 3 data cells under its argument and 2 return entries. Clobbers `A` and `B`. | +| `(Q.REDUCE)` | CAP | `( x -- r )`, v3's `q48_reduce_angle`: the angle reduced to one cell, `-pi <= r <= pi` with `pi = 205887`, `2pi = 411774` — the remainder of `x / 2pi` with the sign of `x`, then one step of `2pi` back into range. `x / 2pi` does not fit a cell, but only the remainder is wanted: `|x| mod 2pi` is two `UM/MOD` steps, the high cell first and its remainder then leading the low cell. `dup (QT) b! !b -if L1 DNEGATE L1: 0 411774 UM/MOD drop 411774 UM/MOD drop (QT) b! @b -if P1 drop inv 1 + jump J1 P1: drop J1: dup -205888 + -if BIG drop dup 205887 + -if OK drop 411774 + ; OK: drop ; BIG: drop -411774 + ;` Executed on the golden model (2026-10-03), bit for bit v3's. Clobbers `A` and `B`. | +| `(QT)` | CAP | Variable, 6 cells: `Q.SIN` / `Q.COS`'s sign, `x^2`, term, sum, `n` and subtract flag. | +| `Q.LOG` | CAP | v3's `q48_log_approx`: `x = 2^k * m` with `1.0 <= m < 2.0`; `ln m` by up to 6 Newton rounds on `e^y = m` from `y = m - 1.0`, stopping once `|m - e^y| < 100` ulp; result `y + k * ln 2` with `ln 2 = 45426`. `e^y` is `Q.EXP`'s Taylor loop **written in line** (flattened, ruled 2026-10-02), so `Q.LOG` calls only `Q.*`, `Q./` and `UM*` and the call chain is one level shorter than through `Q.EXP`. After the reduction `m`, `y`, the Taylor term and its sum each fit one cell at either width, so the variable `(QL)` holds single cells. `x <= 0` returns 0 and sets `NODE-ERROR` (D-12). Executed on the golden model (2026-10-03): bit for bit v3's result for every `x > 0` tested, including a sweep of the reduced `m`. v3's clamp `y = max(y - corr, 0)` is kept for fidelity but cannot fire: over all 65536 values of `m` it is never reached, and the iteration never needs more than 4 rounds. Leaves its caller 3 data cells under its argument and 2 return entries. Clobbers `A` and `B`. | +| `(QL)` | CAP | Variable, 7 cells: `Q.LOG`'s `m`, `y`, `k`, rounds left, Taylor term (then `delta`), sum, and `n * 1.0`. | +| `Q.SQRT` | CAP | v3's `q48_sqrt_approx`: Newton from `x0 = q/2 + 0.25`, up to 8 rounds of `x' = (x + q/x) / 2`, returning `x` as soon as `|x' - x| < 10` ulp; `sqrt(0) = 0`, `sqrt(1.0) = 1.0`. `q < 0` returns 0 and sets `NODE-ERROR` (D-12). `q`, `x` and the rounds left live in the variable `(QR)`. The halving is a logical double shift, `push a! 0 pop +* MAXHI and push drop a pop`. Executed on the golden model (2026-10-02): bit for bit v3's result for `0 <= q < 2^48`; above that v3's `q48_div` saturates and v4 divides correctly, so they part. Leaves its caller 3 data cells under its argument and 2 return entries. Clobbers `A` and `B`. | +| `(QR)` | CAP | Variable, 5 cells: `Q.SQRT`'s `q`, `x` and rounds left. | +| `Q.EXP` | CAP | v3's `q48_exp_approx`: `1 + x + x^2/2! + …` to 10 terms on `x = |q|`, stopping once a term is below 50 ulp; `1.0 Q./ e^|q|` for `q < 0`; `e^0 = 1.0`; `|q| >= 16.0` gives 0 (`q < 0`) or **Q max** (v3 returned all ones, which reads as −ulp under D-8). `x`, the term, the sum, the sign and the term index live in the variable `(QE)`, so only `Q.*` and `Q./` arguments sit on the stacks. Executed on the golden model (2026-10-02): bit for bit v3's result for `|q| < 16.0` (at 64-bit cells as the same value, high cell 0). Leaves its caller 3 data cells under its argument and 2 return entries. Clobbers `A` and `B`. | +| `(QE)` | CAP | Variable, 8 cells: `Q.EXP`'s `x`, term, sum, sign and term index. | +| `Q.FROM-INT` | CAP | `push 0 a! 0 pop 15 FOR +* UNEXT push drop a pop` — `n * 2^16` as a signed double. `+*` with `S = 0` never adds, so each step is an exact arithmetic right shift of `T:A`; starting from `T:A = n:0` (that is, `n * 2^N`) and shifting `N-16` bits leaves `n * 2^16`. The count is `N-17`: 15 at 32-bit cells, 47 at 64. Negative values are no longer clamped to 0. Executed on the golden model (2026-10-02): matches v3's `q48_from_u64` for `n >= 0` (at 64-bit cells in the low cell, where v3 wraps for `n >= 2^47`, per D-10). Clobbers `A`. | +| `Q.TO-INT` | CAP | `push a! 0 pop 15 FOR +* UNEXT drop drop a` — the same `+*` shift, 16 bits at every cell width, leaving the low cell in `A`. Rounds toward minus infinity, as v3's arithmetic shift does (−1.5 gives −2). Executed on the golden model (2026-10-02): v3's `q48_to_u64` exactly at 64-bit cells, its low cell at 32. Clobbers `A`. | +| `Q.1` `Q.0` `Q.SCALE` | IN | Double-cell constants, placed in line as two literals, low cell first: `Q.1` and `Q.SCALE` are `65536 0` (1.0), `Q.0` is `0 0`. v3's are 65536, 0 and 65536. Executed on the golden model (2026-10-03): the values match v3's, `Q.1 Q.TO-INT` is 1, `1 Q.FROM-INT` is `Q.1`, and `q Q.1 Q.*` and `q Q.0 Q.+` return `q`. | +| `Q.=` `Q.<` `Q.>` `Q.0=` `Q.MAX` `Q.MIN` | CAP | `D=`, `D<`, `2SWAP D<` (for `Q.>`), `D0=`, `DMAX`, `DMIN`. Signed (D-8); v3 compared unsigned, so v3 agrees only when both values have the same sign. Executed on the golden model (2026-10-02). `Q.>` was given here as `SWAP D<`, which swaps single cells, not Q values, and gave a wrong answer in 11702 of 20169 test cases. | +| `Q.PRINT` | CAP | `( q -- )`: the integer part, a point, the five digits `floor(frac * 100000 / 65536)`, then one space, as v3; always decimal, whatever `BASE` is, and `BASE` is put back. Signed (D-8): a negative value prints `-` and its magnitude (−1.5 prints `-1.50000`), where v3 printed it as a large unsigned number. `dup (QP) 3 + b! !b -if A DNEGATE A: (QP) 2 + b! !b dup (QP) 1 + b! !b BASE b! @b (QP) b! !b 10 BASE b! !b 65535 and 4 FOR dup 2* 2* + UNEXT 10 FOR 2/ UNEXT 0 <# # # # # # drop drop 46 HOLD (QP) 1 + b! @b (QP) 2 + b! @b dup push push a! 0 pop 15 FOR +* UNEXT drop drop a pop 15 FOR 2/ UNEXT HIMASK and #S (QP) 3 + b! @b SIGN #> (QP) b! @b BASE b! !b jump OUT` — `OUT` is the `TYPE jump SPACE` at the end of `.R`. The fraction is `frac * 3125 / 2048`, which stays inside a 32-bit cell where `frac * 100000` would not; times 3125 is times 5 five times. The integer part is `|q|` shifted right 16 as a double: its low cell by `Q.TO-INT`'s `+*` shift in line, its high cell by `2/` and `HIMASK`, which clears the top 16 bits. Executed on the golden model (2026-10-03) against a C reference, on every seventh fraction, and against a transcript of the v3 binary for non-negative values. Leaves its caller 4 data cells and 3 return entries. Clobbers `A` and `B`. | +| `(QP)` | CAP | Variable, 4 cells: `Q.PRINT`'s saved `BASE`, `|q|` and the sign. | ### 5.27 Inference engine @@ -612,7 +1006,7 @@ The runtime governor moves into hardware as the multi-level Rolling Window of Tr | Word | Fate | Notes | | --- | --- | --- | -| `DEFER` `IS` `DEFER@` | CC | A deferred word's runtime is `@p push ;` followed by the stored xt. | +| `DEFER` `IS` `DEFER@` | CC | As v3. `DEFER xxx` makes a data word whose run-time routine fetches the address in its parameter field and goes to it (`pop a! @ … push ;`), so the word it runs returns to `xxx`'s caller and a deferred word is no deeper than a plain one. `' yyy IS xxx` and `DEFER@ xxx` work at the prompt and in a definition. A deferred word with nothing set is D-18's code 15, `Deferred word not set`. Source in `v4/capsule/system.v4`; executed on the golden model's host node (2026-10-05), including transcripts of the v3 binary's behaviour. | ### 5.29 – 5.32 Framebuffer, keyboard, TrueType, scrollback @@ -655,9 +1049,19 @@ The runtime governor moves into hardware as the multi-level Rolling Window of Tr ## 6. Messaging between nodes -Each node has four neighbour ports (`PORT-UP`, `PORT-DOWN`, `PORT-LEFT`, `PORT-RIGHT`) mapped into its -address space. A read from a port blocks until the neighbour writes; a write blocks until the neighbour -reads. This is the GA144 model. No instruction is added: a port is an address. +Each node has ports mapped into its address space. A read from a port blocks until the neighbour writes; +a write blocks until the neighbour reads. This is the GA144 model. No instruction is added: a port is an +address. + +**How many ports, and what they connect to (ruled 2026-10-05 and -06; `MESH.md`).** This section first +gave a node four ports, `PORT-UP`, `PORT-DOWN`, `PORT-LEFT` and `PORT-RIGHT`: a flat grid. That is +withdrawn. The number of ports is a build parameter of the node (`V4_PORTS`), as cell width and node +memory are, and which port connects to what is a table that can change while the system runs — "not +constrained by a 3D world; other geometries might be better." The ports are numbered, not named for +directions. Two addresses follow them: "any port", a read of which takes from whichever port has a +neighbour writing, and the port the last such read came from. A node at reset has `P` at "any port" and +executes what a neighbour sends it. Built and tested in the golden model 2026-10-06 (`v4/src/node.c`, +`exec.c`, `fabric.c`; `v4/tests/test_fabric.c`). ### 6.1 Packet format (proposal) @@ -688,7 +1092,6 @@ Addresses are assigned in the node memory map (D-4). Names only here. | Register | Access | Contents | | --- | --- | --- | -| `DSP` | R/W | Data stack pointer (D-2). | | `HEAT-OP[0..31]` | R | Per-opcode retirement heat. | | `HEAT-CALL[...]` | R/W | Per-call-target heat, with freeze bit (D-6). | | `ANTICLOCK` | R | Virtual tick: a pure function of the execution stream. | @@ -696,3 +1099,10 @@ Addresses are assigned in the node memory map (D-4). Names only here. | `GOV-*` | R/W | Governor parameters and Jacquard selector state (`L8-*`, decay rate). | | `REC-ENABLE` | R/W | DoE recorder on/off (`HB-ON` / `HB-OFF`). | | `PORT-STATUS` | R | Per-port ready flags, for non-blocking polls. | +| `NODE-ERROR` | R/W | Error register (D-18): a store of a non-zero code raises an error — on a node with a prompt it is a trap that ends the line with the code's message; a store of zero clears it. Originally the arithmetic error flag: set to −1 by `Q./` on division by zero (D-11), by `Q.SQRT` / `Q.LOG` outside their domain (D-12) and by `HOLD` on a bad character or a full buffer (D-13), cleared by writing 0. `VM-ERROR?` reads it. | +| `CONSOLE-TX` | W | Console transmit: a store sends the low 8 bits of the value as one character. This is what `EMIT` writes to. On the single-node golden model it is a capture register: the character is appended to a buffer on the node and memory is not written (`v4_node_console_attach`, `v4/include/v4/node.h`), so printing words can be run and their output compared with v3's. With the mesh (step 2) it becomes the port to the console node. | +| `CONSOLE-RX` | R | Console receive: a fetch gives the next pending character, 0–255, and takes it; with none pending it gives −1 and takes nothing. This is what `KEY` reads. On the single-node golden model the characters come from a queue the test feeds (`v4_node_console_input_attach`, `v4_node_console_feed`, `v4/include/v4/node.h`). Only the data fetches `@`, `@+` and `@b` see the register; instruction words and literals at the same address are read as memory. With the mesh (step 2) it becomes the port from the console node, and a read with nothing pending will block instead. | +| `CONSOLE-STATUS` | R | Console receive status: a fetch gives −1 when a character is pending and 0 when not, and changes nothing. `?TERMINAL` reads it, and `KEY` polls it. On the mesh it is the console port's bit of `PORT-STATUS`. | +| `DSTACK-DEPTH` | R/W | A fetch gives how many values the data stack holds, the fetch's own push not counted. A store empties the data stack; the value stored is taken off first and ignored. `DEPTH` reads it; `ABORT` stores to it (D-16). | +| `RSTACK-DEPTH` | R/W | The same for the return stack. `QUIT`, `ABORT` and the error exits store to it before they call anything. | +| ~~`BLOCK-NUMBER` `BLOCK-ADDRESS` `BLOCK-COMMAND` `BLOCK-STATUS`~~ | | Removed 2026-10-07 (D-19): blocks are a kernel request, not registers. | diff --git a/docs/v4.0.0/ENGINE.md b/docs/v4.0.0/ENGINE.md new file mode 100644 index 00000000..cc075536 --- /dev/null +++ b/docs/v4.0.0/ENGINE.md @@ -0,0 +1,434 @@ +# StarForth v4.0.0 — The F18 engine in the VM's place + +Design, 2026-10-05. Written from Captain Bob's rulings of that day +(`V3-PARITY.md` sections 1a to 1h, where each is recorded with its words) +and from v3's code. It replaces the lone-node assumptions of `NUCLEUS.md` +sections 5.3 and 7 to 9. + +## 1. The principle + +`JUSTIFICATION.md` section 16: v4 is equivalent to v3 at any point in time; +"the only difference is the machine underneath: the F18-derived engine +instead of the original StarForth VM." + +Ruled 2026-10-05: v4 is exactly like v3 in functional requirements up to +the first FORTH prompt, and that is the stopping point for now. Nothing is +stubbed, simulated or stood in for. + +So v4 is not a new system beside LithosAnanke. It is LithosAnanke with a +different machine executing its FORTH. + +## 2. What stays, and what is replaced + +**Stays, untouched:** everything the kernel does. The Stadium and each +patron's own accounts; sessions; the switcher; kernel-Hermes; the capsule +directory, birth protocol, hashing, signing and parity; the block +subsystem and its devices; identity and Zuse; the HAL console, Hestia, the +console proxies and the kernel's REPL; the heartbeat; the boot order in +`kernel_main.c`. + +**Replaced:** the part of a v3 VM that executes FORTH. + +| v3 | v4 | +|---|---| +| The inner interpreter (`v3/src/vm.c`, `kernel/src/vm/vm_core.c`) | The node: `v4/src`, 32 opcodes | +| The dictionary as a list of C `DictEntry` records | The dictionary in the node's memory (`v4/capsule/dict.v4`) | +| The FORTH-79 words as C functions (`v3/src/word_source`) | The assembled nucleus (`v4/capsule/*.v4`) and colon definitions in `capsules/v4/forth79.4th` | +| The outer interpreter and compiler in C | The same, in the nucleus | + +A v3 VM is also a record the kernel keeps: its identity, its Stadium ID, +its heartbeat state, its place in the registry, its Zuse flags. That +record stays. What changes is what stands behind it. + +## 3. The interface + +The kernel reaches a VM through a small number of things. Each is listed +with what v3 has, what was ruled, and what a node needs. This is the whole +of the work: when a node answers all of these, the kernel's boot runs on +it as it runs on a v3 VM. + +### 3.1 Interpret this text + +*v3:* `vm_interpret(vm, text)`. The kernel's REPL hands over each line it +has read; `capsule_exec_payload` hands over each line of a capsule; +kernel-Hermes hands over a message's payload when the target drains its +queue. The VM runs the text and returns, with its error flag set or not. + +*Ruled:* the kernel hands a node a whole line and takes characters back; +the node's own prompt loop plays no part at that level. A node receives a +message by being handed its text. + +*v4:* the node has an entry that interprets the text in its input buffer +and then stops, saying how the line ended: completed, ended in an error, +or `QUIT`. It prints no prompt and no ` ok`. The buffer takes 1024 +characters, a block, as v3's does. `QUIT` and `ABORT` end the line and +return to whoever handed it over. `KEY`, `EXPECT` and `QUERY` stay +FORTH-79 words that read characters. + +With this one entry v3's capsule loader, REPL and message drain can all +drive a node, and `v4/system/boot.c`'s own loader is not needed. + +### 3.2 A character out + +*v3:* the host service `putc`, then `console_putc`; the fabric adds +`[user@VM]`. + +*v4:* the node's `EMIT` gives the character to its host, which calls the +same service. Present today. + +### 3.3 Asking the kernel + +*v3:* a kernel word is a C function registered in the VM's dictionary: +`BIRTH`, `KILL`, `USE`, the block words, the Stadium and Hermes words, the +framebuffer words. It takes its arguments from the VM's data stack. + +*Ruled:* a node asks for a block by number and the kernel decides the +rest; a node sends a message by asking. + +*v4, ruled 2026-10-05:* a kernel word is an ordinary dictionary entry on +the node whose body writes its request number to the node's port. The +write blocks the node until the kernel, its neighbour on that port, has +served it (`DECOMPOSITION.md` section 6: "a write blocks until the +neighbour reads"). The kernel serves between the node's opcodes, so the +node is always stopped when C touches it; the function takes its arguments +from the node's data stack and leaves its results there. Kernel words are +made by handing the node text at boot. The C functions are v3's. + +### 3.4 The stacks and the dictionary, from the kernel's side + +*v3:* `vm_push`, `vm_pop`, `vm_find_word`, and the fields of a +`DictEntry` (the kernel pins `BIRTH` and `CAPSULE-BIRTH` by setting two of +them). + +*v4:* the same operations on the node's stacks and on entries in the +node's memory. + +### 3.5 A word is being executed + +*v3:* the inner loop, for every word: the ACL's countdown and recheck, +`execution_heat`, `stadium_word_dispatch`, the rolling window, pipelining. + +*Ruled:* the word card stays exactly as v3 — a run-time check, the TTL +adaptive from the word's own count. Every kind of patron keeps its own +accounts; the word's are as v3. Opcodes are counted and left unwired. + +*v4:* the node dispatches a word at the `call` opcode, one place in the +engine. The node does there what v3's loop does. A word that is to be +checked must be called, so the in-line words that can be called become +calls. + +### 3.6 An error + +*v3:* `vm->error`. *v4:* how a line ended (3.1), and the node's error +register for a C function to raise one. + +### 3.7 A tick + +*v3:* the kernel's timer drives `vm_tick` and the heartbeat state in the +VM's record. *v4:* unchanged; that state is the record's, not the +engine's. + +### 3.8 The dictionary hash + +*v3:* `vm_dict_hash_fn`, a hook the birth protocol calls. *v4:* the same +hook, answered from the node's dictionary. + +## 3b. A word's two halves (ruled 2026-10-05: "A is good") + +`V3-PARITY.md` section 1j. A word on a node is its name and its code, in +the node's memory, with its word ID in its header. Its accounts are v3's +own `DictEntry` record, kept by the kernel: `execution_heat`, `physics`, +the four ACL fields, the transition metrics, the word ID. The two are +joined by the word ID. + +- The node tells the kernel when a word is defined and when words are + forgotten, by a request through its port. The kernel makes or drops the + record. +- At each `call` the kernel does on the record what v3's inner loop does + (3.5). +- v3's physics, heartbeat, ACL words, Stadium word layer and parity run on + the records, unchanged. The ACL fields v4 keeps in an entry's flags cell + (`v4/capsule/acl.v4`) go: v3's C ACL words serve a node as they are. + +## 3c. What exactly is swapped, in v3's own files + +Measured 2026-10-05. Each build already has one file that is the +interpreter, and the rest of v3 calls into it: + +| Build | The interpreter file | The stacks | +|---|---|---| +| Hosted | `v3/src/vm.c` | `v3/src/stack_management.c` | +| Kernel | `kernel/src/vm/vm_core.c` (the kernel build leaves `v3/src/vm.c` out) | the same | + +The functions in it that execute FORTH, and so are the node's to answer: +`vm_interpret`, `vm_interpret_word`, `execute_colon_word`, `acl_recheck`, +`vm_parse_word`, `vm_parse_number`, `vm_enter_compile_mode`, +`vm_exit_compile_mode`, `vm_compile_word`, `vm_compile_literal`, +`vm_compile_call`, `vm_compile_exit`, `vm_make_immediate`; the memory +accessors `vm_addr_ok`, `vm_ptr`, `vm_load_u8`, `vm_store_u8`, +`vm_load_cell`, `vm_store_cell`; and the stacks, `vm_push`, `vm_pop`, +`vm_rpush`, `vm_rpop`. The rest of those files — host services, the time +base, `vm_cleanup` — is not the engine and stays. + +So the swap is a third interpreter file, for both builds: the same +functions, answered by a node. Everything else of v3 is compiled as it is. + +**The two products part here (Captain Bob, 2026-10-05):** "I would say we +are at a fair point where the hosted product and the bare metal product +diverge completely." + +This section first said the hosted v4 product should become v3's hosted +program with the node as its interpreter. That is withdrawn. From here: + +- **The bare-metal product** is LithosAnanke with the node in the VM's + place. Everything in this document about the kernel's interface, word + records, the hook at `call`, the fleet and identity is the bare-metal + product's. The third interpreter file is for the kernel build. +- **The hosted product** is its own thing and is not required to follow + the bare-metal one. Today it is the node, the nucleus, the FORTH-79 + capsule, POST and its own prompt (`v4/tools/hosted.c`, + `v4/system/boot.c`), and it works on three ISAs. +- **The six builds no longer have to print the same lines.** The three + hosted builds agree with each other; the three bare-metal builds agree + with each other. + +**What the two share (confirmed by Captain Bob the same day, "yes, +exactly"):** the engine in `v4/src`; the FORTH-79 capsule, +`capsules/v4/forth79.4th`; and its POST (then `capsules/v4/post79.4th`; since `MESH.md` step 6b, 2026-10-07, the kernel's cases, `v4/system/post_cases.c`). **The +nuclei are separate.** The bare-metal nucleus needs word IDs in its +headers and words that are called where the hosted one compiles them in +line; the hosted nucleus need not have either. The hosted product may +become a hosted version of an SDK. + +**Two things in v3's C words do not carry over as they are**, and must be +dealt with word by word: + +- A C word that takes an address from the stack and reads memory through + `vm_ptr` gets a pointer into v3's flat bytes. A node's bytes are four to + a cell (D-1), so they are not a flat run of C bytes. Such a word needs + the text copied out of the node. `mama_forth_words.c` has 40 such uses. +- A C word that reaches into `vm->data_stack` or `vm->dsp` directly must + go through `vm_push`, `vm_pop` or a depth accessor. `mama_forth_words.c` + has 45. + +Both are changes to files v3 also builds, so each must leave v3 as it is +and be accepted by v3's own three-ISA boot. + +## 3a. Many VMs at once (Captain Bob, 2026-10-05) + +> Do not forget that this is multiuser, multitasking, and a hybrid of +> preemptive and cooperative. + +And, the same day: "Hera will be the process manager via compudynamics per +node." + +What that asks of the engine, and what it has: + +- **A node can be stopped between any two instruction words and gone on + with later.** Everything a node is doing is in the node and its + execution state; `v4_exec_step_word` runs one instruction word and + returns. So whoever runs the nodes can take the processor from one at any + word and give it to another: that is the preemptive half, and the engine + already allows it. Nothing may be built that needs a node to run a line, + or a request, to its end without interruption. +- **A node gives way by itself when it writes to its port.** It is blocked + until served (3.3), and while it is blocked another can run: that is the + cooperative half. +- **Each node has its own execution state.** The place a blocked node goes + on from is kept per node (`v4_exec_state`), never in one shared place. +- **Each user is a VM** (`FABRIC-2.md` D.2: "a session IS a VM"), so each is + a node, with its own dictionary, stacks and ACL cards. + +What is not designed: who decides which node runs next, and when. In v3 +that is the switcher, reading what kernel-Hermes publishes, at the +checkpoint in the inner loop; the ruling makes it Hera's, by compudynamics. +It is step 6's, and section 6 lists it as open. + +**The loop that runs one node until its line ends** (`v4_boot_line`, +`v4/system/boot.c`) is the lone node's and the hosted program's, where +there is one node and nothing to share the processor with. It is not how +the kernel will run a fleet, and goes with the lone node at step 5. + +## 3d. Where v4 is going, and the next step (Captain Bob, 2026-10-05) + +> The entire point is that ultimately we have F18 engines digesting +> capsules alone, and in a sense can be anything written in F18 assembler +> for our fabric — 144 someday as a 12x12 grid, but I want a 12^3 FPGA +> ultimately, where using a capsule digester like StarForth, it's more +> than an operating system. + +So the unit is an engine and the capsule it digests; StarForth is one +digester. The engine in `v4/src` must stay free of anything specific to +StarForth or to the kernel, and what is built to make v4 equal v3 on a PC +(section 3b's records, v3's C functions serving requests) stays on the +kernel's side. (12^3 is a three-dimensional grid: six neighbours. +`DECOMPOSITION.md` section 6 has four ports. Noted, not ruled.) + +Asked whether v4 = v3 on bare metal comes first, or nodes talking to +nodes: **"The next step is talking nodes sharing the common SSD, and [they] +may or may not have block storage available."** Step 4 below waits. + +Rulings on that step so far: + +- **The ports are the transport; the message is what is transported.** + Node to node, a write blocks until the neighbour reads + (`DECOMPOSITION.md` section 6). What travels is v3's Hermes message with + what it carries — type, from, to, channel, heat and TTL, ACL tag, a + payload of FORTH text up to a block — so v3's messaging rules are not + dropped; they go with the message. +- **Storage: some nodes have storage of their own** (a thumbdrive, as a + user's identity has today), in addition to or instead of the common SSD. + The common SSD is the system-resident store, Artemis's disk + (`FABRIC-2.md` F.16). + +- **The first set of nodes: "2x2 + 1 central".** Five: four in a 2x2, + and one in the middle. Read back to Captain Bob, and not corrected, as: + each outer node wired to its two grid neighbours and to the centre; the + centre wired to all four; the centre is Hera. +- **A node has six ports, not four** — "A, as long as it can scale at + runtime adaptively." With four, the centre's are all taken by the outer + nodes and nothing is left for the common SSD or the console. Six is also + what a 12^3 grid needs. `DECOMPOSITION.md` section 6 is to be corrected. +- **It must scale at run time, adaptively.** The number of nodes and their + wiring are not fixed when the system is built. +- **The geometry is not fixed: "Not constrained by a 3D world. Other + geometries might be better."** Said when asked what a centre's two + remaining ports of six were for. So six, which came from a 12^3 grid's + six neighbours, is not a given either; nor is any one shape. +- **The geometry is data, not design (confirmed, "yes").** A node has a + number of ports, and that number is a parameter, as cell width and node + memory are. Which port connects to what is a table that can change while + the system runs. A geometry is a rule for filling in that table; the + units-and-centres rule below is the first, not the only one. Devices — + the common SSD, the console, a node's own drive — are things on the + other end of a port, in the same table. Nothing in the engine knows + which geometry is in use. A node is told, or finds out, which port leads + toward a destination. +- **What Hera's process management decides (ruled, "A"): which nodes + exist and are awake, not whose turn it is.** Every node that is not + blocked runs; on one processor that is each in rotation, an instruction + word at a time, which is what "all at once" is there and is not a + policy. From each node's heat Hera decides which are born, put to sleep, + woken and killed (`JUSTIFICATION.md` sections 6 and 7). Cooperative is a + node blocking itself at a port; preemptive is Hera putting a node to + sleep or killing it between any two instruction words. Nothing in this + depends on there being one processor. With it: an idle node does not + spin; it is blocked reading its ports and wakes when a neighbour writes, + and the console handing it a line is a message arriving on a port like + any other. +- **A node is born empty (ruled, "A").** It has nothing but the ability + to listen: it is blocked reading its ports, and the first thing a + neighbour sends it is a capsule of F18 code, which it takes in and runs, + as an F18 node executes what arrives at its port. StarForth's nucleus is + then itself a capsule — the one that makes an empty node able to digest + FORTH-source capsules — and is named, hashed, signed and recorded in + parity like any other, where today it is linked into the binary. The one + thing every node has, whatever it becomes, is the fixed behaviour at + reset by which it takes in its first capsule. +- **Where it is built and proven (ruled, "A"): in the shared engine, + hosted first, then bare metal.** Ports, wiring, nodes born empty and + messages are the engine's and belong to both products. Hosted, on three + ISAs, with a disk image as the common SSD; then the same nodes on bare + metal with the real console, SSD and thumbdrives. +- **How it grows: "Only the central node can connect to only another + central node."** So the five are a unit: four outer nodes and their + centre. An outer node is wired only inside its own unit. Units are joined + centre to centre, and the system grows by units. + +The design of this step is being worked out by question and answer and is +not written yet. Nothing of it is built. + +## 4. What was built on the detour + +| Built 2026-10-05 | What becomes of it | +|---|---| +| `kernel_main.c` calling `sk_v4_run()` before the fleet tables | Goes at step 4. Until then it is how the bare-metal build is kept booting while the interface is built. | +| `v4/system/boot.c`: its own capsule loader and `PARITY:V4_*` lines | Stays for the hosted product. On bare metal v3's birth protocol loads the capsules and prints v3's parity lines (step 4). | +| The node's prompt loop, and the code that strips ` ok` from its output | Goes at step 1. | +| `capsules/v4/forth79.4th`, `post79.4th`, `mkpost.py`, the rules | Stay. POST is the gate for every word moved out of the nucleus. | +| `(CATCH)`, `(EMIT-HOOK)`, `NODE-ERROR` by name | `NODE-ERROR` stays. `(CATCH)` and `(EMIT-HOOK)` went with the POST capsule, `MESH.md` step 6b, 2026-10-07: POST is the kernel's and needs neither. | +| The per-call-target count (`v4/src/heat.c`, `call[]`) | Goes at step 3, when the node does at `call` what v3 does. | +| The hosted Linux product (`v4/tools/hosted.c`, `v4/system/boot.c`) | Stays, as its own product (3c). | + +## 5. Steps + +Each ends with all six builds booting and agreeing, and is committed with +its logs. + +1. **Interpret this text (3.1).** The node's line entry; no prompt loop. + The hosts print the prompt and ` ok`, as v3's REPL does. + **Done 2026-10-05.** `(LINE)`, `(IDLE)`, `(DONE)` and `(LINE-STATUS)` in + `v4/capsule/quit.v4`; `v4_line_*` in `v4/src/image.c`; `v4_boot_line` in + `v4/system/boot.c`. All v4 tests pass at both widths; the six builds + agree; lines typed at the three bare-metal prompts are answered. + `logs/20261005-180922`, `-181152`, `-181541`. +2. **Asking the kernel, and the stacks from the kernel's side (3.3, + 3.4).** Settle how a request is carried. Kernel words callable from a + node. + **The carrier is done, 2026-10-05; the rest is not.** Ruled: a node asks + by a blocking write to a port. Built: the port (`v4/src/node.c`, + `v4_node_port_attach`, `v4_node_port_served`); a blocked node goes on + from the opcode after the store, in the same instruction word + (`v4/src/exec.c`); `KERNEL-WORD` (`v4/capsule/compile.v4`), which makes a + word whose body writes its request number to the port; the boot makes + the kernel's words by handing the node text, and serves requests + (`v4/system/boot.c`). A request no one serves is error 12 on the node. + The one kernel word so far is `BYE`, on both products: hosted it leaves + the program, as hosted v3; on the lone node it is v3's cold restart. + `v4/tests/test_port.c`; six builds agree; `BYE` and an unserved request + typed at each bare-metal prompt. `logs/20261005-185506`, `-185734`, + `-190101`. + **The node tells its kernel of its words, 2026-10-05** (3b). An entry + is made in one place in the nucleus and entries go in two; each now + tells through a variable holding the xt of a word to run: + `(WORD-DEFINED)` ( xt -- ) from `(HEADER)`, `(WORD-FORGOTTEN)` ( w -- ) + from `FORGET` and `COLD` (`v4/capsule/dict.v4`, `system.v4`). With 0 + there, as on the hosted product, no one is told. `test_host_quit.c` is a + kernel that keeps the list and checks it is exactly the node's + dictionary after definitions, a vocabulary, an abandoned definition, + `FORGET`, a refused `FORGET` and `COLD`. + **Found and fixed with it:** since the capsules moved from build time to + boot time, what `COLD` returns to and `FORGET` protects was still the + nucleus alone, so `COLD` lost `U*`, `U/MOD` and `BYE`. The boot now + seals the system when it has loaded it (`v4_image_seal`); `hosted-check` + checks it. `logs/20261005-193045`, `-193307`, `-193636`. + **Not done:** v3's own C functions serving a node. They take a `VM *` + and use `vm_push`, `vm_pop` and, in places, the stack's fields directly; + a node has to stand behind that `VM` record first. That, the records + themselves, and the kernel's interpreter file are step 4. +3. **A word is being executed (3.5).** The hook at `call`; the ACL's + countdown and recheck; the word's count; `stadium_word_dispatch`. + In-line words become calls. The per-call-target count goes. +4. **The node as the kernel's interpreter.** The third interpreter file + (3c), for the kernel build. Under `STARFORTH_V4` the kernel's boot + brings the node up where it brings a v3 VM up: `vm_interpret` hands the + node the line; `register_word` makes a kernel word and its record; the + node's own words get records. `sk_v4_run()` goes. v3's POST runs + through it and its failures are the list of what is not yet there. +5. (Folded into 4: the hosted product is no longer part of this path.) +6. **Hera as v3 has her.** `init.4th` runs on the node; v3's whole POST + passes; v3's parity lines. +7. **The fleet.** Hestia and Artemis; message delivery; who runs next. + With Artemis: she is the owner of the disk, who says it may be + formatted, so that the disk is written as well as read (`MESH.md` step + 6); and a drive that arrives is registered by her, at the chain's tail. +8. **Identity and the prompt.** Zuse; `[zuse@Hera] ok>`. + With identity: drives that come and go, as v3 has them — the + home-blocks signature, `WIREBIND`, the user's VM born from the drive, + `EJECT`, and a surprise pull (`MESH.md` 8.7, which says why the storage + step that was to build them another way was withdrawn). + +Moving words from the assembled nucleus to `forth79.4th` goes on beside +these, a group at a time, with POST after each. + +## 6. Open, and where each must be settled + +| Open | Before | +|---|---| +| How the node tells a dictionary entry from a bare address at `call` | Step 3 | +| `EXECUTE`, which enters a word by a return | Step 3 | +| `>R R> R@ I J LEAVE`, which cannot be called | Step 3 | +| Who decides which node runs next, and when: Hera, by compudynamics; preemptive and cooperative | Step 7 | +| The node's safe moment for message delivery and switching | Step 7 | +| `PAD 42 OVER !`, a byte address given to `!` (D-1) | Step 6 | +| Which word patrons' accounts the hosted product keeps, having no Stadium | Step 3 | diff --git a/docs/v4.0.0/JUSTIFICATION.md b/docs/v4.0.0/JUSTIFICATION.md index 151110b3..24ae5735 100644 --- a/docs/v4.0.0/JUSTIFICATION.md +++ b/docs/v4.0.0/JUSTIFICATION.md @@ -224,3 +224,34 @@ LithosAnanke filing is a question for counsel. - K≡1.0 holds on the golden model at both widths, on all three host ISAs. - A hosted mesh runs the Tripod roles as nodes, with Hermes as the network. - Verilator co-simulation of one node matches the golden model instruction for instruction. + +## 15. Products + +Ruled by Captain Bob, 2026-10-03. v4 turns one project into three products built on the same engine: + +1. **Hosted StarForth F18.** The v4 engine as a native Linux build for amd64, arm64 and riscv64, on + real hardware. +2. **FPGA StarForth F18.** A 32-bit build of the engine loaded into the FPGA. This is the gateway into + building the whole system, and its foundation. +3. **StarshipOS.** The bare-metal product: LithosAnanke running the v4 F18 engine. + +The FORTH-79 vocabulary, recomposed on the F18 engine (`DECOMPOSITION.md`), is stored as a capsule. The +StarshipOS-specific portions are recomposed and stored as capsules in the same way. The source tree +will be reorganised around this split. + +## 16. Acceptance criteria + +Ruled by Captain Bob, 2026-10-03. Until then v4 had none: this document and `v4/README.md` named a +POST suite and K≡1.0 on three host ISAs, neither of which exists yet, so nothing could be called +accepted. + +- **v4 is equivalent to v3 at any point in time.** It must provide the same vocabularies and behave + the same way. The only difference is the machine underneath: the F18-derived engine instead of the + original StarForth VM. +- **Every ISA, hosted and bare metal, must still reach its `ok` prompt.** That is amd64, aarch64 and + riscv64, as a hosted build and as a bare-metal boot. + +The existing acceptance tests keep their force and their rules: the three-architecture QEMU boot for +anything bare metal (`.claude/CLAUDE.md`), and the hosted three-architecture test +(`docs/lithosananke/hosted-acceptance-test/README.md`). Passing `make -C v4 test` is a development +check on the golden model, not acceptance. diff --git a/docs/v4.0.0/MESH.md b/docs/v4.0.0/MESH.md new file mode 100644 index 00000000..1b7e6bfe --- /dev/null +++ b/docs/v4.0.0/MESH.md @@ -0,0 +1,834 @@ +# StarForth v4.0.0 — Talking nodes + +Design, 2026-10-06. Ruled by Captain Bob by question and answer on +2026-10-05 and -06; each ruling is recorded with his words in `ENGINE.md` +section 3d. This file is the design that follows from them. Where it goes +beyond a ruling it says so, and those parts are proposals. + +## 1. What this step is + +> The entire point is that ultimately we have F18 engines digesting +> capsules alone, and in a sense can be anything written in F18 assembler +> for our fabric — 144 someday as a 12x12 grid, but I want a 12^3 FPGA +> ultimately, where using a capsule digester like StarForth, it's more +> than an operating system. + +> The next step is talking nodes sharing the common SSD, and [they] may or +> may not have block storage available. + +More than one node, each born empty and made into something by the capsule +it takes in, talking to each other through ports, sharing a disk. It comes +before making v4 equal v3 on bare metal (`ENGINE.md` step 4), which waits. + +## 2. The rulings + +1. **The ports are the transport; the message is what is transported.** + Node to node, a write blocks until the neighbour reads and a read blocks + until the neighbour writes (`DECOMPOSITION.md` section 6). What travels + is v3's Hermes message with what it carries, so v3's messaging rules are + not dropped: they go with the message. +2. ~~Some nodes have storage of their own, in addition to or instead of + the common SSD. Some have none.~~ **Withdrawn 2026-10-07:** every node + has blocks, and asks the kernel for them (section 8). +3. **The first set of nodes is "2x2 + 1 central"**: five. +4. **The geometry is data, not design.** A node has a number of ports, and + that number is a parameter. Which port connects to what is a table that + can change while the system runs. "Not constrained by a 3D world. Other + geometries might be better." +5. **The first geometry: "Only the central node can connect to only another + central node."** Four outer nodes and their centre are a unit. An outer + node is wired only inside its unit. Units are joined centre to centre. +6. **It must scale at run time, adaptively.** +7. **Hera decides which nodes exist and are awake, not whose turn it is.** + Every node that is not blocked runs. Cooperative is a node blocking + itself at a port; preemptive is Hera putting a node to sleep or killing + it between any two instruction words. An idle node does not spin: it is + blocked reading its ports. +8. **A node is born empty.** It has nothing but the ability to listen. The + first thing a neighbour sends it is a capsule of F18 code. StarForth's + nucleus is such a capsule. +9. **Built in the shared engine, proven hosted on three ISAs first, then on + bare metal.** + +## 3. Acceptance (approved 2026-10-06) + +1. **Five nodes come up from nothing.** Hera is born empty, takes in the + nucleus capsule and the FORTH-79 capsule, and passes POST. She births + the four outer nodes while running; each is born empty and takes in the + same capsules through its port from Hera. Each prints a parity line; + the four outer nodes' dictionary hashes are identical. (Changed + 2026-10-07: an outer node is not POSTed. POST is the kernel's, once, as + in v3.) +2. **They talk.** A line typed at the console reaches Hera as a message. A + message from Hera runs on an outer node and its output comes back. A + message between two outer nodes that are not wired to each other is + forwarded by a node in between. +3. **They share the SSD.** Every node asks the kernel for its blocks. A + block written by one node is read by another. (Changed 2026-10-07: no + node has a drive of its own and none is without storage.) +4. **It scales while running.** A second unit of five is born and joined + centre to centre. A message crosses from one unit to the other. The + second unit is removed and the first carries on. +5. **Hera manages.** An idle node executes nothing while it waits, which + the anti-clock shows. Hera puts a node to sleep and wakes it. Hera kills + a node that is stuck in an endless loop, and everything else keeps + running. +6. **On every build.** The three hosted ISAs, then the three bare-metal + ISAs under QEMU with the real console and disk. + +**Left for the step after, by agreement:** + +- Hera sleeping, waking and killing nodes by herself from each node's + heat. Here she does it by command. The rule for it has not been given. +- v3's messaging rules checked at every hop. From this step a message + carries its heat, TTL and ACL tag; checking them is the router's, and + the checks await rulings. + +## 4. The engine: ports + +Everything in this section is the engine's (`v4/src`) and knows nothing of +StarForth or of any kernel. + +### 4.1 A node's ports + +A node has `V4_PORTS` ports. The number is a build parameter, as +`V4_CELL_BITS` and `V4_NODE_WORDS` are. (Proposal: 8 for now, which is what +the first geometry needs of a centre — four outer nodes, two devices, two +other centres — with nothing depending on the number.) + +Ports are addresses, as `DECOMPOSITION.md` section 6 has them. Attached at +word address `base`: + +| Address | What | +|---|---| +| `base` … `base + V4_PORTS − 1` | Port 0 … port `V4_PORTS − 1` | +| `base + V4_PORTS` | Any port: a read here takes from whichever port has a neighbour writing | +| `base + V4_PORTS + 1` | Which port the last read from "any" came from. Read only. | + +- **A write to a port blocks the node until the neighbour has read it.** + Built 2026-10-05 for one port; the opcode after the write runs when the + write has been taken. +- **A read from a port blocks the node until the neighbour writes.** The + fetch does not happen until there is something to fetch. This is new. +- **A read is any fetch**: `@`, `@b`, `@+`, the literal fetch `@p`, and the + fetch of an instruction word when `P` is a port address. When `P` is a + port, it is not advanced: the node goes on executing what arrives there. + That is how an F18 node runs code from a port, and it is what makes + ruling 8 need no code in a newborn node. +- A port with nothing on the other end blocks for ever, as on the fabric. + **Fixed 2026-10-07 ("Fix the error. no bad code is ever released"):** + that holds for a bare node. A node that can take an error is not left + there. When it is blocked writing to one port, or reading from one, that + nothing is wired to — because nothing ever was, or because what was + there has been killed or the wire cut — error 18, "No one on that + port", is raised on it: what it was doing ends with the message and it + goes on (`v4/src/node.c`, `v4_node_port_gone`; `v4/src/fabric.c`, + `v4_fabric_gone_error`; the lone node, `v4/system/boot.c`). A node whose + neighbour is asleep waits, and so does one reading "any port". + What it mended: a node writing to a node that was stuck, and was then + killed, stayed blocked for ever, so that killing a stuck node could cost + its neighbours (found while step 7 was being designed); and on the two + products a write to an empty port, `5 7 PORT!`, ended the program. + `v4/tests/test_host_unit.c`: Hera kills node 14 while node 12 is blocked + writing to it; 12's line ends "No one on that port", every other node + answers, and a later send to 14 is that error at once. + `v4/tests/test_fabric.c`: a bare node still waits. `hosted-check` and the + three boots type `5 7 PORT!` and go on: `logs/20261007-121743` (amd64), + `-122008` (aarch64), `-122337` (riscv64); POST 538 of 538, + `dict_hash=0x5f0a949a6fc8ef2b` on all six. + **Not mended, and reported:** a node that waits at "any port" for an + answer that never comes (`AWAIT`, on a node that never answers) waits + for ever, and on the lone node that ends the line as "stopped". + +### 4.2 A node at reset + +`P` is the "any port" address, both stacks are empty, memory is zero. The +node is blocked reading its ports. Nothing else is in it. + +### 4.3 The fabric + +`v4/src/fabric.c`: the nodes there are, how their ports are wired, and +time passing for all of them at once. + +- **The nodes.** A set that grows and shrinks while the system runs + (ruling 6). A node is added empty (4.2) and removed whole. +- **The wiring.** For each port of each node: nothing, or a port of + another node, or a device. It is a table, changed at run time + (ruling 4). The fabric does not know what shape it makes. +- **A device** is what is on the other end of a port that is not a node: + two functions, one that takes a word the node writes and one that gives + a word when the node reads, each able to say "not yet". The console, a + disk, and the kernel that serves a node's requests (`ENGINE.md` 3.3) are + devices. +- **A step.** Every node that is awake and not blocked executes one + instruction word. Then every write that has a reader waiting on the + other end of its wire is handed over, and both nodes are unblocked. That + is all: there is no choice of whose turn it is (ruling 7). +- **Asleep.** A node that is asleep executes nothing and nothing is handed + to it or taken from it. It is put to sleep and woken from outside, at + any instruction word. + +### 4.4 What is not in the engine + +Messages, routing, capsules, the unit of five, Hera. Those are sections 5 +to 8 and are made of capsule code and of the host that owns the devices. + +## 5. A capsule of F18 code, and how an empty node takes it in + +**As built.** A capsule of F18 code is not a format a node has to +understand. It is the words a neighbour writes to the node's port, in the +order they are written: for each stretch of memory that is not zero the +two instruction words below with their address and count and then the +words themselves, and at the end a jump to where to start. The file is +those words, each in a cell's bytes, low byte first, and its hash is the +hash of exactly what is sent. The nucleus is one, in the capsule directory +with a name, a hash and a signature like any other. `mkcapsule` was not +changed: the nucleus capsule is a built file kept under `capsules/v4/`. + +A neighbour puts it into an empty node by writing to the port between +them, and the node executes what arrives (4.1). For each run it sends + +``` +@p a! @p push \ then the address, then count − 1: executed from the port +@p !+ unext \ then the words: each is fetched from the port and stored +``` + +and at the end `jump` to the start address. That is the F18's own way, +and it needs nothing in the node beforehand. + +## 6. A message + +**Proposal**, from `DECOMPOSITION.md` section 6.1 and v3's `SkHermesMessage` +(`kernel/include/starkernel/vm/kernel_hermes.h`), which it must be able to +carry whole: + +| Word | Contents | +|---|---| +| 0 | To: the node it is for | +| 1 | From: the node that sent it | +| 2 | Type, and the channel | +| 3 | Heat and TTL | +| 4 | ACL tag: the sender's identity fingerprint | +| 5 | Sequence | +| 6 | Payload length in characters, 0 to 1024 | +| 7 … | Payload: FORTH text, four characters to a word | + +It is written to a port a word at a time and read a word at a time. Words +3 and 4 are carried from this step on and are not yet checked +(section 3). + +A node that is a StarForth digester, when it has nothing to do, reads a +message from "any port". If it is for this node, the payload is +interpreted, as a line is today (`ENGINE.md` 3.1). If it is for another, +it is written to the port that leads there (section 7). + +What a node prints goes to its console, and its console is a place like +any other: for the node wired to the console device, that port; for any +other node, a message to the node that is. So what an outer node prints +comes back through its centre. + +## 7. Finding the way + +**Proposal.** Each node has a small table: for a destination, the port +that leads toward it; and one port for everything not in the table. +Whoever wires a node writes its table, and changes it when the wiring +changes. Under the first geometry an outer node's table is its two grid +neighbours and "everything else to my centre"; a centre's is its four +outer nodes, and for each other unit the port toward that unit's centre. + +A different geometry is a different way of filling in the wiring table +and these tables. Nothing else changes. + +## 7a. Two neighbours writing to each other (ruled 2026-10-06) + +The fault is in section 10, step 4. **Ruled: a node writes only to a +neighbour that is already reading; a node keeps the messages it takes in +meanwhile, and one there is no room for is lost and counted.** + +**As built.** + +- *The engine.* Two more addresses follow a node's ports, as the F18's + `io` register would give them: which ports have a neighbour waiting to + write to this node, and which have one waiting to read from it, a bit to + a port. Fetching them waits for nothing and changes nothing + (`v4/src/node.c`; the fabric keeps them, `v4/src/fabric.c`). A device + that takes what is written to it shows as waiting to read. +- *Looking before writing* (`(GATE)`, `v4/capsule/core.v4`). Before a node + begins any message it takes in every message a neighbour is waiting to + write to it; then it writes if the neighbour it means to write to is + waiting to read; and if not, it looks again. Once a message is begun it + is written to its end: the neighbour that took its first word reads the + rest. +- *The messages waiting* (`(MQ)`). What a node takes in is kept in a ring + of 400 cells of its own memory -- for each message its seven words, the + port it came on, and its text -- and dealt with, oldest first, when the + node has nothing else to do. A node with none waiting is blocked reading + its ports, as before. One there is no room for is read to its end, let + go, and counted in `(LOST)`. + +**What had to be added to the ruling, and why.** As put to Captain Bob the +rule was "write only to a neighbour that is reading, and look again if it +is not". That is not enough: two neighbours each with a message for the +other would each look, see the other not reading, and look again, for +ever. No rule that treats both ends of a wire alike can get out of that. +So one end of every wire may write without waiting for a reader, and one +only: **the node with the lower number.** A node that waits to write is +then always waiting on a higher number, so no ring of nodes can all be +waiting on each other, and the highest of any that wait is not waiting to +write: it is looking, and takes in what is being written to it. + +For this a node must know the number of the node on each of its ports. +Whoever wires it tells it, as it is told the ways: `NEIGHBOUR ( node port +-- )`, `v4/capsule/quit.v4`. A port it has not been told of -- a device's +-- is written to only when what is there is waiting to read. **Two nodes +wired together and not told of each other can still stop each other**, +each looking for ever; they execute, but nothing passes. Telling them is +part of wiring them. Put to Captain Bob after it was built, and ruled: +"1 is fine." + +**What it costs.** A node that is flooded loses messages, of every kind: +text for it, answers to text it sent, and messages it was only passing +on. In the test three nodes send each other 800 messages at once; 287 +arrive and 714 messages are let go (the count includes answers and text +that was to start a node sending). Six from each to each, at once, all +arrive. Nothing here makes a sender slow down or send again; that is +kernel-Hermes's work in v3 and is not decided for the mesh. + +## 8. Storage + +**Ruled 2026-10-06 and 2026-10-07** (Captain Bob). On 2026-10-07 he found +this section to have left the OS as designed, and brought it back: every +node asks the kernel directly, as every v3 VM does. What that withdrew is +in 8.6, so that it is not proposed again. + +### 8.1 The rulings that stand + +1. **A node only ever asks for a block by number, and it asks the kernel.** + `V3-PARITY.md` 1d and `ENGINE.md` 3.3: a kernel request, written to the + port where the node's kernel is, served between the node's opcodes. No + node asks another node for a block, and none passes such a request on. +2. **Every node has blocks, always.** There is no node without storage. +3. **Two numbers.** A logical block number is what `BLOCK n` and capsules + use. A physical block number is a place on a real device. The kernel's + mapper stands between them. +4. **The view is static; reality shifts to keep it so.** A logical number + always means the same block. Devices chain one after another in physical + space, and that chain changes as devices come and go; the mapper moves + data and changes its map so that the logical view does not change. All + the user sees change is how much storage there is. +5. **One metadata format for every block device** — a cloud store, a swap + file, an SSD, a USB drive, a thumbdrive, and any other within reason. + It is v3's (`v3/include/block_subsystem.h`): the `STFR` version 2 header, + the allocation map, the relocation table, and a card for every block + (`blk_meta_t`). A disk v3 formatted reads in v4. +6. ~~Plus an identity: a device's and its chain's, in the header's spare + space.~~ **Withdrawn 2026-10-07**, 8.7. +7. **The mapper is the kernel's**: the device chain, the metadata, + first-touch claim, ACL, migration and the Stadium touch stay in the + kernel's block subsystem, which is v3's C code. +8. ~~A device leaves by being asked for, its blocks moved onto the + others; one pulled without asking leaves holes; a returning device has + its old numbers.~~ **Withdrawn 2026-10-07**, 8.7. + +### 8.2 What a node does *(step 6)* + +**Ruled 2026-10-07: v3's way in full.** The block words are the kernel's. +`BLOCK`, `BUFFER`, `UPDATE`, `SAVE-BUFFERS` and `EMPTY-BUFFERS` in +`v4/capsule/blocks.v4` each write one request to port 0, where the node's +kernel is, and do nothing else: `BLOCK` and `BUFFER` with the block's +number on the stack, the others with nothing. The node gives the kernel no +address and keeps no record of what is in its buffers. + +The node has a **window** in its memory, four slots of 256 cells, as a v3 +VM has four slots of 1 KiB at the top of its memory. The kernel copies a +block into a slot and gives the node the slot's address. + +The five requests' numbers are the same for every node and are below zero, +-1 to -5; the requests a host names for its own words (`KERNEL-WORD`) +count up from 1. The status a request leaves: 0 it worked, 2 it was +refused (error 17, "Storage refused"), 3 there is no such block (error 13). + +The four storage registers and `v4_node_storage_attach` go from the engine. + +### 8.3 What the kernel does *(step 6)* + +Every node has its kernel on port 0, whatever else is there for it: Hera's +requests for nodes (section 9) are honoured only from Hera, and the block +requests from every node. + +`v4/system/blocks.c`, which the hosted and the bare-metal builds and the +tests share, serves them, from v3's block subsystem +(`v3/src/block_subsystem.c`). For each node it keeps what v3 keeps for each +VM (`v3/src/word_source/block_words.c`): which block is in which slot of +the window, which have been UPDATEd, and the chain as it was when they +were filled. The engine (`v4/src`) knows nothing of it. + +- It writes into the node's window and nowhere else in the node. That is + how a request cannot overwrite the node's code (ruled 2026-10-07: the + kernel refuses it): there is no address for a node to give. +- `BLOCK` gives the slot a block is in, and reads it from storage only if + it is in none. `BUFFER` gives a slot of zeros without reading. +- **When a block is written is FORTH-79's:** `UPDATE` marks it, and it is + written by `SAVE-BUFFERS` or when its slot is wanted. v3's `UPDATE` + copies the slot to the kernel at once; the standard is followed + (standing ruling). A slot whose block is not marked is taken before one + whose block is. +- A block storage will not take is let go of, and its slot is empty. +- When the chain of devices changes, everything in the slots is let go and + none of it is written, as v3 does. +- Four characters to a cell, the first lowest; a read leaves the rest of + each cell zero and a write takes the low 32 bits. +- **Each node has its own copy of a block it holds, as each v3 VM has.** + If node A has block *n* in a slot and node B writes it, A goes on reading + what it had, and A's next `UPDATE` and `SAVE-BUFFERS` writes all of the + block over B's. v3 is the same. Closing that would be a departure from + v3 and is not ruled. +- v3's code does what it does: header, allocation map, block cards, + relocation, three blocks and their cards to a 4 KiB device block. +- There is one chain, as in v3: fast RAM at blocks 0 to 2047, then the + devices. Every node sees the same blocks at the same numbers. +- The devices are v3's own back ends: RAM and a file when hosted, the + virtio disk on bare metal. A hosted program started with no disk has the + fast RAM alone, as hosted v3 has. + +`blk_subsys_init` took a v3 `VM`, stored it and never used it; the hosted +v4 system has none to give. **Ruled 2026-10-06:** the argument is removed. + +**On bare metal** the node's blocks are the kernel's real chain — RAM, the +ramdrive and the virtio disk — in place of the RAM array +`kernel/src/v4/sk_v4.c` gives it today. (Approved.) Found 2026-10-06: +`kernel_main.c` starts the v4 node (line 523) before it sets that chain up +(lines 620 to 668), and the v4 node never returned, so under `STARFORTH_V4` +the chain did not exist. As built: the node boots and is POSTed against +POST's own block RAM, blocks 1 to 2047 and nothing above them, and the +chain is set up after POST and before the prompt. That is v3's order +(`sk_vm_bootstrap.c` gives POST `sk_post_blk_ram`; `kernel_main.c` sets the +chain up later), and POST's cases depend on it: several expect a high +block number not to exist, and on the real chain it does. + +### 8.4 Not in step 6 + +- **Who may have which block is not checked.** First-touch claim, the block + card's ACL and the Stadium touch need the node's identity + (`V3-PARITY.md` 1d). Blocks are read and written through v3's subsystem + with nobody's claim on them. Not as intended yet. +- **Drives that come and go.** Step 6a, which was to build them, is + withdrawn (8.7). They are built as v3 has them, when v4 has identity + and the fleet (`ENGINE.md` steps 7 and 8). +- **Cloud stores and real USB drives** wait for their drivers. + +### 8.5 Ruled 2026-10-07, after the review of step 6 + +The review found that a block request could be made by hand with an +address in the node's own code, and said that a node's own copy of a +block was a departure from v3. The second was wrong: a v3 VM has a window +of four slots in its own memory and `BLOCK` copies the kernel's block into +one (`v3/include/vm.h`, `BLK_VM_SLOTS`; `block_words.c`, `blk_vm_load`). +It was reported to Captain Bob as a departure before it was checked +against v3, and he ruled on it as one; it was then checked and taken back. + +His rulings, on what v3 does: **the kernel refuses a request that would +overwrite the node's code**, and **v3's way in full** — the block words +are the kernel's, by number only, with the kernel keeping the record of +the window and doing the copying. Both are built: 8.2 and 8.3. + +### 8.7 Step 6a withdrawn 2026-10-07: drives that come and go + +Rulings 6 and 8 of 8.1 were given on 2026-10-06 in answer to questions put +without first saying how v3 does it. On 2026-10-07, shown v3's design, +Captain Bob withdrew step 6a as written. None of the four things it was to +build is v3's: + +| Ruled 2026-10-06 | v3 | +|---|---| +| A device identity and a chain identity in the block header | Identity is the signature and the keypair on the drive; the header has none | +| A returning device has its old block numbers | It joins at the tail again; its numbers depend on what else is attached | +| Release by asking: the mapper moves the device's blocks onto the others | `EJECT` flushes to the drive itself and kills the user's VM; nothing is moved off it | +| A surprise pull leaves holes that answer "no storage" | Only the tail can go; the user's VM is killed; there are no holes | + +**v3, as built** (`kernel/src/repl.c`, `v3/src/block_subsystem.c`, +`v3/src/word_source/block_words.c`; `FABRIC-2.md` Phase 8, D.3 and F.10): + +- A removable drive is a person's. It carries an identity, the home-blocks + signature and a keypair Zuse mints onto it. Plugged in, its signature is + checked and the user's VM is born from the drive (`WIREBIND`); the + user's blocks are on their own drive. +- The kernel polls USB; Hera asks Artemis to register the drive + (`HERA-BLK-ATTACH-REQ`), and Artemis adds it to the chain. +- A drive joins at the tail, and only the tail can leave + (`blk_subsys_detach_device`): taking one out of the middle would + renumber every device after it. +- Leaving by asking is `EJECT`, a word of Hera's alone: the user's blocks + are flushed to their drive and the user's VM is killed. +- A surprise pull kills the user's VM with no flush, and the kernel drops + the device and whatever was not written. +- Coming back, the drive is known by its signature and the user's VM is + born again; the data is there because it never left the drive. +- Every VM's block window is emptied when the chain changes. (v4 has this + already: `v4/system/blocks.c`.) + +v4 has none of what that rests on yet: Zuse and identities, `WIREBIND`, +user VMs born from a drive, Artemis, USB in the v4 boot. They are +`ENGINE.md` steps 7 and 8, and drives that come and go are built there, +as v3 has them. + +### 8.6 Withdrawn 2026-10-07 + +Each of these was ruled on 2026-10-06 or stood in this document, and each +left v3's design. Captain Bob: "something is really off. it sounds like a +divergence from the os as designed"; and of the three below, "all three, +every node asks the kernel directly". + +- **A disk as a device on a port that speaks messages**, and a block + request passed from node to node until it reaches the node wired to the + disk. Built and tested as far as one node (commit `4a505a15`), then + withdrawn. In v3 a VM calls the kernel. +- **Nodes with no storage** (ruling 2 of section 2, and acceptance 3 as it + was). In v3 every VM has blocks. +- **A drive of a node's own**, numbered from the top of the number space + downward. In v3 there is one chain. +- **POST on every node at its birth** (acceptance 1 as it was). In v3 the + kernel runs POST once, at boot, with block RAM it supplies, and a born VM + prints its parity. See section 9. + +## 9. Birth, and Hera + +**Proposal, built as step 5 (section 10).** Hera asks, through the port +where her requests go (`ENGINE.md` 3.3), for a node to be added and wired; +she then sends the newborn its capsules through the port that joins them. +Putting a node to sleep, waking it, and removing it are requests of the +same kind. Only Hera's requests are honoured. + +The unit rule (ruling 5) is Hera's, in capsule code: it is what she does +with those requests. The engine and the host do not know it. + +**Ruled 2026-10-07:** a node Hera births is not POSTed. POST is the +kernel's, run once at boot on Hera, as v3's kernel runs it once on its +first VM; a born node prints its parity. And the kernel is to hold POST's +cases and feed them to Hera itself, with no POST words loaded into her +dictionary — today they are a capsule she loads (`NUCLEUS.md` section 6). + +## 10. Steps + +Each is tested, committed and pushed before the next. + +1. **Ports and the fabric (section 4).** Reads; "any port"; a node at + reset; execution from a port; nodes added and removed; wiring changed; + asleep and awake. Tests at the level of opcodes: two nodes exchange + words; an empty node is filled through its port and runs what it was + sent; a word is passed on by a node in between; a node waiting executes + nothing; a node is put to sleep, woken, and removed while looping. + **Done 2026-10-06.** `v4/src/node.c` (the ports, `v4_node_born`), + `v4/src/exec.c` (a fetch from a port waits; execution from a port; the + slot a blocked node goes on from), `v4/src/fabric.c`. `V4_PORTS` is 8. + `v4/tests/test_fabric.c`, 53 checks at both cell widths and under ASan + and UBSan: all of the above, with the empty node filled once by a device + and once by another node holding the capsule in its own memory; the + fabric given more room while nodes run; what cannot be wired refused. + The single-node products are unchanged by it: `hosted-check` on three + ISAs, and the three bare-metal boots with lines typed at each prompt + (`logs/20261006-074907`, `-075150`, `-075532`). +2. **The nucleus as a capsule, and an empty node made a StarForth node + through its port (section 5).** + **Done 2026-10-06.** `v4/src/capsule.c`, `v4_capsule_write`: any + node's memory as the words to send an empty node. `mkimage` writes the + nucleus so, to `capsules/v4/nucleus-64.f18`, a built file kept in the + tree as `BLOCK_MAP.md` is; `mkcapsule` is unchanged and bakes, hashes + and signs it with the rest. The boot's node is born empty + (`v4_image_born`) and is given the nucleus a word at a time as it reads + its port, after the capsule's hash and signature are checked + (`v4/system/boot.c`). Nothing of the nucleus is linked into either + product any more. `test_fabric.c`: a memory with a programme and words + here and there arrives word for word and runs. Both products boot so: + `hosted-check` on three ISAs; `logs/20261006-102421`, `-102706`, + `-103048`. + **What a newborn node still has from its host:** the registers the + nucleus expects — the console's three, the two stack registers, the + error register, the fault table's address, the storage registers — are + attached by the host when the node is born, from the description + `mkimage` writes. They are the node's hardware as the golden model has + it, at addresses the memory map (D-4, still open) will fix. The console + and storage ones go when those become devices on ports (steps 3 and + 6). +3. **Messages (section 6):** a StarForth node that reads messages when + idle; the console as a device; a line typed is a message. + **Done 2026-10-06, but for the keyboard.** A node with nothing to do is + blocked reading "any port" (`(IDLE)`, `v4/capsule/quit.v4`). What + arrives is a message; text for this node is interpreted; what it prints + is kept and sent back as messages to the sender, on the port the + message came on, and then a message saying how the text ended (`EMIT`, + `(FLUSH-OUT)`, `(HDR)` in `core.v4`; `(FINISH)` in `quit.v4`). + `v4/src/message.c` is the same format for whatever is on the other end + of a port and is not a node. The boot is that, on the node's port 1, as + the console (`v4_boot_line`); the prompt tests are too. Handing a node a + line by writing its input buffer and setting its `P` is gone + (`v4_line_begin` and the rest). Nothing reads the `CONSOLE-TX` register + any more. + `EMIT` still needs one free cell of the data stack and no more, as + before; it keeps its working values on the return stack. The full-stack + tests hold at the same figures as before. + All v4 tests pass at both widths and under ASan and UBSan; + `hosted-check` on three ISAs; bare metal `logs/20261006-110551` (amd64), + `-111621` (aarch64), `-111341` (riscv64). `-110837` is an aarch64 run + that was ended by the test wrapper's limit while still in UEFI firmware, + before the kernel had started; it shows nothing about v4. + **Not done:** `KEY`, `EXPECT` and `QUERY` still read the console's two + input registers, not a message. A message not for this node, or not + text, is let go: passing it on is step 4. +4. **Finding the way (section 7).** + **Built 2026-10-06.** Each node has a table of up to 16 destinations and the port + toward each, and one port for everything else (`ROUTE ( node port -- )`, + `DEFAULT-ROUTE ( port -- )`, `NO-ROUTES`; `(PORT-FOR)` in + `v4/capsule/core.v4`). A message not for this node is written, whole, + to the port its destination's entry names (`(PASS-ON)`, + `v4/capsule/quit.v4`); with no entry and no port for everything else it + is dropped and counted (`(LOST)`). What text prints, and how it ended, + go back to the node the text came from by the same table, so an answer + crosses as many nodes as the text did. `SEND ( baddr u node -- )` sends + text to another node; `(ME)` is a node's own number; `(CONSOLE)`, when + set, is where a node's printing goes instead of to the sender. + `v4/tests/test_host_mesh.c`, 28 checks at both widths and under ASan + and UBSan: three StarForth nodes in a row behind a console; text for + the far one passes through the other two and its answer comes back; + each node keeps its own dictionary; output longer than one message; a + 1024-character message passed on whole; a message with nowhere to go + counted; a table changed while running. The single-node products are + unchanged: `hosted-check` on three ISAs; bare metal + `logs/20261006-115225` (amd64), `-115501` (aarch64), `-115849` + (riscv64). + **The fault found here, and put right 2026-10-06 (section 7a).** Two + neighbours that wrote to each other at once waited for ever: a write + blocks until the neighbour reads, and a node that is blocked writing is + not reading. Found when the far node `SEND`s text to the middle one and + then sends word of how its own text ended, which goes by the middle + one, while the middle one answers the far one. Ruled: a node writes only + to a neighbour that is reading, keeps what it takes in meanwhile, and + loses and counts what it has no room for. Built so, with one thing + added that the ruling needs (section 7a): of two neighbours the lower + number may wait to write, and `NEIGHBOUR` tells a node who is on each + port. `test_host_mesh.c`, 44 checks: the case that stopped the nodes + now passes; every node sending every other six messages at once, all + arrive; 800 at once, the nodes come to rest and every message either + arrived or was counted. `test_fabric.c`: a node sees who is waiting to + write to it and who to read from it, and looking disturbs neither. + The prompt and `EMIT` take no more of the data stack than they did. + All v4 tests at both widths and under ASan and UBSan; `hosted-check` on + three ISAs; bare metal, with lines typed at each prompt, + `logs/20261006-134817` (amd64), `-135044` (aarch64), `-135440` + (riscv64). + **Found on the way: POST was writing into the nucleus's own code.** On + v4 `HERE` is a cell address and `C!`, `FILL` and `CMOVE` take byte + addresses (D-1), so cases such as `65 HERE C!` wrote their bytes into + the nucleus at cell `HERE/4`, read them back from there, and passed. + `65 HERE C!` was watched changing cell 2223 during POST; the other + cases of the same form were not watched, and the boots committed + before this were not gone back to. It showed only when this step moved + other code onto that cell and POST stopped. Ruled: the twelve cases + are left out, marked OPEN (`v4/tools/post79_rules.py`, + `docs/v4.0.0/POST79.md` section 4), and how `HERE` and the byte words + are to agree is its own step. POST is 538 cases, not 550. `C!` and + `FILL` now have fewer cases; nothing stops any other text doing what + those cases did. +5. **Birth and Hera's requests (section 9); the unit of five.** + **Done 2026-10-06, in the fabric under test; the products are still one + node each until steps 8 and 9.** Section 9's proposal, as built: + - *What Hera asks* (`v4/include/v4/manage.h`, `v4/src/manage.c`). Eleven + requests, each a word on her made with `KERNEL-WORD`, written to the + port her requests go to: `NODE-ME`, `NODE-BORN`, `NODE-WIRE`, + `NODE-UNWIRE`, `NODE-SLEEP`, `NODE-WAKE`, `NODE-KILL`, `NODE-PARITY`; + and `CAPSULE-OPEN`, `CAPSULE-CELL`, `CAPSULE-LINE`, by which she reads + a capsule the host has found and checked. A node is named to the host + by its place in the fabric; its number, which messages go by, is the + nodes' own. Only the node the host has wired to this is answered. + - *What a node needs to do it* (`v4/capsule/quit.v4`): `PORT! ( w port + -- )`, a cell written to a port as it is; `SEND-ON ( baddr u node port + -- )`, text by a port named, for a neighbour with no number yet; + `AWAIT ( node -- how )`, blocked until that node's word of how text + ended comes, keeping every other message for later; `(SEAL)`, what is + in the dictionary now is the system. + - *Hera's capsule* (`capsules/v4/hera.4th`, blocks 8000 to 8004), FORTH. + `BIRTH ( number port -- place )`: a node is asked for and wired to + that port; the nucleus is sent it cell by cell; it is told its number, + its console and that Hera is on its port 2; FORTH-79 and POST are sent + it a line at a time, each waited for; it seals; its parity is + recorded. `UNIT ( n -- )`: four births, on ports 2 to 5, and the four + joined in a square, each told of the two beside it. The unit rule is + there and nowhere else. + `v4/tests/test_host_unit.c`, 34 checks, 64-bit: Hera is born empty and + takes the nucleus through her port, then FORTH-79, POST (538 of 538) and + her capsule from the console; `10 UNIT`; four nodes are born, each + passes POST, the host records four parities with one dictionary hash; + all five wait and execute nothing; text for each outer node is done + there and what it prints comes back; `COLD` on one comes back to the + nucleus and FORTH-79; one outer node sends text to the one beside it, + and to the one across from it by way of Hera. Acceptance 1 and 2, in + the fabric. All v4 tests at both widths and under ASan and UBSan. The + single-node products are unchanged but for the nucleus's new words: + `hosted-check` on three ISAs; bare metal `logs/20261006-143934` + (amd64), `-144204` (aarch64), `-144601` (riscv64). + **What stands in, in the test only:** the capsules are read from the + files the build bakes in, and the nucleus capsule is written from the + nucleus as the test assembles it, not found in the baked directory with + its hash and signature checked; that is the host's part and comes with + step 8. Each node has a disk of its own attached at birth, as the boot's + one node has; storage through the ports is step 6. + **Not done, and open:** + - The test is not run on 32-bit cells: the POST capsule's expected + results are 64-bit v3's and the nucleus capsule is `nucleus-64`. POST + has never been run at 32 bits. + - A node that never answers leaves Hera waiting for ever in `AWAIT`; + she cannot then kill it. What she does about a birth that does not + finish is not decided. + - What an outer node prints while Hera is giving birth waits in Hera's + 400 cells until she is idle, and is lost if there is more than they + hold. POST prints one line. + - An outer node has no port to the kernel, so no kernel words: no + `BYE`, and nothing it asks is honoured, as ruled. + - The suite now takes about four minutes, eight under the sanitizers: + five POSTs. + - **Changed at step 6 (2026-10-07):** `BIRTH` no longer sends POST, and + a born node is not POSTed. What is said of POST on the outer nodes + above is step 5 as it was built. +6. **Storage (section 8): every node asks the kernel for its blocks.** + **Done 2026-10-07.** It was first built another way and brought back; + 8.6 says what was withdrawn and why. + - *The requests* (`v4/include/v4/blocks.h`, `v4/system/blocks.c`). Five, + -1 to -5: `BLOCK`, `BUFFER`, `UPDATE`, `SAVE-BUFFERS`, + `EMPTY-BUFFERS`, for any node, by block number only. The kernel keeps + the node's window of four slots. `v4/tests/test_host_blocks.c`: 41 + checks at 64 bits, 39 at 32 — a block copied into a slot and found + there again, `UPDATE` and when a block is written, `EMPTY-BUFFERS`, + `BUFFER`, more blocks than slots, numbers that are no block, too + little on the stack, a window not in the node's memory, and the chain + changing under what the slots hold. + - *The node* (`v4/capsule/blocks.v4`). Each block word is one request + on port 0; the node's own buffers and its record of them are gone, and + so are the four storage registers and `v4_node_storage_attach`. Error + 17 is "Storage refused". The window takes 512 cells more than the two + buffers did, and the dictionary space ends 512 cells lower, at 13824. + `v4/tests/test_host_quit.c`: its block cases, those that counted on + two buffers rewritten for four slots, and a disk that will not be + written says so and is let go of. + - *v3* (`v3/src/block_subsystem.c`). `blk_subsys_init` takes no `VM`. + Nothing else of it is changed. Accepted on the v3 configuration, three + ISAs, `PARITY:M7.1a` hash `0x08873e0f44b7cb2a` as on 2026-10-03: + `logs/20261007-082647`, `-082752`, `-082938`. + - *The unit of five* (`v4/tests/test_host_unit.c`, 47 checks). Every + node has its kernel on port 0: it serves a node's blocks, and Hera's + requests for nodes from Hera alone. One node writes a block and the + other four read it; two nodes write ten blocks each at once and all + twenty reach the chain. Hera's `BIRTH` no longer sends POST + (`capsules/v4/hera.4th`): one POST tally is seen, Hera's. + - *The products.* Hosted: the chain's fast RAM, blocks 1 to 2047, as + hosted v3 has with no disk; `hosted-check` passes on three ISAs. + Bare metal: POST against its own block RAM, then the chain — fast + RAM, the ramdrive at 2048 to 3071, the virtio disk from 3072. Three + boots, POST 538 of 538, and typed at the prompt: block 2100 written + and read back, block 3072 read from the disk, a write to it refused, + a block that is not there. `logs/20261007-081603` (amd64), `-081839` + (aarch64), `-082226` (riscv64); and again after the review's changes + below, with blocks 1 and 2047 read clean at the prompt: + `logs/20261007-085017`, `-085254`, `-085636`; and as it stands, with the + block words the kernel's: `logs/20261007-092835`, `-093112`, + `-093456`. The parity hashes are the same on the + three hosted and the three bare-metal systems. + - *Review, 2026-10-07.* One reading of the whole step by a fresh + reviewer; no critical defect. Changed after it: a block request with + fewer than two values on the stack is refused (it had stopped the + node); on bare metal the node's two buffers are emptied when the + chain takes the place of POST's block RAM (it had gone on holding + POST's block 1), and the chain's fast RAM is cleared in the v4 path; + `blocks.c` is built under each test's own warnings and sanitizers; + the hosted link no longer takes whatever objects lie in its + directory (it had linked the withdrawn `store_v3.o`). Two findings + went to Captain Bob, and his rulings on them are section 8.5; they + made the block words the kernel's, which replaced the request first + built here, `( n waddr -- status )`. + - **Not as intended yet.** + - Who may have which block is not checked (8.4). + - On bare metal the virtio disk is read and not written. v3's + subsystem will not write a disk until its owner says it may be + formatted, and that owner is Artemis; so are the genesis signature + and Zuse's root key, which the v3 path does at the same place. v4 + has neither Artemis nor Zuse yet. + - POST is still a capsule Hera loads; step 6b. + - The suite's unit test is still not run at 32 bits. + - **Seen and not changed.** On the v3 path the chain's fast RAM comes + from `kmalloc` and is not cleared (`kernel_main.c`, where the chain is + set up); only the ramdrive is. The v4 path clears its own. + + **6a. Storage that changes while running.** **Withdrawn 2026-10-07** + (section 8.7): what it was to build is not how v3 does it. Drives that + come and go are built as v3 has them, with identity and the fleet + (`ENGINE.md` steps 7 and 8). + + **6b. POST is the kernel's.** Ruled 2026-10-07 (section 9); design + approved 2026-10-07, `NUCLEUS.md` 6.3 and section 7. + **Done 2026-10-07.** + - *The cases* (`v4/system/post_cases.c`, written by `v4/tools/mkpost.py`): + the same 538, checked against the capsule case by case. One expected + result changed: `>IN.initial` prints 6 where it printed 9, because a + case's line no longer begins with the capsule's `T| `; the generator + now runs v3 on the lines as the kernel sends them. + - *The runner* (`v4/system/post.c`), tested in + `v4/tests/test_host_quit.c` with cases that must pass and cases that + must fail. + - *The boot* (`v4/system/boot.c`) runs it after the capsules, prints + `PARITY:V4_SYSTEM`, and seals. `capsules/v4/post79.4th`, `(CATCH)` and + `(EMIT-HOOK)` are gone. + - *First built* with what the cases define left in the dictionary + (`4bdb210a`; `logs/20261007-105118`, `-105335`, `-105651`). + - *Review, 2026-10-07*, by a fresh reviewer. It found that v3 does not + leave them (above, and `NUCLEUS.md` 6.3), and that a case the node did + not come back from would have stalled the boot for hours where the + capsule had ended it. Changed: the boot seals, runs POST, and has the + node do `COLD`; the runner ends POST at such a case and names it; + `hosted-check` boots a program whose POST has failing cases + (`v4/tests/post_cases_fail.c`) and requires `PARITY:FAIL`, `POST: + FAILED`, no prompt, and none of a case's printing on the console. + - *Verified.* `make -C v4 test`, `sanitize` and `hosted-check`; three + bare-metal boots, `logs/20261007-112638` (amd64), `-112901` + (aarch64), `-113220` (riscv64). On all six: POST 538 of 538, + `word_count=314`, `dict_hash=0x220ab283a504a3b3`. At the prompt `T{` + and `RS1` are unknown words, and `HERE` is 8300. + + Acceptance, as approved: + 1. *Same verdict.* The three hosted programs and the three bare-metal + boots print `PARITY:V4_POST tests=538 pass=538 fail=0`, + `PARITY:V4_SYSTEM word_count=N dict_hash=0x...`, `PARITY:OK` and + `POST: PASSED`, with the same hashes on all six. + 2. *Nothing of the harness is on the node.* At the prompt `T{` is an + unknown word, and `(CATCH)` and `(EMIT-HOOK)` are gone from the + nucleus. + 3. ~~What the cases define is there.~~ **Reversed 2026-10-07:** *POST + leaves nothing.* A word a case defines is unknown at the prompt + after boot. (The first form rested on a false statement about v3; + `NUCLEUS.md` 6.3.) + 4. *The judge can fail.* Given a case with a wrong expected stack, one + with wrong expected output, one that must end in an error and does + not, and one that ends in an error and must not, the runner reports + each as a failure by name, and a boot with a failing case ends + `PARITY:FAIL`, `POST: FAILED`. + 5. *A case's printing does not reach the console.* The boot log shows + nothing that a passing case printed. + 6. *The suite.* `make -C v4 test` and `sanitize` pass at both widths; + `mkcapsule --lint capsules/` is clean. + +7. **A second unit; scaling while running; sleep, wake and kill by + command.** +8. **The hosted product is the five nodes**, on three ISAs: acceptance 1 + to 5. +9. **The same on bare metal:** acceptance 6. + +## 11. What becomes of what is there + +- `v4/system/boot.c` and `v4/tools/hosted.c` hand one node a line and run + it to the end. They stay until step 8, where the hosted product becomes + the five nodes. +- `(LINE)` and `(IDLE)` (`v4/capsule/quit.v4`): `(LINE)` stays, as what + interprets a message's payload. `(IDLE)` becomes the read of a message + at step 3. +- The one port of 2026-10-05, where a node's requests go, is port 0 of the + ports of 4.1. +- The nucleus linked into the binary goes at step 2. +- `DECOMPOSITION.md` section 6 says four ports; it is corrected at step 1. diff --git a/docs/v4.0.0/NUCLEUS.md b/docs/v4.0.0/NUCLEUS.md new file mode 100644 index 00000000..f156a694 --- /dev/null +++ b/docs/v4.0.0/NUCLEUS.md @@ -0,0 +1,362 @@ +# StarForth v4.0.0 — Nucleus, FORTH-79 Capsule and POST + +Design, 2026-10-05. Ruled by Captain Bob in conversation the same day; this +file records those rulings. It sits beside `JUSTIFICATION.md` (why v4) and +`DECOMPOSITION.md` (every v3 word's fate), and changes how the vocabulary +`DECOMPOSITION.md` describes is delivered, not what the words do. + +## 1. Goal + +v4 comes up on amd64, aarch64 and riscv64, both as the bare-metal kernel +under QEMU and as the hosted Linux binary, in this order: + +1. start the assembled nucleus; +2. load FORTH-79 from a capsule; +3. run POST on FORTH-79; +4. reach the `ok>` prompt. + +That is all this work delivers. Both the kernel and the hosted binary are +products. + +## 2. What is wrong today + +- All 292 named words are written in F18 assembler text (`v4/capsule/*.v4`). + Only the editor and `SEE` are FORTH source. +- `v4/tools/mkimage.c` assembles and compiles everything on the build + machine. The kernel links the finished memory image. Nothing is loaded + from a capsule at boot. +- There is no v4 POST. +- No QEMU log of a v4 boot exists, so bare-metal v4 has never been accepted. + +## 3. Scope + +In scope: the FORTH-79 Required Word Set, as colon definitions in a capsule, +and a POST for it. + +Out of scope until this is accepted: the Double Number extension set, Q48 +arithmetic, logging, access control, the editor, `SEE`, `DEFER`, and every +other StarForth extension. Their `.v4` and `.fth` sources stay in the tree +but are not built into the nucleus image or loaded at boot. + +## 4. The nucleus + +The nucleus is the part of the vocabulary that stays in assembler. A word is +in the nucleus only if one of these holds. + +1. **It is an opcode or a register access.** v4 compiles colon definitions + to native instruction words, so FORTH source cannot write an opcode. + `DUP DROP OVER + AND XOR 2* 2/ @ ! >R R> R@`, the stack-depth registers, + and the console registers behind `KEY` and `EMIT`. +2. **The node needs it to read a capsule.** `WORD FIND NUMBER INTERPRET + QUIT`, the error trap, `HERE ALLOT ,`, `CREATE`, `:`, `;`, `IMMEDIATE`, + `LITERAL`, `[`, `]`, `(` and the code generator. +3. **It lays down code for a colon definition in the capsule.** The control + words become colon definitions, and they need the code generator's + words by name: `(OP,)`, `(LIT,)`, `(LABEL)`, `(BRANCH>)`, `(RESOLVE)`, + `(JUMP,)`, `(CALL,)`, and the control-flow stack words `>CF`, `CF>` and + `(PAIR)`. These get headers. They are not FORTH-79 words. + +Everything else in the Required Word Set is a colon definition in the +capsule. That includes words that are assembler today only for speed: +`SWAP ROT - * /MOD 0= < C@ C! CMOVE FILL . <# # #> TYPE COUNT VARIABLE +CONSTANT`, the control words, the vocabulary words and the block words. + +The capsule's definitions will run slower than the assembled ones they +replace. That is accepted: the goal is the minimum in assembler. + +The list in rule 2 is the starting boundary, not the final one. A word +leaves the nucleus whenever a colon definition of it passes POST (section +8, step 3). The nucleus is at its minimum when no remaining word can be +moved. + +## 5. Capsules + +### 5.1 Files + +| File | Capsule name | Contents | +|---|---|---| +| `capsules/v4/forth79.4th` | `v4:forth79.4th` | The Required Word Set as colon definitions | +| ~~`capsules/v4/post79.4th`~~ | | Gone 2026-10-07: POST is the kernel's (6.3); its cases are `v4/system/post_cases.c` | + +Both are ordinary `.4th` capsules: `Block N` headers, lines of at most 64 +characters, at most 16 lines to a block. `tools/mkcapsule.c` bakes them into +`capsule_generated.c` with every other file under `capsules/`, hashed, and +signed when the signing key is present. v3 does not load them: it runs +`init.4th` and only what that file `EXEC`s. + +Named blobs (any non-`.4th` file under `capsules/`) are baked the same way +and stay available to v4 by name. This work does not need one. + +### 5.2 The block-number rule + +`validate_forth_blocks` (`tools/mkcapsule.c:409`) accepts block numbers in +`[2048, 5120)`. The floor is real: blocks 0–2047 are the VM's fast RAM. The +ceiling matches no device. + +**Change:** the check becomes "block number is at least 2048". There is no +upper bound. Blocks 0–2047 are the only forbidden ones. The collision checks +against other capsules and `tools/capsule-reserved.txt` are unchanged. +`experiments/bare_metal/README.md` and `.claude/CLAUDE.md` state the old +range and are corrected with it. + +The v4 capsules take a free range found from `capsules/BLOCK_MAP.md` and +`tools/capsule-reserved.txt`. + +### 5.3 Loading + +A capsule reaches the node as source lines through its console input, the +way v3's `capsule_exec_payload` interprets a payload line by line. `LOAD` +is not used: the block words are themselves in the capsule. + +For each capsule, in order: + +1. find it by name (`capsule_find_by_name`); +2. recompute its hash (`capsule_validate`); a mismatch stops the boot; +3. check its signature (`capsule_verify_signature`); invalid stops the + boot, missing warns — v3's rule at `capsule_birth.c:585`; +4. split the payload on `Block N` headers and feed each line to the node, + running the node until it waits for input again; +5. require the node to answer ` ok` to every line. + +A line that is not accepted stops the boot and prints the capsule name, +block number, line number and what the node said. v3's retry, which skips a +failing line and runs the block again, is not carried over: a skipped line +in the standard's own capsule must not pass unnoticed. + +What the node prints while loading is not shown, except on failure. + +In v4 the block numbers are labels for now. They become storage addresses +when the block words exist and a capsule is copied to block storage. + +## 6. POST + +### 6.1 Source of the cases + +POST is v3's own test cases, ported. The cases are in +`v3/src/test_runner/modules/*.c`; each is a name, a line of FORTH and a +flag saying whether an error is expected. Only cases for Required Word Set +words are ported, chosen by word name against the standard's list. + +### 6.2 Judging + +v3 judges a case only by whether it raised an error +(`v3/src/test_runner/test_common.c:258-285`); the "expected" text is a +comment. A wrong result that raises no error passes. That is not enough for +POST's purpose here, which is to prove each colon definition against the +assembled word it replaces. + +**Ruling:** every ported case compares its result. The expected data stack +and printed output are taken from running the same line on the hosted v3 +binary, so v3 remains the reference. A case v3 expects to raise an error +must raise one on v4. + +Where v3 departs from FORTH-79 for a standard word, FORTH-79 wins (standing +ruling); the case's expected value is then the standard's, and the +departure is reported. + +### 6.3 Form + +**Ruled 2026-10-07 (`MESH.md` step 6b): POST is the kernel's, as in v3.** +The kernel holds the cases and feeds them to the node; nothing of POST's +harness is loaded into the node's dictionary. What this section said +before — a harness in FORTH in `post79.4th`, and two variables in the +nucleus for it, `(CATCH)` and `(EMIT-HOOK)` — is withdrawn; 6.3a keeps it +for the record. + +**v3, as built.** The cases are C tables compiled into the kernel +(`v3/src/test_runner/modules/*.c`). For each, the kernel hands the line to +the interpreter, reads the VM's error flag, and puts the VM's stack +pointers, error and mode back (`test_common.c`, `run_single_test`). It +runs once at boot on the first VM, against block RAM of POST's own, and +the parity line is taken afterwards. What the cases define does not stay: +`run_test_suite` saves the dictionary before each word's cases and puts it +back after them, "to remove test-created words" (`test_common.c:333`, +`:365`). + +**v4.** + +- *The cases* are a table in C, `v4/system/post_cases.c`, generated by + `v4/tools/mkpost.py` (6.4) and linked into the hosted program and the + kernel. Each is a name, its lines of FORTH, whether an error is + expected, and what it must leave: the data stack, or only how many + values for an address-dependent case (6.5), and the text it prints. +- *The runner*, `v4/system/post.c`, is the kernel's and is shared by the + hosted program, the bare-metal kernel and the tests. For each case it + empties the node's data stack from outside; sends `DECIMAL FORTH + DEFINITIONS`, the state every expected value was generated from (6.4); + sends the case's lines one at a time, as the boot sends any line, + keeping what the node prints and showing none of it; and judges. A case + passes when it ended in an error exactly if one was expected and, if + none was, its stack and its printed text are what the table has. An + error ends the line it is on, so a case is several short lines; it has + ended in an error if any of its lines did. +- *What it prints.* For a failing case, `POST FAIL: name out<...> + stack<...>`. Then `PARITY:V4_POST tests=N pass=N fail=N`. +- *What is left: nothing*, as in v3. The system is sealed before POST, + and after the last case the kernel has the node do `COLD`, which comes + back to the system as sealed; what `COLD` prints is not shown. The + dictionary is put back once, after all the cases, and not after each + word's as v3 does: the expected results were taken from one v3 session + in which nothing was put back between cases (6.4), and the capsule did + the same with its one `FORGET` at the end. + **How this came to be ruled twice.** On 2026-10-07 Captain Bob was told + that v3 leaves the cases' definitions in the dictionary, and ruled "as + v3: they stay". That was false: it was read from `run_single_test`, + which puts back only the stacks, without reading `run_test_suite`. It + was built so, and the review of the step found it; shown what v3 does, + he ruled that POST leaves nothing. +- *A case the node does not come back from* — it has stopped, or runs for + ever — fails, and POST ends there: the runner names it and says how many + cases were not run. +- *What use still changes.* After POST and `COLD`, `HERE` and `LATEST` are + where they were, but the dictionary hash is not what it was before POST: + each word POST had interpreted has a different TTL in its entry, the + count of uses left before its access is checked again + (`v4/capsule/compile.v4`, `(ACL?)`). 138 cells, measured 2026-10-07. It + is the same on every system, so the six still agree. +- *Gone:* `capsules/v4/post79.4th` and its blocks 7000 up; the harness + words; `(CATCH)` and `(EMIT-HOOK)`, with what `EMIT` and the prompt + loop did for them. + +### 6.3a As it was until step 6b + +`post79.4th` defined a small harness in FORTH and a tally, and needed two +variables from the nucleus: `(CATCH)`, so that a line ending in an error +ended ` ok` and POST could go on; and `(EMIT-HOOK)`, the xt of a word given +each character in place of the console, so that POST could compare what a +case printed. Its last block was `T-REPORT` and `FORGET T#`: the harness +and everything the cases had defined were forgotten. + +### 6.4 Generating the expected values + +`v4/tools/mkpost.py` reads the v3 test modules, keeps the cases for +Required Word Set words, runs them in one session of the hosted v3 binary, +and writes `v4/system/post_cases.c` (until step 6b, `capsules/v4/post79.4th`). It is a development tool +(`make -C v4 post79`), run when the cases or the rules change; its output +is committed and reviewed like any source. Every case starts from the same +state on both machines: empty stack, `DECIMAL`, `FORTH DEFINITIONS`. + +### 6.5 Where POST does not take v3's word (ruled 2026-10-05) + +`v4/tools/post79_rules.py` holds the exceptions, each with its reason, and +`mkpost.py` writes them out as `POST79.md`, which lists every one. + +1. **Address-dependent cases.** A case that leaves or prints a memory + address is checked for the number of values it leaves, and for what it + prints unless an address is printed. The values are not compared. +2. **Where v3 departs from FORTH-79.** The expected result is the + standard's. Where v3's line is not valid FORTH-79 (`>R` at the prompt, a + single number given to `<#`), the line is rewritten so that it is. +3. **Cases written for v3's machine.** A v4 address unit is a cell (D-1); + cases that assume v3's byte addresses are rewritten in v4's terms. +4. **Words v3 has no case for** get cases written by hand, with the + standard's results. `U*` and `U/MOD`, which neither v3 nor the v4 + nucleus had, are colon definitions in `forth79.4th`. + +Not tested: `KEY`, `EXPECT` and `QUERY`, which wait for the keyboard, and +`QUIT`, which returns to the terminal without ` ok`. + +## 7. Hashing, signing and parity + +Hashing and signing are the existing capsule mechanisms, used unchanged +(section 5.3). + +Parity needs one new function. `sk_dict_canonical_hash` walks v3's +`DictEntry` list and cannot hash a v4 node. The v4 dictionary hash is +FNV-1a (`fnv1a_64`, already in `kernel/src/vm/parity.c`) over the node's +memory from the start of code to `HERE`, and `LATEST`. Stacks, input +buffers, block buffers and heat are left out. + +The boot prints, in order: + +``` +PARITY:V4_NUCLEUS words=N image_hash=0x... +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x... capsule_hash=0x... dict_hash=0x... +PARITY:V4_POST tests=N pass=N fail=N +PARITY:V4_SYSTEM word_count=N dict_hash=0x... +PARITY:OK +POST: PASSED +ok> +``` + +`PARITY:V4_SYSTEM` (step 6b) is the parity of the system as it is sealed, +after POST, as v3's `PARITY:M7.1a` is taken after POST: how many words +FORTH holds and the dictionary hash. Until step 6b the POST capsule had a +`PARITY:V4_CAPSULE` line of its own in that place. + +On any failure it prints `PARITY:FAIL` and `POST: FAILED` in place of the +last three lines and does not give a prompt. + +The tags are `PARITY:V4_*` so tooling that looks for v3's `PARITY:M7.1a` +is not misled. + +Every build uses 64-bit cells on the same engine, so every line above is +identical on all six builds of one commit (section 9). The dictionary hash +changes whenever a word moves between the nucleus and the capsule, so +there is no fixed golden hash until decomposition is finished. + +The nucleus is data linked into the binary and is trusted as the binary's +own code is. It is hashed for the parity line and not signed. + +## 8. Order of work + +1. **Capsule loading at boot**, hosted and bare metal, with the block-number + change. The capsule may be nearly empty at this step. +2. **POST against today's assembled words.** POST must pass here, on words + `make -C v4 test` already covers. This proves POST before it judges + anything new. +3. **Decompose group by group.** Move one group from `.v4` to + `forth79.4th` and run POST hosted: stack, arithmetic, comparison, + memory, strings, number output, control, defining, vocabulary, blocks. + A failure points at the group just moved. +4. **Acceptance** (section 9). + +## 9. Products and acceptance + +The hosted binary and the kernel run the same engine (`v4/src`), the same +nucleus image, the same baked capsule directory and the same boot sequence +(section 5.3 and section 7). Only the console differs: stdin and stdout +hosted, the serial console on bare metal. The hosted binary links +`capsule_generated.c` and reads nothing from the source tree. + +Acceptance is six boots of one commit: + +| | amd64 | aarch64 | riscv64 | +|---|---|---|---| +| Hosted Linux | native | user-mode QEMU | user-mode QEMU | +| Bare metal | `clean qemu` | `clean qemu` | `clean qemu` | + +Each must print identical `PARITY:V4_*` lines, pass POST and reach `ok>`. +Bare-metal runs follow the repository's QEMU rules: one instance at a time, +in the foreground, `clean` before `qemu`, logs kept under `logs/`. + +`make -C v4 test` also runs at 32-bit cells. That stays as a development +check for the FPGA gateway and is not part of this acceptance. + +## 10. What is reused and what is new + +| Need | Existing | Change | +|---|---|---| +| Bake capsules | `tools/mkcapsule.c`, `kernel/Makefile` capsule rule | Block-number check only (5.2) | +| Find, hash-check, verify | `capsule_find.c`, `capsule_validate.c`, `capsule_sig.c` | None; also compiled into the hosted binary | +| Split a payload into blocks and lines | `is_block_header` and the walk in `capsule_loader.c` | Moved to a file both loaders call | +| Start a node from an image | `v4/src/image.c`, `v4_image_boot` | None | +| Build the nucleus image | `v4/tools/mkimage.c` | File list shrinks as groups move; the step that types `editor.fth` and `tools.fth` is removed | +| Kernel entry | `kernel/src/v4/sk_v4.c`, Kconfig `STARFORTH_V4` | Calls the shared boot sequence before reading the keyboard | +| Hosted entry | `v4/tools/hosted.c` | Same | +| Parity lines and FNV-1a | `kernel/src/vm/parity.c` | v4 dictionary hash added | +| v3 cases | `v3/src/test_runner/modules/*.c` | Read only | +| Expected values | hosted v3 binary | Read only | +| Hosted builds per ISA | `v4/Makefile` | Cross-compiler targets for aarch64 and riscv64 | + +New: the shared v4 boot sequence (one file), the v4 dictionary hash, the +case-extraction script, `forth79.4th` and `post79.4th` (the last gone since step 6b, 6.3). + +The v3 boot is untouched: `STARFORTH_V4` defaults to off. + +## 11. Not decided here + +- Where the v4 hosted binaries are installed. They are built under + `v4/build/`; `lfs/` holds v3's and is left alone. +- Signing the nucleus. It would have to become a named blob under + `capsules/`, which puts a generated file in a source directory. diff --git a/docs/v4.0.0/POST79.md b/docs/v4.0.0/POST79.md new file mode 100644 index 00000000..60d28ae9 --- /dev/null +++ b/docs/v4.0.0/POST79.md @@ -0,0 +1,204 @@ +# POST for the FORTH-79 Required Word Set: where it departs from v3 + +Written by `v4/tools/mkpost.py` from `v4/tools/post79_rules.py`; do not edit. +Design: `NUCLEUS.md` section 6. The cases are `v4/system/post_cases.c`. + +POST runs 538 cases. 431 are v3's, with what the hosted v3 binary did as the +expected result. This file lists every other case, and why. + +## 1. Rewritten for FORTH-79 (59) + +v3 departs from the standard, or the case is written for v3's machine. v4 +follows the standard (standing ruling), so the expected result is the +standard's and not v3's. + +| Case | v3's line | What v3 did | As POST runs it | Must do | Why | +|---|---|---|---|---|---| +| `PICK.pick_0` | `1 2 3 0 PICK . CR` | stack `1 2 3`, printed `3 \n` | unchanged | an error | FORTH-79: PICK and ROLL count from 1; v3 counts from 0; 0 PICK is an error | +| `PICK.pick_1` | `1 2 3 1 PICK . CR` | stack `1 2 3`, printed `2 \n` | unchanged | stack `1 2 3`, prints `3 \n` | FORTH-79: PICK and ROLL count from 1; v3 counts from 0 | +| `PICK.pick_2` | `1 2 3 2 PICK . CR` | stack `1 2 3`, printed `1 \n` | unchanged | stack `1 2 3`, prints `2 \n` | FORTH-79: PICK and ROLL count from 1; v3 counts from 0 | +| `ROLL.roll_1` | `1 2 3 1 ROLL . . . CR` | stack `empty`, printed `1 3 2 \n` | unchanged | stack `empty`, prints `3 2 1 \n` | FORTH-79: PICK and ROLL count from 1; v3 counts from 0 | +| `>R.basic` | `42 >R R@ . R> . CR` | stack `empty`, printed `42 42 \n` | `: RS1 42 >R R@ . R> . CR ; RS1` | stack `empty`, prints `42 42 \n` | FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `>R.zero` | `0 >R R@ . R> . CR` | stack `empty`, printed `0 0 \n` | `: RS2 0 >R R@ . R> . CR ; RS2` | stack `empty`, prints `0 0 \n` | FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `>R.negative` | `-123 >R R@ . R> . CR` | stack `empty`, printed `-123 -123 \n` | `: RS3 -123 >R R@ . R> . CR ; RS3` | stack `empty`, prints `-123 -123 \n` | FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `>R.multiple` | `1 2 >R >R R@ . R> . R@ . R> . CR` | stack `empty`, printed `1 1 2 2 \n` | `: RS4 1 2 >R >R R@ . R> . R@ . R> . CR ; RS4` | stack `empty`, prints `1 1 2 2 \n` | FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `R>.basic` | `42 >R R> . CR` | stack `empty`, printed `42 \n` | `: RS5 42 >R R> . CR ; RS5` | stack `empty`, prints `42 \n` | FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `R>.lifo_order` | `1 2 >R >R R> . R> . CR` | stack `empty`, printed `1 2 \n` | `: RS6 1 2 >R >R R> . R> . CR ; RS6` | stack `empty`, prints `1 2 \n` | FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `R@.basic` | `42 >R R@ . R> DROP CR` | stack `empty`, printed `42 \n` | `: RS7 42 >R R@ . R> DROP CR ; RS7` | stack `empty`, prints `42 \n` | FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `R@.non_destructive` | `99 >R R@ R@ = . R> DROP CR` | stack `empty`, printed `-1 \n` | `: RS8 99 >R R@ R@ = . R> DROP CR ; RS8` | stack `empty`, prints `-1 \n` | FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `,.basic` | `42 , HERE 8 - @ . CR` | stack `empty`, printed `42 \n` | `42 , HERE 1 - @ . CR` | stack `empty`, prints `42 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1) | +| `,.negative` | `-999 , HERE 8 - @ . CR` | stack `empty`, printed `-999 \n` | `-999 , HERE 1 - @ . CR` | stack `empty`, prints `-999 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1) | +| `+!.basic` | `10 HERE ! 5 HERE +! HERE @ . CR` | error | unchanged | stack `empty`, prints `15 \n` | v3 raises an error FORTH-79 does not ask for: a store to HERE | +| `+!.by_zero` | `42 HERE ! 0 HERE +! HERE @ . CR` | error | unchanged | stack `empty`, prints `42 \n` | v3 raises an error FORTH-79 does not ask for: a store to HERE | +| `+!.negative` | `10 HERE ! -3 HERE +! HERE @ . CR` | error | unchanged | stack `empty`, prints `7 \n` | v3 raises an error FORTH-79 does not ask for: a store to HERE | +| `+!.accumulate` | `0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! HERE @ . CR` | error | unchanged | stack `empty`, prints `6 \n` | v3 raises an error FORTH-79 does not ask for: a store to HERE | +| `HERE.after_comma~2` | `HERE 42 , HERE SWAP - 1 CELLS = 0 SWAP /` | error | unchanged | stack `0`, prints nothing | the case divides by zero unless HERE moved by one cell; on v3 it had moved by 8 | +| `MOVE.basic` | `HERE 65 OVER C! HERE 1+ 66 OVER C! HERE HERE 16 + 2 MOVE HERE 16 + C@ . HERE 17 + C@ . CR` | stack `294 295`, printed `65 66 \n` | `65 HERE ! 66 HERE 1+ ! HERE HERE 16 + 2 MOVE HERE 16 + @ . HERE 17 + @ . CR` | stack `empty`, prints `65 66 \n` | FORTH-79: MOVE moves cells; and v3's address unit is a byte; a v4 address unit is a cell (D-1) | +| `BASE.base_store` | `16 BASE ! 255 . CR` | stack `empty`, printed `597 \n` | unchanged | stack `empty`, prints `255 \n` | 255 read in base 16 and printed in base 16 is 255; v3 printed 467 | +| `<#.basic` | `DECIMAL 42 S>D <# #S #> TYPE CR` | stack `empty`, printed `774763251095801167872\n` | unchanged | stack `empty`, prints `42\n` | v3 prints 774763251095801167872 for 42 S>D <# #S #> | +| `<#.empty` | `0 <# #> TYPE CR` | stack `0`, printed `\n` | `0 0 <# #> TYPE CR` | stack `empty`, prints `\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `<#.negative` | `-42 <# #S #> TYPE CR` | stack `empty`, printed `42\n` | `-42 DUP ABS 0 <# #S ROT SIGN #> TYPE CR` | stack `empty`, prints `-42\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#.single_digit` | `15 <# # #> TYPE CR` | stack `empty`, printed `5\n` | `15 0 <# # #> TYPE CR` | stack `empty`, prints `5\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#.multiple` | `15 <# # # #> TYPE CR` | stack `empty`, printed `15\n` | `15 0 <# # # #> TYPE CR` | stack `empty`, prints `15\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#.zero_pad` | `5 <# # 0 # #> TYPE CR` | stack `0`, printed `05\n` | `5 0 <# # # #> TYPE CR` | stack `empty`, prints `05\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#S.basic` | `42 <# #S #> TYPE CR` | stack `empty`, printed `42\n` | `42 0 <# #S #> TYPE CR` | stack `empty`, prints `42\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#S.zero` | `0 <# #S #> TYPE CR` | stack `empty`, printed `0\n` | `0 0 <# #S #> TYPE CR` | stack `empty`, prints `0\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#S.large` | `1234567890 <# #S #> TYPE CR` | stack `empty`, printed `1234567890\n` | `1234567890 0 <# #S #> TYPE CR` | stack `empty`, prints `1234567890\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `SIGN.negative` | `-42 ABS <# #S SIGN #> TYPE CR` | stack `0`, printed `42\n` | `-42 DUP ABS 0 <# #S ROT SIGN #> TYPE CR` | stack `empty`, prints `-42\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `SIGN.positive` | `42 <# #S SIGN #> TYPE CR` | stack `0`, printed `42\n` | `42 DUP ABS 0 <# #S ROT SIGN #> TYPE CR` | stack `empty`, prints `42\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `SIGN.zero` | `0 <# #S SIGN #> TYPE CR` | stack `0`, printed `0\n` | `0 DUP ABS 0 <# #S ROT SIGN #> TYPE CR` | stack `empty`, prints `0\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#>.normal` | `42 <# #S #> TYPE CR` | stack `empty`, printed `42\n` | `42 0 <# #S #> TYPE CR` | stack `empty`, prints `42\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#>.empty` | `0 <# #> TYPE CR` | stack `0`, printed `\n` | `0 0 <# #> TYPE CR` | stack `empty`, prints `\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `#>.stack_effect` | `42 <# #S #> SWAP . . CR` | stack `empty`, printed `24 2 \n` | `42 0 <# #S #> SWAP DROP . CR` | stack `empty`, prints `2 \n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `HOLD.basic` | `42 <# 46 HOLD #S #> TYPE CR` | stack `empty`, printed `42.\n` | `42 0 <# 46 HOLD #S #> TYPE CR` | stack `empty`, prints `42.\n` | FORTH-79: <# # #S #> work on a double number; v3 takes a single | +| `COUNT.basic` | `HERE S" Test" DROP COUNT . . CR` | stack `294`, printed `84 295 \n` | `4 PAD C! PAD COUNT . PAD - . CR` | stack `empty`, prints `4 1 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1); and S" is not FORTH-79 | +| `COUNT.empty` | `HERE 0 OVER C! COUNT . . CR` | stack `empty`, printed `0 300 \n` | `0 PAD C! PAD COUNT . PAD - . CR` | stack `empty`, prints `0 1 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1) | +| `COUNT.max_length` | `HERE 255 OVER C! COUNT . . CR` | stack `empty`, printed `255 300 \n` | `255 PAD C! PAD COUNT . PAD - . CR` | stack `empty`, prints `255 1 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1) | +| `COUNT.basic~2` | `HERE S" Test" DROP C@ HERE 1+ SWAP COUNT . . CR` | stack `404 410`, printed `0 85 \n` | `4 PAD C! PAD COUNT . PAD - . CR` | stack `empty`, prints `4 1 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1) | +| `COUNT.empty~2` | `HERE 0 OVER C! COUNT . . CR` | stack `empty`, printed `0 410 \n` | `0 PAD C! PAD COUNT . PAD - . CR` | stack `empty`, prints `0 1 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1) | +| `COUNT.max_length~2` | `HERE 255 OVER C! COUNT . . CR` | stack `empty`, printed `255 410 \n` | `255 PAD C! PAD COUNT . PAD - . CR` | stack `empty`, prints `255 1 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1) | +| `CMOVE.basic` | `HERE S" Test" DUP >R HERE 10 + SWAP CMOVE CR` | stack `317`, printed `\n` | `65 PAD C! 66 PAD 1+ C! PAD PAD 10 + 2 CMOVE PAD 10 + C@ . PAD 11 + C@ . CR` | stack `empty`, prints `65 66 \n` | v3's address unit is a byte; a v4 address unit is a cell (D-1); and the v3 case leaves a value on the return stack | +| `TYPE.basic_string` | `HERE S" Hello" DUP >R HERE SWAP CMOVE HERE R> TYPE CR` | stack `392`, printed `Hello\n` | `72 PAD C! 105 PAD 1+ C! PAD 2 TYPE CR` | stack `empty`, prints `Hi\n` | v3's address unit is a byte; a v4 address unit is a cell (D-1); and FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `TYPE.numbers` | `HERE S" 12345" DUP >R HERE SWAP CMOVE HERE R> TYPE CR` | stack `398`, printed `12345\n` | `49 PAD C! 50 PAD 1+ C! PAD 2 TYPE CR` | stack `empty`, prints `12\n` | v3's address unit is a byte; a v4 address unit is a cell (D-1); and FORTH-79: >R R> R@ are for use inside a definition; v4 refuses them at the prompt | +| `>IN.initial` | `>IN @ . CR` | stack `empty`, printed `657828592 \n` | unchanged | stack `empty`, prints `6 \n` | FORTH-79: >IN is the offset into the input, 6 here; v3 prints an address | +| `UPDATE.no_block` | `0 SCR ! UPDATE` | error | unchanged | stack `empty`, prints nothing | v3 raises an error FORTH-79 does not ask for | +| `SCR.after_load` | `1 LOAD SCR @ . CR` | stack `empty`, printed `` | unchanged | stack `empty`, prints `1 \n` | v3 prints nothing after 1 LOAD; SCR is still 1 from the LIST before | +| `FIND.existing` | `FIND DUP . CR` | stack `empty`, printed `657827952 \n` | unchanged | 0 value(s) left; output not compared | FORTH-79: FIND takes the next word, DUP here, and leaves its address, which is printed | +| `FIND.user_word` | `: test5 44 ; FIND test5 . CR` | stack `empty`, printed `658154448 \n` | unchanged | 0 value(s) left; output not compared | the address FIND leaves is printed | +| `FIND.empty` | `FIND` | error | unchanged | stack `0`, prints nothing | FORTH-79: FIND leaves 0 when there is no word; v3 raises an error | +| `VOCABULARY.cross_vocab_access` | `VOCABULARY V1 V1 DEFINITIONS : V1WORD 11 ; FORTH V1WORD . CR` | stack `empty`, printed `11 \n` | unchanged | an error | FORTH-79: a word defined in another vocabulary is not found from FORTH; v3 finds it | +| `VOCABULARY.duplicate` | `VOCABULARY TESTVOC VOCABULARY TESTVOC` | error | unchanged | stack `empty`, prints nothing | v3 raises an error FORTH-79 does not ask for: defining a name again | +| `IF.true` | `: TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR` | stack `empty`, printed `42 \n` | unchanged | stack `empty`, prints `42 \n` | v3 runs an older TEST1 from another vocabulary and leaves the flag | +| `IF.false` | `: TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR` | stack `empty`, printed `24 \n` | unchanged | stack `empty`, prints `24 \n` | v3 runs an older TEST2 from another vocabulary and leaves the flag | +| `LEAVE.basic` | `: TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LOOP ; TLV . CR` | stack `empty`, printed `3 \n` | unchanged | stack `empty`, prints `4 \n` | FORTH-79: LEAVE ends the loop at the next LOOP; v3 jumps out at once | +| `LEAVE.at_start` | `: TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 . CR` | stack `empty`, printed `0 \n` | unchanged | stack `empty`, prints `1 \n` | FORTH-79: LEAVE ends the loop at the next LOOP; v3 jumps out at once | +| `LEAVE.qdloop` | `: TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ LOOP ; TLV3 . CR` | stack `empty`, printed `2 \n` | unchanged | stack `empty`, prints `3 \n` | FORTH-79: LEAVE ends the loop at the next LOOP; v3 jumps out at once | + +## 2. Address-dependent (20) + +The case leaves or prints a memory address, which is a different number on +the two machines. The number of values left is checked, and what is +printed unless an address is printed; the values are not. + +| Case | Line | Checked | +|---|---|---| +| `-TRAILING.basic` | `HERE S" Test " -TRAILING TYPE CR` | values left, and output | +| `-TRAILING.all_spaces` | `HERE S" " -TRAILING TYPE CR` | values left, and output | +| `-TRAILING.no_spaces` | `HERE S" Test" -TRAILING TYPE CR` | values left, and output | +| `HERE.stability` | `HERE DUP HERE = . CR` | values left, and output | +| `PAD.stability` | `PAD DUP PAD = . CR` | values left, and output | +| `UPDATE.basic` | `1 BLOCK UPDATE` | values left, and output | +| `UPDATE.multiple` | `1 BLOCK UPDATE UPDATE` | values left, and output | +| `SAVE-BUFFERS.dirty_blocks` | `1 BLOCK UPDATE SAVE-BUFFERS` | values left, and output | +| `EMPTY-BUFFERS.after_use` | `1 BLOCK EMPTY-BUFFERS` | values left, and output | +| `EMPTY-BUFFERS.dirty_blocks` | `1 BLOCK UPDATE EMPTY-BUFFERS` | values left, and output | +| `BUFFER.flush_dirty` | `2 BLOCK 1+ 2 BUFFER` | values left, and output | +| `BLOCK.basic` | `1 BLOCK DUP . CR` | values left only | +| `BUFFER.basic` | `1 BUFFER DUP . CR` | values left only | +| `VOCABULARY.create_and_switch` | `VOCABULARY MYVOC MYVOC DEFINITIONS CONTEXT @ . CR` | values left only | +| `CONTEXT.basic` | `CONTEXT @ . CR` | values left only | +| `CONTEXT.initial` | `FORTH CONTEXT @ . CR` | values left only | +| `CURRENT.basic` | `CURRENT @ . CR` | values left only | +| `CURRENT.after_def` | `VOCABULARY TEST-VOC8 TEST-VOC8 DEFINITIONS CURRENT @ . CR` | values left only | +| `LIST.basic` | `1 LIST` | values left only | +| `SCR.after_list` | `1 LIST SCR @ . CR` | values left only | + +## 3. Written by hand (28) + +For required words v3 has no case for. The expected results are the +standard's; no v3 run stands behind them. + +| Case | Line | Must do | +|---|---|---| +| `U*.small` | `3 4 U* . . CR` | stack `empty`, prints `0 12 \n` | +| `U*.zero` | `0 5 U* . . CR` | stack `empty`, prints `0 0 \n` | +| `U*.full` | `-1 -1 U* 2+ . 1 = . CR` | stack `empty`, prints `0 -1 \n` | +| `U/MOD.small` | `7 0 2 U/MOD . . CR` | stack `empty`, prints `3 1 \n` | +| `U/MOD.exact` | `12 0 4 U/MOD . . CR` | stack `empty`, prints `3 0 \n` | +| `U/MOD.double` | `0 1 2 U/MOD 2* . . CR` | stack `empty`, prints `0 0 \n` | +| `U/MOD.inverse` | `-1 -1 U* -1 U/MOD 1+ . . CR` | stack `empty`, prints `0 0 \n` | +| `U/MOD.carry` | `-1 -2 -1 U/MOD 1+ . 2+ . CR` | stack `empty`, prints `0 0 \n` | +| `U/MOD.by_zero` | `1 0 0 U/MOD` | an error | +| `?.basic` | `VARIABLE Q1 42 Q1 ! Q1 ? CR` | stack `empty`, prints `42 \n` | +| `EXECUTE.found` | `: E1 7 ; FIND E1 EXECUTE . CR` | stack `empty`, prints `7 \n` | +| `U..small` | `42 U. CR` | stack `empty`, prints `42 \n` | +| `U..unsigned` | `-1 U. CR` | stack `empty`, prints `18446744073709551615 \n` | +| `CONVERT.digits` | `: C1 0 0 BL WORD CONVERT DROP ; C1 123 . . CR` | stack `empty`, prints `0 123 \n` | +| `'.found` | `' DUP 0= . CR` | stack `empty`, prints `0 \n` | +| `.".in_definition` | `: Q3 ." hi there" ; Q3 CR` | stack `empty`, prints `hi there\n` | +| `LITERAL.basic` | `: Q4 [ 5 ] LITERAL ; Q4 . CR` | stack `empty`, prints `5 \n` | +| `STATE.interpreting` | `STATE @ . CR` | stack `empty`, prints `0 \n` | +| `STATE.compiling` | `: Q5 STATE @ 0= . ; IMMEDIATE : Q6 Q5 ; CR` | stack `empty`, prints `0 \n` | +| `COMPILE.basic` | `: Q7 COMPILE DUP ; IMMEDIATE : Q8 Q7 ; 3 Q8 . . CR` | stack `empty`, prints `3 3 \n` | +| `[COMPILE].basic` | `: Q9 [COMPILE] IF ; IMMEDIATE : Q10 Q9 1 ELSE 2 THEN ; 0 Q10 . -1 Q10 . CR` | stack `empty`, prints `2 1 \n` | +| `(.comment` | `1 ( 2 ) 3 . . CR` | stack `empty`, prints `3 1 \n` | +| `BLK.terminal` | `BLK @ . CR` | stack `empty`, prints `0 \n` | +| `79-STANDARD.present` | `79-STANDARD` | stack `empty`, prints nothing | +| `WORD.next_word` | `: W1 BL WORD COUNT TYPE ; W1 HELLO` | stack `empty`, prints `HELLO` | +| `WORD.delimiter` | `: W2 44 WORD COUNT TYPE ; W2 A B,` | stack `empty`, prints `A B` | +| `WORD.count` | `: W3 BL WORD C@ . ; W3 ABC` | stack `empty`, prints `3 ` | +| `WORD.skips_leading` | `: W4 BL WORD COUNT TYPE ; W4 X` | stack `empty`, prints `X` | + +## 4. v3 cases left out (39) + +| Case | Why | +|---|---| +| `EXPECT.zero_length` | reads the keyboard | +| `EXPECT.one_item` | reads the keyboard | +| `EXPECT.empty_stack` | reads the keyboard | +| `FORGET.nonexistent` | forgets a word of the system | +| `FORGET.protected` | forgets a word of the system | +| `CONTEXT.modify` | damages the system on purpose | +| `CURRENT.protect` | damages the system on purpose | +| `QUIT.in_definition` | v3 did not get through it in one session | +| `:.nested` | v3 did not get through it in one session | +| `].basic` | v3 did not get through it in one session | +| `ELSE.double` | v3 did not get through it in one session | +| `THEN.extra` | v3 did not get through it in one session | +| `C!.basic` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `C!.zero` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `C!.high_byte` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `C!.truncation` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `C@.after_cstore` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `C@.zero_byte` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `FILL.basic` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `FILL.zero_byte` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `COUNT.string_bounds` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `CMOVE.overlap` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `CMOVE.bounds` | moves 1000 bytes over the system; v3 refuses by a bounds rule FORTH-79 has not got | +| `TYPE.single_char` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `COUNT.zero_addr_plus_one` | OPEN: HERE is a cell address on v4 and this word takes a byte address (D-1): the case wrote to or read from the nucleus's code at cell HERE/4 | +| `WORD.empty_input` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.space_delim` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.newline_delim` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.tab_delim` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.comma_delim` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.skip_leading` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.single_char` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.long_word` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.zero_delim` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.high_ascii` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.count_format` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.count_value` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `WORD.multi_delim` | v3's WORD does not take the next word from the input, as FORTH-79's does; see the WORD cases written by hand | +| `PAD.usable` | OPEN: PAD 42 OVER ! faults on v4 -- PAD is a byte address and ! takes a cell address (D-1) | + +## 5. Required words POST does not test + +`KEY` `EXPECT` `QUERY` `QUIT`. + +`KEY`, `EXPECT` and `QUERY` wait for the keyboard, which a boot cannot type +at. `QUIT` returns to the terminal without `ok`. + +## 6. Where v3 did not do what its own table expects (6) + +POST expects what v3 did, unless section 1 says otherwise. + +| Case | | +|---|---| +| `+!.basic` | v3's table says no error, v3 raised one | +| `+!.by_zero` | v3's table says no error, v3 raised one | +| `+!.negative` | v3's table says no error, v3 raised one | +| `+!.accumulate` | v3's table says no error, v3 raised one | +| `HERE.after_comma~2` | v3's table says no error, v3 raised one | +| `CREATE.long_name` | v3's table says error, v3 raised none | diff --git a/docs/v4.0.0/V3-PARITY.md b/docs/v4.0.0/V3-PARITY.md new file mode 100644 index 00000000..3fa230ac --- /dev/null +++ b/docs/v4.0.0/V3-PARITY.md @@ -0,0 +1,668 @@ +# StarForth v4.0.0 — Parity with v3 up to the first prompt + +Started 2026-10-05. This file measures v4 against one ruling: + +> v4 is exactly like v3 in functional requirements up to the first FORTH +> prompt. That is the stopping point for now. (Captain Bob, 2026-10-05) + +and a second, given the same day: + +> I would never stub, simulate or develop outside of functional, +> as-intended code. Piecemeal is how errors and intent get hidden. + +It records what v3 does, where in v3's code, what v4 does today, and what +has to be ruled before v4 can do the same. It proposes; it decides nothing. +Nothing described here as missing has been built. + +## 1. What v3 does before its first prompt + +From the bare-metal boot log `logs/20261003-100613/amd64/`, in order, after +the kernel's M0–M6 hardware milestones: + +| # | v3 | v4 today | +|---|---|---| +| 1 | Stadium allocated (cells, 50 VM slots); switch-signal and kernel-Hermes channel tables | Missing | +| 2 | VM arena; 530 words registered | One node; 295 assembled words and 2 from the capsule | +| 3 | Physics live whenever a word executes: per-word heat, decay, rolling window, pipelining, L8 mode selector (61 mode changes during POST), heartbeat | Missing; see section 2 | +| 4 | POST: 1050 tests, every module (FORTH-79, StarForth extensions, ACL, Mama, Q48, inference, physics freeze) | 550 cases, FORTH-79 Required Word Set only | +| 5 | `PARITY:M7.1a` word count, here, latest, dictionary hash; `PARITY:OK`; `POST: PASSED` | Present, as `PARITY:V4_*` | +| 6 | PCI; virtio-blk attached; Artemis genesis signature | PCI and the disk attached, after POST (2026-10-07). No genesis signature; the disk is read and not written | +| 7 | Mama init capsule `init.4th`: signature checked, executed, `PARITY:MAMA_INIT` | v4 loads its own two capsules the same way; not `init.4th` | +| 8 | ACL: `BIRTH` and `CAPSULE-BIRTH` pinned strict | Missing. The ACL words are assembled but not loaded | +| 9 | Heartbeat running; Stadium conservation checks; quota and kernel-Hermes self-tests | Missing | +| 10 | Hestia born, then Artemis (disk formatted, self-test, K figures), each with `PARITY:BIRTH` | Missing. One node, no fleet | +| 11 | Kernel-Hermes fleet self-tests; USB mass storage; Zuse genesis minted on the thumbdrive | Missing | +| 12 | Banner with versions; `[zuse@Hera] ok>` | `ok>` alone | + +Rows 1, 6, 9, 10 and 11 are messaging, blocks and the console's wider +setting. They are to be discussed before anything is written about them. +Section 2 is row 3. + +## 1a. Correction (2026-10-05): the table above is wrong about "Missing" + +Captain Bob: "You haven't looked at the codebase. You're assuming missing +pieces that are not missing and ignoring the entire v3 architecture. Don't +look at pieces until you see how they fit." + +The table was made from a boot log and a few functions. Read as a whole, +the system is this. + +**How v3 fits together.** After the hardware milestones, `kernel_main.c` +(`kernel_main_deep`, from line 526) does, in order: + +1. Fleet tables, before any VM exists: Stadium, sessions, switch-signal, + kernel-Hermes channels and queues; Hera made patron zero. +2. `sk_vm_bootstrap_parity()` (`kernel/src/vm/bootstrap/sk_vm_bootstrap.c`): + one `VM` is initialised with the kernel's host services; the capsule + hooks and the VM registry are set up; its fleet physics is seeded + (`vm_physics_init`); the kernel's own words are registered (`BIRTH`, + `KILL`, the capsule words); the block subsystem is given to it; POST + runs; parity is collected and printed. +3. Devices: block RAM and ramdrive, PCI, entropy, Artemis's virtio disk and + its signature, keyboard, USB, framebuffer. +4. The capsule directory is copied and `capsule_birth_mama()` runs + `init.4th` on that VM; `BIRTH` and `CAPSULE-BIRTH` are pinned. +5. The timer starts: the heartbeat. +6. Stadium and kernel-Hermes self-tests; Hestia and Artemis are born, each + another `VM`; Zuse; the banner; the REPL. + +Every one of those steps is kernel code in `kernel/src` and works on a +`VM` through one interface: the `VM` structure (`v3/include/vm.h`) and the +functions on it. Counted across the kernel's services, the most used are +the stacks (`vm_push`, `vm_pop`), `vm_interpret`, `vm_find_word`, the +dictionary (`latest`, `here`, `DictEntry`), `error`, the heartbeat state, +the rolling window, and `stadium_vm_id`. + +**What v4 is, by its own justification** (`JUSTIFICATION.md` section 16): +"The only difference is the machine underneath: the F18-derived engine +instead of the original StarForth VM." And section 15: StarshipOS is +"LithosAnanke running the v4 F18 engine", with the FORTH-79 vocabulary and +"the StarshipOS-specific portions" stored as capsules. + +**So nothing in rows 1, 6, 7, 8, 9, 10, 11 or 12 is missing.** It is all +in this kernel and it all runs today. What is wrong is where v4 was put: +`kernel_main.c` calls `sk_v4_run()` *before* step 1 and it never returns. +The v4 node comes up beside the system instead of inside it, and so the +whole of the architecture is skipped. That is the detour. The capsule +loader, POST and parity lines built on 2026-10-05 (`v4/system/boot.c`) +repeat, for a lone node, things steps 2 and 4 already do for a `VM`. + +**The real question** is therefore not "what does v4 lack" but "how does +the F18 engine take the place of the StarForth VM behind that one +interface", so that steps 1 to 6 run as they do now. That has not been +worked out, and nothing here should be read as a plan for it. + +Section 2 below was written before this correction. Its account of what +v3's inner loop does is from the code and stands. Its section 2.2, "what +v4 has", describes the lone node, not v4 in its place in the system. + +## 1b. Console (discussed and ruled 2026-10-05) + +**v3, as built** (`FABRIC-3.5.md` sections XVII and XVIII): + +- Layer 0, the fabric: UART, framebuffer, VT100, font, in kernel C + (`kernel/src/hal`). Singular, permanent, and it never knows a VM exists; + anything VM-shaped reaches it by a registered callback. +- Layer 1, Hestia: the Tripod leg that owns console policy and is the bind + point. Her vocabulary is the drawing words. +- Layer 2, console proxies: one VM per attached user, born at `WIREBIND`; + their traffic goes through kernel-Hermes. +- Input belongs to the kernel. `kernel/src/repl.c` reads the serial port and + the keyboard, echoes, edits and builds the line, then hands the whole line + to the VM `USE` has made active (`vm_interpret`), or sends it through + kernel-Hermes. It services the heartbeat while idle. +- Output: a VM's `EMIT` goes to the host service `putc`, then + `console_putc`. The fabric puts `[user@VM]` before each line. The prompt + is the REPL's, not the VM's. + +A v3 VM never reads its own command line and never prints its own prompt. + +**Ruling (Captain Bob, "for now, yeah"):** the kernel hands a v4 node a +whole line and takes characters back, exactly as it does a v3 VM. The +node's own prompt loop plays no part at that level. Layers 0, 1 and 2 and +the kernel's REPL stay as they are. `KEY`, `EXPECT`, `QUERY` and `QUIT` +remain FORTH-79 words but are not how the kernel drives a node. + +"For now": `DECOMPOSITION.md` makes `EMIT` and `KEY` messages to a console +device node, which in the mesh is Hestia's part. That is the destination, +not this step. + +**What this says about the lone-node boot.** It has the node run its own +`QUIT` loop, print its own prompt and ` ok`, and wait in `KEY`; +`v4/system/boot.c` then takes the ` ok` and prompt back out of what the +node prints. That is a work-around for the node owning what the kernel +owns, and it goes when the engine takes the VM's place. + +## 1c. The frame: the Stadium + +`FABRIC-2.md` section B: "words are stadium patrons, VMs are patrons, +blocks are patrons, messages are stadium patrons, all should be operated on +by THE SAME ENGINE." + +- A patron is one 64-byte cell of nine wires: identity, heat, TTL, pin, + link, behaviour, mass, payload, contains + (`kernel/include/starkernel/vm/stadium.h`). +- Heat is a conserved share of 1.0; K is that conservation. +- The behaviour is what happens when a patron leaves: words and VMs `COOL`, + blocks `MIGRATE`, messages `DELIVER`, ACLs `EXPIRE`. +- A cell never holds the thing itself, only its identity and heat. A word's + code stays in the dictionary; a block's bytes stay in the block + subsystem. + +Compudynamics is therefore the kernel's Stadium, not something inside the +VM engine. The engine's part is to report what it executes: in v3, +`stadium_word_dispatch(vm, word_id, tick)` from the inner loop. + +**Reading of the opcode ruling (section 2.7) in this frame, stated to +Captain Bob 2026-10-05 and not corrected:** on v4 that report carries an +opcode, and a VM's word patrons become its 32 opcode patrons. + +## 1d. Blocks (discussed and ruled 2026-10-05) + +**v3, as built:** + +- One block address space in kernel C (`v3/src/block_subsystem.c`): fast + RAM at 0 to 2047, the ramdrive, Artemis's virtio disk, USB drives, + chained. +- Every block has metadata (`blk_meta_t`): the owner's fingerprint, + `acl_allow`, `acl_ttl`, a write count, chain links. +- Blocks are patrons: `BLOCK`, `BUFFER` and `UPDATE` call + `stadium_block_dispatch` with the LBN; heat drives migration and wear + levelling (`kernel/src/vm/stadium_blocks.c`). +- Artemis is the Tripod leg that owns persistent storage. +- Identity lives there: a keypair Zuse mints onto a thumbdrive; its + fingerprint is stamped on every block it claims at first touch, behind + the home-blocks fence; the disk's genesis signature is how the kernel + knows Artemis's disk. + +A v3 VM's block words ask the kernel's block subsystem for a block and get +a buffer back. Ownership, ACL, physics and devices are the kernel's. + +**Ruling (Captain Bob, "yes"):** a v4 node only ever asks for a block by +number. Everything about who may have it is decided on the kernel's side, +under the VM's identity. The device chain, metadata, first-touch claim, +ACL, migration and the Stadium touch stay where they are. + +**What this says about the lone-node boot.** It gives the node a bare RAM +array behind its four block registers (D-19), which skips the address +space, the metadata, the owner, the ACL and the Stadium. + +**As of 2026-10-07** (`MESH.md` step 6): the registers and the RAM array +are gone. A node's block words are kernel requests by block number, and +`v4/system/blocks.c` serves them through v3's block subsystem into the +node's window of four slots, as v3's block words do for a VM; so the +address space and the metadata are v3's. Still skipped: the owner and first-touch +claim, the ACL, and the Stadium touch, which need the node's identity. A +first build of that step had block requests passed from node to node and +nodes with no storage; Captain Bob withdrew it as a divergence from this +ruling (`MESH.md` 8.6). + +## 1e. Messaging (discussed and ruled 2026-10-05) + +**v3, as built** (`FABRIC-3.5.md` sections III, XLIII, XLV; +`kernel/include/starkernel/vm/kernel_hermes.h`): + +- Hermes is the kernel, not a VM: the routing layer between the Stadium + floor and the HAL. +- A message is a patron. Its heat is the Stadium cell it occupies; sending + draws a slot's worth from the sender's reservoir; a ledger of held, + pulled, returned and consumed is audited for conservation. +- Publish and subscribe: one permanent common channel every VM joins at + birth; a private channel by request and grant or deny, with ACK/NACK. +- Who may open a channel with whom is ACL policy: kernel-Hermes asks + `ACL.4th` and does not decide. +- A payload is FORTH text, one block at most; larger is chunked. +- Hermes delivers into no one. It queues the payload for the target and + publishes the fact. The target drains its own queue at its outermost + interpret checkpoint by interpreting the text; the switcher reads the + same fact to choose which VM runs. + +**Ruling (Captain Bob, "yes"):** a v4 node receives by being handed text +to interpret, and sends by asking. Everything else stays in kernel-Hermes: +heat, channels, the ACL question, queues, the ledger, the switcher. + +**Open.** v3's safe moment is a per-word checkpoint in the inner loop, at +the outermost interpret level. A v4 node has no inner loop. What a node's +safe moment is has to be defined; it is also where the switcher moves +control, so it decides how the fleet shares the processor. + +**Intent stated, for later (Captain Bob, 2026-10-05):** "When Artemis time +comes, we're going to pull that up into the kernel as well." As Hermes +became kernel-Hermes. Not this step. Today Artemis the VM is +`capsules/artemis/init.4th`: 550 lines, 77 words — a flat-pool disk manager +(header, free map, allocator, format and resume, Stadium admission for +allocated blocks, K total, cooling, reap, self-tests). + +## 1f. ACLs (discussed 2026-10-05; the word card is to change) + +**v3, as built** (`FABRIC-2.md` section H.3): identity carries its ACL as a +stack of cards with pinholes through them. Four cards, a closed set: VM, +word, block, message. An action consults only the cards for the dimensions +it touches. + +- Word card: the four fields in each dictionary entry (`acl_ttl`, + `acl_allow`, `acl_mode`, `acl_pinned`); per VM, since each VM has its own + dictionary. Checked at every word dispatch in the inner loop. +- Block card: `acl_allow` and `acl_ttl` in each block's metadata; policy in + `block-acl.4th`. +- Message card: the channel-open question kernel-Hermes puts to `ACL.4th`. +- VM card: the VM-level dimension. +- Creator ceiling: a child's ACL state is a snapshot of its parent's at + birth. +- Policy is FORTH; the fields and the hot-path check are C. +- With physics: a word's TTL is computed from its heat + (`heat/4 + 256`, capped), and an ACL is the patron whose leaving is + `EXPIRE`. + +The block, message and VM cards are decided on the kernel's side and carry +over under sections 1d and 1e. The word card does not: a v4 node has no +dispatch point at which to check it, and its TTL comes from per-word heat, +which v4 has not got (section 2.7). + +**Captain Bob, 2026-10-05,** asked whether the word card stays per word: +"I think it would be wise to change that as well, because as we move down +our little ladder here into the FPGA area, this is going to be where +pretty much our division point is going to be. We're going to block things +off and we're going to build little teeny teeny machines everywhere on the +fabric." + +**Reversed the same day:** "Now that I think about it, let's leave it +exactly as we're doing it in v3 — if we can figure out where to hook into +it to measure that." + +So the word card stays per word, as v3, provided a v4 node has a place to +check it. + +**Where a v4 node can hook, from the code:** + +- There is one. Every call of one word by another is the `call` opcode, + executed at one place in the engine: `v4/src/exec.c`, `case V4_OP_CALL`. + The node has the target's address there, before control moves. It is the + line where the per-call-target count was taken. +- The compiler lays down a `call` for every word that is not in-line + (`(CALL,)`, `v4/capsule/compile.v4:100`) and never turns a call into a + jump, so definitions compiled on the node all pass through it. + +**What does not pass through it:** + +- **In-line words.** 62 words are compiled as opcodes, not called, among + them `DUP DROP OVER SWAP ROT + - AND XOR OR @ ! +! 1+ 1- 2+ 2- NEGATE`. + v3 checks every one of these at every execution. Six must stay in line + whatever is decided, because a call would bury the return address: + `>R R> R@ I J LEAVE`. +- **`EXECUTE`.** It is `push ;` — the word is entered by a return, not a + call. +- **Hand-written jumps.** The assembled nucleus ends many words by jumping + to another (`: CR 10 jump EMIT`). A colon definition in a capsule does + not, so this shrinks as words move to the capsule. +- **Telling a word from a mere address.** Not every call target is a + dictionary entry: the assembled files define more routines than they + give headers to. The node must be able to tell, at the call, whether the + target has the three cells of an entry before it. + +**Intent, stated by Captain Bob 2026-10-05:** "Intent is for a runtime +check of a word. And the way we were originally doing it is the TTL was how +often the check would be performed. If the TTL was still valid, the word +would not get checked, in order to save the overhead of checking for +permissions every time." + +So: the check is at run time, per word, at the hook. The countdown is the +cheap part, done on every execution; the permission check itself is done +only when the countdown reaches zero. A check made only when a definition +is compiled does not meet the intent. + +What follows for the in-line words: to be checked at run time a word has +to pass through the hook, so it has to be called. The six that cannot be +called (`>R R> R@ I J LEAVE`) are the residue: they can only appear inside +a definition, and can only be checked when it is compiled. + +**The TTL is adaptive, as v3 (Captain Bob, 2026-10-05):** "A fixed TTL +would make no sense whatsoever. The hotter the word, the more frequently +it's checked." + +v3's policy, `capsules/ACL.4th` block 4003: a word's TTL is its own heat +divided by 4, plus 256, capped — the number of executions until its next +check. A hot word runs through its TTL sooner and so is checked more often +than a cold one, while each check is paid for by more executions. + +So a v4 node counts executions **per word**, at the call hook, for the +ACL's use, and `ACL-TTL-COMPUTE` reads that count as it does in v3. This is +a second count beside the per-opcode heat of section 2.7; in v3 the two are +one field. + +**Not yet settled, and not to be assumed:** + +- Whether the per-word count decays as v3's word heat does (Loop #3), and + whether a word is then a Stadium patron as in v3 or only the 32 opcodes + are. +- How the node tells a dictionary entry from a bare address at the call. +- `EXECUTE`, which enters a word by a return. + +## 1g. Correction: every kind of patron keeps its own accounts + +Captain Bob, 2026-10-05: "You're looking at it all wrong. Think of v3. The +VM is not the same thing as a word. It has a different set of accounting +rules in the Stadium. Same for any other patron. They define their own +accounting rules. Look at how the code is written." + +Sections 1f and 2 above treat heat as one number per thing and ask where +to put it. That is wrong, and the code shows it. The generic engine +(`kernel/src/vm/stadium.c`) knows only a cell, a VM's quota and reservoir, +admission, eviction and the conservation check. What a patron *is*, and +how it is charged, is defined by its own layer: + +| Patron | Layer | Its own rules | +|---|---|---| +| VM | `kernel/src/capsule/capsule_vm_physics.c`; quotas in `stadium.c` | Fleet-wide: the heat of all live VMs sums to 1.0. Born at zero. Touched only at dispatch points (`BIRTH`, `KILL`, `VM-EXEC`, `VM-CALL`, `VM-STEP`), which pull heat from the rest of the fleet toward it by elapsed ticks times a slope. On death its heat goes up the parent chain to Hera. Its Stadium quota and reservoir are granted from its parent. | +| Word | `kernel/src/vm/stadium_words.c` | One cell per (VM, word ID). Admitted on first dispatch with a starter grant. Every dispatch pulls a quantum from the VM's reservoir, never below a floor of one third. Cools by a fraction of its own heat per tick, back to the reservoir. Unpinned. Leaves by `COOL`. | +| Block | `kernel/src/vm/stadium_blocks.c` | One cell per (VM, LBN), in a hash table since LBNs are sparse. Its own quantum and cooling rate. Leaves by `MIGRATE`. | +| Message | `kernel/src/vm/kernel_hermes.c` | Admission costs the sender one slot's share. Decays by a fixed factor each time it is applied, and what decays is *consumed*, not returned. A ledger of held, pulled, returned and consumed must balance exactly. | + +Each layer's constants are its own Kconfig symbols +(`STADIUM_WORD_HEAT_QUANTUM`, `STADIUM_WORD_COOL_RATE_Q48`, +`STADIUM_BLOCK_HEAT_QUANTUM`, `STADIUM_BLOCK_COOL_RATE_Q48`, +`STADIUM_CAPACITY_TICK`). Per VM, resident heat plus reservoir is 1.0. + +**A v3 word already has more than one account.** Its Stadium cell is one. +The `execution_heat` field of its dictionary entry is another, with a +different rule (a flat amount per tick, not a fraction), and +`stadium_words.c` says of admission: "execution_heat plays no role". The +ACL's TTL reads `execution_heat`. + +So these earlier statements are withdrawn: + +- "A v4 node has two counts where v3 has one field" (section 1f). v3 has + separate accounts already; that is the design, not an anomaly. +- "Whether a word is a Stadium patron or only the 32 opcodes are" (section + 1f, open list). It is not either-or. The opcode is a kind of patron with + rules of its own, as the word, the VM, the block and the message each + are. + +What is actually open is what the opcode's own rules are. + +## 1h. The opcode's accounts: left unwired for now (2026-10-05) + +Asked what the opcode's own accounting rules are, Captain Bob: "For the +moment, I think we're going to leave it unwired and kind of maybe just +make some observations on it and see if we even need it, as far as +opcodes are concerned. I think we will when we go to FPGA, but for now, +let's just hang on to the thought and make sure that it's available if +needed." + +So: + +- No opcode patron layer is built. Opcodes are not wired to the Stadium. +- The node goes on counting each opcode as it retires + (`v4_heat.op[32]`, `v4/src/heat.c`), and the anti-clock. Those counts + are real and are there to be observed. Nothing reads them to decide + anything. +- This amends section 2.7 and the reading in section 1c: a VM's word + patrons do **not** become opcode patrons now. + +**Reading, stated to Captain Bob and to be corrected if wrong:** with +opcodes unwired and v4 = v3 functionally, a word on v4 keeps a word's +accounts as v3 has them — its Stadium cell by `stadium_words.c`'s rules, +and the `execution_heat` the ACL reads — taken at the call hook of +section 1f, which is where a v4 node dispatches a word. + +## 1i. Asking the kernel; Hera as process manager (ruled 2026-10-05) + +**v3, as built:** a kernel word is a C function `void f(VM *vm)` registered +by name (`register_word`); it takes its arguments from the VM's data stack +and leaves its results there. Some interpret text on the same VM while +they run (`EXEC`), saving and restoring the interpreter's state around it. + +**The v4 design already has the carrier** (`DECOMPOSITION.md` section 6): +a node's ports are addresses; "a write blocks until the neighbour reads. +This is the GA144 model. No instruction is added." + +**Put to Captain Bob:** a node asks the kernel by a blocking write to a +port, served between the node's instructions; a kernel word is an ordinary +dictionary entry whose body stores its request number to the port; kernel +words are made by handing the node text at boot. + +**Ruling:** "Yes, and Hera will be the process manager via compudynamics +per node." + +The second half is recorded as said and is not yet designed. It bears on +the open question of section 1e — what moves control between nodes, and +when — which `ENGINE.md` leaves to step 6. + +## 1j. Where a v4 word's accounts live (ruled 2026-10-05) + +**Found:** `struct VM` (`v3/include/vm.h`) is both the record the kernel +keeps for a VM and v3's engine state. The kernel and the physics code work +directly on dictionary records: about 30 source files reach into a +`DictEntry`'s fields, several hundred times. The heartbeat's decay walks +the record list by `link` and resumes by `word_id`; parity hashes it; the +kernel pins `BIRTH` by setting two of its fields. A v3 word's accounts are +that C record: `execution_heat`, `physics`, the four ACL fields, the +transition metrics, the word ID. A v4 word has no such record. + +**Put to Captain Bob:** +A — the code is the node's and the accounts are the kernel's, joined by +word ID: for each word on a node the kernel keeps v3's own `DictEntry`, +every account field as it is; the node tells the kernel when a word is +defined or forgotten; at each `call` the kernel does on the record what +v3's inner loop does; v3's physics, heartbeat, ACL words, Stadium word +layer and parity run on the records unchanged. +B — the accounts go into each entry's header in the node's memory, and +the 30 files change to reach them through accessors. + +**Ruling:** "A is good." + +Noted with it: on the FPGA a node's counters are meant to be in the fabric, +not in a kernel record. A is for v4 = v3 now. + +## 2. Row 3: physics and per-word heat + +### 2.1 What v3 does + +**For every word a definition executes** — the inner loop, +`kernel/src/vm/vm_core.c:757-880`, and the same on the interpreter's path at +`:1053-1110`: + +1. **Decay (Loop #3).** The word's heat is reduced by the ticks since it was + last touched times the decay slope, in Q48.16 + (`physics_metadata_apply_linear_decay`, `v3/src/physics_metadata.c`). Not + for a frozen word, and not while L8 has gated Loop #3 off. +2. **Heat (Loop #1).** The word's `execution_heat` is raised by one. +3. **Stadium.** The word's ID, the VM's ID and the tick go to the Stadium's + conserved heat wire (`stadium_word_dispatch`). +4. **Rolling window (Loop #2).** The word's ID is recorded + (`rolling_window_record_execution`). +5. **Pipelining (Loop #4).** The transition from the previous word is + recorded, the most likely next word is worked out, and a likely one is + promoted to the hot-words cache. +6. **ACL.** The word's TTL is counted down, or the word rechecked at zero; a + denied word stops the definition. +7. The word runs. Then its physics record is touched (temperature, time) and + the heartbeat's count of words executed is raised. + +**On every heartbeat tick** — `kernel/src/vm/vm_runtime.c`, driven by the +timer interrupt: `vm_tick`; the window tuner (Loop #5, `:158`); the slope +validator (Loop #6, `:228`); background decay (`:355`); the L8 mode update +(`:400`), which turns loops on and off; the inference engine (`:579`); and a +published snapshot. + +**What each word carries** — `DictEntry`, `v3/include/vm.h:342-358`: +`execution_heat`; a `DictPhysics` record (temperature, last decay tick, mass, +state flags); a pointer to its transition metrics; a stable `word_id`; the +four ACL fields; and the `WORD_FROZEN` and `WORD_PINNED` flags. + +All of this is running before the first prompt. POST itself executes under +it. + +### 2.2 What v4 has + +- A v4 word is native code. Executing one is the `call` opcode going to its + address. There is no inner loop, so there is no place in software where + v3's seven steps could happen. +- Short words are not called at all. `DUP`, `+`, `@`, `>R` and about fifty + others are compiled in line as opcodes (`header DUP inline`, + `v4/capsule/forth.v4`). At run time nothing says "this was `DUP`". +- The engine counts three things as instructions retire (`v4/src/exec.c`): + each opcode's count (32 counters), the anti-clock, and a count for each + call target. +- **The call-target count is a stand-in, by its own account.** It is a C + array beside the node, 4096 entries, written 2026-10-02 + (`v4/src/heat.c`). A call to an address of 4096 or above is silently not + counted. The nucleus runs to about word 6300 and capsule definitions start + at 8192, so some assembled words and every capsule word get nothing. No + FORTH word can read it: `ACL-HEAT@` returns 0 (`v4/capsule/acl.v4:80`). +- A dictionary entry is three cells before the code — flags, name, link + (`v4/capsule/dict.v4`). It has no heat, no physics record, no word ID. +- There is no decay, rolling window, pipelining, inference, L8, heartbeat + or Stadium wire on the node. + +### 2.3 What the v4 design documents say + +The documents ruled on 2026-10-01 do not say "as v3". They say: + +- `JUSTIFICATION.md` section 4, item 4: "Compudynamics as a side effect of + execution. Heat counters, the anti-clock, and the heartbeat are driven by + instruction retirement in hardware. They cost no instructions." +- `DECOMPOSITION.md` section 1.4: "every `call` increments the heat counter + of its target". +- `DECOMPOSITION.md` section 7: registers `HEAT-OP[0..31]`, + `HEAT-CALL[...]`, `ANTICLOCK`, `HEARTBEAT`, `GOV-*`. +- `DECOMPOSITION.md` sections 5.19 and 5.23 use the words "heat table" for + `HEAT-CALL` (`ENTROPY@`, `FREEZE-WORD`). +- D-6, **deferred**: "Which heat structures exist in hardware: per-opcode + counters only, or also per-call-target and word-to-word transition + counters. … The golden model implements per-opcode and per-call-target + heat in the meantime." +- Section 5.22: the six `PIPELINING-*` words are retired, to return "if D-6 + adds transition counters". Section 5.21: the hot-words cache words are + retired as having no equivalent on a node. + +So the 4096-entry array is the "in the meantime" of D-6, and "heat table" +is these documents' own term. + +### 2.4 The conflict + +Today's ruling and those documents do not say the same thing, in three +places. Each needs a ruling; none is mine to settle. + +**A. Where a word's heat is kept.** v3: in the word's own dictionary entry. +The documents: in the node, as a register indexed by call target. + +**B. What counts as a word.** v3 counts every execution of `DUP` as +`DUP`'s. v4 compiles `DUP` in line; what is counted is the `dup` opcode, +and a word built of several opcodes in line (`2DUP` is `over over`) leaves +no count of its own. v3's per-word heat for these words cannot be had from +a v4 node as it compiles now. + +**C. Which loops exist.** v3 runs all seven and L8 before the prompt. The +documents retire Loop #4 (pipelining) and the hot-words cache, and leave +the rest to registers whose behaviour is not written down beyond their +names. + +### 2.5 What each answer would take + +Offered so that the ruling can be made knowing its cost. Not a plan. + +**If heat is kept as v3 keeps it (A, v3's way).** Each entry gains cells +before its code, beside flags, name and link: heat, last-decay tick, word +ID, and what of `DictPhysics` is kept. `dict.v4`'s entry words, the header +macro of the text assembler and every assembled `header` line account for +them. The node, on `call`, finds the entry from the target address and does +steps 1 to 5 of section 2.1. Heat is then ordinary memory: `HEAT@` is a +fetch, and it is inside the dictionary, so the dictionary hash either +covers it or is defined to skip it, as v3's canonical hash skips it. + +**If heat is kept as the documents have it (A, the node's way).** The +call-target counts become part of the node, cover every address of it, and +are readable through `HEAT-CALL` as a memory-mapped register, which needs +D-4, the memory map, settled. This is not "as v3" in where heat lives; it +is in what is counted. + +**B either way.** Three ways, and they are not equivalent: + +1. In-line words are counted by opcode: `DUP`'s heat is `HEAT-OP[dup]`. + Words that are more than one opcode in line have no heat. Not as v3. +2. Nothing is compiled in line except what must be (`>R`, `R>`, `R@`, `I`, + `J`, `LEAVE`: a call would bury the return address). Every other word is + called and so counted. As v3 for those words; slower, and the six that + must stay in line are still uncounted. +3. The compiler lays down a marker the node counts and does not execute. + That is a new opcode or a new use of one, which is a change to the + instruction set. + +**C.** For each of Loops #2 to #7 and L8: where its state lives, what +advances it, and what the heartbeat is on a node that has no timer of its +own (v3's is the kernel's timer interrupt; the documents' is "in the +fabric"). v3's code for each is the reference: `rolling_window_of_truth.c`, +`physics_pipelining_metrics.c`, `inference_engine.c`, `ssm_jacquard.c`, +`vm_runtime.c`. + +### 2.6 What depends on this + +- **Decomposition.** Moving a word from assembler to a colon definition + does not change how it is called, but it turns in-line opcodes into + calls, which changes what is counted under every answer to B. It should + wait for B. +- **ACL.** v3's TTL comes from heat (`ACL-TTL-COMPUTE`). With `ACL-HEAT@` + returning 0 every word has the same TTL. Row 8 waits for A. +- **POST's other 500 cases** (row 4) include the physics-freeze and + inference modules, which test words that read and write heat. +- **K.** Nothing computes K on v4. It is a figure over heat; it waits for A + and C. + +### 2.7 Ruling (Captain Bob, 2026-10-05) + +> One more time: v4 = v3 functionally. We will use [heat accumulation] on +> 32 opcodes rather than words. Before, a word was our smallest unit; now +> it is the opcode. + +This settles section 2.4: + +- **A.** Heat is kept per opcode: 32 accumulators in the node. Not in a + word's dictionary entry, and not per call target. +- **B.** The unit is the opcode. Whether a word is called or compiled in + line makes no difference to what is counted. `call` is one of the 32 and + is counted as itself. +- **C.** v4 = v3 functionally, so every loop v3 runs before its prompt + runs on v4, over opcodes where v3's runs over words. + +What follows from it, and is not yet done: + +- The per-call-target array (`v4/src/heat.c`, `call[]`, the freeze mask, + `v4_heat_on_call`) has no place and is to be removed, with `HEAT-CALL` + in `DECOMPOSITION.md` sections 1.4, 5.19, 5.23 and 7. D-6 is answered: + per-opcode. +- Sections 5.21 and 5.22 of `DECOMPOSITION.md` retire pipelining and the + hot-words cache. Under C they are not retired. +- Decomposition no longer waits on this: moving a word from assembler to a + colon definition changes which opcodes run, and those are counted + wherever the code is. + +Still open, for the words v3 keys by word and v4 must key by something: + +- **ACL.** Access control is per word, and v3 works a word's TTL out from + that word's heat (`ACL-TTL-COMPUTE`). A v4 word has no heat of its own. +- **Freeze and pin.** v3 freezes or pins a word's heat (`FREEZE-WORD`, + `WORD_PINNED`). In v4 what is frozen is an opcode, or nothing. +- **Hot-words cache.** v3 promotes a hot word so that it is found faster. + A v4 opcode is not looked up. +- **Heartbeat.** What ticks it on a node (v3: the kernel's timer + interrupt). + +## 3. Stand-ins in v4, as found 2026-10-05 + +Each describes itself as one. None has been changed. + +| What | Where | Says of itself | +|---|---|---| +| Per-call-target heat | `v4/src/heat.c`, `v4/include/v4/heat.h` | "in the meantime" (D-6) | +| `ACL-HEAT@` | `v4/capsule/acl.v4:80` | returns 0; "not readable from a programme yet" | +| Console | `v4/include/v4/node.h:136`, `:156` | "the model stands in for the console" until the mesh exists | +| Block storage | `v4/include/v4/node.h:248`, D-19 | "the model stands in" until the mesh carries the storage service | +| Memory map | `v4/tests/host_map.h`, D-4 deferred | a test header the product image is built from | +| CA public key | `v4/capsule/ACL.fth:40` | "placeholders, as in v3" | +| Address-dependent POST cases | `v4/tools/post79_rules.py`, `ADDRESS` | check how many values are left, not which | + +`NUCLEUS.md` section 3 puts Q48, logging, ACL and the StarForth extensions +out of scope until FORTH-79 is accepted. Under the ruling at the head of +this file they are in scope, since v3 has them before its prompt. That +section is to be corrected once the rows above are ruled. diff --git a/docs/v4.0.0/plans/2026-10-06-step6-storage.md b/docs/v4.0.0/plans/2026-10-06-step6-storage.md new file mode 100644 index 00000000..da436e2e --- /dev/null +++ b/docs/v4.0.0/plans/2026-10-06-step6-storage.md @@ -0,0 +1,142 @@ +# Step 6: Storage Implementation Plan (revised 2026-10-07) + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Every v4 node reads and writes blocks by asking the kernel directly, and the kernel answers from v3's block subsystem (MESH.md acceptance 3 as changed 2026-10-07). + +**Architecture:** `BLOCK` and its family keep their two buffers; the one word under them makes a kernel request on port 0 (`ENGINE.md` 3.3): block number and buffer address on the data stack, status left in their place. `v4/system/blocks.c` serves the two requests for any node from v3's one block chain. Nothing is routed and no node is told where storage is. + +**Tech Stack:** C99 (engine, strict flags), v3's `block_subsystem.c` and `blkio_*.c` (gnu99), the v4 nucleus dialect (`v4/capsule/*.v4`), `make -C v4`, `make -f kernel/Makefile`. + +**Spec:** `docs/v4.0.0/MESH.md` section 8 (8.1 to 8.4; 8.6 lists what was withdrawn), section 9's ruling of 2026-10-07, and step 6 in section 10. `docs/v4.0.0/ENGINE.md` 3.3. `docs/v4.0.0/V3-PARITY.md` 1d. + +**History:** the first version of this plan built storage as a device speaking messages, with private drives and nodes that had none. Tasks 1 and 2 of it were committed (`0e761cb1`, `4a505a15`) and Tasks 3 and 4 were working in the tree when Captain Bob ruled, on 2026-10-07, that it had left the OS as designed. This version keeps what still serves and removes the rest. + +## Global Constraints + +- Work on branch `StarForth-v4.0.0` in the main checkout. No new branch, no stash, no worktree. +- Commit and push after every task. End commit messages with `Co-Authored-By: Claude Opus 5.5 `. +- v4 follows the OS as designed: before building any mechanism, read how v3 does it, and report a departure instead of building it. +- No stubs, no stand-ins. If something cannot be built as intended, stop and report. +- Do not fix anything in v3 that this plan does not name. +- A block is 1024 characters, 256 cells, four characters to a cell, the first lowest; a read leaves the rest of each cell zero and a write takes the low 32 bits. +- The requests: `V4_REQ_BLOCK_READ` is -1 and `V4_REQ_BLOCK_WRITE` is -2, each `( n waddr -- status )`. Status: 0 worked, 2 refused, 3 no such block. +- Node error codes: 13 "Block out of range" (existing), 17 "Storage refused". A block number below 1 is error 13, as it was. +- Before any QEMU run read `.claude/CLAUDE.md` "Running / Acceptance" and the memory note `acceptance-test-rules.md`. One QEMU at a time, in the foreground, `clean` before `qemu`, all three ISAs, logs kept. +- Access (claim, ACL, Stadium touch) is not checked in this step; do not add it. + +## Review Focus + +1. **A buffer address that is not in the node's memory.** A request whose 256 cells run off the end of memory, or begin below 0. Expected: status 2, no memory touched, the node not harmed. Test in Task 2. +2. **A write that is refused.** `UPDATE` then `SAVE-BUFFERS` on a disk the subsystem will not write. Expected: "Storage refused", the prompt, and the buffer empty so the next `BLOCK` asks again. Test in Task 3. +3. **A request from a node that is not Hera.** An outer node's block request is served; its request for a node (`NODE-BORN`) still is not. Test in Task 5. +4. **Two nodes writing at once.** Expected: every block of both reaches storage. Test in Task 5. +5. **A request number that is neither a block request nor a named word.** Expected: error 12 on the node, as today. Existing test; must still pass. + +--- + +### Task 1: v3's block subsystem — done (`0e761cb1`) + +`blk_subsys_init` takes no `VM`; the state is a chain selected through a pointer. Accepted on three v3-configuration boots. + +- [ ] **Step 1 (awaits Captain Bob):** with no second chain wanted any more, `blk_chain_new` and `blk_chain_select` serve nothing. Either they are taken out again, leaving only the `VM` argument's removal, with three v3-configuration boots to accept it; or they stay, unused. Do what he rules. + +--- + +### Task 2: The kernel serves block requests + +**Files:** +- Delete: `v4/include/v4/storage.h`, `v4/system/storage.c`, `v4/system/store_v3.c`, `v4/tests/test_store.c`; the four `V4_MSG_BLOCK_*` types and `V4_STORE_*` in `v4/include/v4/message.h` +- Create: `v4/include/v4/blocks.h`, `v4/system/blocks.c`, `v4/tests/test_blocks.c` +- Modify: `v4/Makefile` (the storage rules become: v3's block objects and `blocks.c`, built with v3's flags, linked into tests named `test_blocks*.c` and `test_host_*.c`) + +**Interfaces:** +- Produces, in `blocks.h`: + ```c + #define V4_REQ_BLOCK_READ (-1) + #define V4_REQ_BLOCK_WRITE (-2) + #define V4_BLOCK_OK 0 + #define V4_BLOCK_REFUSED 2 + #define V4_BLOCK_RANGE 3 + /* If `request` is a block request, serve it -- ( n waddr -- status ) on the + * node's data stack -- and return 1; otherwise touch nothing and return 0. */ + int v4_blocks_serve(v4_node *n, v4_cell request); + ``` + +- [ ] **Step 1: Write the failing test** `test_blocks.c`: one chain (2080 KiB of RAM and a raw device of 64 blocks) and a bare `v4_node`. Push a number and an address, call `v4_blocks_serve`, pop the status. Checks: a write then a read of block 2050 gives the same 256 cells back with the high bits of each cell zero; block 20 is the fast RAM; block 0, a negative number, 2112 and (at 64 bits) 4294967296 are status 3; an address whose 256 cells run past `V4_NODE_WORDS`, and a negative address, are status 2 with memory unchanged (Review Focus 1); a block written by v3's own `blk_get_buffer`/`blk_update`/`blk_flush` reads back; a request of 5 returns 0 and leaves the stack as it was. +- [ ] **Step 2: Run** `make -C v4 run-64-test_blocks.c`: fails to build, `v4/blocks.h` does not exist. +- [ ] **Step 3: Write `blocks.c`.** It includes `v4/blocks.h`, `v4/node.h` and v3's `block_subsystem.h`. For a read: pop the address and the number; refuse a bad address with `v4_node_addr_ok` on the first and last cell; `blk_is_valid`, then `blk_get_buffer(n, 0)`, and each cell is its four bytes, first lowest. For a write: `blk_get_buffer(n, 1)`, copy the low four bytes of each cell, `blk_update`, `blk_flush`; any of those failing is `V4_BLOCK_REFUSED`. A number below 1 or above 0xFFFFFFFF is `V4_BLOCK_RANGE` without calling v3. +- [ ] **Step 4: Remove the message device** and its test, types and Makefile rules. +- [ ] **Step 5: Run** `make -C v4 run-32-test_blocks.c run-64-test_blocks.c` and the two sanitizer targets: 0 failures. +- [ ] **Step 6: Commit** `feat(v4.0.0): the kernel serves block requests from v3's block chain; the message device is withdrawn` and push. + +--- + +### Task 3: The node asks its kernel + +**Files:** +- Modify: `v4/capsule/blocks.v4` (header comment, `(DEVICE)`; `(FIND-BUF)` and `LOAD` get their sign test back), `v4/capsule/core.v4` (error list), `v4/capsule/quit.v4` (message 17; `STORAGE` and message 18 removed) +- Modify: `v4/tests/host_map.h` (`(STORE)` and `(B-TO)` go; the two request numbers come in as constants), `v4/tools/mkimage.c` +- Modify: `v4/tests/test_host_quit.c` (its `kernel_serve` calls `v4_blocks_serve` first; the storage port, its routes and the private-drive cases go) +- Already done in the tree and kept: the four registers removed from `node.h`, `node.c`, `image.h`, `image.c`, `mkimage.c`, `test_node.c` + +- [ ] **Step 1: Change the tests first.** In `test_host_quit.c` keep `disk` as the chain's fast RAM, the range checks at 2112 and 3000, and the refused-write case, now on a blank RAM-backed disk of 2048 blocks attached to the one chain after the raw device and never confirmed (its first block is 2112). Remove the cases for no storage, a private drive and a number 32 bits do not hold being reached; `-1 BLOCK` is "Block out of range" at both widths again. +- [ ] **Step 2: Run** `make -C v4 run-64-test_host_quit.c`: fails, the nucleus still asks by message. +- [ ] **Step 3: `(DEVICE)`:** + ``` + \ ( command i -- ) read buffer i's block from storage, command 1, or + \ write it, command 2: a request of this node's kernel ( n waddr -- status ). + : (DEVICE) + dup push SWAP push \ i R: i command + dup (B) + a! @ SWAP (BUF) \ n waddr + pop -1 + if RD drop BLOCK-WRITE# jump ASK + RD: drop BLOCK-READ# + ASK: (PORT) b! !b \ status + pop SWAP \ i status + if FINE + push (B) + a! 0 !+ 0 ! pop \ nothing is in the buffer + -2 + if E17 drop NODE-ERROR b! 13 !b ; + E17: drop NODE-ERROR b! 17 !b ; + FINE: drop drop ; + ``` + to be proven by Step 1's tests. Remove `(B-ASK)`, `(B-DATA)`, `(B-AWAIT)`, `(B-END)` and `STORAGE`. +- [ ] **Step 4: Run** `make -C v4 run-32-test_host_quit.c run-64-test_host_quit.c run-64-test_node.c`: 0 failures. Go straight on; Tasks 3, 4 and 5 commit together. + +--- + +### Task 4: The lone node + +**Files:** `v4/include/v4/boot.h`, `v4/system/boot.c`, `v4/tools/hosted.c`, `v4/Makefile` + +- [ ] **Step 1:** In `boot.c` a request on the kernel port is offered to `v4_blocks_serve` before the host's named words. Remove the storage port, `STORAGE_TOLD` and the `storage` member of `v4_boot`. `v4_boot_run(const v4_boot *b)` keeps its one argument. +- [ ] **Step 2:** `hosted.c` calls `sf_time_init` and `blk_subsys_init` on 2080 KiB of static RAM, as hosted v3 does with no disk, and nothing else. +- [ ] **Step 3: Run** `make -C v4 hosted-check`: `POST: PASSED`, 538 of 538, on the three ISAs. + +--- + +### Task 5: The unit of five + +**Files:** `v4/tests/test_host_unit.c`, `capsules/v4/hera.4th` + +- [ ] **Step 1: Write the failing checks.** Hera's `BIRTH` no longer sends POST: after `10 UNIT`, exactly one POST tally has been seen, Hera's, and the four parities and their one dictionary hash are as before. Node 12 writes block 2100 and Hera, 11, 13 and 14 each read it. An outer node asked to do `NODE-BORN` is refused, as before (Review Focus 3). Hera sets node 12 writing ten blocks and writes ten of her own meanwhile, and all twenty reach the chain (Review Focus 4). +- [ ] **Step 2: Run** and see them fail. Then: in `host_born`, every node born gets the kernel on its port 0 — a device whose `take` serves `v4_blocks_serve` for that node and refuses everything else; Hera's existing kernel device does the same before it serves her own requests. Remove the two message devices, the storage routes and `STORAGE` lines. In `hera.4th`, `BIRTH` sends `v4:forth79.4th` and not `v4:post79.4th`; keep every block to 16 lines of 64 characters and run `build/tools/mkcapsule --lint capsules/`. +- [ ] **Step 3: Run** `make -C v4 run-64-test_host_unit.c`: 0 failures. Then `make -C v4 -k test`, `make -C v4 sanitize`, `make -C v4 hosted-check`. +- [ ] **Step 4: Commit** Tasks 3, 4 and 5: `feat(v4.0.0): every node asks the kernel for its blocks; a born node is not POSTed` and push. + +--- + +### Task 6: Bare metal + +**Files:** `kernel/src/kernel_main.c:518-523,620-668`, `kernel/src/v4/sk_v4.c`, `kernel/Makefile:616-624` + +- [ ] **Step 1:** Read `kernel_main.c:600-700` and list what the chain's setup needs that has not happened by line 523. Have the chain set up before the v4 node starts, leaving the v3 path's order of events as it is. If something it needs cannot be had by then, report and stop. +- [ ] **Step 2:** `sk_v4.c` loses `sk_v4_disk`; `v4/system/blocks.c` is linked. +- [ ] **Step 3: Acceptance.** The three bare-metal boots. Each log: `PARITY:V4_POST tests=538 pass=538 fail=0`, `POST: PASSED`, the typed session of the previous step, and `2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ .` printing `65`. +- [ ] **Step 4: Commit** with the logs: `feat(v4.0.0): bare metal -- the node's blocks are the kernel's block chain` and push. + +--- + +### Task 7: Write it up + +- [ ] **Step 1:** MESH.md step 6 as done, in the manner of step 5; `v4/README.md`; `V3-PARITY.md` 1d (what goes through v3's subsystem now, what is still skipped). Under "not as intended yet": access not checked; POST is still a capsule Hera loads until the kernel holds its cases. +- [ ] **Step 2: Commit** `docs(v4.0.0): storage -- step 6 done` and push. diff --git a/docs/v4.0.0/plans/2026-10-07-step6b-post.md b/docs/v4.0.0/plans/2026-10-07-step6b-post.md new file mode 100644 index 00000000..a1cde0e9 --- /dev/null +++ b/docs/v4.0.0/plans/2026-10-07-step6b-post.md @@ -0,0 +1,138 @@ +# Step 6b: POST Is the Kernel's — Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** The kernel holds POST's cases and feeds them to Hera itself; nothing of POST's harness is in her dictionary. + +**Architecture:** `mkpost.py` writes a C table of cases instead of a capsule. A runner, `v4/system/post.c`, sends each case's lines to the node through a callback its host supplies, keeps what the node prints, reads the node's data stack from outside, and judges. `boot.c` calls it where it loaded the POST capsule. The two nucleus variables the capsule harness needed go. + +**Tech Stack:** C99, Python 3 (`v4/tools/mkpost.py`), the v4 nucleus dialect, `make -C v4`, `make -f kernel/Makefile`. + +**Spec:** `docs/v4.0.0/NUCLEUS.md` 6.3 and section 7; acceptance in `docs/v4.0.0/MESH.md` step 6b. + +## Global Constraints + +- Branch `StarForth-v4.0.0`, main checkout. No new branch, no stash, no worktree. Commit and push after every task; end messages with `Co-Authored-By: Claude Opus 5.5 `. +- v4 follows the OS as designed: read how v3 does a thing before building it, and report a departure instead of building it. +- No stubs or stand-ins. Do not fix anything in v3. +- The cases are the same 538, with the same lines, as `capsules/v4/post79.4th` has today: the generator's choice of cases and its cutting of lines are not changed. +- What the cases define stays in the dictionary; the system is sealed after POST. +- Boot lines, in order: `PARITY:V4_NUCLEUS`, `PARITY:V4_CAPSULE name=v4:forth79.4th`, `PARITY:V4_POST tests=N pass=N fail=N`, `PARITY:V4_SYSTEM word_count=N dict_hash=0x%016llx`, `PARITY:OK`, `POST: PASSED`. +- Before any QEMU run read `.claude/CLAUDE.md` "Running / Acceptance" and the memory note `acceptance-test-rules.md`. One QEMU at a time, `clean` before `qemu`, all three ISAs, logs kept. Never delete a log. + +## Review Focus + +1. **A case whose line never ends** (a loop, or a word waiting for the keyboard). Expected: the generator already leaves such cases out; the runner treats a line that does not come back as a failed case and POST as failed, and does not hang the boot silently. Test in Task 2. +2. **A case that prints more than the runner keeps.** Expected: it fails by name; nothing is written past the buffer. Test in Task 2. +3. **A case that leaves more on the stack than the table holds, or a full stack.** Expected: compared by depth first; a mismatch fails the case. Test in Task 2. +4. **An error in the line that sets the state** (`DECIMAL FORTH DEFINITIONS`). Expected: the case fails by name. Test in Task 2. +5. **The dictionary filling during POST**, now that nothing is forgotten. Expected: 538 of 538 with room to spare (measured about 1,290 of 5,632 cells); if a case fails for want of room, stop and report. Checked in Task 4. + +--- + +### Task 1: The generator writes a table + +**Files:** Modify `v4/tools/mkpost.py`, `v4/Makefile` (`post79` target's comment); Create `v4/include/v4/post.h`, `v4/system/post_cases.c` (generated); Regenerate `docs/v4.0.0/POST79.md` + +**Interfaces — Produces** (`post.h`): +```c +#define V4_POST_STACK 0 /* the stack and the output are compared */ +#define V4_POST_DEPTH 1 /* only how many values are left; the output is not compared */ +#define V4_POST_DEPTH_OUTPUT 2 /* how many values, and the output */ +#define V4_POST_ERROR 3 /* it must end in an error; nothing else is compared */ +typedef struct { + const char *name; + const char *const *lines; /* line_count of them */ + unsigned line_count; + int expect; /* V4_POST_* */ + const long long *stack; /* depth values, the deepest first */ + unsigned depth; + const char *output; /* output_len characters */ + unsigned output_len; +} v4_post_case; +extern const v4_post_case v4_post_cases[]; +extern const unsigned v4_post_case_count; +``` + +- [ ] **Step 1:** In `mkpost.py`, keep everything up to the choice and cutting of cases as it is. Replace the writing of blocks: for each case keep `lines` with the `T| ` prefix taken off, and the expectation as data (the mode, the stack list, the output string) where `expectation()` now returns harness lines. Write `v4/system/post_cases.c`: one `static const char *const` array of lines and one `static const long long` array of stack values per case, then the table. Escape every character of a line or an output that is not printable ASCII, and `"` and `\`, as octal. Remove `HARNESS` and the block writer; `OUTPUT` becomes the C file. `POST79.md`'s header line says the cases are in `v4/system/post_cases.c`. +- [ ] **Step 2: Check the count before running it.** `grep -c '^T{ ' capsules/v4/post79.4th` is 538. Run `make -C v4 post79`; the report says 538 cases, and `grep -c '^ { "' v4/system/post_cases.c` is 538. If the number differs, stop: the generator's choice of cases changed. +- [ ] **Step 3: Check the lines are the same.** A one-off script in the scratchpad: the `T| ` lines of the old capsule, in order with the prefix removed, equal the table's lines in order. Zero differences. +- [ ] **Step 4:** `cc -std=c99 -Wall -Wextra -Wpedantic -Werror -Iv4/include -DV4_CELL_BITS=64 -c v4/system/post_cases.c -o /dev/null` compiles clean. +- [ ] **Step 5: Commit** `feat(v4.0.0): POST's cases as a table the kernel holds` and push. (The capsule is still there and still what the boot runs.) + +--- + +### Task 2: The runner + +**Files:** Create `v4/system/post.c`, `v4/tests/test_host_post.c`; Modify `v4/include/v4/post.h`, `v4/Makefile` (tests named `test_host_post*.c` link `post.c`) + +**Interfaces — Produces:** +```c +#define V4_POST_OUT 1024u /* the most of a case's printing that is kept */ +typedef struct { + void *self; + v4_node *n; /* the node POST is run on: its data stack is read and emptied */ + /* Send the node a line and run it to its end. What it prints is put at + * `out`, at most `cap` characters, and *len is how many it printed in + * all. Returns V4_TEXT_QUIT, V4_TEXT_COMPLETED or V4_TEXT_ERROR + * (message.h), or a negative number if the line did not come back. */ + int (*line)(void *self, const char *text, unsigned text_len, char *out, unsigned cap, unsigned *len); + void (*say)(void *self, const char *text, unsigned len); /* the console */ +} v4_post_host; +typedef struct { unsigned tests, pass, fail; } v4_post_tally; +/* Run the cases. Prints a line for each failing case and the PARITY:V4_POST + * line. Returns 1 if none failed. */ +int v4_post_run(const v4_post_host *h, const v4_post_case *cases, unsigned count, v4_post_tally *tally); +``` + +- [ ] **Step 1: Write the failing test** `test_host_post.c`: a host node with the nucleus assembled as `test_host_quit.c` assembles it, a kernel that serves its requests, and a `line` callback built on the same exchange of messages that test's `say` uses, returning the raw text and how the line ended. Cases written in the test, each with the verdict it must get: + - `1 2 +` expecting stack `3`, no output: passes; `5 DUP . . CR` expecting empty stack and `5 5 \n`: passes; + - `1 2 +` expecting `4`: fails; expecting two values: fails (Review Focus 3); + - `65 EMIT` expecting output `B`: fails; expecting `A`: passes; + - `NOSUCHWORD` expecting an error: passes; expecting stack empty: fails; + - `1 2 +` expecting an error: fails; + - a case of two lines, `: PQ 7 ;` then `PQ`, expecting `7`: passes, and afterwards `PQ` is still a word on the node; + - a depth-only case `HERE` expecting depth 1: passes; depth 2: fails; + - a case printing 2,000 characters: fails by name, and the byte after the runner's buffer is untouched (Review Focus 2); + - a `line` callback that returns -1 for one case: that case fails, the rest are still judged, and the run returns 0 (Review Focus 1); + - with `BASE` left at 16 and a non-empty stack before a case, the case still sees decimal and an empty stack; + - a callback that makes the state line end in an error: the case fails by name (Review Focus 4). + The tally and the `PARITY:V4_POST tests=N pass=N fail=N` line match the count; each failing case is named in a `POST FAIL: ` line; no passing case's output reaches `say`. +- [ ] **Step 2: Run** `make -C v4 run-64-test_host_post.c`: fails to build, there is no `v4_post_run`. +- [ ] **Step 3: Write `post.c`.** Nothing from the C library (the kernel links it). For each case: `v4_dstack_reset`; the state line, which must complete; each line in turn, the output appended to one buffer of `V4_POST_OUT`, an error on any line remembered; then the verdict: + ```c + if (c->expect == V4_POST_ERROR) ok = errored && came_back; + else if (errored || !came_back) ok = 0; + else { + ok = n->ds.depth == c->depth; + if (ok && c->expect == V4_POST_STACK) + for (k = c->depth; ok && k-- > 0; ) ok = v4_dstack_pop(&n->ds) == (v4_cell)c->stack[k]; + if (ok && c->expect != V4_POST_DEPTH) + ok = total == c->output_len && total <= V4_POST_OUT && same(out, c->output, total); + } + ``` + Read the stack before anything is popped when printing a failing case's `stack<...>`. `v4_dstack_reset` after every case. +- [ ] **Step 4: Run** at 64 and 32 bits and under the sanitizers: 0 failures. +- [ ] **Step 5: Commit** `feat(v4.0.0): the POST runner -- the kernel feeds a case and judges it from outside` and push. + +--- + +### Task 3: The boot runs it, and the hooks go + +**Files:** Modify `v4/system/boot.c` (the POST capsule out of `boot_capsules`; `post_watch` and its variables out; a line function that keeps output; the call of `v4_post_run`; the `PARITY:V4_SYSTEM` line), `v4/Makefile` (`SYSTEM_SRCS`), `kernel/Makefile:623-624` (`post.o`, `post_cases.o`), `v4/capsule/core.v4` (`EMIT`), `v4/capsule/quit.v4` (`(DONE)`, the two headers), `v4/tests/host_map.h`, `v4/tests/test_host_unit.c`; Delete `capsules/v4/post79.4th` + +- [ ] **Step 1: Tests first.** In `test_host_unit.c`, Hera's POST becomes `v4_post_run` with a `line` callback built on the test's `tell`, and the check is the tally: 538, 538, 0. Add: after it, `T{` on Hera is an unknown word; `RS1` (defined by case `>R.basic`) is a word on Hera and still is after `COLD`. In `test_host_quit.c` add that `(CATCH)` and `(EMIT-HOOK)` are unknown words. Run and see them fail. +- [ ] **Step 2: `boot.c`.** Split `v4_boot_line` so that its loop takes where the output goes; `v4_boot_line` passes the console and POST's callback passes a buffer. After the capsules: `v4_post_run`; on a failure `PARITY:FAIL`, `POST: FAILED`, return 0. Then `v4_image_seal`, then `PARITY:V4_SYSTEM word_count=` (the count of FORTH's words that `PARITY:V4_NUCLEUS` already uses) ` dict_hash=`, then `PARITY:OK`, `POST: PASSED`. `V4_POST_AT_BOOT=0` still leaves POST out. +- [ ] **Step 3: The nucleus.** `EMIT` loses its first line and the `NONE:` label; `(DONE)` loses the store to `(EMIT-HOOK)` and the `(CATCH)` branch, so an error always ends `2 jump (FINISH)`; the two `header` lines, the two constants in `host_map.h` and their comments go. +- [ ] **Step 4:** `git rm capsules/v4/post79.4th`; remove it from `host_open` in `test_host_unit.c`. `v4/build/mkcapsule --lint capsules/` is clean. +- [ ] **Step 5: Run** `make -C v4 clean`, then `test`, `sanitize`, `hosted-check`. Update `hosted-check`'s greps in `v4/Makefile` if they name the POST capsule's line. All pass; the three hosted programs print the same `PARITY:V4_SYSTEM` line. +- [ ] **Step 6: Acceptance 4 on the product.** With one case's expected stack changed by hand in a scratch copy of `post_cases.c` built into a scratch hosted binary (not committed), the boot names the case, prints `PARITY:FAIL` and `POST: FAILED`, and gives no prompt. +- [ ] **Step 7: Commit** `feat(v4.0.0): POST is the kernel's -- the boot feeds the cases, and nothing of the harness is on the node` and push. + +--- + +### Task 4: Bare metal, and the write-up + +- [ ] **Step 1:** Three v4 boots with the typed session of step 6 and, added to it, `T{`, `RS1`, `COLD`, `RS1`, `HERE .`. Each log: POST 538 of 538, the `PARITY:V4_SYSTEM` line equal to hosted's, `T{` unknown, `RS1` printing `42 42` before and after `COLD`. If POST fails for want of dictionary room, stop and report (Review Focus 5). +- [ ] **Step 2:** `MESH.md` step 6b as done; `NUCLEUS.md` section 8's list; `v4/README.md` "POST"; `POST79.md` as regenerated. +- [ ] **Step 3: Commit** with the three logs, `feat(v4.0.0): POST is the kernel's -- bare metal, and written up`, and push. diff --git a/experiments/bare_metal/README.md b/experiments/bare_metal/README.md index 81da9ff1..54c1001d 100644 --- a/experiments/bare_metal/README.md +++ b/experiments/bare_metal/README.md @@ -144,8 +144,10 @@ which block slot to fill. 1. The first line of each logical block must be `Block NNNN` (capital B, single space, decimal integer). -2. Block numbers must be unique within a single capsule file, and must fall - in `[2048, 5120)`. +2. Block numbers must be unique within a single capsule file, and must be + 2048 or more. Blocks 0–2047 are the VM's fast RAM and the only ones a + capsule may not claim; there is no upper bound (ruled 2026-10-05, + `docs/v4.0.0/NUCLEUS.md` §5.2 — previously `[2048, 5120)`). 3. Blocks are loaded in file order and executed top-to-bottom. 4. Each block can hold at most 16 content lines, each at most 64 characters long (`validate_forth_blocks` in `tools/mkcapsule.c`, corrected 2026-09-19 diff --git a/Makefile.starkernel b/kernel/Makefile similarity index 79% rename from Makefile.starkernel rename to kernel/Makefile index ccb035d1..bc9bdd47 100644 --- a/Makefile.starkernel +++ b/kernel/Makefile @@ -1,13 +1,13 @@ # ============================================================================== -# Makefile.starkernel — StarKernel UEFI Build System +# kernel/Makefile — StarKernel UEFI Build System # Multi-architecture: amd64 (x86_64), aarch64 (ARM64), riscv64 (RISC-V 64) # # Quick start: -# make -f Makefile.starkernel — build for host arch -# make -f Makefile.starkernel ARCH=amd64 qemu — build + boot (x86_64) -# make -f Makefile.starkernel ARCH=aarch64 qemu — build + boot (aarch64) -# make -f Makefile.starkernel ARCH=riscv64 qemu — build + boot (riscv64) -# make -f Makefile.starkernel help — show all targets +# make -f kernel/Makefile — build for host arch +# make -f kernel/Makefile ARCH=amd64 qemu — build + boot (x86_64) +# make -f kernel/Makefile ARCH=aarch64 qemu — build + boot (aarch64) +# make -f kernel/Makefile ARCH=riscv64 qemu — build + boot (riscv64) +# make -f kernel/Makefile help — show all targets # ============================================================================== # ============================================================================== @@ -60,11 +60,14 @@ $(eval $(call kconfig_bool,PARITY_MODE,0)) # StarForth VM integration (default: enabled) $(eval $(call kconfig_bool,STARFORTH_ENABLE_VM,1)) +# StarForth v4 at a single prompt in place of the v3 VM (default: off) +$(eval $(call kconfig_bool,STARFORTH_V4,0)) + # Monolithic build — loader + kernel compiled together (default: enabled) MONOLITHIC ?= 1 # Parallel build — use all available cores when not cleaning -# (adding -j when 'clean' is also a goal causes a race on include/version.h) +# (adding -j when 'clean' is also a goal causes a race on v3/include/version.h) NPROC := $(shell nproc 2>/dev/null || echo 4) ifeq ($(filter clean,$(MAKECMDGOALS)),) MAKEFLAGS += -j$(NPROC) @@ -106,9 +109,9 @@ KERNEL_OBJ_DIR := $(OBJ_DIR)/kernel LOADER_EFI := $(BUILD_DIR)/starkernel_loader.efi KERNEL_ELF := $(BUILD_DIR)/starkernel_kernel.elf -KERNEL_SRC := src/starkernel -KERNEL_INC := include/starkernel -STARFORTH_CONFIG_HEADER := include/starforth_config.h +KERNEL_SRC := kernel/src +KERNEL_INC := kernel/include/starkernel +STARFORTH_CONFIG_HEADER := v3/include/starforth_config.h QEMU_LOG_DIR := logs QEMU_ISO := $(BUILD_DIR)/starkernel.iso @@ -129,17 +132,17 @@ ARTDISK ?= disk/artemis.img # headroom above the current 9-device identity roster (Zuse + 8 minted identities) # rather than matching it exactly, per Bob's standing ruling against hardcoding a bound # to today's scale (FABRIC-3.md §VII.4). Override if a future test needs more, e.g. -# `make -f Makefile.starkernel qemu XHCI_PORTS=32`. +# `make -f kernel/Makefile qemu XHCI_PORTS=32`. XHCI_PORTS ?= 16 # ZUSEDISK -- Zuse's own minted USB thumbdrive, attached by default so a # plain `make qemu` lands already authenticated into the Zuse identity # (Captain Bob, 2026-08-28). Attached at QEMU launch time via -drive/ # -device on the qemu-xhci controller each arch's qemu target already -# creates; xhci_bringup()'s initial port scan (src/starkernel/usb/xhci.c) +# creates; xhci_bringup()'s initial port scan (kernel/src/usb/xhci.c) # is what makes an already-connected-at-launch device visible at all -- # xhci_poll_events() alone is purely hotplug-event-driven and would never # see a device present before controller reset. Override to "" (empty) to -# boot without Zuse attached, e.g. `make -f Makefile.starkernel qemu ZUSEDISK=`. +# boot without Zuse attached, e.g. `make -f kernel/Makefile qemu ZUSEDISK=`. ZUSEDISK ?= disk/thumbdrives/zuse-thumb-ident.img # Precomputed (not inlined as $(if ...,...)) because the drive/device specs # below are comma-heavy and GNU make's $(if) function splits its own @@ -153,10 +156,10 @@ else ZUSEDISK_QEMU_ARGS := endif MKCAPSULE_SRC = tools/mkcapsule.c tools/pkcs8_ed25519.c \ - src/starkernel/crypto/ed25519.c \ - src/starkernel/crypto/fe25519.c \ - src/starkernel/crypto/scalar25519.c \ - src/starkernel/crypto/sha512.c + kernel/src/crypto/ed25519.c \ + kernel/src/crypto/fe25519.c \ + kernel/src/crypto/scalar25519.c \ + kernel/src/crypto/sha512.c MKCAPSULE_BIN = $(BUILD_DIR)/tools/mkcapsule # Milestone 6 (Phase 8): the snakeoil intermediate's private key, generated # offline outside this repo entirely (see FABRIC-2.md's Phase 8 §Milestone 6 @@ -169,6 +172,28 @@ CAPSULE_GENERATED = $(BUILD_DIR)/capsule_generated.c CAPSULE_GENERATED_OBJ = $(BUILD_DIR)/capsule_generated.o CAPSULE_GENERATED_KOBJ = $(KERNEL_OBJ_DIR)/capsule_generated.o +# ============================================================================== +# BOARD (boot_image) +# ============================================================================== +# BOARD names a directory under boards/ (ser5, raspi, milkv, ...). Its +# board.mk sets BOARD_ARCH, BOARD_BOOT (how the firmware finds us) and +# BOARD_IMAGE (the single file written to the boot medium). The root +# Makefile's `make boot_image TARGET=` maps NAME to BOARD and passes +# ARCH=$(BOARD_ARCH); the kernel objects themselves are the ordinary +# build/$(ARCH)/kernel ones, shared with `make qemu`. +BOARD ?= +ifneq ($(strip $(BOARD)),) +ifeq ($(wildcard boards/$(BOARD)/board.mk),) + $(error Unknown BOARD='$(BOARD)': no boards/$(BOARD)/board.mk) +endif +include boards/$(BOARD)/board.mk +ifneq ($(BOARD_ARCH),$(ARCH)) + $(error BOARD=$(BOARD) is ARCH=$(BOARD_ARCH), but ARCH=$(ARCH) was requested) +endif +BOARD_OUT := build/boards/$(BOARD) +endif +BOOT_IMAGE_SIZE_MIB ?= 128 + # ============================================================================== # TOOLCHAIN # ============================================================================== @@ -195,8 +220,8 @@ ifeq ($(ARCH),amd64) # correctly. These flags come after COMMON_CFLAGS on the command line so # they win for amd64 only; riscv64/aarch64 keep -fPIC. ARCH_CFLAGS := -m64 -march=x86-64 -mno-red-zone -DARCH_AMD64 -fno-pic -fno-pie - LOADER_LINKER_SCRIPT := linker/starkernel-loader-amd64.ld - KERNEL_LINKER_SCRIPT := linker/starkernel-kernel-amd64.ld + LOADER_LINKER_SCRIPT := kernel/linker/starkernel-loader-amd64.ld + KERNEL_LINKER_SCRIPT := kernel/linker/starkernel-kernel-amd64.ld else ifeq ($(ARCH),aarch64) ifneq ($(shell which aarch64-linux-gnu-gcc 2>/dev/null),) @@ -211,14 +236,16 @@ else ifeq ($(ARCH),aarch64) $(error No ARM64 toolchain found. Install aarch64-linux-gnu-gcc or aarch64-none-elf-gcc) endif # aarch64 loader uses clang + lld-link (COFF target — GCC cannot produce aarch64 PE) - LOADER_CC := clang-18 - # Debian/Ubuntu package only installs the versioned lld-link-18 on PATH by - # default (unversioned lld-link lives under /usr/lib/llvm-18/bin, which + # Any clang with the aarch64 COFF backend works; the version is not + # pinned (Ubuntu 26.04 ships clang-21, older hosts clang-18). + LOADER_CC := $(shell which clang 2>/dev/null || ls /usr/bin/clang-[0-9]* 2>/dev/null | sort -V | tail -1 || echo clang) + # Debian/Ubuntu package only installs the versioned lld-link-NN on PATH by + # default (unversioned lld-link lives under /usr/lib/llvm-NN/bin, which # isn't on PATH unless explicitly prepended) — detect whichever resolves. - LOADER_LD := $(shell which lld-link 2>/dev/null || which lld-link-18 2>/dev/null || echo lld-link) + LOADER_LD := $(shell which lld-link 2>/dev/null || ls /usr/bin/lld-link-[0-9]* /usr/lib/llvm-*/bin/lld-link 2>/dev/null | sort -V | tail -1 || echo lld-link) ARCH_CFLAGS := -march=armv8-a -mcpu=cortex-a72 -DARCH_AARCH64 -mno-outline-atomics - LOADER_LINKER_SCRIPT := linker/starkernel-loader-aarch64.ld - KERNEL_LINKER_SCRIPT := linker/starkernel-kernel-aarch64.ld + LOADER_LINKER_SCRIPT := kernel/linker/starkernel-loader-aarch64.ld + KERNEL_LINKER_SCRIPT := kernel/linker/starkernel-kernel-aarch64.ld else ifeq ($(ARCH),riscv64) ifneq ($(shell which riscv64-unknown-elf-gcc 2>/dev/null),) @@ -233,8 +260,8 @@ else ifeq ($(ARCH),riscv64) $(error No RISC-V toolchain found. Install riscv64-unknown-elf-gcc or riscv64-linux-gnu-gcc) endif ARCH_CFLAGS := -march=rv64gc -mabi=lp64d -DARCH_RISCV64 - LOADER_LINKER_SCRIPT := linker/starkernel-loader-riscv64.ld - KERNEL_LINKER_SCRIPT := linker/starkernel-kernel-riscv64.ld + LOADER_LINKER_SCRIPT := kernel/linker/starkernel-loader-riscv64.ld + KERNEL_LINKER_SCRIPT := kernel/linker/starkernel-kernel-riscv64.ld endif # Default loader toolchain = kernel toolchain (overridden for aarch64 above) @@ -260,13 +287,13 @@ COMMON_CFLAGS := \ -ffreestanding -nostdlib -fno-builtin \ -fPIC -fvisibility=hidden -fno-stack-protector -fshort-wchar \ $(ARCH_CFLAGS) \ - -I$(KERNEL_INC) -Iinclude -Isrc \ + -I$(KERNEL_INC) -Iv3/include -Ikernel/include -Iv3/src \ -include $(STARFORTH_CONFIG_HEADER) \ -DPARITY_MODE=$(PARITY_MODE) VMCORE_CFLAGS_COMMON := \ $(filter-out -I$(KERNEL_INC),$(COMMON_CFLAGS)) \ - -Iinclude -I. -Isrc/word_source -Isrc/test_runner/include \ + -Iv3/include -Ikernel/include -I. -Iv3/src/word_source -Iv3/src/test_runner/include \ -Wno-error=unused-parameter -Wno-error=shift-negative-value \ -Wno-error=sign-compare -Wno-error=missing-field-initializers @@ -281,8 +308,8 @@ LOADER_BASE_CFLAGS := \ -mno-stack-arg-probe \ -march=armv8-a \ -DARCH_AARCH64 \ - -I$(KERNEL_INC) -Iinclude -Isrc \ - -Iinclude/starkernel/freestanding \ + -I$(KERNEL_INC) -Iv3/include -Ikernel/include -Iv3/src \ + -Ikernel/include/starkernel/freestanding \ -include $(STARFORTH_CONFIG_HEADER) \ -DPARITY_MODE=$(PARITY_MODE) \ -DPLATFORM_TIME_NO_INLINE @@ -308,7 +335,7 @@ ifeq ($(ARCH),aarch64) else ifeq ($(ARCH),riscv64) LOADER_LDFLAGS_PE := # ELF→objcopy pipeline in link rule else - LOADER_LINKER_SCRIPT_PE := linker/starkernel-loader-amd64-pe.ld + LOADER_LINKER_SCRIPT_PE := kernel/linker/starkernel-loader-amd64-pe.ld LOADER_LDFLAGS_PE := \ -T $(LOADER_LINKER_SCRIPT_PE) -m i386pep -nostdlib \ --enable-reloc-section --image-base 0 --subsystem 10 -e efi_main @@ -429,7 +456,7 @@ LOADER_CFLAGS += $(VM_FEATURE_OVERRIDES) endif # SK_CMD — optional startup FORTH script injected before the interactive REPL. -# Usage: make -f Makefile.starkernel qemu SK_CMD="TIME-TICKS . BYE" +# Usage: make -f kernel/Makefile qemu SK_CMD="TIME-TICKS . BYE" ifdef SK_CMD KERNEL_CFLAGS += -DSK_STARTUP_FORTH='"$(SK_CMD)"' LOADER_CFLAGS += -DSK_STARTUP_FORTH='"$(SK_CMD)"' @@ -439,7 +466,7 @@ endif # The loader reads this file from the EFI partition and parses it at boot. # Supported flags: --doe --log-level= # --stack=[MG] --heap=[MG] -# Usage: make -f Makefile.starkernel qemu KERNEL_ARGS="--doe --log-level=info" +# Usage: make -f kernel/Makefile qemu KERNEL_ARGS="--doe --log-level=info" KERNEL_ARGS ?= # ============================================================================== @@ -534,19 +561,19 @@ KERNEL_ASM := $(wildcard $(KERNEL_SRC)/arch/$(ARCH)/*.S) ifeq ($(STARFORTH_ENABLE_VM),1) VM_ALL_SRCS := \ - $(wildcard src/*.c) \ - $(wildcard src/word_source/*.c) \ - $(wildcard src/test_runner/*.c) \ - $(wildcard src/test_runner/modules/*.c) + $(wildcard v3/src/*.c) \ + $(wildcard v3/src/word_source/*.c) \ + $(wildcard v3/src/test_runner/*.c) \ + $(wildcard v3/src/test_runner/modules/*.c) VM_EXCLUDE := \ - src/main.c src/cli.c src/repl.c \ - src/platform/% \ - src/blkio_factory.c src/blkio_file.c \ - src/log.c src/doe_metrics.c \ - src/vm.c src/vm_core.c src/vm_bootstrap.c src/vm_runtime.c src/vm_time.c \ - src/word_source/q48_16_words.c \ - src/test_runner/modules/break_me_tests.c + v3/src/main.c v3/src/cli.c v3/src/repl.c \ + v3/src/platform/% \ + v3/src/blkio_factory.c v3/src/blkio_file.c \ + v3/src/log.c v3/src/doe_metrics.c \ + v3/src/vm.c v3/src/vm_core.c v3/src/vm_bootstrap.c v3/src/vm_runtime.c v3/src/vm_time.c \ + v3/src/word_source/q48_16_words.c \ + v3/src/test_runner/modules/break_me_tests.c VM_CORE_SRCS := $(filter-out $(VM_EXCLUDE),$(VM_ALL_SRCS)) @@ -569,8 +596,32 @@ LOADER_EXTRA_SRCS := \ KERNEL_EXTRA_SRCS := $(LOADER_EXTRA_SRCS) -LOADER_VM_OBJS := $(patsubst src/%.c,$(LOADER_OBJ_DIR)/vmcore/%.o,$(VM_CORE_SRCS)) -KERNEL_VM_OBJS := $(patsubst src/%.c,$(KERNEL_OBJ_DIR)/vmcore/%.o,$(VM_CORE_SRCS)) +LOADER_VM_OBJS := $(patsubst v3/src/%.c,$(LOADER_OBJ_DIR)/vmcore/%.o,$(VM_CORE_SRCS)) +KERNEL_VM_OBJS := $(patsubst v3/src/%.c,$(KERNEL_OBJ_DIR)/vmcore/%.o,$(VM_CORE_SRCS)) +endif + +# ------------------------------------------------------------------------------ +# StarForth v4 (STARFORTH_V4=1): the golden model of the F18-derived engine, +# v4/src, and the nucleus image v4's own Makefile builds on this machine from +# v4/capsule (docs/v4.0.0/NUCLEUS.md). The node is the host node's size, with 64-bit cells, as every +# ISA this kernel boots on has (DECOMPOSITION.md D-5), so the image is the +# same file for all three. +# ------------------------------------------------------------------------------ +ifeq ($(STARFORTH_V4),1) +V4_DEFS := -DSTARFORTH_V4=1 -Iv4/include \ + -DV4_CELL_BITS=64 -DV4_NODE_WORDS=16384 -DV4_DATA_RING=30 -DV4_RET_RING=31 +KERNEL_CFLAGS += $(V4_DEFS) +LOADER_CFLAGS += $(V4_DEFS) + +V4_ENGINE_SRCS := $(addprefix v4/src/,node.c exec.c stack.c iword.c heat.c guard.c image.c fabric.c capsule.c message.c) +V4_IMAGE_C := $(BUILD_DIR)/v4_image_64.c + +LOADER_EXTRA_SRCS += $(KERNEL_SRC)/v4/sk_v4.c +KERNEL_EXTRA_SRCS += $(KERNEL_SRC)/v4/sk_v4.c +# v4/system/boot.c is the boot the hosted v4 system runs too: nucleus, then +# the capsules from this kernel's own capsule directory, then the prompt. +LOADER_V4_OBJS := $(patsubst v4/src/%.c,$(LOADER_OBJ_DIR)/v4engine/%.o,$(V4_ENGINE_SRCS)) $(LOADER_OBJ_DIR)/v4engine/v4_image.o $(LOADER_OBJ_DIR)/v4system/boot.o $(LOADER_OBJ_DIR)/v4system/blocks.o $(LOADER_OBJ_DIR)/v4system/post.o $(LOADER_OBJ_DIR)/v4system/post_cases.o +KERNEL_V4_OBJS := $(patsubst v4/src/%.c,$(KERNEL_OBJ_DIR)/v4engine/%.o,$(V4_ENGINE_SRCS)) $(KERNEL_OBJ_DIR)/v4engine/v4_image.o $(KERNEL_OBJ_DIR)/v4system/boot.o $(KERNEL_OBJ_DIR)/v4system/blocks.o $(KERNEL_OBJ_DIR)/v4system/post.o $(KERNEL_OBJ_DIR)/v4system/post_cases.o endif LOADER_SRCS := $(LOADER_SRCS_BASE) $(LOADER_EXTRA_SRCS) @@ -581,12 +632,14 @@ LOADER_OBJS := \ $(patsubst $(KERNEL_SRC)/%.c,$(LOADER_OBJ_DIR)/%.o,$(LOADER_ARCH_SRCS)) \ $(patsubst $(KERNEL_SRC)/%.S,$(LOADER_OBJ_DIR)/%.o,$(LOADER_ASM)) \ $(LOADER_VM_OBJS) \ + $(LOADER_V4_OBJS) \ $(CAPSULE_GENERATED_OBJ) KERNEL_OBJS := \ $(patsubst $(KERNEL_SRC)/%.c,$(KERNEL_OBJ_DIR)/%.o,$(KERNEL_SRCS)) \ $(patsubst $(KERNEL_SRC)/%.S,$(KERNEL_OBJ_DIR)/%.o,$(KERNEL_ASM)) \ $(KERNEL_VM_OBJS) \ + $(KERNEL_V4_OBJS) \ $(CAPSULE_GENERATED_KOBJ) # ============================================================================== @@ -603,7 +656,7 @@ KERNEL_OBJS := \ # MAIN TARGETS # ============================================================================== -all: include/version.h $(CAPSULE_GENERATED_OBJ) $(CAPSULE_GENERATED_KOBJ) $(LOADER_EFI) $(KERNEL_ELF) +all: v3/include/version.h $(CAPSULE_GENERATED_OBJ) $(CAPSULE_GENERATED_KOBJ) $(LOADER_EFI) $(KERNEL_ELF) @echo "StarKernel built successfully for $(ARCH)" @echo " Loader: $(LOADER_EFI)" @echo " Kernel: $(KERNEL_ELF)" @@ -611,13 +664,13 @@ all: include/version.h $(CAPSULE_GENERATED_OBJ) $(CAPSULE_GENERATED_KOBJ) $(LOAD kernel: all kernel-all: - @$(MAKE) -f Makefile.starkernel ARCH=amd64 TARGET=$(TARGET) - @$(MAKE) -f Makefile.starkernel ARCH=aarch64 TARGET=$(TARGET) - @$(MAKE) -f Makefile.starkernel ARCH=riscv64 TARGET=$(TARGET) + @$(MAKE) -f kernel/Makefile ARCH=amd64 TARGET=$(TARGET) + @$(MAKE) -f kernel/Makefile ARCH=aarch64 TARGET=$(TARGET) + @$(MAKE) -f kernel/Makefile ARCH=riscv64 TARGET=$(TARGET) clean: rm -rf build/$(ARCH)/$(TARGET) - rm -f include/version.h + rm -f v3/include/version.h clean-kernel: @echo "Cleaning all StarKernel build artifacts..." @@ -636,8 +689,8 @@ FORCE: # here after a hosted `make` run silently reuses that stale/wrong-flavored file # and fails with "LITHOS_VERSION_STR undeclared" deep in kernel_main.c, instead # of regenerating its own correct version. -include/version.h: FORCE - @mkdir -p include +v3/include/version.h: FORCE + @mkdir -p v3/include @BUILD_TS=$$(date -Iseconds 2>/dev/null || echo "unknown"); \ printf '#ifndef STARFORTH_VERSION_H\n#define STARFORTH_VERSION_H\n\n' > $@; \ printf '#define STARFORTH_VERSION "%s"\n' "$(VERSION)" >> $@; \ @@ -653,7 +706,7 @@ include/version.h: FORCE $(MKCAPSULE_BIN): $(MKCAPSULE_SRC) @mkdir -p $(dir $@) @echo "HOSTCC $(MKCAPSULE_SRC)" - @cc -std=c99 -Wall -Wextra -O2 -Iinclude -Itools -o $@ $(MKCAPSULE_SRC) + @cc -std=c99 -Wall -Wextra -O2 -Iv3/include -Ikernel/include -Itools -o $@ $(MKCAPSULE_SRC) # Generate capsule_generated.c from capsules/ CAPSULE_SRCS := $(shell find $(CAPSULES_DIR) -type f ! -name '.*' 2>/dev/null) @@ -695,12 +748,12 @@ $(LOADER_OBJ_DIR)/%.o: $(KERNEL_SRC)/%.c | $(LOADER_OBJ_DIR) @$(LOADER_CC) $(LOADER_CFLAGS) -c $< -o $@ # Compile loader VM core sources -$(LOADER_OBJ_DIR)/vmcore/%.o: src/%.c include/version.h | $(LOADER_OBJ_DIR) +$(LOADER_OBJ_DIR)/vmcore/%.o: v3/src/%.c v3/include/version.h | $(LOADER_OBJ_DIR) @mkdir -p $(dir $@) @echo "CC (loader) $<" ifeq ($(ARCH),aarch64) @$(LOADER_CC) $(LOADER_CFLAGS) \ - -Iinclude -I. -Isrc/test_runner/include \ + -Iv3/include -Ikernel/include -I. -Iv3/src/test_runner/include \ -Wno-error=unused-parameter -Wno-error=shift-negative-value \ -Wno-error=sign-compare -Wno-error=missing-field-initializers \ -Wno-unused-function \ @@ -709,6 +762,44 @@ else @$(LOADER_CC) $(VMCORE_CFLAGS_COMMON) $(filter-out -I$(KERNEL_INC),$(LOADER_CFLAGS)) -c $< -o $@ endif +# StarForth v4: the capsule image, built on this machine by v4's Makefile, and +# the engine, compiled like any other kernel source. +ifeq ($(STARFORTH_V4),1) +# The nucleus is a capsule (capsules/v4/nucleus-64.f18), written by the same +# step that writes its description, so the capsule directory waits for it. +$(CAPSULE_GENERATED): $(V4_IMAGE_C) +$(V4_IMAGE_C): FORCE + @mkdir -p $(dir $@) + @echo " V4IMG v4/capsule -> $@" + @$(MAKE) --no-print-directory -C v4 CC=cc build/v4_image_64.c + @cmp -s v4/build/v4_image_64.c $@ || cp v4/build/v4_image_64.c $@ + +$(LOADER_OBJ_DIR)/v4engine/v4_image.o: $(V4_IMAGE_C) | $(LOADER_OBJ_DIR) + @mkdir -p $(dir $@) + @echo "CC (loader) $<" + @$(LOADER_CC) $(LOADER_CFLAGS) -c $< -o $@ +$(KERNEL_OBJ_DIR)/v4engine/v4_image.o: $(V4_IMAGE_C) | $(KERNEL_OBJ_DIR) + @mkdir -p $(dir $@) + @echo "CC (kernel) $<" + @$(CC) $(KERNEL_CFLAGS) -c $< -o $@ +$(LOADER_OBJ_DIR)/v4system/%.o: v4/system/%.c | $(LOADER_OBJ_DIR) + @mkdir -p $(dir $@) + @echo "CC (loader) $<" + @$(LOADER_CC) $(LOADER_CFLAGS) -c $< -o $@ +$(KERNEL_OBJ_DIR)/v4system/%.o: v4/system/%.c | $(KERNEL_OBJ_DIR) + @mkdir -p $(dir $@) + @echo "CC (kernel) $<" + @$(CC) $(KERNEL_CFLAGS) -c $< -o $@ +$(LOADER_OBJ_DIR)/v4engine/%.o: v4/src/%.c | $(LOADER_OBJ_DIR) + @mkdir -p $(dir $@) + @echo "CC (loader) $<" + @$(LOADER_CC) $(LOADER_CFLAGS) -c $< -o $@ +$(KERNEL_OBJ_DIR)/v4engine/%.o: v4/src/%.c | $(KERNEL_OBJ_DIR) + @mkdir -p $(dir $@) + @echo "CC (kernel) $<" + @$(CC) $(KERNEL_CFLAGS) -c $< -o $@ +endif + # Compile loader assembly sources $(LOADER_OBJ_DIR)/%.o: $(KERNEL_SRC)/%.S | $(LOADER_OBJ_DIR) @mkdir -p $(dir $@) @@ -722,10 +813,10 @@ $(KERNEL_OBJ_DIR)/%.o: $(KERNEL_SRC)/%.c | $(KERNEL_OBJ_DIR) @$(CC) $(KERNEL_CFLAGS) -c $< -o $@ # Compile kernel VM core sources -$(KERNEL_OBJ_DIR)/vmcore/%.o: src/%.c include/version.h | $(KERNEL_OBJ_DIR) +$(KERNEL_OBJ_DIR)/vmcore/%.o: v3/src/%.c v3/include/version.h | $(KERNEL_OBJ_DIR) @mkdir -p $(dir $@) @echo "CC (kernel) $<" - @$(CC) $(VMCORE_CFLAGS_COMMON) $(filter-out -I$(KERNEL_INC),$(KERNEL_CFLAGS)) -Isrc/starkernel/vm -c $< -o $@ + @$(CC) $(VMCORE_CFLAGS_COMMON) $(filter-out -I$(KERNEL_INC),$(KERNEL_CFLAGS)) -Ikernel/src/vm -c $< -o $@ # Compile kernel assembly sources $(KERNEL_OBJ_DIR)/%.o: $(KERNEL_SRC)/%.S | $(KERNEL_OBJ_DIR) @@ -802,7 +893,7 @@ OVMF_CODE := /usr/share/OVMF/OVMF_CODE_4M.fd OVMF_VARS_RO := /usr/share/OVMF/OVMF_VARS_4M.fd # QEMU_DISPLAY — window backend for the framebuffer console (gtk/sdl/none/...). -# Usage: make -f Makefile.starkernel qemu QEMU_DISPLAY=none # headless/CI +# Usage: make -f kernel/Makefile qemu QEMU_DISPLAY=none # headless/CI QEMU_DISPLAY ?= gtk # QEMU_EXTRA — extra raw qemu-system-* args appended verbatim to every arch's @@ -1072,38 +1163,98 @@ else ifeq ($(ARCH),riscv64) # fallback boot path EFI/BOOT/BOOT.EFI. Storage on real hardware is the # USB BOT/xHCI path (already live), not virtio. thumbdrive: all - @mkdir -p $(BUILD_DIR) - @if ! which sgdisk >/dev/null 2>&1; then echo "Error: sgdisk not found. Install gdisk (apt-get install gdisk)."; exit 1; fi - @if ! which mkfs.fat >/dev/null 2>&1; then echo "Error: mkfs.fat not found. Install dosfstools (apt-get install dosfstools)."; exit 1; fi - @case "$(ARCH)" in \ - amd64) BOOTNAME="BOOTX64.EFI" ;; \ - aarch64) BOOTNAME="BOOTAA64.EFI" ;; \ - riscv64) BOOTNAME="BOOTRISCV64.EFI" ;; \ - *) echo "Error: no thumbdrive EFI boot name for ARCH=$(ARCH)"; exit 1 ;; \ - esac; \ - # Geometry: 128 MiB disk (262144 sectors), GPT partition 1 spans sectors \ - # 2048..262110 (the GPT last-usable sector for this disk size), i.e. \ - # 260063 sectors. The FAT32 ESP image MUST match the partition size \ - # exactly; a larger ESP overruns the disk (GPT grows corrupt) or \ - # spills past the partition end, both of which made earlier builds \ - # unbootable on hardware. \ - DISK=$(BUILD_DIR)/starkernel-thumbdrive.img; \ - ESP_SECTORS=260063; \ - rm -f $$DISK $(BUILD_DIR)/thumbdrive-esp.img; \ - dd if=/dev/zero of=$(BUILD_DIR)/thumbdrive-esp.img bs=512 count=$$ESP_SECTORS 2>/dev/null; \ - mkfs.fat -F 32 -n "STARKERNEL" $(BUILD_DIR)/thumbdrive-esp.img >/dev/null 2>&1; \ - mmd -i $(BUILD_DIR)/thumbdrive-esp.img ::/EFI; \ - mmd -i $(BUILD_DIR)/thumbdrive-esp.img ::/EFI/BOOT; \ - mcopy -i $(BUILD_DIR)/thumbdrive-esp.img $(LOADER_EFI) ::/EFI/BOOT/$$BOOTNAME; \ - printf 'FS0:\\EFI\\BOOT\\%s\r\n' "$$BOOTNAME" > $(BUILD_DIR)/thumbdrive-startup.nsh; \ - mcopy -i $(BUILD_DIR)/thumbdrive-esp.img $(BUILD_DIR)/thumbdrive-startup.nsh ::/startup.nsh; \ - dd if=/dev/zero of=$$DISK bs=1M count=128 2>/dev/null; \ - sgdisk -n 1:2048:0 -t 1:ef00 -c 1:"EFI System" $$DISK >/dev/null 2>&1; \ - dd if=$(BUILD_DIR)/thumbdrive-esp.img of=$$DISK bs=512 seek=2048 conv=notrunc 2>/dev/null; \ - rm -f $(BUILD_DIR)/thumbdrive-esp.img $(BUILD_DIR)/thumbdrive-startup.nsh; \ - echo "Thumbdrive image: $$DISK"; \ - echo "Write to a USB stick with: dd if=$$DISK of=/dev/sdX bs=4M status=progress" + @printf 'FS0:\\EFI\\BOOT\\%s\r\n' "$(EFI_BOOTNAME)" > $(BUILD_DIR)/thumbdrive-startup.nsh + @bash scripts/mkdiskimage.sh --out $(BUILD_DIR)/starkernel-thumbdrive.img --table gpt \ + --size-mib 128 --label STARKERNEL \ + $(LOADER_EFI):/EFI/BOOT/$(EFI_BOOTNAME) \ + $(BUILD_DIR)/thumbdrive-startup.nsh:/startup.nsh + @rm -f $(BUILD_DIR)/thumbdrive-startup.nsh + @echo "Write to a USB stick with: dd if=$(BUILD_DIR)/starkernel-thumbdrive.img of=/dev/sdX bs=4M status=progress" +# ============================================================================== +# BOOT IMAGES (one per board) +# ============================================================================== +# boot_image -- the single file written to a board's boot medium. Driven by +# BOARD (boards//board.mk); normally invoked from the repo root as +# make boot_image TARGET=SER5|RASPI|MILKV|ZYNQ7020 +# Output: build/boards//$(BOARD_IMAGE). +# +# BOARD_BOOT selects the recipe: +# uefi-esp -- GPT disk, one FAT32 EFI System Partition holding the +# monolithic loader as EFI/BOOT/BOOT.EFI (+ startup.nsh +# for the UEFI shell, + starforth.cfg when KERNEL_ARGS is set). +# Real UEFI firmware (SER5) and U-Boot's bootefi (Milk-V) both +# boot it through the removable-media fallback path. +# rpi-native -- MBR disk, one FAT32 (LBA) partition holding config.txt, +# kernel_2712.img (kernel relinked at 0x80000 and flattened) +# and the stock BCM2712 DTB (+ cmdline.txt, which firmware +# copies into /chosen/bootargs, when KERNEL_ARGS is set). +ifeq ($(ARCH),amd64) +EFI_BOOTNAME := BOOTX64.EFI +else ifeq ($(ARCH),aarch64) +EFI_BOOTNAME := BOOTAA64.EFI +else ifeq ($(ARCH),riscv64) +EFI_BOOTNAME := BOOTRISCV64.EFI +endif + +RPI5_NATIVE_LINKER_SCRIPT := kernel/linker/starkernel-native-rpi5.ld +RPI5_NATIVE_ELF := $(BUILD_DIR)/starkernel_rpi5.elf +RPI5_NATIVE_IMG := $(BUILD_DIR)/kernel_2712.img + +$(RPI5_NATIVE_ELF): $(KERNEL_OBJS) $(RPI5_NATIVE_LINKER_SCRIPT) | $(BUILD_DIR) + @echo "LD (rpi5 native) $@" + @$(LD) -T $(RPI5_NATIVE_LINKER_SCRIPT) -nostdlib --build-id=none \ + -e rpi5_native_start $(KERNEL_OBJS) -o $@ + +$(RPI5_NATIVE_IMG): $(RPI5_NATIVE_ELF) + @echo "OBJCOPY (raw) $@" + @$(OBJCOPY) -O binary $< $@ + +.PHONY: boot_image +ifeq ($(strip $(BOARD)),) +boot_image: + @echo "boot_image needs a board. From the repo root:" + @echo " make boot_image TARGET=SER5|RASPI|MILKV|ZYNQ7020" + @exit 1 +else ifeq ($(BOARD_BOOT),uefi-esp) +boot_image: all + @mkdir -p $(BOARD_OUT) + @printf 'FS0:\\EFI\\BOOT\\%s\r\n' "$(EFI_BOOTNAME)" > $(BOARD_OUT)/startup.nsh + @rm -f $(BOARD_OUT)/starforth.cfg + $(if $(KERNEL_ARGS),@printf '%s\n' '$(KERNEL_ARGS)' > $(BOARD_OUT)/starforth.cfg) + @bash scripts/mkdiskimage.sh --out $(BOARD_OUT)/$(BOARD_IMAGE) --table gpt \ + --size-mib $(BOOT_IMAGE_SIZE_MIB) --label LITHOS \ + $(LOADER_EFI):/EFI/BOOT/$(EFI_BOOTNAME) \ + $(BOARD_OUT)/startup.nsh:/startup.nsh \ + $(if $(KERNEL_ARGS),$(BOARD_OUT)/starforth.cfg:/starforth.cfg) + @echo "$(BOARD_DESC)" + @echo "Write with: dd if=$(BOARD_OUT)/$(BOARD_IMAGE) of=/dev/sdX bs=4M conv=fsync status=progress" +else ifeq ($(BOARD_BOOT),rpi-native) +$(RPI5_DTB): + @mkdir -p $(dir $@) + @echo " FETCH $(RPI5_DTB_URL)" + @curl -fsSL -o $@.tmp $(RPI5_DTB_URL) || { rm -f $@.tmp; \ + echo "Error: could not fetch the Pi 5 DTB. Copy bcm2712-rpi-5-b.dtb from a Raspberry Pi"; \ + echo "firmware release and pass RPI5_DTB=/path/to/bcm2712-rpi-5-b.dtb"; exit 1; } + @mv $@.tmp $@ + +boot_image: v3/include/version.h $(RPI5_NATIVE_IMG) $(RPI5_DTB) + @mkdir -p $(BOARD_OUT) + @rm -f $(BOARD_OUT)/cmdline.txt + $(if $(KERNEL_ARGS),@printf '%s\n' '$(KERNEL_ARGS)' > $(BOARD_OUT)/cmdline.txt) + @bash scripts/mkdiskimage.sh --out $(BOARD_OUT)/$(BOARD_IMAGE) --table mbr \ + --size-mib $(BOOT_IMAGE_SIZE_MIB) --label LITHOS \ + boards/$(BOARD)/config.txt:/config.txt \ + $(RPI5_NATIVE_IMG):/kernel_2712.img \ + $(RPI5_DTB):/bcm2712-rpi-5-b.dtb \ + $(if $(KERNEL_ARGS),$(BOARD_OUT)/cmdline.txt:/cmdline.txt) + @echo "$(BOARD_DESC)" + @echo "Write with: dd if=$(BOARD_OUT)/$(BOARD_IMAGE) of=/dev/mmcblkX bs=4M conv=fsync status=progress" +else +boot_image: + @echo "Error: BOARD=$(BOARD) has BOARD_BOOT='$(BOARD_BOOT)', which has no boot_image recipe" + @exit 1 +endif # iso-usb — build a PURE UEFI isohybrid ISO for the Iso Image Writer workflow # (GNOME Disks "Restore Disk Image...", or dd). Writes a single .iso to a USB @@ -1150,7 +1301,7 @@ iso-usb: all # yourself with Ctrl-A X or by closing the window). # amd64/aarch64: serial → stdio (bidirectional, you can type into the REPL); # riscv64: uses proper GPT (esp dir not supported) -qemu-esp: include/version.h $(LOADER_EFI) $(KERNEL_ELF) +qemu-esp: v3/include/version.h $(LOADER_EFI) $(KERNEL_ELF) ifeq ($(ARCH),amd64) @rm -rf $(BUILD_DIR)/esp @mkdir -p $(BUILD_DIR)/esp/EFI/BOOT @@ -1206,7 +1357,7 @@ else ifeq ($(ARCH),riscv64) endif # qemu-gdb — launch QEMU with GDB stub on port 1234 -qemu-gdb: include/version.h $(LOADER_EFI) $(KERNEL_ELF) +qemu-gdb: v3/include/version.h $(LOADER_EFI) $(KERNEL_ELF) ifeq ($(ARCH),amd64) @mkdir -p $(BUILD_DIR)/esp/EFI/BOOT @cp $(LOADER_EFI) $(BUILD_DIR)/esp/EFI/BOOT/BOOTX64.EFI @@ -1253,13 +1404,14 @@ info: @echo "Loader output: $(LOADER_EFI)" @echo "Kernel output: $(KERNEL_ELF)" @echo "VM integration: $(STARFORTH_ENABLE_VM)" + @echo "StarForth v4: $(STARFORTH_V4)" @echo "Monolithic: $(MONOLITHIC)" help: @echo "StarKernel Build System" @echo "=======================" @echo "" - @echo "Usage: make -f Makefile.starkernel [ARCH=] [TARGET=] " + @echo "Usage: make -f kernel/Makefile [ARCH=] [TARGET=] " @echo "" @echo "Architectures (aliases accepted):" @echo " ARCH=amd64 / x86_64 — x86-64 (default on x86 host)" @@ -1289,8 +1441,8 @@ help: @echo " help — show this message" @echo "" @echo "Examples:" - @echo " make -f Makefile.starkernel ARCH=amd64 qemu" - @echo " make -f Makefile.starkernel ARCH=aarch64 clean qemu" - @echo " make -f Makefile.starkernel ARCH=riscv64 clean qemu" - @echo " make -f Makefile.starkernel ARCH=x86_64 qemu # alias works" - @echo " make -f Makefile.starkernel kernel-all" + @echo " make -f kernel/Makefile ARCH=amd64 qemu" + @echo " make -f kernel/Makefile ARCH=aarch64 clean qemu" + @echo " make -f kernel/Makefile ARCH=riscv64 clean qemu" + @echo " make -f kernel/Makefile ARCH=x86_64 qemu # alias works" + @echo " make -f kernel/Makefile kernel-all" diff --git a/include/starkernel/README.md b/kernel/include/starkernel/README.md similarity index 100% rename from include/starkernel/README.md rename to kernel/include/starkernel/README.md diff --git a/include/starkernel/apic.h b/kernel/include/starkernel/apic.h similarity index 100% rename from include/starkernel/apic.h rename to kernel/include/starkernel/apic.h diff --git a/include/starkernel/arch.h b/kernel/include/starkernel/arch.h similarity index 100% rename from include/starkernel/arch.h rename to kernel/include/starkernel/arch.h diff --git a/include/starkernel/artemis_sig.h b/kernel/include/starkernel/artemis_sig.h similarity index 100% rename from include/starkernel/artemis_sig.h rename to kernel/include/starkernel/artemis_sig.h diff --git a/include/starkernel/blkio_usb.h b/kernel/include/starkernel/blkio_usb.h similarity index 100% rename from include/starkernel/blkio_usb.h rename to kernel/include/starkernel/blkio_usb.h diff --git a/include/starkernel/boot_info_offsets.h b/kernel/include/starkernel/boot_info_offsets.h similarity index 100% rename from include/starkernel/boot_info_offsets.h rename to kernel/include/starkernel/boot_info_offsets.h diff --git a/include/starkernel/capsule.h b/kernel/include/starkernel/capsule.h similarity index 100% rename from include/starkernel/capsule.h rename to kernel/include/starkernel/capsule.h diff --git a/include/starkernel/capsule_birth.h b/kernel/include/starkernel/capsule_birth.h similarity index 100% rename from include/starkernel/capsule_birth.h rename to kernel/include/starkernel/capsule_birth.h diff --git a/kernel/include/starkernel/capsule_blocks.h b/kernel/include/starkernel/capsule_blocks.h new file mode 100644 index 00000000..b3b5645d --- /dev/null +++ b/kernel/include/starkernel/capsule_blocks.h @@ -0,0 +1,21 @@ +/* capsule_blocks.h -- the block format of a .4th capsule payload. + * + * A .4th capsule is text: "Block " header lines, each followed by that + * block's content lines (tools/mkcapsule.c, validate_forth_blocks). This is + * the one place that says what a header line is. It depends on no VM, so + * every loader of capsules can use it: the kernel's and the hosted v4 + * system's (docs/v4.0.0/NUCLEUS.md 5.3). + */ +#ifndef STARKERNEL_CAPSULE_BLOCKS_H +#define STARKERNEL_CAPSULE_BLOCKS_H + +#include + +/* Is the line that starts at p a "Block " header? If so, returns 1 + * with the number in *out_num and the start of the next line in *out_after; + * otherwise returns 0 and changes nothing. `end` is one past the payload's + * last byte. */ +int capsule_block_header(const uint8_t *p, const uint8_t *end, + uint32_t *out_num, const uint8_t **out_after); + +#endif /* STARKERNEL_CAPSULE_BLOCKS_H */ diff --git a/include/starkernel/capsule_console.h b/kernel/include/starkernel/capsule_console.h similarity index 100% rename from include/starkernel/capsule_console.h rename to kernel/include/starkernel/capsule_console.h diff --git a/include/starkernel/capsule_generated.h b/kernel/include/starkernel/capsule_generated.h similarity index 100% rename from include/starkernel/capsule_generated.h rename to kernel/include/starkernel/capsule_generated.h diff --git a/include/starkernel/capsule_loader.h b/kernel/include/starkernel/capsule_loader.h similarity index 100% rename from include/starkernel/capsule_loader.h rename to kernel/include/starkernel/capsule_loader.h diff --git a/include/starkernel/capsule_mint.h b/kernel/include/starkernel/capsule_mint.h similarity index 100% rename from include/starkernel/capsule_mint.h rename to kernel/include/starkernel/capsule_mint.h diff --git a/include/starkernel/capsule_run.h b/kernel/include/starkernel/capsule_run.h similarity index 100% rename from include/starkernel/capsule_run.h rename to kernel/include/starkernel/capsule_run.h diff --git a/include/starkernel/capsule_runcap.h b/kernel/include/starkernel/capsule_runcap.h similarity index 100% rename from include/starkernel/capsule_runcap.h rename to kernel/include/starkernel/capsule_runcap.h diff --git a/include/starkernel/capsule_sig.h b/kernel/include/starkernel/capsule_sig.h similarity index 100% rename from include/starkernel/capsule_sig.h rename to kernel/include/starkernel/capsule_sig.h diff --git a/include/starkernel/capsule_vm_physics.h b/kernel/include/starkernel/capsule_vm_physics.h similarity index 100% rename from include/starkernel/capsule_vm_physics.h rename to kernel/include/starkernel/capsule_vm_physics.h diff --git a/include/starkernel/capsule_vm_switch_signal.h b/kernel/include/starkernel/capsule_vm_switch_signal.h similarity index 100% rename from include/starkernel/capsule_vm_switch_signal.h rename to kernel/include/starkernel/capsule_vm_switch_signal.h diff --git a/include/starkernel/capsule_wirebind.h b/kernel/include/starkernel/capsule_wirebind.h similarity index 100% rename from include/starkernel/capsule_wirebind.h rename to kernel/include/starkernel/capsule_wirebind.h diff --git a/include/starkernel/capsule_zuse_boot.h b/kernel/include/starkernel/capsule_zuse_boot.h similarity index 100% rename from include/starkernel/capsule_zuse_boot.h rename to kernel/include/starkernel/capsule_zuse_boot.h diff --git a/include/starkernel/cmdline.h b/kernel/include/starkernel/cmdline.h similarity index 100% rename from include/starkernel/cmdline.h rename to kernel/include/starkernel/cmdline.h diff --git a/include/starkernel/console.h b/kernel/include/starkernel/console.h similarity index 100% rename from include/starkernel/console.h rename to kernel/include/starkernel/console.h diff --git a/include/starkernel/doe_log.h b/kernel/include/starkernel/doe_log.h similarity index 100% rename from include/starkernel/doe_log.h rename to kernel/include/starkernel/doe_log.h diff --git a/include/starkernel/ed25519.h b/kernel/include/starkernel/ed25519.h similarity index 100% rename from include/starkernel/ed25519.h rename to kernel/include/starkernel/ed25519.h diff --git a/include/starkernel/elf64.h b/kernel/include/starkernel/elf64.h similarity index 100% rename from include/starkernel/elf64.h rename to kernel/include/starkernel/elf64.h diff --git a/include/starkernel/elf_loader.h b/kernel/include/starkernel/elf_loader.h similarity index 100% rename from include/starkernel/elf_loader.h rename to kernel/include/starkernel/elf_loader.h diff --git a/include/starkernel/fdt.h b/kernel/include/starkernel/fdt.h similarity index 100% rename from include/starkernel/fdt.h rename to kernel/include/starkernel/fdt.h diff --git a/include/starkernel/fe25519.h b/kernel/include/starkernel/fe25519.h similarity index 100% rename from include/starkernel/fe25519.h rename to kernel/include/starkernel/fe25519.h diff --git a/include/starkernel/framebuffer.h b/kernel/include/starkernel/framebuffer.h similarity index 100% rename from include/starkernel/framebuffer.h rename to kernel/include/starkernel/framebuffer.h diff --git a/include/starkernel/freestanding/README.md b/kernel/include/starkernel/freestanding/README.md similarity index 100% rename from include/starkernel/freestanding/README.md rename to kernel/include/starkernel/freestanding/README.md diff --git a/include/starkernel/freestanding/assert.h b/kernel/include/starkernel/freestanding/assert.h similarity index 100% rename from include/starkernel/freestanding/assert.h rename to kernel/include/starkernel/freestanding/assert.h diff --git a/include/starkernel/freestanding/ctype.h b/kernel/include/starkernel/freestanding/ctype.h similarity index 100% rename from include/starkernel/freestanding/ctype.h rename to kernel/include/starkernel/freestanding/ctype.h diff --git a/include/starkernel/freestanding/errno.h b/kernel/include/starkernel/freestanding/errno.h similarity index 100% rename from include/starkernel/freestanding/errno.h rename to kernel/include/starkernel/freestanding/errno.h diff --git a/include/starkernel/freestanding/inttypes.h b/kernel/include/starkernel/freestanding/inttypes.h similarity index 100% rename from include/starkernel/freestanding/inttypes.h rename to kernel/include/starkernel/freestanding/inttypes.h diff --git a/include/starkernel/freestanding/math.h b/kernel/include/starkernel/freestanding/math.h similarity index 100% rename from include/starkernel/freestanding/math.h rename to kernel/include/starkernel/freestanding/math.h diff --git a/include/starkernel/freestanding/sched.h b/kernel/include/starkernel/freestanding/sched.h similarity index 100% rename from include/starkernel/freestanding/sched.h rename to kernel/include/starkernel/freestanding/sched.h diff --git a/include/starkernel/freestanding/signal.h b/kernel/include/starkernel/freestanding/signal.h similarity index 100% rename from include/starkernel/freestanding/signal.h rename to kernel/include/starkernel/freestanding/signal.h diff --git a/include/starkernel/freestanding/stdio.h b/kernel/include/starkernel/freestanding/stdio.h similarity index 100% rename from include/starkernel/freestanding/stdio.h rename to kernel/include/starkernel/freestanding/stdio.h diff --git a/include/starkernel/freestanding/stdlib.h b/kernel/include/starkernel/freestanding/stdlib.h similarity index 100% rename from include/starkernel/freestanding/stdlib.h rename to kernel/include/starkernel/freestanding/stdlib.h diff --git a/include/starkernel/freestanding/string.h b/kernel/include/starkernel/freestanding/string.h similarity index 100% rename from include/starkernel/freestanding/string.h rename to kernel/include/starkernel/freestanding/string.h diff --git a/include/starkernel/freestanding/sys/README.md b/kernel/include/starkernel/freestanding/sys/README.md similarity index 100% rename from include/starkernel/freestanding/sys/README.md rename to kernel/include/starkernel/freestanding/sys/README.md diff --git a/include/starkernel/freestanding/sys/time.h b/kernel/include/starkernel/freestanding/sys/time.h similarity index 100% rename from include/starkernel/freestanding/sys/time.h rename to kernel/include/starkernel/freestanding/sys/time.h diff --git a/include/starkernel/freestanding/sys/types.h b/kernel/include/starkernel/freestanding/sys/types.h similarity index 100% rename from include/starkernel/freestanding/sys/types.h rename to kernel/include/starkernel/freestanding/sys/types.h diff --git a/include/starkernel/freestanding/time.h b/kernel/include/starkernel/freestanding/time.h similarity index 100% rename from include/starkernel/freestanding/time.h rename to kernel/include/starkernel/freestanding/time.h diff --git a/include/starkernel/hal/README.md b/kernel/include/starkernel/hal/README.md similarity index 100% rename from include/starkernel/hal/README.md rename to kernel/include/starkernel/hal/README.md diff --git a/include/starkernel/hal/hal.h b/kernel/include/starkernel/hal/hal.h similarity index 100% rename from include/starkernel/hal/hal.h rename to kernel/include/starkernel/hal/hal.h diff --git a/include/starkernel/hal_memory.h b/kernel/include/starkernel/hal_memory.h similarity index 100% rename from include/starkernel/hal_memory.h rename to kernel/include/starkernel/hal_memory.h diff --git a/include/starkernel/homeblocks_sig.h b/kernel/include/starkernel/homeblocks_sig.h similarity index 100% rename from include/starkernel/homeblocks_sig.h rename to kernel/include/starkernel/homeblocks_sig.h diff --git a/include/starkernel/i8042.h b/kernel/include/starkernel/i8042.h similarity index 100% rename from include/starkernel/i8042.h rename to kernel/include/starkernel/i8042.h diff --git a/include/starkernel/ioapic.h b/kernel/include/starkernel/ioapic.h similarity index 100% rename from include/starkernel/ioapic.h rename to kernel/include/starkernel/ioapic.h diff --git a/include/starkernel/kernel_args.h b/kernel/include/starkernel/kernel_args.h similarity index 100% rename from include/starkernel/kernel_args.h rename to kernel/include/starkernel/kernel_args.h diff --git a/include/starkernel/kmalloc.h b/kernel/include/starkernel/kmalloc.h similarity index 100% rename from include/starkernel/kmalloc.h rename to kernel/include/starkernel/kmalloc.h diff --git a/include/starkernel/log.h b/kernel/include/starkernel/log.h similarity index 100% rename from include/starkernel/log.h rename to kernel/include/starkernel/log.h diff --git a/include/starkernel/log_attrib.h b/kernel/include/starkernel/log_attrib.h similarity index 100% rename from include/starkernel/log_attrib.h rename to kernel/include/starkernel/log_attrib.h diff --git a/include/starkernel/log_region.h b/kernel/include/starkernel/log_region.h similarity index 100% rename from include/starkernel/log_region.h rename to kernel/include/starkernel/log_region.h diff --git a/include/starkernel/pci.h b/kernel/include/starkernel/pci.h similarity index 100% rename from include/starkernel/pci.h rename to kernel/include/starkernel/pci.h diff --git a/include/starkernel/plic.h b/kernel/include/starkernel/plic.h similarity index 100% rename from include/starkernel/plic.h rename to kernel/include/starkernel/plic.h diff --git a/include/starkernel/pmm.h b/kernel/include/starkernel/pmm.h similarity index 100% rename from include/starkernel/pmm.h rename to kernel/include/starkernel/pmm.h diff --git a/include/starkernel/q48_16.h b/kernel/include/starkernel/q48_16.h similarity index 100% rename from include/starkernel/q48_16.h rename to kernel/include/starkernel/q48_16.h diff --git a/include/starkernel/repl.h b/kernel/include/starkernel/repl.h similarity index 100% rename from include/starkernel/repl.h rename to kernel/include/starkernel/repl.h diff --git a/include/starkernel/rng.h b/kernel/include/starkernel/rng.h similarity index 100% rename from include/starkernel/rng.h rename to kernel/include/starkernel/rng.h diff --git a/include/starkernel/rpi5_dtb.h b/kernel/include/starkernel/rpi5_dtb.h similarity index 100% rename from include/starkernel/rpi5_dtb.h rename to kernel/include/starkernel/rpi5_dtb.h diff --git a/include/starkernel/rpi5_mailbox.h b/kernel/include/starkernel/rpi5_mailbox.h similarity index 100% rename from include/starkernel/rpi5_mailbox.h rename to kernel/include/starkernel/rpi5_mailbox.h diff --git a/include/starkernel/rpi5_native_boot.h b/kernel/include/starkernel/rpi5_native_boot.h similarity index 100% rename from include/starkernel/rpi5_native_boot.h rename to kernel/include/starkernel/rpi5_native_boot.h diff --git a/include/starkernel/rpi5_native_entry.h b/kernel/include/starkernel/rpi5_native_entry.h similarity index 100% rename from include/starkernel/rpi5_native_entry.h rename to kernel/include/starkernel/rpi5_native_entry.h diff --git a/include/starkernel/scalar25519.h b/kernel/include/starkernel/scalar25519.h similarity index 100% rename from include/starkernel/scalar25519.h rename to kernel/include/starkernel/scalar25519.h diff --git a/include/starkernel/session.h b/kernel/include/starkernel/session.h similarity index 100% rename from include/starkernel/session.h rename to kernel/include/starkernel/session.h diff --git a/include/starkernel/sha512.h b/kernel/include/starkernel/sha512.h similarity index 100% rename from include/starkernel/sha512.h rename to kernel/include/starkernel/sha512.h diff --git a/include/starkernel/timer.h b/kernel/include/starkernel/timer.h similarity index 100% rename from include/starkernel/timer.h rename to kernel/include/starkernel/timer.h diff --git a/include/starkernel/ttf.h b/kernel/include/starkernel/ttf.h similarity index 100% rename from include/starkernel/ttf.h rename to kernel/include/starkernel/ttf.h diff --git a/include/starkernel/uefi.h b/kernel/include/starkernel/uefi.h similarity index 100% rename from include/starkernel/uefi.h rename to kernel/include/starkernel/uefi.h diff --git a/include/starkernel/user_identity_seed.h b/kernel/include/starkernel/user_identity_seed.h similarity index 100% rename from include/starkernel/user_identity_seed.h rename to kernel/include/starkernel/user_identity_seed.h diff --git a/kernel/include/starkernel/v4/sk_v4.h b/kernel/include/starkernel/v4/sk_v4.h new file mode 100644 index 00000000..0cc80925 --- /dev/null +++ b/kernel/include/starkernel/v4/sk_v4.h @@ -0,0 +1,16 @@ +/* sk_v4.h -- StarForth v4 on bare metal: one host node at a prompt. + * + * Built only with STARFORTH_V4=1 (Kconfig.kernel). + */ +#ifndef STARKERNEL_V4_SK_V4_H +#define STARKERNEL_V4_SK_V4_H + +/* Start one StarForth v4 host node from the capsule image linked into the + * kernel, with its console on the kernel's console, and run it. Does not + * return. */ +/* `chain` sets the kernel's block chain up. It is called when the node has + * booted and passed POST, before the prompt: as on the v3 path, POST runs + * against block RAM of its own and the chain comes after it. */ +void sk_v4_run(void (*chain)(void)); + +#endif /* STARKERNEL_V4_SK_V4_H */ diff --git a/include/starkernel/virtio_blk.h b/kernel/include/starkernel/virtio_blk.h similarity index 100% rename from include/starkernel/virtio_blk.h rename to kernel/include/starkernel/virtio_blk.h diff --git a/include/starkernel/virtio_input.h b/kernel/include/starkernel/virtio_input.h similarity index 100% rename from include/starkernel/virtio_input.h rename to kernel/include/starkernel/virtio_input.h diff --git a/include/starkernel/virtio_rng.h b/kernel/include/starkernel/virtio_rng.h similarity index 100% rename from include/starkernel/virtio_rng.h rename to kernel/include/starkernel/virtio_rng.h diff --git a/include/starkernel/vm/README.md b/kernel/include/starkernel/vm/README.md similarity index 100% rename from include/starkernel/vm/README.md rename to kernel/include/starkernel/vm/README.md diff --git a/include/starkernel/vm/arena.h b/kernel/include/starkernel/vm/arena.h similarity index 100% rename from include/starkernel/vm/arena.h rename to kernel/include/starkernel/vm/arena.h diff --git a/include/starkernel/vm/bootstrap/README.md b/kernel/include/starkernel/vm/bootstrap/README.md similarity index 100% rename from include/starkernel/vm/bootstrap/README.md rename to kernel/include/starkernel/vm/bootstrap/README.md diff --git a/include/starkernel/vm/bootstrap/sk_vm_bootstrap.h b/kernel/include/starkernel/vm/bootstrap/sk_vm_bootstrap.h similarity index 100% rename from include/starkernel/vm/bootstrap/sk_vm_bootstrap.h rename to kernel/include/starkernel/vm/bootstrap/sk_vm_bootstrap.h diff --git a/include/starkernel/vm/kernel_hermes.h b/kernel/include/starkernel/vm/kernel_hermes.h similarity index 100% rename from include/starkernel/vm/kernel_hermes.h rename to kernel/include/starkernel/vm/kernel_hermes.h diff --git a/include/starkernel/vm/parity.h b/kernel/include/starkernel/vm/parity.h similarity index 100% rename from include/starkernel/vm/parity.h rename to kernel/include/starkernel/vm/parity.h diff --git a/include/starkernel/vm/stadium.h b/kernel/include/starkernel/vm/stadium.h similarity index 100% rename from include/starkernel/vm/stadium.h rename to kernel/include/starkernel/vm/stadium.h diff --git a/include/starkernel/vm/stadium_blocks.h b/kernel/include/starkernel/vm/stadium_blocks.h similarity index 100% rename from include/starkernel/vm/stadium_blocks.h rename to kernel/include/starkernel/vm/stadium_blocks.h diff --git a/include/starkernel/vm/stadium_words.h b/kernel/include/starkernel/vm/stadium_words.h similarity index 100% rename from include/starkernel/vm/stadium_words.h rename to kernel/include/starkernel/vm/stadium_words.h diff --git a/include/starkernel/vm/switch.h b/kernel/include/starkernel/vm/switch.h similarity index 100% rename from include/starkernel/vm/switch.h rename to kernel/include/starkernel/vm/switch.h diff --git a/include/starkernel/vm_identity.h b/kernel/include/starkernel/vm_identity.h similarity index 100% rename from include/starkernel/vm_identity.h rename to kernel/include/starkernel/vm_identity.h diff --git a/include/starkernel/vm_uuid.h b/kernel/include/starkernel/vm_uuid.h similarity index 100% rename from include/starkernel/vm_uuid.h rename to kernel/include/starkernel/vm_uuid.h diff --git a/include/starkernel/vmm.h b/kernel/include/starkernel/vmm.h similarity index 100% rename from include/starkernel/vmm.h rename to kernel/include/starkernel/vmm.h diff --git a/include/starkernel/vt100.h b/kernel/include/starkernel/vt100.h similarity index 100% rename from include/starkernel/vt100.h rename to kernel/include/starkernel/vt100.h diff --git a/include/starkernel/x509_ed25519.h b/kernel/include/starkernel/x509_ed25519.h similarity index 100% rename from include/starkernel/x509_ed25519.h rename to kernel/include/starkernel/x509_ed25519.h diff --git a/include/starkernel/xhci.h b/kernel/include/starkernel/xhci.h similarity index 100% rename from include/starkernel/xhci.h rename to kernel/include/starkernel/xhci.h diff --git a/include/starkernel/xhci_driver.h b/kernel/include/starkernel/xhci_driver.h similarity index 100% rename from include/starkernel/xhci_driver.h rename to kernel/include/starkernel/xhci_driver.h diff --git a/include/starkernel/xxhash64.h b/kernel/include/starkernel/xxhash64.h similarity index 100% rename from include/starkernel/xxhash64.h rename to kernel/include/starkernel/xxhash64.h diff --git a/include/starkernel/zuse_cert_devblock.h b/kernel/include/starkernel/zuse_cert_devblock.h similarity index 100% rename from include/starkernel/zuse_cert_devblock.h rename to kernel/include/starkernel/zuse_cert_devblock.h diff --git a/include/starkernel/zuse_eligibility.h b/kernel/include/starkernel/zuse_eligibility.h similarity index 100% rename from include/starkernel/zuse_eligibility.h rename to kernel/include/starkernel/zuse_eligibility.h diff --git a/include/starkernel/zuse_eligibility_list.h b/kernel/include/starkernel/zuse_eligibility_list.h similarity index 100% rename from include/starkernel/zuse_eligibility_list.h rename to kernel/include/starkernel/zuse_eligibility_list.h diff --git a/include/starkernel/zuse_genesis_marker.h b/kernel/include/starkernel/zuse_genesis_marker.h similarity index 100% rename from include/starkernel/zuse_genesis_marker.h rename to kernel/include/starkernel/zuse_genesis_marker.h diff --git a/linker/README.md b/kernel/linker/README.md similarity index 100% rename from linker/README.md rename to kernel/linker/README.md diff --git a/linker/starkernel-amd64.ld b/kernel/linker/starkernel-amd64.ld similarity index 100% rename from linker/starkernel-amd64.ld rename to kernel/linker/starkernel-amd64.ld diff --git a/linker/starkernel-kernel-aarch64.ld b/kernel/linker/starkernel-kernel-aarch64.ld similarity index 100% rename from linker/starkernel-kernel-aarch64.ld rename to kernel/linker/starkernel-kernel-aarch64.ld diff --git a/linker/starkernel-kernel-amd64.ld b/kernel/linker/starkernel-kernel-amd64.ld similarity index 100% rename from linker/starkernel-kernel-amd64.ld rename to kernel/linker/starkernel-kernel-amd64.ld diff --git a/linker/starkernel-kernel-riscv64.ld b/kernel/linker/starkernel-kernel-riscv64.ld similarity index 100% rename from linker/starkernel-kernel-riscv64.ld rename to kernel/linker/starkernel-kernel-riscv64.ld diff --git a/linker/starkernel-loader-aarch64-pe.ld b/kernel/linker/starkernel-loader-aarch64-pe.ld similarity index 100% rename from linker/starkernel-loader-aarch64-pe.ld rename to kernel/linker/starkernel-loader-aarch64-pe.ld diff --git a/linker/starkernel-loader-aarch64.ld b/kernel/linker/starkernel-loader-aarch64.ld similarity index 100% rename from linker/starkernel-loader-aarch64.ld rename to kernel/linker/starkernel-loader-aarch64.ld diff --git a/linker/starkernel-loader-amd64-pe.ld b/kernel/linker/starkernel-loader-amd64-pe.ld similarity index 100% rename from linker/starkernel-loader-amd64-pe.ld rename to kernel/linker/starkernel-loader-amd64-pe.ld diff --git a/linker/starkernel-loader-amd64.ld b/kernel/linker/starkernel-loader-amd64.ld similarity index 100% rename from linker/starkernel-loader-amd64.ld rename to kernel/linker/starkernel-loader-amd64.ld diff --git a/linker/starkernel-loader-riscv64.ld b/kernel/linker/starkernel-loader-riscv64.ld similarity index 100% rename from linker/starkernel-loader-riscv64.ld rename to kernel/linker/starkernel-loader-riscv64.ld diff --git a/kernel/linker/starkernel-native-rpi5.ld b/kernel/linker/starkernel-native-rpi5.ld new file mode 100644 index 00000000..7a9c6b9e --- /dev/null +++ b/kernel/linker/starkernel-native-rpi5.ld @@ -0,0 +1,74 @@ +/* Linker script for the Raspberry Pi 5 native (non-UEFI) kernel image. + * + * Linked from the same objects as the aarch64 kernel ELF, entered at + * rpi5_native_start (arch/aarch64/native_rpi5_entry.S, section + * .text.entry -- placed first so it sits at the load address), then + * flattened with `objcopy -O binary` into kernel_2712.img. + * + * Load address 0x80000 must match boards/raspi/config.txt's + * kernel_address=0x80000: Pi 5 firmware's own default for + * kernel_2712.img is 0x200000, so the address is pinned on both sides + * rather than left to the firmware default. + * + * __kernel_start/__kernel_end span the whole image including .bss so + * pmm_init() reserves every page the image occupies (aarch64 boot.S's + * zero-length substitutes are only correct for the UEFI loader path, + * where UEFI owns the image pages). __bss_start/__bss_end are 16-byte + * aligned for the entry stub's zeroing loop: firmware does not clear + * memory past the end of the file it loads. + */ + +OUTPUT_FORMAT("elf64-littleaarch64") +OUTPUT_ARCH(aarch64) +ENTRY(rpi5_native_start) + +SECTIONS +{ + . = 0x80000; + + __kernel_start = .; + + .text : { + __text_start = .; + KEEP(*(.text.entry)) + *(.text .text.*) + __text_end = .; + } + + .rodata : ALIGN(4K) { + __rodata_start = .; + *(.rodata .rodata.*) + __rodata_end = .; + } + + .data : ALIGN(4K) { + __data_start = .; + *(.data .data.*) + *(.got .got.*) + __data_end = .; + } + + .rela.dyn : ALIGN(8) { + *(.rela .rela.*) + } + + .bss (NOLOAD) : ALIGN(4K) { + __bss_start = .; + *(.bss .bss.*) + *(COMMON) + . = ALIGN(16); + __bss_end = .; + } + + . = ALIGN(4K); + __kernel_end = .; + + /DISCARD/ : { + *(.comment) + *(.note*) + *(.eh_frame) + *(.dynamic) + *(.dynsym) + *(.interp) + } +} diff --git a/src/starkernel/README.md b/kernel/src/README.md similarity index 100% rename from src/starkernel/README.md rename to kernel/src/README.md diff --git a/src/starkernel/arch/aarch64/README.md b/kernel/src/arch/aarch64/README.md similarity index 100% rename from src/starkernel/arch/aarch64/README.md rename to kernel/src/arch/aarch64/README.md diff --git a/src/starkernel/arch/aarch64/apic.c b/kernel/src/arch/aarch64/apic.c similarity index 100% rename from src/starkernel/arch/aarch64/apic.c rename to kernel/src/arch/aarch64/apic.c diff --git a/src/starkernel/arch/aarch64/arch.c b/kernel/src/arch/aarch64/arch.c similarity index 100% rename from src/starkernel/arch/aarch64/arch.c rename to kernel/src/arch/aarch64/arch.c diff --git a/src/starkernel/arch/aarch64/boot.S b/kernel/src/arch/aarch64/boot.S similarity index 100% rename from src/starkernel/arch/aarch64/boot.S rename to kernel/src/arch/aarch64/boot.S diff --git a/src/starkernel/arch/aarch64/interrupts.c b/kernel/src/arch/aarch64/interrupts.c similarity index 100% rename from src/starkernel/arch/aarch64/interrupts.c rename to kernel/src/arch/aarch64/interrupts.c diff --git a/src/starkernel/arch/aarch64/isr.S b/kernel/src/arch/aarch64/isr.S similarity index 100% rename from src/starkernel/arch/aarch64/isr.S rename to kernel/src/arch/aarch64/isr.S diff --git a/src/starkernel/arch/aarch64/native_rpi5_entry.S b/kernel/src/arch/aarch64/native_rpi5_entry.S similarity index 68% rename from src/starkernel/arch/aarch64/native_rpi5_entry.S rename to kernel/src/arch/aarch64/native_rpi5_entry.S index 728c443e..7260ce9a 100644 --- a/src/starkernel/arch/aarch64/native_rpi5_entry.S +++ b/kernel/src/arch/aarch64/native_rpi5_entry.S @@ -26,16 +26,19 @@ * exists only so this file's own control flow has somewhere defined to * go if that contract is ever violated. * - * Build-system note: `Makefile.starkernel`'s `KERNEL_ASM` wildcards every - * `*.S` file in this directory into the monolithic kernel ELF build (not - * the PE/COFF loader build -- that list is explicit, boot.S/isr.S only, - * see the Makefile), so this file *does* compile and link into the - * existing ARCH=aarch64 QEMU/UEFI acceptance build. Nothing there ever - * branches to `rpi5_native_start` -- it is dead code in that build by - * design, exactly like `rpi5_dtb.c`/`rpi5_mailbox.c` before it. A real, - * separately-linked Pi 5 native boot image (its own linker script placing - * this code at 0x80000) does not exist yet -- that is a build-system task, - * not scoped into this item. + * Build-system note: `kernel/Makefile`'s `KERNEL_ASM` wildcards every + * `*.S` file in this directory into the kernel ELF build (not the PE/COFF + * loader build -- that list is explicit, boot.S/isr.S/switch.S only), so + * this file links into the ARCH=aarch64 QEMU/UEFI kernel ELF as dead + * code, and is the entry point of the separately-linked Pi 5 native + * image (`make boot_image TARGET=RASPI`): + * `kernel/linker/starkernel-native-rpi5.ld` places `.text.entry` first + * at 0x80000 and the image is flattened to `kernel_2712.img`. + * + * Pi 5 firmware loads only the file's bytes; `.bss` (NOLOAD) is whatever + * was in RAM. It is zeroed here, before anything in it -- including + * `g_rpi5_dtb_ptr` and this stub's own stack -- is used. x0 (the DTB + * pointer) is preserved across the loop; only x4-x6 are touched. */ .section .bss @@ -51,7 +54,7 @@ g_rpi5_native_stack: * BSS stacks */ g_rpi5_native_stack_top: - .section .text + .section .text.entry, "ax" .global rpi5_native_start rpi5_native_start: /* Mask x0 to its documented 32-bit DTB-pointer range (§IV.1: the @@ -60,6 +63,19 @@ rpi5_native_start: mov x1, #0xffffffff and x0, x0, x1 + /* Zero .bss: [__bss_start, __bss_end), both 16-byte aligned by the + * native linker script. */ + adrp x4, __bss_start + add x4, x4, :lo12:__bss_start + adrp x5, __bss_end + add x5, x5, :lo12:__bss_end +.Lbss_zero: + cmp x4, x5 + b.hs .Lbss_done + stp xzr, xzr, [x4], #16 + b .Lbss_zero +.Lbss_done: + adrp x2, g_rpi5_dtb_ptr add x2, x2, :lo12:g_rpi5_dtb_ptr str x0, [x2] diff --git a/src/starkernel/arch/aarch64/rpi5_dtb.c b/kernel/src/arch/aarch64/rpi5_dtb.c similarity index 100% rename from src/starkernel/arch/aarch64/rpi5_dtb.c rename to kernel/src/arch/aarch64/rpi5_dtb.c diff --git a/src/starkernel/arch/aarch64/rpi5_mailbox.c b/kernel/src/arch/aarch64/rpi5_mailbox.c similarity index 100% rename from src/starkernel/arch/aarch64/rpi5_mailbox.c rename to kernel/src/arch/aarch64/rpi5_mailbox.c diff --git a/src/starkernel/arch/aarch64/rpi5_native_boot.c b/kernel/src/arch/aarch64/rpi5_native_boot.c similarity index 100% rename from src/starkernel/arch/aarch64/rpi5_native_boot.c rename to kernel/src/arch/aarch64/rpi5_native_boot.c diff --git a/src/starkernel/arch/aarch64/switch.S b/kernel/src/arch/aarch64/switch.S similarity index 100% rename from src/starkernel/arch/aarch64/switch.S rename to kernel/src/arch/aarch64/switch.S diff --git a/src/starkernel/arch/aarch64/timer.c b/kernel/src/arch/aarch64/timer.c similarity index 100% rename from src/starkernel/arch/aarch64/timer.c rename to kernel/src/arch/aarch64/timer.c diff --git a/src/starkernel/arch/amd64/README.md b/kernel/src/arch/amd64/README.md similarity index 100% rename from src/starkernel/arch/amd64/README.md rename to kernel/src/arch/amd64/README.md diff --git a/src/starkernel/arch/amd64/apic.c b/kernel/src/arch/amd64/apic.c similarity index 100% rename from src/starkernel/arch/amd64/apic.c rename to kernel/src/arch/amd64/apic.c diff --git a/src/starkernel/arch/amd64/arch.c b/kernel/src/arch/amd64/arch.c similarity index 100% rename from src/starkernel/arch/amd64/arch.c rename to kernel/src/arch/amd64/arch.c diff --git a/src/starkernel/arch/amd64/boot.S b/kernel/src/arch/amd64/boot.S similarity index 100% rename from src/starkernel/arch/amd64/boot.S rename to kernel/src/arch/amd64/boot.S diff --git a/src/starkernel/arch/amd64/i8042.c b/kernel/src/arch/amd64/i8042.c similarity index 100% rename from src/starkernel/arch/amd64/i8042.c rename to kernel/src/arch/amd64/i8042.c diff --git a/src/starkernel/arch/amd64/interrupts.c b/kernel/src/arch/amd64/interrupts.c similarity index 100% rename from src/starkernel/arch/amd64/interrupts.c rename to kernel/src/arch/amd64/interrupts.c diff --git a/src/starkernel/arch/amd64/ioapic.c b/kernel/src/arch/amd64/ioapic.c similarity index 100% rename from src/starkernel/arch/amd64/ioapic.c rename to kernel/src/arch/amd64/ioapic.c diff --git a/src/starkernel/arch/amd64/isr.S b/kernel/src/arch/amd64/isr.S similarity index 100% rename from src/starkernel/arch/amd64/isr.S rename to kernel/src/arch/amd64/isr.S diff --git a/src/starkernel/arch/amd64/kernel_entry.S b/kernel/src/arch/amd64/kernel_entry.S similarity index 100% rename from src/starkernel/arch/amd64/kernel_entry.S rename to kernel/src/arch/amd64/kernel_entry.S diff --git a/src/starkernel/arch/amd64/switch.S b/kernel/src/arch/amd64/switch.S similarity index 100% rename from src/starkernel/arch/amd64/switch.S rename to kernel/src/arch/amd64/switch.S diff --git a/src/starkernel/arch/amd64/timer.c b/kernel/src/arch/amd64/timer.c similarity index 100% rename from src/starkernel/arch/amd64/timer.c rename to kernel/src/arch/amd64/timer.c diff --git a/src/starkernel/arch/riscv64/README.md b/kernel/src/arch/riscv64/README.md similarity index 100% rename from src/starkernel/arch/riscv64/README.md rename to kernel/src/arch/riscv64/README.md diff --git a/src/starkernel/arch/riscv64/apic.c b/kernel/src/arch/riscv64/apic.c similarity index 100% rename from src/starkernel/arch/riscv64/apic.c rename to kernel/src/arch/riscv64/apic.c diff --git a/src/starkernel/arch/riscv64/arch.c b/kernel/src/arch/riscv64/arch.c similarity index 100% rename from src/starkernel/arch/riscv64/arch.c rename to kernel/src/arch/riscv64/arch.c diff --git a/src/starkernel/arch/riscv64/boot.S b/kernel/src/arch/riscv64/boot.S similarity index 100% rename from src/starkernel/arch/riscv64/boot.S rename to kernel/src/arch/riscv64/boot.S diff --git a/src/starkernel/arch/riscv64/interrupts.c b/kernel/src/arch/riscv64/interrupts.c similarity index 100% rename from src/starkernel/arch/riscv64/interrupts.c rename to kernel/src/arch/riscv64/interrupts.c diff --git a/src/starkernel/arch/riscv64/isr.S b/kernel/src/arch/riscv64/isr.S similarity index 100% rename from src/starkernel/arch/riscv64/isr.S rename to kernel/src/arch/riscv64/isr.S diff --git a/src/starkernel/arch/riscv64/kernel_entry.S b/kernel/src/arch/riscv64/kernel_entry.S similarity index 100% rename from src/starkernel/arch/riscv64/kernel_entry.S rename to kernel/src/arch/riscv64/kernel_entry.S diff --git a/src/starkernel/arch/riscv64/plic.c b/kernel/src/arch/riscv64/plic.c similarity index 100% rename from src/starkernel/arch/riscv64/plic.c rename to kernel/src/arch/riscv64/plic.c diff --git a/src/starkernel/arch/riscv64/switch.S b/kernel/src/arch/riscv64/switch.S similarity index 100% rename from src/starkernel/arch/riscv64/switch.S rename to kernel/src/arch/riscv64/switch.S diff --git a/src/starkernel/arch/riscv64/timer.c b/kernel/src/arch/riscv64/timer.c similarity index 100% rename from src/starkernel/arch/riscv64/timer.c rename to kernel/src/arch/riscv64/timer.c diff --git a/src/starkernel/artemis_sig.c b/kernel/src/artemis_sig.c similarity index 100% rename from src/starkernel/artemis_sig.c rename to kernel/src/artemis_sig.c diff --git a/src/starkernel/boot/README.md b/kernel/src/boot/README.md similarity index 100% rename from src/starkernel/boot/README.md rename to kernel/src/boot/README.md diff --git a/src/starkernel/boot/cmdline.c b/kernel/src/boot/cmdline.c similarity index 100% rename from src/starkernel/boot/cmdline.c rename to kernel/src/boot/cmdline.c diff --git a/src/starkernel/boot/elf_loader.c b/kernel/src/boot/elf_loader.c similarity index 100% rename from src/starkernel/boot/elf_loader.c rename to kernel/src/boot/elf_loader.c diff --git a/src/starkernel/boot/reloc.S b/kernel/src/boot/reloc.S similarity index 100% rename from src/starkernel/boot/reloc.S rename to kernel/src/boot/reloc.S diff --git a/src/starkernel/boot/reloc_stub.c b/kernel/src/boot/reloc_stub.c similarity index 100% rename from src/starkernel/boot/reloc_stub.c rename to kernel/src/boot/reloc_stub.c diff --git a/src/starkernel/boot/uefi_loader.c b/kernel/src/boot/uefi_loader.c similarity index 100% rename from src/starkernel/boot/uefi_loader.c rename to kernel/src/boot/uefi_loader.c diff --git a/src/starkernel/capsule/README.md b/kernel/src/capsule/README.md similarity index 100% rename from src/starkernel/capsule/README.md rename to kernel/src/capsule/README.md diff --git a/src/starkernel/capsule/capsule_birth.c b/kernel/src/capsule/capsule_birth.c similarity index 100% rename from src/starkernel/capsule/capsule_birth.c rename to kernel/src/capsule/capsule_birth.c diff --git a/kernel/src/capsule/capsule_blocks.c b/kernel/src/capsule/capsule_blocks.c new file mode 100644 index 00000000..2a8c2448 --- /dev/null +++ b/kernel/src/capsule/capsule_blocks.c @@ -0,0 +1,29 @@ +/* capsule_blocks.c -- the block format of a .4th capsule payload. + * See capsule_blocks.h. Nothing here uses the C library or a VM. + */ +#include "starkernel/capsule_blocks.h" + +int capsule_block_header(const uint8_t *p, const uint8_t *end, + uint32_t *out_num, const uint8_t **out_after) +{ + const uint8_t *q; + uint32_t num = 0; + + if ((uint64_t)(end - p) < 7u) return 0; + if (p[0] != 'B' || p[1] != 'l' || p[2] != 'o' || p[3] != 'c' || p[4] != 'k' || p[5] != ' ') + return 0; + + q = p + 6; + if (q >= end || *q < '0' || *q > '9') return 0; + while (q < end && *q >= '0' && *q <= '9') { + num = num * 10u + (uint32_t)(*q - '0'); + q++; + } + + while (q < end && *q != '\n') q++; + if (q < end) q++; + + *out_num = num; + *out_after = q; + return 1; +} diff --git a/src/starkernel/capsule/capsule_console.c b/kernel/src/capsule/capsule_console.c similarity index 100% rename from src/starkernel/capsule/capsule_console.c rename to kernel/src/capsule/capsule_console.c diff --git a/src/starkernel/capsule/capsule_find.c b/kernel/src/capsule/capsule_find.c similarity index 100% rename from src/starkernel/capsule/capsule_find.c rename to kernel/src/capsule/capsule_find.c diff --git a/src/starkernel/capsule/capsule_loader.c b/kernel/src/capsule/capsule_loader.c similarity index 99% rename from src/starkernel/capsule/capsule_loader.c rename to kernel/src/capsule/capsule_loader.c index 41f9abcf..7e120224 100644 --- a/src/starkernel/capsule/capsule_loader.c +++ b/kernel/src/capsule/capsule_loader.c @@ -95,7 +95,9 @@ int capsule_blk_init(void *vm, uint8_t *ram_buf, size_t ram_size, uint8_t *krd_buf) { - int rc = blk_subsys_init((VM *)vm, ram_buf, ram_size); + int rc; + (void)vm; /* the block subsystem no longer takes one */ + rc = blk_subsys_init(ram_buf, ram_size); if (rc != 0) return rc; return blk_subsys_add_raw_device(krd_buf, KRD_MAX_BLOCKS); } diff --git a/src/starkernel/capsule/capsule_mint.c b/kernel/src/capsule/capsule_mint.c similarity index 100% rename from src/starkernel/capsule/capsule_mint.c rename to kernel/src/capsule/capsule_mint.c diff --git a/src/starkernel/capsule/capsule_run.c b/kernel/src/capsule/capsule_run.c similarity index 100% rename from src/starkernel/capsule/capsule_run.c rename to kernel/src/capsule/capsule_run.c diff --git a/src/starkernel/capsule/capsule_runcap.c b/kernel/src/capsule/capsule_runcap.c similarity index 100% rename from src/starkernel/capsule/capsule_runcap.c rename to kernel/src/capsule/capsule_runcap.c diff --git a/src/starkernel/capsule/capsule_sig.c b/kernel/src/capsule/capsule_sig.c similarity index 100% rename from src/starkernel/capsule/capsule_sig.c rename to kernel/src/capsule/capsule_sig.c diff --git a/src/starkernel/capsule/capsule_validate.c b/kernel/src/capsule/capsule_validate.c similarity index 100% rename from src/starkernel/capsule/capsule_validate.c rename to kernel/src/capsule/capsule_validate.c diff --git a/src/starkernel/capsule/capsule_vm_hooks.c b/kernel/src/capsule/capsule_vm_hooks.c similarity index 100% rename from src/starkernel/capsule/capsule_vm_hooks.c rename to kernel/src/capsule/capsule_vm_hooks.c diff --git a/src/starkernel/capsule/capsule_vm_physics.c b/kernel/src/capsule/capsule_vm_physics.c similarity index 100% rename from src/starkernel/capsule/capsule_vm_physics.c rename to kernel/src/capsule/capsule_vm_physics.c diff --git a/src/starkernel/capsule/capsule_vm_switch_signal.c b/kernel/src/capsule/capsule_vm_switch_signal.c similarity index 100% rename from src/starkernel/capsule/capsule_vm_switch_signal.c rename to kernel/src/capsule/capsule_vm_switch_signal.c diff --git a/src/starkernel/capsule/capsule_wirebind.c b/kernel/src/capsule/capsule_wirebind.c similarity index 100% rename from src/starkernel/capsule/capsule_wirebind.c rename to kernel/src/capsule/capsule_wirebind.c diff --git a/src/starkernel/capsule/capsule_zuse_boot.c b/kernel/src/capsule/capsule_zuse_boot.c similarity index 100% rename from src/starkernel/capsule/capsule_zuse_boot.c rename to kernel/src/capsule/capsule_zuse_boot.c diff --git a/src/starkernel/capsule/mama_forth_words.c b/kernel/src/capsule/mama_forth_words.c similarity index 99% rename from src/starkernel/capsule/mama_forth_words.c rename to kernel/src/capsule/mama_forth_words.c index 900885f8..404cf5f2 100644 --- a/src/starkernel/capsule/mama_forth_words.c +++ b/kernel/src/capsule/mama_forth_words.c @@ -54,7 +54,7 @@ #include "starkernel/capsule_run.h" #include "starkernel/capsule_loader.h" #include "starkernel/capsule_vm_physics.h" -#include "starkernel/vm/vm_internal.h" +#include "../vm/vm_internal.h" #include "starkernel/vm/stadium.h" /* item 4.2 -- STADIUM-* words */ #include "starkernel/capsule_vm_switch_signal.h" /* FABRIC-3.md §XXVIII Stage 3 follow-on -- SWITCH-MARK-WORK */ #include "starkernel/vm/stadium_words.h" /* item 4.2 -- stadium_words_resident_heat() */ diff --git a/src/starkernel/capsule/vm_identity.c b/kernel/src/capsule/vm_identity.c similarity index 100% rename from src/starkernel/capsule/vm_identity.c rename to kernel/src/capsule/vm_identity.c diff --git a/src/starkernel/capsule/vm_uuid.c b/kernel/src/capsule/vm_uuid.c similarity index 100% rename from src/starkernel/capsule/vm_uuid.c rename to kernel/src/capsule/vm_uuid.c diff --git a/src/starkernel/capsule/zuse_eligibility.c b/kernel/src/capsule/zuse_eligibility.c similarity index 100% rename from src/starkernel/capsule/zuse_eligibility.c rename to kernel/src/capsule/zuse_eligibility.c diff --git a/src/starkernel/crypto/ed25519.c b/kernel/src/crypto/ed25519.c similarity index 100% rename from src/starkernel/crypto/ed25519.c rename to kernel/src/crypto/ed25519.c diff --git a/src/starkernel/crypto/fe25519.c b/kernel/src/crypto/fe25519.c similarity index 100% rename from src/starkernel/crypto/fe25519.c rename to kernel/src/crypto/fe25519.c diff --git a/src/starkernel/crypto/scalar25519.c b/kernel/src/crypto/scalar25519.c similarity index 100% rename from src/starkernel/crypto/scalar25519.c rename to kernel/src/crypto/scalar25519.c diff --git a/src/starkernel/crypto/sha512.c b/kernel/src/crypto/sha512.c similarity index 100% rename from src/starkernel/crypto/sha512.c rename to kernel/src/crypto/sha512.c diff --git a/src/starkernel/crypto/x509_ed25519.c b/kernel/src/crypto/x509_ed25519.c similarity index 100% rename from src/starkernel/crypto/x509_ed25519.c rename to kernel/src/crypto/x509_ed25519.c diff --git a/src/starkernel/doe_log.c b/kernel/src/doe_log.c similarity index 100% rename from src/starkernel/doe_log.c rename to kernel/src/doe_log.c diff --git a/src/starkernel/hal/README.md b/kernel/src/hal/README.md similarity index 100% rename from src/starkernel/hal/README.md rename to kernel/src/hal/README.md diff --git a/src/starkernel/hal/console.c b/kernel/src/hal/console.c similarity index 100% rename from src/starkernel/hal/console.c rename to kernel/src/hal/console.c diff --git a/src/starkernel/hal/fdt.c b/kernel/src/hal/fdt.c similarity index 100% rename from src/starkernel/hal/fdt.c rename to kernel/src/hal/fdt.c diff --git a/src/starkernel/hal/font_8x16.c b/kernel/src/hal/font_8x16.c similarity index 100% rename from src/starkernel/hal/font_8x16.c rename to kernel/src/hal/font_8x16.c diff --git a/src/starkernel/hal/framebuffer.c b/kernel/src/hal/framebuffer.c similarity index 100% rename from src/starkernel/hal/framebuffer.c rename to kernel/src/hal/framebuffer.c diff --git a/src/starkernel/hal/hal.c b/kernel/src/hal/hal.c similarity index 100% rename from src/starkernel/hal/hal.c rename to kernel/src/hal/hal.c diff --git a/src/starkernel/hal/host_services.c b/kernel/src/hal/host_services.c similarity index 100% rename from src/starkernel/hal/host_services.c rename to kernel/src/hal/host_services.c diff --git a/src/starkernel/hal/memory.c b/kernel/src/hal/memory.c similarity index 100% rename from src/starkernel/hal/memory.c rename to kernel/src/hal/memory.c diff --git a/src/starkernel/hal/ttf.c b/kernel/src/hal/ttf.c similarity index 100% rename from src/starkernel/hal/ttf.c rename to kernel/src/hal/ttf.c diff --git a/src/starkernel/hal/vt100.c b/kernel/src/hal/vt100.c similarity index 100% rename from src/starkernel/hal/vt100.c rename to kernel/src/hal/vt100.c diff --git a/src/starkernel/hash/README.md b/kernel/src/hash/README.md similarity index 100% rename from src/starkernel/hash/README.md rename to kernel/src/hash/README.md diff --git a/src/starkernel/hash/xxhash64.c b/kernel/src/hash/xxhash64.c similarity index 100% rename from src/starkernel/hash/xxhash64.c rename to kernel/src/hash/xxhash64.c diff --git a/src/starkernel/heartbeat.c b/kernel/src/heartbeat.c similarity index 100% rename from src/starkernel/heartbeat.c rename to kernel/src/heartbeat.c diff --git a/src/starkernel/homeblocks_sig.c b/kernel/src/homeblocks_sig.c similarity index 100% rename from src/starkernel/homeblocks_sig.c rename to kernel/src/homeblocks_sig.c diff --git a/src/starkernel/kernel_main.c b/kernel/src/kernel_main.c similarity index 97% rename from src/starkernel/kernel_main.c rename to kernel/src/kernel_main.c index 4a4329e2..c8d713d1 100644 --- a/src/starkernel/kernel_main.c +++ b/kernel/src/kernel_main.c @@ -81,6 +81,9 @@ EFI_RUNTIME_SERVICES *g_sk_runtime_services = NULL; log.h's line length (LOG_MSG_LINE_MAX, 256) are distinct names */ #include "version.h" +#ifdef STARFORTH_V4 +#include "starkernel/v4/sk_v4.h" +#endif #endif /* Forward declaration — kernel_main_deep contains everything from heartbeat @@ -456,6 +459,46 @@ void kernel_main(BootInfo *boot_info) { kernel_main_deep(boot_info); } +#ifdef STARFORTH_V4 +/* THE BLOCK CHAIN, for the v4 node. It asks this kernel for its blocks + * (v4/include/v4/blocks.h, docs/v4.0.0/MESH.md 8.3). The chain is set up + * with the calls the v3 path makes and in its order -- fast RAM and the + * ramdrive, then PCI, then the virtio disk -- and, as there, after POST. + * What the v3 path does next with that disk is not done here, because it is + * Artemis's and Zuse's and v4 has neither yet: the genesis signature, + * Zuse's root key, and the owner's word that the disk may be formatted. + * Until an owner gives that word the subsystem reads the disk and will not + * write it. */ +static BootInfo *sk_v4_boot_info; +static void sk_v4_block_chain(void) +{ + const size_t ram_size = (size_t)BLK_RAM_BLOCKS * BLK_FORTH_SIZE, krd_size = 1024u * 1024u; + uint8_t *blk_ram = (uint8_t *)kmalloc(ram_size); + uint8_t *krd = (uint8_t *)kmalloc(krd_size); + static blkio_dev_t artemis_dev; + size_t i; + + if (!blk_ram || !krd) { + console_println("StarForth v4: no memory for the block chain"); + for (;;) { } + } + for (i = 0; i < ram_size; i++) blk_ram[i] = 0; /* a node is not to read what was in the kernel's heap */ + for (i = 0; i < krd_size; i++) krd[i] = 0; + if (capsule_blk_init(NULL, blk_ram, ram_size, krd) != 0) { + console_println("StarForth v4: the block chain could not be set up"); + for (;;) { } + } + console_println("PCI: init..."); + pci_init(sk_v4_boot_info->acpi_table); + if (virtio_blk_find_artemis(&artemis_dev) == 0) { + console_println("Artemis: virtio-blk attached"); + blk_subsys_attach_device(&artemis_dev); + } else { + console_println("Artemis: no virtio-blk disk"); + } +} +#endif + /** * @brief Deep kernel initialisation — M5 heartbeat, M7 VM bootstrap, and REPL. * @@ -512,6 +555,14 @@ static void kernel_main_deep(BootInfo *boot_info) { console_println("Kernel initialization complete."); console_println("Boot successful!\n"); +#ifdef STARFORTH_V4 + /* StarForth v4 at a single prompt (Kconfig STARFORTH_V4): one host node + * of the F18-derived engine, in place of the v3 VM and everything below. + * It does not return. */ + sk_v4_boot_info = boot_info; + sk_v4_run(sk_v4_block_chain); +#endif + #ifdef STARFORTH_ENABLE_VM /* Stadium: boot-time allocation (FABRIC-0.md item 3.2), before any VM * exists (§6). Soft failure -- nothing downstream consumes the Stadium diff --git a/src/starkernel/log_region.c b/kernel/src/log_region.c similarity index 100% rename from src/starkernel/log_region.c rename to kernel/src/log_region.c diff --git a/src/starkernel/math/README.md b/kernel/src/math/README.md similarity index 100% rename from src/starkernel/math/README.md rename to kernel/src/math/README.md diff --git a/src/starkernel/math/q48_16.c b/kernel/src/math/q48_16.c similarity index 100% rename from src/starkernel/math/q48_16.c rename to kernel/src/math/q48_16.c diff --git a/src/starkernel/memory/README.md b/kernel/src/memory/README.md similarity index 100% rename from src/starkernel/memory/README.md rename to kernel/src/memory/README.md diff --git a/src/starkernel/memory/kmalloc.c b/kernel/src/memory/kmalloc.c similarity index 100% rename from src/starkernel/memory/kmalloc.c rename to kernel/src/memory/kmalloc.c diff --git a/src/starkernel/memory/pmm.c b/kernel/src/memory/pmm.c similarity index 100% rename from src/starkernel/memory/pmm.c rename to kernel/src/memory/pmm.c diff --git a/src/starkernel/memory/vmm.c b/kernel/src/memory/vmm.c similarity index 100% rename from src/starkernel/memory/vmm.c rename to kernel/src/memory/vmm.c diff --git a/src/starkernel/pci/README.md b/kernel/src/pci/README.md similarity index 100% rename from src/starkernel/pci/README.md rename to kernel/src/pci/README.md diff --git a/src/starkernel/pci/pci.c b/kernel/src/pci/pci.c similarity index 100% rename from src/starkernel/pci/pci.c rename to kernel/src/pci/pci.c diff --git a/src/starkernel/repl.c b/kernel/src/repl.c similarity index 100% rename from src/starkernel/repl.c rename to kernel/src/repl.c diff --git a/src/starkernel/rng/rng.c b/kernel/src/rng/rng.c similarity index 100% rename from src/starkernel/rng/rng.c rename to kernel/src/rng/rng.c diff --git a/src/starkernel/usb/blkio_usb.c b/kernel/src/usb/blkio_usb.c similarity index 100% rename from src/starkernel/usb/blkio_usb.c rename to kernel/src/usb/blkio_usb.c diff --git a/src/starkernel/usb/xhci.c b/kernel/src/usb/xhci.c similarity index 100% rename from src/starkernel/usb/xhci.c rename to kernel/src/usb/xhci.c diff --git a/kernel/src/v4/sk_v4.c b/kernel/src/v4/sk_v4.c new file mode 100644 index 00000000..72ae6597 --- /dev/null +++ b/kernel/src/v4/sk_v4.c @@ -0,0 +1,124 @@ +/* sk_v4.c -- StarForth v4 on bare metal: one host node at a prompt. + * + * The node is the golden model of the F18-derived engine (v4/src). It comes + * up as the hosted v4 system does, by v4_boot_run (v4/include/v4/boot.h): + * the nucleus image, then the capsules from the directory baked into this + * kernel, each checked and its parity line printed, then the prompt. + * docs/v4.0.0/NUCLEUS.md. This file is all the kernel adds: + * + * - what the node prints goes to the kernel's console; + * - the prompt, and the line: it is read and edited here and handed to the + * node whole (docs/v4.0.0/ENGINE.md 3.1), and how it ended is said here; + * - blocks are kept in memory, and are gone at power-off. + * + * This is the lone node, started before the kernel's fleet and beside it. + * It goes when the node is brought up in the VM's place (ENGINE.md step 4). + * + * Nothing of the v3 VM is started. docs/v4.0.0/DECOMPOSITION.md. + */ +#include "starkernel/v4/sk_v4.h" +#include "starkernel/console.h" +#include "starkernel/arch.h" +#include "v4/boot.h" +#include "block_subsystem.h" + +#define SK_V4_LINE 255u /* what the line editor here takes */ + +static v4_node sk_v4_node; +static v4_exec_state sk_v4_es; +static v4_heat sk_v4_heat; + +static char sk_v4_text[SK_V4_LINE + 1u]; + +/* POST's block RAM, as the v3 path has (sk_vm_bootstrap.c, sk_post_blk_ram): + * the node boots and is POSTed with these blocks, 1 to 2047 and nothing + * above them, and the kernel's real chain is set up afterwards. */ +static uint8_t sk_v4_post_blk_ram[BLK_RAM_BLOCKS * BLK_FORTH_SIZE]; + +static void sk_v4_out(const char *text, unsigned len) +{ + unsigned i; + for (i = 0; i < len; i++) console_putc(text[i]); +} + +/* a character for a line that reads the keyboard, when there is one */ +static int sk_v4_key(void) +{ + int c = console_getc(); + return c < 0 ? V4_BOOT_KEY_NONE : c; +} + +/* THE KERNEL'S WORDS for the lone node. BYE is v3's (mama_word_bye): a cold + * restart. v3's reaps Hera's children first; the lone node is started + * before there is a fleet, so there are none. The rest of the kernel's + * words come when the node is brought up in the VM's place (ENGINE.md + * step 4), where v3's own functions serve them. */ +static const char *const sk_v4_words[] = { "BYE" }; + +static void sk_v4_serve(v4_node *node, unsigned request) +{ + (void)node; + if (request == 1) { + console_println("BYE: cold restart"); + arch_cold_reset(); + } +} + +/* Read a line from the keyboard: characters are echoed, backspace rubs one + * out, Enter ends it. Returns its length. */ +static unsigned sk_v4_readline(void) +{ + unsigned len = 0; + for (;;) { + int c = console_getc(); + if (c < 0) continue; + if (c == '\r' || c == '\n') { console_putc('\n'); return len; } + if (c == 8 || c == 127) { + if (len > 0) { len--; console_putc(8); console_putc(' '); console_putc(8); } + } else if (c >= 32 && c < 127 && len < SK_V4_LINE) { + sk_v4_text[len++] = (char)c; + console_putc((char)c); + } + } +} + +void sk_v4_run(void (*chain)(void)) +{ + v4_boot boot; + + console_println("StarForth v4: one host node, the F18-derived engine"); + boot.n = &sk_v4_node; boot.es = &sk_v4_es; boot.h = &sk_v4_heat; boot.im = &v4_capsule_image; + boot.out = sk_v4_out; boot.key = sk_v4_key; + boot.words = sk_v4_words; boot.word_count = sizeof sk_v4_words / sizeof sk_v4_words[0]; boot.serve = sk_v4_serve; + blk_subsys_init(sk_v4_post_blk_ram, sizeof(sk_v4_post_blk_ram)); + if (!v4_boot_run(&boot)) { + console_println("StarForth v4: not started"); + for (;;) { } + } + if (chain) { + /* the blocks are other blocks now: what the node has in its two + * buffers is POST's, and is let go */ + chain(); + if (v4_boot_line(&boot, "EMPTY-BUFFERS", 13) != V4_TEXT_COMPLETED) { + console_println("StarForth v4: the node did not let go of POST's blocks"); + for (;;) { } + } + } + + /* The prompt is the host's: read a line, hand it to the node, say how it + * ended. */ + for (;;) { + unsigned len; + int how; + + console_puts("ok> "); + len = sk_v4_readline(); + how = v4_boot_line(&boot, sk_v4_text, len); + if (how == V4_TEXT_COMPLETED) console_puts(" ok\n"); + else if (how == V4_TEXT_ERROR) console_puts(" ERROR\n"); + else if (how == V4_BOOT_LINE_STOPPED) { + console_println("StarForth v4: the node stopped on a fault"); + for (;;) { } + } + } +} diff --git a/src/starkernel/virtio/README.md b/kernel/src/virtio/README.md similarity index 100% rename from src/starkernel/virtio/README.md rename to kernel/src/virtio/README.md diff --git a/src/starkernel/virtio/virtio_blk.c b/kernel/src/virtio/virtio_blk.c similarity index 100% rename from src/starkernel/virtio/virtio_blk.c rename to kernel/src/virtio/virtio_blk.c diff --git a/src/starkernel/virtio/virtio_input.c b/kernel/src/virtio/virtio_input.c similarity index 100% rename from src/starkernel/virtio/virtio_input.c rename to kernel/src/virtio/virtio_input.c diff --git a/src/starkernel/virtio/virtio_rng.c b/kernel/src/virtio/virtio_rng.c similarity index 100% rename from src/starkernel/virtio/virtio_rng.c rename to kernel/src/virtio/virtio_rng.c diff --git a/src/starkernel/vm/README.md b/kernel/src/vm/README.md similarity index 100% rename from src/starkernel/vm/README.md rename to kernel/src/vm/README.md diff --git a/src/starkernel/vm/alloc_kernel.c b/kernel/src/vm/alloc_kernel.c similarity index 100% rename from src/starkernel/vm/alloc_kernel.c rename to kernel/src/vm/alloc_kernel.c diff --git a/src/starkernel/vm/arena.c b/kernel/src/vm/arena.c similarity index 100% rename from src/starkernel/vm/arena.c rename to kernel/src/vm/arena.c diff --git a/src/starkernel/vm/bootstrap/README.md b/kernel/src/vm/bootstrap/README.md similarity index 100% rename from src/starkernel/vm/bootstrap/README.md rename to kernel/src/vm/bootstrap/README.md diff --git a/src/starkernel/vm/bootstrap/sk_vm_bootstrap.c b/kernel/src/vm/bootstrap/sk_vm_bootstrap.c similarity index 99% rename from src/starkernel/vm/bootstrap/sk_vm_bootstrap.c rename to kernel/src/vm/bootstrap/sk_vm_bootstrap.c index 4ff17917..90525c46 100644 --- a/src/starkernel/vm/bootstrap/sk_vm_bootstrap.c +++ b/kernel/src/vm/bootstrap/sk_vm_bootstrap.c @@ -303,7 +303,7 @@ int sk_vm_bootstrap_parity(ParityPacket *out) { /* Initialize block subsystem for POST — mirrors hosted main.c init order. * Without this, all block word tests fail with vm->error=1 (blk_is_valid→0). */ - blk_subsys_init(vm, sk_post_blk_ram, sizeof(sk_post_blk_ram)); + blk_subsys_init(sk_post_blk_ram, sizeof(sk_post_blk_ram)); /* Run full POST (Power-On Self Test) */ console_println("POST: Running comprehensive test suite..."); diff --git a/src/starkernel/vm/host/README.md b/kernel/src/vm/host/README.md similarity index 100% rename from src/starkernel/vm/host/README.md rename to kernel/src/vm/host/README.md diff --git a/src/starkernel/vm/host/shim.c b/kernel/src/vm/host/shim.c similarity index 100% rename from src/starkernel/vm/host/shim.c rename to kernel/src/vm/host/shim.c diff --git a/src/starkernel/vm/kernel_hermes.c b/kernel/src/vm/kernel_hermes.c similarity index 100% rename from src/starkernel/vm/kernel_hermes.c rename to kernel/src/vm/kernel_hermes.c diff --git a/src/starkernel/vm/parity.c b/kernel/src/vm/parity.c similarity index 100% rename from src/starkernel/vm/parity.c rename to kernel/src/vm/parity.c diff --git a/src/starkernel/vm/q48_stubs.c b/kernel/src/vm/q48_stubs.c similarity index 100% rename from src/starkernel/vm/q48_stubs.c rename to kernel/src/vm/q48_stubs.c diff --git a/src/starkernel/vm/session.c b/kernel/src/vm/session.c similarity index 100% rename from src/starkernel/vm/session.c rename to kernel/src/vm/session.c diff --git a/src/starkernel/vm/stadium.c b/kernel/src/vm/stadium.c similarity index 100% rename from src/starkernel/vm/stadium.c rename to kernel/src/vm/stadium.c diff --git a/src/starkernel/vm/stadium_blocks.c b/kernel/src/vm/stadium_blocks.c similarity index 100% rename from src/starkernel/vm/stadium_blocks.c rename to kernel/src/vm/stadium_blocks.c diff --git a/src/starkernel/vm/stadium_words.c b/kernel/src/vm/stadium_words.c similarity index 100% rename from src/starkernel/vm/stadium_words.c rename to kernel/src/vm/stadium_words.c diff --git a/src/starkernel/vm/switch.c b/kernel/src/vm/switch.c similarity index 100% rename from src/starkernel/vm/switch.c rename to kernel/src/vm/switch.c diff --git a/src/starkernel/vm/vm_bootstrap.c b/kernel/src/vm/vm_bootstrap.c similarity index 96% rename from src/starkernel/vm/vm_bootstrap.c rename to kernel/src/vm/vm_bootstrap.c index 961bd192..2c2f0ec5 100644 --- a/src/starkernel/vm/vm_bootstrap.c +++ b/kernel/src/vm/vm_bootstrap.c @@ -44,14 +44,14 @@ * vm_bootstrap.c - VM initialization and bootstrap logic */ -#include "../include/vm.h" -#include "../include/log.h" -#include "../include/word_registry.h" -#include "../include/vm_debug.h" -#include "../include/physics_hotwords_cache.h" -#include "../include/rolling_window_of_truth.h" -#include "../include/dictionary_heat_optimization.h" -#include "../include/ssm_jacquard.h" +#include "../../../v3/include/vm.h" +#include "../../../v3/include/log.h" +#include "../../../v3/include/word_registry.h" +#include "../../../v3/include/vm_debug.h" +#include "../../../v3/include/physics_hotwords_cache.h" +#include "../../../v3/include/rolling_window_of_truth.h" +#include "../../../v3/include/dictionary_heat_optimization.h" +#include "../../../v3/include/ssm_jacquard.h" #include "word_source/include/vocabulary_words.h" #include "vm_internal.h" #ifdef __STARKERNEL__ diff --git a/src/starkernel/vm/vm_core.c b/kernel/src/vm/vm_core.c similarity index 98% rename from src/starkernel/vm/vm_core.c rename to kernel/src/vm/vm_core.c index 238c2a75..c8debd2c 100644 --- a/src/starkernel/vm/vm_core.c +++ b/kernel/src/vm/vm_core.c @@ -40,20 +40,20 @@ */ -#include "../include/vm.h" -#include "../include/inference_engine.h" -#include "../include/log.h" -#include "../include/word_registry.h" -#include "../include/vm_debug.h" -#include "../include/profiler.h" -#include "../include/platform_time.h" -#include "../include/physics_metadata.h" -#include "../include/physics_hotwords_cache.h" -#include "../include/physics_pipelining_metrics.h" -#include "../include/rolling_window_of_truth.h" -#include "../include/dictionary_heat_optimization.h" -#include "../include/ssm_jacquard.h" -#include "../include/vm_host.h" +#include "../../../v3/include/vm.h" +#include "../../../v3/include/inference_engine.h" +#include "../../../v3/include/log.h" +#include "../../../v3/include/word_registry.h" +#include "../../../v3/include/vm_debug.h" +#include "../../../v3/include/profiler.h" +#include "../../../v3/include/platform_time.h" +#include "../../../v3/include/physics_metadata.h" +#include "../../../v3/include/physics_hotwords_cache.h" +#include "../../../v3/include/physics_pipelining_metrics.h" +#include "../../../v3/include/rolling_window_of_truth.h" +#include "../../../v3/include/dictionary_heat_optimization.h" +#include "../../../v3/include/ssm_jacquard.h" +#include "../../../v3/include/vm_host.h" #ifdef __STARKERNEL__ #include "starkernel/vm/arena.h" #include "starkernel/log_attrib.h" /* vm_log_attributed_vm() */ diff --git a/src/starkernel/vm/vm_internal.h b/kernel/src/vm/vm_internal.h similarity index 97% rename from src/starkernel/vm/vm_internal.h rename to kernel/src/vm/vm_internal.h index 29dd1bf8..24504bdf 100644 --- a/src/starkernel/vm/vm_internal.h +++ b/kernel/src/vm/vm_internal.h @@ -43,8 +43,8 @@ #ifndef VM_INTERNAL_H #define VM_INTERNAL_H -#include "../include/vm.h" -#include "../include/vm_host.h" +#include "../../../v3/include/vm.h" +#include "../../../v3/include/vm_host.h" #ifndef PARITY_MODE #define PARITY_MODE 0 diff --git a/src/starkernel/vm/vm_runtime.c b/kernel/src/vm/vm_runtime.c similarity index 98% rename from src/starkernel/vm/vm_runtime.c rename to kernel/src/vm/vm_runtime.c index 04a8d11b..a6cb8b7a 100644 --- a/src/starkernel/vm/vm_runtime.c +++ b/kernel/src/vm/vm_runtime.c @@ -40,15 +40,15 @@ */ -#include "../include/vm.h" -#include "../include/log.h" -#include "../include/rolling_window_of_truth.h" -#include "../include/dictionary_heat_optimization.h" -#include "../include/inference_engine.h" -#include "../include/physics_metadata.h" -#include "../include/physics_hotwords_cache.h" +#include "../../../v3/include/vm.h" +#include "../../../v3/include/log.h" +#include "../../../v3/include/rolling_window_of_truth.h" +#include "../../../v3/include/dictionary_heat_optimization.h" +#include "../../../v3/include/inference_engine.h" +#include "../../../v3/include/physics_metadata.h" +#include "../../../v3/include/physics_hotwords_cache.h" #include "starkernel/doe_log.h" -#include "../include/ssm_jacquard.h" +#include "../../../v3/include/ssm_jacquard.h" #include "vm_internal.h" #include "starkernel/capsule_vm_physics.h" #include "starkernel/timer.h" diff --git a/lfs/amd64/starforth b/lfs/amd64/starforth index 979d248b..4ca07dde 100755 Binary files a/lfs/amd64/starforth and b/lfs/amd64/starforth differ diff --git a/logs/20261003-100613/amd64/qemu-amd64-20261003-100613.log b/logs/20261003-100613/amd64/qemu-amd64-20261003-100613.log new file mode 100644 index 00000000..dab3053c --- /dev/null +++ b/logs/20261003-100613/amd64/qemu-amd64-20261003-100613.log @@ -0,0 +1,9143 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 3 2026 10:05:48 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249341 + Free pages : 247818 + Used pages : 1523 + Total MB : 973 + Free MB : 968 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2100112755 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1006760626, tick_hz=100, initial_count=10067606 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 83886 cells (5242 KB), 50 VM slots +Switch-signal: 50 slots +Kernel-Hermes: 50 channel slots +Kernel-Hermes: 50 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0xffff900000000000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 4238577] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 63866880] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 98325801] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 99126447] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 99925812] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 101150259] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 102025476] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 103039209] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 103675278] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 104477709] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 115584798] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116777766] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 119888160] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 121044714] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122692710] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 125091078] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 126458535] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127817634] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 130473693] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 131820171] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133146720] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 136567998] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 138023046] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139356273] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 142559046] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 143450769] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 144248559] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145702032] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 147015351] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 148367226] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 149636781] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 150557358] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 151461702] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 152920362] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154525623] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 157334058] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 158720604] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160520682] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 163405074] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 164915289] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166549929] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 169508220] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 171016986] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172888863] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 176228766] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 179881884] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 181464948] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183085581] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 186102672] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 187608036] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189239757] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 192039141] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 193600470] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 195256446] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 198365496] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 200253795] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 201883605] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 204937026] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 206708208] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208330290] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 211474956] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 213206784] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 214748142] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216405462] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 219245145] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 220762311] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 222576984] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 225546363] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 226970520] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 228633195] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 231541863] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 233010372] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234736005] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 237886740] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 239637699] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 241268349] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 244383657] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 245538258] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 246466941] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 248421726] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 249530190] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 250647978] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 251968836] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 252922341] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 253857282] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 255322368] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256972359] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 260153376] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 261653742] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 263253879] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 266264733] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 267773751] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 269316747] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 270989901] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 274180767] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 275665005] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 277303488] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 280310436] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 281498049] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 282391200] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 283603446] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 284440632] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 285577950] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 286412217] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 287834652] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 288711696] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 289632189] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 290668602] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 291366012] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 292118253] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 293503182] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 294838971] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 297425037] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 298926684] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 300295191] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 303036216] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 304545885] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 306085269] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 309227415] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 310573578] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 311628975] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 313349820] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 314458011] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 315525672] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 316577499] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 318307080] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 319402083] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 320515818] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 321773844] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 322802424] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 323781381] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 325347960] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 326962566] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 330071952] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 331357236] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 333111891] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 334696635] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 337922697] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 339375120] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 341019924] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 344146677] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 345239013] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 346348884] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 348244701] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 349325319] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 350337834] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 351387120] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 353099229] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 354265779] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 355253178] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 356334027] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 358043868] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 359146389] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 360331839] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 361721703] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 362603472] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 363508782] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 364857612] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 366449538] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 369230274] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 370618038] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 372244194] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 375143958] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 376580547] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 378198807] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 380978010] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 382073412] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 383421717] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 384284565] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 385209006] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 387083256] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 388727031] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 391479396] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 392921550] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 394573431] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 397063275] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 399116676] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 400581804] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 402218712] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 404967318] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 406071645] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 407324652] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 408171351] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 409097598] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 411040203] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 412748532] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 415831773] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 417339993] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 419011698] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 422060415] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 423263358] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 424558869] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 425416824] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 426344709] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 428796102] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 430792803] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 433149675] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 434334159] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 435641073] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 438323991] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 439502133] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 440846028] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 443176167] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 444054114] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 444815469] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 446236854] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 447122571] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 448039851] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 449261484] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 449967000] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 450737658] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 452066055] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 453421920] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 454371183] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 457268112] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 458596551] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 459959409] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 462696381] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 464007264] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 465339966] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 467939451] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 468849381] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 469758639] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 471144723] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 472067001] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 472901961] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 473785767] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 475461336] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 476413203] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 477399804] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 478550247] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 479757558] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 480766755] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 481884795] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 482626620] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 483390600] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 484985508] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 486568572] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 489115515] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 490283619] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 491579739] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 493978548] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 495218829] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 496590129] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 498849120] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 500606295] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 502120122] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 503483379] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 506323104] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 507197523] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 507908079] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 509338872] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 510224442] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 511186158] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 512423457] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 513114777] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 513903306] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 515026449] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 516380886] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 518694204] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 519968484] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 521291001] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 523741764] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 524836179] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 525610428] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 527020410] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 527952936] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 528848523] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 529944366] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 530686947] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 531506367] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 532813281] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 534198714] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 536729025] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 538174014] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 539494242] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 541286844] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 542905440] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 543710475] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 544408977] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 545837334] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 546802200] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 547724184] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 548780085] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 550093005] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 551024544] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 552089244] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 552775524] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 553544502] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 554997912] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 556280571] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 558759285] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 560026614] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 561352848] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 564016152] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 565340727] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 566659716] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 569110122] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 570441354] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 571763493] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 574448784] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 575770797] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 577096947] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 579806367] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 581150157] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 582476790] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 583417527] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 586464102] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 587451501] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 588950565] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 589884582] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 590761899] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 592214805] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 593134647] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 594125427] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 595212618] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 595885878] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 596669829] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 598016769] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 599593953] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 602147679] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 603591786] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 604961028] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 607486173] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 608393541] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 609853356] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 610752555] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 611670339] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 612948294] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 613634700] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 614390301] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 616041909] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 617374443] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 620120529] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 621617010] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 622929405] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 625559004] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 626923269] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 628279050] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 630253386] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 632239209] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 633836091] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 635460714] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 638740914] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 639661323] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 640704708] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 641412387] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 642145623] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 643458816] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 644787444] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 647233335] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 648580569] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 650174049] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 652591191] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 653524746] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 654604419] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 655305924] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 656044389] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 657532281] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 658958370] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 661419297] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 662895912] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 664250769] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 666818019] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 667723854] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 668751552] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 669462927] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 670189275] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 671606082] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 672898065] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 674552634] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 677052012] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 678274926] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 679657944] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 682130589] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 683068428] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 684109923] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 684802902] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 685567512] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 687625239] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 688928961] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 691880532] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 693429744] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 694766499] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 697359432] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 698263986] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 699338493] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 700195692] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 700959126] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 702098460] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 703558380] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 706105029] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 707335860] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 708853614] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 710213805] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 711765411] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 712859763] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 713885403] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 714614082] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 715341312] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 716773365] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 718094202] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 720488538] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 721873740] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 723259824] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 725832366] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 727142661] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 728449533] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 731011197] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 731972325] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 732964995] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 733667865] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 734386149] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 735595728] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 736873725] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 739351221] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 740607882] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 741924603] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 743551956] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 745566486] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 746518710] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 747617472] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 748336596] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 749124663] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 750712998] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 752006409] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 754464270] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 755751927] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 757083306] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 759617040] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 761060223] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 762338556] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 764993985] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 766386600] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 767618502] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 769266540] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 771379581] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 772275042] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 773663016] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 774544995] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 775600224] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 776857389] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 777533463] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 778260357] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 779751105] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 781092375] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 783442989] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 784885143] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 786245796] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 789076239] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 790508565] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 791826672] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 794309838] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 795228336] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 796565154] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 797470968] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 798365631] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 799388604] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 800063271] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 801087252] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 802765278] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 804115305] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 805752990] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 808036488] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 809427738] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 810811890] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 813560391] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 815109708] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 816474624] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 819289002] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 820190511] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 821725611] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 822625671] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 823586295] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 824648622] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 825351261] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 826312074] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 828103521] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 829409217] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 831935832] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 833385105] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 834321999] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 835679733] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 836703462] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 838073208] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 839607972] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 842100546] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 843005226] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 844414347] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 845289459] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 846306237] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 847334544] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 848023365] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 848795955] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 850858470] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 852217254] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 855351063] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 856318596] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 857641680] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 858540942] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 859942797] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 860771646] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 862178856] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 863105418] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 864390681] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 865508595] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 866248320] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 867024522] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 868739970] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 870120993] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 872824134] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 873698070] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 875004228] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 875964516] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 877091313] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 878567340] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 879586953] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 880595478] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 881694576] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 882872949] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 883871058] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 884988111] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 885630270] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 886372305] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 887495028] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 889018389] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 891413313] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 892559766] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 893932473] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 896229012] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 897357846] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 898658229] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 900826647] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 902098638] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 903390033] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 905552361] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 906985821] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 908220705] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 909568023] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 912074268] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 913355142] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 914873778] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 917602602] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 918505623] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 919262505] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 920686221] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 921628218] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 922460868] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 923201664] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 924629181] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 925499505] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 926639637] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 927654693] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 928364514] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 929111085] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 930173496] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 931460208] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 933619386] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 934729068] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 936003852] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 938320320] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 939533532] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 940819992] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 943011699] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 944053719] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 945346416] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 947570736] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 948779223] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 950119023] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 952606578] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 953920086] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 955217046] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 957816930] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 958987470] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 960271998] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 961410660] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 963930114] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 965167182] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 965845650] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 967154223] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 967991577] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 968839536] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 969508638] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 970928616] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 971769204] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 972646374] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 973665084] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 974310855] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 975068346] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 976325469] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 977926572] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 980240142] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 981332520] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 982677486] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 984908904] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 985996347] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 987303912] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 989739954] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 990872652] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 992192943] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 994558635] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 995765022] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 997094175] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 999422403] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1000642083] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1002189342] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1004622192] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1005856782] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1007161449] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1009719711] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 1010587599] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1011375456] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1012743942] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1013650596] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 1014702780] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1015435869] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1016834742] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1017723567] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1018603614] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1019622114] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 1020265512] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1021051542] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1022152740] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1023431850] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 1025175732] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1027062561] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1028153280] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1029477876] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1031735229] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1032909318] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1034208210] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1036488348] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1037665860] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1039015488] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1041578097] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1042698993] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1043937951] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1046132472] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1047215337] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1048557468] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1050914340] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 1051773870] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1052738274] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1054161780] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1055268795] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 1056327909] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1057060998] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1058461761] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1059336411] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 1060129812] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1060857483] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1062202218] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1063069917] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1063893915] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1065301797] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 1065971067] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1066755039] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1068262083] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1069758102] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1072208172] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1073439339] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1074764229] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1077072528] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1078547442] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1079893248] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1082201904] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 1083224163] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1084847904] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1086206310] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1088675406] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1090067349] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1091273148] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1093581930] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1094764461] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1096103841] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1098676383] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1099708155] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1100484420] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1101875460] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1103061120] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 1103951688] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1104739230] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1106171535] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1107066240] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1107899709] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1108752435] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1110177285] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1111086165] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1112023353] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1113314643] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 1114226925] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1115349942] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1116838527] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1118147751] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1120522074] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1121679111] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1122986424] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1125433386] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1126681668] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1128343062] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1130983623] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1131945738] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1132720029] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1134119826] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1134957117] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1135814568] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1136572374] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1137908919] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1138764984] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1139575710] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1140479256] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1141917798] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1143006102] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1144016412] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1145063367] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 1145759517] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1146484185] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1147839609] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1149184701] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1151384367] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1152528405] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1154024991] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 1156341711] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 1157575104] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1158680250] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1159988991] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1162123830] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1163362179] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1164640155] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1167534774] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 1168360641] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1169098455] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1170453354] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1171328025] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1172190537] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1173177873] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 1173876522] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1174663308] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1175969718] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1177299417] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1179660468] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1180792830] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1182110853] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1184265264] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1185391872] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1186702062] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1188856452] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1190163114] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1191686496] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1194268929] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 1195207881] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1195971756] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1197346353] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1198232574] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1199182572] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1200254601] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 1200966186] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1201725336] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1203196344] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1204500906] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1206780687] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1207879239] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1209173511] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1211360241] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1212527085] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1213782234] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1216162941] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1217242740] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1218533568] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 1220272452] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1221842685] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 1222692324] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1223407269] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1224866223] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1225728357] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 1226518482] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1227202263] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1228773777] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1229697714] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1230581373] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1231588533] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 1232308140] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1233025899] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1234312002] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1235627148] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1237854072] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1238967030] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1240226085] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1242686781] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 1243803183] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1245098526] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 1247383011] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1248486645] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1249778019] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1251942384] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 1252759725] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1253658105] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1255061367] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1255958802] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 1256810961] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1257538653] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1258836285] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1259685168] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1260568785] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1261573866] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 1262271234] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1262982798] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1264072824] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1265360817] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1267719369] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1268780058] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1270081386] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1272250287] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1273274835] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1274547729] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1276754157] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1277853108] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1279335813] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1281586845] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1282793799] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1284111990] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 1285595850] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1287626697] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 1288473039] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1289178135] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1290536037] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1291653132] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1292549622] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1293580869] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 1294242831] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1294954563] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 1296128988] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1297445436] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 1299698610] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1300758816] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1302036372] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1304348892] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1305439107] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1306704063] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1308933675] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1309996842] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1311278892] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1313560059] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1314851118] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1316212947] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1318901682] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 1319730132] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1320491487] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1321816755] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1322718789] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1323604044] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1324638063] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 1325353113] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1326068142] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1327252983] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1328521488] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1330898121] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1331957487] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1333232019] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1335380277] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1336477002] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1337811090] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1340125332] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 1340956008] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1341881205] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1343258805] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1344141771] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1345032969] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1346059386] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 1346761479] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1347495513] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1348733841] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1349996844] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1352166753] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1353148461] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1354603131] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 1356008850] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1357941648] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1358992677] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1360256142] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1362528279] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 1363350891] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1364119638] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1365503370] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1366340514] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1367340954] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1368426381] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 1369136055] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1369865070] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1371071751] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1372361760] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1374589125] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1375681398] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1376958051] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1379362593] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 1380434307] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1381741977] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 1383976335] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1384978392] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1386245091] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1388386461] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 1389585960] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1390882143] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 1393580643] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 1394455125] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1395204195] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1396634148] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1397495757] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1398387564] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1399400016] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 1400105994] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1400857941] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1402078440] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1403344383] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1405689054] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1406689305] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1407978873] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1410167934] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1411245633] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1412560170] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1414697865] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1415839887] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1417358418] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1420073256] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 1421124852] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1422794541] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1424381952] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1427069658] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 1428134106] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1429043805] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1430994075] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1432090212] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1433196702] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 1434498198] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 1435845138] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 1436965236] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1438266144] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 1439125401] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1440058725] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1441505856] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1443283863] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1446094251] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1447359102] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1448663349] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1450791363] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1451933196] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1453179273] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1455565902] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1456696542] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1458024141] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1460191971] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 1461296487] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1462675746] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 1464891330] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 1465755753] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1466510913] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1468077429] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1468942755] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 1469762805] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1470457800] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1471881075] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1472800140] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1473799026] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1474719498] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 1475348805] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1476020868] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1477211589] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1478443197] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1480834845] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1481994066] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1483308624] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1485495312] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1486598883] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1487863650] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 1489548375] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1491261471] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1492557549] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1493834685] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1496038320] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 1497193467] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1498534338] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 1500822036] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 1501706787] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1502454030] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1503892719] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1504817748] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 1505877492] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1506659448] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1507991184] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1508861697] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1509713940] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1510708164] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 1511443584] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1512195741] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1513565046] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1514842665] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1517168415] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1518799926] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1520396682] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1523203584] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1524637422] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1526258538] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1529054226] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1530612720] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1532276991] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1535012094] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 1536411471] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1538037144] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 1540807863] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 1541870694] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1542919623] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1544652228] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1545722976] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 1546761426] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1547617029] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1549306290] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1550387811] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1551539703] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1552843488] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 1553688591] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1554641592] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1556299290] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1557944220] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1560655509] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1561973112] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1563518670] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 1564602375] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1567959120] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1569321894] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1570938957] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1573612635] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1575004116] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1576636278] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1579339125] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 1580537931] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1581474363] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1583203839] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1584311127] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1585410540] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1586702082] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 1587546597] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1588461798] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1589822598] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1591431198] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1593959073] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1595055987] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1596351771] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1598467080] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1599730734] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1601308842] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1604166669] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1605836799] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1607344200] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1610080584] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1611541155] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1613129637] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1615331298] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 1616187510] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1616923308] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1618531383] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1619430414] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 1620218922] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1620907764] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1622266905] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1623149682] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1624021098] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1625082900] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 1625765757] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1626558150] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1627914036] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1629275508] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1631597268] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1632774612] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1634072937] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 1634945970] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1637605032] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1638697620] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1640025093] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1642273878] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1643620524] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1644925254] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1647198420] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 1648046022] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1648835286] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1650281367] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1651210470] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 1652090559] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1652812077] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1654231929] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1655142972] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1656235749] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1657287996] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 1657960878] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1658700078] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1659994917] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1661276568] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1663498956] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1664691630] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1666044786] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1668462432] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1669649226] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1670965254] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1673202321] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1674402996] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1675670808] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1677927909] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1679114598] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1680424557] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1683092061] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 1683963078] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1684753287] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1686192564] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1687122150] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 1687915152] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1688643390] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1690044846] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1690938690] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1691849481] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1692922707] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 1693761321] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1694524356] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1695894963] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1697212713] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 1698711588] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1700773368] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1701938868] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1703224425] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1705484823] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1706899614] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1708195419] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1710403422] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1711544982] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1712820669] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1715040579] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1716224139] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1717521078] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1719957645] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 1720791576] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1721516769] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1722862638] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1723712067] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 1724489403] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1725197544] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1726558617] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1727431734] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1728309975] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1729377426] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 1730076390] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1730860593] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1732189326] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1733516610] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1735739418] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1736870961] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1738175691] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1740376197] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1741484262] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1743022218] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1745535414] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 1746359958] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1747111296] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1748466699] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1749391035] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1750309428] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1751373687] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 1752066603] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1752807168] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1754041737] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1755291426] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1757751723] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1758848784] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1760148075] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 1762071402] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1763456814] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1764559251] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1765900101] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1768080342] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 1769050878] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1769807928] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1771197834] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1772082312] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1772996820] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1774022964] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 1774691226] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1775446428] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1776636561] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1777940283] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1780161390] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1781296524] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1782864741] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1785028098] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1786149057] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1787441880] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1789620777] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 1790418294] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1791152685] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1792563339] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1793458821] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1794580452] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1795608801] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 1796292015] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1797046524] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1798312257] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1799631876] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1801852941] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1802996328] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1804289046] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1806504147] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1807792392] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1809107916] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1811292021] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 1812126855] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1812876009] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1814223117] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1815123408] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1816054632] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1817111856] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 1817776338] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1818537378] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1819959582] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1821273552] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1823529918] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1824615219] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1825956867] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1828207647] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1829271549] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1830559962] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 1832513634] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1834189476] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1835291892] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1836584925] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1838803512] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 1839603612] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1840375698] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1841739333] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1842615537] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1843529856] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1844751909] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 1845614043] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1846381425] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1847887986] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1849182993] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1851443223] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1852558365] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1853861184] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1856035944] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1857351636] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1858618356] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1860803679] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1861904877] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1863249255] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1865467632] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 1866298686] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1867012203] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1868425167] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1869268821] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1870355571] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1871415336] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 1872145191] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1872912027] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1874261067] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1875716682] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1878129729] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1879300731] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1880636163] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1883019873] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1884266769] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1885605435] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 1887286359] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1888970328] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1890113001] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1891407609] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1893657885] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1894956861] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1896242376] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1898478120] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 1899437421] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1900244745] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1901674635] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1902565896] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1903502412] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1904517531] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 1905235878] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1905985515] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1907221932] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1908754722] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1910934459] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1912050798] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1913399754] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1915658598] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1916850075] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1918176519] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1920623691] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1921519089] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1922551302] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 1923241593] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1923992868] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1925168532] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1926469713] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1928646867] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1929802833] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1931082174] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1933434279] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1934631909] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1935914358] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1938165936] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1939077525] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1940130948] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 1940849106] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1941605736] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1942799250] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1944096399] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 1946227017] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1947664761] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1948830471] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1950114537] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1952313069] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1953377013] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1954659903] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1956871539] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1958193090] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1959523545] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1961757630] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1962855930] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1964183403] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1966379100] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 1967173803] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1967905002] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1969315341] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1970367273] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1971403959] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1972593672] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 1973277915] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1974037800] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1975249227] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1976565318] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1978784808] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1979880798] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1981160349] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1983517893] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1984556112] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1985886294] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1988119056] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1989255723] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1990574082] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1992815391] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1993903212] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1995313509] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 1996536486] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1998830463] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 1999699716] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2000407794] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2001849696] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2002721532] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2003673651] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 2004727641] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 2005889256] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 2006875206] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2008160154] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 2008883877] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2009726418] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2011003659] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2012320086] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 2013227328] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 2014445181] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2015755938] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 2016605766] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2017795857] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2019105879] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2019868956] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 2021201490] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2022560841] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 2023399371] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2024584863] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2025845157] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 2026816953] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 2028015024] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2029299552] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 2030255661] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 2031504720] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2032803045] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 2033821587] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 2034730110] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2035557678] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2036955585] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2037838026] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 2038650453] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2039367582] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2040770256] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2041661223] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 2042527221] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2043260625] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2044649292] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2045640030] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2046718863] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2047750614] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 2048425323] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2049170151] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 2050519065] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2051842401] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 2052789627] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 2054060862] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2055362988] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 2056290663] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2057549172] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2059185513] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2059982232] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 2061233790] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2062530729] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 2063352291] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 2064588918] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2065875315] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 2066839824] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2068068030] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2069366838] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2070173007] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 2071337142] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2072075943] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2073526182] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2074418472] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 2075328654] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2076106158] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2077513914] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2078389992] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2079292341] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2080323210] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 2081021964] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2081769732] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 2083142355] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2084669370] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2085497778] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 2086820715] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2088210054] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 2089058496] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 2090315409] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2091639039] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2092502874] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2093675031] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2094957039] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2095735740] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 2097340854] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2098631220] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2099496504] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 2100320922] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2101713159] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2102613177] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 2103444105] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2104814124] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2105697825] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2106615924] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2107640598] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 2108362809] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2109341535] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 2110650003] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2111930520] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 2112802251] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2113977663] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2115232014] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2116046961] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2117198958] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2118477837] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2119288185] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 2120527647] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2122104159] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2122940799] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 2124226272] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2125501476] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 2126381922] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 2127641502] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2128943901] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 2129791650] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 2130652104] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2132061120] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2132930436] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 2133833352] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2135243208] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2136077265] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2136992277] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2138047422] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2138760813] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2139495246] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 2141110461] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2142469917] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 2143362186] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 2144776809] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2146103589] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 2147226144] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 2148629532] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2149950705] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 2150854965] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2152037874] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2153374608] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2154168849] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 2155742106] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2157112251] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2157953364] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2159002776] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2160485061] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2161414332] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2162267856] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2163725151] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2164594866] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2165572122] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 2166605952] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 2167701984] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 2168630814] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2169708009] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2170401765] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2171160558] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 2172721404] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2174060490] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 2174864811] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2176072920] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2177421288] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2178186318] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 2192513883] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 2193335739] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2194524948] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 2195390463] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2196809370] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2198123907] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 2198944776] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2199799644] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2201225628] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2202194358] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2203033749] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2204425965] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2205345555] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2206316196] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2207376549] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2208070977] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2208819711] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2210481903] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2211808641] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2212679385] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2213913156] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2215228701] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2216088000] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2217488070] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2218812141] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 2219686182] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2220911427] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2222428215] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 2223302214] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2224159581] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2225547702] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2226405216] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2227240932] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2228610699] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2229482640] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2230347441] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2231361153] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2232082377] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2232813513] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 2234547861] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2235866073] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2236760148] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2238082119] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2239395165] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2240230587] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2241566859] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2242853844] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2243732988] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2244992673] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2246300784] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 2247274575] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2248248912] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2249663892] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2250510171] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2251349961] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2252737032] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2253689046] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2254586145] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2255623860] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2256363312] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2257087098] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2258526165] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2260164438] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2261028231] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 2262317841] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2263699557] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2264497536] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 2265863943] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2267134443] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 2268013671] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2269358889] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2270693376] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 2271539109] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2272994661] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2274319971] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 2275100604] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2276016078] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2277438765] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2278331790] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2279160177] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2280584292] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2281440504] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2282353710] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2283405747] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2284087218] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2285062668] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2286759090] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2288038410] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2288951721] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 2290281882] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2291586927] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 2292451644] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 2293916982] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2295204030] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2296043862] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2297561763] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2298832368] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 2299676820] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2300564784] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2301938835] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2302794186] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2303617302] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2304984591] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2305905357] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2306783871] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2307866526] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 2308559421] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2309274240] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 2310895314] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2312200947] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 2313061569] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2314210248] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2315490492] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2316267534] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 2317599837] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2318884260] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2319721866] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2320973235] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2322526311] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 2323427400] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 2324727972] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2326032513] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 2326875453] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 2327753316] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2329113675] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2330019174] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 2330791995] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2332193472] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2333047458] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2333963646] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2335133409] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 2335828845] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2336591628] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 2337958245] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 2339086596] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2340402519] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 2341249197] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2342449074] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2343752418] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2344555290] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2345824992] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2347132158] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 2348083899] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 2349559296] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2350858524] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2351704719] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2352849681] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2354128035] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 2354954028] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2356234839] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2357478354] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2358293994] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 2359148694] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2360701392] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2361595845] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 2362393803] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2363780811] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2364653214] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2365547394] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2366600880] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2367303771] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2368062144] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2369456859] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2370745314] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 2371674186] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 2373169029] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2374494339] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 2375521764] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2376649569] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2377995039] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2378807046] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 2380223370] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2381600298] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 2382455712] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2383344915] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2384783541] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2385859791] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2386714491] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2388155196] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2389008930] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2389979214] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2391012498] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 2391739329] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2392457886] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2393771982] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2395098174] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2395934352] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 2397135426] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2398820424] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2399641734] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2400781887] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2402082585] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2402902404] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2404117800] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2405464425] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 2406307281] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2407677615] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2408984844] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 2409841476] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 2410898385] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2412304272] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2413184718] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 2414016171] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2415407232] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2416281714] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2417209410] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2418236415] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2418976602] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2419748730] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2421189603] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2422497336] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2423587866] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2424862692] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2426195730] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2427000702] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2428295856] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2429606067] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 2430451611] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2431703568] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2433071655] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2433905817] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2434794201] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2436509355] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2437416828] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2438232174] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2439659964] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2440520061] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2441401956] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2442468840] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2443142562] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2443890141] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 2445329355] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2446652019] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 2447496450] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2449052592] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2450367255] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2451194193] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2452587459] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2453914470] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 2454738741] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 2455983285] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2457267582] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2458166361] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2459079315] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2460732708] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2461761624] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2462582934] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2464030863] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2464964355] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2465878212] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2466963912] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 2467639587] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2468401635] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2469794796] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2471089677] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2471859810] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2473405242] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2474736768] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2475488883] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2476723956] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2478017136] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2478780003] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2479974294] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2481210921] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2482052034] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2483321484] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2484649482] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2485429296] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 2486618064] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2488008306] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2488886841] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 2489664639] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2491134576] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2491998663] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2492894880] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2493966216] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 2494651992] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2495386551] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2496795987] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2498157522] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2499251181] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2500529598] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2501815512] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2502621681] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2503856334] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2505169401] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2505981198] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2507240211] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2508506091] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2509324923] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 2510668629] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 2512047489] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2513331912] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 2514197931] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2515539054] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2516844372] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2517674733] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 2518556439] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2519952015] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2520860118] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 2521641738] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2523012534] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2524132779] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2525125764] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2526135717] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 2526852342] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2527604226] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2528809353] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2530129707] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2530931781] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2532054756] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2533382061] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2534189049] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2535344490] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2536881165] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2537723874] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2538885195] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2540221530] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2540990991] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2542177113] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2543487975] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2544296643] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 2545157181] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2546527137] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2547492612] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 2548267932] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2549883210] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2550746583] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2551658067] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2552669322] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 2553365472] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2554136277] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2555426223] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2556725430] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2557553103] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2558662764] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2559980829] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2560775028] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2562175056] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2563490202] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2564288013] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2565542343] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2566883823] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2567694087] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2568929664] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2570309973] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2571092958] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 2571990057] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2573363289] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2574372675] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 2575202364] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2576598717] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2577467277] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2578380861] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2579407677] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 2580098892] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2580848088] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 2582112015] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2583388290] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 2584320207] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 2585448453] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2586970428] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 2587839828] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2589010242] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2590292796] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2591183637] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 2592480261] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2593826214] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 2594773440] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2596122732] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2597485296] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2598457050] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 2599561419] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2600959641] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2601861381] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2602792710] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2603844516] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 2604547659] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2605401435] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 2606660994] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2607952935] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 2608798269] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2609966520] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2611299453] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2612385090] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 2613597672] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2614903347] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 2615751306] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 2616883185] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2618184282] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 2619061158] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 2619919848] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2621334765] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2622186294] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2623141626] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2624320230] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 2625347508] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2626123836] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 2627440200] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2628776094] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 2629598664] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2630805807] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2632176876] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2633055306] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2634153942] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2635518312] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2636355897] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 2637666003] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2639003157] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 2639958363] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 2640819237] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2642193960] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2643094860] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2643961887] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2645006322] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 2645705181] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2646439992] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 2647941156] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2649361533] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 2650276965] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2651589738] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2652924582] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2653825104] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 2654652231] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2656044279] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2656933713] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2657875605] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2658919641] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 2659615413] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2660373849] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 2661573579] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2663052798] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 2663928876] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2665124595] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2666402298] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 2667346395] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 2668198848] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2669604399] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2670561831] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2671467918] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2672565861] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 2673259176] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2674005180] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 2675569365] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2676851478] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 2677641792] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 2679014898] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2680343190] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 2681223006] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 2682059562] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2683502556] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2684412255] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2685402006] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 2686441779] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 2687725845] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 2688630000] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2689749741] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 2690461473] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2691196158] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2692398639] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2693715612] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 2694504561] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 2695639758] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2696920590] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 2697729846] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 2698895199] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2700360306] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 2701180062] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 2702412342] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2703736413] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 2704528281] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 2705648316] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2706969741] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 2707845168] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2708814675] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2709836241] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 2710553832] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2711256597] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 2712655092] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2714008773] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 2714799465] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2716261317] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2717911854] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 2718742929] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2720734905] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2722087620] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 2722896813] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2723863905] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2725040073] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 2725756005] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2726520909] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 2727766986] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2729119407] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 2729962431] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 2731499505] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2733123057] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 2734120011] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 2735749800] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 2737231350] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2738648241] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 2739477972] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2740368897] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2741428473] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 2742135459] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2742871341] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 2744176323] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2745492981] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 2746314837] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 2747569314] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2748864762] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 2749677525] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 2751598269] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2752937943] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 2753824101] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2754797409] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2755892958] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 2756585853] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2757310227] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 2759666238] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2760948708] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 2761779132] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2762912712] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2764226052] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 2765063091] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2766310722] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2767607976] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2768452470] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2769329388] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2770407822] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 2771125119] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2771872635] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2773213842] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2774485224] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 2775550407] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 2776772145] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2778127842] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 2779082334] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 2780228703] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2781518397] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 2782531311] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2783664387] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2784755211] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 2785461231] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2786228529] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2787673434] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2788986543] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 2789868186] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2790978099] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2792312208] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 2793109389] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 2794398600] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2795714586] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 2796608388] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2797505718] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2798549775] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 2799275409] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2800120050] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2801691354] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2803038231] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 2803850175] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2805099171] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2806436703] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 2807227101] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2808426600] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2809744161] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 2810595795] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2811531954] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2812607763] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 2813586993] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2814364497] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2815552740] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2816941680] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 2817828720] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2818763787] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2820056253] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 2820925086] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 2822212596] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2823542799] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 2824345335] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2825326266] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2826517428] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 2827250055] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2828023485] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 2829329748] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2830641093] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 2831489808] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 2832509610] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 2833537203] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2834981499] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 2835956571] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2836909446] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 2838164973] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 2839259262] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 2840207118] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2841265938] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 2841996444] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2842713699] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 2844554181] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2845873695] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 2846786187] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 2848092996] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2849402829] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 2850333843] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 2852116197] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2853468807] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 2854334931] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2855704299] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2857083033] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 2857937901] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 2858882292] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2859727416] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2861233221] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2862137292] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2863304115] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2864343363] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 2865129036] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2865890139] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 2867559597] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2868952800] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 2869750317] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2870909685] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2872260678] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 2873098641] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 2874464502] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2876138139] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 2877006342] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2878094961] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2879406831] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 2880298365] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2881237044] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2882286309] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 2883016227] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2883785331] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 2885294538] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2886723189] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 2887565079] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 2888760609] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2890146630] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 2891032200] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 2891982198] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2893381008] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 2894243058] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 2895275355] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 2896178292] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2897576556] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 2898404502] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2899287741] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2900365188] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 2901376905] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2902230891] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 2903717796] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2905097013] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 2905933926] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 2906951880] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2908307073] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 2909160072] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 2910098121] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2911400856] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 2912237202] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 2913339891] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 2914268154] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2915666712] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 2916465636] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2917440561] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2918495391] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 2919227997] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2920023120] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2921717211] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2923045797] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 2923846065] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2925176373] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2926766997] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 2927557416] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2928901500] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2930232648] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 2931048834] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 2932216938] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2933593950] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2934935199] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 2935789689] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2937201330] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2938693443] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 2939641551] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2940581931] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2941623846] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 2942333226] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2943124002] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 2945053041] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2946422850] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 2947256634] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 2948741397] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2950049151] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 2951106648] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 2952735933] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2954032599] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 2954895342] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 2956325337] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2957676981] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 2958568620] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2959505871] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2960519772] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 2961228606] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2961973203] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2963323839] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2964969210] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 2965770507] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2966873805] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2968175742] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 2968974267] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2969997261] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2971296132] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 2972117211] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 2973458250] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2974777113] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 2975685321] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2976827238] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2977906575] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 2978611734] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2979330753] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 2980905858] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2982178038] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 2983015707] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 2984342676] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2985663660] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 2986471614] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2987478081] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2988921516] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 2989712229] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 2990793099] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2992138884] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 2993012211] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2993914098] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2994993498] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 2995721988] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2996446740] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 2997996603] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2999316663] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 3000201582] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3001395789] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3002772948] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3003621348] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3004572690] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3005609817] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 3006289797] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3007063605] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3008289837] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3009593118] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 3010424067] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 3011620311] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3012864561] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 3013693704] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3015101460] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3016461042] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3017249277] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 3021219558] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3022534431] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 3023340537] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3024958818] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3026245656] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 3027238452] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 3028904193] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3030167175] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 3030973953] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3031881426] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3032886780] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 3033572157] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3034337607] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 3035448990] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3036770415] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 3037563816] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3038754621] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3040392390] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 3041216052] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3042549321] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3043805751] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 3044692539] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3045549570] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3046597344] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 3047315082] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3048053043] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3049852974] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3051194727] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 3052303338] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3053666784] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3054947322] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 3055880835] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3056790135] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3057820710] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 3058526667] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3059243397] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3060466710] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3061752519] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 3062642121] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3064413156] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3065777169] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 3066963060] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3067843695] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 3068892351] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 3069953124] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 3070819122] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3071870991] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 3072527682] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3073268142] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3074380848] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3075683982] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3076537737] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 3077831841] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3079141905] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 3079932408] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3080938077] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3082232748] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3083053890] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3084228987] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3085510113] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3086364771] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3087555786] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3088817655] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3089865072] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3091395804] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3092667312] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3093485514] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 3094335909] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3095688834] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3096574236] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3097465707] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3098498298] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 3099170949] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3099935559] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 3101263221] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3102775137] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 3103631538] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 3104567739] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3105899559] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 3106765305] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3108066801] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3109303386] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 3110160942] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3111326211] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3112626531] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 3113442423] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3114315162] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3115585893] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 3116450715] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3117185022] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3118454136] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3119787237] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 3120671946] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 3122660163] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 3124009980] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3125182599] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 3126077388] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3127645647] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3128980092] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 3129840357] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 3131157540] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3132445323] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 3133331439] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3134244939] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3135258336] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3135973638] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3136735413] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3137698326] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3139055724] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 3140132877] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3141220887] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3142359108] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 3143173509] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3144295140] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3145401588] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 3146247993] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3147509274] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3148653900] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 3149513472] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3150394380] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3151719018] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3152817234] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3154119549] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3155513634] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 3156326838] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3157274589] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3158682744] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3159557331] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3160482906] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3161517534] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 3162201357] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3162916911] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3164031255] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3165730113] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 3166492959] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 3167627001] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3168961950] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 3169733595] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3170794452] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3172116864] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3172881453] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3174000753] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3175339755] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 3176145462] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 3176972862] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3178404726] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 3179207367] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 3180345840] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3181858743] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 3182702040] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3183841857] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3185240079] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 3186121890] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 3187242933] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3188589915] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3189455409] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 3190787145] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3192109683] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 3192913332] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 3193803039] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3195210081] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3196126227] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3197020155] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3198045690] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 3198773193] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3199541961] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3200403759] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3201448299] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 3202162740] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3203215659] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3204123195] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3205195644] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 3205911954] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3206680134] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 3208185372] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3209500308] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 3210330081] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3211363197] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3212678805] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 3213512463] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3214785483] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3216233601] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 3217028367] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3218468379] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3219790287] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3220617288] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 3221511216] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3222829953] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 3223689777] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 3224620413] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3225382440] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3226786269] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3227697606] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 3228820728] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3229589622] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3230958549] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3231830721] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3232707513] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3233758269] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 3234448791] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3235211868] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 3236652888] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3237953355] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 3239007030] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 3240506367] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3241850493] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3242766597] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 3244133046] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3245483346] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 3246334434] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3247686960] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3249038667] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 3249860754] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 3250737966] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3251514567] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3253112268] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3254021820] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3254971566] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3256024527] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3256718157] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3257455215] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3258772881] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3260113773] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 3260946570] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3261908433] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3263311926] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3264230193] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3265049529] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3266760714] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3267658422] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3268577613] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3269583156] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 3270307446] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3271030665] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3272459169] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3273748989] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 3274540311] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3275846007] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3277117368] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 3278075640] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3279322641] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3280602864] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 3281435304] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3282362391] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3283387506] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 3284117592] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3284886234] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3286558674] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3287910003] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 3288785682] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3289745025] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3291316560] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3292224474] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3293128629] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3294434535] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3295359816] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3296288541] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3297585501] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3298448433] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3299338539] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3300647133] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3301528398] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3302442486] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3304038381] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 3304913682] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3306149196] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3307460709] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 3308341617] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3309512514] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3310804224] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 3311642355] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3312532986] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3313823541] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3314720430] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3315774000] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3317172936] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3318077091] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3319251789] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3320536716] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 3321379929] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3322664751] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3323986827] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 3324793773] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 3325702947] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3327140418] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3327988083] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3329514405] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3330830391] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 3331741329] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3332644098] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3333693993] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 3334422861] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3335147991] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3336406689] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3337772718] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 3338613012] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 3339859929] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3341475879] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3342300717] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3343685688] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3345084708] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 3345895056] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3347063811] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3348478413] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 3349263309] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3350651619] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3352012188] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 3352815354] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3354132663] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3355185561] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 3356014158] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3356809113] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 3358279386] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 3359439489] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3360842205] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3361631406] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 3363447570] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3364826115] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 3365718846] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3367486206] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3368919435] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 3369742488] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 3371195982] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3372554367] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 3373394094] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3374441406] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 3375470763] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 3376618791] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 3377486532] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3378723642] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3379418112] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3380144439] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 3382190763] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3383530311] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 3384386985] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3385324194] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3386688207] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 3387496707] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3388408296] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3389856015] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 3390708573] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3391767981] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3393183234] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3394009269] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3394842591] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3396279033] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3397163175] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3398164350] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3399193014] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 3399933474] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3400684182] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 3402411978] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3403996176] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 3404879310] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 3405793503] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3407196240] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 3408042687] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 3409077609] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3410396220] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 3411272844] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 3412136910] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3413519802] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3414451509] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3415338612] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3416605437] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 3417312150] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3418042845] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 3419329326] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3420658101] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 3421531995] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 3422516244] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3423860391] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 3424780044] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 3425766372] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3427239333] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 3428121900] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3429304200] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3430397334] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 3431138655] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3431904714] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 3433100895] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3434427213] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 3435308919] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 3436408626] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3437775936] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 3438628767] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 3439516521] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3440887905] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 3441933369] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3442914741] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3443968521] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 3444707427] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3445490874] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 3446532810] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3447919587] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 3448788987] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 3449808138] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3451182273] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 3452092077] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 3453189117] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3454704225] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 3455553003] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3456540591] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3457599054] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 3458321412] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3459079302] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 3459892779] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3461232243] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 3462157272] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 3463199880] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3464526303] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 3465364224] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 3466311702] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3467966775] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 3468890166] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3469807971] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3470818470] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 3471550320] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3472308819] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 3473283702] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3474575937] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 3475417785] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 3476265240] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3477678666] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 3478505751] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 3479588259] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3481012500] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 3481857750] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 3482688594] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3484068252] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3484934103] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3485831979] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3486841344] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 3487552194] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3488295699] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 3505749282] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3507073437] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 3507912513] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 3508766772] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3510163671] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 3511023012] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 3511862256] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3513251973] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 3514125111] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 3514924518] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3516323874] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3517357368] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3518254761] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3519269859] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 3519972393] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3520725516] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 3521812476] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3523110381] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 3523956513] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 3541455960] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3542959266] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 3543818901] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 3544786686] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3546121572] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 3546983790] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3547868919] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3548912010] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 3549637203] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3550425669] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3551536821] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3552850413] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 3553739574] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3554810196] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3556178493] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 3557077734] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3557981994] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3559271310] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 3560147829] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3561065130] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3562334517] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 3563255430] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3564124158] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3565505601] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 3566423511] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3567550644] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3568926228] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 3569818245] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3570688506] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3572130387] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 3573042249] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3573992646] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3575403573] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 3576314028] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3577176246] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3578572662] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 3579477552] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3580706010] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3582059460] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 3582959667] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 3583877577] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3585291549] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 3586272942] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3587079552] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3588460323] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 3589426491] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3590336778] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3591680610] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 3592885884] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3593825718] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3595158021] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 3596042037] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3596922777] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3598338870] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 3599239392] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3600111690] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3601522176] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 3602385717] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 3603304824] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3604639689] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 3605736309] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3606721734] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 3607763628] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 3608893197] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 3609824883] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 3610533486] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3611297865] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3612436590] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3613783467] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3614601312] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 3615797514] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3617086368] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 3618359346] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 3619735392] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3621070467] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 3621850365] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 3623159232] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3624508209] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 3625330611] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3626545230] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3627857730] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 3628661253] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3629636346] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 3630520005] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3631305342] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 3632596443] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3633929586] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 3634690731] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3635953944] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3637266150] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3638101929] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 3639451809] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3640798434] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 3641652021] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 3643124541] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3644493090] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 3645350835] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3646862331] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3648256920] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 3649160949] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 3650013885] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3651430482] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3652326930] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3653232072] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 3653918394] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3654629748] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3656061192] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3657364662] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 3658191159] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 3659230134] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 3660718887] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3661990836] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 3662810403] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3664003203] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3665271939] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 3666099255] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3667429185] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3668966448] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 3669825096] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3671160612] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3672443565] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 3673266177] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 3674714400] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3676057077] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 3676861461] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 3677665677] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3679048023] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3679939347] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3681011376] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 3681739068] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3682481649] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 3683648241] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3684954462] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 3685781799] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3686934468] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3688252974] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 3689112147] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3690360513] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3691673937] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 3692508540] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3693918018] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3695209224] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 3696054453] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3697265439] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3698559102] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3699459267] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 3700874184] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3702158145] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 3703004067] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 3703833693] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3705242415] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3706329333] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3707199405] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 3707903640] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3708654726] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3710070903] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3711360198] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 3712197405] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3713490606] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3714762681] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 3715620111] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 3717111069] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3718591506] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 3719514372] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3720956253] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3722250924] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 3723111168] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 3723907866] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3725280342] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3726157260] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 3726927351] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3728306022] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3729189471] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3730095201] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 3730964622] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3731708253] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3732824613] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3734139801] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3734942946] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3736201476] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3737464038] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3738249207] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3739448118] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3740727081] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 3741550617] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3742697343] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3744169128] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 3744988296] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3745929558] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 3746614683] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3747413523] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3748806852] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3750134073] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 3751005489] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3752239764] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3753548757] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 3754393314] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3756061134] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3757457928] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 3758268276] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3759192885] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 3759881832] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3760608978] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 3762116862] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3763196367] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 3764065683] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 3764901357] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3766325388] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 3767128575] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 3767953119] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3769519719] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3770421144] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3771328344] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 3772015149] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3772774845] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3773991900] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3775343901] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3776112480] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3777431154] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3778867344] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 3779694744] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3780636258] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 3781603434] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3782333625] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3783805473] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3785180553] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 3786039516] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 3787535010] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3788928549] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3790298232] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 3791175864] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3792633999] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3794233968] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 3795152067] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3796541532] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3797911656] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 3798733155] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3799708017] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 3800458389] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3801175917] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 3802639764] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3803983701] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 3804801651] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3806335449] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3807718446] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 3808602840] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3809601558] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 3810653595] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 3811867353] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 3812947782] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3814070127] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 3814783161] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3815534772] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3817542330] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3819075120] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 3819930156] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 3820850502] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3822240156] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 3823108695] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3825020220] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3826308738] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 3827298153] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 3828776679] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3830079120] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 3831094869] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3832247853] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3833355036] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 3834093669] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3834847611] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 3836835051] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3838127874] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 3838934589] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 3840041142] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3841443333] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 3842325123] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 3843261639] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3844848840] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 3845731659] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3846661833] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3847668867] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 3848411406] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3849190905] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 3851037834] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3852346491] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 3853326372] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 3854926908] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3856445754] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 3857495124] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 3859424814] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3860715999] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 3861741870] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3862653249] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3863697159] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 3864458367] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3865207731] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3867190572] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3868537092] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 3869683503] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 3871066521] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3872475096] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 3873379797] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3874326435] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3875350605] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 3876048834] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3876790050] Running FIND.existing: FIND DUP . CR +[Hera] 35784496 +[Hera] [HADES][TEST ] [KRELTSC: 3878134680] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3879437940] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 3880275252] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 36118080 +[Hera] [HADES][TEST ] [KRELTSC: 3881935932] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3883245366] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 3884086017] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3885363909] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3886656858] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 3887415483] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 3888253656] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3889610424] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 3890471235] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3891336918] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3892372512] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 3893117424] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3893929872] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 3895152870] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3896518395] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 3897409404] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 3898444641] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3899815542] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 3900608523] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3901572402] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3902591364] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 3903305238] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3904049751] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 3905315883] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3906721014] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 3907684956] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 3908605386] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3910008858] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 3910861815] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3911801670] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3912826029] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 3913547442] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3914295420] Running LATEST.basic: LATEST @ . CR +[Hera] 35865920 +[Hera] [HADES][TEST ] [KRELTSC: 3915541140] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3916895661] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 3917744649] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 35905104 +[Hera] [HADES][TEST ] [KRELTSC: 3919628622] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3920948241] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 3921757707] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 35905104 +[Hera] [HADES][TEST ] [KRELTSC: 3923507343] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3924850104] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 3925722549] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3926599992] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3927651441] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 3928378272] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3929207646] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 36119592 +[Hera] [HADES][TEST ] [KRELTSC: 3931153485] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3932686338] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 3933535704] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 36120056 +[Hera] [HADES][TEST ] [KRELTSC: 3935388093] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3936735936] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 3937581102] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 3938610018] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 3939639207] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3941052213] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 3941915712] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3942856596] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 3943882278] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 3944843742] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3945554655] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 3946967745] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3948295365] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 3949143996] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 3950072343] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3951513258] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 3952372746] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3953363358] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 3954380850] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 3955507668] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 3956429148] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 3957774450] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 3958501953] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3959258583] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 3964605561] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3965872659] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 3966673662] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 36124576 +[Hera] [HADES][TEST ] [KRELTSC: 3971929962] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3973221777] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 3974054133] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 3982259673] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3983338317] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 3984177351] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 3992355066] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3993661791] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 3994427157] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 3999820881] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4001076912] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4001880603] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 4003291929] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 4004092470] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4005504069] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 4006374540] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 4007524290] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 4008303096] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4009754238] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 4010591613] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4011595014] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4012624749] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4013339106] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4014073287] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4017813555] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4019096760] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 4020146172] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4021806621] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4023091023] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4023940893] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 4028833137] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4030127115] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4030990488] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4031873979] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4033136730] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4033874544] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4034665404] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4038415857] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4039711536] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 4040599731] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 4045563228] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4046948010] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 4047814554] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 4053099435] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4054455552] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 4055375541] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4056353721] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4057377954] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 4058347251] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4059094578] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 36130560 +[Hera] [HADES][TEST ] [KRELTSC: 4060349475] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4061685537] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 4062509850] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 4063597608] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4064925879] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 4065978252] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 35875728 +[Hera] [HADES][TEST ] [KRELTSC: 4070353644] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4071674040] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 4072554675] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4073484870] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4074570423] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 4075277178] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4076051931] Running CURRENT.basic: CURRENT @ . CR +[Hera] 36130560 +[Hera] [HADES][TEST ] [KRELTSC: 4077355905] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4078697847] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 4079556495] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 36127264 +[Hera] [HADES][TEST ] [KRELTSC: 4084854711] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4086106143] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 4086875856] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 4087889463] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 4089033396] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4090367736] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 4091396127] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4092302823] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4093343814] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 4094041560] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4094786346] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4097077572] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4098411429] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 4099279380] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4105142349] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4106450271] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4107272778] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4111939272] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4113200196] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 4113930849] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4114821396] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 4115854932] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 4117011234] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 4117929753] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 4119017427] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4120063437] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 4121026791] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4121779263] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 4123136262] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4124553321] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 4125424863] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4126363647] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4127368854] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 4128101775] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4128850614] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 4129733202] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4131085770] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 4132025709] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 4133184972] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4134489576] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 4135318467] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 4136735421] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4138061067] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 4139086791] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4140026856] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4141062555] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 4141787811] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4142544525] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 4143897156] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [0m[KRELTSC: 4145227926] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 4146480261] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 4147469319] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4148794944] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 4149550314] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 4150437921] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4151858676] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4152719298] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4153665222] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4154727360] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 4155394824] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4156225752] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4157131608] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4158424053] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 4159168587] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4159931475] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4160853648] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4161890208] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 4162604229] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4163349225] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4164265875] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 4165324947] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 4166420097] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 4167383010] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4168384206] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 4169106333] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4169846415] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4171778835] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4173080856] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 4173959601] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 4174760205] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4176126654] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 4177057584] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 4178145111] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 4179059766] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4180430058] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 4181320815] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4182253677] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4183367391] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 4184179608] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4184899677] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 4185738480] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4187107575] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 4187991213] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4189614723] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4190865735] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 4191714408] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4192590171] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4193624652] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 4194348711] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4195064139] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4197175857] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4198519080] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 4199347908] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4200829332] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4202177406] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 4202981013] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4204650429] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4205968284] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4206846546] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 4207789341] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4209466968] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4210358733] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4211317257] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4212387144] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 4213119540] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4213865229] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4215968547] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4217371935] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 4218210150] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 4219752369] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4221268464] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 4222111740] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 4223735670] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4225058607] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 4225889703] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4226786382] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4227867966] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 4228560504] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4229307180] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 4230491097] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4231774638] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 4232624298] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4234323009] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4235647584] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 4236427755] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 4237293459] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4238719338] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 4239548439] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4240457235] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4241497218] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 4242191751] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4242957264] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4245956400] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4247527032] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 4248349308] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 4250117214] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4251388890] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 4252242456] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 4253119374] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4253800782] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4255215510] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 4256133903] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4257072456] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4258121805] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 4258916004] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4259756424] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4261614399] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4262951385] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 4263793443] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 4264534491] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4265833551] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 4266866163] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4267786635] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4268806626] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 4269516720] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4270247373] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 4271169210] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4272624636] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 4273491516] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4275088272] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4276349196] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 4277166663] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4278103179] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4279124577] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 4279809891] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4280560326] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4283042925] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4284613032] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 4285432809] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 4286660574] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 4287492006] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4288921455] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 4289877921] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4290786150] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4291844487] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 4292549919] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4293291156] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 4295318118] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4296827073] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 4297611864] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 4298516565] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 4299374100] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4300803234] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 4301777424] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 4302702558] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 4303495392] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4304919927] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 4305799512] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4306696296] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4307773512] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 4308478503] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4309409517] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4311786003] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4313073660] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4313858514] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 4314809940] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 4315662792] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4317123804] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 4318018110] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4318913592] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4319985957] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 4320681750] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4321436049] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 4324098051] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4325431593] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 4326269262] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4327984710] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4329313464] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 4330089645] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 4331320770] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 4332251112] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4333648326] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 4334737890] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4335695511] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 4336754247] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 4337820606] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 4338760944] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4339803552] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 4340532399] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4341253098] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4343789562] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4345079928] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 4345904808] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 4347924987] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4349206554] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 4350063312] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 4364767722] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4365916254] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4367156598] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 4367985405] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4369554252] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4370812278] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 4371689742] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 4372806123] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4373482701] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4374871221] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4375770693] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4376674869] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 4377359196] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4378113075] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4379872560] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4381163892] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 4382013531] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 4383733431] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4385204712] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 4386020541] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4387799871] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4389102459] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 4390007391] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4391711310] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4393017552] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 4393842096] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 4394652654] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4395382782] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4396748202] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4397856561] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4398849630] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4399939362] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 4400645865] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4401433995] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 4402367151] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4403050575] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4404471897] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 4405306773] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 4406793258] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 4407462948] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4408868709] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 4409975535] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4410916902] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 4411631007] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4412365335] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 4413269805] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4413972759] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4415396139] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 4416277656] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 4417699944] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 4418369781] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4419778398] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 4420654644] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4421557728] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4422951414] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 4423679589] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4424463876] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 4425591702] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4426262904] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4427680761] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 4428501021] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 4429857117] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 4430529390] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 4431204666] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4432639344] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 4433582202] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4434477075] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 4435406472] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4436132820] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 4437074187] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4437746439] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4439154258] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 4439990877] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 4441310475] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 4441958577] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 4442601261] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4444041525] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 4444856493] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4445799393] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4446801387] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 4447749537] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4448504991] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4450855080] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4452202881] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 4453062726] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4455426675] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4456753434] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 4457613447] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 4458463023] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4459180152] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4460838774] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 4461739065] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4462711008] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 4463420199] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4464186867] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4466305347] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4467637314] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 4468504404] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 4470385584] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4471931457] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4473540603] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 4474361283] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 4475158653] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4475879646] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4477289544] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 4478196534] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4479133512] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4480153314] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 4480869918] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4481616027] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4483753113] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4485296361] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 4486174707] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 4487685426] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4488980937] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 4489845549] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 4490805270] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4491582333] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4492991412] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 4493878011] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4494795858] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 4495512210] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4496285598] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4498478271] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4499777394] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 4500597801] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 4501992453] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4503309489] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 4504132122] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 4505038377] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4505726211] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4507216182] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 4508070903] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4509009981] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4510033458] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 4510988265] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4511735340] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4513857957] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4515169974] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 4515929145] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4517785125] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4519170495] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 4520110938] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 4521043065] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4521742953] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4523427174] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 4524302286] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4525262826] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 4525978380] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4526711595] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4528834695] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4530151122] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 4530948345] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4532664864] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4533971673] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 4534873203] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 4535925240] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4536632856] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4538034816] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 4538898525] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4539784431] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4540838799] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 4541540493] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4542281898] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 4543870170] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4545430533] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4546751139] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 4547569551] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 4548834129] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4549524777] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4550981379] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 4551810522] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4552731288] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 4553462298] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4554187260] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4556109684] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4557439635] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 4558336944] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 4559184609] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4559903901] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4561567416] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 4562539359] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4563458235] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4564466403] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 4565188488] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4565929494] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4568583453] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4569880959] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 4570724529] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 4572530067] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4573986396] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4574798046] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 4576106073] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4577398770] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 4578269661] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4580448705] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4581760512] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 4582557483] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4583450067] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 4584140337] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4584869142] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 4587138885] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 4588323033] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4589635701] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 4590502581] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 4592436618] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4593711045] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4594560957] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 4595796030] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4597073691] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 4597924443] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4600355256] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4601665362] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 4602525501] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4603430895] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4604494818] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 4605215916] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4605972840] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4608314403] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4609666614] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 4610483409] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 4612059270] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4613377356] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 4614213156] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4616206707] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4617514902] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 4618346397] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4619270061] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 4620058170] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4620817719] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4622649276] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4624229925] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 4625065683] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 4626396621] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4627687008] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 4628524677] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 4630053540] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4631791983] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4633079367] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 4633953366] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4634856366] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4636034487] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 4636842399] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4637618832] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4639594617] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4640935824] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 4641773598] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 4642712172] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4643399355] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4644820782] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 4645691043] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4646639088] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 4647338661] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4648128912] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4650294894] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4651695405] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 4652527404] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 4653322737] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 4654019517] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4655405601] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 4656255114] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4657194024] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4658201919] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 4658952270] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4659721605] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 4662263088] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4663594677] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 4664356704] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 4666418589] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4667742618] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 4668535977] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 4670446809] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4671774114] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 4672614597] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4673497584] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 4674393213] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4675149612] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 4676925624] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 4678528533] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4679841663] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 4680701865] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 4682888154] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4684211637] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 4685016966] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 4686980172] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4688313231] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 4689160812] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4690069272] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4691125152] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 4691825229] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4692597987] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 4694338992] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4695639795] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 4696524231] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4698246000] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4699779462] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4700598357] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4702322961] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4703609379] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4704406707] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 4706242464] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4707613071] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 4708440765] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4709339418] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 4710032964] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4710815634] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 4713040710] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4714309194] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 4715166813] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 4716971196] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 4718039067] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4719315762] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4720082913] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4721766273] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4723045950] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 4723848360] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 4725863226] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4727105019] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 4727915997] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4728783801] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4729853016] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 4730548284] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4731259512] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 4733278200] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4734575328] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 4735493637] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 4737596010] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4738844943] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 4739671755] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4740536325] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 4741199757] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4741957878] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 4743950337] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4745233878] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 4746075264] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 4747977864] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4749398556] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 4750249665] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4751101824] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4752169905] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 4752895833] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4753655256] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4755325911] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4756651473] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 4757438700] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 4759010424] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 4760413266] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4761851850] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 4762764762] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 4764525696] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4765858671] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 4766639052] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 4768323063] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4769609964] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 4770424407] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4771333413] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 4772061273] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4772845980] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4774666953] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4776015069] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 4776814161] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 4778608086] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4779916659] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 4780714890] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 4782437058] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4783747605] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 4784579184] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 4786386486] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4787967240] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 4788797517] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4789737624] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4790801694] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 4791557001] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4792381104] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 4794940752] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4796307600] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 4797095541] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4798971996] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4800575010] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4801383342] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 4803317085] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4804644789] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 4805424645] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4806339048] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 4807045110] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4807803147] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 4809783258] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4811095653] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 4811879016] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 4813954614] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4815344394] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4816621761] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4817410542] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 4819343424] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4820677113] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 4821478620] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4822384938] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4823427567] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 4824134049] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4825173633] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4827338187] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4828615386] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 4829430249] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 4831525629] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4832846256] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 4833662442] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4834564056] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 4835275116] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4835974311] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4838201802] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4839508191] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 4840311483] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 4842211122] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4843512807] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 4844282268] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4845188208] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4846173969] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 4846866591] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4847599365] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 4850202756] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 4851146790] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4852474515] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 4853280621] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4855284252] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4856633670] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4857414366] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4858348404] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 4859028489] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4859763783] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 4861676253] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4863233613] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 4863974682] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4866015861] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4867327311] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4868089800] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4868967747] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4869999666] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 4870694367] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4871456961] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4874540265] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4876088721] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 4876862550] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 4879081368] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4880350839] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 4881139053] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 4883755926] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 4884808131] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4886133609] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 4886917665] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 4889336298] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4890550329] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 4891327371] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 4893244839] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4894567839] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 4895311008] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4896163293] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 4896834852] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4897579050] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4899702885] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4901354535] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 4902156840] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 4904263623] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4905544707] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 4906327629] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 4908460242] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4909737000] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 4910541027] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 4912660326] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4913998803] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 4914801486] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 4916758308] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4918018812] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 4918845540] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4919824392] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 4920861057] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 4921966371] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 4923119586] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 4924115595] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 4924835559] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4925735136] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4927725012] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4929063951] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 4930027263] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4931728788] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4933077807] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 4933964217] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 4935721140] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4937041872] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 4938192000] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 4939102119] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 4939911648] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4941319005] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 4942167993] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 4943070384] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4943872101] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4945325364] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4946207427] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4947152196] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 4948193754] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 4948892613] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4949648634] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4951777929] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4953146352] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 4953973836] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 4955504400] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 4956932148] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4958283876] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 4959170496] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4960815783] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4962168477] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 4963204386] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 4964180487] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 4965074184] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4966484733] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 4967338929] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 4968279267] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4969091232] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4970523390] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4971439767] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 4972292829] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4973084487] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4974554340] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4975422648] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4976606607] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 4977660114] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 4978396038] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4979153844] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 5044942833] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5046293133] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 5047242963] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 5114658927] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5116048077] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 5116940409] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5184087342] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5185496589] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 5186328168] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5187286188] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5188295763] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 5189124234] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5190000459] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 5192000877] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5193379044] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 5194303296] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 5195570709] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5196937998] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 5197843749] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 5198972646] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5200408059] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 5201331828] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5202650838] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5203664487] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 5204457846] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5205194841] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 5209969380] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5211323481] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 5212215078] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 5216722329] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5218041864] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 5218977015] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 5221459740] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5222807016] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 5223717807] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 5226025770] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5227706022] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 5228590815] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 5230998066] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5232395385] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 5233291770] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 5234754777] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5236175889] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 5237076264] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 5238600255] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5240236197] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 5241113367] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 5242126806] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5242916616] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5244360954] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5245229052] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5246184111] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5247199335] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 5247888912] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5248662993] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 5250152103] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 5250949914] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5252354268] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 5253366132] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 5254585014] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 5255347440] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5256645009] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 5257496769] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 5258782809] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 5259549834] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5260849650] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 5261685702] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 5263171473] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 5263943454] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5265578430] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 5266629375] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5267639580] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 5268682818] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 5269814718] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 5274047247] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 5276038677] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 5277280092] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 5278818552] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 5283327882] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 5284282143] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 5285384559] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 5286387666] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 5287142658] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5287897230] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5288879820] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 5289597894] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5290491444] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5291665449] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 5292707427] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5293464267] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5294463657] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 5295215037] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5295939138] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5296945773] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 5297722542] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5298474195] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5299433454] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 5300178912] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5300950956] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5301889152] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 5302647924] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5303381202] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5304285357] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 5305265595] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5305986336] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5306981127] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 5307748551] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5308495185] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5309443146] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 5310218613] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5311017432] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5312114661] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 5313163842] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 5314263087] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 5315189397] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5316224424] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 5316916857] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5317843776] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5319404790] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5320779639] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5323075716] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5324024496] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5325074307] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 5325789399] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5326547961] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5327978985] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5329279053] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 5331373656] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5333134758] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5334062454] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5335121778] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 5335819482] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5336590455] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 5338149558] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5339447778] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 5341785456] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5342854566] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5343913974] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 5344619385] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5345376288] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5346837027] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5348107506] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5350404927] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5351753820] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5353066530] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5355911253] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5356830360] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5357901528] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 5358631362] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5359398492] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5360794761] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5362139811] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5364384039] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5365314738] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5366394474] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 5367102657] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5368126050] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 5369372694] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5370703023] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 5372980809] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5373927216] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5374977783] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 5375683761] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5376469896] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5377893738] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5379256029] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 5381536713] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5383643223] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5384797782] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5386082268] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 5386976742] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5387885160] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5389520094] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5391151983] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5394234111] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5395399926] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5396660745] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 5397556143] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5398448664] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5400262917] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5401922253] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5404682871] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5406109485] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5407805529] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 5408860632] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5409814347] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5411544600] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5413149000] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5416060629] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5417218884] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5418470967] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 5419321215] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5420442909] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5422178055] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5423773761] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5426818299] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5427911706] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5429210535] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 5430109923] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5431023402] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 5432736309] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5434436595] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 5437185810] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5438340453] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5439596358] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 5440475607] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5441418696] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5442877482] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5444494902] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5447443113] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5448605463] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5449927245] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 5450743767] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5451665814] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 5453068614] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5456070816] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 5459480061] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5460411264] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5461407609] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 5462123835] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5462832606] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5463880758] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5465142837] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5467293993] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5468282106] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5469318897] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 5470022019] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5471016453] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 5472391197] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5473681164] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 5476031169] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5476966677] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5477986689] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 5478698967] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5479467840] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5480691531] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5482003380] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 5483668743] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5485511304] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5486633754] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5487931050] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5490161838] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5491066140] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5492095539] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 5492796771] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5493579483] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5494802040] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5496398103] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5498693382] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5499794832] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5501071044] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5503312269] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5504248554] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5505272073] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 5505994662] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5506730103] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5508023304] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5509376187] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5511685704] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5512779762] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5514099297] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5516378994] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5517233862] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5518284240] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 5518979529] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5519746260] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5521083561] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5522360382] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5524626009] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5525771979] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5527155669] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5529416130] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5530328832] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5531383368] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 5532143022] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5532872625] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 5534630010] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5535941985] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][INFO ] [KRELTSC: 5537980707] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 5539383906] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5540345286] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5541506292] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 5542184025] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5542902372] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5544369894] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5545851486] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5548109301] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5549018853] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5550069294] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 5550748812] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5551508466] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 5553037098] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5554369170] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 5556756072] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5557708926] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 5558932071] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 5560401231] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 5561399613] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5562447009] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 5563168443] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5563913124] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 5565700497] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5567100336] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 5568193533] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5569246809] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5570413233] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 5571530454] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5572320285] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5574454725] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5575878147] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 5576935119] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5577934194] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5578981737] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 5579796978] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5580570807] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5582291715] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5583973248] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 5585071653] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5586091602] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5587088808] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 5587847139] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5588567754] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 5593369887] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5594670690] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 5595487443] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5596618104] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5597579442] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 5598478284] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5599363959] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5601927891] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5603339763] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 5604417525] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5605368237] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5606438250] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 5607204519] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5607938658] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5610486168] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5611825779] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 5612925171] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5613976536] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5615075151] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 5615886024] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5616645426] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 5619142935] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5620518141] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 5621851284] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5622828855] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5623901451] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 5624631054] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5625376113] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5627775195] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5629213149] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 5630260608] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5631187590] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5632235973] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 5633026329] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5633807067] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5638208058] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5639511696] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 5640352977] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5641265301] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 5642251881] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 5643560055] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 5644556232] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 5645591364] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 5646457173] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5647406520] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 5649444822] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5650849575] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 5651832249] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5652867675] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 5653965429] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 5654756772] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5655660948] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 5657824557] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5659378074] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 5660327673] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5661335484] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 5662386030] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 5663136549] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5663893179] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 5665821819] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5667180561] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 5668229511] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 5669573910] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5670914508] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 5672151324] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5673053883] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 5674118079] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 5674850286] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5675634678] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 5677732347] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5679036909] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 5679875313] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5680809435] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 5681860275] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 5682577215] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5683295478] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 5685360954] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5686728453] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 5687807055] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5688708354] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 5689764969] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 5690530776] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5691279321] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 5692677648] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5693994852] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 5695058481] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5696005161] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 5697268563] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 5698057995] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 5698821345] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 5699593830] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 5700335088] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 5701214505] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 5701944276] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 5702765523] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 5703661992] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x000000003d6f3000, 0x000000003d7463aa) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] PCI: ECAM mapped (amd64) +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] Artemis: genesis signature stamped +[Hera] virtio-input: no device on PCI bus 0 +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 5839063125] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 5860261197] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 5865185970] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] APIC Timer: started (LVT=0x00020020 ICR=10067606) +[Hera] I/O APIC: keyboard IRQ1 unmasked +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 6039692421] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 6326247270] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 6330874116] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 6427153530] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 6584845008] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 19540291113] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 641 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=50 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261003-100732/aarch64/qemu-aarch64-20261003-100732.log b/logs/20261003-100732/aarch64/qemu-aarch64-20261003-100732.log new file mode 100644 index 00000000..4ae2337a --- /dev/null +++ b/logs/20261003-100732/aarch64/qemu-aarch64-20261003-100732.log @@ -0,0 +1,9115 @@ +UEFI firmware (version 2025.11-3ubuntu7.2 built at 14:10:51 on Aug 26 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 3 2026 10:07:08 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039958 + Free pages : 1038547 + Used pages : 1411 + Total MB : 4062 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 335544 cells (20971 KB), 202 VM slots +Switch-signal: 202 slots +Kernel-Hermes: 202 channel slots +Kernel-Hermes: 202 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0x0000000040807000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 255057] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 1790646] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 3998049] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 4172992] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 4218788] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 4277488] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 4319075] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4365264] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 4395230] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4435380] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 4846987] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4904777] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 5195363] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5235097] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5285513] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5553273] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 5607039] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5659879] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 5896002] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 5958630] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6006478] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 6133350] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 6178792] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6387060] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 6515385] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 6544259] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6572175] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6619389] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6795532] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6849952] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6887654] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 6918990] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6954055] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 7021629] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7070939] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 7332819] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7373010] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7417942] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7634804] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 7696270] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7743875] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 7847786] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 7890104] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7935144] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 8269471] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8531130] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8575121] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8625089] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8724759] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 8765761] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8960429] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 9061176] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9111675] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9165563] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9418660] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 9478858] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9525701] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 9634361] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9818605] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9877492] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 9983213] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10036398] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10078796] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10123401] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10362069] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10406266] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10452736] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10554432] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10739631] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10784313] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10883009] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 10928628] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10974388] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 11215979] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 11274404] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11321050] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 11424832] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 11454695] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11619934] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11671522] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11703059] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11736168] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 11771908] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 11795550] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11821335] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 12008120] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12056226] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 12156874] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 12198284] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12242420] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 12504064] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 12549065] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 12591593] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12638794] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 12911463] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 12988160] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13033602] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 13135201] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 13284723] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 13332568] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13381465] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 13413795] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 13443590] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 13473128] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13520444] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 13550080] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13580957] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 13758332] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 13782769] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13810810] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 13865709] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13911896] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 14013640] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 14191236] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14239184] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 14346591] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 14389843] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14435860] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 14682913] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 14715672] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 14748095] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14797271] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 14827826] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 14855309] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 15014068] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15075809] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 15106804] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 15140137] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 15179356] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 15203214] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 15230657] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 15276833] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15323377] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 15568879] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 15604444] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 15654586] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15706534] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 15954404] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 15995285] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16041358] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 16152473] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 16183292] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 16349515] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16396403] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 16427301] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 16460302] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 16491893] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16540427] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 16570556] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 16598632] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 16628252] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16811916] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 16843678] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 16873138] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 16909088] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 16934153] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 16960861] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 17001833] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17048638] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 17282146] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 17321138] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17369171] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 17461422] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 17639275] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17683603] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 17786108] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 17817290] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 17853351] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 17878100] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 17904718] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 18092746] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18136529] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 18232892] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 18271644] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18314899] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 18546542] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 18597388] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 18637539] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18684198] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 18777272] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 18930064] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 18980349] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 19005232] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 19032977] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 19091319] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 19134410] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 19371438] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 19430706] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 19478400] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 19583805] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 19615332] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 19649823] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 19808782] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 19834484] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 19889757] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 19936126] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 20037411] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 20076735] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20252289] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 20359228] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 20401002] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20444019] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 20681133] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 20711156] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 20736625] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20788408] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 20819510] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 20851181] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 20887615] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 20912085] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 20938540] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 21120328] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21166799] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 21201608] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 21318191] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 21358824] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21528821] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 21647979] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 21692520] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21737099] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 21986317] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 22021946] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 22052085] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22102609] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 22134634] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 22163803] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 22193623] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22242927] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 22394753] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 22441921] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 22482694] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 22523278] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 22558156] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 22596843] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 22620633] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 22647220] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 22717830] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22905346] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 23013811] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 23053108] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 23099194] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 23334038] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 23375457] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 23422823] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 23498566] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 23566956] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 23754722] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 23800747] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 23915823] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 23947071] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 23971246] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 24163766] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 24206509] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 24240007] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 24278223] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 24301999] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 24329021] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 24371318] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 24417198] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 24655432] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 24698675] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 24745943] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 24856096] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 25009602] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 25051313] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25099617] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 25131773] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 25163134] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 25198966] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 25227179] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 25254217] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 25301294] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25482488] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 25588401] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 25632554] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25679353] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 25870035] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 25960730] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 25991159] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 26015998] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26063778] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 26096190] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 26129281] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 26166152] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 26344764] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 26378649] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 26416489] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 26440166] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 26466919] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 26521943] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26566757] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 26804146] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 26844293] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26890491] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 26987489] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 27028213] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27211722] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 27317703] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 27363393] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27409400] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 27657347] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 27702995] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27748577] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 27862543] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 27908940] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28091706] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 28126495] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 28256622] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 28286819] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28334817] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 28491338] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 28535621] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28584948] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 28616538] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 28651619] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 28685340] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 28709109] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 28736734] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 28781992] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28966262] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 29071507] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 29118011] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29165318] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 29406783] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 29434564] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29482574] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 29516143] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 29547027] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 29584737] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 29608835] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 29634646] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 29841079] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29886873] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 29987771] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 30035301] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30080828] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 30325879] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 30370603] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30416145] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 30490458] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 30704425] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 30746959] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30793517] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 30895476] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 30925730] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 30961485] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 31110429] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 31149096] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 31200462] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31246635] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 31347123] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 31390781] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31577500] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 31682468] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 31713991] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 31751231] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 31775851] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 31801912] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 31990034] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32038898] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 32142540] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 32185139] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32231380] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 32484138] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 32514178] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 32551854] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 32575341] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 32602464] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 32655375] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32836579] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 33534749] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 33779170] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 33849839] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 33897821] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 34161315] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 34194533] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 34268233] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 34293373] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 34319220] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 34388830] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34433434] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 34696075] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 34756181] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34802423] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 35063571] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 35097827] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 35133089] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 35159890] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 35185078] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 35225957] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 35274738] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 35522811] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 35563110] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 35613577] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 35658694] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 35730474] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 35759567] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 35940360] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 35977718] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 36025185] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 36083368] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36131813] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 36391934] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 36437541] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36485678] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 36587839] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 36779928] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36827488] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 36931645] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 36962251] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 37000039] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 37024704] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 37180886] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 37240902] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37288386] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 37387352] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 37431145] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37601808] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 37675649] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 37751905] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 37784684] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 37821104] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 37846346] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 37873833] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 38062667] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38115163] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 38222347] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 38266286] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38313106] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 38564349] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 38608669] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38653896] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 38755773] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 38943111] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38993727] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 39060033] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 39143981] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 39174063] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39359148] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 39393431] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 39426129] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 39463978] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 39489061] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 39515155] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 39570328] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39619323] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 39862513] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 39907111] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39951863] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 40061389] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 40251958] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40297444] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 40401950] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 40430355] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40480777] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 40512735] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 40665951] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 40722009] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 40745805] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 40776135] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 40840538] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40887190] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 40947460] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 41181434] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 41229409] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41273652] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 41381671] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 41566644] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41613441] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 41724148] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 41754364] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41804583] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 41981912] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 42013628] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 42051294] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 42077808] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 42105395] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 42170933] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42219059] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 42463588] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 42517582] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 42547902] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42594023] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 42649561] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 42691727] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42893099] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 42997063] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 43027369] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43082227] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 43113412] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 43280075] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 43316855] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 43341860] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 43369664] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 43447673] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43499522] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 43765563] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 43802640] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43855664] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 43893731] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 43960127] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 44124544] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44177281] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 44210893] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 44242729] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 44279716] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 44305053] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 44331175] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 44393193] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44573666] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 44694108] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 44724963] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44771237] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 44823847] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 44853761] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45037417] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 45068384] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 45105104] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 45172463] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 45214218] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 45247935] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 45284736] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 45434367] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 45471949] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 45513709] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45558836] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 45654840] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 45692529] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45739835] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 45975195] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 46014037] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46058086] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 46153390] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 46330121] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46376000] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 46463250] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 46513413] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 46558366] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46602362] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 46854158] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 46896142] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46940638] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 47185099] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 47216692] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 47242772] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47290683] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 47321628] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 47349193] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 47373825] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47422975] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 47453811] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 47613116] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 47660539] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 47684639] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 47711266] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 47751703] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47796587] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 47891438] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 48078921] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48125044] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 48222936] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 48260676] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48306185] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 48542931] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 48581708] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48628911] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 48722367] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 48759938] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48941095] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 49040484] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 49082821] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49127774] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 49370120] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 49421108] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49469516] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 49518277] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 49620845] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 49649334] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 49809705] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49856841] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 49895350] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 49926790] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 49950773] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49999081] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 50031246] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 50061427] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 50235713] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 50258418] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 50284887] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 50339534] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50383937] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 50480975] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 50659056] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50703694] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 50800843] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 50842005] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50887887] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 51130188] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 51171161] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51217903] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 51321495] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 51360901] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51544935] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 51643608] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 51685132] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51730989] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 51972712] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 52014153] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52059623] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 52169300] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 52203306] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 52228412] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52410711] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 52441567] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 52471082] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 52496921] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52548634] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 52580128] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 52610230] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 52646631] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 52670341] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 52696182] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 52867198] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52914663] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 52987782] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 53053632] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 53089601] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53133704] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 53369902] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 53414297] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53462669] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 53684163] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 53741209] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53789610] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 53893515] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 53936143] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53982868] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 54223030] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 54262820] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54307583] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 54408080] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 54438385] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 54606669] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54657022] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 54689825] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 54720867] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 54746826] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54796483] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 54834892] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 54987128] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 55025266] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55073879] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 55106252] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 55138634] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 55175782] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 55203168] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 55231184] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 55290278] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55469480] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 55576935] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55616608] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55663909] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55902464] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55943399] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55993214] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 56091304] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 56129825] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 56316899] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56362520] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 56468022] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 56510004] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56557264] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 56794819] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 56837629] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56888102] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 56984907] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 57015357] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 57178357] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57227016] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 57259672] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 57293622] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57321788] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57370657] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57403568] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 57434125] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57459624] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57629301] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57669592] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 57702161] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 57740449] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 57766997] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 57793716] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 57851482] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58019412] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 58137910] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 58179095] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58225663] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 58334675] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 58512013] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58557643] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 58668641] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 58700764] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 58726376] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58777380] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 58938743] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 58974350] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 59000946] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59051416] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 59085984] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 59115555] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 59143913] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59194169] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 59355831] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 59386733] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 59423476] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 59449240] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 59479086] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 59530054] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59578071] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 59810717] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 59855268] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59901977] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 59999288] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 60037756] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 60204144] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60258280] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 60352617] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 60395584] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60442713] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 60689024] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 60719328] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 60745899] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60795836] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 60828591] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 60861323] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 60899302] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 60924718] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 61073446] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 61135086] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61180083] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 61275420] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 61315934] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61363586] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 61592007] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 61631850] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61682579] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 61779715] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 61957950] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62002849] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 62112991] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 62146310] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 62174411] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62224550] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 62255664] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 62422061] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 62456711] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 62481684] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 62510127] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 62560066] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62608440] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 62840492] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 62879186] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62926677] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 63027384] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 63070458] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63116611] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 63346871] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 63386377] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63434318] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 63505139] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 63694170] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 63736135] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 63762836] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63812754] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 63845021] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 63873423] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 63899646] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63951316] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 63983163] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 64145252] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 64180934] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 64206300] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 64232652] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 64283602] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64330634] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 64429542] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 64604945] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64652813] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 64757789] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 64799038] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64847142] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 65084276] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 65126044] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65174567] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 65277054] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 65446544] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 65474973] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65525315] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 65558747] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 65590386] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 65616013] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65669215] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 65701106] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 65860555] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 65906523] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 65929606] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 65956072] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 66002587] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66051738] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 66152854] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 66332448] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66377655] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 66474196] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 66511543] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66559052] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 66797997] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 66837124] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66888706] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 66993398] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 67173818] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67221521] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 67280443] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 67365310] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 67396607] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 67421628] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67596259] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 67635017] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 67667007] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 67707435] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 67730885] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 67756831] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 67802780] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67851292] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 68083486] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 68119276] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68167260] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 68260847] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 68299183] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68477775] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 68577190] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 68616131] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68666204] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 68776370] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 68956064] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69000731] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 69113676] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 69146854] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 69172989] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69361362] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 69392089] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 69422964] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 69460096] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 69485588] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 69515213] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 69567124] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69614021] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 69848687] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 69884297] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69932174] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 70029211] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 70067763] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70248091] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 70357071] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 70388019] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 70413653] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70463919] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 70495334] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 70661931] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 70699581] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 70724122] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 70751673] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 70800321] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70846811] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 71074610] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 71125475] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71174203] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 71230753] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 71316852] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 71355898] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71541782] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 71645538] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 71674135] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 71699452] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71748474] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 71779463] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 71808772] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 71980043] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 72002875] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 72029961] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 72078737] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72125319] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 72223915] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 72410732] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72455563] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 72550475] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 72587530] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72635127] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 72869993] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 72906737] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72953494] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 73048283] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 73090981] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73273650] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 73393351] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 73424842] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 73451323] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73500619] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 73532113] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 73692195] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 73740141] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 73763997] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 73790650] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 73837963] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73883209] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 74110057] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 74163507] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74215662] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 74318578] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 74357247] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74403700] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 74641505] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 74682577] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74727366] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 74823467] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 74996626] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 75046667] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75092564] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 75188777] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 75218308] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 75243301] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75424340] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 75465966] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 75500387] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 75538487] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 75576290] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 75608447] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 75645369] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 75669387] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 75695369] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 75875960] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75923398] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 76025574] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 76068009] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76117624] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 76368896] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 76411228] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76459972] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 76556953] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 76747537] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76794204] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 76892253] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 76931602] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76977867] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 77214564] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 77245675] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77272703] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77321407] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77352315] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 77381393] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77407074] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77594831] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77638772] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 77673934] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 77712447] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 77737740] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 77764262] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 77813457] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77865793] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 78113218] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 78153257] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78201335] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 78304180] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 78495669] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78542072] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 78612588] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 78684634] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 78726339] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78911648] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 79013574] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 79052970] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79098903] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 79338790] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 79371485] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 79398835] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79446983] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 79477840] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 79506459] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 79531216] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79581643] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 79611948] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 79781430] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 79819401] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 79844592] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 79871992] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 79926423] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79972771] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 80207905] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 80249695] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80296765] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 80391952] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 80433470] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80480414] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 80739260] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 80778203] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80822094] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 80917670] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 81129717] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81175393] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 81273053] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 81303554] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 81330836] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81527722] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 81557096] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 81586285] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 81610070] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81656008] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 81686656] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 81718126] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 81755969] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 81780549] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 81949937] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 81996898] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82043272] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 82137182] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 82175768] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82221935] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 82252494] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 82510858] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 82549286] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82595097] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 82839130] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 82878657] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82924843] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 83019206] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 83049034] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 83075226] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83270702] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 83300132] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 83332394] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 83370136] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 83396535] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 83422932] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 83464177] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83509478] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 83792366] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 83837051] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83881823] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 84106405] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 84165406] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84213637] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 84309468] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 84349585] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84394762] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 84672789] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 84719847] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84765390] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 85042861] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 85078379] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 85103350] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85153377] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 85184196] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 85211743] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 85235331] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85430461] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 85461757] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 85491732] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 85528822] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 85552995] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 85578956] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 85628167] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85672621] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 85908882] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 85980841] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86037272] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 86068331] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 86347145] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 86440771] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86484158] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 86578359] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 86806353] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86851602] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 86947444] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 86977078] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 87002569] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87221448] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 87266069] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 87295416] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 87319612] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87368806] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 87399866] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 87430536] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 87614436] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 87662637] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 87701023] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 87752633] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87795928] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 88049989] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 88126643] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88170642] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 88265025] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 88300078] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88489213] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 88622051] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 88662898] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88710255] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 88950413] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 88989269] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89032292] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 89125479] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 89158940] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 89330942] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89393411] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 89448509] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 89475620] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 89498801] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89547136] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 89576852] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 89607076] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 89783576] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 89805980] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 89858222] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 89919387] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89962583] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 90021675] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 90254821] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 90328940] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90370227] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 90463701] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 90649574] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90703526] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 90824660] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 90864598] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90909833] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 91200314] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 91240214] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91285452] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 91534125] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 91562422] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 91630688] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91679249] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 91710656] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 91738672] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 91763232] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91932432] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 91976922] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 92007143] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 92042932] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 92068435] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 92094085] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 92140473] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92184246] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 92432018] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 92513093] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92559416] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 92778609] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 92835366] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92881177] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 92977579] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 93004664] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 93031671] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93081024] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 93268048] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 93300042] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 93370364] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 93405365] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 93430738] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 93481526] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93527808] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 93776318] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 93837739] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93882334] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 93967565] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 94199651] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 94239249] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94284946] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 94378258] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 94557562] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 94599945] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94668696] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 94701686] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 94734225] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 94771982] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 94796103] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 94822385] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 95024156] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95097842] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 95193505] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 95228778] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95419924] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 95520259] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 95557667] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95603089] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 95696291] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 95876876] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 95924874] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95986339] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 96018963] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 96049712] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 96087343] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 96111721] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 96138318] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 96357946] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96420205] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 96516234] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 96553649] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96748047] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 96882925] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 96920090] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96966788] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 97212865] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 97243775] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 97272272] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97320253] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 97351257] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 97384069] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 97420942] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 97594077] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 97619556] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 97670244] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97745764] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 97859788] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 98050633] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98099089] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 98204001] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 98243222] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98288818] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 99338321] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 99423057] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 99461556] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99507677] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 99606693] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 99854347] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 99879778] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99929849] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 99961649] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 99993003] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 100032051] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 100241797] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 100268920] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 100320464] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100366982] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 100463484] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 100671812] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100722551] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 100820630] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 100858659] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100904507] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 101193022] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 101232328] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101277509] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 101569167] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 101600101] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 101625620] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101674508] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 101704098] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 101733978] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 101770230] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 101943682] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 101971744] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 102031838] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102080574] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 102179254] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 102219296] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102413813] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 102516712] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 102556963] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102603922] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 102822552] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 102887816] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 102928634] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102976299] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 103068997] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 103249790] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103298751] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 103403148] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 103435666] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 103463453] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103513183] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 103689988] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 103725310] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 103762559] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 103788149] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 103813317] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 103858125] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103904624] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 104152737] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 104192107] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 104239280] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 104334463] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 104373521] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 104546736] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 104668028] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 104700863] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 104740979] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 104766245] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 104792991] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 104984882] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105034231] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 105128913] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 105167312] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105210950] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 105461094] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 105504797] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105552457] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 105653634] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 105684765] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 105860303] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 105886977] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 105914278] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 105965643] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106008990] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 106096965] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 106295729] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 106341131] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106387616] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 106482039] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 106524992] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106570135] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 106817784] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 106857521] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106905095] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 107156959] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 107203051] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107250538] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 107352577] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 107386116] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 107410356] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107616424] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 107660396] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 107692747] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 107730469] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 107754740] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 107782005] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 107835328] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108019616] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 108129791] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 108170465] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108216086] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 108460375] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 108512146] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108558560] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 108656657] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 108695715] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108741374] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 108993636] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 109034556] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109081436] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 109128628] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 109379376] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 109407755] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 109433571] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109485980] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 109517494] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 109551362] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 109590148] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 109797744] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 109833404] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 109872001] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 109898563] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 109931404] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 109983189] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110029965] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 110233571] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 110281440] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110329110] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 110359911] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 110403738] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110450001] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 110477655] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 110728948] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110809836] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 110841195] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 110882292] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111103104] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 111135881] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 111186476] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111232624] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 111261270] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 111309518] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111511303] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 111553950] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 111591739] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 111617624] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111665488] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 111696857] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 111726621] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 111752092] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111938304] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 111969338] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 112003659] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 112029966] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112078725] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 112114859] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 112148520] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 112184957] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 112339081] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 112377397] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 112432155] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112479608] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 112512818] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 112557097] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112604165] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 112636578] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 112821576] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112867069] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 112895326] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 112939077] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112982985] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 113012342] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 113054372] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113244168] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 113296070] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 113344592] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113389841] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 113421701] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 113459796] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 113485277] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113534145] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 113703432] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 113738767] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 113766699] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113817331] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 113847998] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 113880258] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 113914702] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 113938357] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 114113669] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 114171513] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114219064] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 114247456] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 114292989] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114339631] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 114369268] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 114563523] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114607696] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 114638262] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 114682563] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114728272] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 114758312] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 114805565] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115002716] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 115032928] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 115065978] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115115305] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 115146875] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 115173830] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115223285] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 115253352] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 115441734] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 115476743] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 115515537] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 115562047] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 115614945] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115660687] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 115830190] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 115887129] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115929649] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 115958910] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 115999661] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116045177] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 116072680] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 116254076] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116300505] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 116331866] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 116379597] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116425244] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 116455863] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 116499460] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116545024] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 116720845] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 116765120] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116811068] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 116843608] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 116872937] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116923284] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 116952682] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 116982771] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 117158039] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 117186214] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 117213331] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 117278888] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117322309] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 117355134] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 117400883] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117614342] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 117644141] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 117698522] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117744404] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 117776642] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 117820746] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118035049] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 118063805] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 118129268] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118176232] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 118206019] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 118240700] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118290004] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 118491119] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 118528319] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118579550] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 118610426] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 118645746] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 118683411] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 118722605] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 118898030] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 118934811] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 118960569] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 118987722] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 119037293] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119084468] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 119110878] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 119153779] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119349716] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 119376652] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 119429750] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 119469376] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119517422] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 119546354] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 119748969] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119792778] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 119820343] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 119853263] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119903788] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 119934796] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 119966872] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120017100] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 120047734] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 120223047] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 120261206] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 120286183] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 120313233] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 120368186] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120414903] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 120445868] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 120631603] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120677197] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 120707961] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 120756981] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120803021] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 120836493] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 120879942] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121066729] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 121094532] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 121128161] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121180585] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 121212944] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 121242093] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121293426] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 121324935] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 121489872] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 121526259] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 121550605] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 121577255] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 121640780] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121688484] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 121720062] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 121767611] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121953581] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 121985674] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 122038568] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122086204] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 122117086] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 122163483] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122335885] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 122374376] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 122410518] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122457289] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 122488223] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 122518890] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122569587] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 122600319] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 122632273] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 122809024] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 122833308] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 122858937] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 122918859] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122967121] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 122998994] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 123045653] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123090681] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 123252932] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 123304891] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123352648] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 123384753] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 123437828] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123490987] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 123683115] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 123734406] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123783226] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 123813024] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 123851070] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123904029] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 123935751] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 124141778] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124204874] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 124236494] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 124268886] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 124306865] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 124333838] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 124360340] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 124566554] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124616837] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 124651199] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 124702186] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124751344] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 124782820] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 124979630] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125029047] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 125061381] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 125112943] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125160518] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 125189698] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 125230588] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125417198] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 125449020] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 125482197] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125535721] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 125568399] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 125602847] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 125640977] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 125664860] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 125826357] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 125882702] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125929913] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 125960368] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 126002644] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126053521] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 126083821] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 126256697] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126313099] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 126344498] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 126392112] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126436917] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 126466019] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 126515386] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126688579] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 126727434] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 126762824] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126814331] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 126848197] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 126876859] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126928289] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 126961462] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 127118113] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 127165952] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 127190093] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 127217396] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 127279097] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 127320375] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127367625] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 127398063] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 127576226] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127620950] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 127650275] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 127694642] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127741896] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 127772226] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 127818194] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127862820] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 128039762] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 128083101] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128130600] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 128160205] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 128201997] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128247768] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 128275940] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 128458203] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128507620] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 128539786] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 128568396] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128616867] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 128648286] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 128678669] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 128714042] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 128890052] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 128919004] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 129003052] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129061009] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 129093549] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 129140446] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129347412] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 129385141] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 129468678] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129518343] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 129547012] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 129741623] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129788163] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 129819386] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 129854290] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129905678] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 129936553] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 129968748] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130022250] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 130208708] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 130242124] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 130280546] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 130305793] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 130332968] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 130387009] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130432931] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 130612857] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 130674750] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130723805] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 130752815] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 130793111] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130839972] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 130867418] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 131073521] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131120168] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 131151068] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 131199357] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131245270] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 131276520] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 131308902] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131522702] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 131554278] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 131587093] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131637420] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 131667675] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 131700577] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 131736747] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 131761977] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 131962497] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 132026968] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132071928] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 132101028] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 132151701] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132364285] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 132406955] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 132459519] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132508216] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 132539839] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 132585463] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132766156] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 132809660] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 132849430] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132900010] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 132931966] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 132962246] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133012913] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 133044395] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 133201037] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 133247075] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 133271192] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 133298844] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 133358721] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133406696] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 133436072] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 133491786] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133674320] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 133703003] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 133756467] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133804318] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 133837574] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 133883254] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133930006] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 134102396] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 134139192] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134191657] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 134228447] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 134257985] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134309482] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 134341237] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 134499081] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 134545860] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 134569387] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 134598765] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 134655698] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134700489] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 134729416] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 134775491] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134961793] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 134988858] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 135034595] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135081280] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 135110275] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 135150957] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135197662] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 135227173] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 135416954] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135461836] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 135491810] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 135526045] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135572006] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 135604076] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 135633054] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135811855] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 135855330] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 135886973] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 135923974] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 135950794] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 135977905] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 136033508] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136081071] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 136109710] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 136293401] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136344926] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 136379549] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 136433896] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136492495] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 136527329] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 136747554] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136806231] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 136841687] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 136904770] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 136954905] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137182101] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 137224596] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 137286814] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137343596] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 137371952] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 137408418] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137642332] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 137683531] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 137713220] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137758183] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 137788790] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 137818510] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 138005243] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 138059777] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 138107432] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 138157063] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138202730] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 138230681] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 138273871] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138484671] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 138516261] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 138564932] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138613241] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 138644581] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 138690903] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138896119] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 138924804] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 138968985] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139016746] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 139042714] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 139077275] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139124384] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 139323919] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 139356737] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139414255] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 139449172] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 139481692] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 139520908] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 139546706] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 139701488] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 139762572] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139807794] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 139841482] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 139883349] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139930325] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 139960916] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 140004454] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140199254] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 140226540] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 140275072] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140321255] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 140348732] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 140401113] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140586986] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 140624900] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 140657792] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140711429] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 140743059] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 140772320] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140819745] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 140850341] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 140881477] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 141050788] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 141075843] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 141103326] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 141163086] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141211094] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 141244908] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 141288769] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141476668] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 141509619] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 141557091] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141608649] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 141642214] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 141692352] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141740899] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 141916884] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 141966937] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142015704] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 142053799] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 142085711] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142137705] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 142169880] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 142340228] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 142375944] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 142401407] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 142428758] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 142484085] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142528939] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 142558356] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 142599581] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142835256] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 142869750] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 142923487] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142974738] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 143006647] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 143055064] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143103957] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 143350661] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 143390352] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143440973] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 143473094] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 143503007] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 143704674] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 143730974] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 143758865] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 143813645] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143864402] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 143892568] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 144102880] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144156848] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 144191220] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 144246920] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144299372] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 144332149] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 144377958] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144579215] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 144625985] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 144663216] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144716261] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 144753246] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 144800436] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 144979902] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 145022733] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 145051967] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 145114761] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145164645] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 145203079] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 145446518] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145501086] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 145628171] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 145792639] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145864185] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 145905173] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 145939933] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 145977476] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 146003363] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 146031513] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 146081009] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146125304] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 146166117] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 146214173] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146406358] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 146440580] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 146473684] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146538330] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 146573780] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 146606891] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 146645863] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 146670965] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 146698959] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 146767444] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146816991] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 146848207] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 146900498] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146955875] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 146986933] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 147169063] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147221945] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 147256719] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 147290643] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 147337511] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 147389504] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 147548534] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 147607021] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 147633796] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 147662113] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 147713464] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147761636] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 147790053] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 147838886] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148027367] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 148050400] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 148101434] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148149737] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 148181526] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 148391478] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148438100] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 148470080] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 148515475] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148564793] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 148596582] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 148633288] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 148671372] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 148698750] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 148732796] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 148909674] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148957299] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 148988574] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 149038208] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149227278] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 149267680] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 149336773] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149383623] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 149414546] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 149448657] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 149489184] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 149515895] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 149541937] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 149731368] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149779985] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 149809471] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 149853592] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149901675] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 149933004] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 150156892] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 150209828] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150256613] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 150287667] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 150321076] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 150359000] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 150387291] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 150590580] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 150641048] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150689108] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 150717690] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 150758621] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150806464] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 150834884] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 151055968] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151106927] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 151139172] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 151171831] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 151211577] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 151238402] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 151268079] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 151514774] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151567047] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 151599294] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 151632998] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151679481] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 151709422] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 151906165] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151954716] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 151988413] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 152026311] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 152066621] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 152092200] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 152121568] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 152312584] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152359636] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 152392814] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 152436759] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152480331] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 152516315] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 152565180] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152759614] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 152791663] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 152827638] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 152868891] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 152897250] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 152926083] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 152977270] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153168055] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 153199573] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 153242769] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153289870] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 153321626] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 153541703] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153594120] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 153627580] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 153664577] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 153706809] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 153733577] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 153763076] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 153818556] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153872784] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 154041602] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 154093546] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154145894] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 154176681] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 154231377] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154280820] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 154311422] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 154483188] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 154523021] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 154551624] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 154584914] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 154633855] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154826433] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 154872371] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 154908792] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154957714] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 154989935] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 155036661] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155080223] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 155110625] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 155144931] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 155182380] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 155355016] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 155380974] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 155431598] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155477220] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 155506093] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 155540787] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 155579185] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155626811] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 155782693] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 155831690] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 155867253] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 155908922] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 155943705] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 155983070] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 156008711] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 156036622] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 156246778] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156295828] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 156330807] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 156377142] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156427264] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 156463677] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 156647358] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156696070] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 156729641] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 156781170] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156830792] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 156863618] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 156899109] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 157048824] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157110554] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 157142807] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 157177573] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 157216347] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 157244244] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 157272893] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 157353447] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157542329] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 157570889] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 157616686] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157667792] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 157700030] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 157751232] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157929250] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 157958833] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 158000379] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158048899] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 158081312] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 158114728] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 158151954] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 158182736] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 158212994] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 158398184] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158442022] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 158471792] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 158505872] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158550175] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 158579476] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 158612158] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158659019] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 158815087] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 158855025] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 158887374] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158942862] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 158974461] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 159007772] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 159046027] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 159074173] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 159233195] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 159296638] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159348724] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 159381026] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 159421903] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159473695] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 159505008] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 159672565] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159718397] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 159748512] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 159787884] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 159824290] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159877061] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 159908907] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 159943898] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 160118674] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 160145714] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 160171704] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 160244316] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160292911] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 160329139] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 160383757] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160568665] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 160598246] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 160651464] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160702141] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 160733072] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 160775326] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 160828280] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161004157] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 161035115] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 161098854] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161150833] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 161182510] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 161218813] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 161258803] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 161412966] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 161440657] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 161523068] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161573197] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 161604572] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 161662659] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161850159] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 161881417] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 161942460] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161992081] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 162024661] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 162211393] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162259667] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 162291551] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 162326530] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 162367004] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 162392547] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 162420797] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 162481553] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162531436] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 162558580] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 162736003] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162782847] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 162811780] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 162846746] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162891360] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 162916322] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 162969057] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163137736] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 163167760] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 163199810] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 163236812] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 163262198] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 163289607] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 163588976] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163634291] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 163665556] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 163717640] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163765103] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 163793549] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 163829923] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163985757] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 164029888] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 164079654] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164126503] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 164154651] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 164188658] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 164226147] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 164252491] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 164281372] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 164461976] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164509682] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 164542591] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 164582362] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164631845] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 164663972] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 164700145] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 164737662] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 164890572] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 164919606] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 164965451] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165013264] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 165045936] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 165091429] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165140934] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 165171594] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 165339946] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165389801] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 165419450] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 165587083] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165761370] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 165789588] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 165857007] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165906345] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 165935520] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 166003471] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166189544] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 166220070] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 166251687] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 166290288] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 166316403] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 166345121] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 166388799] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166435995] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 166464201] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 166671042] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166750602] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 166782132] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 166835087] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166883375] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 167030488] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 167071671] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 167108619] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 167133727] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 167159398] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 167233917] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167286344] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 167321354] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 167507912] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167555959] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 167588387] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 167621305] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 167659342] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 167683716] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 167711438] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 167761972] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167934588] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 167965595] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 168040862] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168092378] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 168131331] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 168168462] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 168210905] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 168377457] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 168410367] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 168447536] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 168472034] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 168497400] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 168546550] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168597405] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 168627806] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 168800648] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168847730] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 168876564] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 168912587] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168959540] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 168988388] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 169032110] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169082991] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 169237063] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 169280504] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169327923] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 169359637] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 169403735] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169453009] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 169484101] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 169515697] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169691832] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 169724573] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 169761206] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 169798834] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 169821809] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 169847365] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 169901360] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169950694] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 170112487] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 170151628] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170204074] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 170241076] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 170291398] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170341345] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 170372491] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 170544618] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170590807] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 170624101] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 170656516] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 170694918] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 170724610] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 170753749] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 170807667] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170981380] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 171013414] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 171879921] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 171926703] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171969620] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 172003345] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 172054156] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172102845] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 172134894] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 172310387] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172361044] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 172394149] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 172427989] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 172465214] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 172489422] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 172515907] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 172552117] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172740358] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 172771538] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 172817743] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172863588] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 172894812] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 172935461] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172976891] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 173138838] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 173185421] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173225626] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 173258382] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 173293817] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173344840] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 173379794] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 173429671] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173608794] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 173637301] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 173671416] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173721624] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 173752002] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 173784511] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 173820865] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 173847579] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 174001961] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 174058018] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174108013] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 174139141] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 174181433] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174231926] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 174257999] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 174285133] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174469498] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 174498198] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 174540796] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174587574] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 174619158] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 174653193] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174704644] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 174864371] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 174922495] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174970153] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 174999322] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 175039382] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175086638] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 175120747] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 175162859] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175376785] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 175432838] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 175480334] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175527950] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 175556613] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 175588064] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175844499] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 175880503] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 175918728] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 175963704] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 175991744] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 176028387] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 176063800] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 176248218] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 176277690] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 176309511] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 176351790] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 176398284] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 176428522] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 176462622] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 176669877] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176727265] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 176762750] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 176796745] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176844284] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 176872432] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 176916090] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177205809] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 177253471] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 177309792] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177533342] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 177561217] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 177595229] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177641411] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 177671676] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 177704492] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 177732067] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177947696] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 177992160] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 178023695] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 178051150] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178108939] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 178144486] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 178179731] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 178411197] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 178446824] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 178475011] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 178530443] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178579857] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 178616473] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 178901427] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178949437] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 178981040] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 179030378] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179280765] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 179322421] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 179373839] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179420203] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 179451286] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 179484574] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 179646953] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179700018] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 179732262] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 179769411] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 179809454] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 179837102] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 179864251] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 179915799] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180111418] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 180142300] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 180177921] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180229775] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 180262269] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 180295112] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180355868] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 180511035] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 180560439] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 180598748] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 180626785] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 180656252] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 180717348] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180766652] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 180795060] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 181039720] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181099583] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 181128556] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 181171925] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181217822] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 181247244] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 181511196] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 181575736] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 181599541] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 181626317] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 181883956] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181938766] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 182003175] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 182039357] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182090483] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 182267305] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 182304802] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182353739] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 182387915] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 182419624] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182466774] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 182497458] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 182528840] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182826009] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 182860273] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 182898074] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182946813] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 183171874] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 183234897] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183282527] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 183313332] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 183356398] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183401493] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 183591316] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 183658774] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183724147] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 183756248] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 183788064] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183833065] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 183865082] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 184124187] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184207429] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 184235876] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 184513648] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184561174] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 184627446] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 184658877] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184713476] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 184966792] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 185007377] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185054401] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 185085856] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 185116888] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 185373732] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 185403557] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 185430871] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 185481077] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185530459] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 185557838] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 185813312] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185862729] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 185891767] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 185932410] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185978152] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 186008992] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 186280802] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186329797] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 186358718] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 186408870] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186670501] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 186704888] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 186771392] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 186806803] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 186833759] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 186858524] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 187121037] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 187198872] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187246728] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 187275788] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 187532654] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187588695] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 187644538] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 187692083] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187741137] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 187770385] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 188052615] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188114687] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 188144226] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 188410657] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 188470891] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 188506349] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 188538502] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 188575643] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 188600338] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 188627703] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 188906493] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188956500] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 188987228] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 189017655] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189069538] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 189296199] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 189378750] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189436420] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 189467579] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 189498081] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189741912] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 189781064] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 189841031] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189889320] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 189921053] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 190162454] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 190199681] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 190255759] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 190287608] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 190356557] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 190619492] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 190662009] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 190703584] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 190753558] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 190783247] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 190999416] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 191118985] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 191160848] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 191192968] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 191454252] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 191485805] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 191519678] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 191555748] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 191581140] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 191608346] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 191658171] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 191888094] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 191918882] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 191959421] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 192007388] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 192042545] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 192081442] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 192360669] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 192437567] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 192482138] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 192519025] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 192762325] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 192821871] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 192880100] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 192928821] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 192959391] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 193255885] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 193313739] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 193343762] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 193376471] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 193620944] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 193691191] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 193735386] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 193772799] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 193799584] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 193826211] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 194088574] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 194170786] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 194202852] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 194241947] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 194446783] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 194527990] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 194602136] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 194650260] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 194681779] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 194923022] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 195003746] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 195039100] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 195064470] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 195098771] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 195145363] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 195334315] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 195446698] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 195501377] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 195532904] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 195567583] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 195757774] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 195789474] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 195821155] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 195858262] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 195882565] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 195909648] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 195949887] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 195993656] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 196023537] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 196200141] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 196246301] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 196276568] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 196307204] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 196356489] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 196387763] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 196417632] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 196629600] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 196661270] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 196694146] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 196731439] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 196754974] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 196781304] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 198075006] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198122484] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 198155472] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 198189500] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198436626] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 198486439] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 198522136] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198571281] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 198605233] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 198824258] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198909236] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 198939800] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 198971867] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 199008408] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 199035811] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 199259763] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 199348491] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199396079] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 199426049] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 200992490] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 201039017] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 201099543] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 201132249] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 201178183] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 201210734] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201242741] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 201468407] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 201524579] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201558019] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 201602722] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 201652471] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 201858328] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 201931560] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 201999961] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 202031635] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 202074590] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202324260] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 202394291] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 202437028] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202482839] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 202523384] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 202745138] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202818022] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 202849854] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 202878684] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202928500] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 202969262] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 203167415] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203275255] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 203315424] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 203348070] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203580298] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 203653147] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 203695486] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203742519] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 203773783] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 203813391] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204053976] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 204113331] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 204145962] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204194487] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 204229910] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 204269101] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204516297] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 204592008] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 204666768] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204905179] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 204957976] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 205008914] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205055511] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 205085478] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 205128180] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205386701] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 205437469] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 205471279] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205521051] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 205554809] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 205758572] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205860064] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 205891863] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 205925118] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 205962265] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 206009811] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 206237720] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 206294049] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 206324019] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 206366919] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206416057] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 206449744] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 206735356] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206781802] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 206816737] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 206867208] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207123721] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 207183157] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 207232547] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207281813] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 207315184] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 207613628] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207661554] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 207689342] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 207727849] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 207939909] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 207997623] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 208075860] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208121796] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 208152978] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 208429853] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208505467] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 208532799] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 208581522] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208873482] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 208930621] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 208978159] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209030872] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 209239536] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 209329752] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209375199] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 209405278] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 209435326] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209719491] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 209786556] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 209826706] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 209849937] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 209876457] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 210159272] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210249200] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 210276638] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 210313527] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 210551422] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210607852] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 210661009] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 210718280] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210769259] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 211024686] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 211102582] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211154819] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 211182768] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 211459113] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211525421] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 211555572] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 211605688] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211841751] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 211910930] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 211957914] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212003746] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 212034307] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 212071830] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 212309368] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 212367928] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 212416456] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212463703] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 212496867] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 212716218] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212813775] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 212843839] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 212887127] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212938033] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 213129670] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 213231652] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213287047] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 213315063] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 213364373] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213552156] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 213581106] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 213631036] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213675698] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 213706358] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 213735679] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213784861] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 213824119] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 213859366] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 214021684] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 214046685] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 214134809] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 214177695] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 214205631] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 214257621] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 214481457] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 214550011] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 214613307] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 214658641] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 214694798] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 214993214] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215039183] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 215070713] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 215106688] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215405810] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 215456089] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 215486115] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215540486] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 215752923] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 215818524] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 215840765] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 215864938] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 215905917] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215949576] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 215983025] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 216201944] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216280189] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 216310156] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 216352275] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216401115] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 216435416] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 216657925] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216723173] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 216752533] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 216784328] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 216808606] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 216839388] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 217045534] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 217149882] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 217203968] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 217247406] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 217302101] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 217505739] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 217593330] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 217638550] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 217666981] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 217699369] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 217732720] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 217899539] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 217961735] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 217997720] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 218027325] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 218057514] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 218106276] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 218134327] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 218169323] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 218419381] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 218452262] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 218515324] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 218539875] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 218566916] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 218804403] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 218850519] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 218877894] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 218919975] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 218964677] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 218992322] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 219033267] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 219237059] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 219267494] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 219350438] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 219396132] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 219425107] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 219663869] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 219732591] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 219797242] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 219826340] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 219879482] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 220092903] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 220146349] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 220229365] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 220273599] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 220301777] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 220514487] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 220555822] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 220590790] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 220667691] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 220716125] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 220750305] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 220996813] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 221078841] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 221107998] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 221142897] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 221182945] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 221454557] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 221524788] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 221559218] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 221583202] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 221609305] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 221935703] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 221988944] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 222019188] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 222058141] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 222283878] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 222338268] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 222406911] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 222451371] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 222487213] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 222690953] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 222737995] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 222770621] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 222804905] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 222841771] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 222867229] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 222893478] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 223146428] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223213847] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 223270174] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 223312504] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223369732] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 223614457] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 223694987] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223753230] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 223788679] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 223820959] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 224022579] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 224046534] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 224073684] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 224142794] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 224186942] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 224225300] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 224440226] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 224492030] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 224528679] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 224590730] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 224634356] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 224675033] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 224907644] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 224943672] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 224983173] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 225031969] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 225120883] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225395194] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 225461677] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 225518085] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225750751] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 225795620] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 225851865] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 225890291] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 225915086] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 225941340] Running FIND.existing: FIND DUP . CR +[Hera] 1252562496 +[Hera] [HADES][TEST ] [KRELTSC: 226004879] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 226276095] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 226337167] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 1252896080 +[Hera] [HADES][TEST ] [KRELTSC: 226405019] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 226631910] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 226677249] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 226745712] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 226791291] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 226818781] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 226852969] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 227054299] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 227083815] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 227149413] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 227187913] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 227214491] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 227241170] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 227284614] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 227485321] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 227516995] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 227589465] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 227638365] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 227666802] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 227703829] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 227898605] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 227923254] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 227948576] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 228032925] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 228077522] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 228107900] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 228146600] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 228351140] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 228380982] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 228426920] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 228486576] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 228511899] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 228538301] Running LATEST.basic: LATEST @ . CR +[Hera] 1252643920 +[Hera] [HADES][TEST ] [KRELTSC: 228748879] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 228843839] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 228873851] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 1252683104 +[Hera] [HADES][TEST ] [KRELTSC: 228936002] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 228983523] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 229018106] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 1252683104 +[Hera] [HADES][TEST ] [KRELTSC: 229247695] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 229313293] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 229361092] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 229394103] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 229430770] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 229460863] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 229490386] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 1252897592 +[Hera] [HADES][TEST ] [KRELTSC: 229711766] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 229792637] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 229822392] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 1252898056 +[Hera] [HADES][TEST ] [KRELTSC: 229887949] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 230109497] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 230166022] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 230204406] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 230240854] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 230290724] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 230326215] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 230499689] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 230540647] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 230596062] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 230622453] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 230674468] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 230721664] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 230754047] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 230930779] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 230991298] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 231044480] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 231077635] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 231114492] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 231153903] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 231191623] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 231370681] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 231397032] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 231442869] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 231626047] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 231834246] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 231900589] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 1252902576 +[Hera] [HADES][TEST ] [KRELTSC: 232235782] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 232281770] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 232346059] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 232664707] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 232729591] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 232762332] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 233111660] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233159046] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 233227334] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 233524772] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233587392] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 233643799] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 233711585] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 233738211] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233790770] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 233823424] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 234000275] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 234029020] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234114973] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 234143945] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 234176024] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 234215891] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 234413326] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 234449036] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 234594011] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234643529] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 234684890] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 234922412] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234970578] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 235001983] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 235310276] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 235374967] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 235403975] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 235435386] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 235472589] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 235499221] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 235530817] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 235840073] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 235899042] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 235930292] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 236157116] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 236223221] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 236253056] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 236578039] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 236631218] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 236666188] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 236702965] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 236739235] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 236764541] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 236790846] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 1252908560 +[Hera] [HADES][TEST ] [KRELTSC: 236843624] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 237072651] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 237104280] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 237177863] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 237224566] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 237261797] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 1252653728 +[Hera] [HADES][TEST ] [KRELTSC: 237628933] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 237675910] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 237704893] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 237914273] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 237986164] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 238011845] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 238039589] Running CURRENT.basic: CURRENT @ . CR +[Hera] 1252908560 +[Hera] [HADES][TEST ] [KRELTSC: 238092086] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 238140842] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 238355990] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 1252905264 +[Hera] [HADES][TEST ] [KRELTSC: 238551697] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 238597445] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 238775267] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 239639444] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 239683932] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 239737229] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 239778667] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 239812090] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 239852726] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 239877570] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 239900658] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 240185856] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 240233523] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 240266812] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 240666547] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 240729510] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 240897730] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 241054735] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 241095136] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 241125168] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 241166774] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 241203112] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 241395051] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 241448398] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 241491977] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 241532357] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 241558286] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 241585163] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 241642559] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 241827687] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 241859146] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 241897311] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 241938849] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 241963934] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 241991532] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 242031774] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 242190052] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 242237350] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 242274813] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 242324986] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 242355783] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 242418289] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 242465781] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 242505411] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 242689779] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 242729578] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 242756898] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 242786345] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 242849516] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 242899478] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 242937877] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 243109482] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 243158007] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 243186449] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 243217765] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 243273514] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 243309155] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 243344411] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 243524750] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 243551046] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 243578489] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 243610021] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 243648369] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 243672837] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 243699769] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 243731952] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 243768963] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 243794301] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 243976650] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 244032387] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 244088952] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 244128999] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 244164048] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 244203254] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 244228373] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 244388576] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 244451226] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 244496445] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 244527707] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 244557208] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 244605866] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 244638335] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 244803594] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 244851474] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 244902603] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 244936052] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 244969495] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 245006081] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 245029612] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 245056852] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 245090368] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245256324] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 245300277] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 245368338] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245415935] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 245447664] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 245480268] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 245521292] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 245547706] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 245705826] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 245784420] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245832893] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 245863179] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 245921265] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245970620] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 246125171] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 246186407] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 246232884] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 246261497] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 246300111] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 246352611] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 246385845] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 246419632] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 246583025] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 246607895] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 246634731] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 246709799] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 246757139] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 246786880] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 246838549] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247026834] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 247055880] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 247131682] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247180450] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 247208886] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 247242241] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 247279385] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 247436564] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 247464705] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 247513130] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247560908] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 247590052] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 247643046] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247690425] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 247717999] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 247874470] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247927637] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 247960305] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 247995392] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 248035684] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 248061482] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 248090107] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 248362064] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 248449877] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 248480450] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 248544338] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 248765723] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 248807191] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 248840945] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 248867867] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 248920688] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 248954506] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 248988033] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 249160464] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 249184447] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 249211995] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 249287082] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 249332786] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 249361552] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 249388251] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 249434641] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 249605620] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 249650502] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 249687844] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 249713126] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 249740886] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 249777064] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 249821797] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 249854408] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 250047021] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 250140735] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 250170180] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 250203310] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 250240118] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 250266029] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 250293252] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 250612548] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 250669519] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 250698303] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 250746463] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 250925065] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251013584] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 251048546] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 251082933] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 251116448] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 251142894] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 251169565] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 251381834] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251428350] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 251457851] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 251490049] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 251520185] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251564524] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 251597634] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 251628213] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 251820392] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251905236] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 251936548] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 251965248] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 252003320] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 252029717] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 252057414] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 252278679] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 252326044] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 252354039] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 252386499] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 252415538] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 252464266] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 252495011] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 252690793] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 252761636] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 252786525] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 252813099] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 252907097] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253069450] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 253112091] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 253206361] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253251119] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 253283128] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 253327576] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 253356538] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253573557] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 253639972] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 253672988] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 253710636] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 253748442] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 253781664] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 253818282] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 254005353] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 254060296] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 254184087] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 254229061] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 254259285] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 254517633] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 254564644] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 254595312] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 254656617] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 254858132] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 254957300] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 254986560] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 255043887] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255088820] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 255261830] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 255327336] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 255381756] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255435586] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 255465434] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 255496325] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 255519397] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 255678415] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 255791414] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255837421] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 255865630] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 255919665] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255964914] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 256155629] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 256287115] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256328526] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 256357427] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 256411488] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256645325] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 256710546] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 256740440] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 256763189] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256809107] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 256838888] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 257048244] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 257126133] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 257163983] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 257187009] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 257223954] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 257247938] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 257297461] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 257505894] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 257606380] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 257630432] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 257678892] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 257708770] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 257916065] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 257966053] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 257992223] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 258026641] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 258048546] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 258096018] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 258124571] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 258354922] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 258404799] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 258453410] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 258480240] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 258511861] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 258547768] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 258572101] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 258806235] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 258878170] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 258916048] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 258964642] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 258993609] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 259252293] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 259306256] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 259349852] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 259399009] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 259429200] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 259643693] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 259710334] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 259770077] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 259806939] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 259831811] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 259879730] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 260107705] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 260211548] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 260238931] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 260263484] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 260310887] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 260340976] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 260590108] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 260660624] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 260685116] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 260711628] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 260998022] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 261061967] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 261091574] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 261168791] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 261433720] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 261484841] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 261517991] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 261543336] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 261592880] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 261817036] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 261890061] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 261925178] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 261950315] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 262023013] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 262279616] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 262348055] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 262423088] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 262474259] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 262749830] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 262797508] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 262826085] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 262851265] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 262900297] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 263144660] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 263218220] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 263257278] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 263282481] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 263310505] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 263536785] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 263617542] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 263645695] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 263698481] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 263742085] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 263771757] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 263803344] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 263975464] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 264092460] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 264126655] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 264159163] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 264183640] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 264215665] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 264532420] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 264587179] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 264616089] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 264819488] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 264914994] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 264942977] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 264973862] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 264997145] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 265046195] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 265076451] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 265319407] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 265357448] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 265383771] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 265412592] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 265493794] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 265676746] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 265710081] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 265781850] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 265828801] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 265860269] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 265892385] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 265917401] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 265966805] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 266195224] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 266223142] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 266248246] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 266275552] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 266355056] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 266402571] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 266590916] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 266660032] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 266707441] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 266738746] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 266767549] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 266792513] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 266844313] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 267008913] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 267052909] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 267088109] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 267112944] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 267139952] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 267208064] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 267265210] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 267513132] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 267542930] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 267613849] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 267641000] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 267693023] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 267843060] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 267886103] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 267909892] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 267959291] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 268052992] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 268099168] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 268128941] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 268360576] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 268383864] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 268431782] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 268463084] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 268495961] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 268532616] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 268556063] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 268762888] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 268875769] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 268924490] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 268955672] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 269160319] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 269242293] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 269271462] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 269317010] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 269359436] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 269389337] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 269640361] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 269686791] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 269717381] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 269749738] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 269776056] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 269802992] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 269886990] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 270131197] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 270181470] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 270242527] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 270310219] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 270535986] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 270588016] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 270658166] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 270703937] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 270733632] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 270981196] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271032378] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 271062616] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 271095515] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 271132797] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 271158591] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 271307213] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 271416625] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271461868] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 271492923] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 271541013] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271586302] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 271613288] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 271911581] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271967060] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 271996871] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 272031683] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 272057367] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 272292327] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 272407314] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 272452878] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 272480457] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 272691501] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 272766339] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 272796307] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 272858614] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 272923328] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 273110780] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 273169322] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 273209707] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 273248460] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 273273658] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 273300843] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 273516955] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 273562357] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 273591550] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 273620854] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 273645712] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 273693744] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 273723303] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 273754643] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 273778600] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 273967286] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 274075060] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 274122032] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 274152282] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 274179053] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 274203767] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 274393673] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 274422041] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 274455995] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 274495027] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 274521485] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 274548874] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 274653172] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 274827130] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 274855343] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 274945336] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 274996039] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 275025712] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 275236564] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 275281931] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 275310814] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 275344193] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 275372073] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 275400646] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 275469750] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 275658777] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 275721083] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 275749314] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 275834175] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 275881591] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 275910919] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 275979212] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 276187464] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 276221379] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 276255109] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 276292551] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 276316804] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 276344157] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 276550115] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 276593383] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 276620249] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 276683404] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 276780583] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 276826321] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 277082184] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 277119173] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 277151156] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 277215977] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 277264905] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 277428739] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 277463163] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 277486741] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 277514355] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 277597068] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 277642579] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 277675068] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 277884808] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 277956065] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 278001988] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 278030040] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 278093754] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 278139717] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 278311943] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 278421044] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 278466113] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 278494082] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 278530824] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 278567368] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 278593242] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 278775692] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 278853390] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 278901998] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 278931625] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 278997237] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 279187808] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 279256409] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 279296266] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 279321122] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 279347815] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 279426536] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 279471480] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 279698335] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 279810599] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 279855583] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 280054068] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 280133891] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 280170978] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 280194882] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 280221331] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 280296439] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 280501855] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 280568592] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 280641060] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 280694236] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 280740003] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 280928835] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 281033259] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 281078561] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 281105258] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 281160903] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 281368831] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 281422751] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 281469142] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 281492740] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 281519388] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 281585290] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 281781631] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 281824314] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 281930004] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 281975902] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 282003032] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 282063163] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 282298826] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 282342439] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 282407908] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 282453106] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 282480350] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 282511712] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 282711110] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 282767454] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 282793689] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 282888306] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 283089738] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 283161323] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 283258327] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 283305129] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 283332763] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 283566618] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 283654814] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 283682508] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 283714691] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 283739140] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 283766359] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 284019020] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 284068446] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 284097716] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 284158444] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 284207441] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 284404154] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 284472415] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 284572292] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 284617867] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 284644245] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 284807120] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 284902282] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 284958973] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 284985310] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 285065891] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 285263462] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 285329473] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 285411589] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 285458107] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 285486347] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 285517794] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 285542708] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 285726616] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 285851614] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 285897773] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 285925054] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 286192907] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 286247687] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 286276538] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 286307747] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 286343655] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 286367659] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 286392817] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 286686202] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 286719940] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 286765210] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 286792963] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 287028711] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 287105649] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 287133235] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 287165299] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 287189734] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 287215745] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 287455851] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 287537557] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 287564579] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 287638289] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 287670749] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 287688740] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 287875938] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 287931386] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 287970473] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 287996093] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 288110370] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 288327385] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 288386121] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 288470750] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 288515394] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 288544281] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 288839602] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 288879810] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 288927835] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 288955536] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 289199513] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 289281327] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 289309108] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 289377092] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 289423161] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 289618207] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 289650569] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 289718500] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 289744839] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 289816609] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 289863257] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 290062243] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 290175967] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290221907] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 290249586] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 290458070] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290504838] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 290532475] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 290602067] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290647074] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 290673265] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 290735988] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290960030] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 291036436] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 291070110] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 291109163] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 291149643] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 291319941] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 291423715] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 291481001] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 291507185] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 291579242] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 291627009] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 291798877] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 291861966] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 291913451] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 291945397] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 292007990] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 292200194] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 292232131] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 292266572] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 292294965] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 292344911] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 292375408] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 292409773] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 292437618] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 292487577] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 292659315] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 292735079] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 292773542] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 292799636] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 292826247] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 292898093] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293083724] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 293111761] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 293175390] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 293224800] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293273068] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 293305737] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 293505488] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293555282] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 293584620] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 293619803] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 293648852] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293700081] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 293730449] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 293762965] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 293913425] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293977305] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 294045692] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 294077251] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 294103914] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 294154604] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 294186280] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 294341133] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 294391033] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 294431904] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 294484993] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 298344253] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 298395269] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 298430294] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 302012967] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 302204957] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 302240054] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 305862619] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 305915328] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 306071670] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 306119728] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 306191028] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 306220203] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 306248910] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 306322488] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 306373345] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 306539366] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 306588940] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 306641791] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 306674091] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 306719091] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 306768732] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 306800913] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 306970892] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 307007787] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 307037424] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 307069465] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 307265272] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 307448823] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 307482034] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 307635992] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 307683572] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 307850286] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 307942942] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 307991652] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 308026315] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 308112594] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 308295938] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 308347971] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 308449075] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 308497061] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 308530749] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 308718802] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 308769505] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 308804223] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 308864915] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 308915278] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 308949645] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 309110947] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 309152107] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 309225904] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 309272000] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 309306171] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 309343545] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 309370890] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 309402095] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 309603379] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 309630464] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 309673519] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 309704271] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 309746586] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 309773174] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 309818904] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 309850641] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 310044882] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 310080588] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 310152847] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 310183179] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 310239539] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 310275392] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 310464231] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 310494335] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 310569745] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 310608480] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 310647963] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 310991630] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 311081084] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 311132868] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 311329036] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 311484331] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 311524518] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 311562862] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 311775255] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 311800496] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 311838804] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 311902221] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 311927760] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 311955838] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 311989687] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 312022650] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 312198632] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 312231763] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 312258056] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 312286381] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 312321426] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 312349583] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 312375698] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 312410258] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 312436933] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 312591190] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 312650236] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 312701282] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 312728075] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 312761924] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 312789656] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 312816651] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 312850977] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 312877282] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 313031355] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 313077137] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 313104549] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 313130720] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 313174968] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 313216401] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 313258650] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 313297186] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 313474950] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 313511203] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 313537844] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 313602590] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 313650976] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 313763048] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 313925366] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 313978462] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 314004715] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 314036946] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 314104139] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 314157270] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 315263363] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 315394841] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 315426140] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 315462700] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 315486869] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 315637716] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 315716077] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 315800572] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 315916323] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 316072589] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 316122555] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 316146965] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 316175035] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 316234355] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 316280534] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 316519350] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 316570139] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 316622322] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 316745253] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 316780287] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 316816582] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 316980457] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 317007307] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 317068227] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 317114821] Expected: Should print: 3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 317219452] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 317379985] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 317431040] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 317459754] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 317491245] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 317547380] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 317602016] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 317836653] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 317868314] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 317905427] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 317930922] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 317963741] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 318024661] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 318077404] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 318311309] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 318380790] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 318414439] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 318450925] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 318476624] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 318502587] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 318698589] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 318745567] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 318846886] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 318879829] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 318917702] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 318942998] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 318962486] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 319172435] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 319278963] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 319377619] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 319574426] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 319669350] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 319722952] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 319748541] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 319810613] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 319856306] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 320194879] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 320226832] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 320263194] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 320426411] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 320452364] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 320545692] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 320590128] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 320687663] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 320720228] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 320902710] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 320960882] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 320987799] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 321037659] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 321083150] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 321318028] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 321376812] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 321429720] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 321455259] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 321481535] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 321522176] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 321569299] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 321836754] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 321870354] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 321906613] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 321930753] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 321957414] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 321996166] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 322181289] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 322324238] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 322355937] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 322392184] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 322416113] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 322442041] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 322618818] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 322683656] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 322798650] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 322828079] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 322863763] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 322888662] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 323038149] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 323111317] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 323188802] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 323288582] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 323319220] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 323490113] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 323514227] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 323557023] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 323627276] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 323673897] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 323732840] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 324016048] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 324070761] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 324116707] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 324387858] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 324472974] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 324509287] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 324539030] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 324565495] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 324611944] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 324806756] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 324962823] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 325001386] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 325047188] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 325326626] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 325356343] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 325391902] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 325416519] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 325442688] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 325488643] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 325691181] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 325812765] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 325850197] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 325895962] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 326130353] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 326161785] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 326232442] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 326256550] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 326282750] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 326326168] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 326499154] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 326652372] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 326691706] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 326738284] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 326985845] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 327051411] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 327087902] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 327114121] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 327140775] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 327192840] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 327368618] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][INFO ] [KRELTSC: 327515964] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 327566189] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 327596041] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 327632416] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 327657465] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 327822403] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 327917389] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 327963657] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 328062982] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 328102278] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 328275821] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 328325333] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 328371312] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 328429892] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 328476959] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 328722913] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 328800240] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 328836280] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 328874176] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 328907688] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 328948821] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 329103113] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 329143260] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 329221800] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 329270478] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 329307528] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 329342133] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 329380837] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 329414173] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 329577803] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 329670606] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 329720716] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 329756851] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 329792266] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 329835157] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 330004816] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 330030111] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 330095638] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 330146371] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 330182282] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 330217555] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 330258203] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 330420982] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 330447657] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 330878494] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 330938846] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 330968549] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 331001963] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 331037868] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 331065998] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 331092573] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 331298958] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 331345524] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 331381337] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 331415781] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 331452281] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 331479103] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 331505604] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 331734136] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 331780840] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 331816495] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 331849965] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 331886055] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 331912688] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 331938658] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 332185802] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 332234407] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 332272076] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 332308807] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 332348648] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 332374970] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 332401204] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 332610494] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 332656021] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 332690905] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 332728816] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 332766511] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 332793855] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 332819472] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 333193357] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 333236357] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 333270313] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 333303349] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 333480897] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 333521130] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 333556549] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 333594680] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 333621268] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 333647420] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 333725369] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 333915521] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 333947373] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 333983024] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 334019008] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 334046521] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 334073572] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 334149955] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 334325292] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 334369568] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 334402172] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 334438035] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 334463456] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 334489526] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 334556229] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 334606032] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 334778759] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 334828092] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 334872752] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 334908557] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 334940080] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 334979149] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 335003909] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 335029965] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 335252264] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 335298336] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 335328960] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 335359210] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 335393974] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 335417945] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 335443637] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 335502959] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 335675357] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 335716267] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 335747704] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 335783651] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 335809539] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 335835895] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 335888142] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 336086418] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 336134839] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 336171821] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 336213005] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 336239131] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 336267181] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 336293326] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 336318264] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 336347222] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 336544164] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 336575321] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 336606120] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x000000013dff3cac, 0x000000013dff3cb0) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] Artemis: genesis signature stamped +[Hera] virtio-input: found device +[Hera] virtio-input: driver ready +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 341711722] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 342671024] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 343050623] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 358400936] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 372329119] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 373117382] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 377467236] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 382750710] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 1358420547] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 1560 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=202 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261003-100941/riscv64/qemu-riscv64-20261003-100941.log b/logs/20261003-100941/riscv64/qemu-riscv64-20261003-100941.log new file mode 100644 index 00000000..481dd0a4 --- /dev/null +++ b/logs/20261003-100941/riscv64/qemu-riscv64-20261003-100941.log @@ -0,0 +1,9187 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.2 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdf1c678 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 3 2026 10:09:04 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250872 + Free pages : 250220 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 83886 cells (5242 KB), 50 VM slots +Switch-signal: 50 slots +Kernel-Hermes: 50 channel slots +Kernel-Hermes: 50 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0x0000000080267000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 7641417] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 53619699] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 98407554] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 99630216] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 101128209] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 107197671] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 108474723] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 109883424] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 110756961] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 111832392] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 123762387] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125621475] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 129649065] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 131169339] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137360013] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 140476035] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 142114854] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143895759] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 151714857] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 153403089] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155090145] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 159013386] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 160632843] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166733091] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 170982945] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 172043529] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 173221965] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175078827] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 180565938] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 181867077] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 183156708] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 184039464] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 184992171] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 186454590] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188360697] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 195621699] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 196985586] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198663234] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 201729507] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 203383467] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209403306] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 212502906] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 213992604] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215629932] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 226435293] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 230130684] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 231911505] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233587242] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 240858387] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 242333973] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 243996228] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 247197468] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 253400973] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255101889] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 258099282] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 259846839] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 261757020] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 269323488] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 271193874] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 272872089] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 276181878] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 282405753] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 283933503] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 285613923] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 288476244] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 289949541] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 295600557] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 298870593] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 300304242] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 301915068] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 304881360] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 310429476] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 312367692] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 315296898] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 316928535] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 318657486] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 326265198] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 327361860] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 328306629] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 329989317] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 331033899] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 332159394] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 333670722] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 334626684] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 339597846] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 341385240] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 343031682] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 345977625] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 347532822] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 349412721] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 356669775] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 358088241] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 359523381] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 361195233] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 364454832] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 370778940] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 372485505] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 375584538] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 376757619] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 377850333] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 383961606] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 385100247] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 386150016] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 387256107] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 389040036] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 390210072] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 391458438] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 392772870] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 398973351] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 399920367] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 401630439] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 403333056] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 406448511] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 407968974] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 414226890] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 417617760] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 419052375] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 420790545] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 428920737] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 430049130] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 431197830] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 432930981] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 434037891] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 435102570] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 436163196] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 442352064] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 443469894] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 444590412] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 445888569] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 446745936] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 447687723] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 449250228] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 450987957] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 459802245] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 461101536] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 462888825] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 464548329] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 472999065] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 474512262] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 476147868] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 479665137] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 480745965] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 487307541] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 489081621] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 490159908] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 491151507] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 492238362] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 494248524] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 499655268] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 502061007] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 503182071] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 505098888] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 506164932] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 507288201] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 508809483] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 509695410] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 515411946] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 517530678] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 519216621] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 521993388] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 523657533] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 529935714] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 532956711] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 534443364] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 536043417] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 544629687] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 545776224] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 547155924] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 548034207] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 548952348] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 550524177] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 552199263] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 560033187] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 561494304] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 563103093] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 565581387] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 567380457] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 569051280] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 575062383] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 578025609] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 579148710] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 580528305] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 581409549] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 582345897] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 588906906] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 590645454] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 593804127] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 595368207] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 597025737] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 604872345] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 606001326] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 607249083] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 608067852] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 608999853] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 610735734] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 616546371] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 620175528] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 621575619] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 623240331] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 626461248] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 632556141] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 634250568] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 637150668] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 638160558] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 639179898] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 640944150] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 646584939] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 647781792] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 649100739] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 649949748] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 650841849] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 652460844] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 654180618] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 655316802] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 663564846] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 665106120] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 666716148] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 670119618] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 676468800] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 678136410] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 681455691] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 682678080] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 684001962] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 690649197] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 691884648] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 692998803] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 694109661] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 695850939] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 696949680] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 698444691] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 705092304] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 706619718] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 707853426] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 709172940] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 710035788] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 710950905] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 713090637] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 719809545] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 723106167] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 724493889] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 726156291] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 735240576] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 736769628] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 738392928] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 740928153] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 748956768] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 750652287] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 752269560] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 755793255] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 757014048] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 758018625] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 764091510] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 765264129] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 766440465] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 767707542] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 768571671] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 769483743] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 771231510] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 777731892] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 780762969] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 782262936] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 783894048] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 787261755] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 792858507] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 793762137] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 795503352] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 796694157] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 797761041] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 799103886] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 800312415] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 801240363] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 807877119] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 809520894] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 812476854] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 814715160] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 821019906] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 823388118] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 825423564] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 826466445] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 827354724] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 829323663] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 835448838] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 838378107] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 839633529] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 840986013] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 842150841] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 843734745] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 849261462] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 850607835] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 852541431] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 854187285] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 857330544] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 859030200] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 865649967] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 868722708] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 870217614] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 871858050] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 880043031] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 881705559] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 883354857] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 886490220] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 888359619] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 889975422] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 897720159] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 899334450] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 901019553] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 902418909] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 911309847] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 912391116] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 914098038] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 915190941] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 916574673] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 918400245] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 926500218] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 927649233] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 929027799] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 929828130] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 931045206] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 937021743] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 938678685] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 941886603] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 943463283] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 945261639] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 953224482] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 954119019] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 955582110] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 956863236] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 957998559] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 959335482] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 960401652] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 961308747] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 967949829] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 969688566] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 972793752] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 974398362] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 976135902] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 983649534] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 985169577] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 986787375] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 989366973] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 991807992] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 997643073] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 999241278] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1002276786] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1003698696] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1005075603] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 1010454417] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1011403407] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 1013008878] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1014614958] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 1017834174] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1019539437] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1025699577] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1028873958] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1029987777] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1031283477] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 1032191118] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1033375833] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1035112344] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1041341826] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1044463182] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 1045969617] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1047886056] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 1055734176] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1056881721] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1058223012] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 1059092811] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1060038987] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 1061941986] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1063702185] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 1070660934] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 1073325351] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1074777816] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1076627853] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1084747125] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1085934696] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1087266075] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 1088113698] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1089057039] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 1091734770] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1093390893] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 1101454536] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1103330130] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1105164312] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1113144732] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1114341039] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1115711730] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 1116674433] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1117628127] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1119113394] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1121044029] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1130406018] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 1131810645] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 1133491296] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1135400742] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 1142760885] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1143931005] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1145236995] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 1146113661] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1147036380] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1148830935] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1150699179] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1158289776] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1159853709] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1161496812] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1164641499] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 1171865247] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1173566940] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 1176554631] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1177741719] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1179237528] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 1185743412] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1186698135] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1188152910] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1189759578] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1192793931] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1194453666] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1201565610] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 1203333852] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1205596245] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1206709413] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1208285379] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 1209153939] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1214559696] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 1216340790] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1217937714] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 1220887416] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1222741401] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1228814097] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1232016954] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1233564024] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1235201667] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1238476701] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1244704545] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1246282485] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 1248191910] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1250835474] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 1252091484] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1258279701] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1259376048] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1260471513] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1261735944] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 1262564520] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1263475479] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1265432469] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1267168266] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1274865648] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1276399194] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1278015333] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1281336945] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 1287523167] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1289169147] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 1292194596] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 1293223743] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1295124117] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1296320277] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1302031605] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1303389717] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 1304256345] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1305230808] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 1307298762] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1308940248] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 1311162804] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 1318712787] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 1320344046] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1322048784] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 1330416654] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1332173304] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1333818990] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1337061768] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 1338153159] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1339945383] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1345661583] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1346721621] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1348002684] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 1348851357] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1349835060] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 1351997976] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1353947448] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 1361513307] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 1363111659] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 1364152440] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1365766584] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 1367087505] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1373401386] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1375273809] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1378209756] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 1379287875] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1381033710] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1382316138] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1387965810] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1389585372] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 1390459035] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1391384694] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 1393534695] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1395171939] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 1404611817] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 1405824231] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1407412818] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 1408559838] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 1410292905] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 1411555299] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1418036760] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1419157320] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1420283235] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1421526834] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 1422416772] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1423368219] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 1425294570] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1427194083] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 1435151130] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 1436168538] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1437790242] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 1439027961] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 1440241194] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1446726120] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1449029589] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1450244418] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 1451460150] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 1452815280] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 1453937688] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1455320496] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 1456225659] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1462186467] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 1463658546] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1465329789] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 1468321638] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1469700162] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1475895540] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1478908179] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1480261986] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1481890830] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1484758926] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 1490464353] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1492091034] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 1509948804] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 1511779101] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1513249584] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1514849322] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1522575747] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1524265155] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1525856304] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1529106390] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 1534522752] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1535463363] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1537421151] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1538583837] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 1539644106] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1540485009] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1542211293] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1543270806] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1549029069] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1550249568] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 1551091332] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1552023102] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1553410593] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1555028790] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1557806712] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1563507078] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1565058789] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1567942173] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1569238230] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1570785573] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1578083346] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1579402776] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1580975445] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1583743077] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1585146780] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1586889591] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1594119702] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1595625738] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1597260609] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1600899048] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1606926174] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1608484479] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 1610005740] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1613237346] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 1614252843] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1615169094] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1616926416] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1622551308] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 1624886277] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1626047031] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1627773462] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1628886882] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1630167042] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1635671478] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 1636831959] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1637765283] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1639279992] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1640879310] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1644013623] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1645500927] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1651585782] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1654480254] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1655883558] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1657419708] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1660230516] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1665841695] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1667458359] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1670501301] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1671960591] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1673578473] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1682138409] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1683602676] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1685198865] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1688173410] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1694637147] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1696344111] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1699608162] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 1700606817] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1701520506] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1703392824] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1709460018] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 1710924558] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1711801917] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1713481539] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1714627929] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1715770098] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1717134762] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 1717967328] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1723654086] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1726708746] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1728271902] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 1730410479] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1732551975] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1733913552] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1741575045] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1744507779] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1745929542] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1747565190] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1756788096] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1758836415] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1760426850] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1770471297] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1771843143] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1773426585] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1776239031] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1783284069] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1784969256] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1787882019] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 1788910137] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1789847703] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1791686946] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1798963152] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 1800418851] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1801287600] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1802936667] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1804008969] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 1805046558] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1805916525] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1814621802] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1815768381] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1816872288] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1818177606] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 1819076973] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1820080059] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1827627606] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1829301495] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1832127381] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1833557544] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1835208396] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1844288208] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1845612006] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1847203533] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1856255058] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 1857439164] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1859066811] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1860724530] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1863708945] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1871154117] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1872728466] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1875753306] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1877230236] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1883471625] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1888095888] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1889209329] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1890189420] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1891991325] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1893271905] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 1899986844] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1901155809] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1902948117] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1904086716] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1905208536] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1906115862] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1908076359] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1914376842] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1915907784] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1917195798] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 1918068726] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1918959777] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1920665019] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1922558568] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1931254584] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1932666204] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1934276757] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1937289081] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1944154002] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1945963299] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1949226888] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1950353706] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1951332747] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1957208778] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1959922902] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1960997703] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1961964039] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1963697127] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1964795889] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1966023360] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1972291188] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1974150696] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1975255191] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1976401623] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1977711918] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 1978734555] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1979689152] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1981260603] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1988910861] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1991899161] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1993318383] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1994975955] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 2003272383] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 2004443007] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2005858512] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2007460623] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2014614126] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2017181418] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2018877483] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2022215118] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 2023298802] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2024250543] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2031603735] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2032726038] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2033876250] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2035200363] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2036100486] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2037053109] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 2038665951] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2040390408] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 2049794418] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2051254401] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2052902481] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2061697995] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2063032188] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2064669936] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2067426417] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2073992655] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2076167835] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2079553791] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 2080648584] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2081638587] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2087707167] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2089148187] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2090257113] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2091500313] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 2092336764] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2093245539] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2094820938] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2096471874] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2104916457] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2106235971] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2107895580] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2110640049] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2116238439] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2119556481] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2122432494] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2123757972] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2125406808] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 2132648784] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2135186298] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 2136259062] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2137196628] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2138825493] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2140073103] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 2141065899] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2146352082] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2149379589] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2150400630] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2151501723] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2152808070] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 2153595297] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2154469737] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2156042007] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2163295323] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2166123183] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2167472790] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2169070113] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2178122436] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 2179498545] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2181083562] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 2183892690] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 2185181397] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2192569197] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 2195384877] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 2196403104] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2197317822] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2198983479] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2204948550] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 2206039038] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2207024925] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2208801147] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2209929708] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2211089244] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2212414764] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 2213298633] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2218835892] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2222019954] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2223708648] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2226603834] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 2227916838] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2234884680] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 2237862312] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2239220823] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2240892297] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2248057119] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2250153654] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2251923954] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2254842744] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2256395778] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2258028990] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 2265166071] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2267694093] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 2268703227] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2269680651] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2271462963] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2276769516] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2278994445] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2280259485] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 2281107759] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2282059794] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2283502200] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2285136210] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2293689195] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2294986869] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2296632807] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2299480470] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2300903073] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2308086858] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2310949200] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2312279256] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2313861942] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2321989026] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 2323805064] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2325525174] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 2328915519] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 2329952016] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2335109658] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2338530705] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2339595510] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2340711744] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2342003307] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 2342897046] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2343843348] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 2350256874] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2352749931] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 2355589740] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2356878804] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2358498933] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2365906998] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2367212715] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2368778412] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2371690062] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 2373061635] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2373988995] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2381904126] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2383043439] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2384198460] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2385555648] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 2386404195] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2387410179] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2393954724] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2395699845] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2398641756] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2400047874] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2401731990] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2407896372] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2412045804] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 2413349463] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2414909658] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 2417958564] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 2423657838] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2424616446] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2426418918] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2427460434] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2428528725] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2429825076] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 2430707097] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2431647960] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2437381485] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2440618425] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2443644651] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2444866179] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2446525557] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2454005463] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 2455444677] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2457133371] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 2460054576] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2461384212] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2467871175] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2470890996] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 2472326787] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2473986102] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 2482018350] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 2483172321] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2484135465] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2485926786] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2487000726] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2488077207] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2489379354] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 2490278175] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2496021570] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2497643610] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2499321951] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2502152730] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2503440282] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2505088551] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2513580993] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2514815520] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2516381238] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2519209938] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2527905366] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2529744231] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2532743787] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 2533784190] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2540440833] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2542282911] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2545119507] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 2546204766] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2547120282] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2548927941] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2555688345] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2556902691] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 2558212923] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 2559649407] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 2560835760] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2562162981] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 2563125075] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2568837117] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2571152094] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2572813152] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2575746222] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2577548862] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2583701127] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2586676176] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2588073642] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2589665988] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2592615165] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2598611673] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2600338293] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2603174196] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 2604526680] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2606225958] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 2613939867] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 2615012316] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2616022500] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2617744017] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2618796222] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 2619877827] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2620867977] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2627005080] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2628209976] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2629538898] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2630818575] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 2631657252] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2632552419] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2634152136] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2635853493] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2643312714] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2644801068] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2646450576] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2649432912] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2650888338] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2656736334] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 2659046208] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2661124620] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2662442853] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2664040218] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2671344165] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 2672707338] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2674344834] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 2677226370] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 2678404512] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2679400941] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2685743361] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2686893279] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 2687999958] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2688896049] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2690566242] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2691729390] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2692801902] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2694086346] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 2698855593] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2700133548] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2701842948] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2703562344] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2706301836] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2707736619] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2709434217] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2716855365] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2718293991] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2719915296] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2722765059] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2724209187] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2730038052] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2733055605] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 2734386963] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2736011439] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 2743384959] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 2744456148] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2745465723] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2747253012] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2748436887] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 2749471599] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2750332809] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2752085427] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2757483246] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2758620396] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2759921892] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 2760743328] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2761627764] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2763186888] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2764779486] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2767578450] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2774269953] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2775861186] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 2777033259] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2780251425] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2781867564] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2789028060] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2791953087] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2793355488] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2794999326] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2802598407] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 2803565898] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2804489541] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2806328826] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2807311437] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2808410682] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2809659825] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 2810617005] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2811485859] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2817417813] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2818942812] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2821612794] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2822916117] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2824454661] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2833110504] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2834380752] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2835912681] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2838747408] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2840194371] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2846906349] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2849716128] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2851081443] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2852626434] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2860596270] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 2862472095] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2863335342] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2864952363] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2866001124] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 2866939803] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2867757186] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2869500060] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2875552365] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2876622630] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2877895545] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 2878718115] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2879605008] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2881181268] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2882748435] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2891752269] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2893095870] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2894646720] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 2895618201] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2898771120] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2905927248] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2907723042] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2910393255] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2911716381] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2917496211] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2920785924] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 2921820048] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2922706899] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2924397756] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2925463821] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 2926405608] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2927284731] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2933779317] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2934851535] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2935972704] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2937192237] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 2937913461] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2938747602] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2940181041] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2941756146] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2949026913] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2950491012] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2952058830] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2954721084] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2955993558] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2962253532] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2965015767] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2966370939] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2967801228] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2970567999] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2971979871] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2977833243] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2980766460] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 2981648607] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2982546924] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2984187654] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2985256428] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 2986201743] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2991295713] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2992922583] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2993904732] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2994920628] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2996132412] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 2996952567] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2997838011] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2999413956] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3005512881] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 3007309452] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3009702465] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3011074500] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3012623040] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3019853046] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3021497724] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3023031984] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3025770657] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3027173562] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3028901442] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3035984364] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3037375236] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3038902377] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3041724420] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 3042706233] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3043609212] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3049850391] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3050899068] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 3051874938] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3052691607] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3054447921] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3055509618] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3056526396] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3057807417] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 3058601910] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3063976965] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3065470947] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3067060311] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3069873996] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3071249517] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3073033530] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3081522150] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3082792419] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3084335583] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3087134778] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 3088299606] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3093744675] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3095412117] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3096464028] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3097522953] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3098665143] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 3099490212] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3100376307] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3102211581] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3108924063] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3111741759] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3113009235] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3114534234] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 3117002595] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3123282225] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3124626120] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3126188688] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3128815305] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 3129789348] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3130677375] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3136445529] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3137994468] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3139086720] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3140340231] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 3141175485] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3141971742] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3143479206] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3144990156] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3152143386] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3153507861] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3155058543] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3157695639] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3158954022] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3160463460] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3167610390] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 3168630045] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3169702662] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3171377391] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3172435644] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3173502549] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3174755892] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 3179609412] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3180903096] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3182437650] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3183990999] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3186875874] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3188427480] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3190197528] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3197293575] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3198556998] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3200109780] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3202829637] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 3204090267] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3209475654] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3211880553] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3213133476] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3214247778] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3215491545] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 3216301536] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3217221210] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3219020511] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3225193482] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3228106434] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3229456881] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3230975622] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3238439694] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3239800662] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3241320537] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 3243410583] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3245403021] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3246749646] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3248372190] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3255724710] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 3256721391] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3257573298] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3259244478] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3260273562] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3261426378] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3267016494] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 3268237707] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3269129766] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3270652413] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3272223738] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3274970664] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3276529032] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3282737871] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3285496284] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3286740975] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3288257238] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3291211959] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3292635906] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3298612569] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3301476108] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 3302460987] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3303473670] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3305188320] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3306242226] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3311822787] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3313078125] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 3313881963] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3314740422] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3316483464] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3318069615] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3320937669] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3326765001] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3328383891] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3331159041] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3332615139] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3334285248] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 3341329404] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3343409643] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3344770758] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3346239498] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3349024707] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3354790530] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3356771103] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3359540037] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 3360586467] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3361540224] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3363277785] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3364393137] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3370119816] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3371411988] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 3372256167] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3373154085] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3374578893] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3376159710] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3378997251] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3385333224] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3386913831] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3389621298] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3390991842] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3392666739] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3400037109] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3401125455] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3402363531] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 3403205799] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3404094435] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3405536925] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3407190444] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3414653319] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3416024913] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3417560496] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3420300366] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3421790211] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3428074629] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3431031954] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3432147201] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3433393509] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 3434197494] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3435207447] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3436910295] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3443657343] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 3446111277] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3447815721] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3449245989] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3450995982] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3458331030] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3459570492] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3461225418] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3464027175] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3465407232] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3467152962] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3475160199] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3476471691] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3477984804] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3480998745] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 3487147839] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3488410233] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3490060161] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3491081370] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3492148422] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3493377741] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 3494230089] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3495323874] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3501419082] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3502999815] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3505717803] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3507064638] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3508640982] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3516125739] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3517450209] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3519004524] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3521729337] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3523062291] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3524885406] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3532327344] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3533633523] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3535171710] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 3536490111] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3539514447] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 3544821420] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3545785047] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3547391274] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3548456520] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3549528969] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 3550784055] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 3552171084] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 3553557462] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 3559436055] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 3560370345] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3561351591] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 3562990767] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3564560496] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 3565612554] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 3567092529] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3568855752] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 3574792137] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3576335049] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3577859166] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3578800680] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 3580125171] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3581740344] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 3582932430] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 3588732672] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3590307336] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 3591402402] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 3592831179] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3594257436] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 3595172070] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 3596782791] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3602765670] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 3603762708] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 3604921446] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 3605826273] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3607522149] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 3608500245] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 3609488841] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3610372479] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3612386148] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3617944743] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 3619045500] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3619910511] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3621566739] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3622668819] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3623917584] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 3625163178] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 3626214858] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3627186318] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 3634010310] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3636425100] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 3637965282] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 3639438684] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3641291745] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 3646725684] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3648470238] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3650037531] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3651004770] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 3652384911] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3653949747] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 3655089900] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 3661178388] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3662821848] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 3663955806] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3665472132] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3666899376] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3667884759] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 3669040641] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 3670266705] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3676778133] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 3677880675] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 3679035612] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3679964442] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3681529026] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3682602021] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3683807778] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 3685184727] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 3690345477] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3691288020] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 3692967075] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3694514481] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 3695482329] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 3697065519] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3698786532] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 3699904278] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 3705793749] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3707334960] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 3708318810] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 3709691706] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3711228969] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 3712166241] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 3713940510] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3720311343] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 3721391163] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 3722435094] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3724092519] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3725117760] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 3726078636] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3727872351] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3729208728] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3734582103] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 3735802581] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 3736598586] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3737411559] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 3738997836] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3740505447] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 3741684765] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3743376210] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3750333405] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3751272504] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 3752560812] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3754264395] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 3755252067] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 3756771312] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3758458956] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3763769205] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 3765361047] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3766920465] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 3767958747] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 3769402455] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3770970567] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 3772170822] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 3777497745] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3779276235] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3780314286] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 3781266468] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3782889222] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3783924165] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3785000268] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 3786314175] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 3787287630] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3792612033] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 3794501865] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3797271093] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 3798310719] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 3799836831] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3801497784] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 3807151404] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 3808943376] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3810538557] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 3811619532] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 3813103959] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3814717515] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 3815875833] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 3822536109] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3824959488] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3825936072] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 3827120409] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3828796671] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 3830041614] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 3831272739] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3839348373] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3840377688] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3841585272] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 3842801109] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 3844214535] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 3845540706] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3851910909] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 3852802506] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3853678668] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3855269796] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3856878396] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 3857815143] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3859581222] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3865532622] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3867084816] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 3882932550] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 3884229720] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3885717129] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 3886610238] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3888376443] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3890147373] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 3896046945] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 3897209463] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3898835430] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3899904687] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 3900985935] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3902870601] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3904027218] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3909640224] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3910904739] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 3911679912] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3912558972] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 3914293131] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3915807966] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 3916957023] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3918601407] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3925573995] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3926481216] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 3928158024] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3929716350] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 3930723951] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 3932515482] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3934115157] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 3940135185] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 3941151606] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3942883938] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3943949499] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 3944924760] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3946824420] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3947957076] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3955354074] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3956474781] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 3957308124] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3958268034] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 3960187266] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3961985055] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 3968108991] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3969812259] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3971411388] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3972482871] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3974089308] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3975875316] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 3976983381] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 3983177625] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3984723057] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 3985649451] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 3986810688] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3988505094] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3989576346] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 3990849933] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3997626423] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3999117570] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4000195794] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4001421312] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 4002253353] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4003144908] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 4005413496] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4011747999] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 4012785420] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 4014332532] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4015867128] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4016836971] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 4018596582] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4020390276] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 4026250599] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 4028734101] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4030276509] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 4031276067] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 4032801045] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4034667000] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 4035616536] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 4041206400] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4043002257] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4044017943] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 4045041693] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4046701050] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4047738891] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4049068191] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4054818264] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 4055758518] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4056618951] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 4058591229] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4060162932] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 4061224104] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 4062991821] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4068767031] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 4070209143] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 4071955062] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4073487033] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 4074514122] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 4075986117] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4077658305] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 4078666011] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 4084497564] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4086245352] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4087318074] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 4088275149] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4089905190] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4090954896] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4092079782] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4093365297] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 4098589551] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4099556412] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 4101272112] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4102819161] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 4103831277] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 4105264779] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4106846667] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 4107859098] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 4113721143] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4115285076] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 4116338037] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 4117803249] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4119368631] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 4120348134] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 4122172089] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4128163368] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 4129270131] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 4130428134] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4132076298] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4133151015] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 4134065523] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4135780950] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4136869632] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4142311698] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4143651183] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 4144455378] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4145368143] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 4147011708] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 4148406423] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4149971616] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 4151012292] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 4156879230] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4158461853] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 4159412817] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4160864022] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4162427094] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 4163409957] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 4164985272] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4166595825] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 4171998138] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 4173462111] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4175020983] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 4175985450] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4177482414] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4179036372] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4180033158] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 4185643791] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4187354535] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4188449118] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 4189393635] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4191065718] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4192101207] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4193151354] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4194489264] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 4195391046] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4200939162] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4202700936] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4204244835] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 4205254053] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 4206778485] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4208526000] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 4209660987] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4215487752] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4217080098] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4218002292] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4219612971] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4221327012] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 4222362795] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 4223631405] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4229887977] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4230952383] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 4232026911] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4233814977] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4234880958] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4235983059] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4237219602] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 4238075289] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4238990889] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 4245069024] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4246737327] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 4247694822] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 4249198464] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4250763363] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 4251746352] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4253236722] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4259423490] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4260401565] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4261888827] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4263419034] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 4264426131] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 4265991534] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4267633209] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 4273076430] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 4275765438] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4277490609] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4278590862] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 4279904265] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4281868500] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4282963335] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4289444061] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4291125237] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 4291906668] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4292765358] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 4294518081] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4296357954] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 4297352241] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 4303878054] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4305458514] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 4306430856] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4307991072] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4309673487] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 4310768931] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4317238128] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4318858005] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 4319897190] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 4321023336] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4322827698] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4323854472] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 4324930638] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4326789705] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4332740139] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4333964019] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4335213666] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 4336047429] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4336959627] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 4338741855] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4340605059] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 4341609090] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 4348027362] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4349638902] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 4350596082] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4352149935] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4353737640] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 4354967568] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 4361874930] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4363474647] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 4364479812] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 4365582501] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4367269221] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4368355803] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 4369610133] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4375661388] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4376774094] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4377863469] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4379093376] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 4379888352] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4380812457] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4382432943] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4384275966] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4390499358] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4392407502] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4393931724] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4394879664] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4396336203] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4398058308] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4399105935] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4406047800] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4407624459] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4408577817] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4410093555] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4411611561] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4412702658] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 4414008123] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4420249218] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4421285568] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 4422256461] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4423859454] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4424923188] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4425971172] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4427387202] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 4428289593] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4433601753] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4435328415] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4436802972] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4437730668] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4439270073] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4440854775] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4441986486] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4443575619] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4449514797] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4450443165] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4451896533] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4453528527] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4454456475] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 4456117407] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 4457626656] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4463764893] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 4464777807] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4466328216] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4467875013] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4468799811] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 4469866422] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4471838364] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4477508049] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 4478498997] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4480108206] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4481126391] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4482195585] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4483469151] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 4484286177] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4485343401] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4486987995] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4492998447] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4493907894] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4495291983] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4496818893] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4497775905] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4499137587] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4500928929] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4506734988] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4508184471] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4509718164] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4510623369] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4511962665] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4513483044] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4514545686] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 4515744324] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4523147748] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4524263751] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 4525196928] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4526861052] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4527878040] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4529117649] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4530473934] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 4536460089] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4537392825] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4538984457] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4540567080] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4541535768] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4542778254] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4544614515] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4550199885] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4552813104] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4554377667] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4555312797] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4556766753] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4558535583] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4559503011] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4565429190] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4567063179] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4568050368] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 4569083610] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4570872999] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4571941437] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 4573002966] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4579246812] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4580347191] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4581434844] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4582699212] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 4583650869] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4584573777] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 4586081703] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4587726255] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 4588862292] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 4595667321] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4597270377] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 4598391672] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4599710115] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4601274321] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4602417519] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4609362723] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4611090645] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4612150116] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 4613686245] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4615239657] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 4616445603] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 4617620952] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4624822734] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4625890227] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4626934704] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4628201214] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 4629033843] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4629891168] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 4631539668] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4638552660] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 4639762617] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4641148869] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4642654002] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4643645202] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 4645054218] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4646692302] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 4652426142] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 4653847611] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4655420910] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 4656503586] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 4657536975] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4659208071] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4660300134] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4661420442] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4667798142] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 4668691503] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4669604310] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 4671203733] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4672775352] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 4673748933] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 4675220088] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4681702200] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 4682719713] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4684095381] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4685617650] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4686619980] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 4687921497] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4689520374] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 4690717332] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 4696111560] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4697792316] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4698822849] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4699846347] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4701096225] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 4701904935] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4702830573] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 4704696444] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4710856185] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 4711979916] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4713553761] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4715053035] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4716117525] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 4717137243] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4718859327] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4719939378] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4725512988] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4726742496] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 4727556015] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4728437259] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 4729905789] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4731439461] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 4732515942] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 4734003603] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4739940366] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 4741047885] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 4742088603] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4743741261] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4744890255] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4745989941] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4747282428] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 4748129442] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4749026751] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 4755525327] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4757079999] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 4758004734] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 4759619256] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4761154188] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 4762225104] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 4763404716] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4769239083] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4772486334] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4773718509] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 4774976388] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 4776277422] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 4777405206] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4778686206] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 4784264604] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4785190074] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4786746573] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4788374535] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 4789320942] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 4790720487] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4792275474] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 4793235321] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 4799603046] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4801151397] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 4802127288] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 4803641157] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4805208240] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 4806194988] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 4807601505] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4815069546] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 4816236705] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4817367765] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4818582342] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 4819414383] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4820345187] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4821831756] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4828425777] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 4829337828] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4830869715] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4832435958] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 4833362667] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4835563362] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4841810526] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 4843148373] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4844211120] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4845454152] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 4846318491] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4847230122] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 4848723474] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4850318298] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 4851258804] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 4857897681] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4859348823] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 4860369990] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 4862012715] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4863614112] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4865200515] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 4866178128] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4871898591] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4874303322] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 4875085845] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4875956400] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 4877447001] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4879055412] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 4879992957] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 4888459044] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4890183060] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 4891078311] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 4892950608] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4894567944] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 4901198127] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4902350943] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4903589565] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 4904417679] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4905323745] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 4908016071] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4915948884] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 4918341687] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 4919529174] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4921008246] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 4921959399] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4923592149] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4933222644] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4934171487] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4935182847] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4936296498] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 4937072868] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4937923137] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4946629317] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4948666275] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 4949685888] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 4951067352] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4952640294] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 4959768429] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 4961183871] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4962632955] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 4963721574] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4964780415] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4966008705] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 4966864371] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4967729844] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4973858673] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4975437705] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 4976431152] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4977797265] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4979303952] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 4980248784] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 4981847661] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4988376057] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 4989342645] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4990464549] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4991696598] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 4992564108] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4993440627] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4995180582] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4996785549] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 5002495008] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5003994912] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5005602168] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 5006567223] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5007948309] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5009466777] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 5010457431] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5011542123] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5017799682] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 5018619375] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5019528318] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5020980846] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5022541020] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 5023579722] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5024670924] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5026199829] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 5032174287] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 5033739900] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5035308873] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 5036910102] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5039542872] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5045689194] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 5047674681] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5049710988] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 5051714409] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5053282668] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 5054259021] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 5055484266] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 5063116947] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5065981998] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 5066939136] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5068068285] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 5069339268] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 5075768838] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 5078281278] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5080469436] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 5081289444] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5082160314] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 5084480877] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5090924055] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 5093376498] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 5095649013] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5097198792] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 5098211265] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 5104487745] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5109029184] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 5110308231] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5111911980] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5113544751] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 5121285519] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 5124432159] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5125388037] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5127141831] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5128351620] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5135411568] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5137383972] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 5138275212] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5139170169] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 5141134866] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5149083177] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 5151754503] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5154315432] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5155965591] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 5156986569] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 5164324473] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5166921585] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 5167946868] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5169232719] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5170913181] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 5177288697] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5178838392] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5179931484] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 5180756364] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5181672195] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 5183357844] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5185025433] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 5185993974] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 5192167029] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5195411256] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 5196456300] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 5197588284] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5199192285] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 5200237056] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 5207276844] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 5209231818] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5211574473] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 5212546143] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5213638962] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5214969018] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 5221299027] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5222659092] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 5225573955] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5227150068] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 5228172306] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 5229403683] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5238278304] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 5240092326] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 5241268347] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5242858236] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 5243900424] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 5250024906] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 5252822190] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5255496708] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 5256488727] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5257627179] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5258938755] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 5265549765] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5266355052] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5269395264] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5271045024] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 5272030827] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5273732352] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5283920481] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 5284891731] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5286538173] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5288223633] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 5293761606] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 5296376883] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5297977650] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5299531356] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 5300538684] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5302282209] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5310261810] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 5311215420] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5312175834] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5313303366] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 5314222284] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5315149077] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 5317528860] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5327756259] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 5328786015] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 5330556042] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5332154856] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 5337648687] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 5340761979] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5342359281] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 5343401679] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 5345139009] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5352173043] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 5354667990] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5355967512] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5357192568] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 5358005142] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5358899595] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5360696187] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5367743766] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 5369844879] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5371176258] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5372667384] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 5373643968] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5374955355] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5382096867] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 5384001210] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 5385975798] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5387481813] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 5388531351] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5389660101] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5396656965] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 5398126545] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5399600031] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 5401504395] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5403085716] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 5404121016] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 5411507136] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5414278737] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 5415186399] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5416381803] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5417969319] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 5419044057] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5425929999] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5427420789] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 5428311063] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5430429459] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5431818924] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 5432742546] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5433628452] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 5441276022] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5443950708] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 5444961879] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5446172823] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5447796249] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 5454278046] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5455741389] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5458222539] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 5459032824] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5459920683] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5461401960] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5462953125] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 5470551912] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 5473454700] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5474989674] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 5475968757] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5477327625] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5485755072] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5487573147] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 5491529694] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5499990426] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 5502350091] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5504326128] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5505878469] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 5510834385] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 5513863257] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5515957797] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 5516907774] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5517958236] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5519192259] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 5520032994] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5520905208] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 5528591775] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5531756853] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 5532729153] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 5534181261] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5535961473] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 5542371261] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5544974316] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5546491251] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 5547643920] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5548801272] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5550079920] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 5555184180] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5556472215] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5559892002] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5561462529] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 5562550560] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5564036184] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5571617331] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 5574559137] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5576416419] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5577651534] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 5578459299] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5579349006] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5585388984] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5586940086] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 5588091663] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5589981054] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5591515881] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 5592757569] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5593990500] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 5602390248] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 5606231925] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 5607924000] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5615470917] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 5616668400] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5617516107] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5620284747] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5621805042] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5622781206] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 5628687540] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5630179191] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 5631195423] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5632371864] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5633914671] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5634826092] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 5636227653] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5637815232] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 5644107693] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 5645987214] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5647456374] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 5648485752] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5649828660] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5651376969] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5652348093] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 5659061562] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5661902631] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5662950615] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5664029469] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5665244088] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 5666054982] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5666943345] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 5673382701] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5675664204] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 5677128072] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 5678127882] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5679621780] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 5680708467] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5682275172] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5689669020] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 5690666604] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5692101492] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5693611581] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 5694639237] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5695708704] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5702964624] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 5703993414] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5706118089] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 5707666503] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5709233082] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 5710352781] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 5719303527] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 5721480303] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5722782261] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 5723851119] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5725422906] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5733339003] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 5735650767] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 5737136181] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5738733294] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 5739770799] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5746949418] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5748898827] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 5750451420] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5751349632] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 5752500453] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5754089166] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 5759659626] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 5761514472] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5763203691] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 5764980816] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 5766272127] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5767606719] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 5768643573] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 5775529179] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5776853838] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 5777871708] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 5778941133] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5780533038] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5781504456] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 5783123619] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5791064286] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 5792033184] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 5794499046] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5796150654] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5797208865] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5798319030] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5806018722] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 5807306631] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5809104735] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 5810429646] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5812013151] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 5818030407] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 5819807133] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5821373208] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 5822309199] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5823551853] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5825086680] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5826039597] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 5827333323] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5834263281] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 5835219915] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 5836218381] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5837746803] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 5838723324] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 5840004765] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5841582054] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 5848174353] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 5849552394] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5851051668] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 5852075082] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 5853335082] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5854857267] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5855878539] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 5862903522] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5864449710] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 5865408948] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 5866456449] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5868118263] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5869152912] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5870285589] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5877182178] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 5878003509] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5880120939] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5881191162] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5882394189] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 5883231942] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5884107474] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5885208945] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5886510357] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 5892741561] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5893607118] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 5895323973] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5896873038] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 5897855964] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5898936162] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5906560506] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 5907513129] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 5909170365] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5910776634] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 5911707564] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 5913595989] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5919762198] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 5920763289] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 5921879649] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5923445808] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 5924475249] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 5925657696] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5926619937] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5928343911] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5929392021] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 5936702856] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5938022244] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5941096854] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5942171424] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5943259896] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5949329589] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 5950291872] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5951134413] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 5954023467] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5955566106] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 5956666653] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 5958233169] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5966036202] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 5968514118] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 5970125553] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5971748223] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 5972766450] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5980522548] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5983329954] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 5984311452] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 5985307734] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5986239924] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5993812209] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5995258122] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5996297601] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 5997500313] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 5998367613] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5999242095] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 6000730743] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6002361666] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 6009659334] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 6011599713] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6013824138] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6014906121] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 6015972816] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6024211032] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6025726266] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6027773241] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6028991178] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 6029852388] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6030794238] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6038220174] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6042086085] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 6042991605] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6044502240] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6046098891] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 6053127213] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6055321272] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6056912169] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 6057897300] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6059024370] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6060278679] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 6066578112] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6068133876] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6070611036] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6072171231] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 6073181037] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 6074359179] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6080473602] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 6081479439] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 6083704998] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6085317336] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 6086361267] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 6087395433] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6089008779] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 6090037002] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 6096288429] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6097785414] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 6098830857] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 6099959061] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6101492964] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 6102532905] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6109659213] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6112038072] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 6113766897] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6115366782] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6116905767] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 6117950979] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 6118998837] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6125181384] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 6126821505] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 6128599617] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6130134843] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 6131150844] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6132589554] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6141206274] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 6143004840] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6144599181] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6146132307] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 6147134007] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 6154308552] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6157713009] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6158715129] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 6159908370] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6161517327] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 6162574803] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6171576600] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6173165880] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 6174061824] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6174920304] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 6176496396] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6186203100] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 6187549347] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 6189042258] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6190699200] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 6191651865] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 6201612522] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6203256129] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 6204203124] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6205727010] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6215233227] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 6216842289] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 6218548518] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6220228392] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 6226848831] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6229062105] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6230252385] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 6231164247] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6232042488] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 6247078173] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 6248379165] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6256505829] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 6259500261] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6262210416] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6263876157] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 6270626733] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6273470070] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6275093769] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 6276071424] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 6277840233] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6279460719] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 6288269526] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6290458251] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 6291725790] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 6293052423] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 6299432811] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6301498014] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 6302724561] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6303617670] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 6306036240] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6307611786] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 6315072057] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 6318230625] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6320359206] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 6321389718] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 6327058731] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6329914185] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 6330936801] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 6331936422] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6333596472] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 6334563459] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 6335562723] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6337241736] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6343500807] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6346235532] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6347506935] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 6348364785] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6349228221] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 6351310644] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6360303621] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 6361762890] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 6362877969] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6364543395] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 6365538795] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 6373660650] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6377412321] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 6378614928] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 6379714887] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6385722630] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6388406010] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6390626550] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6391835163] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 6392669997] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6393542022] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 6395129286] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6404052816] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 6405683823] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 6406895418] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6408446100] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 6409562733] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 6415324734] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6418227312] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 6419299803] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6420414651] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6421663227] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 6422569125] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6423480945] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 6424952163] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6432552567] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 6433556031] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 6434919708] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6436553298] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 6437563818] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 6438950721] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6445239864] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 6447332031] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6448441398] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6449662296] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 6450548979] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6451512375] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 6452877879] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6458696874] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 6461677446] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 6463059582] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6464793510] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 6465835887] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 6467177556] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6468807555] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 6474231372] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6476683521] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6477929073] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 6478767981] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6479643408] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 6480685176] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6482266917] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 6487470633] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 6489364749] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6491945817] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 6492980319] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 6494122257] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6495679638] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 6496769202] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6502350939] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6503605563] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 6505261539] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6506519922] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 6507751299] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6509311578] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 6510318213] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 6511458513] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6517700847] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 6518944950] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 6520988838] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6522711762] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 6523733895] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 6524718879] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6526388904] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6531989352] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6533079000] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6535497717] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 6536308086] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6537231939] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 6569409882] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6575521932] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 6576520419] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 6577943274] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6580434840] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 6581406006] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 6582428097] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6584114985] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 6585154548] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 6590746512] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6592888659] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6594645645] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6595753101] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6596975280] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 6597818010] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6598730292] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6604419990] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6606385107] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 6608333991] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6640670967] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6642302436] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 6643312410] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 6649257741] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6652757223] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 6655039293] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6656101536] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 6657343434] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 6658378923] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6664227822] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6666343110] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6667899525] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 6668943855] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6669957735] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6671697375] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 6672803592] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6678534261] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6681011988] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 6682078263] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6683105541] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6684784029] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 6685880985] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6686987160] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6696273969] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 6697773663] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6698807115] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6700516872] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 6706500381] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6708458358] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6710822643] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 6711914853] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6713000259] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6714679902] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 6715784607] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6721444674] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6725202204] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 6726964881] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6728074626] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6729776613] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 6735966447] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 6738142950] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6740271090] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 6741418152] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6742395324] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6744111612] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 6745220475] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6753216771] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6756225630] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 6757275084] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6758383716] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6759906342] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 6765661518] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6768103818] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6771138003] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 6772206525] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6773319441] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6779946600] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 6781896870] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 6783671559] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6785314347] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 6786343872] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6787566933] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 6788772669] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 6798033585] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 6800328738] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 6801193518] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6802113864] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6809484612] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6812744568] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 6813712227] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 6815039007] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6816603549] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 6817894188] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6825009513] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6827770992] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 6828729579] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 6830283348] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6832099638] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 6840025353] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6844134801] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6845889225] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 6846901026] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6853123053] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 6853930314] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6855202305] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 6857588472] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6859133841] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 6860250474] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6861829107] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6869985633] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 6870751041] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 6873320790] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6875119377] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 6876110031] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 6882790215] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6884806677] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 6886461477] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6888064995] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6889852011] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 6890888193] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 6898828377] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6900209106] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6901877829] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6903580299] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 6904557891] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6910255737] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6912140172] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6913601058] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 6914626509] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 6915825588] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 6917351301] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6919058454] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 6919974159] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6927485607] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6930134526] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 6931078686] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 6932720445] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6934374027] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 6941752083] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 6944556150] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6946359168] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 6947471769] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 6955460589] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6957373752] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 6959867796] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 6960851205] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6963621000] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6972571893] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6973536402] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 6974296518] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6975193323] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 6976657233] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6983684715] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 6985074999] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6986472633] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6987984696] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 6988927113] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 6990350850] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6991927488] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 6992908146] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6999609876] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7001184645] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 7002309762] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 7003749984] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7005270720] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 7006302534] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 7014192339] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7017439695] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 7018359936] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 7019385681] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7021061796] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7028704116] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7031439597] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 7032184698] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7033000338] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 7034700036] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7036279740] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 7041791736] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 7043293971] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7044783459] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 7045781211] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 7047432630] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7048966239] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 7050066114] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 7051744371] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7058660406] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 7059640224] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 7060679556] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7062312474] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7063353024] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 7064296743] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7071521583] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7072942254] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7074069408] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 7074857391] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7075765872] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7077087864] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7078795500] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 7079935716] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7087342626] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7089505185] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 7090785660] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7092565725] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7094517507] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 7095732252] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7103092080] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7105063707] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 7106321061] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7107685683] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 7108742592] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7109941146] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7118487222] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7120470546] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 7121775192] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7123667817] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7130618691] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 7132025565] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7134140790] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7136071845] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 7137296544] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7138643694] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 7146192396] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7147494333] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 7149718632] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7151371080] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 7152645570] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 7160254143] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7162828050] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 7164061275] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 7165342485] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7167413211] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7174112064] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7175471436] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 7176595377] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7177707012] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7179595794] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7181585985] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 7189773108] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7192177293] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7194169353] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 7195387626] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7196809137] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 7203357924] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7204487766] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7206646398] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7208681634] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 7209980841] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 7216633347] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7218751134] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7220829714] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 7222139148] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7224142863] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7226217432] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 7232957172] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7234819662] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7237517364] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 7238551656] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7239919092] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 7245359940] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7246211574] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 7247868684] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7249444083] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 7250428941] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7252084917] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7253894256] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 7254892722] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7260583260] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 7261838724] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 7263210591] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 7264464396] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7265678784] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 7266537600] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7267424367] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7274877267] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7276437315] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 7277414004] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 7278522657] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7280192766] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 7281278844] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 7283437581] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7289405844] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 7290576741] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 7292143173] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7293812358] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 7294988400] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7296175761] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7297599498] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 7298532066] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7303769298] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 7305964995] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7307544342] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 7308513807] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 7309731555] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7311499965] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 7312704504] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 7318621758] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7320281115] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 7321351107] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7322434371] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7323648024] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 7324495269] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7325392599] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 7327536111] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7334091891] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 7335163647] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 7336767942] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7338403863] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 7339596642] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 7341502749] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7343240604] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 7349012979] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7349900187] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7352282469] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 7353151806] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7354058355] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7356802068] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7364203161] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 7366550520] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 7368379200] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7370231526] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 7371402276] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7378086009] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7380143925] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 7380971766] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7381971996] Running FIND.existing: FIND DUP . CR +[Hera] 2225731376 +[Hera] [HADES][TEST ] [KRELTSC: 7383654999] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7385419251] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 7390906467] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 2226064960 +[Hera] [HADES][TEST ] [KRELTSC: 7393429239] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7395517395] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 7396496142] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7398001317] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7399741419] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 7400727789] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 7406703612] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7408414125] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 7409444007] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7410509862] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7411715703] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 7412596359] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7413489216] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 7414784601] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7420912485] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 7422006837] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 7423354071] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7424938185] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 7425929553] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7427040180] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7428308580] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 7429206099] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7430112690] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 7436931411] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7438464054] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 7439460966] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 7440556872] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7442143275] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 7443097116] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7444205013] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7452427311] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 7453542369] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7455558999] Running LATEST.basic: LATEST @ . CR +[Hera] 2225812800 +[Hera] [HADES][TEST ] [KRELTSC: 7457103108] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7458749949] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 7464176748] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 2225851984 +[Hera] [HADES][TEST ] [KRELTSC: 7466068512] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7467634650] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 7468629651] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 2225851984 +[Hera] [HADES][TEST ] [KRELTSC: 7470455979] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7472132703] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 7473204291] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7479946719] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7481205816] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 7482033594] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7482888672] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 2226066472 +[Hera] [HADES][TEST ] [KRELTSC: 7485117213] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7486850805] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 7487862060] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 2226066936 +[Hera] [HADES][TEST ] [KRELTSC: 7494480945] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7496001387] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 7496988597] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 7498168461] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 7499312541] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7501028556] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 7502133219] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7508694060] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 7510146924] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 7511956704] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7512852249] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 7514251332] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7516152294] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 7517085156] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 7522856775] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7524525855] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 7525525665] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7526634129] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 7527947616] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 7529258079] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 7530563040] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 7531815333] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 7537413618] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7538311599] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 7542608640] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7544241327] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 7545379821] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 2226071456 +[Hera] [HADES][TEST ] [KRELTSC: 7553212506] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7554822933] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 7555830093] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 7559616666] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7566036744] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 7567165788] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 7571397015] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7572994023] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 7574184009] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 7581433587] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7583140950] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 7584174213] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 7585637535] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 7586676258] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7588389690] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 7589510271] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 7595073465] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 7596030267] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7597758735] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 7598796051] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7599945717] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 7601219472] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 7602036687] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7602964341] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 7609286244] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7611387168] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 7612455921] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7614375279] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7615960569] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 7616994798] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 7623207501] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7625232426] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 7627455633] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7628574513] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 7629812673] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 7630706853] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7631609034] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 7634141214] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7640193120] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 7641283713] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 7644065100] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7645668198] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 7646708937] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 7654090542] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7655905047] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 7656982116] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7658148183] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 7659383025] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 7660237431] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7661176635] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 2226077440 +[Hera] [HADES][TEST ] [KRELTSC: 7662832926] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7668841698] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 7669922400] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 7671161106] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7672752045] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 7673984934] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 2225822608 +[Hera] [HADES][TEST ] [KRELTSC: 7676712099] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7682704260] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 7683721605] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7684809678] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 7686040152] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 7686903105] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7687796697] Running CURRENT.basic: CURRENT @ . CR +[Hera] 2226077440 +[Hera] [HADES][TEST ] [KRELTSC: 7689422517] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7691136138] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 7696448319] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 2226074144 +[Hera] [HADES][TEST ] [KRELTSC: 7700110383] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7701671691] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 7702702623] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 7704030852] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 7705493250] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7711094517] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 7712746209] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7713821052] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 7715056986] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 7715891946] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7716780435] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 7719270951] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7720956285] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 7726488021] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 7730340450] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7731898671] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 7732877313] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 7735965909] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7741912206] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 7742963382] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7745260614] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 7746526914] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 7747830048] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 7749032613] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 7754895750] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 7756146720] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 7756994133] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7757880228] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 7759402665] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7761109587] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 7762139952] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7763319081] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 7764647226] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 7769762322] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7771084755] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 7772205714] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7774996698] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 7776152769] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 7777407561] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7779053310] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 7784482524] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 7786248792] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7787822742] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 7789047525] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7790275920] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 7791487053] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 7792390977] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7793380434] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 7799428980] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7801015803] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 7802220468] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 7803413457] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7805038206] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 7805970606] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 7807144737] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7808947398] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7814681154] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7815847536] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 7817146176] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 7817962404] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7818895749] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7819960911] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 7821225615] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 7822194555] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7827104943] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7828624587] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 7829849748] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 7830694515] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7831615617] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7832768181] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 7834016694] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 7835294418] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 7836582222] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 7842018177] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 7843111332] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7843984092] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7845857061] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7847426769] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 7848444177] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 7849443252] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7851235728] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 7856705829] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 7858547256] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 7859689425] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7861370895] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 7862488809] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7863572934] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 7864797087] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 7865731692] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7866694080] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 7872121194] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7873793844] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 7874853861] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7876628634] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7878155544] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 7879142859] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7880438286] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 7881645681] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 7886918424] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7887787362] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7889980350] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7891611651] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 7892758755] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7894324662] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7900348218] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 7901663070] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7904516088] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7906258395] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 7907238801] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 7908340923] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7910207991] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7915736745] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7916819400] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 7919408406] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 7920305106] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7921218354] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7923346893] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7924921305] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 7930331115] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 7931996562] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7934678031] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 7935672717] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 7937418888] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7939080513] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 7944490785] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7945935900] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 7947891315] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 7949190837] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7950094131] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 7951404951] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7953023610] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 7954008111] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7960312437] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7962723846] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 7964041995] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 7965052704] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7966762461] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 7967841042] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7968953517] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 7974613647] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 7975455054] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7976899812] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7981394505] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7987539546] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 7988912967] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 7990733100] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7992349092] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 7993400205] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 7994403879] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 7995256689] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7996994838] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 8002611225] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8003737413] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 8004958668] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 8005782897] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8006639067] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8008718235] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8010269274] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 8011300584] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 8012217654] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8018148327] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 8019361938] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8020877487] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 8022817404] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 8023612065] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8024491965] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 8025630963] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8031452898] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 8032919076] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8034749289] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8036262150] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 8037240876] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8038268784] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 8039511858] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 8040403140] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8041351038] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8048304999] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8049954171] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 8050937580] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 8052141972] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 8053168200] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8054886693] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 8056123257] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8061774903] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 8063039985] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 8063855562] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8064769839] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 8066829036] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8068282656] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 8069221818] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 8070298152] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 8075568039] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8077608651] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 8078777196] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 8079854958] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 8080829799] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8082487329] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 8083560303] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8084621160] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 8085929754] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 8091713217] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8092610652] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8094940287] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8096514426] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 8097444558] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 8098720476] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 8100075459] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8108221443] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 8110505466] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8111559456] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 8112808011] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 8113813869] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8114858955] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 8123642142] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8125170627] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 8126148975] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8128191834] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8134623651] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 8135647443] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 8138340315] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 8139350583] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8140986147] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 8142131844] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8143507596] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 8151564456] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 8153396328] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 8154481083] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8155749126] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 8156624154] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8157478728] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8164844352] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8167558602] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 8168565510] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 8170417773] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8171990463] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 8177268246] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 8179531836] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8182378281] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8183917455] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 8184870729] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8186744601] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8192619414] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 8194051530] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 8195138112] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8195961795] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8197592277] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8198664285] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8199732870] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 8200590279] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8201697525] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8208432897] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8211132174] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 8212145991] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 8214064089] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8215625565] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 8220941652] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8225437290] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8227324602] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 8228309460] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8230147611] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8237050794] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 8239797237] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 8241351342] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8242151925] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8243795112] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8244916470] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8250840969] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8254222074] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 8255660301] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8256519537] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 8257616451] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8258474637] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8260181664] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 8265732153] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 8268608985] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 8269403814] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8271051579] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 8272084254] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8273147652] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 8274043176] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8274936453] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 8281282884] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8283264717] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8285693367] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 8286695886] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 8288206080] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 8289056832] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8295285537] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 8297442111] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8298500595] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8299772943] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 8300576718] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8301470289] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 8302676277] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8303542233] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8309607327] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 8311594851] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 8313364857] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 8314207461] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 8315009766] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8316631155] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 8317690416] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8318761878] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 8324185002] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8325796269] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 8327342604] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8328168975] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8329857921] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 8330869197] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 8332417359] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 8333234490] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 8339359035] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8343086346] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 8344301931] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8345335908] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8346588684] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 8347455354] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8348382714] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8358145887] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8359705074] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 8360748480] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8367774156] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8370095979] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 8371474692] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 8372465997] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8373291864] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8374922619] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 8376011028] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8377371324] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 8383531443] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8385495489] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8387648325] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8389239600] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 8390409384] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 8412936945] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8414981946] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8416536870] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 8417502975] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 8418429999] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8419316325] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8425739133] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 8427808809] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8428867839] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8430089073] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 8430930333] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8431824912] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8433994422] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8440826730] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 8443004073] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 8445364389] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8446932228] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 8447895813] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 8449051821] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8454313896] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8458394238] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 8459733954] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8460818793] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 8461647915] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8462525862] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8464712424] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8471167845] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 8472971073] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 8474979828] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8476553232] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 8477759577] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 8478739185] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8484075621] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8486894766] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 8487949512] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8489012049] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8490369111] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 8491216524] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8492146446] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8498972727] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8501631936] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 8502627273] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8504552364] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8506094436] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 8507181459] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 8512714875] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8513636670] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8516629422] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 8517665730] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8518735008] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 8519551866] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8520441741] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8527335621] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8528964507] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 8529918936] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8532953205] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8534454726] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 8535524466] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 8536493994] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8541803970] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8543452848] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 8544519690] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8546245890] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8547983682] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 8548822653] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8549706753] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 8551492866] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8558348316] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8560772808] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 8561770959] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 8562886542] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8563717386] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8565425610] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 8566464186] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8572150377] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 8573860365] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8575068096] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8577257304] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8578799082] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 8579767728] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 8580738327] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8586195534] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8589013566] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 8590152396] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8591226147] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8592421005] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 8593268145] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8594167953] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8601430383] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8604165339] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 8605144338] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 8607013737] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8608568619] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 8609589807] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 8615606580] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8618005179] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 8619337251] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8621651094] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8623225002] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 8624262444] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8629746363] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 8630568261] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8631770133] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 8634764670] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 8636072676] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8637644799] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 8638661913] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 8645265111] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8647985829] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 8648977995] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 8650211535] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8651753439] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 8652822213] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8659564641] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8661915108] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 8663320449] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8664377484] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8665635783] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 8666482902] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8667409716] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8674648542] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8677348953] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 8678322744] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 8679615819] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8681188047] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 8682224733] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8688982176] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8691204984] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 8692660053] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8693737374] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 8694584115] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8695626870] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8702635977] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8704159569] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 8705148522] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 8706568248] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8708243985] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 8709216474] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 8710984401] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8717381442] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8718942183] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 8719942119] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8721140169] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8722366695] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 8723190168] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8724028992] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8726236911] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8732342262] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 8733396441] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 8734521474] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8735356896] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8737003695] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 8738016231] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8739123099] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 8739990420] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8740893420] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8747715816] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8749292496] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 8750271558] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 8751200409] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 8752029951] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8753710350] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 8754743151] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8761035633] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8762303151] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 8763133428] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8764059360] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 8766772014] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8768384268] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 8769375426] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 8777683782] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8780711058] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 8781657339] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 8783937813] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8790605817] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 8792692839] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8795076486] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 8796063276] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8796935721] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 8798932779] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 8805290718] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8808116877] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 8809192413] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 8811447288] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8813046627] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 8814029595] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 8821996407] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8823779874] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 8824767147] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8825835039] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8827073472] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 8827918260] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8833307889] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 8836148538] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8838204837] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 8839180056] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8840814066] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8842383186] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 8847958035] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8850546348] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8852705001] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8853660690] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 8855450247] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8857024701] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 8862405090] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8863825971] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 8865129378] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8866719918] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 8868816873] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8870368857] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 8871427236] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 8877825159] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 8879127096] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8881766775] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 8882689305] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8884389045] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8885947770] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 8886877440] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 8893541349] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8896273512] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 8897272629] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8898308958] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8899552494] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 8900405619] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8905611540] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 8910339186] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8911982373] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 8912987580] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 8915068638] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8921454066] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 8923721667] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8925588672] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 8926400742] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8927247021] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 8929596060] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8935604076] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 8937870207] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 8941282308] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8942797185] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 8943804471] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8944847121] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 8950889262] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 8952631275] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8953531923] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8955497586] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8956989888] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 8957930499] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 8964112332] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 8966868687] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8968603602] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 8969524956] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 8971360965] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8972985756] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 8974079541] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 8981836710] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8983444239] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 8984572989] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8985669063] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 8986510323] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8987661795] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8994705426] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8996335929] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 8998177209] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 9000552876] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9002175042] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 9003099252] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 9010556667] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9012628758] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 9013563825] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 9015285993] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9016878339] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 9017861391] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9018986907] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 9020211459] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 9025511544] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9026943366] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 9030172452] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9031778175] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 9037236369] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9040055283] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9042027897] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 9042947655] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 9044828583] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9046419354] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 9051887964] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9052969107] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 9054469410] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9055878258] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 9058079016] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9059619618] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 9060579780] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 9066645420] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9068770914] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9071112351] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 9072045927] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 9073942437] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9075525228] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 9076453827] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9077746440] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 9083602290] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 9084453735] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9086127960] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9088796136] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9090565113] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 9091518618] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 9098149557] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9100130823] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 9101943837] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9103178175] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 9104069541] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9104948349] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9107128380] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9113017746] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 9113936433] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 9117533082] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9119127633] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 9120067299] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9121175973] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 9126791667] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 9129090495] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9129971907] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 9132435060] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 9133540353] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9135113862] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 9136035489] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9143840916] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9145397646] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 9146353398] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9147425448] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 9148284705] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9149166033] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 9156332367] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9159922653] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 9161114907] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9163474131] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9165045666] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 9170390523] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9172264647] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 9173934168] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 9174753399] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9175647579] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 9178826013] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9180422433] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 9185633037] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 9189021870] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9190569171] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 9191539917] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 9194147844] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 9200169594] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9202968033] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 9203903373] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 9206031156] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9207637404] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 9208584252] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 9215715390] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9218107752] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 9219032823] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9220126209] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 9220965117] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9221841867] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 9228322530] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9230345019] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 9231277902] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 9233418306] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9234967539] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 9235931901] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 9238096644] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9244608912] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 9246645597] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 9248897175] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9250442040] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 9251373999] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 9258001683] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9260257629] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 9261741069] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9262883469] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 9264169761] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 9265563426] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 9266852595] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 9272730222] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 9273600840] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9275434728] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 9277957479] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9279571392] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 9280770513] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9287095566] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9290046108] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 9291413292] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 9293594436] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9295144425] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 9296183274] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 9301959828] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 9302906676] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9305905224] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 9306934518] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 9308082042] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9308996613] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9310680078] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9311740641] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9317393946] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 9319817136] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 9320809197] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9321706254] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9323873769] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9325486464] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 9331200102] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 9333291534] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 9335705694] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9337334433] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 9338417508] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9344515992] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9348313380] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 9349952514] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 9351124818] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 9352110579] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9353789802] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 9354815022] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 9360381912] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9361336866] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9363005820] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9364054539] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 9365042757] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9365910603] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9367575315] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9368773911] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9369864399] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 9375679635] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 9376609284] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9378531708] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 9512409732] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9514066275] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 9515222619] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 9642432597] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9644106528] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 9645247122] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9767616810] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9770015493] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 9771920592] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9773079750] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 9774343341] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 9775258899] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9776149467] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 9782543463] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9785489070] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 9787021587] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 9788389317] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9790067637] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 9791131875] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 9792486942] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9798558252] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 9800720181] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9802031925] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 9803311224] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 9804199188] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9805055883] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 9816480177] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9818172861] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 9819251568] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 9829937166] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9831780756] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 9832857321] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 9835893753] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9842138817] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 9843635256] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 9847305867] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9848893488] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 9849902076] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 9857225742] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9860006541] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 9861064563] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 9862860672] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9864453165] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 9870146937] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 9871928619] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9873495093] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 9874557000] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 9875713596] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9876713385] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9878415960] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9883915902] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9885352386] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 9886505097] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 9887299590] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9888243582] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 9890029947] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 9891003654] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9892543101] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 9893574684] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 9899580222] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 9900483096] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9902023026] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 9903060153] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 9904566693] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 9905505372] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9907039485] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 9908043180] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 9914639679] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 9915651438] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9917249517] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 9918341496] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9919555674] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 9920815401] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 9922171770] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 9930296796] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 9932113905] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 9933320187] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 9934718010] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 9943629150] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 9946162170] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 9947429478] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 9948667575] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 9949610391] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9950503584] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9951662511] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 9952526304] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9958420521] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9959582787] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 9960536250] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9962566992] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9963832830] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 9964720164] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9965619615] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9966756954] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 9972149859] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9973073229] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9975479409] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 9976360548] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9977304666] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9978489402] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 9979366467] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9980279379] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9981374907] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 9987197619] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9988116873] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9989287560] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 9990194949] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9991115148] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9992284848] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 9993245724] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9994143789] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9995569311] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 10001659458] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 10003608027] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 10005289098] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10006564575] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 10007608275] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10008510918] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10010330127] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10017109893] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10021384212] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10022594505] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10023843816] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 10024667982] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10025541918] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10031753718] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10034599512] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 10036955376] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10038975576] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10040019276] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10046888208] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 10048800027] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10049674152] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 10051565916] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10053074766] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 10060526112] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10061621514] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10062886197] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 10063708011] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10064603703] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10066503384] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10068065742] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10075639350] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10078441401] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10080041097] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10083204663] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10088896188] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10090086405] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 10091135733] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10092972729] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10094752248] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10096331322] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10105580037] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10107767334] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10108991151] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 10109816787] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10110748494] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 10112284581] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10120294674] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 10124237718] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10125317664] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10126527411] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 10132667916] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10134654327] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10137607326] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10139175669] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 10141487979] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10149163794] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10151624973] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10152898056] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 10153752357] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10154633895] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10156234221] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10163844936] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10168348512] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10169438139] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10170661368] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 10176130881] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10177350036] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 10180127580] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10181721207] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 10184500515] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10190041701] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10191903708] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 10193749545] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10194689295] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10196420388] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10198030101] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10206473361] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10209397485] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10211217429] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 10212074691] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10212961920] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10214665356] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10222804662] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10225903821] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10226960541] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10228216845] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 10229109786] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10234517496] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 10236703134] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10238909226] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 10241656509] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10242793554] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10244008551] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 10250675841] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10252786803] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10255231035] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10257026703] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10264526538] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10266469605] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10268084211] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 10268908986] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10269900123] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 10271246475] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10272802701] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 10280999148] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10282621482] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10283877072] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 10284774402] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10285665390] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10287016173] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10292971857] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10296958056] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10298034306] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10299329040] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 10300201926] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10301108664] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 10307179848] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10308748107] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 10312891512] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10314051069] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10315286856] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 10316127885] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10321301802] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10322871069] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10324421646] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 10326155931] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10328467065] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10329818877] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10331360970] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10339065723] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10341044385] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10342328115] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 10343205348] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10344089427] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10349617719] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10351587918] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10354447656] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10355765574] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10357389840] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10360263648] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10367120316] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10368405558] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 10369261434] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10370196081] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10371825051] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10373398329] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10380853224] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10382204952] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10383800490] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10386639480] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10387679421] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10388897820] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 10394054286] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10394946933] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10396472646] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10398093132] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10401005181] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10402304346] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10403890728] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10411037868] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10412152632] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10413382938] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 10414261326] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10415174826] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 10416892857] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10418446437] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][INFO ] [KRELTSC: 10425363774] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 10427088714] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10428133632] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10429373367] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 10430231595] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10431130899] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10432901010] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10438918245] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10441840458] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10442904486] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 10444140504] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 10445021538] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10445942661] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 10447687635] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10453723581] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 10456770723] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10457968542] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 10459222074] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 10460622816] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 10461743943] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10467125487] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 10468419885] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10469299407] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 10471423011] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10473015000] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 10474309839] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10475508687] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10476758775] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 10482314871] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10483226838] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10485651519] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10487317449] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 10488606114] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10489814160] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10491020442] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 10491988458] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10497433317] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 10499515761] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10501268820] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 10502530626] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10503711225] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10504978806] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 10505849844] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10510977981] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 10516061220] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10517717805] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 10518723222] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10519811232] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10525173498] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 10526491185] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10527380430] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10530372825] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10532025735] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 10533245835] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10534388130] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10540108488] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 10541427015] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10542317604] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10547448618] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10549317807] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 10555245897] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10556393379] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10557593571] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 10558475235] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10559333253] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 10562149521] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10563807408] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 10569640557] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10570780794] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10572081912] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 10572966033] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10573943646] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10576782657] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10578428553] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 10584518154] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10585638798] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 10586924313] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 10587850224] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10588721997] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10592971557] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10599145767] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 10600191420] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10601473680] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 10602695187] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 10604104770] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 10605356895] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 10606633023] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 10607533692] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10612932792] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 10615098228] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10616715396] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 10617856599] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10619195664] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 10620760920] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 10621913064] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10622818899] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 10629810933] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10631469324] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 10632543579] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10633830606] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 10635303987] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 10636186722] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10637065740] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 10643615178] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10645155906] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 10646484156] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 10648143471] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10650018876] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 10651282551] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10656489984] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 10658095602] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 10658895681] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10659751683] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 10661908089] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10663837989] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 10664821251] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10665945066] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 10671364137] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 10672671639] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10673508951] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 10675443996] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10677081030] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 10678639965] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10679748933] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 10681003956] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 10686474036] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10687363239] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 10689038430] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10690704465] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 10692059637] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10693552422] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 10694866119] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 10695711747] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 10700809980] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 10702029513] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 10702904205] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 10703870940] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 10704848826] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 10705854180] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 10707191502] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x00000000bdefb000, 0x00000000bdf38dee) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] Artemis: genesis signature stamped +[Hera] virtio-input: found device +[Hera] virtio-input: driver ready +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 10808744667] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 10838556918] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 10846381959] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] SBI: timer armed (TIME extension) +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 10975492710] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 11145709680] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 11152072638] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 11199574344] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 11252098998] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] [HADES][ERROR] [KRELTSC: 17785088664] virtio_blk: vblk_io timed out (write=1 sector=296) -- queue nev +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 24692383401] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 663 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=50 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261005-152955/amd64/qemu-amd64-20261005-152955.log b/logs/20261005-152955/amd64/qemu-amd64-20261005-152955.log new file mode 100644 index 00000000..beb0a4f5 --- /dev/null +++ b/logs/20261005-152955/amd64/qemu-amd64-20261005-152955.log @@ -0,0 +1,108 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 5 2026 15:29:30 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249255 + Free pages : 247732 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2100714119 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1006463309, tick_hz=100, initial_count=10064633 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=292 image_hash=0x60b74e4f87adb0ac +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0xa4b74bdc7deaf204 capsule_hash=0xa4b74bdc7deaf204 dict_hash=0x0baed67626b4fac4 +PARITY:OK +ok> \ No newline at end of file diff --git a/logs/20261005-154021/aarch64/qemu-aarch64-20261005-154021.log b/logs/20261005-154021/aarch64/qemu-aarch64-20261005-154021.log new file mode 100644 index 00000000..a521dd9c --- /dev/null +++ b/logs/20261005-154021/aarch64/qemu-aarch64-20261005-154021.log @@ -0,0 +1,82 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 5 2026 15:39:56 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039870 + Free pages : 1038459 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=292 image_hash=0x60b74e4f87adb0ac +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0xa4b74bdc7deaf204 capsule_hash=0xa4b74bdc7deaf204 dict_hash=0x0baed67626b4fac4 +PARITY:OK +ok> \ No newline at end of file diff --git a/logs/20261005-154150/riscv64/qemu-riscv64-20261005-154150.log b/logs/20261005-154150/riscv64/qemu-riscv64-20261005-154150.log new file mode 100644 index 00000000..00310488 --- /dev/null +++ b/logs/20261005-154150/riscv64/qemu-riscv64-20261005-154150.log @@ -0,0 +1,152 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdeab936 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 5 2026 15:41:12 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250784 + Free pages : 250132 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=292 image_hash=0x60b74e4f87adb0ac +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0xa4b74bdc7deaf204 capsule_hash=0xa4b74bdc7deaf204 dict_hash=0x0baed67626b4fac4 +PARITY:OK +ok> \ No newline at end of file diff --git a/logs/20261005-160144/amd64/qemu-amd64-20261005-160144.log b/logs/20261005-160144/amd64/qemu-amd64-20261005-160144.log new file mode 100644 index 00000000..a2c80e67 --- /dev/null +++ b/logs/20261005-160144/amd64/qemu-amd64-20261005-160144.log @@ -0,0 +1,108 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 5 2026 16:01:18 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249248 + Free pages : 247725 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2102894063 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1010732930, tick_hz=100, initial_count=10107329 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3ed5d5fc83f0b026 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0xa4b74bdc7deaf204 capsule_hash=0xa4b74bdc7deaf204 dict_hash=0x118de9d37e682ea4 +PARITY:OK +ok> \ No newline at end of file diff --git a/logs/20261005-160234/aarch64/qemu-aarch64-20261005-160234.log b/logs/20261005-160234/aarch64/qemu-aarch64-20261005-160234.log new file mode 100644 index 00000000..dcc257d0 --- /dev/null +++ b/logs/20261005-160234/aarch64/qemu-aarch64-20261005-160234.log @@ -0,0 +1,82 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 5 2026 16:02:10 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039860 + Free pages : 1038449 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3ed5d5fc83f0b026 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0xa4b74bdc7deaf204 capsule_hash=0xa4b74bdc7deaf204 dict_hash=0x118de9d37e682ea4 +PARITY:OK +ok> \ No newline at end of file diff --git a/logs/20261005-160400/riscv64/qemu-riscv64-20261005-160400.log b/logs/20261005-160400/riscv64/qemu-riscv64-20261005-160400.log new file mode 100644 index 00000000..7bdc2c2c --- /dev/null +++ b/logs/20261005-160400/riscv64/qemu-riscv64-20261005-160400.log @@ -0,0 +1,152 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bde99936 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 5 2026 16:03:23 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250775 + Free pages : 250123 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3ed5d5fc83f0b026 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0xa4b74bdc7deaf204 capsule_hash=0xa4b74bdc7deaf204 dict_hash=0x118de9d37e682ea4 +PARITY:OK +ok> \ No newline at end of file diff --git a/logs/20261005-161924/amd64/qemu-amd64-20261005-161924.log b/logs/20261005-161924/amd64/qemu-amd64-20261005-161924.log new file mode 100644 index 00000000..b63d4334 --- /dev/null +++ b/logs/20261005-161924/amd64/qemu-amd64-20261005-161924.log @@ -0,0 +1,112 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 5 2026 16:18:59 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 135 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249248 + Free pages : 247725 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2100864460 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1006177928, tick_hz=100, initial_count=10061779 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3ed5d5fc83f0b026 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x1ec33b48cc76a0b5 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x671fdd7aebf0f8d8 +PARITY:OK +POST: PASSED +ok> \ No newline at end of file diff --git a/logs/20261005-162142/aarch64/qemu-aarch64-20261005-162142.log b/logs/20261005-162142/aarch64/qemu-aarch64-20261005-162142.log new file mode 100644 index 00000000..0d5abc5b --- /dev/null +++ b/logs/20261005-162142/aarch64/qemu-aarch64-20261005-162142.log @@ -0,0 +1,86 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 5 2026 16:21:17 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039860 + Free pages : 1038449 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3ed5d5fc83f0b026 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x1ec33b48cc76a0b5 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x671fdd7aebf0f8d8 +PARITY:OK +POST: PASSED +ok> \ No newline at end of file diff --git a/logs/20261005-162524/riscv64/qemu-riscv64-20261005-162524.log b/logs/20261005-162524/riscv64/qemu-riscv64-20261005-162524.log new file mode 100644 index 00000000..d6abc1be --- /dev/null +++ b/logs/20261005-162524/riscv64/qemu-riscv64-20261005-162524.log @@ -0,0 +1,156 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bde97936 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 5 2026 16:24:48 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250774 + Free pages : 250122 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3ed5d5fc83f0b026 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x1ec33b48cc76a0b5 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x671fdd7aebf0f8d8 +PARITY:OK +POST: PASSED +ok> \ No newline at end of file diff --git a/logs/20261005-180922/amd64/qemu-amd64-20261005-180922.log b/logs/20261005-180922/amd64/qemu-amd64-20261005-180922.log new file mode 100644 index 00000000..910c8d01 --- /dev/null +++ b/logs/20261005-180922/amd64/qemu-amd64-20261005-180922.log @@ -0,0 +1,119 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 5 2026 18:08:57 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249245 + Free pages : 247722 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2102894063 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1007097030, tick_hz=100, initial_count=10070970 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3b5a9a7a2f7c5361 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xc45c4db43ea0b1f1 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x88df0873060da73e +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> NOSUCH +UNKNOWN WORD: 'NOSUCH' + ERROR +ok> \ No newline at end of file diff --git a/logs/20261005-181152/aarch64/qemu-aarch64-20261005-181152.log b/logs/20261005-181152/aarch64/qemu-aarch64-20261005-181152.log new file mode 100644 index 00000000..001b8320 --- /dev/null +++ b/logs/20261005-181152/aarch64/qemu-aarch64-20261005-181152.log @@ -0,0 +1,93 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 5 2026 18:11:27 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039860 + Free pages : 1038449 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3b5a9a7a2f7c5361 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xc45c4db43ea0b1f1 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x88df0873060da73e +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> NOSUCH +UNKNOWN WORD: 'NOSUCH' + ERROR +ok> \ No newline at end of file diff --git a/logs/20261005-181541/riscv64/qemu-riscv64-20261005-181541.log b/logs/20261005-181541/riscv64/qemu-riscv64-20261005-181541.log new file mode 100644 index 00000000..76aaac23 --- /dev/null +++ b/logs/20261005-181541/riscv64/qemu-riscv64-20261005-181541.log @@ -0,0 +1,163 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bde978c4 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 5 2026 18:15:04 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250774 + Free pages : 250122 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=295 image_hash=0x3b5a9a7a2f7c5361 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xc45c4db43ea0b1f1 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x88df0873060da73e +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> NOSUCH +UNKNOWN WORD: 'NOSUCH' + ERROR +ok> \ No newline at end of file diff --git a/logs/20261005-185234/amd64/qemu-amd64-20261005-185234.log b/logs/20261005-185234/amd64/qemu-amd64-20261005-185234.log new file mode 100644 index 00000000..22f255ef --- /dev/null +++ b/logs/20261005-185234/amd64/qemu-amd64-20261005-185234.log @@ -0,0 +1,119 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 5 2026 18:52:09 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249244 + Free pages : 247721 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2097857641 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1004827019, tick_hz=100, initial_count=10048270 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=296 image_hash=0x736921433a2e0e97 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x01a3a48159f28a3e +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x212b7b70848080e7 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> NOSUCH +UNKNOWN WORD: 'NOSUCH' + ERROR +ok> \ No newline at end of file diff --git a/logs/20261005-185506/amd64/qemu-amd64-20261005-185506.log b/logs/20261005-185506/amd64/qemu-amd64-20261005-185506.log new file mode 100644 index 00000000..acd6e056 --- /dev/null +++ b/logs/20261005-185506/amd64/qemu-amd64-20261005-185506.log @@ -0,0 +1,125 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 5 2026 18:54:40 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 135 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249247 + Free pages : 247724 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2100864460 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1006925528, tick_hz=100, initial_count=10069255 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=296 image_hash=0x736921433a2e0e97 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x01a3a48159f28a3e +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x212b7b70848080e7 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> NOSUCH +UNKNOWN WORD: 'NOSUCH' + ERROR +ok> 9 KERNEL-WORD ASK9 + ok +ok> 1 2 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261005-185734/aarch64/qemu-aarch64-20261005-185734.log b/logs/20261005-185734/aarch64/qemu-aarch64-20261005-185734.log new file mode 100644 index 00000000..307b0548 --- /dev/null +++ b/logs/20261005-185734/aarch64/qemu-aarch64-20261005-185734.log @@ -0,0 +1,99 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 5 2026 18:57:09 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039860 + Free pages : 1038449 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=296 image_hash=0x736921433a2e0e97 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x01a3a48159f28a3e +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x212b7b70848080e7 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> NOSUCH +UNKNOWN WORD: 'NOSUCH' + ERROR +ok> 9 KERNEL-WORD ASK9 + ok +ok> 1 2 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261005-190101/riscv64/qemu-riscv64-20261005-190101.log b/logs/20261005-190101/riscv64/qemu-riscv64-20261005-190101.log new file mode 100644 index 00000000..caa31588 --- /dev/null +++ b/logs/20261005-190101/riscv64/qemu-riscv64-20261005-190101.log @@ -0,0 +1,169 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bde968f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 5 2026 19:00:24 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250773 + Free pages : 250121 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=296 image_hash=0x736921433a2e0e97 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x01a3a48159f28a3e +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x212b7b70848080e7 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> NOSUCH +UNKNOWN WORD: 'NOSUCH' + ERROR +ok> 9 KERNEL-WORD ASK9 + ok +ok> 1 2 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261005-193045/amd64/qemu-amd64-20261005-193045.log b/logs/20261005-193045/amd64/qemu-amd64-20261005-193045.log new file mode 100644 index 00000000..b503d12a --- /dev/null +++ b/logs/20261005-193045/amd64/qemu-amd64-20261005-193045.log @@ -0,0 +1,129 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 5 2026 19:30:20 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249244 + Free pages : 247721 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2100263096 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1005926145, tick_hz=100, initial_count=10059261 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=298 image_hash=0x2e02147b54f9ff47 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x36b3a02224052315 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x46d5c264cb4dcfca +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261005-193307/aarch64/qemu-aarch64-20261005-193307.log b/logs/20261005-193307/aarch64/qemu-aarch64-20261005-193307.log new file mode 100644 index 00000000..952fa9f5 --- /dev/null +++ b/logs/20261005-193307/aarch64/qemu-aarch64-20261005-193307.log @@ -0,0 +1,103 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 5 2026 19:32:43 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039859 + Free pages : 1038448 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=298 image_hash=0x2e02147b54f9ff47 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x36b3a02224052315 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x46d5c264cb4dcfca +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261005-193636/riscv64/qemu-riscv64-20261005-193636.log b/logs/20261005-193636/riscv64/qemu-riscv64-20261005-193636.log new file mode 100644 index 00000000..01eee49b --- /dev/null +++ b/logs/20261005-193636/riscv64/qemu-riscv64-20261005-193636.log @@ -0,0 +1,173 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bde958f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 5 2026 19:36:00 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250773 + Free pages : 250121 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=298 image_hash=0x2e02147b54f9ff47 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x36b3a02224052315 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x46d5c264cb4dcfca +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-074907/amd64/qemu-amd64-20261006-074907.log b/logs/20261006-074907/amd64/qemu-amd64-20261006-074907.log new file mode 100644 index 00000000..13c1a363 --- /dev/null +++ b/logs/20261006-074907/amd64/qemu-amd64-20261006-074907.log @@ -0,0 +1,129 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 6 2026 07:48:38 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249243 + Free pages : 247720 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2101992017 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1007298008, tick_hz=100, initial_count=10072980 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=298 image_hash=0xd982cf093aadb8b9 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x88fb8dcbb051f7b9 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x843716689a31b60a +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-075150/aarch64/qemu-aarch64-20261006-075150.log b/logs/20261006-075150/aarch64/qemu-aarch64-20261006-075150.log new file mode 100644 index 00000000..9743d97b --- /dev/null +++ b/logs/20261006-075150/aarch64/qemu-aarch64-20261006-075150.log @@ -0,0 +1,103 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 6 2026 07:51:22 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039860 + Free pages : 1038449 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=298 image_hash=0xd982cf093aadb8b9 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x88fb8dcbb051f7b9 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x843716689a31b60a +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-075532/riscv64/qemu-riscv64-20261006-075532.log b/logs/20261006-075532/riscv64/qemu-riscv64-20261006-075532.log new file mode 100644 index 00000000..7b7c24a6 --- /dev/null +++ b/logs/20261006-075532/riscv64/qemu-riscv64-20261006-075532.log @@ -0,0 +1,173 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bde958f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 6 2026 07:54:53 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250773 + Free pages : 250121 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +PARITY:V4_NUCLEUS words=298 image_hash=0xd982cf093aadb8b9 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x88fb8dcbb051f7b9 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x843716689a31b60a +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-102421/amd64/qemu-amd64-20261006-102421.log b/logs/20261006-102421/amd64/qemu-amd64-20261006-102421.log new file mode 100644 index 00000000..9dd72b02 --- /dev/null +++ b/logs/20261006-102421/amd64/qemu-amd64-20261006-102421.log @@ -0,0 +1,130 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 6 2026 10:23:55 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249253 + Free pages : 247730 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2097406618 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1009199508, tick_hz=100, initial_count=10091995 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xbcc90cc5a638a299 capsule_hash=0xbcc90cc5a638a299 words=298 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x88fb8dcbb051f7b9 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x843716689a31b60a +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-102706/aarch64/qemu-aarch64-20261006-102706.log b/logs/20261006-102706/aarch64/qemu-aarch64-20261006-102706.log new file mode 100644 index 00000000..c453b0fb --- /dev/null +++ b/logs/20261006-102706/aarch64/qemu-aarch64-20261006-102706.log @@ -0,0 +1,104 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 6 2026 10:26:41 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039869 + Free pages : 1038458 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xbcc90cc5a638a299 capsule_hash=0xbcc90cc5a638a299 words=298 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x88fb8dcbb051f7b9 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x843716689a31b60a +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-103048/riscv64/qemu-riscv64-20261006-103048.log b/logs/20261006-103048/riscv64/qemu-riscv64-20261006-103048.log new file mode 100644 index 00000000..9e9b7da3 --- /dev/null +++ b/logs/20261006-103048/riscv64/qemu-riscv64-20261006-103048.log @@ -0,0 +1,174 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdea88f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 6 2026 10:30:10 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250783 + Free pages : 250131 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xbcc90cc5a638a299 capsule_hash=0xbcc90cc5a638a299 words=298 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x88fb8dcbb051f7b9 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x843716689a31b60a +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-110551/amd64/qemu-amd64-20261006-110551.log b/logs/20261006-110551/amd64/qemu-amd64-20261006-110551.log new file mode 100644 index 00000000..c7b982a9 --- /dev/null +++ b/logs/20261006-110551/amd64/qemu-amd64-20261006-110551.log @@ -0,0 +1,130 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 6 2026 11:05:25 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249252 + Free pages : 247729 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2101540994 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1006649045, tick_hz=100, initial_count=10066490 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x97a655081b2af559 capsule_hash=0x97a655081b2af559 words=298 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x594818fc69677603 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x8768fb163c8529f4 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-110837/aarch64/qemu-aarch64-20261006-110837.log b/logs/20261006-110837/aarch64/qemu-aarch64-20261006-110837.log new file mode 100644 index 00000000..0623e00c --- /dev/null +++ b/logs/20261006-110837/aarch64/qemu-aarch64-20261006-110837.log @@ -0,0 +1,2 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3h \ No newline at end of file diff --git a/logs/20261006-111341/riscv64/qemu-riscv64-20261006-111341.log b/logs/20261006-111341/riscv64/qemu-riscv64-20261006-111341.log new file mode 100644 index 00000000..849ca7d4 --- /dev/null +++ b/logs/20261006-111341/riscv64/qemu-riscv64-20261006-111341.log @@ -0,0 +1,174 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdea78f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 6 2026 11:13:04 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250782 + Free pages : 250130 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x97a655081b2af559 capsule_hash=0x97a655081b2af559 words=298 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x594818fc69677603 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x8768fb163c8529f4 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-111621/aarch64/qemu-aarch64-20261006-111621.log b/logs/20261006-111621/aarch64/qemu-aarch64-20261006-111621.log new file mode 100644 index 00000000..2dc2b244 --- /dev/null +++ b/logs/20261006-111621/aarch64/qemu-aarch64-20261006-111621.log @@ -0,0 +1,104 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 6 2026 11:15:55 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039866 + Free pages : 1038455 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x97a655081b2af559 capsule_hash=0x97a655081b2af559 words=298 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x594818fc69677603 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x8768fb163c8529f4 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-115225/amd64/qemu-amd64-20261006-115225.log b/logs/20261006-115225/amd64/qemu-amd64-20261006-115225.log new file mode 100644 index 00000000..c20d5dcb --- /dev/null +++ b/logs/20261006-115225/amd64/qemu-amd64-20261006-115225.log @@ -0,0 +1,130 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 6 2026 11:51:59 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249253 + Free pages : 247730 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2118830204 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1019349401, tick_hz=100, initial_count=10193494 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x9653e727bf5cf8bd capsule_hash=0x9653e727bf5cf8bd words=305 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x14a9ea7be071593b +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x721a93a6abb945f9 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-115501/aarch64/qemu-aarch64-20261006-115501.log b/logs/20261006-115501/aarch64/qemu-aarch64-20261006-115501.log new file mode 100644 index 00000000..389775e9 --- /dev/null +++ b/logs/20261006-115501/aarch64/qemu-aarch64-20261006-115501.log @@ -0,0 +1,104 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 6 2026 11:54:35 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039866 + Free pages : 1038455 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x9653e727bf5cf8bd capsule_hash=0x9653e727bf5cf8bd words=305 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x14a9ea7be071593b +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x721a93a6abb945f9 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-115849/riscv64/qemu-riscv64-20261006-115849.log b/logs/20261006-115849/riscv64/qemu-riscv64-20261006-115849.log new file mode 100644 index 00000000..a359a5d9 --- /dev/null +++ b/logs/20261006-115849/riscv64/qemu-riscv64-20261006-115849.log @@ -0,0 +1,174 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdea78f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 6 2026 11:58:12 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250782 + Free pages : 250130 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x9653e727bf5cf8bd capsule_hash=0x9653e727bf5cf8bd words=305 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x14a9ea7be071593b +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=550 pass=550 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb987dbb4388990bd capsule_hash=0xb987dbb4388990bd dict_hash=0x721a93a6abb945f9 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-134817/amd64/qemu-amd64-20261006-134817.log b/logs/20261006-134817/amd64/qemu-amd64-20261006-134817.log new file mode 100644 index 00000000..cf3c9274 --- /dev/null +++ b/logs/20261006-134817/amd64/qemu-amd64-20261006-134817.log @@ -0,0 +1,130 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 6 2026 13:47:51 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249251 + Free pages : 247728 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2101165142 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1007014520, tick_hz=100, initial_count=10070145 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xce1adfd156a70639 capsule_hash=0xce1adfd156a70639 words=306 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x24314ed49017b4ec +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0x4bf51f6674743728 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-135044/aarch64/qemu-aarch64-20261006-135044.log b/logs/20261006-135044/aarch64/qemu-aarch64-20261006-135044.log new file mode 100644 index 00000000..be3e2cc2 --- /dev/null +++ b/logs/20261006-135044/aarch64/qemu-aarch64-20261006-135044.log @@ -0,0 +1,104 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 6 2026 13:50:19 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039865 + Free pages : 1038454 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xce1adfd156a70639 capsule_hash=0xce1adfd156a70639 words=306 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x24314ed49017b4ec +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0x4bf51f6674743728 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-135440/riscv64/qemu-riscv64-20261006-135440.log b/logs/20261006-135440/riscv64/qemu-riscv64-20261006-135440.log new file mode 100644 index 00000000..878a3fd6 --- /dev/null +++ b/logs/20261006-135440/riscv64/qemu-riscv64-20261006-135440.log @@ -0,0 +1,174 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdea78f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 6 2026 13:54:02 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250782 + Free pages : 250130 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xce1adfd156a70639 capsule_hash=0xce1adfd156a70639 words=306 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x24314ed49017b4ec +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0x4bf51f6674743728 +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-143934/amd64/qemu-amd64-20261006-143934.log b/logs/20261006-143934/amd64/qemu-amd64-20261006-143934.log new file mode 100644 index 00000000..0ef01733 --- /dev/null +++ b/logs/20261006-143934/amd64/qemu-amd64-20261006-143934.log @@ -0,0 +1,130 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 6 2026 14:39:07 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249251 + Free pages : 247728 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2100263096 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1007167846, tick_hz=100, initial_count=10071678 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xdac6d69e81818b71 capsule_hash=0xdac6d69e81818b71 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x4abf568309282a76 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xd110b71c6c09dd8e +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-144204/aarch64/qemu-aarch64-20261006-144204.log b/logs/20261006-144204/aarch64/qemu-aarch64-20261006-144204.log new file mode 100644 index 00000000..9acbad0e --- /dev/null +++ b/logs/20261006-144204/aarch64/qemu-aarch64-20261006-144204.log @@ -0,0 +1,104 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 6 2026 14:41:37 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039866 + Free pages : 1038455 + Used pages : 1411 + Total MB : 4061 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xdac6d69e81818b71 capsule_hash=0xdac6d69e81818b71 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x4abf568309282a76 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xd110b71c6c09dd8e +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-144601/riscv64/qemu-riscv64-20261006-144601.log b/logs/20261006-144601/riscv64/qemu-riscv64-20261006-144601.log new file mode 100644 index 00000000..14e7db9d --- /dev/null +++ b/logs/20261006-144601/riscv64/qemu-riscv64-20261006-144601.log @@ -0,0 +1,174 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdea38f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 6 2026 14:45:22 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250780 + Free pages : 250128 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xdac6d69e81818b71 capsule_hash=0xdac6d69e81818b71 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x4abf568309282a76 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xd110b71c6c09dd8e +PARITY:OK +POST: PASSED +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261006-202918/amd64/qemu-amd64-20261006-202918.log b/logs/20261006-202918/amd64/qemu-amd64-20261006-202918.log new file mode 100644 index 00000000..33d63254 --- /dev/null +++ b/logs/20261006-202918/amd64/qemu-amd64-20261006-202918.log @@ -0,0 +1,9143 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 6 2026 20:28:54 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 135 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249319 + Free pages : 247796 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2101014801 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1007663900, tick_hz=100, initial_count=10076639 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 83886 cells (5242 KB), 50 VM slots +Switch-signal: 50 slots +Kernel-Hermes: 50 channel slots +Kernel-Hermes: 50 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0xffff900000000000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 4535727] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 63496377] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 97971405] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 98936733] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 99978396] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 101476410] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 102656862] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 104129844] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 104998572] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 106017051] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 117377316] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118936608] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 122638992] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 123996159] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125545329] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 128412816] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 129925026] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131481609] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 134337378] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 135798348] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137255979] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 140920311] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 142516689] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144148263] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 147878493] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 148911525] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 149828658] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151500153] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 152680689] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 154219170] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 155522430] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 156394308] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 157342080] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 158706303] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160260933] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 162806616] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 164249610] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165909954] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 168882588] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 170223333] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171748164] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 174486438] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 175878276] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177570372] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 181219269] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 184741431] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 186233796] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187797540] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 190478442] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 192222513] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 193771704] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 196452102] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 197940813] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199552857] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 202280694] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 204308937] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205925496] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 208801614] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 210559713] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212174445] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 215032461] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 217036218] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 218498322] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 220045434] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 222706638] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 224118153] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225664761] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 228314352] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 229810644] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 231405384] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 234167766] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 235625376] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 237085800] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 239694567] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 241615857] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 243279897] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 246212652] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 247270821] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 248217102] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 249958254] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 251052753] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 252192780] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 253475544] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 254480079] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 255401895] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 256827879] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 258393198] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 261189222] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 262685682] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 264274689] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 267250389] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 268663689] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 270225333] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271780929] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 274712025] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 276124002] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 277736760] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 280827099] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 281870169] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 282897468] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 284631543] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 285693051] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 286659387] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 287712537] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 289450770] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 290548713] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 291792585] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 293157333] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 294042420] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 294968373] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 296528799] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 298139184] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 301072968] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 302463714] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 304007676] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 307055574] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 308528472] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 310094358] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 313182744] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 314266449] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 315356286] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 317203446] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 318294228] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 319320015] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 320329233] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 322025382] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 323059884] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 324179394] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 325468080] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 326358942] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 327314379] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 328806324] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 330507387] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 333492579] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 334650582] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 336341082] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 337886241] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 340756899] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 342286140] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 343880313] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 346858386] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 347869284] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 348928713] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 350695779] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 351794604] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 352800210] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 353831751] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 355682082] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 356776392] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 357776475] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 358775508] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 360406053] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 361448430] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 362512080] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 363743982] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 364581147] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 365462538] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 366730476] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 368527761] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 371120652] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 372527673] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 374102820] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 376676979] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 378057351] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 379843611] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 382494903] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 383547696] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 384823866] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 385690641] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 386598996] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 388204446] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 389773734] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 392516943] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 393834399] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 395401755] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 397739580] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 399448056] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 400955121] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 402570588] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 405356721] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 406421673] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 407709246] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 408571800] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 409491348] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 411257994] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 412874028] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 415921128] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 417758439] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 419675298] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 423385578] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 424706394] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 426239877] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 427255143] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 428353233] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 430294431] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 431897634] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 434738031] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 436122666] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 437740317] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 440600769] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 442026837] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 443837877] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 446573526] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 447600447] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 448496349] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 450220995] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 451315074] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 452428347] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 453771696] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 454634019] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 455975268] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 457874151] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 459544134] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 460852959] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 464116926] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 465647217] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 467203464] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 470227716] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 471729006] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 473312826] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 476388003] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 477501003] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 478568916] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 480556041] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 481638843] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 482653143] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 483677418] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 485420313] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 486501225] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 487635897] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 488940564] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 490278621] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 491436120] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 492850827] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 493772685] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 494693976] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 496520325] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 498119958] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 501107712] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 502492284] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 504151158] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 507218439] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 508736613] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 510350736] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 512738205] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 514763046] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 516394326] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 518163555] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 521442264] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 522449508] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 523295010] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 525003570] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 526113210] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 527243892] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 528515064] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 529364955] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 530290194] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 531849087] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 533485323] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 536237961] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 537733707] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 539395815] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 542346588] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 543528510] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 544382034] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 546106869] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 547278627] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 548380917] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 549669435] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 550516302] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 551459055] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 552904737] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 554495760] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 557450376] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 559130334] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 560734272] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 562875411] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 564831288] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 565869234] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 566725824] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 568588839] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 569745582] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 570858939] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 572134857] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 573533037] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 574571634] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 575927016] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 576768339] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 577692969] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 579446532] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 581408604] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 584353056] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 585802770] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 587293455] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 589981749] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 591600618] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 593190045] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 596600298] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 598202682] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 599762751] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 602833980] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 604952775] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 606744726] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 609925827] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 611493645] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 613065768] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 614225892] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 617717814] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 618826425] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 620511696] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 621511128] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 622405896] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 624187116] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 625306122] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 626461605] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 627754155] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 628594365] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 629529495] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 631019214] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 632954490] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 635923827] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 637537614] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 639160725] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 642021891] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 642942993] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 644911827] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 646005507] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 647046561] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 648312462] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 649208616] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 650140827] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 651937524] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 653531886] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 656677077] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 658121436] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 659684487] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 662569677] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 664145223] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 665808297] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 668128251] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 670542579] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 672035133] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 673654842] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 676599966] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 677692260] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 678970824] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 679830102] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 680752590] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 682491180] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 684091758] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 687038331] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 688498524] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 690079719] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 693043869] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 694277241] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 695648940] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 696433101] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 697259745] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 698868912] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 700462518] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 703249680] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 704706198] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 706280631] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 709554090] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 710646909] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 711939207] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 712801383] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 713719944] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 715410654] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 716979459] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 718828236] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 721581000] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 722948394] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 724549266] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 727527612] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 728601531] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 729890511] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 730736664] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 731711652] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 734051514] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 735585081] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 739059909] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 740826093] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 742379820] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 745486413] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 746569971] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 747844482] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 748722849] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 749644098] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 751124514] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 752719191] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 755602638] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 757098132] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 758736930] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 760371864] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 762236559] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 763358316] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 764637279] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 765511173] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 766427634] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 768077730] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 769891983] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 772910649] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 774432036] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 776005251] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 778899261] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 780533964] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 782348028] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 785404830] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 786527385] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 787768191] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 788606952] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 789490737] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 790891605] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 792465807] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 795509379] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 797092191] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 798718998] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 800462817] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 802621953] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 803725230] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 805034412] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 805924812] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 806784951] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 809390169] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 811044612] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 813995406] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 815550078] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 817132764] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 820425270] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 821993340] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 823726092] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 826524594] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 828182082] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 829711617] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 831561360] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 834479751] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 835582419] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 837253179] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 838386297] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 839549319] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 840868182] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 841701084] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 842622417] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 844437615] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 846380514] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 849520959] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 851023845] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 852636120] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 855683535] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 857239173] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 858974907] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 861773346] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 862782060] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 864452295] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 865508973] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 866583732] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 867815886] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 868689192] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 869544039] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 871882263] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 873502602] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 875347725] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 877851513] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 879434661] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 881051115] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 884163315] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 885810156] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 887379444] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 890467515] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 891467808] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 893161752] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 894252660] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 895568457] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 896839020] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 897701931] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 898581390] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 900582564] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 902249628] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 905067009] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 906711645] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 907832856] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 909549774] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 910689675] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 912206904] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 913860570] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 916748679] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 917814030] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 919544640] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 920997924] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 922108446] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 923365800] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 924219051] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 925119300] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 927270498] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 928810029] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 932605611] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 934071537] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 935688348] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 936804582] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 938440629] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 939470910] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 941207589] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 942280206] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 943398834] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 944688276] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 945727545] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 946626093] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 948489528] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 950152476] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 953477595] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 954546201] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 956163621] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 957323325] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 958574127] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 960317379] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 961392033] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 962578701] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 963869718] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 965278944] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 966399315] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 967684515] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 968496060] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 969401244] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 970861080] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 972366171] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 974983359] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 976295817] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 977877831] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 980542878] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 981869910] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 983682714] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 986364792] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 987745857] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 989303805] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 991709271] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 993409977] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 994926576] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 996642066] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 999608169] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1001121513] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1002713460] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1005896430] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 1006911822] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1007798862] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1009853607] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1010970828] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 1011932418] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1012768848] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1014388977] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1015534674] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1016811411] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1018121433] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 1018962000] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1019892342] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1021458564] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1023060045] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1025707956] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1027029948] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1028607615] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1031299584] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1032567543] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1034428668] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1037091552] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1038335718] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1039878609] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1042595400] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1043950005] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1045500057] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1048467630] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1050052122] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1051662171] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1054901043] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1056457794] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1057994658] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 1059843183] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1062820290] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 1063838202] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1064744625] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1066432857] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1067535840] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 1068494133] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1069337010] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1070938428] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1072318758] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1073492217] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1074784515] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 1075633209] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1076547591] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1078076937] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1079682744] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1082387586] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1083641643] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1085502201] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1088141628] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1089475695] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1091171823] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1094618175] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1096536987] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1098828129] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1102330635] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1104088545] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1105675599] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1108336908] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1110009894] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1111620153] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1114573215] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1116342570] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1117926579] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1120945560] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 1122240987] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1123156965] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1124826066] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1125866217] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 1126785828] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1127601006] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1129257759] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1130346042] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1131363072] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1132714107] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 1133525988] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1134641046] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1136137695] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1137734976] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 1139802699] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1141921137] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1143223830] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1144775961] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1147652961] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1149091377] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1150671417] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1153405827] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1154816208] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1156642242] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1159500342] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1160990628] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1162555422] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1165208037] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1166550252] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1168148226] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1170874845] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 1172004918] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1172933307] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1174677231] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1175795607] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 1176757533] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1177636131] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1179353784] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1180462101] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 1181429739] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1182286287] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1183991760] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1185278052] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1186377213] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1187617431] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 1188469590] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1189383615] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1191126678] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1192624692] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1195387032] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1196800269] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1198631910] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1201414578] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1202929623] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1204543473] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1207399851] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 1208600610] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1210498779] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1212097530] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1215086754] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1216515027] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1218222159] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1221188997] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1222783863] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1224422388] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1227218454] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1228314717] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1229217507] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1230927495] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1232033523] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 1233098181] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1234010232] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1235995152] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1237107186] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1238090469] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1238947605] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1240667715] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1241783298] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1242906966] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1244247081] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 1245141702] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1246082775] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1247708406] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1249288614] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1252190667] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1253613060] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1255227960] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1258148073] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1259783637] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1261614249] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1264784535] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1265858370] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1266804546] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1268543430] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1269624741] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1270679298] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1271700150] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1273611570] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1274706069] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1275708252] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1276583070] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1278296817] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1279385142] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1280524455] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1281766038] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 1282596777] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1283524956] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1285055310] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1286785017] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1289484210] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1290832935] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1292454702] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 1295234850] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 1296399237] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1297838409] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1299518745] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1302229992] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1303814610] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1305393978] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1308615105] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 1309699440] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1310910447] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1312669260] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1313757522] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1314882345] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1316132496] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 1316984340] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1317869448] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1319800398] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1321445811] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1324383858] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1325766141] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1327375623] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1330145943] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1331494206] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1333023489] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1335821886] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1337372694] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1339003617] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1342177725] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 1343250825] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1344196665] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1346059071] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1347120999] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1348408257] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1349715570] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 1350656265] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1351583121] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1353114168] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1354732386] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1357402872] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1358737338] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1360340394] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1363225542] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1364583675] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1366179066] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1368897411] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1370201679] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1371829389] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 1374087771] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1375919706] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 1376974137] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1377902967] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1379613564] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1380697017] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 1381696785] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1382556903] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1384234320] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1385305089] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1387667043] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1390458762] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 1391531988] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1392450612] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1393997556] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1395607458] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1398442374] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1399901370] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1401483972] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1404179679] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 1405574583] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1407156030] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 1409883258] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1411517100] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1413131181] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1415824221] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 1416818361] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1417752189] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1419469254] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1420564866] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 1421550291] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1422393042] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1424304084] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1425406353] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1426460889] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1427748672] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 1428586215] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1429562568] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1430862321] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1432409937] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1435003374] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1436511552] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1438131240] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1440724173] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1442015484] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1443621774] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1446227895] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1447566351] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1449359268] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1452033261] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1453572036] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1455154701] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 1457072085] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1459461024] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 1460449662] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1461525030] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1463233653] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1464328551] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1465409778] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1466706297] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 1467549594] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1468453497] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 1469879040] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1471463259] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 1474171587] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1475462835] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1477079352] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1479686040] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1481045559] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1482624465] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1485308349] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1486751427] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1488313134] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1490985888] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1492479093] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1494072342] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1497155352] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 1498146972] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1499202243] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1500948267] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1502068050] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1503171306] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1504434939] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 1505294889] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1506231279] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1507667154] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1509273297] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1511983830] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1513254456] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1514930277] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1517529426] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1518748203] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1520259594] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1522942050] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 1524000156] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1524973905] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1526677845] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1527762726] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1528887339] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1530227496] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 1531054644] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1531944120] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1533449862] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1535053842] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1537871874] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1539144075] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1540704564] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 1542386454] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1544742402] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1546055217] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1547625891] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1550507028] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 1551487287] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1552376574] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1554097398] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1555188243] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1556323734] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1557633714] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 1558458468] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1559623086] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1561057785] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1563060093] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1565731188] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1567006938] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1568532546] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1571061114] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 1572345810] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1573857495] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 1576771644] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1578031728] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1579525143] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1582065933] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 1583514114] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1585053855] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 1588468539] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 1589481537] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1590372105] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1592086125] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1593184362] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1594295409] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1595600433] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 1596460362] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1597423695] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1598884056] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1600811163] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1603377363] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1604611176] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1606212279] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1608795720] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1610074263] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1611658965] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1614455703] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1615827381] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1617513891] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1620187632] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 1621208232] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1622893356] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1624513212] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1627363857] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 1628362344] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1629283320] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1631001939] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1632066933] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1633212840] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 1634489598] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 1635882360] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 1636990341] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1638411075] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 1639253196] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1640148384] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1641627057] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1643232864] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1646024079] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1647414657] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1649032455] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1652015694] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1653407154] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1655013360] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1657616940] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1658970138] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1660564458] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1663481379] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 1664870886] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1666503741] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 1669204341] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 1670222904] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1671137538] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1672863318] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1674058848] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 1675332855] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1676223822] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1677894897] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1678950924] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1680107898] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1681382031] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 1682253216] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1683191370] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1684775085] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1686402627] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1689382527] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1690772895] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1692362049] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1695066450] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1696503648] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1698094545] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 1700305194] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1702391901] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1703731848] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1705314051] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1707910407] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 1709276226] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1710848958] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 1713715941] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 1714693890] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1715588112] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1717293438] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1718389533] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 1719384933] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1720226109] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1721948865] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1723046871] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1724084292] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1725525522] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 1726510065] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1727478900] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1729023240] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1730603301] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1733313435] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1734682887] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1736305284] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1739202885] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1740578805] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1742184276] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1744893465] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1746265269] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1747752846] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1750419573] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 1752152220] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1753744860] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 1756490484] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 1757491218] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1758400140] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1760134572] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1761248496] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 1762252905] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1763305026] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1765035909] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1766085510] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1767162138] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1768414368] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 1769284419] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1770221166] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1771837809] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1773464070] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1776251127] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1777587714] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1779198771] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 1780290162] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1783328883] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1784640501] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1786222032] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1789111716] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1790442108] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1792048377] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1794703176] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 1795731315] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1796631354] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1798383993] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1799447958] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1800585339] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1802045658] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 1802885700] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1803809952] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1805151978] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1806752304] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1809530268] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1810908309] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1812509055] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1815407181] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1816743432] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1818305895] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1821040347] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1822473870] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1824058152] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1826933682] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1828337091] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1829872254] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1832573547] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 1833543390] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1834440636] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1836122484] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1837383912] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 1838352033] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1839387228] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1841103516] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1842194928] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1843280523] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1844487309] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 1845294402] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1846169325] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1847844096] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1849437429] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1852345761] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1853749632] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1855333557] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 1856326080] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1859340777] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1860681522] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1862330799] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1865169663] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1866526473] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1868116677] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1870787079] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 1871804319] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1872697659] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1874358570] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1875427239] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 1876600257] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1877442231] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1879177902] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1880308269] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1881387312] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1882645653] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 1883468412] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1884398502] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1885815330] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1887357465] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1890301287] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1891721223] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1893325392] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1895966121] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1897223055] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1898787912] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1901487210] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1903030878] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1904743701] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1907412507] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1908785718] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1910311389] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1912941576] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 1913947014] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1915056549] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1916724369] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1917823047] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 1918765884] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1919627241] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1921329690] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1922431728] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1923534039] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1924843977] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 1925689395] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1926864639] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1928387622] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1929967725] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 1931723409] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1934110647] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1935473085] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1937006757] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1939756203] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1941045141] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1942615206] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1945251945] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1946788200] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1948351041] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1951002837] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1952646612] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1954252965] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1956917319] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 1957926474] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1958771766] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1960396641] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1961455587] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 1962558780] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1963411338] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1965386514] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1966488930] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1967573601] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1968863421] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 1969713648] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1970629374] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1972014051] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1973633886] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1976284527] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1977987354] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1979549334] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1982152410] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1983489648] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1985078676] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1987662831] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 1988616609] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1989797313] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1991464041] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1992536868] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1993668474] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1994907684] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 1995764253] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1996703730] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1998196914] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1999813536] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2002652442] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2003966664] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2005437966] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2007734568] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2009312592] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2010620661] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2012184132] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2015038473] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 2016024864] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2016907746] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2018615655] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2019823449] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2020912446] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2022177171] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 2023045920] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2023976493] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2025405375] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2026882704] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2029716381] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2031066786] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2032685907] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2035289256] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2036641530] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2038211133] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2040986367] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 2041991406] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2042889576] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2044572873] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2045667834] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2046762669] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2048032182] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 2048888898] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2049813024] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2051299341] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2053117437] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2055820557] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2057193768] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2058779142] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2061423315] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2062592700] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2064076140] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2066860047] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 2067871008] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2068698051] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2070393675] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2071487439] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2072508837] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2073797544] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 2074587963] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2075441634] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2076929505] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2078800878] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2081552235] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2082944787] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2084540430] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2087189790] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2088527721] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2090275971] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2106134310] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2108069460] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2109218874] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2110478895] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2113143921] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 2114141190] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2115418137] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2117209647] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2118245304] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2119325313] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2120536404] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 2121385266] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2122298850] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2123921079] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2125517205] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2128457205] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2129815065] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2131292499] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2134287477] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2135497077] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2137005045] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2139616206] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2141276676] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2142859929] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2145573465] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 2146645935] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2147545911] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2149254891] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2150351301] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2151435426] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2152723755] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 2153799186] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2154736941] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2156363916] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2157991668] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2160794559] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2162174784] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2163735861] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2166695139] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2168216295] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2169848163] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2171909880] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2173991106] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2175414927] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2177085309] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2180119347] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2181531114] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2183104959] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2185729875] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 2186817003] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2187744069] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2189498409] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2190795369] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2192146845] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2193404871] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 2194247160] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2195184369] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2196625641] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2198195307] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2200898406] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2202274410] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2204260149] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2206911168] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2208350760] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2209976811] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2212793499] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2213906205] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2215153290] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 2216331705] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2217267759] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2218711383] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2220311940] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2222933727] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2224337262] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2225952771] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2228887521] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2230370919] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2231996172] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2234785203] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2235904251] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2237204592] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 2238067167] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2239058136] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2240554386] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2242463643] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2244951492] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2246628216] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2248059933] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2249717589] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2252422746] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2253868008] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2255442903] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2258052636] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2259370827] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2260963719] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2263591344] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2264927994] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2266720554] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2269460214] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 2270452821] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2271354120] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2273133807] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2274219423] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2275349643] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2276655696] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 2277513042] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2278431771] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2280220026] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2281803741] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2284565829] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2286059727] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2287680276] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2290309770] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2291822127] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2293429278] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2296067046] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2297465310] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2299007445] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2301680031] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2303008659] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2304819426] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 2306238564] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2308914657] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 2309914362] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2310762027] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2312387112] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2313444903] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2314569684] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 2315856879] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 2317535913] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 2318712438] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2320040688] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 2320897215] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2321903619] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2323520283] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2325067857] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 2326176384] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 2327644179] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2329599048] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 2330627544] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2332206093] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2333767254] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2334703749] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 2336125302] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2337696837] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 2338714665] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2340102240] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2341816218] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 2342952486] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 2344469169] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2346093498] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 2347044378] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 2348551002] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2350118085] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 2351073165] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 2352206325] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2353113987] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2354973222] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2356094454] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 2357218416] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2358145566] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2359847700] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2360970927] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 2361987936] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2362876383] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2364624948] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2365777386] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2366964285] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2368339575] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 2369173716] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2370009936] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 2371794033] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2373386736] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 2374501521] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 2376021081] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2377619979] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 2378759124] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2380715169] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2382282147] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2383234035] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 2384657667] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2386229979] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 2387230965] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 2388702225] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2390310741] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 2391436215] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2393207229] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2394781032] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2395792581] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 2396934771] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2397875970] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2399591187] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2400672687] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 2401733943] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2402658216] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2404448382] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2405650653] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2406795678] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2408033124] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 2408898408] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2409816822] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 2411419521] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2412927090] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2414004159] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 2415584262] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2417362836] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 2418398010] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 2419882710] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2421455211] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2422532742] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2423955870] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2425520034] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2426459070] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 2427937113] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2429641431] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2430745023] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 2431746450] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2433447597] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2434486278] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 2435441862] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2437090362] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2438206953] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2439278142] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2440539738] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 2441401683] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2442393051] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 2444144871] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2445735306] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 2446729866] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2448080040] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2449645968] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2450593572] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2451922872] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2453482017] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2454447870] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 2456206032] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2457802662] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2458798209] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 2460358992] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2461947537] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 2463002136] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 2464498848] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2466072525] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 2467102092] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 2468301129] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2469967542] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2471034573] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 2472000195] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2473664214] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2474746680] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2475849537] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2477137866] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2478035259] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2478953841] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 2481116064] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2482753392] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 2483881533] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 2485437297] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2487047409] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 2488069395] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 2489767329] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2491362447] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 2492551677] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2494175061] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2495760561] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2496718077] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 2498654235] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2500233918] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2501308152] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2502632895] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2504287863] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2505533142] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2506573797] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2508327801] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2509408377] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2510527173] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 2511799983] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 2513146083] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 2514245013] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2515572969] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2516400894] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2517297216] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 2518993428] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2520519561] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 2521493478] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2522926434] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2524528587] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2525468190] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 2527058562] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 2528418564] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2530172757] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 2531251527] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2532814221] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2534405874] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 2535362277] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2536357719] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2538162060] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2539231800] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2540255886] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2542066695] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2543320395] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2544594717] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2545866288] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2546740980] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2547612396] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2549278284] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2550898056] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2551965969] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2553432336] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2555006475] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2556207696] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2557884756] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2559511689] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 2560596066] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2562105084] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2563727481] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 2564703897] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2565726870] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2567450319] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2568784743] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2569803957] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2571522576] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2572609221] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2573685198] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2574929133] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2575790028] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2576701302] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 2578472232] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2580027765] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2581326615] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2583120267] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2584756839] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2585753751] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2587494840] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2589175743] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2590240212] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2591784531] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2593703910] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 2594732784] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2595906684] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2597743554] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2598857058] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2599929129] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2601570678] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2602691700] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2603791680] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2605024002] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2606182194] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2607105039] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2608930023] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2610557355] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2611596624] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 2613133782] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2614709538] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2615703300] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 2617343610] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2619048096] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 2620065042] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2621674923] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2623284363] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 2624379660] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2625947793] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2627575524] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 2628537093] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2629686528] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2631491457] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2632584045] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2633576967] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2635249848] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2636303691] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2637396846] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2638648383] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2639490189] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2640398208] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2642359188] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2644225122] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2645360067] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 2646933891] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2648484636] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 2649499020] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 2651210478] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2652900978] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2653969437] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2655518502] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2657391954] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 2658367488] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2659449681] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2661173991] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2662255218] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2663228946] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2664915666] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2665960689] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2667042084] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2668506918] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 2669452065] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2670371088] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 2671997769] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2673567729] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 2674566909] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2676001440] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2677557792] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2678533137] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 2680034826] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2681828751] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2682888033] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2684413851] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2685977868] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 2686945338] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 2688524979] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2690067156] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 2691023748] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 2692066041] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2694109089] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2695216860] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 2696213415] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2697962799] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2699241510] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2700447414] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2701711635] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 2702511294] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2703385650] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 2705084256] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 2706666039] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2708212038] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 2709227997] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2710834182] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2712485958] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2713593204] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2715181581] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2716773612] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 2717793750] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 2719547334] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2721147471] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2722150515] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2723587755] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2725162335] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 2726152443] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2727805269] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2729364708] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2730356538] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 2731725444] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2733432744] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2734535727] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 2735514978] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2737199703] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2738269086] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2739335172] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2740620309] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2741535909] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2742433701] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2744312025] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2745913779] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 2746939188] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 2748639495] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2750284404] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 2751335706] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2752825446] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2754495954] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2755484823] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 2757433371] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2759053479] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 2760065049] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2761182186] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2762846646] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2763901350] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2764993749] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2766721629] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2767941414] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2769274347] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2770470276] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 2771315778] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2772192885] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2773726410] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2775256743] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2776237779] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 2777732244] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2779324737] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2780301741] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2781903054] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2783542923] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2784502476] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2786022036] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2787577296] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 2788584645] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2790117435] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2791618746] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 2792657196] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 2793659526] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2795780169] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2796892182] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 2797916289] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2799588582] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2800643433] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2801715819] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2802959313] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2803797444] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2804711343] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2806463541] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2808364083] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2809394742] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2810951136] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2812564293] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2813603499] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2815247316] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2816819943] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 2817849195] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2819522538] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2821155960] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2822253903] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2823335025] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2825082729] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2826195834] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2827212990] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2828876505] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2829942570] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2831006619] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2832380985] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2833265652] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2834229090] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 2835974778] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2837661288] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 2838698772] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2840331102] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2841947325] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2842961793] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2844752400] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2846347350] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 2847356484] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 2848814619] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2850373932] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2851421265] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2852475402] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2854225710] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2855323401] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2856338562] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2858175957] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2859281124] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2860409601] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2861678841] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 2862515901] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2863435680] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2864967294] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2866501470] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2867463459] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2868908259] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2870589141] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2871580971] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2873098494] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2874622842] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2875556439] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2876936979] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2878523991] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2879515044] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2881096827] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2882828886] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2883820443] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 2884895391] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2886623880] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2887721466] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 2888684400] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2890334958] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2891357070] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2892431472] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2893712892] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 2894590965] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2895703461] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2897344296] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2898895377] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2899854069] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2901323418] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2902892328] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2903876766] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2905333578] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2906932812] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2908058916] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2909630178] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2911159965] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2912137053] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 2913725829] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 2915069850] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2916681936] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 2917764990] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2919311535] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2921015937] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2922053526] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 2923145463] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2924880420] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2925985839] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 2926957236] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2928623796] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2929687782] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2930775120] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2932058052] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 2933061369] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2933984340] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2935538697] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2937166344] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2938091919] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2939457948] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2941136961] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2942109534] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2943547740] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2945249223] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2946227151] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2947649502] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2949290526] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2950310643] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2951696055] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2953248564] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2954164227] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 2955203160] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2956882824] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2958088161] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 2959086144] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2960774943] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2961881013] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2962953126] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2964243219] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 2965137798] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2966039622] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2967515376] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2969080149] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2970021663] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2971550211] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2973151608] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2974122942] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2975503377] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2977057209] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2977997988] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2979474666] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2981039502] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2981968605] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2983577793] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2985143784] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2986071732] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 2987093319] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2988790833] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2989912590] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 2990875923] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2992523436] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2993617578] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2994693975] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2996156373] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 2996994798] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2997976275] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 2999698737] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3001271343] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3002415612] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 3003858942] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3005428461] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 3006530520] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3008052180] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3009560757] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3010623315] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3012316839] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3014012253] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3015133275] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3016730661] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3018377586] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3019526454] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 3021000612] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3022751004] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3023787018] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3024835905] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3026053443] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 3026944536] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3027878112] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 3029460861] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3031018452] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 3032026788] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3033617538] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3035170572] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3036194721] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 3037600377] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3039221157] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 3040270590] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 3041650752] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3043191312] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 3044280729] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 3045329112] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3047229444] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3048346413] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3049409475] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3050642175] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 3051493158] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3052416318] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3053967105] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3055600170] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3056636016] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3058151439] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3059790279] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3060834063] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3062180436] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3063733743] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3064736178] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 3066100779] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3067714209] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 3068868369] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 3069894912] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3071670546] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3072787956] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3073905702] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3075229878] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 3076092390] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3077035941] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 3078782028] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3080353899] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 3081456945] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3083012100] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3084819318] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3085906467] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 3086930406] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3088643250] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3089741424] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3090806481] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3092156865] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 3092995143] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3093937035] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 3095419866] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3097205076] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 3098296530] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3099691833] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3101281134] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 3102388548] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 3103405200] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3105063486] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3106181106] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3107286525] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3108648942] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 3109545663] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3110446899] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 3112211928] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3113934768] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 3114955998] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 3116750889] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3118330803] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 3119361210] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 3120501783] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3122403879] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3123485463] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3124588782] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 3125850966] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 3127218297] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 3128323443] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3129662088] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 3130517712] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3131438247] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3132879246] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3134647761] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3135536985] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 3136793583] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3138272802] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3139175718] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3140556048] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3142116033] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3143045430] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 3144527694] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3146111493] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3147325398] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 3148671435] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3150242844] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 3151212225] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3152346267] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3153534825] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 3154374762] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3155265519] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3156767292] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3158375640] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 3159672747] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3161292876] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3162961263] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3163880034] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3166126803] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3167746827] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3168719085] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3169898613] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3171295995] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 3172353912] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3173301789] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 3174841908] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3176406891] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3177438306] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 3178911645] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3180546894] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 3181508274] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 3183106857] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3184859013] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3186370131] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3187371243] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3188463558] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3189704238] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 3190580400] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3191551776] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3193079946] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3194664438] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3195601941] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3197218710] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3198811434] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3199753242] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3201754122] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3203676819] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3205098309] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3206538153] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3208258725] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 3209442243] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3210866295] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 3214844178] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3216943086] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 3218204619] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3219670083] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3221577240] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3222783270] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3225201168] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3227156793] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3228541029] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3229933098] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3231448479] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 3232454463] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3233586111] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3235461873] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3237447381] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 3238509792] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 3239904738] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3241443177] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 3242536500] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 3243978801] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3245543574] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 3246571965] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3247645590] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3248946666] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 3250146753] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3251087574] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3252511500] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3254041119] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 3255042651] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3256406244] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3257940441] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3258896466] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 3260423607] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3263191302] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 3264796752] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3265956792] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3267252219] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 3268130649] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3269050974] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3270907857] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3272551212] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 3273534222] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3275418237] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3276923769] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 3277843737] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3279254370] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3280800810] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3281758116] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3282827247] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3284031366] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 3284851731] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3285825879] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3287418393] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3288989550] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 3290064750] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3291176343] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3292714236] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 3293766903] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 3295294653] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3296838573] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 3297822906] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3298881663] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3300336312] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 3301224465] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3302140128] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 3303756960] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3305410899] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 3306360582] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 3307494057] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 3308649309] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3310353354] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 3311355054] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3312704346] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 3313942359] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 3315196101] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 3316253640] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3317564586] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 3318414120] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3319291920] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 3321347568] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3322940733] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 3324008604] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 3325918785] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3327524088] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3328551681] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 3330169206] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3331759158] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 3332753697] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3334294425] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3335856468] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 3336892755] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 3338155170] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3339142296] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3340825572] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3341867613] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3343110771] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3344397609] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 3345311004] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3346223013] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3348212826] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3349984848] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 3350924304] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3352287078] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3353900298] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 3354922137] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3356715684] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3358677084] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 3359791302] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3361186794] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3363019800] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3364015053] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3365208105] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3366516720] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3367392861] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3368313543] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 3373381872] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3375771945] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 3376979718] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3378478782] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3380371323] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3381681933] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3383228520] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3385122489] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 3386304096] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 3388681926] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 3389971137] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3392134830] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 3393517428] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3395060319] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3396664782] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3397763523] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3398862474] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 3402330561] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3403994643] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 3404845101] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3406240782] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3407978133] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3409334460] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3410961435] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3413093271] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 3414076407] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 3415310283] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 3416377587] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3418066134] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 3419160591] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3420259941] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3421470339] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 3422317332] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3423198513] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3425486526] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3427025406] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 3427922253] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3429531504] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3431130003] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 3432069144] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3433846437] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3435829635] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 3436931568] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 3438652602] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3440292492] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3441869802] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 3442854870] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3444518700] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3446215563] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3447194793] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3448306806] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3449518170] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 3450575100] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3451460271] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 3453689106] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3455259339] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 3456240186] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 3457931967] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3459624189] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 3460515093] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 3462280206] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3464282451] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 3465323820] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 3467021313] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3468564876] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3469595346] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3470658975] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3471871683] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 3472705866] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3473616300] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3475123029] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3477095433] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 3478065570] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3479333634] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3480802626] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 3481732107] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3482863167] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3484441170] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3485461224] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3487149414] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3489093930] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 3490242714] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3491283705] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3492518946] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 3493354704] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3494235444] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3496060470] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3497668188] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 3498699267] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3500288799] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3502189824] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 3503099628] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3504386319] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3505899054] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3506818392] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3508061298] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3509668932] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 3510647910] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3511748226] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3513255081] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 3514136619] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3515078385] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3516974202] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3518651220] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 3519719196] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3520928502] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3522533322] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3523575069] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3524707095] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3526245471] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 3527101137] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3528040089] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3529486674] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3531080490] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 3532148508] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 3533696586] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3535328727] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 3536350986] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3537732576] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3539611572] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3540617073] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 3544792314] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3546307674] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 3547312503] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3549304500] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3551042418] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 3551974713] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 3554001381] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3555541122] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 3556501830] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3557585283] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3558877056] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 3559737594] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3560668503] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 3562066326] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3563923650] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 3564895194] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3566335395] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3567870516] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 3568875912] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3570556080] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3572086518] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 3573310167] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3574426842] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3575756226] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 3576870129] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3577851207] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3579995055] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3581647587] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 3582815670] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3584336259] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3585982659] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 3587079825] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3588189255] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3589672044] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 3590538420] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3591478128] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3592975281] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3594538983] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 3595624032] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3597658071] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3599274672] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 3600567873] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3601946460] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 3603275214] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 3604615056] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 3605717367] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3607004457] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 3607859325] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3608785425] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3610247550] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3611798484] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3612784056] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 3614269134] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3615880989] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 3616872924] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3618133323] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3619687659] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3620676801] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3622128069] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3623716425] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3624783456] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3626413581] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3628010568] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3629096247] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3630520719] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3632144754] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3633163947] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 3634164114] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3635842770] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3636945963] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3638101026] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3639593559] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 3640453782] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3641395233] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 3643085880] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3644704308] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 3645837741] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 3646929153] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3648544788] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 3649676415] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3651131463] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3652973835] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 3654041412] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3655513491] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3657076500] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 3658143363] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3659250042] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3660538308] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 3661422891] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3662361423] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3663968343] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3665640552] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 3666777471] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 3669019998] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 3670344279] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3671608479] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 3672644892] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3674181672] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3675683382] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 3677011737] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 3678593478] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3680273604] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 3681290424] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3682375536] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3683662500] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3684526797] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3685463082] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3686671443] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3688439832] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 3689659155] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3691002987] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3692255469] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 3693219621] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3694594176] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3695893404] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 3696895083] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3698311071] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3699766287] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 3700764564] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3702031473] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3703553133] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3704519364] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3706041717] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3707660103] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 3708686583] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3709686876] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3711315615] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3712327962] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3713378046] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3714879126] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 3715751235] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3716691594] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3718054536] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3719637327] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 3720619539] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 3721959780] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3723636903] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 3724627389] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3725953308] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3727747380] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3728766510] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3730085457] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3731678517] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 3732664320] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 3733715139] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3735329178] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 3736336779] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 3737750856] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3739570170] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 3740565192] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3741879981] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3743483646] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 3744538161] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 3745912170] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3747496977] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3748536939] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 3750037767] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3751709577] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 3752892780] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 3753973776] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3755686032] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3756763353] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3757854282] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3759142947] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 3760008357] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3760996764] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3762106320] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3763400172] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 3764280135] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3765338430] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3766517895] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3767797278] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 3768688014] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3769627932] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 3771532758] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3773255598] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 3774287727] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3775456440] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3777232347] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 3778315590] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3779905353] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3781674393] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 3782650074] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3784465650] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3786099198] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3787114863] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 3788229774] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3789942828] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 3791011035] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 3792107739] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3793020315] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3794614341] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3795628431] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 3796566039] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3797455137] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3799211997] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3800325711] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3801422646] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3802863708] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 3803879100] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3804813663] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 3806595261] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3808163394] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 3809249976] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 3810795303] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3812363457] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3813487503] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 3815096628] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3816617868] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 3817658187] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3819324474] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3820943700] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 3822013167] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 3823066380] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3824019045] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3825789324] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3826895247] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3828164424] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3829476063] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3830361171] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3831298401] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3832721823] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3834418896] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 3835482336] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3836604198] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3838361541] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3839445519] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3840717405] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3842521473] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3843618513] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3844734747] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3845967636] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 3846851253] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3847787790] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3849454560] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3851077776] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 3852032247] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3853847928] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3855528117] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 3856575828] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3858047361] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3859674693] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 3860745210] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3861915981] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3863220312] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 3864099267] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3865047123] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3867043026] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3868722228] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 3869788965] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3870935481] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3872515878] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3873628962] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3874753932] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3876391281] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3877597164] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3878841225] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3880443084] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3881503416] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3882588570] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3884281233] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3885369012] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3886515528] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3888155565] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 3889184250] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3890859483] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3892472493] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 3893534400] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3895034640] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3896688033] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 3897706575] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3898833456] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3900457113] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3901520532] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3902612658] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3904413639] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3905514312] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3907007097] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3908565402] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 3909600849] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3911222364] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3912841632] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 3913870422] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 3914964627] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3916862964] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3917972121] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3919411629] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3920987406] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 3922090746] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3923186232] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3924416244] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 3925351857] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3926289822] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3927835296] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3929778342] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 3930771411] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 3932219676] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3933802278] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3934746060] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3936130296] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3937724868] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 3938674698] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3940047090] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3942167838] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 3943166346] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3944841495] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3946498143] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 3947488902] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3948667254] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3949935822] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 3950885589] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3951771033] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 3953650575] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 3955020279] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3956743182] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3957734130] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 3959913489] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3961565034] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 3962619591] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3964163616] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3966029802] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 3966990069] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 3968736744] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3970466955] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 3971439696] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3972678276] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 3973878174] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 3975186159] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 3976302750] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3977611533] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3978582111] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3979448655] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 3981686751] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3983319270] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 3984337245] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3985464000] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3987125289] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 3988092948] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3989165544] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3990705348] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 3991975743] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3993038931] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3994687599] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3995805912] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3996887139] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3998645784] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3999852969] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4001074959] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4002523770] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4003630638] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4004554260] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 4006701720] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4008306141] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 4009369518] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4010474727] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4012232322] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4013267454] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4014637746] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4016613762] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 4017657504] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4018738731] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4020497628] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4021606281] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4022761155] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4024061748] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4024998306] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4025985432] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4027513896] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4029439827] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 4030380081] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4031564103] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4033095192] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 4034186226] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4035311070] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4037029290] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 4038117174] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4039185045] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4040361402] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4041492042] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4042426584] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4043955762] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4045665120] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 4046730849] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4048080162] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4049781876] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4050841914] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4052006700] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4053797790] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4054941660] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4056133095] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4057428375] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4058480496] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4059410649] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4060717731] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4062441516] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 4063548111] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4064840178] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4066670727] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 4067772009] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 4069110696] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4070709069] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4071688047] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4072867008] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4074099876] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4074995547] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4075843758] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4076782479] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4078280409] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 4079555424] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4080812631] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4082425368] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4083480177] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4084677933] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4086318663] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 4087439496] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4088573937] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4089877617] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4090744329] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4091801154] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4093003509] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4094647557] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 4095708813] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4096781157] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4098506727] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4099540032] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4100627328] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4102379211] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 4103461887] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4104606618] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4106360643] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4107461799] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4108611486] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4109920605] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 4110836877] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4111730259] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 4133145681] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4134809469] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 4135830909] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 4136951721] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4138624581] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4139673951] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 4140794595] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4142691189] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 4143791148] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 4144813533] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4146516612] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4147636521] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4148857335] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4150170255] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 4151046732] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4151967456] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4153436658] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4155274389] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 4156368762] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4177888260] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4179517314] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 4180788696] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 4181953398] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4183583502] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4184640138] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4185772521] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4187067864] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 4187929221] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4188897111] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4190270322] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4191869451] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 4193187831] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4194290058] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4195927638] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 4197061890] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4198145910] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4199755497] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 4200858291] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4201940736] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4203627729] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 4204838946] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4206135528] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4207950432] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 4209032016] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4210045602] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4211786292] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 4212888477] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4213974219] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4215714447] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 4216826817] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4218155844] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4219904997] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 4221042378] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4222124928] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4223866521] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 4224995922] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4226141808] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4227875694] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 4228993230] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 4230199428] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4231868907] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 4233071157] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4234079703] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4235776965] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 4236927345] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4238074806] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4239699156] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 4240785843] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4241900985] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4243709820] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 4244791929] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4245886239] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4247624640] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 4248745557] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4249837746] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4251571233] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 4252659411] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4253736711] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4255660689] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 4256786079] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4258005906] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 4259301438] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 4260725595] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 4261878033] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 4262741574] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4263685608] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4265191497] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4266814209] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4268011251] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 4269467139] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4270950327] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 4272196866] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4273809309] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4275436452] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 4276413750] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4278071532] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4279791411] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 4281040659] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4282490520] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4284015120] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4284992418] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4286116842] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 4287006108] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4287942393] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4289525604] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4291191933] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 4292176308] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4293983778] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4295638809] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4296614259] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 4298253456] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4299906807] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 4300893177] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 4302510933] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4304178312] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 4305228333] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4307096850] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4308735480] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 4309816749] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 4310864985] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4312612521] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4313728818] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4314857673] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 4315721613] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4316653152] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4318300266] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4319910945] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 4320876588] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 4334691417] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 4336087140] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4337400144] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 4338352242] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4339824216] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4341439893] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 4342415028] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4344252990] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4345826058] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 4346846847] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 4348514373] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4350098634] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 4351134816] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 4352881344] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4354499268] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 4355644944] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 4356722517] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4358346804] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4359434835] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4360539687] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 4361393589] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4362342894] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 4363824192] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4365486468] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 4366544343] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4368006951] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4369814652] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 4370788275] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4372274886] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4373821893] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 4374883653] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4376424738] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4378025883] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 4379072754] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4380744438] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4382328384] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4383447558] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 4385332203] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4386926838] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 4387930575] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 4389017157] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4390746066] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4391856987] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4393025091] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 4394297460] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4395291852] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 4397103501] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4398691563] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 4399701915] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4401207279] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4402810650] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 4403898009] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 4405639014] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4407624963] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 4408757556] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4410559419] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4412167011] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 4413249141] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 4414320561] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4416031242] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4417137648] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 4418128911] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4420082982] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4421196528] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4422372087] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 4423250076] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4424160741] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4425594432] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4427223129] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4428210213] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4429720302] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4431602091] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4432576386] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4434073161] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4435716306] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4436836572] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4438350252] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4439968386] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 4441023048] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4442067546] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 4442889759] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4443908385] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4445791854] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4447410807] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 4448547831] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4450213551] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4451898507] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 4452880803] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4454626743] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4456371969] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 4457497485] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4458583269] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 4459451661] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4460420685] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 4462217382] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4463593806] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 4464626649] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 4465695045] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4467450141] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 4468455621] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 4469734437] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4471448163] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4472550978] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4473657237] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 4474534554] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4475482074] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4477023117] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4478669307] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4479660360] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4481293194] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4483055724] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4484056332] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4485170739] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 4486131384] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4487075838] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4488809997] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4490537814] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 4491646068] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 4493366346] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4495192611] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4496769039] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 4497722691] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4499286876] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4500899991] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 4502022252] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4503714159] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4505384520] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 4506472845] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4507808529] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 4508763210] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4509736224] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 4511400642] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4513083876] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 4514058738] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4515707469] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4517283855] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 4518279087] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4519816455] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 4521038424] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 4522478625] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 4523788563] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4525037265] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 4525919412] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4526825037] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4529093436] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4530694203] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 4531953846] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 4533002817] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4534737249] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 4535751759] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 4537936599] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4539574263] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 4540715613] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 4542368040] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4543951671] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 4545351405] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4546481541] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4547698428] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 4548541137] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4549399638] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 4551611148] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4553238753] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 4554198432] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 4555504275] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4557354543] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 4558354857] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 4559446416] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4561103295] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 4562133114] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4563194748] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4564458906] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 4565310729] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4566242562] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 4568332860] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4570329456] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 4571572992] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 4573418598] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4575062982] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 4576365843] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 4578618051] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4580132235] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 4581355380] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4582650639] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4583936700] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 4584819813] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4585728882] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4588126284] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4589785977] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 4590875877] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 4592501298] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4594095681] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 4595463558] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4596586869] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4597867470] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 4598793822] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4599726054] Running FIND.existing: FIND DUP . CR +[Hera] 35784496 +[Hera] [HADES][TEST ] [KRELTSC: 4601408196] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4603013520] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 4604011881] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 36118080 +[Hera] [HADES][TEST ] [KRELTSC: 4605947094] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4607684046] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 4608728502] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4610323200] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4611937533] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 4612944231] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 4614086610] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4615814679] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 4616872890] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4618014723] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4619360550] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4620499989] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4621439088] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4622744133] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4624427115] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 4625523672] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4626845853] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4628538642] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 4629568335] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4630783857] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4632071661] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 4633147344] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4634084868] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 4635758736] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4637468388] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 4638420276] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 4639634202] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4641513471] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 4642589217] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4643730567] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4645306323] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 4646226669] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4647200733] Running LATEST.basic: LATEST @ . CR +[Hera] 35865920 +[Hera] [HADES][TEST ] [KRELTSC: 4648837326] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4650460920] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 4651520055] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 35905104 +[Hera] [HADES][TEST ] [KRELTSC: 4653462303] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4655187033] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 4656182559] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 35905104 +[Hera] [HADES][TEST ] [KRELTSC: 4658640210] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4660183815] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 4661320692] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4662458031] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4663715007] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 4664581803] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4665501456] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 36119592 +[Hera] [HADES][TEST ] [KRELTSC: 4667947179] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4669626423] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 4670803809] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 36120056 +[Hera] [HADES][TEST ] [KRELTSC: 4673511591] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4675241403] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 4676573748] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 4678028145] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 4679455557] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4680961887] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 4681942755] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4683312648] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4684652889] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 4685540874] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4686461031] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 4688067384] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4689791043] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 4691015910] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 4692457539] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4694521440] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 4696018593] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4697477610] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 4699059624] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 4700760729] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 4702165293] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4703756232] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 4704853020] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4705974189] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 4714087959] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4716089616] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 4717344240] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 36124576 +[Hera] [HADES][TEST ] [KRELTSC: 4725363552] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4727321340] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 4728584427] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 4740366309] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4742464146] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 4743822195] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 4756255812] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4758628056] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4759943055] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 4767806379] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4769796864] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4771525542] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 4773798435] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 4775018094] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4777171140] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 4778446932] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 4780001058] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 4781245308] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4783767891] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 4785103281] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4786812198] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4788467292] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4789589364] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4790751336] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4796818635] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4798957044] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 4800338403] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4803110193] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4805163090] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4806523092] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 4814186559] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4816170471] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4817423226] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4818804018] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4820403924] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4821926697] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4823556129] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4828658373] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4830231483] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 4831424220] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 4837479549] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4839059820] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 4840413039] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 4846641261] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4848267396] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 4849369770] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4850775426] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4852158213] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 4853128854] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4854148656] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 36130560 +[Hera] [HADES][TEST ] [KRELTSC: 4856048904] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4857755511] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 4859387127] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 4860816219] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4862696181] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 4864124034] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 35875728 +[Hera] [HADES][TEST ] [KRELTSC: 4869329619] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4870889835] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 4872453516] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4873735965] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4875410883] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 4876499187] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4877465166] Running CURRENT.basic: CURRENT @ . CR +[Hera] 36130560 +[Hera] [HADES][TEST ] [KRELTSC: 4879473711] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4881500421] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 4882715229] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 36127264 +[Hera] [HADES][TEST ] [KRELTSC: 4890993744] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4893386064] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 4894996869] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 4896781239] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 4898676069] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4900752927] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 4902059610] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4903121475] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4904286156] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 4905474630] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4906540737] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4909047948] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4910591637] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 4911752076] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4918962153] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4920458487] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4921464429] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4926559428] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4928111727] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 4929126132] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4930761444] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 4932001410] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 4933321386] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 4934400135] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 4935673428] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4936983303] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 4937853123] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4938762339] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 4940513634] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4942172991] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 4943454537] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4944598701] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4945816197] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 4946689020] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4947577551] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 4949026614] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4950593340] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 4951750902] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 4952988642] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4954540920] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 4955901300] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 4958078433] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4959867234] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 4961074314] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4962180699] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4963399308] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 4964225700] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4965088590] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 4966818738] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4968637821] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 4969829487] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 4970974890] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4972523892] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 4973425527] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 4974506460] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4976125560] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4977163653] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4978230117] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4979418528] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 4980534783] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4981423146] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4982507061] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4983740811] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 4984576968] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4985465625] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4986554937] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4987768527] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 4988606847] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4989496281] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4990753761] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 4991970480] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 4993738134] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 4994865456] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4996345053] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 4997189547] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4998088074] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5000162097] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5001824352] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 5002816728] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 5003797365] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5005481103] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 5006921157] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 5008237290] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 5009302305] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5010795510] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 5011853007] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5012962878] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5014120083] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 5014861110] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5015674461] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 5016573303] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5018282199] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5019408681] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5021247546] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5022751734] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 5023708872] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5024740434] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5025932751] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 5026814751] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5027688918] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5029822455] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5031654831] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 5032693890] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5034388107] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5035944585] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 5036899455] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5038690944] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5040241941] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5041222452] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 5042045715] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5044011147] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5045132190] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5046105393] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5047293069] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 5048099532] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5048916663] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5051123595] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5052606804] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 5053536243] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 5055209565] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5056922871] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 5057862033] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 5059656378] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5061209937] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 5062179927] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5063236731] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5064475164] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 5065314765] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5066188050] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 5067518610] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5069293299] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 5070317322] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5072127774] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5073643113] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 5074618500] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 5075687841] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5077760415] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 5079004917] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5080318971] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5082075411] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 5083278165] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5084462481] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5089204449] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5090986908] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 5092047093] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 5094815313] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5096312025] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 5097243984] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 5098222920] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5099008383] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5100616857] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5101648167] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5102741553] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5103963480] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 5104716078] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5105570820] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5107894176] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5109349980] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 5110312788] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 5111165703] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5112631944] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 5113781946] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5114779614] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5115941985] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 5116742001] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5117578998] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 5118933288] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5120503143] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 5121478803] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5123275731] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5124746928] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5125695687] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5126712570] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5127996573] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 5128846338] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5129688480] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5132400168] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5134025841] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5134940412] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 5136352368] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 5137405770] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5139022707] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 5140145598] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5141228820] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5142444132] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 5143241250] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5144360487] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5146670130] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5148243156] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5149195086] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 5150222448] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 5151205941] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5152852047] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 5153965278] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 5154969750] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 5155885182] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5157813255] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5158850697] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5159953239] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5161172772] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 5161993599] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5162861340] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5165396565] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5166899934] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5167815534] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 5169147900] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 5170148676] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5171799318] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5172836676] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5173897575] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5175135399] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 5175990372] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5176844673] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 5179304403] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5180821401] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 5182021257] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5184035178] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5185501545] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 5186406204] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 5187852663] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 5188831893] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5190479868] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5191518024] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5192565189] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 5193848646] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 5195356089] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 5196438324] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5197662162] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 5198459847] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5199340923] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5202082935] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5203531473] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 5204473344] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 5206395390] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5208080913] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 5209034922] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 5210945208] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5212483374] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5213925675] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5214824643] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5216617476] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5218095624] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5219213706] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 5220289809] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5221066830] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5222605773] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5223598758] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5224677192] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 5225443944] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5226277308] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5228454210] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5229898149] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 5230860999] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 5233083156] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5234612145] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 5235631653] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5237552544] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5238989889] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5239903431] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5241685659] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5243332143] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5244542562] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 5245547727] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5246385942] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5247952185] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5248953591] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5250045822] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5251205799] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5251971291] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5252826810] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 5254025679] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5254851210] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5256576360] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5257783986] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5259573165] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 5260444749] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5262087747] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5263105344] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5264143101] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5264944419] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5265834693] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 5266880766] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5267677611] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5269420359] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5270726433] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5272461432] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 5273275329] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5274937416] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5275968201] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5277016458] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5278232148] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 5279046612] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5279892513] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 5280980019] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5281778523] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5283669090] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5284640256] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5286223656] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 5286993453] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 5287754262] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5289295599] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 5290273800] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5291269431] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 5292030282] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5292882294] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 5293829394] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5294665845] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5296568823] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5297502525] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5298883170] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 5299619031] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 5300468208] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5302130925] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 5303150097] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5304197367] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5305412154] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5306247660] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5307313746] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5309836350] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5311313469] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 5312255340] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5314766625] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5316300234] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 5317255440] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 5318199432] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5318993967] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5320813155] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5321812965] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5322869223] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5323697148] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5324521482] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5326584879] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5328178002] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 5329130016] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 5331658269] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5333893845] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5335429869] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 5336431758] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 5337367161] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5338179273] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5339813955] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5340845916] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5341892913] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5343120531] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 5343940770] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5345022375] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5347590717] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5349200997] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5350183860] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 5351875347] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5353331340] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 5354231862] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 5355263802] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5356050000] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5357643900] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5358974166] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5360021100] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 5360843439] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5361721848] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5363821428] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5365278534] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5366175486] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 5367669846] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5369108472] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 5370121218] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 5371353288] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5372214120] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5373883620] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5374901973] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5375964489] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5377163988] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5378000922] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5378937375] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5381165391] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5382781446] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 5383676382] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5385606051] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5387206356] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 5388279141] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 5389357806] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5390173971] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5391724485] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5392694223] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5393757978] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5394581493] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5395687794] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5397917931] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5399438667] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 5400322557] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5402330955] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5403848205] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 5404898289] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 5405842491] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5406664494] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5408511654] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5409519234] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5410578852] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5411757288] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 5412633786] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5413457721] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 5415200973] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5417022387] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5418492723] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 5419390389] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 5420546796] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5421330999] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5422983720] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5423968074] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5425075887] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 5425894362] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5426743056] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5428907022] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5430436158] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 5431349175] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 5432259903] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5433292137] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5434921695] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5435933832] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5437002396] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5438190765] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 5438987820] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5439837501] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5442715152] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5444157285] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5445037542] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 5447303925] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5448747675] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5449672074] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5451030060] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5452480383] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 5453421477] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5455887948] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5457385815] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5458430019] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5459769693] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 5460786660] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5461676850] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 5464748583] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5466426987] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5468227611] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5469558318] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 5472968655] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5474862393] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5476077852] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5478287598] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5480296521] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 5481543459] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5485028976] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5487343407] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5488522515] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5489933022] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5491523772] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 5492541936] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5493661992] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5497012080] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5498856132] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5499766797] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5501257167] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5502721497] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 5503719564] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5505935778] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5507385723] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5508308085] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5509293762] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 5510041593] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5511176391] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5513268642] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5514806850] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5515777491] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5517212526] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5518758021] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 5519795190] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 5521557573] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5523623637] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5525085384] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5525975679] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5526953943] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5528139729] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5528931030] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5529764625] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5531996883] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5533534356] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 5534489247] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 5535537798] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5536399155] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5538045198] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 5539152507] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5540490396] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5541461205] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5542546065] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5545747557] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5547801903] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 5549433603] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 5550750492] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5551703388] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5553318519] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 5554328157] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5555351949] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5556600189] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5557377882] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5558215824] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 5561951451] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5563482645] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 5564417103] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 5566876434] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5568391983] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5569385913] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 5571441582] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5572894278] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 5574152787] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5575250079] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5576039994] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5576904144] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 5578798113] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 5580582924] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5582179848] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 5583125226] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 5585444991] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5587317729] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5588354247] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 5590460421] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5591997075] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 5592965973] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5594065722] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5595253230] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 5596039764] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5596931193] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5599010529] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5600491659] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5601448986] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5603309271] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5604893322] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5605812618] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5607719502] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5609145234] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5610021228] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5612060454] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5613541164] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5614500381] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5615548029] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 5616335235] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5617208688] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5619381390] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5620843977] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5621820435] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 5624124513] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 5625307632] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5626733364] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5627615364] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5629542219] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5631060330] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5631982020] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5634001863] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5635518924] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5636732850] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5637747549] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5638983546] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 5639790072] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5640692379] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5642972664] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5644421769] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5645572968] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5647869339] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5649666477] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5650661793] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5651674791] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 5652443496] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5653314030] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5655610422] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5657138571] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5658143295] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5660329962] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5662095243] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5663080437] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5664140853] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5665420446] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 5666256897] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5667134886] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5669090763] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5670632793] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 5671556688] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 5673310923] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5675245695] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5676816852] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5677736442] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5679846774] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5681337291] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 5682221286] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5684223552] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5685750966] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5686747563] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5688045804] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 5688951975] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5689805163] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5691772758] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5693306514] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 5694247734] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5696179776] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5697702066] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5698607901] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5700762921] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5702290545] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 5703240522] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5705136822] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5706675534] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5707644201] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5708684352] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5709931794] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 5710743045] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5711749344] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5714437974] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5715891006] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5716745580] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5718778296] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5720388261] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5721301761] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5723490234] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5725223574] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 5726158578] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5727198792] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 5728012143] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5728866570] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5731236693] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5732770680] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5733659715] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 5735445576] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5737186350] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5738720274] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5739635118] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5741781465] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5743347246] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 5744270427] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5745311754] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5746482063] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 5747338758] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5748173487] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5750653062] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5752252254] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5753163444] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5755306368] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5756857869] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5757802239] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5758878930] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 5759730123] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5760695913] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5762964858] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5764587024] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5765477613] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5767623960] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5769154524] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5770059099] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5771120523] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5772336759] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 5773199922] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5774051661] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 5776812741] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 5777819439] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5779288893] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5780155563] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5782268877] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5783773611] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5784674238] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5785733457] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 5786550966] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5787578664] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5789751849] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5791242282] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5792234091] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5795823537] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5797717653] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5798989350] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5800732371] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5802326733] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 5803276647] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5804449350] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 5808652983] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5810198730] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 5811123822] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 5813827719] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5815416810] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 5816379429] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 5819223207] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 5820448032] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5821878867] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5822796504] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 5825162973] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5826661281] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 5827552185] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 5829673290] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5831116725] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 5831989674] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5832997254] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 5833799013] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5834638467] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 5837040657] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5838703731] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 5839579704] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 5841877650] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5843328729] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 5844295527] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5846695428] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5848204299] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5849144658] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 5851630134] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5853169140] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 5854096962] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 5856297447] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5857883514] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 5858825238] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5859939057] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 5861159346] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 5862572331] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 5863797744] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5865034497] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 5865889491] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5866794570] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5869105011] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5870591412] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 5871622008] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5873616462] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5875243689] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 5876621520] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5878873035] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5880416913] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 5881487346] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 5882595621] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 5883547887] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5885211318] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 5886255270] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 5887291137] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5888408169] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5890121412] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5891167800] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5892299721] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5893486767] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 5894309988] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5895172437] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5897456313] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5899117119] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 5900171193] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 5902288161] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 5903844744] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5905408446] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 5906468190] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5908387716] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5909967588] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 5910937305] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 5912043102] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 5913126282] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5914780452] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 5915781753] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 5916833034] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5917699032] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5919494931] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5920511268] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 5921601714] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5922500325] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5924160102] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5925173793] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5926446498] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5927697993] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 5928572160] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5929446369] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 6006681786] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6008281272] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 6009387153] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 6086949183] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6088520172] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 6089847540] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6166865628] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6168446046] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 6169426914] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6170558394] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6171776226] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 6172654299] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6173504463] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 6175662108] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6177533019] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 6178622940] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 6179998776] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6181589190] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 6182602713] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 6183930690] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6185620035] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 6186683601] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6187842507] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6189097866] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 6190249254] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6191123841] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6196525482] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6198179064] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 6199215309] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6204379776] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6205957884] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 6206990286] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6209924532] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6211508079] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 6212577252] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 6215524938] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6217100484] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 6218079231] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 6220793418] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6222375747] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 6223360143] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 6225011058] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6226556511] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 6227770584] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 6229455960] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6231014265] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 6232030560] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 6233084991] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6233988453] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6235686282] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6236728428] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6237846132] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6239089458] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 6239990799] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6241217892] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6242905851] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6243869247] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6245367744] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 6246380910] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6247765419] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6248668503] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6250181742] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 6251196630] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 6252871254] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6253866465] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6255431616] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 6256418196] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6258084735] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6258988197] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6260478000] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 6261516324] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6262596039] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 6263798289] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 6265163814] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 6269524548] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 6271686666] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 6272940828] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 6274271871] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 6279044163] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 6280220541] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 6281513364] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 6282538479] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 6283285743] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6284002452] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6285208839] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 6286100604] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6286953183] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6288000012] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 6288851142] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6289710756] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6291088167] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 6291970461] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6292868862] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6293971215] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 6294907584] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6295788975] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6296922870] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 6297819843] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6298684539] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6299796384] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 6300645309] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6301491210] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6302592618] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 6303750747] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6304601121] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6305713155] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6306570921] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6307430325] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6308539020] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 6309430239] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6310283007] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6311511969] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 6312810777] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 6314124894] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 6315290646] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6316570155] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 6317376933] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6318209436] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6319978245] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6321412566] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6324117261] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6325290027] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6326525667] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 6327349245] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6328367976] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6330016896] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6331504347] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 6333626103] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6335568582] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6336644979] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6337773246] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 6338544261] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6339393522] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 6341174616] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6342732039] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 6345412227] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6346388349] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6347553660] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 6348362307] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6349243278] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6350916495] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6352425009] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6355118322] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6356592816] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6358096458] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6360893469] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6361913439] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6363091875] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 6363916188] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6364764882] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6366673698] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6368182275] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6370732242] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6371797887] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6372979767] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 6373751580] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6374589249] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 6376018971] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6377467845] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 6380208723] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6381247341] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6382454442] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 6383241648] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6384053844] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6385566495] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6387119760] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 6389191158] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6391303086] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6392308104] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6393496410] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 6394284981] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6395114607] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6396545421] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6398137389] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6400719465] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6401768562] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6402955566] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 6403974780] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6404846805] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 6406566222] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6408096576] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 6410652612] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6411685644] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6412909461] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 6413733165] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6414648282] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6416341176] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6417823818] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6420428637] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6421430715] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6422574228] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 6423366138] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6424219998] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6425773557] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6427279299] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6429986640] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6431056884] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6432237504] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 6433144599] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6434008875] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6435486288] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6437046966] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6439584900] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6440687379] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6442039044] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 6442918902] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6443802792] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6445157691] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6446685063] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6449251788] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6450307353] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6451559646] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 6452350317] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6453204093] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6454615881] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6456122883] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6458855802] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6459889590] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6461060592] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 6461857668] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6462718143] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6463962813] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6465469038] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6468214515] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6469198680] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6470355885] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 6471201828] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6472060539] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6473466405] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6475020657] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6477718485] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6478989279] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6480324186] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 6481119687] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6481948410] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6483326199] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6484855692] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 6501166455] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6503064519] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6504488109] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6506155005] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6509587098] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6510715428] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6511939182] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 6512781618] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6513663219] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6515240760] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6517176057] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6519900030] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6520910046] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6522453252] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6525308139] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6526369836] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6527582481] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 6528407865] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6529683552] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6531186816] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6532636467] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6535321695] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6536719077] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6538323435] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6540988566] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6542320911] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6543602877] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 6544458627] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6545373093] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6546812895] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6548413662] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6551176800] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6552535374] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6554164365] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6557267304] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6558371568] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6559631127] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 6560508528] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6561408903] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6563209674] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6564815124] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][INFO ] [KRELTSC: 6567505371] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6569215590] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6570270672] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6571502700] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 6572395872] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6573347424] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6575144730] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6576777291] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6579771786] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6580884975] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6582067506] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 6582911559] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6583805046] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 6585555606] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6587075817] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 6589779399] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6590915226] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 6592333566] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 6593682669] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 6594918372] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6596225832] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 6597141768] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6598060161] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 6600193257] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6601881510] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 6603188760] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6604517724] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6605874450] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 6606881694] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6607817412] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6610235373] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6612233040] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 6613623072] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6614943825] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6616222683] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 6617391417] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6618326148] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6620452314] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6622255227] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6623620185] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6625268244] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6626548845] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6627484521] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6628410768] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6633355281] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6634875009] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 6635903169] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6636997710] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6638239062] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 6639144036] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6640059783] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6642737220] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6644391096] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 6645634002] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6646784928] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6648026658] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 6648934929] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6649839420] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6652310217] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6653958339] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6655415991] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6656562276] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6657828555] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 6658812783] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6659747157] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 6662400570] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6664187124] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6665489313] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6666684444] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6668173974] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 6669102762] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6670054587] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6672747732] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6674439597] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 6675748107] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6676893531] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6678199290] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 6679193976] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6680349165] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6684622707] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6686206947] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6687188046] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6688418499] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 6689625369] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 6690958764] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 6692093562] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6693603210] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 6694567509] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6695482605] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 6697767321] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6699473571] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 6700649634] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6701804781] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6703048527] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 6703946361] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6704892768] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 6707551011] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6709132647] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 6710213790] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6711433113] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6712720707] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 6713637609] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6714575049] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6716651487] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6718525674] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 6719908587] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 6722055438] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6723971982] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 6725538498] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6727028406] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6728573817] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 6729602733] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6731017209] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 6734568204] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6736107462] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 6737072916] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6738216513] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6739627734] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 6740518428] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6741437010] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6744262560] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6745946445] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 6747247479] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6748406511] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6749701266] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 6750600654] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6751543995] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6753226956] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6754774320] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 6756205659] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6757351062] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 6758577210] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 6759414690] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 6760268445] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 6761135073] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 6762011319] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 6762960897] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 6763867467] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 6764818095] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 6765797766] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x000000003d6c1000, 0x000000003d71456a) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] PCI: ECAM mapped (amd64) +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] Artemis: genesis signature stamped +[Hera] virtio-input: no device on PCI bus 0 +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 6908887965] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 6923377776] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 6945552600] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] APIC Timer: started (LVT=0x00020020 ICR=10076639) +[Hera] I/O APIC: keyboard IRQ1 unmasked +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 7106129079] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 7384565811] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 7389712764] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 7479600975] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 7631867502] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 20481614643] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 632 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=50 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261006-203036/aarch64/qemu-aarch64-20261006-203036.log b/logs/20261006-203036/aarch64/qemu-aarch64-20261006-203036.log new file mode 100644 index 00000000..47827afa --- /dev/null +++ b/logs/20261006-203036/aarch64/qemu-aarch64-20261006-203036.log @@ -0,0 +1,9115 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 6 2026 20:30:12 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039935 + Free pages : 1038524 + Used pages : 1411 + Total MB : 4062 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 335544 cells (20971 KB), 202 VM slots +Switch-signal: 202 slots +Kernel-Hermes: 202 channel slots +Kernel-Hermes: 202 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0x0000000040807000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 481325] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 1943124] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 4081717] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 4121494] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 4165438] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 4453918] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 4494143] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4536831] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 4564408] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4601909] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 5623049] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5762683] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 5906934] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5948143] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6164114] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 6282057] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 6328927] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6376760] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 6707015] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 6756264] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7031879] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 7223931] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 7526197] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7577773] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 7948330] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 7978282] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8006086] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8059120] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8099566] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8310836] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 8386732] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 8413475] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8442636] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8493222] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8543793] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8873054] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8914287] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9140292] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9318623] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 9362311] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9539348] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 9698325] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 9744711] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9795679] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 10471990] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10617898] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10669096] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10856089] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10998617] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 11046851] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11098979] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 11446573] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11498027] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11555805] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11859915] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 11933193] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11985988] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 12237664] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12298188] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12350145] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 12461616] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12640379] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12698752] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12786590] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 13042227] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 13139405] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13191242] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 13298800] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 13482996] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13543639] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 13674473] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 13723997] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13907580] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 14048385] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 14106274] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14159406] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 14433805] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 14479193] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 14507596] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14563749] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 14599673] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 14768108] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 14802638] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 14823534] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 14881805] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 14936169] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14988225] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 15279556] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 15326629] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15382346] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 15634319] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 15717703] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 15764649] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15817407] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 16066046] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 16146298] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16197835] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 16312856] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 16354174] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 16522525] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16612833] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 16651303] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 16686011] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 16721620] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16920934] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 16969469] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 17004883] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 17045603] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 17072620] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 17109176] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 17167013] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17359757] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 17473468] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 17517782] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17568530] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 17680086] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 17875147] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17961509] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 18079431] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 18238920] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 18310376] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18377517] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 18411670] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 18444729] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 18476007] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18527784] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 18697546] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 18758633] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 18806860] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 18833390] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 18863088] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 18911854] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18959903] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 19323565] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 19366182] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 19598934] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 19676035] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 19791046] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 19975103] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20030354] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 20178328] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 20210964] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 20244688] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20503119] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 20580349] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 20617485] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 20652071] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20903623] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 20972819] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 21005104] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 21043542] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21097788] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 21131119] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 21304265] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 21346774] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 21404684] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 21437347] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 21480524] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21531120] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 21813455] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 21857198] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21906510] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 22188861] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 22285281] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22335270] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 22443755] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 22632937] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 22698995] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 22736537] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 22763643] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 22817832] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22868145] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 23211293] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 23255478] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 23308108] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 23635463] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 23692194] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 23946551] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 24045045] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 24147493] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 24357184] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 24467063] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 24498707] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 24529332] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 24593384] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 24837456] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 24958845] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 25005516] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25059008] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 25414344] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 25450387] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 25494555] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 25690377] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 25738480] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 25794163] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25844505] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 26128485] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 26173843] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26223794] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 26331556] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 26587061] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26682867] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 26788345] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 27000322] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 27050758] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27103903] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 27137806] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 27173446] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 27212988] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 27242048] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 27279286] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 27529345] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27583910] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 27620569] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 27944264] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 27990205] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28045415] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 28306486] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 28381992] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28436228] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 28778966] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 28860483] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 28892461] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29064898] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 29120930] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 29180722] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 29212842] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29272149] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 29306619] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 29346914] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 29517160] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 29611085] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 29649538] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 29689985] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 29715660] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 29744574] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 29811762] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30055047] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 30199110] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 30242913] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30293912] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 30594468] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 30642571] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30692302] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 31013119] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 31085256] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 31275142] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31359423] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 31480987] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 31512808] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 31541516] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31807055] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 31870415] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 31907071] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 31947229] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 31973866] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 32215209] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 32306241] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32355485] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 32699206] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 32766762] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32815779] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 33189617] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 33250534] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 33277500] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 33339204] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 33551212] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 33620390] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 33659630] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 33686199] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 33714296] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 33926917] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34009826] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 34115113] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 34166109] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34431340] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 35226325] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 35295904] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 35323255] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 35346971] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 35397618] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 35434141] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 35468897] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 35677951] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 35717545] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 35751195] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 35790004] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 35815130] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 35841448] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 36107233] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36239116] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 36514000] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 36583801] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36653728] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 36757888] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 37086797] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37155628] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 37483209] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 37540283] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37587820] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 37934194] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 37983536] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38032206] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 38377393] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 38426630] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38476136] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 38517185] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 38904336] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 38939330] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39249463] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 39283824] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 39316058] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39372404] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 39585089] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 39623171] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 39662292] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 39687986] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 39715721] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 39767741] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39819260] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 40170607] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 40222402] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40442146] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 40587831] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 40618046] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40671917] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 40708159] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 40885250] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 40925480] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 40959970] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 41013993] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 41081433] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41279876] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 41424823] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 41467930] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41523330] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 41763391] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 41841315] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41892139] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 41982186] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 42217037] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 42264737] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42314296] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 42429794] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 42594450] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 42638651] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 42696482] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 42723998] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 42773002] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42821826] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 43071213] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 43118598] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43166357] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 43274731] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 43311411] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 43477920] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 43503813] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 43560699] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 43622566] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43670109] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 43935690] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 43988714] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44037105] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 44148794] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 44306410] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 44373862] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 44406394] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 44435119] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 44492730] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44542335] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 44615457] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 44891903] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 44938526] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44990050] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 45233452] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 45268180] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 45307988] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 45333864] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 45364780] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 45434452] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45488050] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 45785062] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 45843048] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45894973] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 46266551] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 46301707] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 46501742] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 46543335] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 46591249] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 46637404] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46685944] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 46945225] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 47027232] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 47080516] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47131696] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 47389660] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 47498151] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 47583112] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 47610907] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 47641873] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 47961110] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48014763] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 48294293] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 48340093] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48389165] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 48497265] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 48799214] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48867346] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 49207047] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 49244339] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 49283933] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 49311061] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 49340714] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 49593432] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49706324] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 49995708] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 50094528] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50144572] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 50201481] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 50571909] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 50614400] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 50652834] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 50801668] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 50851584] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 50936368] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50985838] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 51094910] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 51399296] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51449408] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 51699327] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 51784672] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51835088] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 51943014] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 52146330] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52197418] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 52270882] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 52368804] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 52404136] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52596509] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 52631822] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 52666486] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 52706119] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 52733472] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 52762289] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 52820351] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52871078] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 53117298] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 53185359] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53234430] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 53499315] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 53565368] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53613786] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 53723718] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 53891217] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53979197] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 54011554] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 54045977] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 54085933] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 54114562] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 54144671] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 54347041] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54395200] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 54457171] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 54551342] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 54604070] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54777464] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 54929290] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 54981833] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55154049] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 55309853] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 55342631] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55396179] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 55430883] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 55655929] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 55770389] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 55811171] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 55839019] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 56042690] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56092768] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 56225401] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 56279935] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 56314473] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56569168] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 56639956] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 56687907] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56737970] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 57080450] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 57114214] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57168647] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57328162] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 57416936] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 57490304] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 57518706] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 57546876] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 57775204] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57908722] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 58043484] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 58236449] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58316136] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 58355306] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 58425336] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 58459027] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58743061] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 58803176] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 58838631] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 58878119] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 58904547] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 59128776] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 59251298] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59301748] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 59684849] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 59718087] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59769231] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 60057376] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 60118394] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60171158] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 60203590] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 60240610] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 60523557] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 60580376] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 60617804] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 60661997] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 60823547] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 60852856] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 60930912] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60979367] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 61081353] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 61336772] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61433570] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 61539904] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 61806978] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61918164] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 62291048] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 62337427] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62386724] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 62748614] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 62806354] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 63048492] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63132093] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 63247424] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 63475965] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63560139] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 63677406] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 63900204] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 63943293] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63994962] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 64027297] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 64057862] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 64083458] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64135032] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 64370615] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 64439039] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 64480562] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 64506369] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 64535220] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 64580382] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64867755] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 64973332] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 65215618] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65313655] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 65416995] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 65630064] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65752444] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 65859936] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 66098524] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66193686] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 66302054] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 66494848] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66545757] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 66646976] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 66694475] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66744462] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 67005284] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 67047168] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67094410] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 67147033] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 67401553] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 67433296] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 67461586] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67517796] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 67559562] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 67593302] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 67740971] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67808309] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 67843712] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 67877973] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 67921247] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 67946840] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 67975505] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 68024787] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68194256] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 68315550] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 68356034] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68404484] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 68623994] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 68685889] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68738141] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 68845985] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 68888803] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69062178] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 69178124] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 69222687] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69271026] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 69495044] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 69556002] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69604565] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 69715319] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 69761928] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69942318] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 70053851] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 70085626] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 70114087] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70165498] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 70199099] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 70364834] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 70390181] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70436300] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 70471230] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 70504025] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 70542365] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 70567726] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 70594100] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 70641139] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70824828] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 70903511] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 70975858] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 71017236] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71067008] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 71298836] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 71342855] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71394496] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 71496134] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 71680885] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71727830] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 71827817] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 71869844] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71916307] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 72151967] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 72193897] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72243304] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 72348479] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 72384415] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 72549477] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72604016] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 72637586] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 72668961] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 72696065] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72747158] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 72780489] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 72812865] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 72973364] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73026918] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 73061196] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 73094138] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 73132467] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 73158307] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 73186293] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 73249278] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73432009] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 73542174] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 73588474] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73637173] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 73894926] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 73937904] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73987576] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 74092493] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 74131655] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 74325882] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74376055] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 74483741] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 74527537] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74577973] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 74823470] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 74868685] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74917618] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 75151088] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 75203945] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 75232882] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75285755] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 75318586] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 75350874] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 75377630] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75430057] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 75596677] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 75644514] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 75673673] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75728518] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 75761052] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 75794673] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 75832451] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 75858758] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 75885963] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 76077937] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76142031] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 76248344] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 76301893] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76483901] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 76593971] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 76640478] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76692577] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 76947547] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 76981694] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 77011468] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77070828] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 77104465] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 77138012] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77167494] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77353869] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77386568] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 77422716] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77449651] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77501805] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77534741] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 77569522] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 77609403] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 77769499] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 77799719] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 77851157] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77901115] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 78002990] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 78050143] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78238632] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 78342123] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 78379579] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 78419702] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78473347] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 78727923] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 78778562] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78826726] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 79098067] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 79129732] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 79157177] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79209237] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 79242399] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 79274989] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 79314537] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 79341894] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 79371685] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 79431675] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79715784] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 80082873] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 80128819] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80185458] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 80452663] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 80494571] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80548885] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 80649631] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 80884125] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80972147] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 81257312] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 81324734] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 81360289] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81419901] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 81453493] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 81489297] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 81672675] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 81698986] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 81726904] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 81777701] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81825950] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 81926892] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 81971074] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82275488] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 82383927] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 82595008] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82678838] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 82784914] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 83051343] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83122904] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 83195536] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 83266263] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 83517117] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 83583371] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83675958] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 83840766] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 83912063] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 83971405] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84022479] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 84056320] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 84088960] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 84325582] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 84386260] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 84423855] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 84477040] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84528381] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 84776606] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 84856262] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84904364] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 85191210] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 85288590] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85337658] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 85601390] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 85716525] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85768142] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 85871263] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 86129013] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 86173188] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86227036] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 86260876] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 86472255] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 86555829] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86630514] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 86663965] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 86698940] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 86940948] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 87001018] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 87047198] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 87092150] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87140667] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 87478916] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 87519162] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87568259] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 87897828] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 87946854] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87995477] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 88351430] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 88392591] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88441547] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 88742367] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 88787784] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88835133] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 88897528] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 89200600] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 89248072] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 89276058] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89329644] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 89365296] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 89617028] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 89709157] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 89901597] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 89975863] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 90062572] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90113598] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 90370571] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 90437923] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90512125] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 90615049] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 90892367] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90992509] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 91297837] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 91371610] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91421971] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 91710390] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 91806079] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91854904] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 92152619] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 92206663] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 92249233] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92302644] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 92335757] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 92371077] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 92576684] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 92636898] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 92685604] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 92735688] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92788459] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 93180391] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 93223294] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93444175] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 93568801] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 93611559] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93663046] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 94020113] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 94054872] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 94084374] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94335265] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 94382270] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 94441584] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 94481801] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 94508686] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 94539075] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 94594086] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94894044] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 95190109] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 95231812] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95284686] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 95348403] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 95448583] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 95686465] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95727120] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 95836515] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 96142292] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 96190097] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96244815] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 96287519] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 96457028] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 96508621] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 96559650] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 96586728] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 96635036] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96683290] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 97056947] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 97096451] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97146432] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 97482998] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 97523359] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97572566] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 97906263] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 97945927] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97994986] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 98314134] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 98359686] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98408243] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 98730549] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 98770964] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 98798964] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98852384] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 98887904] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 99125347] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 99212815] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 99257161] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 99285920] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 99339323] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99636997] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 99961601] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 100059082] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100108170] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 100213811] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 100429965] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100480606] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 100583510] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 100630402] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100937242] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 101046011] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 101892455] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 101944022] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101987913] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 102333165] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 102374379] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 102403005] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102617078] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 102656607] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 102693572] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 102735000] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 102778067] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 102975755] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 103066535] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 103093783] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 103123174] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 103174126] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103225988] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 103588863] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 103635320] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103888946] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 104030936] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 104076620] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 104350431] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 104475591] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 104522904] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 104744044] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 104884931] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 104930499] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 104985962] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 105299667] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 105332509] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 105361493] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105419093] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 105603428] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 105669242] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 105712383] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105767029] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 105800424] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 105836538] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 106067591] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 106129719] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 106162107] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 106213386] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106262662] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 106597362] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 106639594] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106693296] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 106948648] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 107028615] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107077904] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 107153103] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 107426287] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 107482522] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107531670] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 107817188] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 107868306] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107918793] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 108206156] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 108254524] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 108309836] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108374519] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 108410096] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 108442134] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 108468756] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108524038] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 108751218] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 108829824] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 108870553] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 108905579] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 109122970] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 109225972] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109275167] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 109529636] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 109603865] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109654302] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 109775228] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 109963195] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110047889] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 110151885] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 110197392] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110486676] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 110613574] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 110825999] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110914390] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 111017879] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 111052850] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 111081956] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111310945] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 111357704] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 111389876] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 111417719] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111471241] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 111505866] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 111701424] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 111777352] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 111804044] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 111831819] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 111882692] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111933906] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 112236906] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 112277019] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112325089] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 112363617] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 112688150] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 112729780] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112778563] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 113118632] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 113161198] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113210813] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 113549231] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 113580399] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 113608847] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113661573] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 113854037] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 113904463] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 113977939] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 114003014] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 114031207] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 114076266] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114128523] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 114447667] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 114490674] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114541569] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 114882197] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 114924314] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114977556] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 115302018] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 115345906] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115394027] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 115706105] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 115755544] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115806676] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 116071248] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 116119849] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 116167301] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116221758] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 116258592] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 116295439] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 116476024] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116595854] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 116629350] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 116663191] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 116702660] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 116917201] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 116958480] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 117048405] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117098235] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 117208336] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 117389365] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117477371] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 117511517] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 117818699] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 117877368] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117927913] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 118239800] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 118281183] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118332860] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 118681651] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 118712786] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 118746664] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118799699] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 118965184] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 119010591] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 119042135] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119127764] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 119162069] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 119194952] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 119236300] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 119432282] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 119481786] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 119565747] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119616118] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 119905362] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 119987417] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120037402] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 120406445] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 120452152] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120506445] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 120807184] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 120850841] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120899236] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 121171887] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 121296400] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121344791] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 121592971] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 121653497] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 121687806] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121739244] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 121773316] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 121806758] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 122026874] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122124859] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 122158760] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 122192380] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 122231419] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 122257519] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 122286791] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 122557645] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122632811] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 122696868] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 122780717] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 122821542] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122874375] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 122975076] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 123014790] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123062089] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 123345061] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 123427819] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123477766] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 123584148] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 123875881] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123951958] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 124289467] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 124324648] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 124353329] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124408808] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 124443702] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 124661454] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 124738575] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124825349] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 124861776] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 125061588] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 125167108] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 125197774] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 125228087] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 125278730] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125331775] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 125645825] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 125691467] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125743294] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 126020920] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 126064690] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126115247] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 126404778] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 126481163] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 126514872] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126571560] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 126608861] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 126653038] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 126861577] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 126925972] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 126953423] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 127009634] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127062373] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 127336261] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 127381269] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127431105] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 127690035] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 127823179] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 127865419] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127915644] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 128258249] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 128291494] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 128320487] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128379499] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 128629987] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 128670206] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 128713057] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 128741736] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 128771318] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 128977626] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129062690] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 129163386] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 129203737] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129419315] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 129559125] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 129602288] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129653492] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 129933998] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 129960836] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 129985114] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130074771] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 130270317] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 130329380] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 130391036] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 130417628] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 130446268] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 130502202] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130554698] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 130957362] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 131213023] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131285788] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 131390607] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 131592648] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131677509] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 131782443] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 131815679] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 131844392] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132064242] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 132099741] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 132133259] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 132171581] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 132197177] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 132225472] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 132282276] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132504238] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 132643927] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 132684777] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132738180] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 133043189] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 133085323] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133135819] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 133404166] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 133493381] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 133536100] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133587487] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 133908249] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 133939196] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 133968589] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134023304] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 134183663] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 134231414] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 134291631] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 134330585] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 134359132] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 134417591] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134469447] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 134795482] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 134835907] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134887782] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 135176626] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 135216724] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135267228] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 135585319] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 135652368] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135702638] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 135997070] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 136053909] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 136089456] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136144292] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 136179382] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 136358612] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 136447009] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 136475445] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 136503418] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 136561452] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136613011] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 136974753] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 137025061] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137244687] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 137384601] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 137430456] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137482036] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 137769085] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 137841682] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 137884696] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137939990] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 138330573] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 138374744] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138613794] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 138772528] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 138812967] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 139016439] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139140452] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 139176107] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 139213701] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 139260197] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 139453094] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 139482227] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 139530317] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139581795] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 139883889] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 139966237] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140017483] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 140311784] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 140401179] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140450862] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 140765533] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 140846584] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 140910900] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 141117830] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 141185416] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 141244284] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141295061] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 141396280] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 141447742] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141668609] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 141802463] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 141851584] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142104898] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 142237518] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 142272979] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 142486221] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 142530295] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 142562018] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 142612002] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142664399] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 142934864] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 143039935] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 143081317] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143129787] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 143381208] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 143424205] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143474823] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 143584441] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 143769700] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143857187] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 143960871] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 144005613] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144197754] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 144340942] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 144372644] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 144401733] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144458089] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 144625359] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 144674985] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 144736714] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 144763561] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 144792604] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 144846765] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145024018] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 145180062] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 145222583] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145275405] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 145523380] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 145602532] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145655314] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 145921966] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 145968491] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146055102] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 146165124] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 146355969] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146432438] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 146486606] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 146591711] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 146762568] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 146809409] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146884661] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 146919932] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 146956405] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 146998964] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 147051837] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 147229832] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 147271691] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 147324283] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 147370084] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 147423020] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147475545] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 147647613] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 147731806] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147772109] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 147806831] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 147858972] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147910678] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 148064499] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 148159069] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148209167] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 148242854] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 148287842] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148337805] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 148378700] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 148568952] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148656775] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 148687991] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 148738021] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148791427] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 148961711] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 149001002] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 149029259] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149083533] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 149118202] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 149151098] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 149182832] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149243810] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 149418090] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 149452319] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 149485461] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149565594] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 149604322] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 149642175] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 149818704] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 149846727] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 149909379] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 149967983] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150017687] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 150054862] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 150108875] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150161590] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 150335066] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 150421112] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150469669] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 150506167] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 150690031] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150759917] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 150808376] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 150862846] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150916149] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 150952274] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 151141986] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151231585] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 151264695] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 151301152] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 151329047] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151383640] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 151419121] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 151587093] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 151639398] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151706216] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 151739107] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 151772268] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 151810855] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 151836962] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 152019453] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 152077535] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152126726] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 152159208] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 152210466] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152259565] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 152428042] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 152476635] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152559898] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 152590900] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 152635009] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152684838] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 152718025] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 152910386] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152994086] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 153026238] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 153057829] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153117712] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 153151883] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 153322266] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153402986] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 153445563] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 153484746] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 153522750] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 153551049] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 153714250] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 153803527] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153858481] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 153889782] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 153934996] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153984525] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 154015119] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 154065187] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154295168] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 154360474] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 154411239] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154461086] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 154632437] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 154704343] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154767916] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 154800600] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 154856396] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154905979] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 155075085] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 155109314] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155196148] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 155230474] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 155261513] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155314578] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 155347995] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 155521084] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 155580477] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 155622869] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 155651660] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 155722743] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155915950] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 155985433] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 156038464] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156089425] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 156123237] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 156181923] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156373400] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 156435548] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 156486507] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156537736] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 156568029] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 156774564] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156862178] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 156893984] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 156931829] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156984981] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 157019359] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 157058082] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157276642] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 157323266] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 157358943] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 157397644] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 157439966] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 157478740] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 157662993] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 157703543] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 157732106] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 157818510] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157868311] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 157897819] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 157948960] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158234198] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 158266551] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 158323123] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 158579545] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158630822] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 158663090] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 158714991] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158766025] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 158798583] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 159030768] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159092366] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 159123844] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 159164643] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159219436] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 159255141] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 159299338] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 159527583] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 159564071] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 159623260] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 159829805] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159884280] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 159921035] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 159969552] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160022276] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 160058448] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 160256856] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160308302] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 160335791] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 160379589] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160443099] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 160474668] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 160512689] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160704958] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 160740581] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 160770162] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160821707] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 160861788] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 160897958] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 160938874] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 160967276] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 161119787] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 161197170] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161241297] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 161279693] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 161335867] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161387515] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 161557752] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 161607410] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161659017] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 161694913] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 161744356] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161796386] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 161827547] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 162001049] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162046501] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 162080976] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 162118037] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162173562] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 162208871] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 162245416] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 162417861] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 162443858] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 162467839] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 162525848] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162580006] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 162613438] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 162665289] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162838693] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 162881717] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 162929525] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162985622] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 163018909] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 163073919] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163124947] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 163285784] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 163350182] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163401471] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 163431942] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 163467851] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163522533] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 163557992] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 163713364] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163775029] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 163804667] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 163840748] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 163886035] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 163913262] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 163942712] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 164014539] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164221802] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 164256232] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 164306131] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164360641] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 164393385] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 164454795] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164507500] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 164676137] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 164729826] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164787386] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 164822274] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 164863091] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164922489] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 164959599] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 165194140] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165249061] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 165451990] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 165489012] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 165565623] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 165592358] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 165621433] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 165682525] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165734033] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 165766277] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 166001764] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166135809] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 166308565] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 166399329] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166450312] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 166483765] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 166533992] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166585436] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 166808896] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 166938669] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166995079] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 167028655] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 167288307] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167363145] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 167398345] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 167432017] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167487919] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 167522693] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 167737143] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 167806004] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 167840145] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 167868564] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 168553291] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 168611675] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168656764] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 168693184] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 168743327] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168994218] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 169073674] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 169124344] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169175376] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 169207450] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 169258782] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169548694] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 169593809] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 169641033] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169692414] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 169917859] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 170020612] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170070183] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 170101066] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 170138858] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170410104] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 170466551] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 170701745] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170804468] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 170838981] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 170874132] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 170913473] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 170941242] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 171182189] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 171275651] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171327685] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 171364185] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 171421257] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171712603] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 171741544] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 171790384] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172011174] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 172077496] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 172136397] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172190487] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 172227446] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 172434662] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172538662] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 172572997] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 172607664] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172662687] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 172696450] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 172733853] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 172955089] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 173026359] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 173093184] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 173306804] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173372112] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 173403590] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 173453623] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173504032] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 173540682] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 173733219] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173781643] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 173808750] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 173853386] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173903955] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 173938118] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 173994273] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174324079] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 174361742] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 174400736] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174587742] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 174653782] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 174686588] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174739897] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 174772735] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 174806244] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 174844308] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 174870617] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 174898148] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 175100086] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175151109] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 175179794] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 175226089] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175276623] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 175435340] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 175499781] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175545384] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 175578209] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 175627286] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175682452] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 175715892] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 175885220] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175974620] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 176004657] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 176034613] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176094841] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 176131335] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 176292053] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 176343916] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 176370732] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 176398813] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 176461084] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176512144] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 176544831] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 176596410] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176651633] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 176686615] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 176908988] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176961318] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 176995818] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 177049570] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177264677] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 177304235] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 177343340] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177397003] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 177430420] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 177466287] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177724840] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 177759660] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 177794742] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 177833901] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 177860241] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 177891911] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 178153196] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178240913] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 178271107] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 178454536] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178518274] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 178578045] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 178634182] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178682720] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 178711464] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 178761342] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178819702] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 179016264] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 179112380] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179166607] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 179196866] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 179237426] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179292264] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 179476671] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 179541966] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179594854] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 179630317] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 179796361] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 179857206] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 179910231] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 179941214] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 179998019] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180048115] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 180077992] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 180132339] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180184407] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 180214514] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 180399287] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180484108] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 180516053] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 180700555] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180811959] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 180861661] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 180916212] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 180958259] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181009404] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 181216844] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 181306569] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181359257] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 181389664] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 181604919] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181689203] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 181724560] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 181754857] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181809688] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 181844985] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 182008139] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 182087961] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 182121148] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 182148646] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 182202613] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182260000] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 182451947] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 182544544] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182592713] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 182629058] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 182679065] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182851554] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 182894259] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 182975817] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183024312] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 183055124] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 183102568] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183291237] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 183357719] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 183392329] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183444268] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 183478995] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 183510085] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183564062] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 183738980] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 183773718] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 183814324] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 183841572] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 183870938] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 183927947] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183980480] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 184146481] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 184234396] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184280592] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 184311843] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 184357694] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184408829] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 184612253] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 184736434] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184786246] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 184815711] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 185000959] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185061568] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 185114426] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 185148791] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185202742] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 185238230] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 185269472] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185321926] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 185500668] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 185536258] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 185610586] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 185637142] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 185667983] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 185731507] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185927248] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 185992008] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 186040838] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186090413] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 186131610] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 186323905] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186397991] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 186444584] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 186497134] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186548288] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 186583497] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 186637943] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186690031] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 186865821] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 186900986] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186989324] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 187022085] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 187057859] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 187098393] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 187264748] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 187294058] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 187381387] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187431838] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 187465413] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 187651940] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187736621] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 187768045] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 187813357] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187862781] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 187894640] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 188077900] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188146317] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 188194579] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 188226475] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188278122] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 188312754] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 188469355] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 188517645] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 188541646] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 188594440] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 188661132] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188711231] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 188750433] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 188969516] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189055260] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 189088928] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 189137995] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189190865] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 189225033] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 189439808] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189521720] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 189558006] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 189591128] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 189645680] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 189680772] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 189909647] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 189996028] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 190023229] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 190052242] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 190116395] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 190316054] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 190399914] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 190472283] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 190705968] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 190777383] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 190827259] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 190878735] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 190912528] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 190946794] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 191229902] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 191263905] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 191294304] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 191343126] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 191393314] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 191428102] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 191612269] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 191696407] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 191732504] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 191766116] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 191819363] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 191857453] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 191891367] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 192090108] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 192132312] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 192162495] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 192226001] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 192404888] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 192448990] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 192505962] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 192556855] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 192591304] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 192629412] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 192682947] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 192719837] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 192763950] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 192963678] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 193057509] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 193092279] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 193137425] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 193165399] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 193357900] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 193442723] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 193499360] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 193530124] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 193718249] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 193798684] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 193833321] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 193885334] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 193936041] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 193965709] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 194019720] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 194205074] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 194236647] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 194316175] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 194366826] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 194400384] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 194575837] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 194617490] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 194673115] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 194707674] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 194757381] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 194807106] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 194839042] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 194889044] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 195107492] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 195176403] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 195255673] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 195308146] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 195340113] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 195504559] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 195559378] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 195615802] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 195649857] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 195699304] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 195748280] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 195778666] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 195992974] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 196080152] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 196110385] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 196168433] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 196362929] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 196446454] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 196477584] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 196511596] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 196553301] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 196580990] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 196745350] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 196791819] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 196868404] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 196903790] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 196949508] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 197002059] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 197032443] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 197265803] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 197315716] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 197346508] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 197380371] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 197421360] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 197448645] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 197614573] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 197742351] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 197792595] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 197824528] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 197869561] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198058956] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 198119088] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 198179214] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198229948] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 198269341] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 198305697] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 198344551] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 198505214] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 198568862] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 198623001] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198672557] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 198706094] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 198755545] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198941424] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 199016986] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 199065741] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199116749] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 199150806] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 199185559] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 199366440] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 199409540] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 199458246] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 199507742] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199557573] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 199590945] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 199787777] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199837798] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 199868631] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 199919633] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199971158] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 200004795] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 200040155] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 200079126] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 200115597] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 200144869] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 200346174] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 200417361] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 200464463] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 200518839] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 200701170] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 200746157] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 200829102] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 200884965] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 200918250] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201090989] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 201132598] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 201190770] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201227090] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 201274270] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 201323387] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 201356608] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 201392517] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 201442121] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 201661731] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 201737582] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 201786429] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 201817264] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201851667] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 202064830] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 202115233] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 202156032] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 202207515] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202257396] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 202289697] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 202510746] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 202588186] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202641747] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 202675247] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 202710843] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 202966958] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 203036574] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 203073519] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 203254997] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 203306939] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 203349426] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 203425615] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203477319] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 203509851] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 203561120] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203753057] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 203840411] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 203925232] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203980092] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 204240974] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 204310647] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204364648] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 204396834] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 204434840] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 204464949] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204731231] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 204787339] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 204823995] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 204863305] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 204891223] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 205145243] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 205252244] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205305799] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 205518810] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 205646279] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205699456] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 205734222] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 205937184] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206025094] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 206059014] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 206102415] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206153324] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 206188755] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 206355903] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 206409467] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 206436242] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 206464379] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 206529647] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206581653] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 206619486] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 206662148] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206880894] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 206923504] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 206962916] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207016724] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 207050234] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 207212139] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 207262932] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207354242] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 207385765] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 207421571] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 207459587] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 207488241] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 207516340] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 207712170] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207807072] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 207837616] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 207877355] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207930413] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 208095638] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 208134890] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208220953] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 208252806] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 208293560] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 208327939] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208503957] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 208549257] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 208580259] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 208657330] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 208685068] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 208713038] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 208792710] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208987617] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 209018666] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 209111527] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209166023] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 209197887] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 209399092] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209450742] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 209480695] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 209523928] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 209578484] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209629665] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 209663063] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 209894177] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209952920] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 209985646] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 210021108] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 210185759] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 210238631] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 210290264] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 210371995] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210425437] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 210458250] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 210517622] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210710886] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 210779417] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 210842592] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210893975] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 210932251] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 210998017] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211219924] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 211249006] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 211279497] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 211326939] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 211356348] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 211518595] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 211617675] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211672087] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 211701748] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 211744713] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211794331] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 211824423] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 212003557] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212086073] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 212123489] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 212178615] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212229091] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 212261874] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 212423461] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 212476971] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 212536091] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 212564194] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 212640395] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212690756] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 212724649] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 212939834] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213007010] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 213037813] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 213077295] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213259302] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 213297924] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 213371546] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213421548] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 213451097] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 213486428] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 213527232] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 213555255] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 213585450] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 213790571] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213873703] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 213905925] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 213944635] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213999618] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 214031502] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 214066186] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 214240865] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 214267087] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 214295302] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 214342724] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 214439686] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 214472787] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 214656547] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 214745093] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 214776394] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 214816906] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 214867588] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 215024152] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 215266139] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215318159] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 215501513] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 215591656] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215643694] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 215674373] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 215748853] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215960041] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 216002662] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 216037289] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 216078629] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 216104969] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 216135038] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 216184007] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216386451] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 216454907] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 216519053] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216570661] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 216602080] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 216799008] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216880577] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 216916157] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 216951143] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 216993347] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 217020802] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 217050764] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 217247638] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 217305003] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 217369433] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 217417699] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 217466866] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 217502601] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 217688133] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 217752409] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 217777744] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 217807157] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 217858213] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 217912615] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 218081445] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 218181340] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 218230882] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 218270016] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 218306527] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 218347530] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 218514315] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 218581713] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 218636822] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 218663311] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 218692646] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 218738949] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 218790979] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 218822015] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 219046993] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 219101024] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 219132631] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 219176074] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 219424732] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 219452473] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 219500520] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 219550092] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 219586300] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 219638690] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 219841794] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 219901667] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 219961449] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 220011327] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 220041718] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 220075776] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 220254128] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 220307156] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 220375003] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 220417055] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 220446492] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 220483713] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 220688150] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 220764698] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 220798990] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 220832116] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 220887468] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 220920542] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 220976628] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 221172772] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 221245032] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 221295145] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 221342893] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 221376267] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 221559109] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 221601710] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 221643911] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 221693395] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 221746275] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 221796269] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 221831520] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 222039153] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 222118895] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 222161608] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 222195739] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 222248905] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 222503756] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 222564259] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 222614740] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 222665562] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 222700330] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 222883260] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 222926412] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 222953310] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 222983950] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 223024583] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223075590] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 223108526] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 223158821] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223338424] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 223372830] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 223419902] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223463275] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 223499104] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 223682056] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223727144] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 223761208] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 223795608] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223846302] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 223878446] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 223928329] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223979402] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 224013798] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 224182018] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 224239455] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 224274159] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 224310684] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 224351725] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 224378708] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 224406615] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 224578121] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 224641299] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 224673334] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 224716329] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 224767578] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 224798662] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 224838674] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225014879] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 225057440] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 225104642] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225154865] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 225187215] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 225219388] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225268876] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 225303446] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 225492854] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225546662] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 225579136] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 225622177] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225672763] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 225705937] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 225754107] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225954382] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 225988962] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 226040964] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 226092170] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 226121394] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 226164513] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 226362488] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 226397480] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 226434534] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 226474338] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 226500130] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 226530395] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 226568348] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 226609841] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 226638232] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 226670590] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 226852369] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 226892594] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 226924823] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 226955708] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 227013369] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 227209110] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 227241760] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 227319119] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 227369554] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 227402232] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 227451271] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 227648241] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 227682340] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 227777736] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 227829047] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 227859224] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 227895681] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 228098391] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 228143866] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 228182144] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 228212443] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 228265887] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 228297869] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 228483812] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 228505206] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 228601284] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 228640608] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 228681803] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 228729052] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 228761794] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 228802199] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 228872687] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 229070895] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 229115086] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 229182839] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 229378649] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 229422745] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 229492859] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 229560784] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 229598532] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 229664905] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 229731205] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 229907077] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 229951633] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 229987606] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 230201757] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 230243998] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 230323909] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 230372423] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 230405057] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 230439257] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 230498188] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 230561322] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 230726732] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 230797987] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 230864011] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 230897400] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 230931636] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 231120406] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 231182449] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 231224530] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 231262792] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 231289520] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 231317536] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 231377412] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 231561724] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 231617992] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 231677126] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 231726893] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 231757571] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 231811163] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 231994858] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 232048463] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 232096185] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 232135578] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 232166925] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 232195077] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 232395698] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 232463948] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 232522927] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 232561900] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 232612267] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 232645928] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 232684130] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 232871189] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 232903570] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 232939477] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 232988371] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 233021402] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 233056111] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233106364] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 233270848] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 233324941] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233409470] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 233442299] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 233492339] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233669549] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 233715479] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 233766138] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233813055] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 233842543] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 233875856] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 233925690] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 233962149] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 234149571] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234209667] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 234250004] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 234305127] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234365029] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 234403298] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 234476288] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234673078] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 234711047] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 234755376] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234821820] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 234863418] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 235046824] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 235107214] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 235148475] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 235194987] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 235241224] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 235275678] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 235437021] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 235510205] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 235610617] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 235646894] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 235703637] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 235767832] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 235940279] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 236034431] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 236096994] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 236133646] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 236327724] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 236378181] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 236405956] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 236456002] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 236508532] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 236540338] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 236577488] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 236618102] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 236784802] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 236819095] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 237632234] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 237685702] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 237749476] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 237789522] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 237879115] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 238076801] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 238155845] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 238219855] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 238283422] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 238322096] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 238524767] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 238623758] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 238663337] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 238710776] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 238761373] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 238936080] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 238995874] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 239045295] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 239078021] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 239113368] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 239229096] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 239432067] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 239466247] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 239504794] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 239557979] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 239590747] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 239634375] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 239816981] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 239850040] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 239883255] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 239938159] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 239970650] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 240003838] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 240057555] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 240228689] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 240280568] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 240358762] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 240383941] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 240411565] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 240490433] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 240672651] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 240719787] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 240759560] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 240815686] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 240849468] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 240915746] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 240980273] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 241217429] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 241269962] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 241324847] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 241365273] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 241544261] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 241588348] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 241612710] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 241637952] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 241692661] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 241742214] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 241778107] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 241828963] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 242035362] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 242071970] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 242111479] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 242171374] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 242208742] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 242250248] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 242438191] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 242488702] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 242515722] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 242573409] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 242625687] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 242665449] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 242858316] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 242937258] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 242987211] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 243024685] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 243077241] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 243112635] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 243296833] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 243336092] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 243362947] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 243387303] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 243434306] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 243486620] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 243639294] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 243693941] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 243778056] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 243814723] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 243857968] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 243909960] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 243942180] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 243987687] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 244166179] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 244223961] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 244252074] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 244287927] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 244336400] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 244374768] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 244422144] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 244620516] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 244674082] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 244712781] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 244766129] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 244799259] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 244834569] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 245009546] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 245039119] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 245102210] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 245143887] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245193531] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 245227120] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 245263161] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245450840] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 245501123] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 245557677] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245610635] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 245643251] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 245675880] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245730488] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 245898238] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 245958827] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 246007698] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 246033842] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 246061695] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 247336356] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247398172] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 247438018] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 247483172] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247678045] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 247708436] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 247745250] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247797074] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 247829528] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 247862923] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 247915760] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 247950083] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 248003489] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 248176279] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 248198454] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 248223114] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 248266189] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 248316007] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 248476958] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 249411965] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 249454734] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 249494077] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 249531067] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 249579599] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 249613422] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 249648826] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 249819546] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 249845826] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 249880667] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 249924574] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 249975071] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 250009098] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 250044815] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 250216299] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 250272722] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 250310549] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 250353261] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 250387151] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 250421521] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 250471606] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 250505227] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 250674480] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 250728998] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 250760422] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 250790225] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 250842961] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 250877763] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 250910930] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251084899] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 251128276] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 251162432] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251214263] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 251248773] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 251284169] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251335366] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 251371608] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 251545075] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251590468] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 251621544] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 251651923] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251703604] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 251741162] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 251772452] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 251834034] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 251998660] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 252029424] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 252076019] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 252111220] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 252147773] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 252197271] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 252230819] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 252409503] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 252457571] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 252487817] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 252518058] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 252567851] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 252601137] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 252636210] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 252697961] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 252865734] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 252896029] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 252929432] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 252973042] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 253010612] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 253037123] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 253065759] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 253112396] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253300400] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 253325569] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 253364836] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253411983] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 253449128] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 253498693] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253548866] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 253712760] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 253763980] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253809874] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 253839076] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 253885629] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253935753] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 253965618] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 254136150] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 254163111] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 254188820] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 254235243] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 254284391] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 254315022] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 254361651] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 254412124] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 254561846] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 254645129] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 254688390] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 254718623] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 254767894] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 254816280] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 254847909] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 255050400] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255093981] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 255122313] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 255152095] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255204221] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 255238383] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 255274043] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 255301631] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 255469117] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 255516227] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255557201] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 255587996] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 255630034] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 255681560] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255731764] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 255893999] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 255940104] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 255981072] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 256008714] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 256060095] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256108262] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 256139142] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 256329964] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256378045] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 256405571] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 256456292] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256506246] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 256537762] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 256571583] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256757896] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 256786174] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 256815400] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 256839529] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 256865349] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 256916486] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 256965288] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 256997039] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 257179371] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 257221586] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 257249525] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 257298122] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 257347783] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 257379504] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 257440531] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 257644844] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 257705963] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 257767539] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 257830254] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 257868666] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 258154261] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 258233026] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 258271266] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 258311977] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 258579747] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 258647177] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 258687770] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 258719073] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 258753954] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 258997446] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 259092725] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 259131444] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 259192207] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 259406620] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 259486524] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 259564870] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 259625130] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 259884509] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 259987274] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 260046617] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 260087194] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 260315238] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 260361579] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 260392302] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 260423893] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 260476994] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 260633883] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 260682597] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 260731330] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 260772481] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 260820008] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 260868943] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 260899414] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 261097736] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 261168333] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 261211232] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 261258364] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 261308416] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 261338030] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 261538038] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 261609805] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 261653503] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 261688240] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 261713307] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 261740788] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 261801620] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 261854786] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 262021963] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 262075565] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 262156180] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 262188689] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 262257060] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 262451367] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 262477721] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 262506480] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 262533440] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 262562899] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 262627774] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 262668316] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 262701944] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 262872423] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 262925159] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 262955057] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 262993416] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 263046681] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 263080357] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 263240250] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 263280066] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 263307709] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 263359857] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 263405413] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 263437127] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 263484761] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 263535835] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 263708620] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 263746983] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 263793823] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 263837751] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 263894310] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 264073369] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 264119694] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 264211138] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 264262173] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 264314832] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 264347683] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 264403968] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 264604985] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 264656435] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 264711701] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 264764125] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 264795864] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 264832314] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 264985624] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 265041485] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 265115548] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 265166838] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 265196483] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 265249331] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 265436912] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 265488497] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 265540614] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 265581459] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 265627406] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 265675307] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 265718686] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 265883253] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 265937114] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 266027716] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 266083952] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 266116198] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 266273518] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 266360717] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 266410893] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 266486296] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 266535637] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 266571628] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 266830843] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 266880380] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 266918299] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 266954657] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 266994199] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 267144397] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 267187693] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 267306442] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 267355994] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 267385790] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 267434263] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 267632019] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 267693205] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 267741858] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 267796550] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 267829698] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 267864401] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 268043752] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 268070758] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 268100085] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 268169417] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 268219076] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 268256796] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 268327133] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 268389628] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 268573493] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 268682620] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 268741007] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 268915713] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 268963688] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 269003259] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 269030074] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 269058372] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 269141905] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 269193266] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 269374035] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 269433483] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 269486836] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 269518288] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 269553652] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 269594383] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 269622606] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 269652243] Running FIND.existing: FIND DUP . CR +[Hera] 1252562496 +[Hera] [HADES][TEST ] [KRELTSC: 269849718] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 269904568] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 269967885] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 1252896080 +[Hera] [HADES][TEST ] [KRELTSC: 270037123] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 270086717] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 270262149] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 270346979] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 270396659] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 270425967] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 270457931] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 270647925] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 270714521] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 270749313] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 270788647] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 270817381] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 270847229] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 270890832] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271076948] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 271139358] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 271188651] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271241471] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 271271968] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 271308557] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 271349756] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 271510290] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 271557139] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 271626682] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271676616] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 271708746] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 271746091] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271800250] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 271968555] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 272004067] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 272043223] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 272069542] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 272098417] Running LATEST.basic: LATEST @ . CR +[Hera] 1252643920 +[Hera] [HADES][TEST ] [KRELTSC: 272149779] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 272199833] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 272234957] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 1252683104 +[Hera] [HADES][TEST ] [KRELTSC: 272465896] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 272516277] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 272548903] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 1252683104 +[Hera] [HADES][TEST ] [KRELTSC: 272612624] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 272662539] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 272828306] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 272891881] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 272937942] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 272964742] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 272994599] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 1252897592 +[Hera] [HADES][TEST ] [KRELTSC: 273076737] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 273266873] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 273324505] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 1252898056 +[Hera] [HADES][TEST ] [KRELTSC: 273411913] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 273460941] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 273492917] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 273534730] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 273711661] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 273800496] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 273832296] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 273867172] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 273905047] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 273932037] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 273960899] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 274155689] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 274240334] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 274268933] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 274306809] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 274363703] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 274397797] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 274572725] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 274634254] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 274688629] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 274724893] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 274766334] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 274795509] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 274823316] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 275165331] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 275209349] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 275238630] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 1252902576 +[Hera] [HADES][TEST ] [KRELTSC: 275574353] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 275622094] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 275649571] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 275956110] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 276001189] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 276033299] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 276424276] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 276470929] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 276500816] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 276723506] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 276782459] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 276815260] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 276871487] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 276901657] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 276955443] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 276993064] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 277167034] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 277196053] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 277282322] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 277318141] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 277358000] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 277397172] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 277423762] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 277579487] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 277779716] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 277827789] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 277859277] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 278083936] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 278143691] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 278178496] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 278443875] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 278546136] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 278575194] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 278607842] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 278647416] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 278675476] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 278703530] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 278880130] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 278942189] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 278971396] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 279117963] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 279171750] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 279333512] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 279525591] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 279572092] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 279603035] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 279775502] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 279842352] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 279877202] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 279905911] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 1252908560 +[Hera] [HADES][TEST ] [KRELTSC: 279957327] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 280007427] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 280041322] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 280212981] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 280299646] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 280337286] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 1252653728 +[Hera] [HADES][TEST ] [KRELTSC: 280469781] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 280662714] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 280728305] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 280764623] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 280804146] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 280830617] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 280859966] Running CURRENT.basic: CURRENT @ . CR +[Hera] 1252908560 +[Hera] [HADES][TEST ] [KRELTSC: 280912987] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 281100451] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 281165031] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 1252905264 +[Hera] [HADES][TEST ] [KRELTSC: 281333135] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 281517669] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 281555945] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 281639225] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 281681929] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 281731656] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 281771528] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 281808700] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 281982517] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 282041499] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 282071981] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 282156665] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 282207538] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 282242690] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 282600380] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 282643270] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 282675863] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 282997155] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 283044269] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 283070696] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 283104915] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 283278430] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 283346924] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 283387654] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 283428594] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 283467628] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 283494102] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 283522565] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 283717347] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 283805898] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 283839501] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 283874905] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 283913404] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 283940065] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 283969340] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 284148427] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 284228216] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 284271203] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 284308844] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 284358276] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 284390390] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 284593045] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 284678170] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 284718297] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 284752597] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 284791779] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 284819543] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 284973552] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 285081263] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 285127654] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 285167728] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 285204558] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 285261119] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 285426137] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 285497899] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 285550138] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 285583948] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 285622552] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 285662117] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 285688530] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 285849963] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 285905318] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 285958152] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 285987463] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 286016019] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 286050589] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 286090666] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 286117835] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 286285035] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 286337726] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 286397056] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 286436107] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 286472476] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 286513381] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 286539485] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 286568362] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 286814853] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 286863514] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 286895856] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 286926834] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 286979567] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 287137173] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 287206735] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 287262679] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 287315865] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 287351037] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 287386074] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 287426170] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 287587396] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 287616604] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 287685663] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 287737555] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 287771614] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 287834579] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 287884087] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 288052924] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 288120833] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 288160833] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 288188324] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 288217395] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 288299720] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 288482843] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 288536858] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 288612235] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 288663293] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 288693898] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 288894388] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 288954638] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 289010503] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 289047215] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 289101781] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 289135591] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 289172158] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 289346535] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 289376745] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 289439084] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 289514145] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 289569124] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 289603035] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 289799698] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 289885229] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 289918156] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 289979328] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290029289] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 290061432] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 290239818] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 290314242] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 290341110] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 290369672] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 290419250] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290467325] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 290499851] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 290731115] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290794165] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 290825214] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 290858420] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290913739] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 290947438] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 291110708] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 291163070] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 291188984] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 291251638] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 291515917] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 291562845] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 291629242] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 291692182] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 291746028] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 291780350] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 291950709] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 292007709] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 292060430] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 292095116] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 292133968] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 292173285] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 292198491] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 292353312] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 292478496] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 292527645] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 292559227] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 292587906] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 292636712] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 292815243] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 292887487] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 292924791] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 292948891] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 292977573] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 293015232] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293063776] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 293097675] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 293325170] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293372473] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 293403725] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 293436759] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 293474840] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 293500985] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 293650735] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 293789518] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293839592] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 293869681] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 293914049] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 293948456] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 294144258] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 294211255] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 294245665] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 294284820] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 294309562] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 294337377] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 294545357] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 294620167] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 294658470] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 294690830] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 294723823] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 294771484] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 294807075] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 294975724] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 295003071] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 295090561] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 295123168] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 295156627] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 295196416] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 295224270] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 295253999] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 295596222] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 295645745] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 295676721] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 295847860] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 295880192] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 295968261] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 296001689] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 296036660] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 296075099] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 296101981] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 296259348] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 296396852] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 296447994] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 296480199] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 296707659] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 296756980] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 296815473] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 296873659] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 296905137] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 296957972] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 296994881] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 297034794] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 297224037] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 297316796] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 297357797] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 297398096] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 297429482] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 297458139] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 297739249] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 297790960] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 297828183] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 298041899] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 298098822] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 298155525] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 298232866] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 298295813] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 298479318] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 298510814] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 298619460] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 298666882] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 298699518] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 298851569] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 298894894] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 298984722] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 299017611] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 299054123] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 299079578] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 299108626] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 299327229] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 299432777] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 299479241] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 299550033] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 299599502] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 299761248] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 299869677] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 299919082] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 299950937] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 300014900] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 300199723] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 300265451] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 300300213] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 300325512] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 300378098] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 300411380] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 300448351] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 300609740] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 300653155] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 300712755] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 300750869] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 300778310] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 300831227] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 300864134] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 301038066] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 301078945] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 301166932] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 301199092] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 301234252] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 301259429] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 301292934] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 301329946] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 301489094] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 301566485] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 301610221] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 301665294] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 301690882] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 301745969] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 301898661] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 301945937] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 302021765] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 302053283] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 302081565] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 302119147] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 302145184] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 302198879] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 302365855] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 302431833] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 302476318] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 302502500] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 302555622] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 302588533] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 302622180] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 302649991] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 302827028] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 302888607] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 302922087] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 302975317] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 303006725] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 303050328] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 303070281] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 303235085] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 303289165] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 303322071] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 303355222] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 303393559] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 303421114] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 303449090] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 303551693] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 303738968] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 303770958] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 303900299] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 303958343] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 304127186] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 304167934] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 304221557] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 304273613] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 304311364] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 304347010] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 304373823] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 304551939] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 304658415] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 304709589] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 304742160] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 305546836] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 305607963] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 305651086] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 305684177] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 305840759] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 305882785] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 305969315] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 306002628] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 306037154] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 306075544] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 306104057] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 306267627] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 306382245] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 306432175] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 306461095] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 306512888] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 306564061] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 306736333] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 306797618] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 306823940] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 306877373] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 306910358] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 306944882] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 306971767] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 307135370] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 307222122] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 307270488] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 307300773] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 307349612] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 307398117] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 307431032] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 307463718] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 307497680] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 307715975] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 307751044] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 307782443] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 307822531] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 307855801] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 308019680] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 308131911] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 308181632] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 308210471] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 308297842] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 308489774] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 308549957] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 308584730] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 308616873] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 308669448] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 308701370] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 308870427] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 308898393] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 308945279] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 309042347] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 309092422] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 309121828] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 309198267] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 309383174] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 309420445] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 309485817] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 309512954] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 309564873] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 309597073] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 309767495] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 309829891] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 309869636] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 309897571] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 309969186] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 310035906] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 310223024] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 310288516] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 310324840] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 310352460] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 310404589] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 310437360] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 310472017] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 310628788] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 310657071] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 310771621] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 310821627] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 310852983] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 310886985] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 311034355] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 311102013] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 311169670] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 311202824] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 311241253] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 311266377] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 311294966] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 311540276] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 311623338] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 311654173] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 311733238] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 311910649] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 311955530] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 312027596] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 312086311] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 312125570] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 312225976] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 312277056] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 312445111] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 312481426] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 312542391] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 312572200] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 312810437] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 312884056] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 312932434] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 312962049] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 313035586] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 313219962] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 313277893] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 313339371] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 313387450] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 313419127] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 313504242] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 313698871] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 313750073] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 313783705] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 313822085] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 313848229] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 313875572] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 314116225] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 314197005] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 314225816] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 314276340] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 314324429] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 314356105] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 314600421] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 314655176] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 314686537] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 314719612] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 314746510] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 314773766] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 314980250] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 315064199] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 315092546] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 315139829] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 315188879] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 315220107] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 315418535] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 315521563] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 315568780] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 315600013] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 315633570] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 315673006] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 315823394] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 315866462] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 315978611] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 316027409] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 316058312] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 316091116] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 316254043] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 316312955] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 316373774] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 316408189] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 316433805] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 316462435] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 316544735] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 316728004] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 316785420] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 316826312] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 316853532] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 316905717] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 316937445] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 316971967] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 317145381] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 317174729] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 317236514] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 317340239] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 317388609] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 317420846] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 317671092] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 317727718] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 317758081] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 317830241] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 318017171] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 318049756] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 318119411] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 318145608] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 318173555] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 318251306] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 318456131] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 318507643] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 318564999] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 318645386] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 318694989] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 318847495] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 318935881] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 319018153] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 319049208] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 319083653] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 319122754] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 319149719] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 319320751] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 319452078] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 319500270] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 319531102] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 319755772] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 319833495] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 319862362] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 319929748] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 319979160] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 320009009] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 320247449] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 320300211] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 320331625] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 320364606] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 320389353] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 320417203] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 320623706] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 320707861] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 320736579] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 320814779] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 320857752] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 321028565] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 321081445] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 321174174] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 321223263] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 321253331] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 321328839] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 321528122] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 321578428] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 321611451] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 321649452] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 321674593] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 321702044] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 321943916] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 322022989] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 322054191] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 322128039] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 322178924] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 322348304] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 322387434] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 322441801] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 322471251] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 322551568] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 322601198] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 322767381] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 322879445] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 322927422] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 322958943] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 322991908] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 323031102] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 323058405] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 323221923] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 323320514] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 323369355] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 323398542] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 323466205] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 323662748] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 323737668] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 323776789] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 323843810] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 323893451] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 323924324] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 324127536] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 324211408] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 324241937] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 324275280] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 324301515] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 324330512] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 324538883] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 324615043] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 324654308] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 324724385] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 324773111] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 324803148] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 325016064] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 325096815] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 325126694] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 325190084] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 325239956] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 325399325] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 325448111] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 325520415] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 325547272] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 325575587] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 325681259] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 325870390] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 325922134] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 326009555] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 326059137] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 326089289] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 326317093] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 326399863] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 326428044] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 326460377] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 326486824] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 326514717] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 326726384] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 326789536] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 326838056] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 326903778] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 326963301] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 327155944] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 327210217] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 327288274] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 327336641] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 327367167] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 327402529] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 327579400] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 327639619] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 327668397] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 327753247] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 327808666] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 327840428] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 328083841] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 328132281] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 328167846] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 328201421] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 328228641] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 328258122] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 328465330] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 328514681] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 328547911] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 328621654] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 328671055] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 328702021] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 328884174] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 328927798] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 328953669] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 328982805] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 329079738] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 329114298] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 329165000] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 329194883] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 329437560] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 329495458] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 329525470] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 329560840] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 329587606] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 329749231] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 329861678] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 329912306] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 329941010] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 330165861] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 330230904] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 330281499] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 330314661] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 330353966] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 330379582] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 330408405] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 330677139] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 330740558] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 330768178] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 330842189] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 330901262] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 331069250] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 331211917] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 331257554] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 331306188] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 331467944] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 331582690] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 331638211] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 331669136] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 331748090] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 331936729] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 331982944] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 332038596] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 332064926] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 332092464] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 332182405] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 332373784] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 332414487] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 332519096] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 332567955] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 332597075] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 332817729] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 332931298] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 332977106] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 333067366] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 333252841] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 333297659] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 333396872] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 333446819] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 333477273] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 333651173] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 333725987] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 333767338] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 333808724] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 333848809] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 333876289] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 333905137] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 334152528] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 334202838] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 334238367] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 334301163] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 334352249] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 334522121] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 334659326] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 334708812] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 334743052] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 334783350] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 334951650] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 335039959] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 335072207] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 335108970] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 335138691] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 335191286] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 335227089] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 335385229] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 335440256] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 335467957] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 335530430] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 335608607] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 335661499] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 335828933] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 335936389] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 335989049] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 336039731] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 336073262] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 336269454] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 336355015] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 336387089] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 336425375] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 336455775] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 336510555] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 336543498] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 336712965] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 336774338] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 336832199] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 336865873] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 336898322] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 336927861] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 337120419] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 337153925] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 337224759] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 337262567] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 337291752] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 337319715] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 341508511] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 341578692] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 341614780] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 345859085] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 345945066] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 345980629] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 350248179] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 350298899] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 350331324] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 350367810] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 350407333] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 350437830] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 350597713] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 350699695] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 350751615] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 350786348] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 350827515] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 351003176] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 351048498] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 351130865] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 351183455] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 351215874] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 351255003] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 351296693] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 351327848] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 351494831] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 351716522] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 351903977] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 351942141] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 352138551] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 352190262] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 352360911] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 352490698] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 352541447] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 352575767] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 352801998] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 352888985] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 352921885] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 353011395] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 353065041] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 353231463] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 353321458] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 353373418] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 353405727] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 353463851] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 353520990] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 353684337] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 353758130] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 353789205] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 353842492] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 353876002] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 353912669] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 354088752] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 354113374] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 354156599] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 354236596] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 354265196] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 354313932] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 354348067] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 354556015] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 354619425] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 354674515] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 354707237] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 354758369] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 354913666] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 355009607] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 355039480] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 355096430] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 355124009] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 355173895] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 355209375] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 355378493] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 355454824] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 355494636] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 355655251] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 355897438] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 355944189] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 355993384] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 356283539] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 356319390] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 356364047] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 356403451] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 356433852] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 356462271] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 356500979] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 356650605] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 356691595] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 356766880] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 356796014] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 356824855] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 356862121] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 356890374] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 356918797] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 356954932] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 357123892] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 357176164] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 357224267] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 357251224] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 357280250] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 357315505] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 357342545] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 357370415] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 357545508] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 357579550] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 357638753] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 357675076] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 357704200] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 357732221] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 357769680] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 357798506] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 357828055] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 358002681] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 358076980] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 358117143] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 358152198] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 358192739] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 358219243] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 358255548] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 358466033] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 358541776] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 358653780] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 358693173] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 358864075] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 358892625] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 358953558] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 359016021] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 359065160] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 359287519] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 359396942] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 359431650] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 359471509] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 359496934] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 359525653] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 359723042] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 359787439] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 359920752] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 359956356] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 359996701] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 360159311] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 360187470] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 360280350] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 360328933] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 360433740] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 360633890] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 360718269] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 360832823] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 360868236] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 361049757] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 361077472] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 361139169] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 361200424] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 361250596] Expected: Should print: 3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 361504079] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 361563965] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 361613384] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 361639727] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 361668358] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 361718341] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 361912678] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 362055409] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 362088710] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 362132465] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 362161653] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 362319512] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 362411083] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 362459493] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 362550097] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 362757155] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 362818474] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 362868179] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 362894343] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 362922610] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 362975492] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 363026284] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 363305598] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 363340346] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 363379945] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 363406533] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 363435248] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 363623791] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 363707256] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 363813056] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 363847788] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 363886373] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 364051271] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 364080999] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 364181528] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 364231836] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 364342780] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 364508491] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 364578189] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 364608790] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 364637160] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 364697656] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 364752223] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 365031776] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 365064710] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 365107377] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 365134866] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 365163006] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 365340136] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 365407661] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 365545515] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 365580773] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 365619991] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 365647901] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 365821683] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 365904330] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 365955043] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 366057381] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 366219804] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 366272777] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 366327480] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 366362375] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 366408451] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 366457195] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 366693113] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 366774212] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 366850404] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 366876354] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 366905270] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 366952710] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 367139288] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 367276289] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 367309629] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 367349335] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 367376344] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 367557607] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 367624949] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 367692695] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 367800698] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 367835418] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 368003526] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 368054171] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 368105395] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 368155761] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 368205263] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 369252003] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 369351237] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 369385643] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 369431261] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 369536003] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 369709934] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 369785708] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 369809952] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 369836801] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 369886578] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 369936706] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 370224419] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 370266743] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 370314134] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 370417056] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 370588724] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 370626133] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 370652262] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 370678613] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 370725021] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 370769636] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 371004187] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 371046695] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 371087095] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 371190144] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 371224617] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 371264359] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 371415030] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 371455404] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 371502093] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 371545213] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 371652256] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 371707226] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 371887438] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 371986790] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 372021343] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 372067470] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 372094222] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 372123074] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 372309197] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 372366657] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[38;2;255;165;0m[Hera] [HADES][INFO ] [KRELTSC: 372457203] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 372513417] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 372548036] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 372588336] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 372616137] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 372776558] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 372838487] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 372887581] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 372993775] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 373028031] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 373079717] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 373240497] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 373268193] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 373330115] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 373380583] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 373653212] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 373718110] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 373762061] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 373804551] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 373842761] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 373884300] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 373912271] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 373940330] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 374155153] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 374242398] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 374281395] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 374320221] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 374504643] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 374534830] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 374587246] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 374692236] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 374756036] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 374933890] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 374980698] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 375029000] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 375068198] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 375108634] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 375189954] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 375418390] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 375468940] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 375520133] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 375568339] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 375602603] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 375638301] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 376195163] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 376276575] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 376318765] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 376361567] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 376408789] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 376443884] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 376478969] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 376780254] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 376844055] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 376891727] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 376937812] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 377106640] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 377186190] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 377219912] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 377336041] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 377512217] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 377557042] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 377623203] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 377661537] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 377690762] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 377718552] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 377976918] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 378064042] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 378102659] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 378139916] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 378178721] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 378206104] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 378235635] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 378522078] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 378570622] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 378604877] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 378638621] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 378679056] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 378844285] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 378886691] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 379282459] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 379333750] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 379365281] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 379403675] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 379444116] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 379487500] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 379523685] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 379564575] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 379721383] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 379761334] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 379872569] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 379923476] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 379960873] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 380132676] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 380172633] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 380226717] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 380263623] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 380343796] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 380395261] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 380552688] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 380602245] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 380673539] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 380705918] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 380737274] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 380810408] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 380984602] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 381035551] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 381122692] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 381174730] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 381213082] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 381247941] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 381287487] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 381435358] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 381472701] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 381584529] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 381634039] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 381665122] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 381699169] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 381888381] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 381947818] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 382002531] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 382080026] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 382130217] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 382311943] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 382346363] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 382400415] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 382448477] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 382477572] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 382534414] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 382589992] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 382632456] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 382803659] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 382880081] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 382907162] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 382940228] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 382969027] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 382999828] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 383162613] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 383229705] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 383300607] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 383339867] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x000000013dfc3ee4, 0x000000013dfc3ee8) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] Artemis: genesis signature stamped +[Hera] virtio-input: found device +[Hera] virtio-input: driver ready +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 388636892] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 389847220] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 390036672] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 406799911] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 420820668] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 421599258] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 425397893] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 431022286] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 1430002182] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 1588 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=202 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261006-203230/riscv64/qemu-riscv64-20261006-203230.log b/logs/20261006-203230/riscv64/qemu-riscv64-20261006-203230.log new file mode 100644 index 00000000..99d94485 --- /dev/null +++ b/logs/20261006-203230/riscv64/qemu-riscv64-20261006-203230.log @@ -0,0 +1,9188 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdeec740 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 6 2026 20:31:54 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250848 + Free pages : 250196 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 83886 cells (5242 KB), 50 VM slots +Switch-signal: 50 slots +Kernel-Hermes: 50 channel slots +Kernel-Hermes: 50 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0x0000000080267000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 2908920] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 43945146] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 97418034] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 98740698] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 100086441] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 106369242] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 109482618] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 110881764] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 111803202] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 112935963] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 125612613] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127511013] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 131402670] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 138241656] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140303037] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 144147045] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 146163318] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152767986] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 156254721] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 157939866] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159566967] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 169426341] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 171167598] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172919019] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 182301945] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 183470028] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 184526475] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186393711] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 187604634] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 188878494] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 194338977] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 196038969] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 196992096] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 198590616] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 200316816] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 203369670] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 209077743] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211595769] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 214738545] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 216501831] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 218168076] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 226428678] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 228324348] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 230099373] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 240902214] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 244860042] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 246608565] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 248341548] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 256349436] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 258004698] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 259720020] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 262712184] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 268602894] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 271952919] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 275213883] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 282344097] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 284100642] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 287288988] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 289103871] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 290778180] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 299316234] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 301273959] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 302925903] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 304595697] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 313353054] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 314931477] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 316746570] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 319792116] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 325314738] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 329020524] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 332111073] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 333601548] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 335295093] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 343914375] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 345714369] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 347427843] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 350586537] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 357618072] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 358602594] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 360468423] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 361594884] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 362819184] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 364154679] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 365112321] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 371519988] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 373162713] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 374881311] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 377934858] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 379485939] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 386917083] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 390156102] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 391614048] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 393163512] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 398852286] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 403674411] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 405167784] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 406852950] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 416288166] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 417396777] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 418585503] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 420360570] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 421465926] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 422454606] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 423560970] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 430938081] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 432060930] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 433260849] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 434539434] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 435407763] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 436369626] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 443443770] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 445874121] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 449900199] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 451518396] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 458971947] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 463082088] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 464830275] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 466710972] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 476097615] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 477223488] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 478386720] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 480289320] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 481523490] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 489550698] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 490702485] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 492520686] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 493628079] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 494858511] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 496285545] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 504442680] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 505397760] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 506959551] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 508710573] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 516608463] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 517922832] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 519723456] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 521370528] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 524699595] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 532746039] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 534677703] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 544638339] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 545492409] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 546446292] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 547964802] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 549353259] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 550731783] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 551911080] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 553855386] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 560030646] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 561495501] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 562454487] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 564667446] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 565970727] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 567287175] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 568800057] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 577470852] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 578666718] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 580268661] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 588861294] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 592539969] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 594233577] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 596167803] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 605164203] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 606614862] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 608479662] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 617854314] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 618881697] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 620317887] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 621399072] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 622527339] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 624335061] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 626285940] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 635292798] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 636723360] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 638703156] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 641705736] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 649897521] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 651568890] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 653514939] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 662067042] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 663066684] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 664560876] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 665581917] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 666672363] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 668651571] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 670626222] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 678641208] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 680474193] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 682438008] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 691112247] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 692120709] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 693456897] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 694506225] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 695522079] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 697213524] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 699000015] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 707229390] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 708827469] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 710725722] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 714258657] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 721447272] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 723173010] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 726567492] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 727806723] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 728907984] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 737887584] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 738890586] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 740206488] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 747787236] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 750146355] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 751000005] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 752688615] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 754669587] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 755934396] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 767347077] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 768799311] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 770795130] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 782073348] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 783733251] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 785742384] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 795492684] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 796780173] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 797997144] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 799886199] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 806830626] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 807760548] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 808981026] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 811085457] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 812255325] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 813572802] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 815036271] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 821843001] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 822923661] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 824511450] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 825455232] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 826509999] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 828416778] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 830225256] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 840980385] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 842310630] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 844186413] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 853180188] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 854599200] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 856580403] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 859435731] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 867740223] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 869393364] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 871231053] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 874935579] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 881045991] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 882344883] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 884034795] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 885403323] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 886673907] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 888105267] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 889089180] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 897040851] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 898394742] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 900284574] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 903698544] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 911344560] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 912860214] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 916237014] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 917404467] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 918344217] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 926605155] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 927665151] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 928890606] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 930451557] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 931508655] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 932639295] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 934398633] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 943461981] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 953562225] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 955121601] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 956947866] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 959351043] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 968320542] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 969237864] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 970037712] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 972215727] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 973582008] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 975003099] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 976513146] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 983559360] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 984605370] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 986214495] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 987265692] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 988368948] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 990372852] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 999842634] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1002875307] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1004437098] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1006184991] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1016643600] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 1018459638] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1020350289] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 1031086434] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 1033042542] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1034925990] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 1045899414] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 1047685065] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1049438166] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 1058946189] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1060740513] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1067505369] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 1069256958] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1073411493] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 1074618867] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1076683272] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1084907628] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 1086596721] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1088621247] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1089969132] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1091341587] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1099787787] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 1101104109] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1101965634] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 1103750781] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1105521900] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 1115624370] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1117140864] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1119132063] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1129101162] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 1130156937] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1132221888] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1133564103] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1134882882] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1142524026] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 1143328305] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1144202598] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 1146226998] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1148013762] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 1151430567] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1153033371] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1154893404] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1158414810] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 1160222805] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1162198653] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 1165213875] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 1173756906] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1175415255] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1177239252] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1186849041] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1187981718] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1189411587] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 1190453544] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1191582798] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 1193507658] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1195475085] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 1204876155] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1206537885] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1208462577] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1218338625] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1219385832] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1220799594] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 1221789114] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1222802532] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1224651960] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1233441300] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1236728850] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 1238512128] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1245776406] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 1249378578] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1250714031] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1252271412] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 1253313243] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1260251496] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 1263261720] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1264953879] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 1267229313] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 1277565471] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1278983181] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1280864319] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1289714664] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1290738582] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1292115867] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 1293204318] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1294316730] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 1296601971] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1303422561] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 1308283557] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1310523669] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1318654470] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1322699343] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1324065750] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1325504712] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 1326459729] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1334160513] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1336751241] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1338560727] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1346997561] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 1348634280] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 1350591396] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1352546013] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 1354602816] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1361234280] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1363773054] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 1364775657] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1365945672] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1367992458] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1369789197] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1379095305] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1380755313] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1382748507] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1393934787] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 1395679446] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1397453316] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 1400731500] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1407713223] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1408907031] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 1409967237] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1411108440] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1412822439] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1421485464] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1424867325] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1426527039] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1428254037] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 1437045120] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1439424861] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1440760629] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1442345982] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 1443365763] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1451763306] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 1453613070] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1455422703] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 1465821987] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1467297951] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1469126316] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1472671746] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1480747086] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1482216204] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1485536472] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1492324281] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1494993612] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 1497280995] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1500242352] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 1501448781] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1510506480] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1511511708] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1512768474] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1514169216] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 1515181206] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1516201407] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1525648341] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1527304086] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1530585945] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1538682684] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1540532112] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1543955091] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 1552433085] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1553917302] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 1557466008] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 1558711119] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1566904710] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1567899060] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1569062481] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1570659321] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 1571683932] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1572791346] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 1581552798] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1583049531] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 1584861999] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 1587702249] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 1596346983] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1598061591] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 1601438706] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1603290150] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1610486220] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1614056724] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 1615179027] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1617067347] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1623674451] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1626391662] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1627800006] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 1628762961] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1629804750] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 1632060423] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1639095465] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 1641984876] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 1643777604] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 1644935103] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1646583540] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 1647909438] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1655213427] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1656900084] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1659895461] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 1661120580] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1667639652] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1668818592] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1669966620] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1671264777] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 1672216434] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1673149422] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 1675406439] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1682861733] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 1686803559] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 1687958454] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1689610755] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 1690742487] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 1698204585] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 1699368972] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1701155652] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1702354521] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1703616285] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 1705012197] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 1711438428] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1712664786] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 1714588617] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1716267021] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 1719800187] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 1726585686] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1728627915] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 1729957635] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 1731208080] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1733137896] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1734419694] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1741470675] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 1742808417] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 1744384887] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 1745861607] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1747368588] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 1748351115] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1749465480] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 1756617198] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1758427146] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 1761536427] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1762951155] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1770568485] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1773757209] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1775157552] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1776803469] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1785179214] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 1786760997] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1788562251] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 1791633795] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 1799015778] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1801017015] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1802676876] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1806325773] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1813145901] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1815747948] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1819221201] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 1820362530] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1821428112] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1828649004] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1829923977] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 1831050375] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1831897725] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1833852426] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1835057028] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1836382380] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1843886163] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 1844776626] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1845764130] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1847195217] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1848857031] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1856617476] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1858112130] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1859873778] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1862931420] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1864391046] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1866200322] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1875473208] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1877398425] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1879786482] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1888540668] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1890526575] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1892804529] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1901608023] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1903701219] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1905927240] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1916225073] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1917892221] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1919517705] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 1921130442] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1931513241] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 1932887145] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1933763727] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1935572436] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1936823805] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 1937816496] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1938814605] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1947506022] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1948553901] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1949713857] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1951127094] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 1952038158] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1953050841] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1961010387] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1962751308] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1965820437] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1967259546] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1975661478] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1980156864] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1981599207] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1991236338] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1994132091] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1995589575] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2003607963] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 2007770982] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2009338359] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2011031085] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2019929877] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 2021453847] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2023205793] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 2026386243] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 2035244211] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2036974044] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 2040408993] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 2048700570] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2050238862] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2051902923] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2053083354] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 2054110821] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2060467248] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2063517435] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2064622224] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2065821030] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2067213414] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 2068104066] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2069114418] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2076733092] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2078405826] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 2094483636] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2096633826] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2097979632] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2106833946] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2109772497] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2111317089] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2112997971] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2116005318] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2124178434] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2125831512] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2133815901] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2135249529] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2136759744] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2139779103] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2141230833] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2149426671] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2153274795] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 2154480216] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2155492122] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2163490434] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2165728698] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 2166773994] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2167730985] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2169647424] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2170823928] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 2171866956] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2180573892] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2182162521] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2183338689] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2184523005] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2185910832] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 2193923193] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2195375574] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2197092303] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2198845320] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2209351704] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2210701899] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2212355817] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2215396953] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2222430231] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2224011720] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2227041726] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 2228341101] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 2230132989] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2239406190] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 2242450434] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2244011700] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2253729177] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2256761556] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2258290083] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2266198788] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2269045926] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 2270180997] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2271209976] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2273048106] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2274285090] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 2283432459] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2284301922] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2286147486] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2287328736] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 2293190487] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2295678546] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2297493282] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2298710295] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2299909164] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2301292014] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 2302209987] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2303208873] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 2310409731] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2312194059] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 2315457228] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 2316986007] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2324490630] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 2327806320] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 2329377099] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2331154581] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 2340055200] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 2341186029] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2342206566] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2344100136] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2345294721] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 2346394848] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2352092673] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2354989833] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2356031328] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 2357213859] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2358190884] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2360078469] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2365656006] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2367550479] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2368796073] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 2369730699] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2370734436] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2372377203] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2374127406] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2382646623] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2384537148] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2386739124] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 2394658665] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 2397133473] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2398431168] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2400227802] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2403368877] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2404961265] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2412112773] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2415631617] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 2416757091] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2417746863] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2423829282] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2426128761] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2427358437] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2428744752] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2429708337] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2430711801] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 2432333673] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2434086669] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 2442171438] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2443710213] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2445491895] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2448532737] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2455202400] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2456875932] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2459867865] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2461588122] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2463352899] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2472340437] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 2473478868] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2474511585] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2476414017] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2477612697] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2483669412] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2485611450] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 2486476167] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2487482046] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2489038797] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2490764514] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2499256389] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2500604568] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2502322074] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2505412392] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2506948353] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2514171723] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2517120375] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2518596738] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2520330792] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 2527680666] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2529677976] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 2530768464] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2531781525] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2533663650] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2534873670] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 2535947757] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2542672356] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2544772272] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2545948041] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2547131643] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2548536333] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 2549468334] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2550449979] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2557478469] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2559270546] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2562286650] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2563766541] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2570152683] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 2573338236] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 2574806766] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2576536683] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 2579558436] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 2580971883] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2588582346] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 2591668485] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 2592871449] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2593812438] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2602616499] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2604832881] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 2605780044] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2606739891] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2614966200] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2617478346] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2618459571] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2619862959] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 2620744434] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2621761842] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2623268655] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2630543433] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2634116100] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 2635548363] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2637278217] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 2647546230] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2648920176] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2650706163] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2660982366] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2662254273] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2663883033] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2666922783] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2674565628] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2676173493] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 2678299344] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2681072037] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 2687159475] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2688285159] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2690114931] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2691335514] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2692608408] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2694010284] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 2694962634] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2695954149] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2702781690] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2704404066] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2707379283] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2708803839] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2710691655] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2718299346] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2719801917] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2721570726] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2724757140] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2731133895] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2733365229] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2736440826] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 2738078574] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2739827853] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 2749693632] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 2750788110] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2751763035] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2753679978] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2758913115] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2761674825] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2762992155] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 2763903912] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2764899186] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 2766413958] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2768172183] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 2776902702] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2778311781] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2780026158] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2783031804] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2789879379] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2791589472] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2794629642] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 2795755851] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2796746169] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2804234601] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2806803279] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2807879340] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2809258368] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 2810176845] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2811138204] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2818668615] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2821385469] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2824249932] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2825638977] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2827400016] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2835590772] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2838147270] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 2839608261] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2841356238] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 2850998430] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 2852017077] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2852996328] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2854864173] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2856055293] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2863196343] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2865327045] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 2866117863] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2867049591] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2868604263] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2870341656] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2878709358] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2880052896] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2881759356] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2884759416] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 2886191595] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2895009012] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 2897953107] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2899313907] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2907196614] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2909998959] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 2911590612] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2913310659] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 2924317011] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 2925327930] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2926323813] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2928213687] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2935797123] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2938501713] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 2939692014] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 2940584115] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2941595937] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2943184587] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2951011539] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 2955117165] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2956462152] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2958182199] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 2968376523] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2969659014] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2971362345] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2980769862] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2982168756] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2983899219] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 2987132127] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 2992637508] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2995653864] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2997272271] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3000275544] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 3001404609] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3002377035] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3010652568] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3011825628] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3013057992] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 3014445882] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 3016112736] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 3023434827] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3025175349] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 3025974336] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3026948841] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3028638543] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3030390741] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3038485275] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3039929319] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3041791956] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3044780172] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3051384357] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3053151465] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3056119458] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3057621315] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3059378385] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3067598583] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 3069094959] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3070883214] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 3073969605] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 3079943664] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3081412005] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3083109687] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3084269769] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 3085351458] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3086310570] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3088175391] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3089378334] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3095895663] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3097237458] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 3098151168] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3099181554] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3100814010] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3102552180] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3110743125] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3112247271] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3114010914] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3117041256] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3118566549] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3125566500] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 3127734015] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3130033263] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3131515632] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3133275768] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3141424545] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 3142881798] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3144623034] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 3147723663] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 3154088679] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3155204892] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3156978216] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3158170680] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 3159206946] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3160149363] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3162023319] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3168114936] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3169710600] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3170995569] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 3171920199] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3172926897] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3174583629] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3176368188] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3184640445] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3186162945] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3187958256] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3191005188] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3197491500] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3199721532] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3202738203] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3204245562] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3206025375] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3214610826] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 3216148950] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3217912929] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 3221148987] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 3227425992] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3228536493] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3230318238] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3231545394] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 3232636512] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3233610009] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3239762925] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3241387989] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3242570226] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3243926952] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 3244820859] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3245821593] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3247355412] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3249082137] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3257533272] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3258951192] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3260672499] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 3261793647] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3271866717] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3273381762] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3275368593] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3278359644] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3284779638] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3286554537] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3289659177] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 3290785533] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3291776439] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3293631453] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3294788364] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3301637052] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3302927145] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 3303826323] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3304842639] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3306320325] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3308053161] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3316650204] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3318013839] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3319760178] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3322832814] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3329297706] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3330934194] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3333984150] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3335518830] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3337235706] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3345201888] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3346740411] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3348441915] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3351406002] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 3357886938] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3358867911] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3360619206] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3361796088] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 3362827482] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3363750075] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3365615610] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3366784953] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3374732445] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3376343985] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 3377192133] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3378210276] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3379917471] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3387747552] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3392189304] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3393758193] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3395485338] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 3402591654] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3405962805] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3407424321] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3409135821] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3419919741] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3421311768] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3423060459] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3431715504] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 3432768234] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3433687425] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3435557496] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3436772430] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 3437840721] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3438794058] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3446174067] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3447403806] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3448620609] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3450015219] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 3450919899] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3451935081] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3453612855] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3460659258] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3463705245] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3465218820] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3466946658] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3476350626] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3477635742] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3479373492] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3482400327] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3488758455] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3491479131] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3494554014] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3496109295] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3497881842] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3506925450] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 3507998865] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3508974924] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3510851127] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3512060664] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 3518284329] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3519166224] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3520999188] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3522158724] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3523393503] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3524807412] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 3525681600] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3526710663] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3534863724] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3536506407] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 3538436664] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3545355450] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3548176233] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3549819630] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3553009341] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3554305986] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3560289138] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3564175650] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3565817787] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3567547053] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3575567688] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3577551285] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3579269967] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3582346173] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 3583422759] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3584391300] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3591517839] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3592639260] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 3593695098] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3594620316] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3596434212] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3597591312] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3598769706] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3605110488] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 3606632967] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3607563036] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3609124995] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3610878705] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3613955268] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3620850828] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3622530618] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3625520451] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3626959749] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3628716420] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3637158588] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 3638234292] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3639238848] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3641114568] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3642333660] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3648541302] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3651040512] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 3651871314] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3652906488] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3654508242] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3656280306] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3665459343] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3666747210] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3668480046] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 3671198202] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3677107665] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3680282340] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3681958602] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3684872772] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 3686009418] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3691230438] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3695058864] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3696211449] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3697372938] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3698814273] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 3699710196] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3700735143] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3706303965] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3709468203] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3712435440] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3713887170] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3715637394] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3724758261] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3726205266] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3727968174] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3731046459] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 3737966862] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3739178562] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3741175053] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3742361658] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3743578545] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3749264400] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 3750674844] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3751687506] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3753363978] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3755100762] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3758108571] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3759603456] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3761399040] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3770644353] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3771896961] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3773561820] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3781150086] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 3782225055] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3783205419] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3785035926] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3786227970] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3787581966] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3788957277] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 3794780829] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3796245936] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3797860857] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3799750332] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3802902075] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3809664579] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3811283448] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3814373787] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3815831733] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3817587165] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 3825474345] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3827645472] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3829146279] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3830901501] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3840485628] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 3841894791] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3842833365] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3844706166] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3845957598] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3847141179] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3856287708] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 3857124768] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3858047760] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3859893093] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3861608940] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3871647003] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3873186912] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3874898664] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3883769127] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3885108969] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3886846635] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3889852239] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3891330891] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3898353879] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3901449006] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 3902635989] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3903623010] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3905703585] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3913034517] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3914211630] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3915626547] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 3916624614] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3917689335] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3919559070] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3927291396] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3930569181] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3932104995] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3933899718] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3942603420] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3944178819] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3945975579] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 3948392511] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3955418880] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3956987580] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3958785306] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3961799478] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3963436512] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3965214036] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3973405590] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 3974579490] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3975634446] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3977524950] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3978697044] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3985130352] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 3986532480] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 3987470550] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3988558350] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3990202461] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3991956486] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4000474590] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4001986485] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4003861596] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4007041353] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4013360505] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4015130385] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4018238973] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4019464113] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4020870399] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 4021825332] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4022812122] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4029903507] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4031788026] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4034734872] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4041470937] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4043704035] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4046741286] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4048293165] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4050206622] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4058584887] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4059819981] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4061348697] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 4062290799] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4063286766] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4064851833] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4071717930] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 4074675192] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4076540853] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4078050816] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4079751228] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4088518056] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4089966552] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4091703420] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4094771877] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4101063708] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4102827225] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4105855656] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4107349050] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4109101920] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4117395135] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 4118428902] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4119426864] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4121274444] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4122475182] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4123673295] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 4129794123] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 4131404592] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4132356228] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4133868522] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4135597704] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4143910197] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4146352602] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4147966872] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4151006118] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4152455664] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4159052520] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4162001676] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4163466237] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4165181496] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4173182433] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4174490334] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4176221574] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 4177781034] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4180905666] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 4182001719] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4188215976] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4189927791] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4191113325] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4192350897] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 4193761341] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 4195399719] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 4196703336] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 4204364808] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 4205315205] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4206394647] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4208106357] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4209864309] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 4211214441] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 4217679690] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4219891074] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 4221855603] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4224049158] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4226240193] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4232112717] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 4234455057] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4237740192] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 4239236904] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4245793923] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4249439817] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 4251013515] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 4253083800] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4255289640] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 4263633003] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 4265737287] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4267980381] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 4269371001] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 4275911493] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 4278474984] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4280848635] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 4282392723] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 4283783742] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4291711263] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4295972583] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4297457493] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 4298905359] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4304631261] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4308154620] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4309768491] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4311343134] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 4313110011] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 4318405623] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4320433488] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 4323654216] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4325903106] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 4327527540] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 4334058456] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4337710839] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 4339330821] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4341463413] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4350956001] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4353687471] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 4355769474] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4363179849] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 4366215315] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 4368247128] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4370512020] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 4377375807] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 4381237959] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4383503376] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4384944270] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 4392863538] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 4395991341] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4399376499] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 4407608457] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 4410470316] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4411776726] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4414169151] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4419606786] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4422933396] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 4424682423] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 4425868755] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4427125794] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 4429208616] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4437304494] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 4439815254] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 4441541937] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4443423369] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 4449081294] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 4451872719] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4454410947] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4455956778] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 4457998650] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4464461799] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 4466518791] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 4468492896] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4470193980] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4471349211] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 4472597115] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4479403173] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4480695870] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 4481753514] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4483602984] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4484791143] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4485972855] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 4487369397] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 4488248562] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4489276260] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 4491043599] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4497268209] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 4498331376] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4500987183] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4502706978] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4508384685] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 4511062017] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4512792543] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 4513954725] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 4515630798] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4517371257] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 4518518760] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 4526390547] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4528850487] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 4530016953] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 4531674021] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4537771938] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 4539718638] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 4541198991] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4543030527] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4544226036] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 4545287124] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4551101226] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4552718898] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4555008381] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 4556452845] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 4557450492] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4558458324] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 4560405549] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4567560018] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 4569900846] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 4571630784] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4573444197] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 4574608185] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 4581042312] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4583347104] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 4585124628] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 4586720880] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4588494246] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 4589595255] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 4596036060] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4598668368] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4600056342] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 4601283540] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4603160667] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 4604338830] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 4610029326] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4613997066] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4615220169] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4616642856] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 4618041687] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 4619488419] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 4625188050] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4626618885] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 4628606850] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4629614367] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 4631296929] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4633048875] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 4638170817] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4642132299] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4644554040] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4645620945] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 4661034630] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 4662860790] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4669933296] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 4671015909] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 4672694922] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4674457137] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 4675548675] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 4676824068] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4683538188] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4684737582] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 4686701439] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4688930295] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4690129689] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4691445549] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4692815127] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 4697875056] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4699200261] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 4702149375] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4703920410] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 4705161258] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4706779245] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4713451764] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4715194806] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 4717020525] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4718785533] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 4719945426] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 4721538717] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4727857113] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 4728832752] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 4730664036] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4732979790] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4734159864] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 4735269189] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4741517004] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4743600351] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4745060292] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4746461307] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 4747408827] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4748403555] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 4750366341] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4756620603] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 4759084680] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4760914347] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4762672971] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4764063864] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 4770520818] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4773431376] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 4774609224] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 4776469026] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4778246340] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 4779280485] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 4784961531] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4787825973] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4789255758] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 4790373945] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4792246389] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4793436585] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4798684170] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4800449493] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 4802313264] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4803623034] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 4805575278] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4807383966] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 4808538357] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 4815726153] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4818439101] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4819543995] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 4821356316] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4823113848] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 4828346103] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 4830936138] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4833447717] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 4834630983] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 4836300399] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4838073219] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 4843133211] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 4844722596] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4847817261] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4849022829] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 4850170605] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4852284864] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4857797868] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4858928529] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4861248399] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 4862409636] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4863385632] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 4865615055] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4871419077] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 4874350425] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 4876111695] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4878042309] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 4879199598] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 4881107595] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4888554993] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 4891185642] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 4893008862] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4894773345] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 4895888025] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 4901709897] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4905960129] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4907082096] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 4908182811] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4910036628] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4916881725] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4920024669] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4921584066] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 4922484630] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4923463167] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 4925260977] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4935168441] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 4936264263] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 4937843715] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4939624263] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 4940752887] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 4948422507] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4950922137] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 4952048325] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 4953716439] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4959972528] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 4961902932] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 4963999362] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4965746688] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 4966850469] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 4967998539] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4976052879] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4979239797] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 4980327534] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4982222112] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4988426793] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4990256502] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4992548001] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 4993459401] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4994458854] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 4996258302] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 4997825721] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5003910513] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 5005763322] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 5007763194] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5009467197] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 5010568416] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 5012219163] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5020758981] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 5022333330] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 5024105940] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5025837537] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 5026955745] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 5032850739] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5035389450] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 5036830050] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5038511226] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5040287994] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5041363278] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 5042579619] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5050495170] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5052890388] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 5054005803] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5055906345] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5062232049] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5064575145] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5066480412] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 5067441372] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5068437297] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 5070318540] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5077744182] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 5080023669] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 5081700309] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5083526280] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 5084735124] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5093356191] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5095913613] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5096995659] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 5098845171] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5105882607] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 5107653600] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 5109866370] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5111805426] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5112982560] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 5114137161] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5124404481] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5125641738] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5126948064] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5128353069] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 5129275809] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5135812983] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 5139145872] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5140865583] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 5141998428] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 5143651086] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5150199222] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 5151347061] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5154028005] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5155755906] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5156687697] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 5158225485] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5160088164] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 5161211097] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 5167756545] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5170675356] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 5171814963] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 5173310940] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5181884652] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5183675910] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 5184995172] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5186886411] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5188093218] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5194324758] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5195696310] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 5196647085] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5197762248] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 5199666171] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5201422464] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 5202518391] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 5209440999] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5213092395] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 5214199620] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 5215956816] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5223635634] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 5225574627] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 5227228881] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5229014385] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 5230179255] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 5231404983] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5240192748] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5242283445] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 5243399091] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5245334325] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5246516940] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5252718156] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5254027800] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 5255659458] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5257062321] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 5258996232] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5265114015] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 5267090997] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 5269155822] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5271040887] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 5272144080] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 5273928051] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5280485973] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 5281670142] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 5284422990] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5286190014] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 5287382583] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 5288630592] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5294994495] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5296919796] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 5298812568] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5300685558] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5301851919] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5303046819] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5304438930] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 5309385669] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5310779565] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5313555534] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5315272221] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5316302187] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5317921392] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5324307975] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5325335988] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5328150366] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5329854012] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5330902941] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5332490835] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5338653852] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5339672121] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5342399538] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5344200519] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5345228574] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 5346429480] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5353323024] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5355559797] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 5356645161] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5358489171] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5359661895] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5360842893] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5362260834] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 5367394914] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5368883646] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5371561545] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5373522315] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5374621455] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5376696927] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5383753662] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5385031617] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5387176914] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5388924681] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5389979658] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5396587014] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5398255611] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5399271150] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 5401040127] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 5402483583] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5404233870] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 5405410605] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5407194765] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5413331511] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5414748444] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 5416642035] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5418545118] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5419949871] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 5424977943] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5428024119] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5429579652] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5430798156] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5432312550] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 5433244341] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5434245075] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5440375983] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5442970806] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5444198382] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5445835983] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5447660022] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5448727137] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5454844605] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5457454947] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5458805898] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5460359793] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5462119131] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5463193302] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5464644465] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5470742592] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5472886797] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 5474016093] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5475900507] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5477134929] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 5478234447] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5484712086] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5486449500] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5488211652] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5489678586] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 5490620184] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5491622871] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5493333153] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5499510471] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5501339592] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5503232028] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5504967258] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5506025742] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5507523021] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5513771277] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5514803679] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5517537564] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5519319624] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5520382035] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5521973058] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5528022171] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5529041301] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 5531208564] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5533217718] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5534378094] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 5535466545] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5541928308] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5544282681] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5545461600] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5546845311] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 5547767001] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5548752153] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 5550387549] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5556146232] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 5557754664] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 5559559383] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5562099627] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 5563337892] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5564793654] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5566565109] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5572083993] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 5573920590] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5576636436] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 5577866868] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 5579569107] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5581318029] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 5586749721] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 5588241750] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5591214951] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5592376902] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5593595679] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5594990100] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 5599949586] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5602163868] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 5605430670] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5607142506] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 5608248996] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5609704086] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5616200730] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5618167590] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 5619734358] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5621480508] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 5622623454] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 5624092026] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5630762550] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 5632774623] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 5633916729] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5635781298] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5636960784] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5638312260] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5644027767] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 5644897755] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5647007436] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 5648661690] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5650611624] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 5651989560] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 5653546017] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5660329752] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 5662270593] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5663883267] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5665628661] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 5666787189] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 5668276929] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5674607232] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 5678121393] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 5679554160] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5681455227] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5682639417] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5688307233] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5690498163] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 5691880929] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5692882230] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 5694739554] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5696495616] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 5697732621] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5704498905] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5706953469] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5708126109] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 5709261453] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5711126589] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5712297675] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5717899866] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5720328117] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 5721392628] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5722391514] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 5723968404] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5725717158] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 5726874951] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5732798505] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5735698731] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 5736940524] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 5738076288] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5740114317] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5741353842] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5747087871] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5749140663] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 5750536743] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5751524163] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 5753508138] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5755246224] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 5760346011] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 5762467830] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5765466231] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 5766601113] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 5767715814] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5769566187] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5770793406] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5776510383] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 5778704820] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 5780591250] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 5781814794] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5783203566] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 5784151611] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5789192094] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5791187115] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5794149606] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5795221950] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 5796781284] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5798547174] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 5799588585] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 5805568923] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5807965632] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 5809436052] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 5811089382] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5812840572] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 5813923479] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 5821286205] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5824286475] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 5825447544] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5826716091] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5828129748] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 5829122733] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5834704281] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 5836586574] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5839243935] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 5840342151] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5842076247] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5848885371] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5851024326] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5853554070] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5855335815] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 5856437496] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5857718580] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5863738944] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 5864675775] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5865681276] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 5867330700] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5869100412] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 5870162802] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 5871801096] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5873533071] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 5874742734] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 5880880572] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 5883050796] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5885484717] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 5886596940] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5892462870] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5894966553] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 5895902691] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5896900842] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 5898801888] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5904812046] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 5906465187] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 5908572705] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5910368625] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 5911414530] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 5918229954] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5919964974] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 5922235788] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5923467333] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5925183978] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 5926105143] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5927115243] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 5934566127] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5937589791] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 5938654575] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 5939885574] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5941719357] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 5942809656] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5948925717] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5951830752] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5952943731] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5954162550] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5955578517] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 5960694558] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5962210989] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5965077909] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5966882124] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 5968081707] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 5969792094] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5971546959] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 5978078547] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 5980795212] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5982670092] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 5983841493] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5985005208] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5986405593] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 5992116942] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5993033361] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5995647987] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5997374376] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 5998597143] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6000111642] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6001791054] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 6007491441] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 6010422579] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6012174231] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 6013354746] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6019676334] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6021960357] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 6023433654] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6024462654] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6026323842] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6028211196] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 6029305065] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6035202663] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6039829362] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 6041145936] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6042733347] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6050969379] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 6052970721] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6054175092] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6055578228] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 6056508864] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6057492945] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6067040952] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6068826162] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 6070072176] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6071347296] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6073204935] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 6079932474] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 6082751997] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6084524817] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 6085630047] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6086855187] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6088281717] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 6089203239] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6090442974] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 6096638310] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6099378663] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 6100476711] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 6101710944] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 6103200390] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6112068207] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 6113810577] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6115428459] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 6121125969] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 6122887701] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 6124404258] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6126747858] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 6127844646] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6128905545] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 6131289003] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6137696649] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 6139452270] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 6141922920] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6143677827] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 6144859350] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 6152950545] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6156050355] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 6157193385] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6158970825] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6166674591] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 6167853300] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 6170174976] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6171273990] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6173134275] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6174316302] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6175534743] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6176931873] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 6185406612] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6187191423] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 6197411598] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6200325453] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 6201422997] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6202889700] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6204690051] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 6213167415] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 6215488944] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6217293936] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 6218453115] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6219880212] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6229890786] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 6236783175] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6239684535] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6241985463] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 6242932542] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6243944448] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 6245658132] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6252886458] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 6254840886] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 6256838700] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6258639177] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 6259811355] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 6261054954] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6262820340] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 6263943588] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 6269626104] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 6270895302] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6273813399] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 6274943262] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6276360342] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6283955454] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 6285743247] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6286740537] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 6288475263] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6290422908] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 6297898929] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 6300771603] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6302631720] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 6303836385] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 6305123412] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6306864648] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 6307979601] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 6317476242] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 6318777990] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6320686470] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 6327770694] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6330106713] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6331426899] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 6332412954] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6333399954] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6335600397] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6341640732] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 6343006992] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6345195948] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6347644086] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 6348724851] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6358966551] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6360818100] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 6361849914] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 6363359058] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6365175327] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6372491370] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 6374205579] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6375985854] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6377789418] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 6378880053] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6386016588] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6388508532] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 6389359137] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6390253821] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 6392561490] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6394345629] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 6402304020] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 6405882924] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6407665446] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 6408831933] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 6417434982] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6419378595] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 6420493632] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 6422430903] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6429769437] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 6431789994] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6433440216] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6434849421] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 6435818697] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6436816995] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6444583761] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6446347740] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 6447416934] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6448772169] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6450555720] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 6451634847] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6458483472] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6461591136] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 6462897000] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 6464745441] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6475163541] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 6478394370] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6480162843] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6488564964] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 6491935947] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6494207538] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 6501630576] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6505209627] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 6506592666] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 6508853337] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6511091223] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 6517837851] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6519932391] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6522349869] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 6523785618] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6525778476] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6533096472] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 6535056969] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6536868996] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6538500465] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 6544268451] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6545192997] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 6548313786] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6550140471] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 6551298852] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 6552656586] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6554422560] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 6555808056] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6561231411] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6562516926] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 6564363813] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6565567680] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6567589203] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6577203528] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 6578419995] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 6580030758] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6581848644] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 6582942891] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6590052945] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6592976355] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 6594118986] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 6604418436] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6607580910] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 6608682738] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6610645272] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6612397743] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 6617839935] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 6620187462] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6622685664] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 6623759541] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6624962736] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6626378052] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 6627320385] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6632724714] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 6634102608] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6637103508] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 6638143428] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 6639685374] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6641537763] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 6642709878] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 6648717474] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6651543675] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 6652721817] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6653939313] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6655308387] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 6660658872] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6661768218] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6664878885] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6666640596] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 6667848663] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6669442752] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6675749430] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 6678134820] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6679484532] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 6680858184] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 6681801252] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6682793397] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6684590388] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6690684042] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 6693604050] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6696507552] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6698282451] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 6699678972] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6704894679] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 6706634088] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 6708567642] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 6710397771] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6711813465] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 6712722135] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6713723877] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6715210278] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6721390683] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 6722442762] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 6724976118] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6726721260] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 6727802928] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6729166143] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6736027767] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 6738580296] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 6740450829] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6742165479] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 6743295006] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 6751726359] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6754592943] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 6755760606] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 6761300700] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6764960118] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 6766875276] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 6768077169] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6770258103] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6771661239] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6773192454] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6780154101] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 6781341903] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6782643924] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 6785020851] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6787387446] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 6793635744] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 6795175821] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6797427714] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 6799129239] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6801295326] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6807857091] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 6809315184] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 6811455126] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6813687342] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 6815156103] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6816687234] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6822386235] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 6825051492] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6826435602] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 6828592008] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6830872167] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 6837720645] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 6854884113] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 6856718904] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6858558609] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 6860111265] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6868434825] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6871269195] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 6872742597] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 6874888398] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6881497623] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 6884392620] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6885943134] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6887730969] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 6888990192] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6894268920] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 6896138886] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6899677953] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 6901098078] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 6902903553] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6908685735] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 6910524306] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 6913772502] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6915673170] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 6917154573] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 6919193547] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6925486575] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 6928366242] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 6929828472] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6932077824] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 6933535707] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 6941184663] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6944510286] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 6945937908] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 6947655519] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6955736928] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6958466823] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6960168369] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6961949358] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 6967156770] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6968775933] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 6971556039] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6974367624] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 6975732435] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 6977620818] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6984539646] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 6987212421] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6989142930] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6996224382] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 6998445552] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 7000414533] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7002667980] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 7004066454] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 7005468708] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7013165439] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 7015709715] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 7017899511] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7020127338] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 7028317464] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 7032069366] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7034302632] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 7041015555] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 7043980860] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7046191047] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 7047623667] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 7049687799] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7059808455] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 7061662587] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 7063168686] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7073486385] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7075000338] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7076562948] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7078334256] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 7087871343] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7090474650] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7092021510] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7101734619] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 7103422368] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7104738228] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7106267868] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7111926171] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 7114510473] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7116167058] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 7118535354] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7120762551] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 7122155817] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 7130333280] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7135009581] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 7136593317] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 7144252479] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7147892367] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 7149361632] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 7159071003] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7161421659] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 7162821141] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 7164306366] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7166532030] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 7173157299] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 7175818398] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7177228296] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7185240132] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7188958371] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 7190389731] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7191671277] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7194070590] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7195587399] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7202287386] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7205681343] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 7206876642] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7208123769] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 7210498890] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7220566080] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 7222089441] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 7224324135] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7234051818] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 7235919978] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 7238182161] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7245951657] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 7247900604] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7249645368] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7251913389] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 7253346429] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 7259196294] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7262232327] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7265940675] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7273625751] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7277058474] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7278847737] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 7280042049] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7281341529] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 7288799175] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7292472369] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 7293942180] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 7295448216] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7297866534] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7306024257] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 7308745290] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7311182424] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7318465329] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7320041925] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7321825980] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 7323050700] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7324359000] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7326657765] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7333147164] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 7335893460] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7337999550] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7340237940] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 7341683664] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 7348522104] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7352583987] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 7354055856] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7355637072] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7363085079] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 7364296758] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7365566733] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7367966445] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7370371575] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 7378335993] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 7380741081] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7383270678] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 7384812351] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 7390755771] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7394489739] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 7396033953] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 7397485389] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7399713699] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 7405415094] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 7407021657] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7410594702] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 7412096811] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 7413639030] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7420203252] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 7421681295] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7425160092] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7427423157] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 7428928584] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7435415862] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7439077443] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 7440556767] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 7442073072] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7448060802] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 7450483026] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 7451975328] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7453618620] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 7454848065] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7456440579] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7458241602] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 7465228218] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7468732614] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7470983499] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 7472590860] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 7478450049] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7481467812] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7483673274] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 7485432003] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7487674320] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 7494149649] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7496923581] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7498942584] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 7500239544] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7505790432] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 7508628225] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7512079617] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 7513462572] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 7515505200] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7521948336] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 7523767902] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 7527177609] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7529512179] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 7530929994] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 7537753125] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7540868958] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 7542240720] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 7544551896] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7551480573] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 7554054606] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7555685088] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 7557442347] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 7558753902] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7560051492] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 7567017465] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 7571359740] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7573717809] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 7579533969] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 7583985171] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7586352165] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 7588008435] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 7594825455] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7598308347] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 7599852876] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 7602290304] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7608938295] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 7610319822] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7613457159] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 7615259505] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 7617127245] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 7622992587] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7626114531] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 7627348302] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7628623044] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 7631485092] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7637769699] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 7639578450] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 7642198788] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7644589932] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 7646018940] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 7651432110] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7655519172] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 7657033524] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 7658491554] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7660881963] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 7662436992] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 7667979249] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7671741441] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7673234289] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7674996546] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7676749731] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 7682148495] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7683425526] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 7687375710] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7689631782] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 7691113983] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 7697037684] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7700852187] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 7702287306] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 7704043872] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7706311053] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 7712012406] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 7713515670] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7717251612] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7718760399] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7720327566] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7726610535] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 7728171864] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7730878869] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 7732721283] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7734961857] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 7740551721] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 7742434770] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7746050655] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 7747579497] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 7749188769] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7757393868] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 7759170867] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7760739252] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7762540002] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 7763849289] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7765455306] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 7771608747] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7775370750] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 7776795495] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 7778807841] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7785761571] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 7787235309] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 7788814173] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7791261996] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 7792843758] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7798589484] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7802037390] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 7803424461] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7804716318] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 7806460767] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7813151346] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 7815300108] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 7817822607] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7820194515] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 7821735096] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 7828078293] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7831514397] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 7832998488] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7834644321] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7836384633] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 7842044301] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7843310727] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 7846065318] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7848307824] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 7849904139] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 7855826643] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7858370625] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 7861224756] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 7862852361] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7865138127] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 7866662265] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7872514755] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7875655431] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 7876836303] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7878132276] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 7879379991] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7885108539] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 7886511318] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 7887562305] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7890736455] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 7891835721] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 7893315486] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7895213676] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 7905250899] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 7906187310] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7908028317] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7909200642] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7914841242] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7917807786] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 7918734117] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7919706396] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 7962473568] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7964305545] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 7965403950] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 7966577955] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7972375950] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 7973891289] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 7976508792] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7978374390] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 7979510070] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 7980657867] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7982539551] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 7990802379] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 7994903427] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 7996338189] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 7997272332] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 7998264099] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8004253467] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8007748035] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 8008888944] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8060026842] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8062412064] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 8064638967] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 8065849533] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8067691527] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 8068830231] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8070018474] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 8075499516] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 8076858111] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8079356250] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8080760625] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8082513474] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 8083748673] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8088929688] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8091124986] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 8093913303] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8095116330] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8096897298] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 8098120548] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8099269521] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8106306978] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 8107525377] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8108729433] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8110618299] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 8111822502] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8112920991] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8119539897] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 8120721336] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8122952922] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8124891684] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 8126064324] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8127296919] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8133954129] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 8136365517] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8137560207] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8139445692] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 8140688724] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8141936502] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8148113988] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 8150685438] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 8151841026] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8153686884] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 8154973449] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8156054508] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8161893201] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 8164333170] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8166030033] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8167775322] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 8168904261] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8170101471] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8171860956] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 8177567223] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8179916787] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8181794229] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 8183027790] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8184189006] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8193210039] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 8196750765] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 8197895202] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8199781464] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 8208029718] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8209794348] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 8211028833] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 8212497069] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 8213749593] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 8214682980] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8215714479] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8221671738] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8224616085] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 8225932071] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 8227942338] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8229785970] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 8237901378] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 8241222360] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8242998183] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 8244042282] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 8245821486] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8252070582] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 8253880866] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8256350991] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8258098275] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 8259157431] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8267161119] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 8269750020] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8271009957] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 8272767594] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8280351324] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 8282857905] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8284521588] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8286285546] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 8287427547] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 8289121911] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8297395890] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 8298457671] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 8300183850] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8301940899] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 8303024352] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8313323445] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8315545980] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 8316740271] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 8325890433] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8328401802] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8329646997] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8330879739] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 8331804957] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8336803041] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8338885590] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8341951968] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 8343039453] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 8344382508] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 8346237522] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8355773013] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 8357149563] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8358716247] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8360536485] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 8361653727] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 8371878753] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8373663858] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 8374792293] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 8383061568] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8386339500] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 8387464932] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 8389307136] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8391039048] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 8397756444] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 8399975619] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8402109681] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8403265962] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8404472118] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 8410590972] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8413086339] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 8414746326] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8416459863] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 8417571267] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8419061406] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8425394082] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 8426970615] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 8429963640] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8431645908] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 8432862690] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8439435270] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8443681281] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 8445307983] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 8446991931] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8448708114] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 8449814184] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 8460231381] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8466394692] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 8468494776] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 8470219779] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8472193674] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8473411926] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8474627343] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 8475558630] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8476553925] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 8482857579] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8486088996] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 8487329571] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 8489020596] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8490777561] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 8491922523] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 8501403624] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8504098785] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 8505304059] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 8515012233] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8518654725] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 8519832636] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 8524893321] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8528554755] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8529715467] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 8530762023] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8532615315] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8533792428] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8534981280] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 8535912231] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8542085454] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8545140324] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8546899032] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 8547968961] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8549570799] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8556277506] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 8557728018] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8560611297] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8562350643] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 8563407699] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8564971149] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8566740378] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 8573112912] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8575012698] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 8577042957] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8578061205] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8579819262] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8581646472] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 8587337913] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8588970201] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8592148866] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 8593453470] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8601803385] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8604788724] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 8606034045] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8607253095] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 8612571681] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8613559101] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 8616769560] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8618274126] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 8619348528] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 8620489647] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8622328596] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 8623419609] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 8629650204] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8632024485] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8634104325] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8635298238] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 8636242839] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8637323940] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8646385377] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8649056283] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 8650123692] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8659030002] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8661904902] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 8662962042] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8664199845] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 8665185354] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8666219940] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8677462563] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8679340782] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 8680508172] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 8682313038] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8690312085] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8692110861] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 8693267646] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8694999327] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8696797011] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 8705214462] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 8708218659] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8710084530] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 8711238753] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8717261910] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 8719615296] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8720588268] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 8722417893] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8724209004] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 8725323705] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8732698359] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8735537748] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 8736670131] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8738019717] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 8739432093] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 8741070618] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 8742496812] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 8751727089] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 8753405010] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8758651524] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8762315121] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8764098483] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 8765255247] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 8766460059] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8768348589] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 8775961194] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 8778635733] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8781640833] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 8782954068] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 8793140286] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8794957794] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 8796307527] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8797604004] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 8805030591] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 8807945034] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8808934617] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 8811040161] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8812840365] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 8819030913] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 8821680651] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8824065957] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 8825233662] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 8826505821] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8828403990] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 8829773505] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8838537435] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 8840379009] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 8841333165] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8842454775] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 8844368379] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8852086488] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 8854803699] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 8860295598] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8864582307] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 8866343031] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 8868622602] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8870800218] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 8872581438] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8878077012] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 8880329745] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 8881652808] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8882977971] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 8886197166] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8895233340] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 8896702941] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 8898854433] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8901240663] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 8907566619] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8909444754] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 8911468860] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 8912421987] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8913484608] Running FIND.existing: FIND DUP . CR +[Hera] 2225731376 +[Hera] [HADES][TEST ] [KRELTSC: 8915537631] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8917296675] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 8922638298] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 2226064960 +[Hera] [HADES][TEST ] [KRELTSC: 8925685692] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8927430855] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 8928554922] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8936903052] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8940893451] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 8942210130] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 8949190740] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8952673590] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 8954111565] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8955794421] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 8957556594] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 8958875898] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8967636510] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 8970483480] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8972787369] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 8982089802] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 8983986795] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8986355322] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 8987868603] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8989509585] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 8997665943] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 9000276600] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9007121886] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 9011814525] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9014052642] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 9015521529] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 9017148756] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9023729085] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 9026266935] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9027842082] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 9029614314] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 9030839076] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9032200758] Running LATEST.basic: LATEST @ . CR +[Hera] 2225812800 +[Hera] [HADES][TEST ] [KRELTSC: 9038680728] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9042389664] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 9043856325] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 2225851984 +[Hera] [HADES][TEST ] [KRELTSC: 9046419060] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9052948338] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 9055738587] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 2225851984 +[Hera] [HADES][TEST ] [KRELTSC: 9058224630] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9060670353] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 9062109000] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9068385396] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 9070148997] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 9072593376] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9073868433] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 2226066472 +[Hera] [HADES][TEST ] [KRELTSC: 9081214821] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9084158979] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 9086102046] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 2226066936 +[Hera] [HADES][TEST ] [KRELTSC: 9088740969] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9096860808] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 9099474048] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 9101220576] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 9102768276] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9105264105] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 9112664631] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9114918225] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 9117741507] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 9125088756] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9129100827] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 9130988748] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9133369119] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 9134736450] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 9140148633] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9142834764] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 9144293088] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9145910487] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 9147644184] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 9157350489] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 9159561012] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 9161353530] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 9168031866] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9170071218] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 9174376449] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9176688024] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 9183141681] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 2226071456 +[Hera] [HADES][TEST ] [KRELTSC: 9189938457] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9192318975] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 9193769088] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 9204610884] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9213273720] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 9217529034] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 9227577408] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9232750065] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 9234349110] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 9246053376] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9248347710] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 9249936486] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 9258086145] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 9259470801] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9261941703] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 9263391585] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 9270449895] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 9272245080] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9274716024] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 9276196419] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9277910775] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 9284514540] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 9285734997] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9287613111] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 9290754627] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9293000766] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 9299665662] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9303867216] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9306097101] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 9307617018] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 9316082979] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9320746659] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 9322145952] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9323784351] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 9332964606] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 9335302242] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9336587862] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 9339462216] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9348317055] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 9349855557] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 9353160474] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9361694685] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 9364260864] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 9371077548] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9375230193] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 9376765419] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9378388719] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 9380143710] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 9381466878] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9382743048] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 2226077440 +[Hera] [HADES][TEST ] [KRELTSC: 9391312728] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9393828780] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 9395304051] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 9404093370] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9407819358] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 9409530711] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 2225822608 +[Hera] [HADES][TEST ] [KRELTSC: 9419543553] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9421805211] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 9423257466] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9424898889] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 9434661642] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 9436616406] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9437905911] Running CURRENT.basic: CURRENT @ . CR +[Hera] 2226077440 +[Hera] [HADES][TEST ] [KRELTSC: 9446848656] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9449878830] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 9451368969] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 2226074144 +[Hera] [HADES][TEST ] [KRELTSC: 9459107091] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9462478977] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 9464251566] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 9479526693] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 9481277064] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9483635952] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 9491687184] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9493749783] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 9495530646] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 9496762485] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9498164067] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 9507337497] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9510834438] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 9512346921] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 9521441685] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9524378640] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 9525588261] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 9528848028] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9538684512] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 9540105183] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9541834995] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 9548702394] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 9553488294] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 9555029463] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 9562028217] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 9564851919] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 9566066202] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9567329835] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 9569304969] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9578548119] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 9580980276] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9582322029] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 9583686147] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 9584655591] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9585781758] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 9587029221] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9593088204] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 9595516476] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 9596805519] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9598651692] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 9599782311] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 9601651584] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9609358269] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 9611607033] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9613081338] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 9614538801] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 9615680109] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9623835774] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 9627218034] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9629179119] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 9630575598] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 9631876716] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9639052038] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 9641141433] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 9642520755] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9648883797] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9650212530] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9652405665] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 9653878101] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 9654818880] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9655838514] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9657016887] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 9658463766] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 9659418006] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9666673086] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9669485427] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 9670922058] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 9671862312] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9677139612] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9678366810] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 9680316492] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 9682330854] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 9683560845] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9684999891] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 9685902282] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9686969250] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9688900872] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9697194108] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 9700135263] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 9705197292] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9708711096] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 9710015763] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 9711409092] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 9712675455] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9714558168] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 9715800696] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9717112440] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9718544955] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 9724953735] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9726529050] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 9728142942] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9729994281] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 9731256717] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9739546992] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9743295639] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 9750110727] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9752741922] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9754363815] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 9755361357] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9756367551] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9758671734] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9767436714] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 9769904382] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 9771630939] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9773406279] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 9774672012] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 9784574331] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9786353031] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 9787464204] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 9788682330] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9790657800] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 9798118575] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9800904876] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9802363746] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 9803658102] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9809245383] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9812725503] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9814530474] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 9815643873] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 9817470369] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9819415914] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 9825029067] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 9826949223] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9828713013] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 9829888782] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9831137862] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9832574409] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 9833566932] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9838845933] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 9840588849] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9843728706] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 9844771251] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9846570825] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9848434554] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 9849491022] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 9855190653] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9858402813] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 9859535154] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9860806095] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9862247346] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 9867760056] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9869725803] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9873155481] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9874943778] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 9876089328] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 9882264315] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9885208410] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 9886333947] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 9887460555] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 9888418785] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9890320104] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 9891593145] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9897273687] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9900092811] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 9901062906] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9902066643] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9904220172] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9911050149] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 9914135910] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 9915409560] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9917121501] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 9918546771] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9919750113] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9921223767] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 9922325448] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9927294279] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 9928960797] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9932161701] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 9933295365] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9940617897] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9944350731] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 9945441891] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9946751682] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9948147867] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 9949182705] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9950175438] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9960637344] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9962498322] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 9963521820] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 9969568161] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 9970736244] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9974067978] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 9975337470] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 9976584429] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 9977993424] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 9978960726] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 9979981662] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 9989248374] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9992970729] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 9998520063] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 10001158671] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 10002300105] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10004259279] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 10005551367] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 10006767981] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 10007950659] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10009820184] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 10018216089] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10020457923] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 10021845582] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 10022845329] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10023853560] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 10034220000] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10036019826] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 10043650470] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 10047177357] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 10048352307] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10050276012] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 10051595169] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10052851284] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 10059740103] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 10061905497] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10062923850] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 10065417180] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10071759999] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 10074008868] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10075950297] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10077730782] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 10078915056] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 10080393666] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 10081565970] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10087935018] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 10090091550] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10092042429] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 10093464003] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 10095016596] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 10096246881] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10104400257] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 10107081726] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10108534275] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 10111475682] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10119641910] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 10122593082] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 10129786674] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10131754752] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 10132960929] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 10134726777] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10136529879] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10138291044] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 10144335222] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 10146973515] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10148747322] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 10149910911] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 10151053374] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10152007992] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10153992765] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 10161360069] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10162612425] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 10163493354] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10164443184] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 10166576973] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10173025716] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 10174193022] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 10176232647] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10177942257] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 10179109647] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 10181101203] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10182844140] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 10184171550] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 10190392758] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10192910973] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 10194042621] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 10195093524] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10196210703] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10198083609] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 10199267610] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10205797224] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10207477161] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 10208491083] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10209483228] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 10210632558] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10211567877] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10213425495] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 10219329120] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 10222086777] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 10223003301] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10224866337] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 10226047881] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10227265881] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 10228201599] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10234144431] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 10235411865] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10236378306] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10238292603] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 10239424167] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 10241033565] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 10241956347] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10249092861] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 10250203299] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10251409497] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10252829181] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 10253757255] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10254778065] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 10255962234] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10256912232] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10263494682] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 10264626687] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 10266226362] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 10267166847] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 10268110755] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10270081143] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 10277749965] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10279521441] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 10280472405] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10281506844] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 10282726692] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10283692398] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10285612407] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 10286732925] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 10288237134] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 10289137257] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 10294397022] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10296145797] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 10297273623] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10298511321] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10305337602] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 10306325190] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10307614716] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10311145971] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10312945041] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 10314362604] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10316941950] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10324500312] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 10325615517] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 10326935241] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10328023356] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10329934230] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 10335552969] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10337146365] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 10339055538] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10340075844] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10342604874] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10344266877] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 10345355202] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 10352475399] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10354893507] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10356688188] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 10357947348] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 10359023682] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10364398149] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10366919829] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 10368229284] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10369457070] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10370870265] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 10376729034] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10377762612] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10381064547] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10382855511] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 10383933840] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 10385488386] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10387730178] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 10389237369] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 10395317772] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10397672481] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10400129229] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 10401805575] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10407461694] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 10409056749] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10410709722] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10414385226] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10416727671] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 10424479338] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 10429335252] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10431719550] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 10437019803] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 10438835085] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10440103653] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10442592468] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 10444108752] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10445786841] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10453578744] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 10456281675] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10457599740] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10460612841] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10470075651] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 10471944588] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10474730511] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10484697678] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 10486802550] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 10488416085] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10489628919] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10499752599] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 10501566516] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10503220476] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 10504440576] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10505808894] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10514054460] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10516339239] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 10517759742] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10525900287] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10529213604] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 10530652209] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 10531917207] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10532876634] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10534705377] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 10540405596] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10542716142] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10544124885] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 10545083367] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10546118415] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 10552372677] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10555556046] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10557344217] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 10558471119] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 10559684058] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10560663183] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10562765388] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 10563917784] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10569570984] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 10571540616] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10572705906] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 10575104736] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10582044753] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 10584238350] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 10585466493] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10586447046] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10588470396] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 10589633250] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10590993126] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10592409660] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 10598457933] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10599749979] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10602661608] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10604441610] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 10605557340] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 10613794527] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10618530804] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 10620063426] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 10627931580] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10632633018] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 10634302203] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10642203558] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10644451629] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 10645908588] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10647451773] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 10648721916] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10650003105] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 10658161731] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 10660568625] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10662191862] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 10667912976] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 10670549484] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10672133094] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 10673236140] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 10674565125] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10676283618] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 10677430554] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10684116681] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10685818038] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 10686844833] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10688008254] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10689418194] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 10690347108] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10691376654] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10698279480] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10700078214] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 10701167694] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 10702585299] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10704326661] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 10705476495] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10707796281] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10714574094] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 10715682789] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10716892998] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 10717842324] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10718865528] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10721222589] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10722998496] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 10729353180] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 10731015498] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10732883049] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 10734032925] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 10735731951] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10743549747] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10745362257] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 10746477924] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10747698045] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10749125142] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 10750102839] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10755602172] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10758391497] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10760159298] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 10761288741] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 10762504935] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10763463480] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10765371918] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 10766508207] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10772875470] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 10774104222] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10775143554] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10777431735] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10779209112] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 10780344141] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 10781441790] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 10782381519] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10789384347] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 10790553144] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10791777780] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10793196666] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 10794165564] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10799298426] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 10803159402] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10804955175] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 10806054210] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 10808615034] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10810375821] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 10811402448] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 10818670926] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10820242608] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 10821349161] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10822546665] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 10823517012] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10832020458] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 10834074321] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 10836016464] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10837802535] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 10838862153] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 10847845134] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10849377840] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 10850416122] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 10852624524] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10854391548] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 10862629848] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10864322427] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10865536983] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 10866441453] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10867546137] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 10874669421] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10876211094] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 10877321931] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 10879229319] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10880957346] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 10882027716] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10890025986] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10892177058] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10893165465] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 10895387223] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10903942203] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 10904904717] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10906010598] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 10906929495] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10908013557] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 10910328975] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10919244798] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 10920220668] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 10922265879] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 10923676365] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10925425392] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 10926448995] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10935156498] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10936700481] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 10937753820] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 10939720869] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10941472017] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 10949767059] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10950958053] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10952262972] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 10953200013] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10954247493] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 10962368466] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10964080029] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 10965240846] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 10967360019] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10969111503] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 10970216250] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10978901703] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 10980034968] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10980911613] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 10983269976] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10985129316] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 10991968617] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 10994376666] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10996044990] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 10997309610] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10998552117] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 10999932321] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 11004988050] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11007345678] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 11009434842] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11011158585] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 11012217930] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 11013997071] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 11021671878] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11023340349] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 11024379051] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 11026461348] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11028245151] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 11029301136] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 11037620307] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11040874278] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 11041827825] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11048903397] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 11050961481] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11051933571] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 11053998186] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11055845682] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 11062065903] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 11065197612] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11066985342] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 11068041222] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 11070006066] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11077639755] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 11078887701] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 11080946436] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11082654114] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 11083604595] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11084791557] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 11092967739] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 11094822606] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11095794969] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 11098460163] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11100242685] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 11101278993] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11110238559] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11111921163] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 11112977568] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 11115068601] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11116857045] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 11123968800] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11125204377] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 11126050320] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11127066363] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 11129457969] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11131236228] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 11132498055] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 11142027687] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11143736877] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11145537228] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 11153451792] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 11155597026] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11157280974] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 11158353696] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11159647821] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 11166626835] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 11168967999] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11169947859] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 11172343791] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11174098824] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 11181820524] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 11184674928] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11186455518] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 11194362270] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11196246138] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 11197099536] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11198063919] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 11200467810] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11202177798] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 11208445269] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 11211809868] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11213602806] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 11214672021] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11215913352] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 11217319554] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 11218283391] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11224747842] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 11227799079] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 11228967519] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11230831164] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 11232056241] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11239697343] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11241471759] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 11242563150] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11243947638] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 11244893478] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11245898433] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 11253206559] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11254955292] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 11256031185] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11258317707] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11260125912] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 11261216967] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11262424887] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 11269397874] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 11270298102] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11271322482] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 11274613581] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11276400555] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 11282137587] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 11285337378] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11287153941] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 11288237142] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 11290775517] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 11296234131] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11299460991] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 11300558241] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 11302925571] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11304672225] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 11305787241] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 11313243249] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11315010861] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 11316080223] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11317318656] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 11318224617] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11319345387] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 11321498055] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11328562623] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 11329578477] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 11332029891] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11333788347] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 11334877848] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 11341986306] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11343704547] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 11344935693] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 11347027545] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11348773128] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 11349804669] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 11356831920] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11358678366] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 11359740147] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11361023331] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 11362436001] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 11363971857] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 11370887493] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 11372841816] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 11373851307] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11374878207] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 11377191336] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11379011931] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 11384918328] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11387995017] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11389795998] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 11391073995] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 11397604764] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11399589306] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 11401726413] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 11403021987] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 11404131060] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11406195696] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 11411811222] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 11414222211] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11415279225] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11417225610] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11418427503] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11419720242] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 11421131820] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 11422251645] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11427592134] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 11431017633] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11432866578] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 11434028991] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 11435834298] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 11442276321] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11445092295] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 11446793400] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11449264386] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11451064191] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 11456728038] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 11458062672] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 11460363915] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11462328864] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 11463505053] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 11464728219] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11465793297] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11467928787] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11473581840] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 11474767374] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11477015298] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11478930267] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11480130165] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11486178249] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 11488682100] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 11490328227] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11491350738] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 11663426544] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11665267761] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 11666516967] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 11837203476] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11839856301] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 11841071823] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 11998740369] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12001030167] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 12002095203] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12003484374] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12004911618] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 12005969808] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12007275693] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 12015575838] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12017330871] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 12018634068] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 12020124396] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12028235499] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 12029315907] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 12030705267] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12032563851] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 12033766815] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12035213316] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12043073973] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 12044054085] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12045036255] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 12057168249] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12058892685] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 12060073032] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 12072329367] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12074064177] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 12075237867] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 12078834663] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12086215050] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 12087468372] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 12090560853] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12092402343] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 12099255966] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 12103765863] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12105602376] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 12106780413] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 12115483737] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12117609651] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 12118787142] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 12120710112] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12126761724] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 12129170403] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 12130405791] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 12131477610] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12133413054] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 12134611734] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12135903360] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12142918620] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 12145250859] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12146198673] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 12147959082] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 12148990266] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12150757395] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 12157519206] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 12159480690] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 12160540056] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12162273879] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 12163442466] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 12165211968] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 12166270998] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12175496298] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 12176796261] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 12179236986] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 12180819084] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12188979705] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 12190216080] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12191502792] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 12192892215] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 12194427672] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 12205089897] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 12207935397] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 12209879955] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 12216218595] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 12222055356] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 12223961337] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 12232993143] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 12235606509] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 12236652603] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12237836331] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12239205531] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 12246577182] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12249800871] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12251057217] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 12252105264] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12253116477] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12262839687] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 12264757911] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12265868265] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12267188451] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 12268219257] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12276021240] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12279553629] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 12280690590] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12281734122] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12287621535] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 12289272975] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12290576760] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12292170849] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 12293423226] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12294792720] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12296469696] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 12297784863] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12305788929] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12310171902] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 12317059965] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12320754915] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12322781205] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 12324974802] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 12326889876] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 12333008751] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12336281496] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 12337468500] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12338843349] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12346750458] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12351546900] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12355476483] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12362793786] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12365993094] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 12367151139] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12368522985] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12376370118] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12378929535] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 12396818784] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12399802926] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12406786413] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12409874001] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 12411057225] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12412439151] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 12420921891] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12423194658] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 12427394511] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12433155378] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12436308087] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 12437754798] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12439074627] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 12441663150] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12449191734] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 12453195846] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12455601837] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12457848081] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12469281321] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12470893680] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12477495303] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 12478435011] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12479484024] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12481509600] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12483320598] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12486325341] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12493024740] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12494748168] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 12495683382] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12496633611] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 12498422622] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12500247711] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 12508989570] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12510211539] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12511562742] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 12512579961] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12513585336] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12515378904] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12523809942] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 12526211859] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12528487104] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12529683348] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12537541527] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 12538500072] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12539544717] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 12541275579] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12543478626] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 12552537921] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12553686201] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12554993115] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 12555976335] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12557008590] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 12559003611] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12567564618] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 12570605418] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12571840932] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12573269919] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 12574231656] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12575284974] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12584019273] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12585735708] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12594052695] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12596785971] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12598190304] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 12599160105] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12600182721] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 12602017701] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12608865654] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 12612359445] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12613556025] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12614966805] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 12615970941] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12616970751] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 12624007137] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12625705953] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 12628786023] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12630074058] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12631561278] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 12632546010] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12638960775] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 12640514166] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12642345534] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 12645322305] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12646602255] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12652789275] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 12653762205] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12654814788] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 12656350833] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12658115274] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 12661333041] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12667155753] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12668627748] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 12669580182] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12670578480] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12672107196] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12673870125] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12676906263] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12682429410] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12684223125] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 12685184274] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12686180409] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 12687837771] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12689673276] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 12698335020] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12699544830] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12700941141] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 12701875263] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12703011636] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 12704615427] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12711278664] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 12713185485] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 12715726401] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12717287835] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12719032242] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12729409077] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12730581465] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12732029457] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 12732973071] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12733999971] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 12741826608] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12743488569] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 12746718201] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12748219176] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12756554055] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12759510162] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12760702878] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12762124704] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 12763065441] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12764171049] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 12771816876] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12773543181] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 12776673567] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12784164477] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12786478782] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12789456267] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12790672461] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12792092502] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 12793102035] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12800675748] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 12802150767] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12803978523] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 12807308136] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12815327805] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12817450611] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12820595046] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12827154669] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12829863354] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 12830701527] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12831592116] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 12833551899] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12835367874] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][INFO ] [KRELTSC: 12838149345] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 12845428197] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12846603441] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12848004897] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 12848951724] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12849985176] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12857139435] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12859892997] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12862869432] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12864102489] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 12865511106] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 12873242466] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12874341291] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 12876085971] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12877892118] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 12888076236] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12889283904] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 12890579541] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 12892552743] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 12894113946] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12900848415] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 12902194683] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12903423267] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 12906060657] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12907918548] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 12909306942] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12915730884] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12918153213] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 12919258254] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12920270685] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12922932078] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12930619737] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 12931963422] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12933302130] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12934707849] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 12935922909] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12936910035] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 12943949130] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12946407285] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 12948016977] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12949393086] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12950749392] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 12951751008] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12952757790] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 12964047663] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12965793750] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 12966931110] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12972121680] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12975270315] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 12976267626] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12977292237] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12980605239] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12987713886] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 12989827893] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12991068741] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 12992459802] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 12993494850] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12994518327] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 13001882859] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13004582115] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 13005888546] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13007204238] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 13008627198] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 13009678773] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13010707668] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 13019305257] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13021145319] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 13022559186] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13023879561] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 13025335113] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 13031306001] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13033325760] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 13035970857] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13037776374] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 13039190640] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13040501103] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 13046972904] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 13048431144] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13049386476] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 13053568962] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13061865810] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 13063451205] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13064836701] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 13066243953] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 13067828277] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 13069136955] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 13075615833] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 13076590338] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13077574314] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 13079857518] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13081708668] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 13082988891] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13089438705] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 13090958055] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 13091932980] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13092939846] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 13095120297] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13096983984] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 13098248499] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13104332094] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 13105671264] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 13106573802] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13107574221] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 13109758830] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13111680351] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 13113088926] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 13120342284] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13122051957] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 13123473195] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13124848149] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 13126230621] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 13127202711] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13132603554] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 13136059377] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13137904164] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 13138991670] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13140219666] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 13141617552] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 13148083095] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13149762129] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 13151813262] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13153582764] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 13154995665] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13156240503] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 13157616255] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 13164151707] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13165175394] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 13166867784] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13168724058] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 13170156657] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13171483374] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 13172918451] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 13178941965] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 13180514655] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 13181435232] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 13182366666] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 13183502493] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 13184516898] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 13185557133] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 13191584658] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x00000000bdecb000, 0x00000000bdf08e2a) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] Artemis: genesis signature stamped +[Hera] virtio-input: found device +[Hera] virtio-input: driver ready +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 13284370302] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 13299076077] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 13302357327] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] SBI: timer armed (TIME extension) +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 13437095721] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 13601151879] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 13607091939] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 13651020810] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 13713192780] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] [HADES][ERROR] [KRELTSC: 20050473975] virtio_blk: vblk_io timed out (write=1 sector=296) -- queue nev +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] [HADES][ERROR] [KRELTSC: 26519760561] virtio_blk: vblk_io timed out (write=1 sector=3224) -- queue ne +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 26543632920] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 634 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=50 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261007-081603/amd64/qemu-amd64-20261007-081603.log b/logs/20261007-081603/amd64/qemu-amd64-20261007-081603.log new file mode 100644 index 00000000..da77e467 --- /dev/null +++ b/logs/20261007-081603/amd64/qemu-amd64-20261007-081603.log @@ -0,0 +1,149 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 7 2026 08:15:38 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 135 +Total memory: 1023 MB +Usable memory: 966 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 248749 + Free pages : 247226 + Used pages : 1523 + Total MB : 971 + Free MB : 965 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2098985198 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1009454547, tick_hz=100, initial_count=10094545 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x4eb584bf6c169ea1 capsule_hash=0x4eb584bf6c169ea1 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xe6453dd9449a3f64 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xab589e162cb5e638 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +PCI: ECAM mapped (amd64) +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 71159025] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-081839/aarch64/qemu-aarch64-20261007-081839.log b/logs/20261007-081839/aarch64/qemu-aarch64-20261007-081839.log new file mode 100644 index 00000000..4e63b8eb --- /dev/null +++ b/logs/20261007-081839/aarch64/qemu-aarch64-20261007-081839.log @@ -0,0 +1,122 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 7 2026 08:18:14 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4054 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039360 + Free pages : 1037949 + Used pages : 1411 + Total MB : 4060 + Free MB : 4054 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x4eb584bf6c169ea1 capsule_hash=0x4eb584bf6c169ea1 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xe6453dd9449a3f64 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xab589e162cb5e638 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 1268854] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-082226/riscv64/qemu-riscv64-20261007-082226.log b/logs/20261007-082226/riscv64/qemu-riscv64-20261007-082226.log new file mode 100644 index 00000000..7cf1067d --- /dev/null +++ b/logs/20261007-082226/riscv64/qemu-riscv64-20261007-082226.log @@ -0,0 +1,192 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdcab9c0 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 7 2026 08:21:48 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 975 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250276 + Free pages : 249624 + Used pages : 652 + Total MB : 977 + Free MB : 975 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x4eb584bf6c169ea1 capsule_hash=0x4eb584bf6c169ea1 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xe6453dd9449a3f64 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xab589e162cb5e638 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 19521579] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-082647/amd64/qemu-amd64-20261007-082647.log b/logs/20261007-082647/amd64/qemu-amd64-20261007-082647.log new file mode 100644 index 00000000..a14fc886 --- /dev/null +++ b/logs/20261007-082647/amd64/qemu-amd64-20261007-082647.log @@ -0,0 +1,9143 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 7 2026 08:26:23 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 968 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 249318 + Free pages : 247795 + Used pages : 1523 + Total MB : 973 + Free MB : 967 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2100638949 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1008978623, tick_hz=100, initial_count=10089786 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 83886 cells (5242 KB), 50 VM slots +Switch-signal: 50 slots +Kernel-Hermes: 50 channel slots +Kernel-Hermes: 50 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0xffff900000000000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 4386060] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 64285368] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 98789796] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 99801177] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 100756593] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 102048807] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 103263090] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 104645814] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 105487305] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 106634199] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 117675705] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119375256] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 122984400] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 124285476] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125856990] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 128575167] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 130126059] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131890899] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 134884995] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 136518984] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138064773] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 141764049] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 143334513] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145297593] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 149040276] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 150081015] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 151003944] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152694381] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 153916266] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 155318100] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 156799272] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 157965738] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 159159567] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 160661550] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162245937] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 164879442] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 166171992] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167824776] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 170562966] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 172308087] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173879433] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 176795934] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 178336053] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179913132] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 183398838] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 187648356] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 189154476] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 190699509] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 193353006] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 194806290] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 196460628] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 199355058] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 200892783] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202423305] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 205134237] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 206893344] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208463199] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 211574391] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 213336816] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215059635] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 217887474] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 219565185] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 221025105] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 223073319] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 226175061] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 227621226] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 229240410] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 231935613] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 233292570] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 234848817] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 237791106] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 239248233] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 240823296] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 243517974] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 245125608] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 246736224] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 250037676] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 251089839] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 251979525] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253688904] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 254733150] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 255806271] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 257311866] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 258146070] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 259045689] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 260482698] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 262444308] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 265310598] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 266742903] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 268280628] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 271160568] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 272593923] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 274206345] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 275844975] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 278597319] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 279981030] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 281598702] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 284514720] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 285546576] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 286641726] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 288902880] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 289989252] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 291015690] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 292042023] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 293778324] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 294809928] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 295848525] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 297063690] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 297877335] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 298770990] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 300819267] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 302398089] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 305291259] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 306655797] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 308203455] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 311029908] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 312981816] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 314657448] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 317673951] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 318680544] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 319729851] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 321460419] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 322560063] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 323602188] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 324914310] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 327058242] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 328150179] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 329284347] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 330571836] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 331424667] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 332337285] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 333796260] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 335392008] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 338326065] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 339809148] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 341534067] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 343107912] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 346018827] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 347416314] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 348944799] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 352048536] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 353051265] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 354065061] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 355759698] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 356781600] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 357742980] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 358727313] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 360364809] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 361400130] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 362353530] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 363348573] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 365577282] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 366650760] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 367710483] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 368934300] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 369767013] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 370638261] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 372060192] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 373679859] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 376247214] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 378028035] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 379605408] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 382110288] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 383465523] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 384992979] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 387597672] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 388674930] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 390245310] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 391496532] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 392478618] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 394091649] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 395637186] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 398238855] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 399587034] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 401138808] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 403445826] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 405506136] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 406869099] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 408511509] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 411125211] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 412218303] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 413436639] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 414258642] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 415161621] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 416905545] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 418488882] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 421376466] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 422802723] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 424344312] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 427276920] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 428369151] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 429855951] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 430801098] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 431729361] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 433313265] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 434880243] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 437694159] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 439054035] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 440633109] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 443562525] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 444921351] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 446497758] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 449260161] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 450294138] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 451207260] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 452878083] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 453899922] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 455438298] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 456850926] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 457709469] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 458639265] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 460203282] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 461812281] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 462853839] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 466085592] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 468006966] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 469700637] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 472597356] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 474133968] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 475692588] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 478693404] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 479959746] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 481397805] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 483161700] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 484267623] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 485261931] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 486273375] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 488349141] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 489481545] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 490611828] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 491959104] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 493340148] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 494686668] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 496105491] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 496921803] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 497810418] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 499534707] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 501094167] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 503971755] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 505329951] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 507068562] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 510165012] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 511674660] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 513335739] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 515856411] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 517817202] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 519757728] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 521339574] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 524554989] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 525568785] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 526405341] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 528150546] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 529199328] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 530296893] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 531567057] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 532684824] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 533615817] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 534895578] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 536439729] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 539187096] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 540673035] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 542185560] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 545163444] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 546126294] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 547006782] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 548691717] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 549839976] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 550884558] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 552125427] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 552948060] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 553912905] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 555335382] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 557086257] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 560136717] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 561793113] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 563372502] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 565488714] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 567419496] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 568402590] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 569257227] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 571159449] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 572326650] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 573460629] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 574757232] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 576071979] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 577209822] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 578507895] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 579328743] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 580193796] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 581825118] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 583773876] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 586524498] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 587855331] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 589386651] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 592086453] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 593530581] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 595283997] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 598470684] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 600074706] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 601589163] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 604756509] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 606304776] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 608223903] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 611437134] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 612935757] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 614427324] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 615577515] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 619240755] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 620487462] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 622266393] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 623347410] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 624308706] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 625940679] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 626957751] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 628076253] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 629270313] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 630056322] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 630923580] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 632524116] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 634097205] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 636918576] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 638543577] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 640191342] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 643233171] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 644221158] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 646342095] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 647452575] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 648499362] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 649712616] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 650514795] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 651389697] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 653205693] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 654746925] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 657708114] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 659190966] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 660807399] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 663530826] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 665043561] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 666608208] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 668787525] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 671002311] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 672478905] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 674052393] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 676972758] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 678027420] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 679415058] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 680226456] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 681132690] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 682632867] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 684621441] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 687425739] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 688849707] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 690382539] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 693182427] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 694233876] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 695630334] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 696759231] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 697844868] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 699694086] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 701256822] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 704003580] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 705410685] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 706949250] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 709891980] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 711322311] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 712617213] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 713466705] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 714391650] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 716014698] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 717650493] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 719494335] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 722035776] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 723886296] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 725392689] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 728134239] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 729238083] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 730578282] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 731442621] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 732361812] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 734442135] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 736465107] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 739926453] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 741683250] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 743336265] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 746489919] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 747538575] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 748779339] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 749638659] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 750994377] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 752512446] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 754053573] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 756756987] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 758076207] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 759756963] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 761376903] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 763442127] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 764549352] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 765760212] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 766591665] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 767471439] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 769115298] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 770678706] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 773447724] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 775292280] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 776904933] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 779607864] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 781147647] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 782702781] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 785517558] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 786574551] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 788148984] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 789141045] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 790076301] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 791527380] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 793040850] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 795649071] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 797081334] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 798640395] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 800409099] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 802548684] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 803608491] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 804852531] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 805654815] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 806542821] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 808282818] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 809778270] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 812710290] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 814320297] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 815856447] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 818737563] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 820238895] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 821770971] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 824495910] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 826439187] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 827976282] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 829872015] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 832525764] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 833505834] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 835180500] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 836266662] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 837347112] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 839004054] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 840026313] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 840949095] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 842645034] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 844217640] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 847009926] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 848509494] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 850045224] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 853025271] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 854527338] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 856016280] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 858830763] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 859795041] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 861498960] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 862584681] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 863682792] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 865041996] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 866117175] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 867053187] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 869018052] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 870553257] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 872354763] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 874680471] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 876196860] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 877908633] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 881221383] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 882836829] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 884372181] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 887554647] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 888545091] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 890592591] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 891646035] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 892733604] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 893944884] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 894762897] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 895617408] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 897900591] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 899517024] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 902205843] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 904161363] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 905180115] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 906794175] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 907930800] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 909449499] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 911033949] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 913735620] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 914731062] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 916814829] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 917916153] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 919035180] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 920258682] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 921068253] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 921944037] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 924040341] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 925577436] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 929512437] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 930634572] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 932287566] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 933339540] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 934954944] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 935979786] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 937721169] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 938806239] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 939923439] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 941645775] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 942589914] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 943486614] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 945281925] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 946829268] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 950162829] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 951167343] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 952827582] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 954166710] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 955212636] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 956930121] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 958018509] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 959192514] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 960450918] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 961766526] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 962887674] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 964135641] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 964919865] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 965878179] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 967628193] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 969217095] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 971863641] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 973191933] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 974731233] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 977294451] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 978886335] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 980382480] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 982977366] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 984314226] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 985815705] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 988116087] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 989803920] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 991586673] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 993169968] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 996264885] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 997722768] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 999265302] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1002316875] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 1003332246] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1004270883] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1006034400] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1007091918] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 1008009492] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1008845460] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1010503053] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1011548223] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1012626363] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1013926074] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 1014772332] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1015864542] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1017244116] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1018761387] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1021320972] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1022609931] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1024127769] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1026740799] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1028000232] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1029995946] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1032976224] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1034220663] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1035751689] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1038326814] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1039645866] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1041156816] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1043797629] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1045254063] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1046749053] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1049732313] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1051163652] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1052685417] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 1054069233] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1057305774] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 1058317701] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1059173850] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1060789779] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1061814999] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 1062832869] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1063743807] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1065378279] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1066415007] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1067446296] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1068920076] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 1070133834] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1071106722] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1072613640] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1074171210] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1076794026] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1078058415] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1079591541] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1082125884] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1083762120] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1085160573] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1087630320] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1088971170] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1090589934] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1093262037] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1094632791] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1096516617] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1099367745] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1100879115] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1102451889] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1105384728] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1106856513] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1108749075] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1111873980] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 1112862765] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1113717444] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1115373315] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1116418170] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 1117323249] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1118145126] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1119773802] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1121287125] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1122290127] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1123518102] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 1124301633] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1125202995] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1126454889] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1127952273] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 1129938957] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1131904011] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1133168043] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1135371720] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1137994767] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1139361153] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1140859041] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1143606681] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1144944759] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1146441198] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1149302280] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1150644096] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1152217542] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1154743086] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1155995316] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1157505930] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1160142585] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 1161542760] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1162434420] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1164041739] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1165092390] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 1166008830] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1166856033] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1168446888] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1169481768] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 1170380757] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1171201794] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1172794203] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1174220838] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1175505933] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1176692811] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 1177520736] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1178483355] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1180136496] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1181672877] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1184537235] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1186064166] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1187622009] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1190391405] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1191767997] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1193354190] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1196134107] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 1197332136] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1199295888] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1200905706] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1203880608] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1205273223] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1206844590] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1209660417] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1211197722] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1212697185] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1215342114] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1216430271] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1217430459] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1219154412] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1220228793] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 1221275160] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1222187043] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1224178725] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1225375809] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1226487108] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1227332505] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1229035794] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1230118806] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1231240080] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1232518434] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 1233395520] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1234301838] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1236216408] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1237968921] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1240947477] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1242356199] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1243915995] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1246903938] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1248580641] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1250500146] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1253646093] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1254775578] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1255723938] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1257447555] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1258543314] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1259624961] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1260532098] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1262755662] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1263940608] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1264988907] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1265935209] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1267617057] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1268782095] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1269904524] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1271142621] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 1271983188] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1272904500] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1274638197] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1276230669] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1278901911] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1280250783] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1281793779] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 1284454206] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 1285571490] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1287287925] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1288906542] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1291529358] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1293044193] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1294670811] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1297778475] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 1298844246] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1300093326] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1301848170] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1302953946] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1304026248] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1305267390] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 1306153926] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1307082147] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1308663384] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1310178282] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1313247957] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1314563712] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1316139846] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1318777677] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1320084927] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1321608015] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1324405866] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1325949240] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1327626300] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1330822311] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 1331882097] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1332833040] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1334569278] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1335639459] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1336969893] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1338301419] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 1339176909] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1340106432] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1341611628] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1343238624] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1345877694] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1347244647] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1348856754] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1352011185] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1353445989] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1354951059] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1357565517] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1358875119] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1360406943] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 1362637206] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1364406813] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 1365453369] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1366377285] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1368082044] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1369176963] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 1370176605] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1371032502] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1372742196] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1373829828] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1375253439] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1376468436] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 1377271434] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1378150578] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1379568603] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1381081548] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1383667635] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1384998111] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1386550032] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1389727710] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 1391155983] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1392762147] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 1395599142] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1397001459] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1398595170] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1401465660] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 1402466772] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1403361393] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1405074804] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1406166993] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 1407146559] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1408121715] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1409970387] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1411056402] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1412275200] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1413569766] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 1414441581] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1415364321] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1416657123] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1418249175] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1420848744] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1422104607] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1423643823] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1426534557] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1427824902] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1429352778] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1431961608] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1433312811] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1434916350] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1437741837] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1439258940] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1440882807] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 1442756553] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1445134614] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 1446151875] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1447054287] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1448757282] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1450035468] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1451224047] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1452453345] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 1453270371] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1454209218] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 1455661809] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1457259447] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 1459826424] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1461119247] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1462894650] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1465708167] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1467027996] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1468627503] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1471242192] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1472538291] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1474122657] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1477013139] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1478492022] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1480068660] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1483124202] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 1484097132] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1484988393] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1486673895] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1487890467] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1489437726] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1490881077] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 1491751926] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1492672125] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1494099285] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1495658745] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1498226835] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1499503068] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1501100559] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1503925374] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1505277144] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1506889713] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1509548019] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 1510501104] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1511403474] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1513115121] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1514212560] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1515650367] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1517038950] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 1517882709] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1518814983] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1520226750] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1521885813] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1524683202] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1525964937] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1527668709] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 1529834523] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1532173755] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1533503370] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1535090046] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1537734849] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 1538758788] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1539686757] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1541791671] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1542873969] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1543996020] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1545289242] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 1546157172] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1547081949] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1548526875] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1550138709] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1552974717] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1554231903] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1555793778] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1558383246] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 1559685414] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1561255773] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 1563973236] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1565545149] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1567273134] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1569914766] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 1571391612] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1572959892] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 1576167138] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 1577173689] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1578270372] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1579952577] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1581069420] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1582179900] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1583392629] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 1584243780] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1585170930] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1586629338] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1588234599] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1590996582] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1592235435] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1593760518] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1596369810] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1597611099] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1599224319] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1601860197] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1603522473] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1605070740] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1607820102] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 1608888057] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1610422590] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1611895866] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1614374685] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 1615371345] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1616477205] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1618058484] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1619056089] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1620106299] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 1621312371] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 1622625963] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 1623723801] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1624948647] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 1625757987] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1626649080] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1628173659] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1629712917] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1632335985] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1633670703] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1635200889] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1637769987] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1639184568] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1640937501] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1643833107] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1645167720] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1646709813] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1649349597] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 1650731061] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1652243040] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 1655072601] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 1656052797] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1656900819] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1658526786] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1659548373] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 1660537011] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1661405424] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1663132947] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1664246787] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1665413925] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1667103522] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 1668006711] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1668935205] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1670594499] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1672169898] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1674844731] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1676183082] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1677715725] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1680768642] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1682136813] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1683664479] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 1685651226] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1687702443] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1689047577] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1690665606] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1693730409] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 1695080961] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1696919700] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 1699646004] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 1700647473] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1701554568] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1703454900] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1704531402] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 1705541103] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1706418651] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1708154070] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1709261862] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1710390990] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1711699311] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 1712567556] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1713490191] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1715031906] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1717071951] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1720300596] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1721709570] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1723327788] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1725984393] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1727363988] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1728967464] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1731916725] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1733274879] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1734988437] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1737623706] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 1738969701] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1740554046] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 1743565215] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 1744606878] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1745559585] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1747300821] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1748396349] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 1749417789] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1750324611] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1752084453] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1753243506] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1754408796] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1755891816] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 1756930140] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1757879025] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1759381701] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1761028521] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1763657238] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1764978894] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1766600808] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 1767659418] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1771129437] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1772481564] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1774029432] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1776679653] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1778013783] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1779624924] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1782547305] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 1783644744] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1784481678] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1786110522] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1787194626] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1788292947] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1789543602] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 1790406744] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1791348069] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1792692405] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1794510207] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1797191718] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1798547037] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1800156666] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1802721879] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1804043682] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1805637687] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1808936199] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1810354539] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1812033510] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1814629047] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1816051587] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1817643996] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1820625303] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 1821622740] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1822509360] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1824221196] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1825333713] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 1826297256] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1827142758] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1828818327] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1829897244] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1830980718] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1832583039] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 1833442695] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1834339458] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1835924349] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1837551387] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1840228152] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1841605542] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1843220547] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 1844647980] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1847547177] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1848882462] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1850416638] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1852999344] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1854393303] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1855993797] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1859234349] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 1860244176] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1861175211] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1862903952] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1864000824] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 1864972515] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1865845989] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1867518765] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1868790924] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1870424283] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1871784222] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 1872634806] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1873607127] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1875170430] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1876746669] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1879436664] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1880804100] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1882587357] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1885248981] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1886547978] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1888156452] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1890746739] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1892158947] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1893739050] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1896965490] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1898377593] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1899921177] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1902668607] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 1903662789] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1904562681] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1906245033] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1907883936] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 1909109055] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1909967619] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1911649446] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1912748208] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1913862069] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1915167975] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 1915981389] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1916900559] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1918481208] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1920022020] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 1921995684] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1924260618] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1925593593] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1927225209] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1929854346] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1931101746] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1932631533] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1935449565] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1936848501] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1938392673] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1941026577] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1942467471] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1944259128] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1947470469] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 1948523766] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1949420361] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1951114074] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1952193201] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 1953159054] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1953974085] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1955685690] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1956812886] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1957855704] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1959441351] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 1960298970] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1961181201] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1962602775] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1964072691] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1966652604] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1968037890] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1969598379] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1972337178] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1973652114] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1975242591] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1977858267] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 1978819857] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1979711307] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1981440510] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1982555274] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1983800889] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1985335695] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 1986167631] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1987047993] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1988713734] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1990200303] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1992841410] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1994251203] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1995811209] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2013549993] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2014865664] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2016085302] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2017648920] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2020234734] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 2021232612] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2022420435] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2024340066] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2025437337] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2026552710] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2027872560] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 2028664869] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2029502643] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2030955990] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2032486827] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2035327602] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2036704152] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2038279929] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2040864084] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2042386080] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2043921747] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2046441369] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 2047821636] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2048725917] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2050429374] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2051536221] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2052592395] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2053877658] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 2054724588] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2055654258] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2057130348] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2058731367] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2061867885] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2063244561] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2064841779] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2067518334] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2068845093] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2070511254] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2073222732] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 2074222206] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2075050761] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2076720135] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2077767846] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2078809068] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2080013124] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 2080811355] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2081715846] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2083254075] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2085473103] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2090043501] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2091514614] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2093141925] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2095749873] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2097064746] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2099384175] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2101606710] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2103798963] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2105158671] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2106784344] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2109506721] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 2111014269] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2111964666] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2113714638] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2114813652] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2115920058] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2117179533] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 2118032826] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2118973941] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2120494467] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2122096452] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2125383771] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2126828193] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2128293237] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2130841923] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2132359824] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2133940095] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2136672006] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2138024070] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2139633804] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2142367206] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 2143409940] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2144310168] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2146014066] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2147151384] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2148503112] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2150058792] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 2150955597] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2151882264] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2153532675] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2155262067] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2158285962] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2159692416] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2161705623] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2164488795] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2166027024] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2167660824] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2169759144] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2171784426] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2173509492] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2175105996] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2177784168] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2179180626] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2180722278] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2183372667] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 2184484008] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2185503348] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2187444651] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2188507524] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2189673507] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2190954843] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 2191829199] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2192774052] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2194185336] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2195740050] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2198578158] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2199957963] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2201580402] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2204258721] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2205663831] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2207266929] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2210006421] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2211346137] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2212844739] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 2213697129] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2214715755] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2216148732] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2217813906] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2220455937] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2221812432] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2223614568] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2226808458] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2228212203] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2229811458] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2232559518] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2233651560] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2234889216] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 2235728733] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2236670436] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2238218325] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2239857396] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2242216893] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2243912412] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2245319433] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2246941053] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2249639070] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2251310775] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2252960493] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2255674995] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2257031427] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2258642106] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2261276703] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2262656676] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2264710308] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2267382012] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 2268379743] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2269308699] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2271010623] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2272258695] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2273392023] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2274684489] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 2275614012] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2276781192] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2278270218] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2279866806] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2282693553] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2284101204] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2285665746] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2288411202] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2289700035] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2291275959] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2293962489] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2295334125] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2296922817] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2299636164] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2301239766] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2302836417] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 2304208473] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2306824380] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 2307802602] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2308708101] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2310435078] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2311525965] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2312690457] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 2314271883] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 2315808810] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 2317001862] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2318337231] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 2319176433] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2320194534] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2321674488] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2323238568] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 2324277669] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 2325934212] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2327537856] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 2328616395] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2330299125] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2331902769] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2332855854] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 2334280032] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2335853709] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 2336896254] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2338422870] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2340113328] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 2341248126] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 2342767140] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2344316163] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 2345290416] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 2346822534] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2348413662] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 2349399927] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 2350543230] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2351710746] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2353427790] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2354527665] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 2355579933] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2356512081] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2358223644] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2359340634] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 2360378916] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2361243528] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2362965549] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2364483261] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2365751955] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2367099567] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 2367950907] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2368895613] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 2370704175] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2372337072] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 2373503790] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 2375074695] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2377077486] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 2378371569] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2380010430] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2381662038] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2382678648] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 2384175717] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2385807627] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 2386946310] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 2388417066] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2390499510] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 2391673914] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2393199984] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2394774186] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2395792707] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 2396972613] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2397923514] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2399692302] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2400753474] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 2402080758] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2403020445] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2404791543] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2405914665] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2407063617] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2408382102] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 2409233484] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2410187640] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 2411880744] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2413511562] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2414926059] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 2416604379] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2418217914] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 2419268040] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 2420778381] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2422370349] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2423372259] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2424807315] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2426417154] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2427553758] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 2429123487] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2430748425] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2431806531] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 2432841390] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2434537077] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2435642454] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 2436633738] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2438354625] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2439703854] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2441098863] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2442388410] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 2443258167] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2444239875] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 2445836337] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2447454639] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 2448488469] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2449890534] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2451499428] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2452867326] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2454405261] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2456029716] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2457019908] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 2458530312] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2460138492] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2461188975] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 2462837664] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2464629867] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 2465971914] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 2467495107] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2469110700] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 2470144887] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 2471172564] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2472884484] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2473983792] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 2474972472] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2476738803] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2478091392] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2479194312] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2480472708] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2481371907] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2482290342] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 2484230910] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2485859124] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 2486966769] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 2488564113] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2490803973] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 2492047698] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 2493805881] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2495456355] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 2496556923] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2498029569] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2499648984] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2500657761] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 2502621807] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2504582241] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2505795516] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2506896147] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2508618546] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2509711785] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2510755905] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2512492500] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2513587671] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2514782151] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 2516063109] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 2518042653] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 2519217225] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2520544971] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2521417059] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2522348262] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 2523938676] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2525549691] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 2526542886] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2528047557] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2530067988] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2531064354] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 2532680010] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 2534041482] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2535684711] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 2536697793] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2538284742] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2539935027] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 2540901741] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2542298787] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2544054429] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2545135719] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2546209722] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2547959442] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2549086617] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2550279921] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2551580409] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2552471040] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2553409992] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2555408625] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2557028103] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2558131527] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2559683994] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2561310822] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2562343686] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2564041032] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2565621702] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 2566794489] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2568730374] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2570327907] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 2571315264] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2572378242] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2574111393] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2575219185] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2576275800] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2578071909] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2579181108] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2580866589] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2582129361] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2582971188] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2583871248] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 2585791026] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2587417959] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2588566974] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2590258419] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2592110766] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2593169103] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2594861388] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2596478052] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2597544516] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2599115295] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2600753799] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 2601731853] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2602893489] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2604765429] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2606045799] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2607096912] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2608833339] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2609936931] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2611058898] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2612360940] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2613255561] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2614206651] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2616032475] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2618035329] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2619116892] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 2620721103] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2622340224] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2623375125] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 2624979588] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2626588902] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 2627662296] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2629362099] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2631667185] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 2632772289] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2634319821] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2635928715] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 2636908428] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2638102761] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2639843178] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2640950613] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2641971402] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2644397952] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2645487810] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2646615531] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2647887123] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2648748963] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2649688587] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2651726658] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2653375431] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2654496495] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 2656968489] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2658560205] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 2659628664] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 2661382437] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2662934883] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2663991267] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2665586532] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2667216069] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 2668764357] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2670176586] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2671954698] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2673016374] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2673994638] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2675778273] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2676872646] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2677954671] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2679199824] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 2680047594] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2680981233] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 2682878058] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2684499888] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 2685536826] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2687005671] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2688629538] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2689640856] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 2691215730] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2692870173] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2693922546] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2695800030] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2697427740] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 2698427655] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 2700059838] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2701607223] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 2702612976] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 2703688344] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2705414124] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2706489681] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 2707743381] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2709486465] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2710541820] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2711576175] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2712868935] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 2713767420] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2714684364] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 2716350567] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 2717781654] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2719302222] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 2720745195] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2722495860] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2724059016] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2725081443] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2726637375] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2728215651] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 2729270103] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 2730825573] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2732945355] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2734070766] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2735547864] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2737139769] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 2738169252] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2739715902] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2741303796] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2742243357] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 2743302093] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2745066954] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2746716441] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 2747829777] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2749563474] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2750661438] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2751721098] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2752975155] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2753849196] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2754774666] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2756574702] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2758251006] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 2759305899] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 2761188969] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2762841375] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 2763956538] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2765371581] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2767018044] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2768028690] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 2769730299] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2771387031] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 2772693630] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2774435895] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2776218396] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2777258379] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2778367725] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2780138445] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2781257535] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2782398255] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2783702103] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 2784569193] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2785512891] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2787372735] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2789008026] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2790152274] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 2791796217] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2793350427] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2794305066] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2795618322] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2797207161] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2798130342] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2799904821] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2801521464] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 2802616257] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2804287773] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2805916491] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 2806971258] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 2808057231] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2809804473] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2810901975] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 2811959577] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2814219408] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2815292865] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2816388603] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2817650766] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2818527978] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2819468190] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2821241367] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2822887284] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2823902025] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2825852505] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2827474713] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2828498295] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2830132053] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2831697267] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 2832757914] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2834321931] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2835919338] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2837017449] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2838736740] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2840356575] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2841410922] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2842368753] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2844091005] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2845243884] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2846367657] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2848004733] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2848875015] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2850010653] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 2852418975] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2854049562] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 2855056029] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2856637833] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2858262561] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2859279885] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2860920636] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2862543453] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 2863595049] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 2865438996] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2867016012] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2868040245] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2869123677] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2870868357] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2871975099] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2873000991] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2874703587] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2875830006] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2877108591] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2878757931] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 2879622648] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2880551562] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2882241327] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2883795180] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2884722351] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2886188634] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2887810737] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2888785410] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2890736037] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2892371475] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2893367106] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2894810793] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2896362189] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2897346333] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2898871857] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2900493561] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2901486504] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 2902955853] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2904869289] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2906095164] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 2907076305] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2908805697] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2909899188] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2911031886] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2912317275] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 2913205281] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2914133649] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2916295137] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2917886790] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2918883975] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2920491168] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2922063501] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2923057200] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2924574975] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2926154532] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2927095773] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2929342920] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2930937177] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2931946941] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 2933595105] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 2934948786] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2936569839] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 2937642288] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2939184213] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2941222683] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2942221569] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 2943283791] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2944920951] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2945987583] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 2946927354] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2948654352] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2949748662] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2950851141] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2952097407] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 2953356231] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2954400351] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2955955128] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2957564610] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2958514419] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2959951365] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2961534387] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2962916691] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2964457335] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2966614833] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2967588372] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2968974771] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2970558738] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2971530198] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2972941818] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2974557579] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2975546868] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 2976608103] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2978800566] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2979924444] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 2980934670] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2982650223] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2983762593] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2984911461] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2986223058] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 2987093844] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2988039558] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2989596708] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2991358083] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 2992364235] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2993701830] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2995282542] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2996264838] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2997676731] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2999202738] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3000163803] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3001624101] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3003401289] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3004328292] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3005721936] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3007268901] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3008158020] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 3009209385] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3010741419] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3011820777] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 3012811410] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3014519046] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3015948957] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3017100702] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3018413937] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 3019283757] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3020263407] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3021773580] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3023386611] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3024514752] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 3025956381] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3027585834] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 3029011188] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3030409536] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3032034789] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3033130065] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3034699836] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3036302598] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3037466607] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3039054312] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3040888200] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3042339783] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 3043424643] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3045185514] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3046285515] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3047391900] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3048688818] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 3049566387] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3050481630] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 3052052031] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3054083403] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 3055134117] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3056498823] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3058132602] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3059191506] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 3060638385] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3062268993] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 3063319518] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 3064691595] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3066833112] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 3068257059] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 3069310986] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3071135571] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3072276795] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3073380345] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3074675856] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 3075548427] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3076486707] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3078211752] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3079692987] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3081089550] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3082823100] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3084325671] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3085286127] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3086593272] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3088103403] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3089094498] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 3090400362] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3091911648] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 3093218583] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 3094278180] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3095862756] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3096842196] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3097850721] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3099026406] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 3099790701] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3100658190] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 3102316539] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3103851786] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 3104876439] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3106947585] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3108554232] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3109630482] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 3110672355] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3112426107] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3113526780] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3114647298] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3115948185] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 3116805321] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3117726108] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 3119400228] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3120883752] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 3121856703] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3123195936] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3124692102] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 3125815686] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 3126832947] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3128427246] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3129533589] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3130768053] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3132368001] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 3133208841] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3134079900] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 3135740223] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3137269443] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 3138215367] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 3139858428] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3141402117] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 3142416018] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 3143693007] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3145403205] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3146543946] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3147635106] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 3148917219] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 3150262479] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 3151389297] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3152634156] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 3153427074] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3154286709] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3155935566] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3157563738] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3158523249] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 3159932895] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3161499348] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3162497499] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3163909686] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3165543717] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3166551948] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 3168054834] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3169992252] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3170994414] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 3172407315] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3174056823] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 3175135089] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3176312076] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3177610506] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 3178511007] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3179432613] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3181091130] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3182725476] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 3183739062] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3185278929] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3186910377] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3187897860] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3190146855] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3191780298] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3192831726] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3194368632] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3195807447] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 3196671345] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3197604186] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 3199112700] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3200676612] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3201610377] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 3203013408] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3204568311] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 3205508817] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 3207616167] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3209315256] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3210909681] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3211961046] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3213031710] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3214320291] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 3215183727] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3216125556] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3217687872] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3219841254] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3220785750] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3222193485] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3223812879] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3224822664] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3226925226] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3228483489] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3229512804] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3230605014] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3232341000] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 3233181504] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3234107751] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 3236865828] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3238521048] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 3239543979] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3240631989] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3242254281] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3243263310] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3245261670] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3246822831] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3247871466] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3248957964] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3250330419] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 3251193960] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3252152547] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3253832568] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3255439719] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 3256821120] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 3258217641] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3259864398] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 3261006924] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 3262477302] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3263912736] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 3264903117] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3265902759] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3267079851] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 3267863193] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3268849983] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3270955863] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3272537688] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 3273629268] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3275014449] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3276598710] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3277610511] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 3279195843] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3280818429] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 3282224043] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3283593621] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3284880669] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 3285749397] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3286677891] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3288406401] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3290038899] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 3291022266] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3292546509] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3294424959] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 3295469058] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3296935593] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3298515276] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3299527602] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3300597216] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3301861479] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 3302733294] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3303660738] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3305075487] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3306857967] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 3308232963] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3309347349] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3311021805] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 3312102045] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 3313700796] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3315310236] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 3316320567] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3317441946] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3318735126] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 3319953273] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3320979816] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 3322551960] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3324147246] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 3325137165] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 3326305836] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 3327544269] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3329283741] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 3330326307] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3331422696] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 3332862981] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 3334249527] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 3335377416] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3336696090] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 3337563768] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3338496924] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 3340650999] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3342176082] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 3343218123] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 3344908350] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3346412706] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3347388807] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 3349025610] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3350678709] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 3351702291] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3353250033] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3354756279] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 3355789710] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 3356810142] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3358021023] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3359630694] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3360686805] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3361877547] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3363184314] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 3364060938] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3365036787] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3367029456] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3368724177] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 3370104045] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3371538303] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3373089657] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 3374066535] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3375618981] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3377175753] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 3378179532] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3379421220] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3381048363] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3382256430] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3383448537] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3384739302] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3385626972] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3386546499] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 3388294749] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3389812713] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 3390735810] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3391818360] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3393321351] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3394324311] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3396043833] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3397720599] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 3398737587] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 3399902688] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 3401000043] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3402657615] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 3403619856] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3404780946] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3406039392] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3406898040] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3408294750] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 3410111817] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3411733815] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 3412750215] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3413947131] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3415583073] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3416628768] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3417814197] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3419453142] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 3420701550] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 3421964028] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 3423340683] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3425067198] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 3426091767] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3427241790] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3428551329] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 3429458088] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3430398636] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3432798411] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3434356653] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 3435227922] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3436847106] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3438436806] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 3439363515] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3440929149] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3442565784] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 3443537055] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 3445023330] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3446806671] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3448475751] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 3449513655] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3451229439] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3452858472] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3453886191] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3455010426] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3456239808] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 3457055385] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3458115906] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 3460921443] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3462554277] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 3463592454] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 3465376803] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3467017617] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 3468068016] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 3469824771] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3471477219] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 3472913976] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 3474828210] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3476479797] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3477548151] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3478692315] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3480127665] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 3481019577] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3481956282] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3483697518] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3485523783] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 3486729309] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3488126922] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3489749214] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 3490742892] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3491981493] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3493598136] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3494610462] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3496327359] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3498225927] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 3499303815] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3500423766] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3501716547] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 3502594200] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3503527314] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3505404126] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3506996010] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 3508077342] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3509718597] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3512027127] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 3513003564] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3514276689] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3515914332] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3516917817] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3518211270] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3519856599] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 3520853196] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3521982093] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3523279872] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 3524175291] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3525309774] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3527532876] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3529148364] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 3530237676] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3531495198] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3533108103] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3534157221] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3535282716] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3536548092] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 3537404199] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3538432212] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3540124140] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3541728708] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 3542778372] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 3544270422] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3545905965] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 3546932193] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3548293665] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3549845145] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3550803018] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 3555296535] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3556894404] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 3557912673] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3559949778] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3561533115] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 3562508481] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 3564717429] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3566335962] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 3567361707] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3568509819] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3569805855] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 3570658497] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3571589847] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 3572984646] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3574540410] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 3575509077] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3577083867] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3579094911] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 3580089744] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3581733729] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3583289871] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 3584345940] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3585420153] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3586652685] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 3587553102] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3588489534] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3590720406] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3592373001] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 3593511726] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3595110813] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3596759775] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 3597876261] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3599036364] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3600322845] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 3601192644] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3602183256] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3603880140] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3605498358] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 3606574650] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3608606064] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3610129908] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 3611416851] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3612579915] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 3613867593] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 3615368904] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 3616894785] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3618215433] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 3619085148] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3620027565] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3621400692] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3622860444] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3623757501] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 3624964686] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3626564823] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 3627554532] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3628801785] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3630629835] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3631586658] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3633008421] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3634700517] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3635769270] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3637236288] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3638824455] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3639890772] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3641284500] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3643140648] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3644157531] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 3645201693] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3646943265] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3648035643] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3649176909] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3650453793] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 3651313596] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3652249230] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 3654207795] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3656103759] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 3657221589] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 3658261992] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3659778654] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 3660890898] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3662462580] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3664052385] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 3665080209] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3666525912] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3668380380] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 3669418326] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3670470867] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3671648421] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 3672481491] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3673449150] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3675069846] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3676583547] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 3677691087] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 3679895184] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 3681182778] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3682473438] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 3683481879] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3685118787] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3686762646] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 3687816426] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 3689371077] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3690998115] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 3692166870] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3693782505] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3695151516] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3696047376] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3697008231] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3698172366] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3699871917] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 3700927419] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3702251763] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3703625478] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 3704665566] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3706511277] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3707892825] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 3708971406] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3710505456] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3711885891] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 3712962834] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3714057270] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3715738257] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3716776917] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3718724667] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3720390702] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 3721405380] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3722548977] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3724284648] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3725383368] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3726542904] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3727818675] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 3728694795] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3729628497] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3731397474] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3733034088] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 3734044272] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 3735387348] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3737001891] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 3737971545] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3739337511] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3740950017] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3741926811] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3743515377] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3745147791] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 3746156400] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 3747214359] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3748837974] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 3749856033] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 3751229307] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3752799834] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 3753821253] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3755315445] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3757030893] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 3758133099] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 3759488418] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3761040423] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3761994453] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 3763363359] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3764858097] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 3765766704] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 3766805259] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3768696750] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3769753617] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3770818926] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3772038333] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 3772834149] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3773716002] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3774802269] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3776042571] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 3776924844] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3777861843] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3778983747] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3780363174] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 3781440285] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3782371551] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 3784194519] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3785831469] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 3786842094] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3788020803] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3789654099] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 3790664829] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3792194511] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3794162043] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 3795353520] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3797113887] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3798736137] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3799775406] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 3800877465] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3802504503] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 3803613282] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 3804714585] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3805796316] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3807728673] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3808818909] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 3809837388] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3810749859] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3812453022] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3813591999] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3814718397] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3815989863] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 3816876924] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3817801722] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 3819863481] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3821444529] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 3822518259] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 3824186835] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3825835125] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3826935420] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 3828608406] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3830219379] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 3831550884] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3833573709] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3835177353] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 3836247534] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 3837286824] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3838195725] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3839955672] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3841068231] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3842216826] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3843504777] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3844380288] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3845466912] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3847312203] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3848873217] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 3849861141] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3850916748] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3852555483] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3853603740] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3854604369] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3856266624] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3857330925] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3858660960] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3859944522] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 3860838765] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3861767238] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3863420946] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3865024947] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 3866020851] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3867603222] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3869156550] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 3870164508] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3871858410] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3873503718] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 3874553739] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3875662560] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3876945156] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 3877811427] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3878747775] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3880664214] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3882297804] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 3883679646] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3884857116] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3886493541] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3887605512] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3888729117] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3890351241] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3891476736] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3892545153] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3894077061] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3895088274] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3896538765] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3898160406] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3899266056] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3900386028] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3902001222] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 3903071403] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3904639473] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3906230664] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 3907306116] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3909149685] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3910785543] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 3911816832] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3912905871] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3914532489] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3915635955] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3916744188] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3918364989] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 3919456884] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3921236613] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3922944375] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 3923895759] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3925491234] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3927025683] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 3927975870] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 3929074233] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3930655512] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3931691820] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 3932892432] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3934830627] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 3935879703] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3936936423] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3938119626] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 3938994570] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3939899544] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3941470596] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3943168236] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 3944123694] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 3945563370] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3948442407] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3949422225] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3951012786] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3952896885] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 3953882667] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3955388955] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3957072693] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 3958064229] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3960080880] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3961633725] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 3962567364] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3963691368] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3964915080] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 3965823309] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3966723054] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 3968389173] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 3969776244] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3971771055] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3972938928] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 3975749694] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3977937516] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 3979446744] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3981649938] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3984120525] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 3985282581] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 3987127998] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3988907412] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 3989902581] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3991125054] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 3992330601] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 3993577518] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 3994625313] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3995835081] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 3997157136] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3998203923] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 4000553970] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4002045789] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 4003092870] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4004148897] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4005885555] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4006917264] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4008053847] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4010301036] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 4011392658] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4012466577] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4014149622] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4015187904] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4016215455] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4017947031] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4019059002] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4020287250] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4021781148] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4022683938] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4023629064] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 4025724885] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4027309986] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 4028387706] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4029480588] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4031240661] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4032265398] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4033593165] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4035728508] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 4036827816] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4037872230] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4039616868] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4040675394] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4041747591] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4043026155] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4043912439] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4044852021] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4046404152] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4048586703] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 4049594388] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4050784773] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4052387598] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 4053486885] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4054692579] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4056612987] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 4057656813] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4058742975] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4060292544] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4061458464] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4062431100] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4063983315] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4065673752] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 4066724781] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4068081045] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4069779084] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4070799642] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4071949161] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4073637330] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4074975954] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4076133138] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4077356871] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4078302480] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4079232780] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4080565545] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4082282673] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 4083358608] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4084614408] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4086186510] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 4087749540] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 4089205659] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4090910397] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4091998407] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4093174974] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4094420463] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4095280770] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4096220478] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4097263863] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4098946551] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 4100357940] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4101616785] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4103259678] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4104315705] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4105510164] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4107131049] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 4108203309] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4109295729] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4110522675] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4111374393] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4112533698] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4113881898] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4115509272] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 4116569205] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4117690500] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4119373146] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4120408530] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4121474343] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4123211610] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 4124521905] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4125682029] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4127395314] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4128493362] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4129586202] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4130865669] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 4131692313] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4132574880] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 4154132199] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4155737397] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 4156777317] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 4157870346] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4159621158] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4160628318] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 4161657129] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4163494419] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 4164594756] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 4165605570] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4167330090] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4168403211] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4169497773] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4170831903] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 4171812267] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4172739753] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4174095702] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4175819655] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 4176901764] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4198638255] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4200646800] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 4201860180] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 4203027465] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4204619475] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4205692407] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4206786129] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4208049846] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 4208919918] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4209846333] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4211221686] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4213084050] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 4214222271] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4215294741] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4216919112] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 4218050004] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4219118232] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4220754279] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 4221882693] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4223002728] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4224674769] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 4225958709] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4227082251] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4228979454] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 4230154635] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4231191300] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4233097428] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 4234141968] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4235169015] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4236915480] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 4238438106] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4239680004] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4241425440] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 4242558432] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4243685964] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4245409245] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 4246524114] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4247661243] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4249354935] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 4250785035] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 4252188696] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4253967270] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 4255158579] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4256169771] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4257887046] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 4259062332] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4260157923] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4261772466] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 4262856822] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4263948633] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4266136245] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 4267285848] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4268419995] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4270094703] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 4271158332] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4272192960] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4273918929] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 4275010929] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4276107213] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4278136485] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 4279371642] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4280552682] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 4281830994] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 4283241858] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 4284414897] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 4285302378] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4286394189] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4287981138] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4289712588] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4290939324] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 4292421504] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4294060785] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 4295349345] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4296965127] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4298614110] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 4299586074] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4301278107] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4303241691] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 4304298495] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4305818895] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4307449755] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4308450909] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4309596879] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 4310480769] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4311402249] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4312975968] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4314616005] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 4316010069] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4317677784] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4319312676] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4320302826] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 4321857498] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4323464775] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 4324454463] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 4326065121] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4327914864] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 4329083703] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4330786908] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4332438516] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 4333511553] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 4334594712] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4336336221] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4337427108] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4338557517] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 4339391952] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4340532567] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4342509696] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4344201183] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 4345193097] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 4359025482] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 4360614699] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4362226260] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 4363201752] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4364666271] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4366221174] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 4367216700] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4369132950] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4370765931] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 4371818661] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 4373554458] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4375140441] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 4376198736] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 4377897678] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4379470200] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 4380893832] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 4381987659] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4383680490] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4384782255] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4385830008] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 4386648777] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4387529139] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 4388980428] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4390585374] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 4391609124] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4393270917] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4394781258] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 4395727980] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4397181159] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4398706011] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 4399702608] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4401300078] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4402902378] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 4403922117] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4405623684] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4407219957] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4408256349] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 4409966841] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4411587957] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 4412590854] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 4413687453] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4415399604] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4416506787] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4417719033] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 4418696877] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4419642339] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 4421394684] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4422976446] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 4424004858] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4425562260] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4427182179] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 4428261789] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 4430094543] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4431806022] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 4432920219] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4434684492] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4436310375] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 4437388263] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 4438437633] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4440148650] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4441250457] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 4442220321] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4444417635] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4445882448] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4447141020] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 4447994292] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4448940720] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4450341273] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4451948361] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4452966861] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4454457168] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4456036347] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4457004909] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4458753936] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4460354199] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4461270513] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4462718358] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4464312342] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 4465369146] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4466491239] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 4467355830] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4468297050] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4470104583] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4471720764] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 4472778261] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4474342404] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4475939181] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 4477038405] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4478827731] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4480317534] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 4481252475] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4482442461] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 4483382148] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4484310516] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 4486116810] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4487491281] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 4488506316] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 4489585632] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4491298854] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 4492292742] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 4493365590] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4495130619] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4496491692] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4497848103] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 4498743270] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4499682096] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4501260456] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4502916474] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4503909774] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4505455227] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4507086129] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4508353332] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4509578850] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 4510570218] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4511521224] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4513220229] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4514901972] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 4516024926] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 4517837226] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4519562943] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4521638919] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 4522707504] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4524386727] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4526075337] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 4527214692] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4528904163] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4530587481] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 4531635171] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4532912769] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 4534133562] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4535327895] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 4537041369] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4538613807] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 4539557316] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4541221503] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4542889302] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 4543946820] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4545189075] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 4546409091] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 4548132876] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 4549471836] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4550796831] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 4551692523] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4552592562] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4554901806] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4556531154] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 4557570045] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 4558627941] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4560592092] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 4561837581] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 4564283325] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4565848980] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 4567016811] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 4568685681] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4570355622] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 4571574441] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4572714699] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4574077263] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 4575050802] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4576186671] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 4578490539] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4580192820] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 4581219993] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 4582678338] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4584466509] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 4585530789] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 4586813175] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4588720080] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 4589787825] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4590923589] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4592211120] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 4593075081] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4594032534] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 4596481050] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4598037633] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 4599270795] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 4601680188] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4603349520] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 4604585328] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 4606968513] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4608535869] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 4609736292] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4610819262] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4612020630] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 4613161056] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4614074577] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4616717322] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4618343541] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 4619371197] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 4621181775] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4622736342] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 4623815322] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4625049345] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4626473628] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 4627313880] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4628196174] Running FIND.existing: FIND DUP . CR +[Hera] 35784496 +[Hera] [HADES][TEST ] [KRELTSC: 4629931719] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4631518017] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 4632519171] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 36118080 +[Hera] [HADES][TEST ] [KRELTSC: 4634466984] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4636029531] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 4637038686] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4639062225] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4640628342] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 4641601230] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 4642558704] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4644160857] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 4645175514] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4646286687] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4647496560] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4648401933] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4649299662] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4650840579] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4652545233] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 4653643890] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4654969053] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4656653274] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 4657667196] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4658885175] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4660117896] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 4661008527] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4661928999] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 4663812132] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4665471909] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 4666528104] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 4667734218] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4669462665] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 4670515899] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4671675162] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4672967187] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 4673875773] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4674785892] Running LATEST.basic: LATEST @ . CR +[Hera] 35865920 +[Hera] [HADES][TEST ] [KRELTSC: 4676699475] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4678338882] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 4679391003] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 35905104 +[Hera] [HADES][TEST ] [KRELTSC: 4681364457] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4682977404] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 4684034523] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 35905104 +[Hera] [HADES][TEST ] [KRELTSC: 4686074043] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4687692807] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 4688960199] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4690161798] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4691399895] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 4692272340] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4693177839] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 36119592 +[Hera] [HADES][TEST ] [KRELTSC: 4695621609] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4697206164] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 4698193941] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 36120056 +[Hera] [HADES][TEST ] [KRELTSC: 4700577798] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4702207818] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 4703324220] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 4704672315] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 4705877064] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4707613722] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 4708655343] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4709777772] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4711077378] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 4711958517] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4713035691] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 4714855719] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4716454113] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 4717405392] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 4718554911] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4720307256] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 4721371704] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4722551400] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 4723842984] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 4725227514] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 4726593018] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4727887878] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 4728780483] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4729680396] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 4735297770] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4736788623] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 4737788916] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 36124576 +[Hera] [HADES][TEST ] [KRELTSC: 4743799473] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4745302401] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 4746318045] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 4754779176] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4756115973] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 4757209695] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 4765529076] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4767049959] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4768156050] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 4773774495] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4775181852] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4776434250] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 4778148606] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 4779146211] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4780939905] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 4781986083] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 4783092552] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 4784029866] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4785838176] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 4786900419] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4788099771] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4789642200] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4790544675] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4791470880] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4795459326] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4796903664] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 4797839235] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4799687067] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4801480005] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4803045681] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 4808369832] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4809645414] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4810643103] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4811746968] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4813014696] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4814085696] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4815034161] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4819109925] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4820611761] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 4821612390] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 4826698758] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4828225500] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 4829195091] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 4834497108] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4835988612] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 4837075677] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4838280993] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4840071768] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 4840997154] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4841919726] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 36130560 +[Hera] [HADES][TEST ] [KRELTSC: 4843428513] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4845088248] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 4846170252] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 4847380629] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4849004874] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 4850294211] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 35875728 +[Hera] [HADES][TEST ] [KRELTSC: 4854970785] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4856511303] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 4857496098] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4858563780] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4859781759] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 4860604917] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4861521546] Running CURRENT.basic: CURRENT @ . CR +[Hera] 36130560 +[Hera] [HADES][TEST ] [KRELTSC: 4862985141] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4865020692] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 4866096564] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 36127264 +[Hera] [HADES][TEST ] [KRELTSC: 4871689263] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4873178709] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 4874134902] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 4875412899] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 4877058921] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4878694485] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 4879939743] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4881103794] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4882388805] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 4883274417] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4884211941] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4886710983] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4888358685] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 4889641428] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4895878491] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4897362330] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4898342568] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 4903306023] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4904781819] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 4905754749] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4906925898] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 4908214542] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 4909580424] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 4910674524] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 4911994563] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4913290746] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 4914218148] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4915611498] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 4917267012] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4919039076] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 4920109950] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4921302414] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4922566404] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 4923448803] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4924308711] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 4925372781] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4927028106] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 4928235438] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 4929384285] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4930949268] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 4931918208] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 4933538169] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4935079233] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 4936323924] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4937431569] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4938664101] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 4939663974] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4940814354] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 4942413336] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4943938503] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 4945202703] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 4946324796] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4947841101] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 4948805778] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 4949820582] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4951534308] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4952916339] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4954538841] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4955843865] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 4956668367] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4957558515] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4958595432] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4959822483] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 4960647132] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4961549691] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4962641271] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 4963931826] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 4964820798] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4965757587] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4966967754] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 4968355350] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 4969679484] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 4970809221] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4972070460] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 4972917516] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4973837526] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4975839750] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4977647535] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 4978715553] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 4979891007] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4981871181] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 4982988192] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 4984355733] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 4985514135] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4987219314] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 4988373075] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4989496176] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 4990651491] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 4991463078] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4992370131] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 4993318638] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4995414963] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 4996478277] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4998447111] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4999933386] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 5000899470] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5001934224] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5003172636] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 5004065472] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5005039851] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5007331938] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5009005134] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 5009996838] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5011717011] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5013304611] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 5014280460] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5016089757] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5017718916] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5018749029] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 5020315251] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5022101385] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5023203276] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5024342589] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5025619515] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 5026524741] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5027441832] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5029633665] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5031202113] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 5032366794] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 5034196587] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5035725786] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 5036709657] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 5038612887] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5040163128] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 5041112685] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5042191581] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5043359517] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 5044286982] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5045577432] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 5047178871] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5048838123] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 5049849357] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5051763465] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5053436388] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 5054431452] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 5055480738] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5057500182] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 5058676371] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5059841094] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5061155085] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 5062039773] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5062984458] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5066491584] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5068106631] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 5069161356] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 5071296405] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5072858742] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 5073850803] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 5074790742] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5075620158] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5077278423] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5078329872] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5079389070] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5080613979] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 5081493417] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5082649257] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5085318903] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5086919775] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 5087918661] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 5088823194] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5090234562] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 5091397353] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5092532928] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5093778984] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 5094608232] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5095516965] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 5096770665] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5098348836] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 5099349528] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5101220103] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5102854239] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5103827505] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5104889727] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5106158022] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 5107047519] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5107957953] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5111026767] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5112691416] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5113689273] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 5115180189] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 5116178865] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5117796516] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 5118986145] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5120132073] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5121378423] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 5122528782] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5123424222] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5126064741] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5127544002] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5128531905] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 5129667942] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 5130710592] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5132452332] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 5133632700] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 5135064207] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 5136038187] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5137753278] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5138872431] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5139932805] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5141266536] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 5142161010] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5143102188] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5145802494] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5147877462] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5148863517] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 5150069022] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 5151115305] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5152874475] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5153988525] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5155138485] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5156420556] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 5157306924] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5158252680] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 5161118613] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5162752539] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 5163773559] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5165847267] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5167357713] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 5168313906] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 5169809673] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 5170748940] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5172662313] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5173728378] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5174879556] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 5176169901] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 5177534733] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 5178685974] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5179972266] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 5180824803] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5181760563] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5184843216] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5186367837] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 5187390453] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 5189503662] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5191100691] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 5192162409] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 5194056357] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5195767626] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5197531521] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5199083190] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5201088480] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5202691872] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5203755354] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 5204803212] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5205646299] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5207613726] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5208714462] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5209852788] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 5210688651] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5211619917] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5214309765] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5215764960] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 5216780415] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 5218799838] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5220341343] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 5221392498] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5223501549] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5225492244] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5226547620] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5228472564] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5230066338] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5231126166] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 5232091158] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5232925593] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5234622477] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5235724536] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5236919751] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5238418227] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5239296867] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5240231493] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 5241331662] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5242190877] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5243867286] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5244917433] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5246517171] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 5247349002] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5249012538] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5250300090] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5251367583] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5252242149] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5253157833] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 5254340700] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5255196450] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5256905871] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5257976577] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5259617433] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 5260470327] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5262421941] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5263536348] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5264712264] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5265994587] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 5266865289] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5267790129] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 5268943281] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5269803525] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5271545937] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5272598205] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5274094707] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 5275158693] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 5276154723] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5277913452] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 5279000076] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5280064860] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 5280922836] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5281852275] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 5282881737] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5283677847] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5285281491] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5286270150] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5287850169] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 5288603691] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 5289436950] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5291023815] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 5292054411] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5293067010] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5294245635] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5295041703] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5295923955] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5298425538] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5300223306] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 5301215619] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5303914791] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5305480656] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 5306498001] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 5307483699] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5308374330] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5310042864] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5311131105] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5312233500] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5313445893] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5314542177] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5316789555] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5318290950] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 5319262074] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 5321208333] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5323486413] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5324953746] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 5326189659] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 5327108892] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5327886480] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5329476936] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5330485608] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5331506670] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5332660305] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 5333476785] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5334315210] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5336513343] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5338389525] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5339278959] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 5340821493] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5342297415] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 5343301698] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 5344390863] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5345194533] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5346795594] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5347763400] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5348788032] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 5349574125] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5350760205] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5352942588] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5354421240] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5355301245] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 5356797180] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5358242904] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 5359169046] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 5360105772] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5360906166] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5362489083] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5363754039] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5364795030] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5365940244] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5366719302] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5367566652] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5369919534] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5371414776] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 5372315760] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5374403664] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5376062265] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 5377060962] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 5378163294] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5378953713] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5380615044] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5381586273] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5382610254] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5383390320] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5384248695] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5386566318] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5388188358] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 5389107675] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5391026298] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5392525740] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 5393503080] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 5394419520] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5395215357] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5396814066] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5397774921] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5398795206] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5399946804] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 5400973452] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5402015913] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 5403775083] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5405556282] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5407053036] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 5407970547] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 5409015759] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5409822222] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5411413224] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5412365868] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5413592121] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 5414768772] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5415629856] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5417776938] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5419279782] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 5420215164] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 5421132402] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5421956148] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5423540283] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5424502440] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5425606935] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5426796018] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 5427564072] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5428457937] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5431365891] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5432828268] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5433715581] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 5435714907] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5437269453] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5438344884] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5439812763] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5441266740] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 5442230640] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5444634132] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5446064295] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5447007909] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5447997891] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 5448782871] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5449622724] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 5451897234] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5453207382] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5454653337] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5455596048] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 5457607701] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5459063421] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5460003297] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5461810011] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5463586296] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 5464632495] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5467237776] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5468694084] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5469645468] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5470706808] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5471881737] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 5472650001] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5473505478] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5476475697] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5477977155] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5478912579] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5480417439] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5481897141] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 5482852746] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5485349667] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5486859147] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5487791883] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5489034138] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 5489897763] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5490754458] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5492853870] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5494336995] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5495481285] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5496931818] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5498390898] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 5499337200] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 5501009808] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5503211595] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5504672376] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5505618258] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5506618614] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5507797407] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5508580833] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5509424508] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5511508905] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5513040813] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 5514128865] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 5515307784] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5516118279] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5517687420] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 5518624398] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5519630529] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5520433653] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5521270797] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5523377538] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5524860348] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 5525777544] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 5526889011] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5527761582] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5529350022] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 5530312011] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5531312850] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5532505293] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5533311273] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5534151651] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 5536801935] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5538276513] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 5540186589] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 5544639513] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5546307354] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5547316929] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 5549479320] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5550958455] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 5552337021] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5553644376] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5554518186] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5555451531] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 5557713441] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 5559879507] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5561515218] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 5562524436] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 5565142464] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5566769166] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5567766456] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 5569925781] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5571534864] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 5572503657] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5573607984] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5574807924] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 5575598406] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5576510940] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5579063973] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5580540273] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5581521204] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5583392514] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5584864257] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5585809026] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5587783677] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5589401895] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5590879749] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5593530096] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5595254784] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5596262196] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5597324229] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 5598158202] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5599077666] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5601533280] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5603123673] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5604404379] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 5606722275] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 5608061151] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5609687622] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5610761814] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5612785206] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5614261884] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5615176623] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5617241364] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5618821803] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5619775287] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5620802670] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5622038730] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 5622822492] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5623689477] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5626061847] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5627638947] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5628708057] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5631351768] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5632819311] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5633830041] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5634897135] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 5635743540] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5636664768] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5638997301] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5640559743] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5641726713] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5644229997] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5645696049] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5646645081] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5647709004] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5648973981] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 5649857682] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5650779855] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5652774708] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5654501496] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 5655657483] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 5657442399] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5659052343] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5660607603] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5661538260] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5663554029] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5665093896] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 5666001852] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5668190808] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5669771625] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5670715008] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5671757784] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 5672542764] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5673399711] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5675376021] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5676868890] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 5677752843] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5679760233] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5681245626] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5682142053] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5684053872] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5685605835] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 5686513392] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5688427836] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5690021631] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5690976018] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5692325541] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5693677836] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 5694533712] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5695419324] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5698284522] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5699785329] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5700692823] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5702669679] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5704203477] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5705434077] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5708153493] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5709671919] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 5710569438] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5711578194] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 5712394716] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5713231650] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5715483921] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5717054091] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5717990145] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 5720091405] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5721764874] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5723381202] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5724327525] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5726926044] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5728491594] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 5729415993] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5730537624] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5731859616] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 5732970621] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5733879207] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5736249729] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5737784472] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5738650911] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5740790286] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5742338952] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5743232880] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5744433912] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 5745517428] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5746418244] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5748841665] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5750482605] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5751468135] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5753708583] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5755356033] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5756336082] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5757731616] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5758980486] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 5759878950] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5760808557] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 5763288237] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 5764301004] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5765807166] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5766729045] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5768963571] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5770684542] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5771675301] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5772715305] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 5773553394] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5774408472] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5776612695] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5778228225] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5779190550] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5781563928] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5783635788] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5784632910] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5785759476] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5787061560] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 5787916407] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5788863633] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 5792351796] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5794184928] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 5795626578] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 5798281146] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5799887751] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 5800845456] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 5803751814] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 5804989554] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5806530282] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5807689377] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 5810331786] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5811907353] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 5812880115] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 5815162962] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5816733489] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 5817746277] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5818877358] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 5819846109] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5821049430] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 5823537447] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5825183154] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 5826185274] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 5828579463] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5830217295] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 5831111202] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5833587564] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5835110673] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5836089357] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 5838451164] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5840175117] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 5841128244] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 5843357541] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5845004361] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 5846317785] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5847487233] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 5848742550] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 5850151881] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 5851534542] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5852826819] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 5853745044] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5854678032] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5857054245] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5859231441] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 5860356600] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5862492216] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5864155206] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 5865266799] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5867287860] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5868854082] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 5870034198] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 5871240207] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 5872186362] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5873799687] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 5874785112] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 5875819950] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5876757747] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5878435143] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5879482896] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5880624750] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5881908816] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 5882960874] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5884191117] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5886693918] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5888332044] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 5889407622] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 5891198040] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 5892800067] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5894373135] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 5895441216] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5897568684] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5899250364] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 5900251476] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 5901407085] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 5902347444] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5904072279] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 5905156593] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 5906279967] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5907250146] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5909029287] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5910359469] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 5911446744] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5912420556] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5914214355] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5915305935] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5916478596] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5917770474] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 5918728662] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5919680466] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 6000275988] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6001979991] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 6003148032] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 6087594345] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6089295324] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 6090446523] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6173896911] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6175695351] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 6176755536] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6177932544] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6179227593] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 6180170388] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6180996969] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 6183220281] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6184954671] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 6186390861] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 6187994421] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6189730659] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 6190847271] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 6192267711] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6193982172] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 6195104202] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6196304268] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6197608557] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 6198543624] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6199692534] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6205864287] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6207543384] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 6208678035] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6214199985] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6215897499] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 6216985005] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6220087692] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6221803224] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 6222995667] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 6226033401] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6227721675] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 6228793872] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 6231652539] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6233344992] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 6234421683] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 6236176485] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6238089648] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 6239170350] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 6240998253] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6242962803] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 6244452417] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 6245926386] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6246923298] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6248675685] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6250146735] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6251370867] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6252631959] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 6253492224] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6254410575] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6256260423] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6257220669] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6258796404] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 6259881075] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6261363801] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6262515168] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6264493725] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 6265590324] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 6267190335] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6268137183] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6269748513] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 6270821277] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6272639583] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6273575889] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6275610999] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 6276759993] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6277900377] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 6279167517] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 6280502802] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 6285053124] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 6287126706] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 6288696099] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 6290142663] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 6295394133] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 6296715327] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 6298096392] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 6299338605] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 6300591843] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6301973538] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6303283245] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 6304189185] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6305117469] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6306295947] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 6307262871] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6308200626] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6309407517] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 6310388952] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6311489583] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6312850089] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 6313924575] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6315211581] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6317110023] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 6318241314] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6319329492] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6320651778] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 6321534933] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6322417773] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6323542932] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 6324447108] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6325383750] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6326577180] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6327489651] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6328392147] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6329911602] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 6331000683] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6331927938] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6333213621] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 6334504029] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 6335896980] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 6337019766] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6338333316] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 6339187197] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6340118736] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6342065940] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6343691802] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6346437636] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6347563866] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6348866517] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 6349750260] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6350685012] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6352421775] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6354130230] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 6356603316] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6358814805] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6359962140] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6361279638] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 6362143830] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6363090762] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 6364926288] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6366536421] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 6369847386] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6370892010] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6372071307] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 6372862125] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6373689084] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6375451593] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6377041440] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6380054310] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6381718602] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6383322225] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6386284317] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6387378690] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6388697196] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 6389594106] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6390467307] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6392201613] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6393828609] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6396492606] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6397627866] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6398954163] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 6399845529] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6400794561] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 6402387432] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6404018964] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 6406989771] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6408120453] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6409415397] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 6410296410] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6411208755] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6412830333] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6414458967] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 6416702250] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6419003535] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6420114288] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6421420131] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 6422314542] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6423275502] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6424919550] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6426568071] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6429309180] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6430877838] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6432287925] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 6433176729] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6434107890] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 6435929157] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6437563545] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 6440263200] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6441340416] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6442792545] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 6443675175] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6444628701] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6446337975] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6447938616] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6450772020] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6451851735] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6453150270] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 6454022484] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6454994994] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6457007949] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6458455710] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6461136528] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6462227058] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6463473240] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 6464368176] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6465308283] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6466891095] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6468877863] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6471580941] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6472742514] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6474046824] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 6474970677] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6475907739] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6477359532] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6479006373] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6481964433] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6483105300] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6484396023] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 6485260341] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6486187617] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6487629960] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6489312060] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6492823575] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6494012532] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6495274296] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 6495986784] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6496822227] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6498145500] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6499750635] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6502298712] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6503351736] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6504536850] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 6505689351] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6507027198] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6508503687] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6510055419] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6512818725] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6513957135] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6515242062] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 6516124923] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6517047663] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6518583540] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6520462515] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 6536932626] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6539202264] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6540603510] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6542110470] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6544841184] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6546010800] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6547321473] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 6548176656] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6549127011] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6550598670] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6552167748] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6554933469] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6556336773] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6558155394] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6560926092] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6562035312] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6563320827] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 6564193713] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6565113933] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6566659806] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6568283484] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6571251204] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6572618325] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6574233960] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6576969294] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6578081244] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6579377784] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 6580179123] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6581038065] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6582424317] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6584569341] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6587387499] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6588793554] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6590447829] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6593173923] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6594289044] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6595834224] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 6596884896] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6597815259] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6599638899] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6601148484] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][INFO ] [KRELTSC: 6603571821] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6605289810] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6606422466] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6607806072] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 6608774928] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6609711906] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6611514294] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6613164852] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6615882966] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6617013543] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6618318567] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 6619234629] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6620173560] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 6622409010] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6624062508] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 6626904102] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6628066536] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 6629367318] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 6630820434] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 6632022810] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6633634833] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 6634640418] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6635577354] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 6637733508] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6639350130] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 6640649925] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6641873826] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6643147581] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 6644144493] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6645064482] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6647893665] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6649632612] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 6650919996] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6652173864] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6653446380] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 6654448710] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6655340412] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6657347529] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6659268630] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6660560214] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6661754085] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6663006798] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6663883884] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6664782264] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6669552099] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6671344554] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 6672618456] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6673777551] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6675083940] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 6676049814] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6676983306] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6679797516] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6681374154] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 6682584615] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6684066921] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6685407540] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 6686360919] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6687307683] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6689996271] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6691719216] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6693021951] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6694233693] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6695557344] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 6696908316] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6698128143] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 6700934982] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6702613512] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6704000121] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6705206109] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6706331520] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 6707182503] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6708038484] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6710725476] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6712268094] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 6713520513] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6714585759] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6715789059] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 6716799705] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6717724818] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6722002182] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6724043550] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6725329779] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6726841191] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 6728139222] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 6729479610] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 6730593954] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6731806074] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 6732664848] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6733518540] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 6735994209] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6737587227] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 6738742941] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6739890276] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6741074151] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 6741957327] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6742814169] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 6744951696] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6746623695] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 6747707715] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6749128428] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6750373308] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 6751286934] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6752216499] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6754356273] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6755985390] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 6757289175] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 6758962245] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6760631304] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 6762148071] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6763311282] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6764617776] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 6765513846] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6766449900] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 6768842934] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6770416821] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 6771395484] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6772530618] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6774069729] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 6775281030] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6776271558] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6778489641] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6780136734] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 6781433547] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6782634747] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6783925701] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 6784856610] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6785795793] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6787442298] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6789315162] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 6790505820] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6791712207] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 6793026324] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 6793940118] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 6794875206] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 6795816384] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 6796726818] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 6797740635] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 6798627045] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 6799624566] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 6800935407] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x000000003d6c4000, 0x000000003d7174aa) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] PCI: ECAM mapped (amd64) +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] Artemis: genesis signature stamped +[Hera] virtio-input: no device on PCI bus 0 +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 6939242331] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 6951210063] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 6955530435] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] APIC Timer: started (LVT=0x00020020 ICR=10089786) +[Hera] I/O APIC: keyboard IRQ1 unmasked +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 7031444721] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 7305248685] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 7310147439] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 7395175137] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 7497049959] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 22234195032] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 720 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=50 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261007-082752/aarch64/qemu-aarch64-20261007-082752.log b/logs/20261007-082752/aarch64/qemu-aarch64-20261007-082752.log new file mode 100644 index 00000000..5e9ab2c2 --- /dev/null +++ b/logs/20261007-082752/aarch64/qemu-aarch64-20261007-082752.log @@ -0,0 +1,9115 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 7 2026 08:27:29 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4056 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039936 + Free pages : 1038525 + Used pages : 1411 + Total MB : 4062 + Free MB : 4056 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 335544 cells (20971 KB), 202 VM slots +Switch-signal: 202 slots +Kernel-Hermes: 202 channel slots +Kernel-Hermes: 202 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0x0000000040807000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 182406] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 1516946] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 3527343] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 3572855] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 3617703] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 3673562] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 3716732] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 3762950] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 3793170] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3833723] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 4209497] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4273794] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 4416255] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4460228] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4510925] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4616892] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 4671108] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4722377] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 4839334] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4889228] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4937436] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 5070495] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 5121854] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5172772] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 5312619] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 5344529] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5373287] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5431437] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5470058] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5514065] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 5554284] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 5582007] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5610632] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5657239] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5707931] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5811351] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5851996] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5901751] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6010007] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 6053312] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6103969] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 6214207] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6260242] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6310684] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 6456587] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6586679] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6632981] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6683377] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6787984] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6833668] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6885485] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6988609] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7038816] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7090508] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7198160] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 7259512] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7309675] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 7422566] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7478655] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7529534] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 7634848] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7691501] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7737549] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7789676] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7892996] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 7939784] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 7990219] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 8094333] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8137990] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8188470] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 8290906] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 8336059] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8389745] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 8492903] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 8547277] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8599256] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 8709546] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 8740630] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8775342] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 8828409] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 8862054] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 8898505] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 8938913] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 8965356] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 8994097] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 9039380] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9089782] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 9198948] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 9244632] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9294469] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 9400448] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 9447795] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 9493002] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9545986] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 9653431] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 9698427] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9741820] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 9847483] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 9879149] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 9914622] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 9967866] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 10001000] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 10032220] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 10064837] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10118432] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 10152012] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 10187032] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 10227442] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 10256241] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 10288215] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 10341530] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10392908] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 10503484] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 10548156] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10599704] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 10710941] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 10755498] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 10806450] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 10922341] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 10954782] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 10987909] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11045742] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11080899] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 11113022] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 11145478] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11201128] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 11235227] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 11271512] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 11313289] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 11340542] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 11370162] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 11419210] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11470823] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 11586508] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 11624468] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 11678930] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11730760] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 11844466] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 11889390] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 11940684] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 12053339] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 12085697] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 12118216] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12174375] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 12208342] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 12240119] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 12273389] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12331384] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 12366070] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 12397074] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 12429543] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12482844] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 12522298] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 12556140] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 12597578] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 12624964] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 12654877] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12697973] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12749333] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 12851539] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 12896686] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 12947477] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 13045288] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 13087171] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13138216] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 13242154] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 13288319] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 13327774] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 13354474] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 13384414] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 13434907] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13486559] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 13589046] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 13640304] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13688962] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 13779267] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 13834787] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 13880456] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 13931380] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 14037527] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 14073552] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 14114596] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 14141866] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 14170794] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 14228640] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14280650] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 14393961] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 14439604] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14490406] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 14601907] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 14636578] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 14676991] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 14704313] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 14733929] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 14786362] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 14838518] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 14947680] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 14992541] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15042909] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 15150931] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 15194728] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15245973] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 15349124] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 15379761] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 15406585] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15457679] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 15492198] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 15529467] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 15570149] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 15597043] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 15625936] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 15677627] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15728314] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 15762277] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 15884254] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 15929795] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 15981249] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 16095652] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 16145640] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16197230] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 16316664] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 16350832] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 16385657] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16438922] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 16472908] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 16505400] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 16538795] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16592116] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 16627399] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 16667376] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 16708468] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 16751175] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 16787901] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 16828350] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 16854418] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 16883389] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 16943329] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 16992808] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 17108059] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 17152067] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17202670] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 17310803] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 17357628] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17411915] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 17492471] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 17565576] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 17616595] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17667399] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 17794385] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 17826677] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 17853191] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 17910643] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 17945687] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 17981508] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 18021204] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 18047652] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 18076459] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 18120056] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18171783] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 18274748] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 18321793] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18372468] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 18479942] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 18514768] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 18540754] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18594913] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 18633347] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 18667099] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 18708041] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 18734363] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 18763820] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 18814554] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 18864515] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 18982088] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 19030465] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 19081656] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 19159462] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 19229056] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 19261707] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 19286645] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 19341155] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 19378335] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 19412008] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 19452820] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 19495689] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 19531031] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 19571126] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 19596680] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 19624816] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 19682740] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 19733873] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 19839190] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 19883099] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 19933798] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 20036421] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 20081139] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20131815] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 20240811] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 20288661] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20339412] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 20452526] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 20501506] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20553098] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 20672722] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 20722981] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 20779287] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 20813758] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 20943586] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 20972093] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21022553] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 21056661] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 21086139] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21141680] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 21180237] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 21214967] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 21254550] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 21280710] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 21309499] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 21356759] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21406570] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 21515371] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 21565014] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21614508] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 21726409] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 21757239] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 21806840] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 21841942] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 21876224] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 21919481] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 21945993] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 21974087] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 22034171] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22086309] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 22191648] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 22234788] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22288271] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 22394726] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 22441469] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22491472] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 22571623] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 22644664] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 22689523] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 22738941] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 22845138] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 22876900] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 22917520] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 22943797] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 22972029] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 23022392] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 23071538] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 23176235] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 23221426] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 23271079] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 23375523] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 23411610] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 23451756] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 23478198] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 23507223] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 23560838] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 23611317] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 23718866] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 23767301] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 23817511] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 23927008] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 23960528] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 24001431] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 24028191] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 24057673] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 24109578] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 24168552] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 24234677] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 24324190] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 24367586] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 24417999] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 24522858] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 24555336] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 24594538] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 24620700] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 24649787] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 24714605] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 24765382] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 24893997] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 24950485] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25000334] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 25112977] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 25146077] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 25186389] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 25213663] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 25242493] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 25289660] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25340378] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 25443297] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 25485334] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 25534215] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25582044] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 25654800] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 25687539] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 25727445] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 25754548] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 25783715] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 25839228] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 25891012] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 25995146] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 26044467] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26095861] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 26204739] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 26252942] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26304800] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 26415867] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 26449895] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 26490018] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 26516543] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 26544426] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 26590792] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26641652] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 26747744] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 26797245] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 26848573] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 26904710] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 26984560] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 27018022] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 27055973] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 27082463] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 27110912] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 27173306] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27223585] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 27330820] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 27378403] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27428644] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 27539130] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 27586876] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27637613] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 27745745] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 27798331] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 27849570] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 27920130] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 28009610] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 28040478] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28093841] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 28127907] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 28162471] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 28202031] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 28228412] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 28259907] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 28313498] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28364256] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 28472439] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 28521110] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28571425] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 28683347] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 28731535] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28782653] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 28893302] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 28924939] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 28977662] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 29013258] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 29052338] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 29092575] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 29118704] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 29146826] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 29209853] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29262136] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 29328625] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 29419504] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 29468862] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29518084] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 29631570] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 29683352] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29733582] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 29852795] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 29885453] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 29935565] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 29970666] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 30006285] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 30046222] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 30072739] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 30101348] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 30167534] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30219031] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 30316721] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 30371574] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 30404397] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30454587] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 30507441] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 30553274] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30604652] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 30709200] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 30740397] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 30791366] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 30825275] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 30860394] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 30902945] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 30929927] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 30958456] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 31028693] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31080410] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 31213196] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 31250171] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31303418] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 31342574] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 31416242] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 31449463] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31503194] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 31535782] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 31571726] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 31611495] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 31641178] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 31670340] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 31729886] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31784535] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 31903635] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 31936738] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 31989015] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 32043432] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 32075341] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32126056] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 32160279] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 32197160] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 32236944] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 32280818] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 32316740] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 32354599] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 32380916] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 32412564] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 32454330] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32504740] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 32605687] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 32645099] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32695349] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 32801429] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 32842239] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 32892736] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 32994013] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 33036946] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 33086934] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 33177753] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 33234222] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 33281259] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 33332205] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 33443816] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 33490789] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 33542864] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 33658322] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 33689732] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 33717862] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 33770573] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 33804391] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 33834325] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 33860267] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 33915997] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 33950471] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 33985391] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 34025205] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 34051481] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 34080120] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 34121574] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34171650] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 34272142] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 34316037] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34366518] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 34469321] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 34509502] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34558874] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 34660959] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 34700868] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34750458] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 34851095] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 34892129] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 34943675] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 35049727] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 35096711] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 35147278] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 35265927] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 35312452] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 35362709] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 36028522] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 36122144] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 36154719] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 36179898] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36227512] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 36259571] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 36288572] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 36314846] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36367987] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 36401519] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 36436121] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 36476563] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 36503053] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 36536177] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 36582061] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36632604] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 36736033] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 36777696] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 36827573] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 36931216] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 36972081] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37022471] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 37127428] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 37170750] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37220493] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 37329419] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 37372613] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37422985] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 37532058] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 37579418] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37629840] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 37740462] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 37789296] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 37840302] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 37955111] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 37985936] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 38016943] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38069408] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 38104483] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 38135945] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 38161616] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38215916] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 38249991] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 38286417] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 38326214] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 38351216] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 38380625] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 38423537] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38473491] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 38550848] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 38621493] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 38660921] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38711754] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 38816741] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 38860949] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 38911540] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 39014020] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 39056114] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39107020] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 39214587] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 39256405] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39306713] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 39408474] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 39448705] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39498534] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 39607316] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 39637970] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 39664416] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39717754] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 39752696] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 39783736] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 39810633] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 39864193] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 39906949] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 39937452] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 39964464] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40017742] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 40051623] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 40087308] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 40126773] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 40153998] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 40182741] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 40249351] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40303288] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 40411114] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 40455386] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40506993] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 40611621] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 40660049] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40711332] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 40815451] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 40854373] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 40906451] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 40957606] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 41065269] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 41109631] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41160613] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 41270056] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 41315323] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41366764] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 41471709] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 41504830] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 41533480] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41587855] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 41621592] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 41653961] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 41681275] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41734724] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 41771698] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 41803496] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 41830604] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 41885626] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 41920514] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 41955467] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 41995839] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 42022916] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 42051697] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 42104340] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42156307] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 42265139] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 42309905] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42360469] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 42468765] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 42516085] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42566868] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 42682917] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 42717014] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 42745730] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42801020] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 42835400] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 42868057] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 42898941] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 42954176] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 42987694] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 43020314] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 43048181] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43101510] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 43136794] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 43172739] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 43213207] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 43238886] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 43272043] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 43321138] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43371422] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 43473898] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 43516998] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43568881] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 43672353] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 43710629] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 43750535] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43801722] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 43900980] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 43949750] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 43999745] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 44117795] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 44148040] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 44175041] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44226142] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 44260868] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 44295526] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 44336216] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 44363131] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 44396105] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 44448515] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44500143] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 44603972] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 44646432] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44697922] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 44800971] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 44842070] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 44893876] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 44993465] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 45041725] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45094032] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 45211841] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 45245405] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 45274022] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45329503] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 45363594] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 45399335] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 45439617] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 45466259] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 45495253] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 45544967] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45596722] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 45702424] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 45743567] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45795588] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 45897339] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 45939179] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 45989823] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 46092227] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 46133539] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46182798] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 46255448] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 46325271] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 46356168] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 46383758] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46437630] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 46472252] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 46502850] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 46530620] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46584648] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 46618625] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 46657768] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 46697660] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 46724794] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 46754159] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 46802044] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 46854790] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 46957615] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 46999553] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47051933] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 47153649] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 47196196] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47247193] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 47348224] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 47391123] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47441027] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 47545379] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 47579316] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 47606750] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47661583] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 47696483] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 47728004] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 47756260] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 47812391] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 47846796] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 47882532] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 47923288] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 47950895] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 47979346] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 48021419] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48071860] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 48173962] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 48215646] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48265866] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 48365823] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 48405237] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48454861] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 48555765] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 48596753] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48646714] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 48749471] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 48794521] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 48844540] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 48909656] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 48999430] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 49030651] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 49057894] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49111975] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 49145625] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 49180072] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 49220813] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 49247367] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 49282330] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 49327672] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49377958] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 49480851] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 49520449] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49569928] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 49674572] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 49715370] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49765394] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 49865932] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 49906526] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 49956238] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 50060438] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 50106215] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50156930] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 50276278] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 50307430] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 50335368] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50392246] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 50426588] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 50461439] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 50501665] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 50528068] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 50556437] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 50601322] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50649400] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 50749211] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 50791597] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 50841378] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 50939781] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 50980610] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51030537] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 51133543] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 51163730] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 51190976] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51245458] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 51280234] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 51314720] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 51355553] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 51381787] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 51410547] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 51455798] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51507235] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 51608621] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 51646530] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51697449] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 51754434] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 51840931] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 51880529] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 51930237] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 52034281] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 52063739] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 52090842] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52144399] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 52178800] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 52213201] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 52253392] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 52282519] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 52311541] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 52356282] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52407425] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 52510497] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 52548054] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52598137] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 52702987] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 52743365] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52795015] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 52895651] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 52933938] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 52984435] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 53087822] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 53131933] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53182374] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 53302460] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 53333651] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 53361424] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53420281] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 53454739] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 53489746] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 53529697] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 53557080] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 53586679] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 53631950] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53682549] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 53796352] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 53850253] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 53910113] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 54050412] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 54103183] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54166276] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 54269051] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 54311960] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54362653] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 54464311] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 54496242] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 54550101] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54599914] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 54699384] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 54730037] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 54758020] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 54810471] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 54844450] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 54879337] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 54921927] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 54964419] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 54999284] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 55041515] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 55068261] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 55096602] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 55140600] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55191488] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 55295532] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55337684] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55388056] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55489602] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55531635] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55582017] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55687858] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55729714] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55778547] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 55880346] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 55921211] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 55971778] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 56078479] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 56109542] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 56137596] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56191938] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 56226189] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 56257587] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 56284956] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56339428] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 56373562] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 56412949] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 56453108] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 56479084] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 56508356] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 56557355] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56608902] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 56714933] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 56758073] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 56808228] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 56910729] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 56955703] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57007160] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 57078430] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 57156782] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 57199225] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57249138] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 57349323] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 57390944] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57440697] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 57550214] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 57580478] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57607604] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57662343] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57697279] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 57727613] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57755186] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 57808985] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 57843613] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 57877066] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 57920872] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 57948186] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 57977304] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 58025432] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58077176] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 58176883] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 58219272] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58275880] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 58381822] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 58425697] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58477057] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 58579564] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 58620977] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58672574] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 58774641] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 58817975] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 58867896] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 58974956] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 59009000] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 59037364] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59090934] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 59125402] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 59156068] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 59184258] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59238921] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 59273084] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 59308224] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 59349268] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 59375068] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 59406479] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 59456787] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59507531] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 59609951] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 59650332] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59700516] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 59733433] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 59855312] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 59895656] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 59946638] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 60048605] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 60090080] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60143369] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 60242884] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 60274820] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 60303096] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60356659] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 60390613] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 60425400] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 60465815] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 60492028] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 60523655] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 60564959] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60615486] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 60718270] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 60760295] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 60809896] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 60913916] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 60954713] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61004972] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 61106142] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 61149212] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61199715] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 61302219] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 61346849] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61396460] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 61496083] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 61527356] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 61555140] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61609510] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 61646319] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 61676211] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 61703290] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 61756021] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 61790695] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 61825333] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 61865085] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 61892582] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 61921330] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 61970885] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62026084] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 62128406] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 62169038] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62219717] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 62253511] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 62364198] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 62408581] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62459841] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 62559383] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 62602060] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62652824] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 62755099] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 62787219] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 62814589] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 62867275] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 62901504] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 62931941] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 62959065] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63012461] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 63046528] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 63081534] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 63121854] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 63150815] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 63179049] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 63226297] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63276316] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 63377347] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 63418821] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63469317] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 63570894] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 63609966] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63660640] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 63763738] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 63807775] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 63858574] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 63964939] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 64008338] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64059001] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 64158571] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 64188314] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 64216360] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64272361] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 64306279] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 64336783] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 64363430] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64417157] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 64451789] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 64486665] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 64526359] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 64552190] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 64581377] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 64631056] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64683249] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 64746372] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 64831246] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 64872226] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 64923158] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 65022853] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 65062885] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65113402] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 65213449] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 65258446] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65308523] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 65411615] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 65455262] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65505041] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 65606782] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 65636391] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 65662176] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65713298] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 65747303] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 65787361] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 65814798] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 65868581] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 65902752] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 65936961] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 65977204] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 66003849] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 66031865] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 66077525] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66126760] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 66235135] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 66276130] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66326857] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 66427562] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 66469400] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66521399] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 66621316] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 66651492] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 66678955] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66732272] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 66767333] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 66801837] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 66842230] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 66869118] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 66899663] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 66946109] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 66995165] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 67096431] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 67134270] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67185145] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 67274036] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 67327057] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 67366501] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67416892] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 67515209] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 67544895] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 67572930] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67627289] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 67662333] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 67697834] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 67737905] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 67764170] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 67792439] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 67838243] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 67889002] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 67992081] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 68036048] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68086835] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 68187876] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 68229330] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68279468] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 68385605] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 68415913] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 68443900] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68498002] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 68532554] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 68567225] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 68607510] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 68634239] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 68663586] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 68710972] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68765576] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 68870324] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 68916851] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 68969854] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 69079073] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 69119210] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69172934] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 69279640] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 69312576] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 69341148] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69395309] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 69429672] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 69464645] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 69505441] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 69532554] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 69561240] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 69606926] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69657559] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 69762106] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 69801015] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 69851873] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 69954173] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 69992851] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70045082] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 70122282] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 70191960] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 70233518] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70286676] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 70390500] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 70421590] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 70449769] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70503202] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 70537270] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 70572663] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 70613518] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 70643736] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 70671733] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 70719763] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70770815] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 70874436] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 70915401] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 70965432] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 71065455] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 71104300] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71153992] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 71254882] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 71296075] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71346595] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 71451143] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 71481800] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 71509357] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71562471] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 71596578] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 71631049] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 71671105] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 71698454] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 71727105] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 71782610] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 71834483] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 71936278] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 71978267] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72027195] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 72128232] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 72173549] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72223968] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 72296553] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 72367190] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 72411239] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72462103] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 72564302] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 72608643] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72659915] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 72763259] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 72796989] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 72825867] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 72879581] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 72921543] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 72957006] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 72997281] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 73024467] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 73053116] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 73096741] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73147013] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 73246406] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 73290718] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73340586] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 73441803] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 73485821] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73535872] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 73644909] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 73679429] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 73719679] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 73746740] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 73775210] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 73819880] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 73870266] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 73974428] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 74030175] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74081394] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 74182945] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 74224828] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74273761] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 74375923] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 74415258] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 74454659] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 74480540] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 74509861] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 74556767] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74606346] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 74695299] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 74750696] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 74795510] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 74845366] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 74958670] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 74999227] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75049737] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 75155303] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 75197260] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75246241] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 75342009] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 75382884] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75429798] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 75537181] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 75569079] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 75596787] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75649686] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 75684090] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 75718441] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 75758697] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 75784950] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 75813161] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 75858693] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 75911323] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 76017519] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 76058890] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76108979] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 76211783] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 76252700] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76304248] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 76409755] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 76459549] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76510580] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 76617216] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 76663918] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76714445] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 76768847] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 76870158] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 76902126] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 76929925] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76983179] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 77020841] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 77055150] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 77095576] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 77138930] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 77174400] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 77214832] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 77243065] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 77276641] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 77325822] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77375153] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 77408827] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 77452077] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77498545] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 77530867] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 77577550] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77627260] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 77657219] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 77701191] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77750622] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 77786233] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 77830345] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 77879958] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 77914999] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 77962649] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78012222] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 78042161] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 78088403] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78140734] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 78171423] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 78205801] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 78234273] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78287731] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 78322553] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 78353459] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 78381060] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78434419] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 78468319] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 78499454] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 78530708] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78584669] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 78620842] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 78656613] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 78696608] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 78723697] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 78752190] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 78804681] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78855337] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 78894186] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 78943318] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 78990433] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 79025157] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 79072399] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79122690] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 79153903] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 79200623] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79251128] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 79286705] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 79336719] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79389239] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 79425412] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 79475983] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79526800] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 79559450] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 79595999] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 79624822] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79682177] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 79716567] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 79749623] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 79779878] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 79835086] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 79869036] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 79903918] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 79944161] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 79970557] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 79998636] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 80053176] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80102951] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 80135083] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 80184493] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80234962] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 80267226] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 80313101] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80363156] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 80397248] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 80440981] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80491021] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 80522283] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 80572012] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80622640] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 80655219] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 80686130] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80739377] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 80777890] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 80807886] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 80861284] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 80895284] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 80929547] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 80970079] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 80995527] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 81024294] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 81074664] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81124058] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 81159681] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 81203617] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81252944] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 81283444] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 81326688] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81374371] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 81405172] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 81452293] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81501792] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 81537618] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 81589770] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81639902] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 81672658] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 81721132] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81771115] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 81802864] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 81834758] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 81890448] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 81922325] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 81951572] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82002716] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 82037265] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 82071407] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 82110628] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 82136695] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 82164315] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 82226307] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82280339] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 82317088] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 82367823] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82418819] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 82451102] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 82506563] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82557037] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 82591653] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 82642800] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82695794] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 82725242] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 82786990] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82835970] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 82867723] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 82902429] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 82954791] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 82987209] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 83025696] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83080421] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 83114502] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 83151826] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 83192670] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 83234118] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 83270966] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 83310944] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 83338774] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 83367204] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 83420273] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83470480] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 83500912] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 83548908] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83600854] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 83632037] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 83683145] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 83724688] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83778766] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 83809583] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 83858579] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 83910641] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 83940802] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 83974132] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84028127] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 84061049] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 84092992] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84150661] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 84184366] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 84220582] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 84259834] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 84286638] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 84315762] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 84370748] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84421205] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 84455236] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 84500772] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84556397] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 84588181] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 84640761] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84690927] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 84724256] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 84770557] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84820734] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 84850918] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 84886557] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84940212] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 84974353] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 85005854] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85059817] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 85093633] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 85127939] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 85168295] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 85195052] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 85223768] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 85285228] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85336010] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 85370532] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 85423658] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85474438] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 85507960] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 85560504] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85611974] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 85649436] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 85697667] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85747878] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 85778127] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 85813183] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85868200] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 85902536] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 85934291] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 85988112] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 86029499] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 86064208] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 86105458] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 86133235] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 86161363] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 86218615] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86269339] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 86301893] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 86351335] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86410935] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 86444092] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 86494656] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86546300] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 86579877] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 86632572] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86682711] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 86715832] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 86768693] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86817420] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 86846625] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 86881765] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 86936385] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 86970675] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 87002382] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87056060] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 87090035] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 87125056] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 87169570] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 87196139] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 87224771] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 87285978] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87336784] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 87371138] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 87422818] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87473094] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 87506622] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 87560628] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87611169] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 87643175] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 87692895] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87742742] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 87772577] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 87807701] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87860664] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 87896414] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 87925612] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 87978609] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 88012463] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 88047045] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 88087746] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 88114031] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 88142761] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 88195546] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88244810] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 88279074] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 88325104] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88375629] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 88408112] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 88457348] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88507311] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 88539411] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 88588963] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88643040] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 88674410] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 88726526] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88776061] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 88807201] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 88840748] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 88893968] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 88928236] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 88959112] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89014780] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 89052438] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 89087154] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 89126929] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 89152975] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 89182240] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 89237637] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 89282394] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89332086] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 89363098] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 89411535] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89461600] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 89492517] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 89539976] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89589921] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 89622340] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 89671093] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89721051] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 89753279] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 89799197] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89848464] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 89880867] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 89928640] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 89979388] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 90009841] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 90043356] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90096827] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 90130902] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 90163720] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90219111] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 90253479] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 90287840] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 90328967] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 90356291] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 90385527] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 90440929] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90492672] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 90531874] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 90581831] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90633875] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 90668207] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 90713983] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90765048] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 90795334] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 90848867] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90901708] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 90934919] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 90969321] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91023917] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 91057535] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 91091457] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91148606] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 91181990] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 91218718] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 91260257] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 91287220] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 91315503] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 91365349] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91415638] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 91448740] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 91497172] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91547200] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 91579063] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 91622328] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91673786] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 91703127] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 91749789] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91800223] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 91833599] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 91884436] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 91934859] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 91967413] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 91999220] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92054413] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 92088814] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 92120117] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92173586] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 92207759] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 92242084] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 92282290] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 92309320] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 92337907] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 92395934] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92446618] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 92478330] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 92527362] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92577735] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 92608698] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 92659265] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92709727] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 92742250] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 92795905] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92846778] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 92879978] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 92914144] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 92968402] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 93002248] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 93033786] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93087795] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 93122341] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 93159919] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 93199309] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 93226132] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 93254796] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 93309241] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93359898] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 93392743] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 93441842] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93492159] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 93525064] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 93576768] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93626571] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 93660574] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 93708994] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93759963] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 93792840] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 93827140] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 93881130] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 93917235] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 93949341] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94004042] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 94037428] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 94073378] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 94113642] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 94139725] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 94168599] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 94219550] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94273444] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 94303420] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 94350691] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94400586] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 94429919] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 94477956] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94528401] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 94558610] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 94602869] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94653528] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 94683911] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 94733250] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94781820] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 94811916] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 94845858] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 94899180] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 94932688] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 94963080] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95020167] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 95057114] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 95091334] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 95130930] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 95156996] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 95185595] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 95238154] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95288664] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 95318986] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 95366591] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95418592] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 95448643] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 95492963] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95542306] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 95572848] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 95620912] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95670777] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 95701575] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 95752775] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 95795300] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95842287] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 95873009] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 95918604] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 95965727] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 95994698] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 96026819] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96078814] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 96111904] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 96146401] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96199813] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 96233577] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 96267596] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 96307496] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 96333756] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 96361750] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 96408151] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96458643] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 96489030] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 96535954] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96586383] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 96616213] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 96661470] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96712124] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 96742152] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 96786277] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96836475] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 96866443] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 96910677] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 96960899] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 96990748] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 97023693] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97077966] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 97111822] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 97142796] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97196108] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 97229780] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 97267207] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 97306822] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 97333599] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 97361590] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 97410045] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97460839] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 97491025] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 97532898] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97583325] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 97613409] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 97659194] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97709971] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 97741744] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 97789235] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97839363] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 97869126] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 97914308] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97964075] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 97994768] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 98029432] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98082823] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 98116318] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 98146287] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98199864] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 98233644] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 98267938] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 98307025] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 98333916] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 98362281] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 98412870] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98462793] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 98497544] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 98542688] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98592246] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 98627488] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 98669164] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98719031] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 98752861] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 98803498] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98854169] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 98891094] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 98940551] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 98990890] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 99027073] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 99058160] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99111124] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 99146821] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 99180316] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 99220710] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 99246972] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 99275732] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 99324824] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99374497] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 99406688] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 99449374] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99499324] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 99543483] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 99588757] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99638772] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 99671365] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 99715166] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99764739] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 99798423] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 99831078] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 99886771] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 99920067] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 99955457] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 99995131] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 100021915] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 100051337] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 100101894] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100152355] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 100184002] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 100229835] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100284588] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 100317025] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 100359992] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100410096] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 100444916] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 100487315] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100538019] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 100573520] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 100605311] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100662725] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 100696914] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 100730917] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 100770717] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 100797569] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 100827233] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 100883687] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 100934112] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 100969649] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 101022861] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101073031] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 101105306] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 101136986] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101190807] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 101224956] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 101260774] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 101299979] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 101327469] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 101356304] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 101404416] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101454684] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 101488413] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 101534450] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101585407] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 101621385] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 101654211] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101707777] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 101743548] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 101780755] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 101822302] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 101849067] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 101878018] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 101937645] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 101987824] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 102018568] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 102070918] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102120812] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 102157086] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 102189396] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102243018] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 102280802] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 102316915] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 102355996] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 102397807] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 102432669] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 102473217] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 102501181] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 102537870] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 102585175] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102636147] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 102666815] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 102714108] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102765259] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 102796017] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 102840592] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 102892425] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 102922837] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 102972069] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103023627] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 103054236] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 103098488] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103149487] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 103182626] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 103219530] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 103263082] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 103291184] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 103320357] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 103367211] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103418484] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 103450224] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 103497683] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103549150] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 103579988] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 103654958] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103706864] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 103738439] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 103776610] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 103817252] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 103844420] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 103873446] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 103920575] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 103970804] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 104001239] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 104050858] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 104099794] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 104129257] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 104754090] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 104799052] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 104846118] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 104877571] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 104912714] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 104953180] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 104980358] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 105009841] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 105058989] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105109559] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 105141951] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 105186958] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105238348] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 105269184] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 105330756] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105381942] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 105413323] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 105448009] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 105487516] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 105518840] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 105547355] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 105638037] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105687187] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 105719205] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 105752756] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105802062] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 105833272] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 105883863] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 105933566] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 105966073] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 106000076] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 106039878] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 106065895] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 106095352] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 106143560] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106192996] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 106226681] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 106275814] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106326086] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 106361194] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 106406909] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106457140] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 106490266] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 106524752] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 106564449] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 106591104] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 106619932] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 106670505] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106719513] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 106752599] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 106796231] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106846965] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 106878025] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 106928042] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 106977844] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 107013962] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 107047799] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 107088444] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 107115407] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 107144334] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 107196984] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107248009] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 107279827] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 107326797] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107378106] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 107417316] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 107462811] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107513293] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 107544742] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 107580393] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 107620002] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 107646737] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 107675328] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 107719372] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107773453] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 107807464] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 107841787] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 107891064] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 107924557] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 107974782] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108025462] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 108056582] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 108090824] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 108130751] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 108160294] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 108188835] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 108237665] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108288934] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 108320103] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 108356537] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 108395658] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108449683] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 108481631] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 108520339] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 108560578] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 108602196] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 108637478] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 108677268] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 108704233] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 108733721] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 108805899] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108856505] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 108893348] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 108942482] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 108992846] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 109026496] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 109078256] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109129266] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 109162011] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 109212126] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109265765] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 109298597] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 109332190] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 109362539] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109416623] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 109451010] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 109487251] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 109527504] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 109555807] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 109584613] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 109646609] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109696087] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 109727298] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 109770345] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109821873] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 109854865] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 109906383] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 109958542] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 109990738] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 110032850] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110084804] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 110118354] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 110155600] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 110195547] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 110222643] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 110251339] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 110306289] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110357772] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 110393264] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 110430087] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110481580] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 110514514] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 110551259] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110602916] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 110635350] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 110672545] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 110709310] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 110766275] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 110797276] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 110832381] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 110871638] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 110899343] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 110928089] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 110982956] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111033995] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 111065424] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 111102809] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111156737] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 111189216] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 111225751] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111276355] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 111308867] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 111349498] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 111386854] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111441465] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 111472576] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 111508835] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 111550097] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 111578652] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 111608072] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 111679457] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111732309] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 111763200] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 111816964] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 111870090] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 111903551] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 111956675] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112009540] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 112041039] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 112085801] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 112139610] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112179832] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 112211650] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 112268858] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112322248] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 112354842] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 112391337] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 112432725] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 112460024] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 112488813] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 112569263] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112621765] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 112657597] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 112714179] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112766717] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 112800401] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 112861679] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112912861] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 112945811] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 113000135] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113054766] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 113087601] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 113122677] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 113161757] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 113190396] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 113219415] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 113360939] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113417116] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 113449455] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 113491772] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113543062] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 113575539] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 113613432] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113664105] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 113696748] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 113749993] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 113802721] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 113836220] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 113873883] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 113915240] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 113943183] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 113972583] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 114035317] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114086308] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 114118094] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 114171241] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114223073] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 114253536] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 114292042] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114343178] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 114374845] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 114417025] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114468042] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 114499332] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 114537663] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 114578406] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 114606459] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 114636056] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 114697500] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114748653] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 114782965] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 114823032] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 114874009] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 114909370] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 114945305] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 114985598] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 115012501] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 115041978] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 115088252] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115138531] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 115171990] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 115220034] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115274087] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 115305642] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 115347216] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115398822] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 115429833] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 115582968] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115626041] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 115658164] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 115722447] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115773663] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 115806802] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 115876458] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 115927276] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 115958871] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 115994883] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 116038269] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 116064716] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 116093582] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 116137342] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116188340] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 116220211] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 116266955] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116316884] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 116348421] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 116405776] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116457569] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 116493043] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 116526753] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 116566846] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 116596243] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 116624388] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 116692686] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116741541] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 116778745] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 116820800] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 116868122] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 116903845] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 116939949] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 116981874] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 117009536] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 117038531] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 117085896] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117136880] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 117172317] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 117237045] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117288356] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 117329829] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 117365852] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 117406694] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 117448605] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 117482635] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 117526961] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 117553785] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 117583909] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 117628921] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117679883] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 117711924] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 117754252] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117804599] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 117836254] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 117876412] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 117928946] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 117959043] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 118004477] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118055196] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 118088748] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 118135681] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118187081] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 118221012] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 118268413] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118319086] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 118351454] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 118384658] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118439307] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 118475229] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 118511437] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 118550305] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 118576865] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 118606136] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 118663629] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118714165] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 118749576] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 118783784] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118834975] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 118870460] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 118920085] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 118972328] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 119005918] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 119055002] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119106931] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 119140328] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 119175337] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 119216158] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 119243779] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 119273711] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 119323521] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119376219] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 119414407] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 119497040] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 119539848] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119583867] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 119619395] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 119672619] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119724279] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 119758986] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 119810637] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 119861502] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 119895884] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 119931149] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 119972515] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 120000725] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 120030292] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 120068330] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120118540] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 120152627] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 120195216] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120237834] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 120271565] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 120314870] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120359659] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 120392996] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 120439332] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120482162] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 120518643] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 120552938] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120604797] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 120638069] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 120689447] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120741975] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 120775017] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 120809883] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 120864254] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 120904797] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 120940658] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 120981718] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 121009237] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 121038385] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 121082056] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121133385] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 121164759] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 121208066] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121262720] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 121294034] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 121335047] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121386031] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 121416828] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 121463716] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121515605] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 121547103] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 121580482] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121632978] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 121663830] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 121707281] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121759585] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 121792365] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 121835605] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121887444] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 121921863] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 121964893] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122020893] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 122053636] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 122101431] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122151659] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 122182733] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 122217245] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122270905] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 122304753] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 122340075] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 122383537] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 122410435] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 122440933] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 122475438] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 122515432] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 122543732] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 122574119] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 122610037] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 122651076] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 122678834] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 122708767] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 122770009] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122821738] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 122853903] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 122891440] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 122942394] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 122974299] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 123023659] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123073641] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 123104243] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 123163806] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123215689] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 123247370] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 123280026] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123329953] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 123363081] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 123397435] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 123427003] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123482326] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 123522164] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 123554267] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 123584605] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123640664] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 123675552] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 123711463] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 123752197] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 123780419] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 123810174] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 123865241] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 123921348] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 123956877] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 124009250] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124061738] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 124095055] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 124147032] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124199466] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 124233644] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 124288957] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124341566] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 124375203] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 124408060] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 124438024] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124491985] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 124525912] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 124562326] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 124603290] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 124631290] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 124662558] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 124708185] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124759322] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 124792141] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 124826803] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 124881403] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 124915812] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 124949275] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125005198] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 125046933] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 125084611] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 125125824] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 125153782] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 125182887] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 125235499] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125287621] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 125319651] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 125369384] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125421869] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 125453497] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 125499172] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125551924] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 125584438] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 125620153] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 125661368] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 125688676] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 125718317] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 125782564] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125834182] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 125867692] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 125903214] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 125954730] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 125990061] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 126026039] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126076622] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 126112139] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 126151071] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126201238] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 126234615] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 126271173] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126323724] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 126357987] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 126394231] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126444476] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 126477740] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 126527111] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126578026] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 126613743] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 126661752] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126714149] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 126747202] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 126782234] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126833335] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 126867686] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 126905555] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 126955654] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 126990244] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 127037208] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127090083] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 127122857] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 127172186] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127224279] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 127260739] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 127292842] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127347917] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 127383257] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 127422306] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127473214] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 127507501] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 127543517] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 127584328] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 127613978] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 127648439] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 127697077] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127749862] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 127780648] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 127827966] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 127880717] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 127911989] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 127958662] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128014726] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 128045738] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 128091942] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128144096] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 128175911] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 128229215] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128283152] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 128315357] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 128353644] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 128395601] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 128425473] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 128454901] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 128510092] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 128553396] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128607854] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 128640579] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 128712013] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128767880] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 128802117] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 128854063] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128908446] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 128940830] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 128998102] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129053901] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 129086323] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 129125668] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 129169103] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 129211625] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 129247148] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 129289018] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 129316645] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 129346009] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 129442683] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129490727] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 129525846] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 129559058] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129613742] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 129646052] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 129682321] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129737056] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 129771679] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 129804964] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129858856] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 129896582] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 129929245] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 129983460] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 130018495] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 130055181] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 130095464] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 130123961] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 130153689] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 130220169] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130276399] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 130309317] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 130342592] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130397343] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 130431636] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 130482684] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130536638] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 130570264] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 130607529] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130663990] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 130700162] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 130737158] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 130777968] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 130805287] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 130835873] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 130887541] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 130938848] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 130972508] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 131013254] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131063586] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 131098995] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 131137006] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131191497] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 131227332] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 131263861] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 131304921] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 131335791] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 131365248] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 131415538] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131467755] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 131500476] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 131544317] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131601070] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 131634905] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 131672897] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 131725677] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 131763380] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 131801911] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 131842491] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 131872946] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 131904954] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 131952497] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132006796] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 132042073] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 132084081] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132139489] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 132175590] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 132219704] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132272719] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 132306863] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 132346122] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 132387657] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 132415830] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 132446045] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 132479732] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132532846] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 132569165] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 132610908] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132663432] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 132698174] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 132736598] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 132787242] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 132822095] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 132858716] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 132902122] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 132930253] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 132960063] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 132998858] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133049487] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 133082852] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 133116532] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133170330] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 133202393] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 133237044] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133294009] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 133328562] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 133361640] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 133416923] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 133451943] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 133487105] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 133527857] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 133554746] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 133584518] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 134257289] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134307316] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 134340349] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 134374393] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134433013] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 134465443] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 134498480] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134553064] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 134587976] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 134621138] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134674593] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 134708693] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 134744244] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 134786603] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 134813196] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 134843136] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 134887023] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134939014] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 134973479] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 135655922] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135707914] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 135741836] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 135779246] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 135829064] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 135861340] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 135901819] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 135947307] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 135973808] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 136002775] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 136045599] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136096189] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 136132230] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 136167340] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136219256] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 136255315] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 136294805] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136345707] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 136380832] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 136415035] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136465912] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 136500129] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 136534533] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136589081] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 136624269] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 136659846] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136715972] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 136750450] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 136783923] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136838392] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 136872630] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 136909413] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 136963794] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 136999625] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 137037469] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137091587] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 137126330] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 137163271] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137217919] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 137252897] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 137286721] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137339451] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 137375141] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 137407699] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137457747] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 137492259] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 137525079] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137576571] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 137610697] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 137648285] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137700301] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 137734157] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 137771418] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137826206] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 137860050] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 137894511] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 137947889] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 137980424] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 138016951] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138070489] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 138103904] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 138143056] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 138183165] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 138228134] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 138262816] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 138288365] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 138317333] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 138363806] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138414153] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 138444775] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 138488691] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138542313] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 138581787] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 138632242] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138682991] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 138713415] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 138763518] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138813964] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 138844646] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 138894006] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 138943757] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 138973443] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 139007949] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 139033505] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 139062093] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 139111093] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139162897] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 139194466] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 139242275] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139295946] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 139326815] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 139375957] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139426830] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 139458412] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 139508027] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139559037] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 139590178] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 139646171] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139698777] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 139731498] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 139765012] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 139819572] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 139853443] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 139888290] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 139914222] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 139943430] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 139989534] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140041232] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 140072320] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 140111793] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 140165417] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140215738] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 140246839] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 140292249] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140343005] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 140373655] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 140436185] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140486420] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 140519168] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 140572527] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140621574] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 140654322] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 140707903] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140759827] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 140792174] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 140823948] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140877004] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 140911304] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 140945633] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 140971802] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 141006106] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 141062109] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141111582] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 141145641] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 141190988] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141241471] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 141274168] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 141322194] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141372040] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 141404953] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 141451483] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141499750] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 141536503] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 141584726] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141636471] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 141668322] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 141725585] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141775299] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 141807576] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 141840667] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 141895348] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 141929305] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 141963584] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 141989967] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 142018753] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 142073029] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142123106] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 142155254] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 142204289] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142254296] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 142291247] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 142345340] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142395142] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 142429707] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 142485662] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142535327] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 142568695] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 142601645] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142661220] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 142695397] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 142725703] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142779211] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 142812633] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 142847273] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 142873535] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 142902836] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 142944017] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 142995325] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 143031878] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 143078989] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143128521] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 143159421] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 143205497] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143256007] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 143286544] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 143332396] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143386208] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 143419014] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 143453815] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 143480774] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 143510159] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 143562872] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143614385] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 143647424] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 143694736] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143744244] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 143782134] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 143834796] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 143885007] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 143916777] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 143951839] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 143978793] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 144008112] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 144064035] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144106033] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 144141877] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 144174603] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144231087] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 144262822] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 144294945] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144349023] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 144382829] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 144417381] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 144445464] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 144473970] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 144528867] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144580760] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 144611233] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 144659455] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144710606] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 144741572] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 144777579] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 144806481] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 144835455] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 144890226] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 144938811] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 144969628] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 145020985] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 145071786] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145125055] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 145158286] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 145210347] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145263104] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 145295534] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 145346123] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145398321] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 145430799] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 145468324] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 145499915] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 145529692] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 145589224] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145644894] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 145676385] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 145732016] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 145786004] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 145818812] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 145857699] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 145898636] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 145945864] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 145985846] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 146029126] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 146056256] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 146085648] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 146162670] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146213789] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 146245946] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 146281695] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146337007] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 146369580] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 146440883] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146493026] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 146530225] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 146580781] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146631442] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 146669886] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 146706214] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 146749877] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 146780690] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 146809601] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 146890558] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 146939146] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 146969090] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 147007491] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147058711] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 147090246] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 147124150] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147176499] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 147210416] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 147245827] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 147286080] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 147313177] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 147341834] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 147405067] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147455604] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 147493204] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 147551540] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147605716] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 147648615] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 147712970] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 147760642] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 147801109] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 147836821] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 147877296] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 147909249] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 147937796] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 148017388] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148070233] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 148101194] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 148149498] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148198803] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 148230386] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 148265438] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 148302765] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 148328158] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 148354467] Running FIND.existing: FIND DUP . CR +[Hera] 1252562496 +[Hera] [HADES][TEST ] [KRELTSC: 148405618] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148454940] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 148487107] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 1252896080 +[Hera] [HADES][TEST ] [KRELTSC: 148545928] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148598306] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 148631026] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 148677492] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148725651] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 148752391] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 148781297] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 148832514] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 148865163] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 148900680] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 148941643] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 148971279] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 149001286] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 149040647] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149093437] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 149127385] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 149168504] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149221442] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 149253251] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 149288231] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 149325246] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 149351869] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 149378075] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 149425854] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149475228] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 149506804] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 149539208] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149592443] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 149624715] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 149660731] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 149701213] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 149728363] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 149757803] Running LATEST.basic: LATEST @ . CR +[Hera] 1252643920 +[Hera] [HADES][TEST ] [KRELTSC: 149805542] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149856201] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 149888856] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 1252683104 +[Hera] [HADES][TEST ] [KRELTSC: 149946660] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 149997501] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 150030588] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 1252683104 +[Hera] [HADES][TEST ] [KRELTSC: 150093783] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150145139] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 150178287] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 150214494] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 150255995] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 150283126] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 150311767] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 1252897592 +[Hera] [HADES][TEST ] [KRELTSC: 150382582] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150433499] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 150465873] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 1252898056 +[Hera] [HADES][TEST ] [KRELTSC: 150534833] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150586333] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 150619010] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 150660323] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 150701777] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150756530] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 150790744] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 150827228] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 150867708] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 150897748] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 150926487] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 150980288] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151031429] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 151061732] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 151098363] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151152527] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 151185205] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 151221250] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 151262597] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 151304558] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 151340564] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 151381221] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 151409830] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 151438412] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 151597003] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151651234] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 151680631] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 1252902576 +[Hera] [HADES][TEST ] [KRELTSC: 151853501] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 151906165] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 151939788] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 152184207] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152232850] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 152267710] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 152502706] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152546048] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 152576074] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 152731310] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152781663] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 152815838] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 152863732] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 152893337] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 152949335] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 152982671] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 153018545] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 153048065] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153105802] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 153140801] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 153178297] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 153218299] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 153245389] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 153274097] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 153389770] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153439415] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 153471561] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 153529248] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153578574] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 153611885] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 153769401] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 153821226] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 153852526] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 153889671] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 153929474] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 153959218] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 153987634] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 154104450] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154154451] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 154188807] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 154335197] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154386995] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 154418186] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 154571347] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154623197] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 154659621] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 154697011] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 154736728] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 154764938] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 154793229] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 1252908560 +[Hera] [HADES][TEST ] [KRELTSC: 154843097] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 154894649] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 154928436] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 154965812] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155017985] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 155057338] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 1252653728 +[Hera] [HADES][TEST ] [KRELTSC: 155184111] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155235760] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 155269082] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 155304800] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 155344577] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 155371706] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 155401939] Running CURRENT.basic: CURRENT @ . CR +[Hera] 1252908560 +[Hera] [HADES][TEST ] [KRELTSC: 155452200] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155505455] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 155539017] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 1252905264 +[Hera] [HADES][TEST ] [KRELTSC: 155700376] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155749721] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 155781754] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 155831305] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 155870270] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 155918241] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 155957634] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 155993304] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 156033339] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 156060884] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 156089275] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 156169537] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156220084] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 156252692] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 156432511] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156480943] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 156514828] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 156651306] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156702997] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 156734710] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 156771023] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 156812067] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 156852781] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 156889750] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 156931060] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 156971343] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 156998049] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 157027114] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 157080286] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157132277] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 157163144] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 157199469] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 157239062] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 157267334] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 157296210] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 157332920] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157380435] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 157415812] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 157452387] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157502033] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 157534086] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 157586040] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157637256] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 157677212] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 157712334] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 157752428] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 157779801] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 157808564] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 157862735] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 157912905] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 157951939] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 157988891] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158041082] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 158072717] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 158105947] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158161363] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 158197023] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 158232637] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 158272436] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 158299195] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 158327840] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 158362100] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 158404391] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 158431254] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 158460302] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 158495081] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 158535326] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 158562220] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 158591280] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 158626984] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 158667540] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 158710102] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 158745630] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 158788094] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 158814067] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 158842904] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 158901848] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 158949273] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 158982860] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 159013441] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159065651] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 159100715] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 159142073] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 159177211] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159230070] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 159266503] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 159301137] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 159342427] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 159368156] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 159399241] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 159435275] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159488851] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 159524715] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 159590427] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159640099] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 159673075] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 159707179] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 159747177] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 159775296] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 159804063] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 159873360] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 159926650] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 159958698] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 160012970] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160063822] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 160096348] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 160153251] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160204391] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 160236452] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 160272338] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160326866] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 160361299] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 160397443] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 160437740] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 160466115] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 160494619] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 160560026] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160611702] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 160645533] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 160699622] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160748745] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 160781227] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 160838077] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 160885899] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 160915328] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 160952009] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 160990702] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 161019147] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 161045089] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 161088466] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161135618] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 161163987] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 161221303] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161272345] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 161303195] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 161335666] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161393759] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 161429941] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 161465189] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 161505283] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 161532338] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 161562433] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 161675971] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161726093] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 161761056] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 161819616] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 161866904] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 161897497] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 161927795] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 161953903] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162005444] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 162038677] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 162073710] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 162113417] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 162143596] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 162172048] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 162241566] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162291860] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 162324889] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 162353468] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162402934] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 162442478] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 162476280] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 162520037] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 162548432] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 162577354] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 162611201] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162661260] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 162693548] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 162749860] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162799815] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 162831463] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 162864151] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 162907642] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 162934234] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 162962501] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 163047081] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163096767] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 163125622] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 163166232] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 163200355] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163252422] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 163293120] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 163328593] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 163368170] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 163394688] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 163423863] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 163498168] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163548140] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 163578930] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 163611912] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 163646401] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163699575] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 163735683] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 163768872] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 163799165] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 163852629] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 163886684] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 163920753] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 163961009] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 163988496] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 164020570] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 164095899] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164144306] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 164175860] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 164211506] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 164242952] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164297293] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 164331185] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 164366281] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 164408991] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 164435480] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 164463061] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 164537942] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164587452] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 164618571] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 164678900] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164727470] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 164756558] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 164803295] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 164834827] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 164888710] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 164922775] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 164957860] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 164997811] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 165039562] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 165074853] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 165115221] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 165146311] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 165177415] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 165275739] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165326754] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 165359057] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 165421165] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165471630] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 165502929] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 165573079] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 165628319] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165687943] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 165727526] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 165822218] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 165888275] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 165927335] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 165972331] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 166005476] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166055491] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 166089547] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 166125233] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 166151696] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 166180038] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 166251521] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166315065] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 166347774] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 166409274] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166458863] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 166491227] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 166554495] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166604430] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 166638481] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 166697846] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166743999] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 166776758] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 166806619] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 166832492] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 166886082] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 166918161] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 166954759] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 166992279] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 167023863] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 167050594] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 167083405] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 167110842] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167164049] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 167196321] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 167252450] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 167279324] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167333400] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 167366691] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 167406761] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 167433766] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 167464203] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 167497565] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 167525258] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167579200] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 167611437] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 167661623] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 167687227] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 167741006] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 167777157] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 167811946] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 167851990] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 167879068] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 167907661] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 167941688] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 167967907] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168018185] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 168050494] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 168095630] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 168121942] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 168151839] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168205970] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 168238923] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 168273539] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 168300348] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 168329366] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 168361587] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 168388808] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168442442] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 168474896] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 168524615] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 168550041] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 168576832] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168630085] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 168663077] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 168697883] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 168737030] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 168764518] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 168793034] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 168870703] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 168923130] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 168955603] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 169033558] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169082446] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 169112445] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 169143220] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 169170459] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169224663] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 169261738] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 169296433] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 169324155] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 169353075] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 169421649] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169472777] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 169505171] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 170259362] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 170312952] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170361624] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 170395504] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 170425500] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 170452771] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170507023] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 170541607] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 170577972] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 170617461] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 170645513] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 170674321] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 170744702] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170801372] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 170832568] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 170882704] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 170933018] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 170964792] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 170997156] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 171024572] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171079730] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 171112899] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 171149223] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 171176452] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 171205214] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 171274747] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171323343] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 171352388] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 171401510] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171451411] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 171482607] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 171516376] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 171543354] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171597804] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 171631123] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 171666065] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 171706029] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 171732837] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 171762136] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 171831052] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 171879216] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 171910958] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 171971081] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172019132] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 172050956] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 172082471] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 172109875] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172163288] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 172196677] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 172231157] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 172262864] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 172291736] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 172365458] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172416652] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 172446975] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 172510191] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172560594] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 172595440] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 172626574] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 172661312] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 172715552] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 172748890] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 172784524] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 172824788] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 172852140] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 172881283] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 172945728] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 173003292] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173053920] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 173085177] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 173116348] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 173143333] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173199049] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 173232371] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 173267824] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 173295538] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 173324509] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 173398720] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173446617] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 173475895] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 173505265] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 173531051] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173587710] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 173620902] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 173656681] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 173697025] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 173723284] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 173751585] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 173856426] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 173907668] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 173938831] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 174006315] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174055872] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 174088466] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 174134860] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174184398] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 174218178] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 174299678] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174349086] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 174380935] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 174415326] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 174441889] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 174470676] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 174549055] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 174592054] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174642061] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 174673691] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 174739929] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174790495] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 174822944] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 174870072] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 174924366] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 174957927] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 175033869] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175083591] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 175115322] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 175149378] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 175188893] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 175215998] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 175244026] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 175330708] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175377919] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 175407419] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 175452800] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175499437] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 175529825] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 175601565] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175656937] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 175689625] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 175724814] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 175751563] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 175781196] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 175851253] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 175901679] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 175933026] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 175979274] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176032156] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 176064387] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 176127818] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 176190713] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176241601] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 176273822] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 176307945] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 176347780] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 176374619] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 176406134] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 176474448] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176525695] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 176557448] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 176589511] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 176616898] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176670415] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 176703126] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 176737554] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 176767519] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 176796085] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 176863732] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176914483] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 176947911] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 176978098] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 177005255] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177059063] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 177092111] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 177126991] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 177168254] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 177195530] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 177224277] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 177314649] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177365943] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 177397086] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 177474941] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177527296] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 177558072] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 177624370] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177675529] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 177709047] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 177744503] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 177772389] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 177801031] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 177868342] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 177932354] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 177983004] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 178013519] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 178088817] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178139393] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 178170030] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 178237696] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178291383] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 178323230] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 178357928] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 178397839] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 178423640] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 178452993] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 178516013] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178564059] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 178596165] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 178664704] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178714728] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 178745524] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 178806975] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 178857835] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 178888970] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 178952826] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179002084] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 179038188] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 179072202] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 179098520] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 179127257] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 179195258] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179244750] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 179276834] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 179348220] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 179388895] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179437722] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 179468909] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 179534314] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179584797] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 179616221] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 179679667] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 179729619] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 179765641] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 179799644] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 179840280] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 179866373] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 179895704] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 179972367] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180019417] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 180053112] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 180122496] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180173936] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 180203812] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 180235589] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 180260235] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 180288727] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 180358571] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180408479] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 180441918] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 180514428] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180563647] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 180596066] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 180630603] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 180670146] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 180697373] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 180727151] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 180789031] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 180839490] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 180869190] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 180942016] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 180993348] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181043397] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 181073559] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 181137207] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181188863] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 181219687] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 181286174] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181337863] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 181368441] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 181403423] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 181430170] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 181459077] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 181520715] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181568869] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 181599953] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 181666500] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181717791] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 181748131] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 181811070] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 181862548] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 181893190] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 181952874] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182000411] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 182035013] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 182069819] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 182109456] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 182137252] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 182166707] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 182254451] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182300846] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 182328839] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 182394268] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182445743] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 182476291] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 182546356] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182597352] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 182627958] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 182662368] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 182687191] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 182713936] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 182781166] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 182832212] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 182862067] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 182926219] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 182980528] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183031134] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 183061360] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 183129406] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183179651] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 183210453] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 183245663] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 183286239] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 183313786] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 183342793] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 183417342] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183468638] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 183499350] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 183569899] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183621000] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 183651628] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 183688308] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 183717277] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 183745645] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 183817138] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 183867686] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 183899956] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 183969516] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184018091] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 184048845] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 184084684] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 184124644] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 184152153] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 184180705] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 184266499] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 184300353] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184351125] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 184381431] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 184453344] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184501904] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 184530389] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 184562838] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 184588051] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 184615383] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 184683751] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184732832] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 184763173] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 184835254] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184883522] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 184913649] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 184948766] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 184990128] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 185020915] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 185049621] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 185152150] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185201417] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 185231223] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 185303693] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185354028] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 185386078] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 185483645] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 185522817] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185571560] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 185601989] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 185671843] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185722494] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 185753293] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 185824344] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 185874195] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 185905229] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 185940465] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 185968024] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 185996995] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 186068109] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186118237] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 186153414] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 186222343] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186275380] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 186306127] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 186376757] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186427324] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 186458482] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 186528328] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186579168] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 186609640] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 186675696] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 186727044] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 186757579] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 186793451] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 186834102] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 186876574] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 186923051] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 186963586] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 186991459] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 187023354] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 187099854] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187150521] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 187185527] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 187247893] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187302833] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 187336826] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 187398821] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187448161] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 187483616] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 187521244] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 187552239] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187607066] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 187644135] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 187679663] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 187710585] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 187765619] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 187799853] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 187837196] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 187876992] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 187905298] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 187934385] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 188005346] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188059308] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 188092444] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 188154910] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 188205019] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188254683] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 188287893] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 188348438] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188401437] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 188434150] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 188470854] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 188501689] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188556795] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 188589935] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 188624198] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 188655335] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188710445] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 188744455] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 188784037] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 188815817] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 188869453] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 188901832] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 188937893] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 188978007] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 189007517] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 189036681] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 191688069] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 191741153] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 191780963] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 194393200] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 194446125] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 194481773] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 197078056] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 197127096] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 197159686] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 197196787] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 197236647] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 197266596] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 197295338] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 197361906] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 197420195] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 197455718] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 197497539] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 197550653] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 197584868] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 197627585] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 197680721] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 197714797] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 197751412] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 197792142] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 197820408] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 197849029] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 198026878] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198079182] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 198114256] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 198282724] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198336154] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 198369241] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 198462981] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198519603] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 198554622] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 198642596] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198694466] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 198727322] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 198815432] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 198867446] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 198905085] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 198959929] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199011452] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 199044168] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 199100297] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199151990] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 199185657] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 199221127] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 199251636] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199310560] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 199345210] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 199381115] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 199420955] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 199447641] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 199475887] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 199533526] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 199563839] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199613572] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 199650248] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 199695823] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 199724527] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199774884] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 199808327] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 199857114] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 199886581] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 199936062] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 199968844] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 200029296] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 200058016] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 200108086] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 200143542] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 200178067] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 200218264] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 200258872] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 200404223] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 200470592] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 200517136] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 200564003] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 200715718] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 200749341] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 200794055] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 200833339] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 200862950] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 200892054] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 200929881] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 200958282] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 200987128] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201023313] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 201052680] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201081635] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201118570] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 201152739] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201181031] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201218139] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 201247722] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201276878] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201313959] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 201343248] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201372113] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201407892] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 201435551] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201464829] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201500813] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 201533771] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201562613] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201600200] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 201629585] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201658145] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201694739] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 201724075] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 201752675] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 201790298] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 201831029] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 201872159] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 201919139] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 201960029] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 201985751] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 202014896] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 202076854] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202126118] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 202235823] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 202276296] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 202315745] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 202342831] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 202371971] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 202428439] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202479244] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 202568167] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 202643525] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 202678794] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 202719574] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 202746761] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 202776253] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 202833589] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 202883839] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 202988870] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 203025370] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 203063515] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 203090130] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 203118477] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 203174569] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203224923] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 203328482] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 203380229] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203432717] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 203547570] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 203582494] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 203622212] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 203649400] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 203677715] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 203732069] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203783904] Expected: Should print: 3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 203889032] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 203923663] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 203965012] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 203993799] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 204023423] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 204074584] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204125207] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 204231909] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 204265173] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 204303153] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 204330821] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 204359684] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 204414456] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204465695] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 204549562] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 204618440] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 204653525] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 204691709] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 204718710] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 204747196] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 204798308] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 204849322] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 204958504] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 204991962] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 205031276] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 205058810] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 205087868] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 205146452] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205195147] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 205303411] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 205338396] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 205378243] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 205405819] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 205434128] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 205495459] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205546029] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 205653968] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 205686899] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 205725394] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 205750916] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 205778125] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 205831780] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 205880852] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 205988278] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 206026693] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 206066451] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 206094931] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 206123798] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 206173584] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206226045] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 206329401] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 206365855] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 206409807] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 206437920] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 206466122] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 206511417] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206563561] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 206664700] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 206700802] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 206740265] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 206769820] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 206798704] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 206841595] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 206891650] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 206999358] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 207034702] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 207074704] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 207101581] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 207130671] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 207175445] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207225603] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 207327445] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 207361877] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 207402293] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 207429978] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 207457822] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 207505443] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207559641] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 207667644] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 207703641] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 207746112] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 207773272] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 207801970] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 207849249] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 207902155] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 207962696] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 208045897] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 208090931] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208141065] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 208245425] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 208285157] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 208325529] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 208351775] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 208381076] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 208428532] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208480020] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 208588060] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 208631361] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 208685800] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 208791679] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 208826613] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 208866678] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 208893622] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 208922384] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 208969033] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209024434] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 209132526] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 209175440] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209225176] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 209331358] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 209364356] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 209405406] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 209430474] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 209457739] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 209502912] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209551234] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 209656422] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 209698945] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209749225] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 209856047] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 209891734] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 209931076] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 209958302] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 209987244] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 210042639] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210093330] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][INFO ] [KRELTSC: 210190251] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 210246734] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 210285595] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 210326731] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 210353637] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 210382532] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 210439827] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210490575] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 210598872] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 210632116] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 210671302] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 210699190] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 210728693] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 210786895] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 210838374] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 210946682] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 210982836] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 211023305] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 211068200] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 211106202] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 211146771] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 211175576] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 211205329] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 211279220] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211331396] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 211371044] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 211408349] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 211448217] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 211479294] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 211508316] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 211596665] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211656393] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 211696909] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 211735103] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 211775198] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 211806050] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 211834876] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 211897468] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 211951755] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 211990852] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 212033397] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 212073531] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 212101847] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 212131103] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 212514831] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212560950] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 212591853] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 212627312] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 212665836] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 212695358] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 212723912] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 212854373] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 212906859] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 212944956] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 212982423] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 213022704] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 213051859] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 213080763] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 213198393] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213244713] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 213278381] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 213315935] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 213356799] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 213386852] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 213414554] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 213530956] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213582621] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 213620358] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 213656864] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 213696200] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 213724017] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 213752903] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 213864287] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 213917560] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 213955782] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 213990932] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 214030524] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 214061987] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 214092054] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 214442856] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 214487423] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 214521654] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 214561562] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 214602228] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 214647428] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 214685101] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 214725919] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 214754764] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 214783179] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 214859659] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 214911789] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 214948319] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 214985467] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 215030017] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 215059460] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 215088491] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 215164558] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215217351] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 215252897] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 215290526] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 215330683] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 215359037] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 215389437] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 215455654] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215507165] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 215546595] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 215597968] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215649254] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 215689122] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 215724474] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 215767530] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 215795522] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 215824360] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 215899088] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 215948984] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 215978757] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 216012906] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 216051707] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 216077772] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 216105212] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 216172386] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216221407] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 216260138] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 216293906] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 216333457] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 216361933] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 216390327] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 216441783] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216491790] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 216539967] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 216576926] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 216618401] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 216646075] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 216674977] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 216703789] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 216731447] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 216762831] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 216791257] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 216822815] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 216855251] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x000000013dfc4ee4, 0x000000013dfc4ee8) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] Artemis: genesis signature stamped +[Hera] virtio-input: found device +[Hera] virtio-input: driver ready +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 221290107] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 221749235] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 221921866] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 235460522] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 247340987] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 247875131] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 250400835] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 254293370] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 792996790] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 908 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=202 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261007-082938/riscv64/qemu-riscv64-20261007-082938.log b/logs/20261007-082938/riscv64/qemu-riscv64-20261007-082938.log new file mode 100644 index 00000000..4c5e8969 --- /dev/null +++ b/logs/20261007-082938/riscv64/qemu-riscv64-20261007-082938.log @@ -0,0 +1,9187 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdeec740 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 7 2026 08:29:03 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 977 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250848 + Free pages : 250196 + Used pages : 652 + Total MB : 979 + Free MB : 977 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +Stadium: 83886 cells (5242 KB), 50 VM slots +Switch-signal: 50 slots +Kernel-Hermes: 50 channel slots +Kernel-Hermes: 50 pending-queue slots +VM: bootstrap parity... +VM arena allocated: 0x0000000080267000 + (5 MB) +[HADES][INFO ] [KRELTSC: 0] Registering FORTH-79 Standard word set... +[HADES][INFO ] [KRELTSC: 2727291] Registering FORTH-79 arithmetic words... +[HADES][INFO ] [KRELTSC: 27067446] FORTH-79 Standard word set registration complete +[Hera] POST: Running comprehensive test suite... +[Hera] [HADES][INFO ] [KRELTSC: 58769151] Starting comprehensive FORTH-79 modular test suite... +[Hera] [HADES][INFO ] [KRELTSC: 60126255] ============================================== +[Hera] [HADES][INFO ] [KRELTSC: 61525569] +[Hera] === Testing Module: Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 63234360] Running Stack Words Tests (Module 1: Foundation)... +[Hera] [HADES][TEST ] [KRELTSC: 64528653] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 65942499] Testing word: DUP +[Hera] [HADES][TEST ] [KRELTSC: 66854655] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 67972611] Running DUP.basic: 5 DUP . . CR +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 74947320] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 76866111] Expected: Should print: 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] 5 5 +[Hera] [HADES][TEST ] [KRELTSC: 80747583] Running DUP.zero: 0 DUP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 82340958] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 84008085] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 87187989] Running DUP.negative: -42 DUP . . CR +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 88782099] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 90457269] Expected: Should print: -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] -42 -42 +[Hera] [HADES][TEST ] [KRELTSC: 93757881] Running DUP.max_int: 2147483647 DUP . . CR +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 95431665] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 97088103] Expected: Should duplicate max int +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] 2147483647 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 101210487] Running DUP.min_int: -2147483648 DUP . . CR +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 103018671] Test passed +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 104682354] Expected: Should duplicate min int +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] -2147483648 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 108866478] Running DUP.empty_stack: DUP +[Hera] [HADES][ERROR] [KRELTSC: 109967172] DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 111090063] Expected error occurred +[Hera] [HADES][TEST ] Testing DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 112867755] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 114121329] DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 115431813] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 116811765] Testing word: DROP +[Hera] [HADES][TEST ] [KRELTSC: 117722808] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 118645611] Running DROP.basic: 5 7 DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 120080415] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 121784040] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 124919676] Running DROP.zero: 42 0 DROP . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 126323757] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 128003421] Expected: Should drop zero, print 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 131067027] Running DROP.negative: 10 -5 DROP . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 132523335] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 134175447] Expected: Should drop negative, print 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 137284308] Running DROP.double_drop: 1 2 3 DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 138796938] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 140431956] Expected: Should print: 1 +[Hera] 1 +[Hera] [HADES][INFO ] [KRELTSC: 143295390] L8[TABLE]: Config 17 → 0 regime=2 score=26214 L1=0 L2=0 L3=0 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 146939163] Running DROP.triple_drop: 1 2 3 4 DROP DROP DROP . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 148667001] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 150416721] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 153469911] Running DROP.sequential: 5 DROP 6 DROP 7 . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 154977480] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 156647946] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 159559365] Running DROP.single_item: 99 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 161115234] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 162887802] Expected: Should empty stack, depth=0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 165930471] Running DROP.depth_change: DEPTH 1 2 DROP DEPTH SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 167806212] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 169585794] Expected: Should change depth by 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 172717566] Running DROP.preserve_depth: DEPTH 5 6 DROP DROP DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 174641670] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 176354724] Expected: Should preserve net depth +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 179333301] L8[TABLE]: Config 0 → 1 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 181169709] Running DROP.max_int: 2147483647 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 182712768] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 184365279] Expected: Should drop max int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 187428255] Running DROP.min_int: -2147483648 DROP DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 189034272] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 190769943] Expected: Should drop min int +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 193938717] Running DROP.with_dup: 5 DUP DROP . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 195371085] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 197023407] Expected: Should duplicate then drop +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 200140101] Running DROP.with_swap: 1 2 SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 201586812] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 203266707] Expected: Should swap then drop +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 206202486] Running DROP.complex: 1 2 3 ROT DROP SWAP DROP . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 207972912] Test passed +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 209804490] Expected: Should handle complex sequence +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 213014172] Running DROP.empty_stack: DROP +[Hera] [HADES][ERROR] [KRELTSC: 214144140] DROP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 215119779] Expected error occurred +[Hera] [HADES][TEST ] Testing DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 216863577] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 217969080] DROP: 15 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 219139935] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 220465875] Testing word: SWAP +[Hera] [HADES][TEST ] [KRELTSC: 221341512] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 222298503] Running SWAP.basic: 5 7 SWAP . . CR +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 223727847] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 225493779] Expected: Should print: 7 5 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] 5 7 +[Hera] [HADES][TEST ] [KRELTSC: 228547914] Running SWAP.same_values: 42 42 SWAP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 230061342] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 231693798] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 234800223] L8[TABLE]: Config 1 → 2 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 236237211] Running SWAP.zero_nonzero: 0 99 SWAP . . CR +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 237860343] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 239538600] Expected: Should print: 99 0 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] 0 99 +[Hera] [HADES][TEST ] [KRELTSC: 242597691] Running SWAP.negative: -5 10 SWAP . . CR +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 244106919] Test passed +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 245784462] Expected: Should print: 10 -5 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] -5 10 +[Hera] [HADES][TEST ] [KRELTSC: 248933454] Running SWAP.one_item: 42 SWAP +[Hera] [HADES][ERROR] [KRELTSC: 250262607] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 251501103] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 253296498] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 254431401] Running SWAP.empty_stack: SWAP +[Hera] [HADES][ERROR] [KRELTSC: 255483963] SWAP: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 256586673] Expected error occurred +[Hera] [HADES][TEST ] Testing SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 258348846] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 259423143] SWAP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 260595300] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 261990498] Testing word: OVER +[Hera] [HADES][TEST ] [KRELTSC: 262850238] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 263766909] Running OVER.basic: 5 7 OVER . . . CR +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 265307721] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 267096774] Expected: Should print: 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] 5 7 5 +[Hera] [HADES][TEST ] [KRELTSC: 270304545] Running OVER.zeros: 0 0 OVER . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 271830405] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 273532707] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 276834306] Running OVER.mixed: -1 42 OVER . . . CR +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 278368587] Test passed +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 280059276] Expected: Should print: -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] -1 42 -1 +[Hera] [HADES][TEST ] [KRELTSC: 283441200] Running OVER.one_item: 42 OVER +[Hera] [HADES][ERROR] [KRELTSC: 284493615] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 285654978] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 287483637] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 288596763] Running OVER.empty_stack: OVER +[Hera] [HADES][ERROR] [KRELTSC: 289626141] OVER: Insufficient stack items (need 2) +[Hera] [HADES][TEST ] [KRELTSC: 290710980] Expected error occurred +[Hera] [HADES][TEST ] Testing OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 292509756] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 293664210] OVER: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 294785337] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 296081268] Testing word: ROT +[Hera] [HADES][TEST ] [KRELTSC: 296961567] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 297943548] Running ROT.basic: 1 2 3 ROT . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 299417475] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 301171731] Expected: Should print: 2 3 1 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 304373769] Running ROT.zeros: 0 0 0 ROT . . . CR +[Hera] [HADES][INFO ] [KRELTSC: 305592693] L8[TABLE]: Config 2 → 3 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 307367445] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 309050952] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 312335751] Running ROT.mixed: -1 0 1 ROT . . . CR +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 313903905] Test passed +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 315563283] Expected: Should print: 0 1 -1 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] -1 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 318877734] Running ROT.two_items: 1 2 ROT +[Hera] [HADES][ERROR] [KRELTSC: 319976811] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 321077631] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 322833798] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 323899485] Running ROT.one_item: 42 ROT +[Hera] [HADES][ERROR] [KRELTSC: 325085628] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 326208792] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 328010382] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 329108241] Running ROT.empty_stack: ROT +[Hera] [HADES][ERROR] [KRELTSC: 330125901] ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 331224852] Expected error occurred +[Hera] [HADES][TEST ] Testing ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 332940027] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 334029444] ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 335257860] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 336657069] Testing word: DEPTH +[Hera] [HADES][TEST ] [KRELTSC: 337685502] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 338622669] Running DEPTH.empty: DEPTH . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 340000332] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 341711412] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 344651496] Running DEPTH.one_item: 42 DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 346135440] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 347840682] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 350749350] Running DEPTH.multiple: 1 2 3 DEPTH . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 352182138] Test passed +[Hera] [HADES][TEST ] Testing DEPTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 353860479] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 356836578] DEPTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 357989394] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 359392950] Testing word: PICK +[Hera] [HADES][TEST ] [KRELTSC: 360299961] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 361231710] Running PICK.pick_0: 1 2 3 0 PICK . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 362830020] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 364545951] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 367433346] Running PICK.pick_1: 1 2 3 1 PICK . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 368828187] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 370447875] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][INFO ] [KRELTSC: 372990177] L8[TABLE]: Config 3 → 4 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 374722887] Running PICK.pick_2: 1 2 3 2 PICK . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 376257504] Test passed +[Hera] [HADES][TEST ] Testing PICK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 378002100] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 380942667] PICK: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 382075869] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 383381985] Testing word: ROLL +[Hera] [HADES][TEST ] [KRELTSC: 384270033] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 385210035] Running ROLL.roll_1: 1 2 3 1 ROLL . . . CR +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 386845977] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 388559367] Expected: Should print: 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] 1 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 391786185] Running ROLL.roll_2: 1 2 3 2 ROLL . . . CR +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 393271032] Test passed +[Hera] [HADES][TEST ] Testing ROLL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 394975770] Expected: Should print: 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] 2 3 1 +[Hera] [HADES][TEST ] [KRELTSC: 398267205] ROLL: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 399381633] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 400785147] Testing word: ?DUP +[Hera] [HADES][TEST ] [KRELTSC: 401678907] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 402824247] Running ?DUP.nonzero: 42 ?DUP . . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 404488749] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 406120911] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 409262259] Running ?DUP.negative: -5 ?DUP . . CR +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 410758110] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 412415367] Expected: Should print: -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] -5 -5 +[Hera] [HADES][TEST ] [KRELTSC: 415666293] Running ?DUP.zero: 0 ?DUP DEPTH . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 417160569] Test passed +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 418871145] Expected: Should not dup: depth 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 421935192] Running ?DUP.empty_stack: ?DUP +[Hera] [HADES][ERROR] [KRELTSC: 423062535] ?DUP: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 424097835] Expected error occurred +[Hera] [HADES][TEST ] Testing ?DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 426037584] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 427207956] ?DUP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 428344854] ▶ Testing module: v3/src/test_runner/modules/stack_words_test +[Hera] [HADES][TEST ] [KRELTSC: 429679236] Testing word: -ROT +[Hera] [HADES][TEST ] [KRELTSC: 430562454] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 431543889] Running -ROT.basic: 1 2 3 -ROT . . . CR +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 433136193] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 434896014] Expected: Should print: 1 3 2 +[Hera] [HADES][INFO ] [KRELTSC: 436032660] L8[TABLE]: Config 4 → 5 regime=2 score=26214 L1=0 L2=0 L3=0 L +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] 2 1 3 +[Hera] [HADES][TEST ] [KRELTSC: 439641531] Running -ROT.zeros: 0 0 0 -ROT . . . CR +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 441205002] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 442939308] Expected: Should print: 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 446176479] Running -ROT.roundtrip: 1 2 3 -ROT ROT . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 447741000] Test passed +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 449435532] Expected: Should restore original order +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 452947908] Running -ROT.two_items: 1 2 -ROT +[Hera] [HADES][ERROR] [KRELTSC: 454007316] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 455140224] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 456931923] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 458042109] Running -ROT.empty_stack: -ROT +[Hera] [HADES][ERROR] [KRELTSC: 459067308] -ROT: Insufficient stack items (need 3) +[Hera] [HADES][TEST ] [KRELTSC: 460210464] Expected error occurred +[Hera] [HADES][TEST ] Testing -ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 461964195] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 463238034] -ROT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 464458281] === Stack Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 465795246] +[Hera] === Testing Module: Return Stack Words === +[Hera] [HADES][INFO ] [KRELTSC: 467256048] Running Return Stack Words Tests (Module 2)... +[Hera] [HADES][TEST ] [KRELTSC: 468454539] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 469817712] Testing word: >R +[Hera] [HADES][TEST ] [KRELTSC: 470682765] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 471598365] Running >R.basic: 42 >R R@ . R> . CR +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 473335485] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 475017165] Expected: Should print: 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 478355682] Running >R.zero: 0 >R R@ . R> . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 479789436] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 481467987] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 484592619] Running >R.negative: -123 >R R@ . R> . CR +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 486187737] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 487823196] Expected: Should print: -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] -123 -123 [HADES][INFO ] [KRELTSC: 490440405] L8[TABLE]: Config 5 → 6 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -123 -123 +[Hera] -123 -123 +[Hera] [HADES][TEST ] [KRELTSC: 492579906] Running >R.multiple: 1 2 >R >R R@ . R> . R@ . R> . CR +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 494264757] Test passed +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 495935517] Expected: Should print: 2 2 1 1 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] 1 1 2 2 +[Hera] [HADES][TEST ] [KRELTSC: 499412256] Running >R.empty_stack: >R +[Hera] [HADES][ERROR] [KRELTSC: 500438295] >R: DSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 501380523] Expected error occurred +[Hera] [HADES][TEST ] Testing >R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 503196120] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 504286881] >R: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 505507968] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 506841384] Testing word: R> +[Hera] [HADES][TEST ] [KRELTSC: 507726093] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 508642785] Running R>.basic: 42 >R R> . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 510038109] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 511700427] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 514688895] Running R>.lifo_order: 1 2 >R >R R> . R> . CR +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 516390042] Test passed +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 518103600] Expected: Should print: 2 1 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 521398941] Running R>.empty_rstack: R> +[Hera] [HADES][ERROR] [KRELTSC: 522679038] R>: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 523643043] Expected error occurred +[Hera] [HADES][TEST ] Testing R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 525522585] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 526830717] R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 528016650] ▶ Testing module: v3/src/test_runner/modules/return_stack_wor +[Hera] [HADES][TEST ] [KRELTSC: 529299834] Testing word: R@ +[Hera] [HADES][TEST ] [KRELTSC: 530200671] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 531124314] Running R@.basic: 42 >R R@ . R> DROP CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 532639569] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 534279564] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 537281766] Running R@.non_destructive: 99 >R R@ R@ = . R> DROP CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 539045367] Test passed +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 540802269] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 542994942] L8[TABLE]: Config 6 → 7 regime=2 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 544991454] Running R@.empty_rstack: R@ +[Hera] [HADES][ERROR] [KRELTSC: 545980008] R@: RSP underflow +[Hera] [HADES][TEST ] [KRELTSC: 546862155] Expected error occurred +[Hera] [HADES][TEST ] Testing R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 548703876] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 549871791] R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 551048799] === Return Stack Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 552456912] +[Hera] === Testing Module: Memory Words === +[Hera] [HADES][INFO ] [KRELTSC: 553893270] Running Memory Words Tests (Module 3)... +[Hera] [HADES][TEST ] [KRELTSC: 555010953] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 556350858] Testing word: ! +[Hera] [HADES][TEST ] [KRELTSC: 557206797] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 558136509] Running !.basic: 42 HERE ! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 559807584] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 561433845] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 564518493] Running !.zero: 0 HERE ! HERE @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 565934481] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 567536550] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 570538815] Running !.negative: -999 HERE ! HERE @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 572072235] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 573719286] Expected: Should print: -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 576975672] Running !.overwrite: 111 HERE ! 222 HERE ! HERE @ . CR +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 578615352] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 580281198] Expected: Should print: 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] 222 +[Hera] [HADES][TEST ] [KRELTSC: 583517067] Running !.max_int: 2147483647 HERE ! HERE @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 585129720] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 586791366] Expected: Should store max int +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 590299101] Running !.min_int: -2147483648 HERE ! HERE @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 591951423] Test passed +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 593585622] Expected: Should store min int +[Hera] [HADES][INFO ] [KRELTSC: 594661515] L8[TABLE]: Config 7 → 8 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 598474170] Running !.empty_stack: ! +[Hera] [HADES][TEST ] [KRELTSC: 599480343] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 601194930] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 602385714] Running !.one_item: 42 ! +[Hera] [HADES][TEST ] [KRELTSC: 603346674] Expected error occurred +[Hera] [HADES][TEST ] Testing ! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 605055192] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 606189990] !: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 607349883] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 608673240] Testing word: @ +[Hera] [HADES][TEST ] [KRELTSC: 609499590] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 610444254] Running @.after_store: 123 HERE ! HERE @ . CR +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 612014823] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 613657590] Expected: Should print: 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] 123 +[Hera] [HADES][TEST ] [KRELTSC: 616929516] Running @.multiple_reads: 456 HERE ! HERE @ HERE @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 618622032] Test passed +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 620270973] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 623313264] Running @.empty_stack: @ +[Hera] [HADES][TEST ] [KRELTSC: 624332856] Expected error occurred +[Hera] [HADES][TEST ] Testing @ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 626030034] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 627250050] @: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 628370463] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 629698440] Testing word: C! +[Hera] [HADES][TEST ] [KRELTSC: 630582393] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 631522668] Running C!.basic: 65 HERE C! HERE C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 633430266] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 635093151] Expected: Should print: 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 638239413] Running C!.zero: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 639882516] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 641525766] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 644546448] Running C!.high_byte: 255 HERE C! HERE C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 646253748] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 647940993] Expected: Should print: 255 +[Hera] 255 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][INFO ] [KRELTSC: 650278755] L8[TABLE]: Config 8 → 9 regime=2 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 255 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 652479030] Running C!.truncation: 256 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 654042186] Test passed +[Hera] [HADES][TEST ] Testing C! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 655658976] Expected: Should print: 0 (truncated) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 658749693] C!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 659837934] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 661126368] Testing word: C@ +[Hera] [HADES][TEST ] [KRELTSC: 661967376] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 662888247] Running C@.after_cstore: 97 HERE C! HERE C@ . CR +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 664564110] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 666189384] Expected: Should print: 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] 97 +[Hera] [HADES][TEST ] [KRELTSC: 669234237] Running C@.zero_byte: 0 HERE C! HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 670804932] Test passed +[Hera] [HADES][TEST ] Testing C@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 672576681] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 675765594] C@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 676990272] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 678284754] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 679140609] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 680031366] Running ,.basic: 42 , HERE 8 - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 681633792] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 683316291] Expected: Should compile 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 686316288] Running ,.negative: -999 , HERE 8 - @ . CR +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 687992760] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 689737818] Expected: Should compile -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 692878431] ,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 694008399] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 695306976] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 696205986] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 697224528] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 698936532] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 700584087] Expected: Should compile byte 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][INFO ] [KRELTSC: 702594732] L8[TABLE]: Config 9 → 10 regime=2 score=6553 L1=0 L2=0 L3=0 L +[Hera] 65 +[Hera] 65 +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 705222546] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 706699602] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 708359589] Expected: Should compile byte 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 711386151] C,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 712513683] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 713842899] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 714816711] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 715729812] Running 2,.roundtrip: 12345 67890 2, HERE 16 - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 717879645] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 719537805] Expected: Should print: 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 723157911] Running 2,.save-and-verify: 12345 67890 2, HERE 16 - 2@ 67890 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 725033022] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 726728058] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 730059645] 2,: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 731177601] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 732541824] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 733405113] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 734312460] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 735745206] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 737408112] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 740443536] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][INFO ] [KRELTSC: 741798414] L8[TABLE]: Config 10 → 11 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 743328117] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 744986865] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 746787195] HERE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 747881505] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 749191695] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 750051918] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 750985746] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 752703609] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 754386045] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 757436904] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 759080532] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 760838652] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 763869309] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 765577197] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 767364024] Expected: Should print: -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 770414421] ALLOT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 771604512] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 772873542] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 773766714] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 774712302] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 776242089] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 778180200] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 781311531] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 782880840] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 784618758] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 [HADES][INFO ] [KRELTSC: 786418080] L8[TABLE]: Config 11 → 12 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 788840094] PAD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 790078275] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 791535843] Testing word: +! +[Hera] [HADES][TEST ] [KRELTSC: 792457743] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 793417380] Running +!.basic: 10 HERE ! 5 HERE +! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 795136272] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 796876080] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 800044245] Running +!.by_zero: 42 HERE ! 0 HERE +! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 801792306] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 803598138] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 806704500] Running +!.negative: 10 HERE ! -3 HERE +! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 808355499] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 810117966] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 813224895] Running +!.accumulate: 0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 814979277] Test passed +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 816708396] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][INFO ] [KRELTSC: 818736786] L8[TABLE]: Config 12 → 13 regime=2 score=6553 L1=0 L2=0 L3=0 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 821523864] Running +!.empty_stack: +! +[Hera] [HADES][TEST ] [KRELTSC: 822650871] Expected error occurred +[Hera] [HADES][TEST ] Testing +! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 824543559] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 825818826] +!: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 826931364] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 828324210] Testing word: -! +[Hera] [HADES][TEST ] [KRELTSC: 829169040] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 830129727] Running -!.basic: 10 HERE ! 3 HERE -! HERE @ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 831826296] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 833478471] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 836561817] Running -!.by_zero: 42 HERE ! 0 HERE -! HERE @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 838168548] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 839905353] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 843126438] Running -!.negative: 10 HERE ! -5 HERE -! HERE @ . CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 844887498] Test passed +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 846536019] Expected: Should print: 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 849625686] Running -!.empty_stack: -! +[Hera] [HADES][TEST ] [KRELTSC: 850713087] Expected error occurred +[Hera] [HADES][TEST ] Testing -! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 852601638] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 853852818] -!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 855058470] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 856404738] Testing word: 2! +[Hera] [HADES][TEST ] [KRELTSC: 857260131] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 858227475] Running 2!.basic: 11 22 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 860096223] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 861740292] Expected: Should print: 22 11 +[Hera] 11 22 +[Hera] 11 22 [HADES][INFO ] [KRELTSC: 863668848] L8[TABLE]: Config 13 → 14 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 11 22 +[Hera] 11 22 +[Hera] 11 22 +[Hera] [HADES][TEST ] [KRELTSC: 866368083] Running 2!.zeros: 0 0 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 868037205] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 869660505] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 872887008] Running 2!.negative: -1 -2 HERE 2! HERE @ . HERE 8 + @ . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 874606677] Test passed +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 876218742] Expected: Should print: -2 -1 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 879648777] Running 2!.empty_stack: 2! +[Hera] [HADES][TEST ] [KRELTSC: 880682229] Expected error occurred +[Hera] [HADES][TEST ] Testing 2! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 882420357] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 883653330] 2!: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 884864673] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 886252353] Testing word: FILL +[Hera] [HADES][TEST ] [KRELTSC: 887181141] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 888086136] Running FILL.basic: HERE 8 65 FILL HERE C@ . HERE 1+ C@ . CR +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 890059737] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 891858324] Expected: Should print: 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 +[Hera] 65 65 [HADES][INFO ] [KRELTSC: 894698091] L8[TABLE]: Config 14 → 15 regime=2 score=6553 L1=0 L2=0 L3=0 + +[Hera] 65 65 +[Hera] [HADES][TEST ] [KRELTSC: 896287497] Running FILL.zero_n: HERE 0 88 FILL +[Hera] [HADES][TEST ] [KRELTSC: 897365469] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 899098620] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 900377667] Running FILL.zero_byte: HERE 4 0 FILL HERE C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 901917534] Test passed +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 903610281] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 906589152] Running FILL.empty_stack: FILL +[Hera] [HADES][TEST ] [KRELTSC: 907674201] Expected error occurred +[Hera] [HADES][TEST ] Testing FILL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 909423186] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 910502271] FILL: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 911667771] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 912997596] Testing word: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 913873254] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 914815377] Running MOVE.basic: HERE 65 OVER C! HERE 1+ 66 OVER C! HERE H +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 916944777] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 918626247] Expected: Should print: 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 922266513] Running MOVE.zero_n: HERE HERE 8 + 0 MOVE +[Hera] [HADES][TEST ] [KRELTSC: 923419938] Test passed +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 925067115] Expected: Should do nothing +[Hera] [HADES][INFO ] [KRELTSC: 926179926] L8[TABLE]: Config 15 → 16 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] [HADES][TEST ] [KRELTSC: 927977526] Running MOVE.empty_stack: MOVE +[Hera] [HADES][TEST ] [KRELTSC: 929252373] Expected error occurred +[Hera] [HADES][TEST ] Testing MOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 931023744] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 932130108] MOVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 933355983] ▶ Testing module: v3/src/test_runner/modules/memory_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 934637613] Testing word: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 935516736] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 936420576] Running ERASE.basic: HERE 4 65 FILL HERE 4 ERASE HERE C@ . HE +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 938315805] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 940012122] Expected: Should print: 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 943391988] Running ERASE.zero_n: HERE 0 ERASE +[Hera] [HADES][TEST ] [KRELTSC: 944455029] Test passed +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 946119993] Expected: Should do nothing +[Hera] [HADES][TEST ] [KRELTSC: 947392551] Running ERASE.empty_stack: ERASE +[Hera] [HADES][TEST ] [KRELTSC: 948532851] Expected error occurred +[Hera] [HADES][TEST ] Testing ERASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 950374992] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 951468903] ERASE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 952624092] === Memory Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 954042642] +[Hera] === Testing Module: Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 955429314] Running Arithmetic Words Tests (Module 5)... +[Hera] [HADES][TEST ] [KRELTSC: 956624592] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 957929091] Testing word: + +[Hera] [HADES][TEST ] [KRELTSC: 958787298] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 959697711] Running +.basic: 5 7 + . CR +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 961020501] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 962662092] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 965611899] Running +.zero_add: 42 0 + . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 967129947] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 968859171] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 971918682] Running +.negative: -5 3 + . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 973312662] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 974988147] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 978042072] Running +.both_negative: -5 -3 + . CR +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 979930140] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 981608145] Expected: Should print: -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] -8 +[Hera] [HADES][INFO ] [KRELTSC: 984711210] L8[TABLE]: Config 16 → 18 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -8 +[Hera] [HADES][TEST ] [KRELTSC: 986498352] Running +.overflow: 2147483647 1 + . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 988029924] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 989886639] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 993457143] Running +.underflow: -2147483648 -1 + . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 995285256] Test passed +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 997203984] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1001069643] Running +.empty_stack: + +[Hera] [HADES][ERROR] [KRELTSC: 1002318828] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1003484034] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1005568242] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1006922196] Running +.one_item: 42 + +[Hera] [HADES][ERROR] [KRELTSC: 1008099960] +: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1009135512] Expected error occurred +[Hera] [HADES][TEST ] Testing + ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1011297504] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1012632516] +: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1014102096] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1015619934] Testing word: - +[Hera] [HADES][TEST ] [KRELTSC: 1016781801] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1017900513] Running -.basic: 10 3 - . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1019632425] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1021597731] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1024874004] Running -.zero_sub: 42 0 - . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1026458433] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1028395179] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1031823366] Running -.from_zero: 0 5 - . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1033238850] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1035263019] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1038582342] Running -.negative: 5 -3 - . CR +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1040612853] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1042552014] Expected: Should print: 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] 8 +[Hera] [HADES][TEST ] [KRELTSC: 1045788534] Running -.same_values: 42 42 - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1047457635] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1049385393] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1052664522] Running -.overflow: -2147483648 1 - . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1054581759] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1056502986] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1060357851] Running -.underflow: 2147483647 -1 - . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1062166770] Test passed +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1064128023] Expected: Should overflow +[Hera] 2147483648 +[Hera] [HADES][INFO ] [KRELTSC: 1065879444] L8[TABLE]: Config 18 → 19 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1069741638] Running -.empty_stack: - +[Hera] [HADES][ERROR] [KRELTSC: 1070962053] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1072055796] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1074098676] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1075414998] Running -.one_item: 42 - +[Hera] [HADES][ERROR] [KRELTSC: 1076562564] -: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1077632934] Expected error occurred +[Hera] [HADES][TEST ] Testing - ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1079706201] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1080982623] -: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1082283090] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1083824238] Testing word: * +[Hera] [HADES][TEST ] [KRELTSC: 1084834611] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1085944398] Running *.basic: 6 7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1087615746] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1089506460] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1093003905] Running *.by_zero: 42 0 * . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1094593332] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1096508574] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1099771008] Running *.by_one: 42 1 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1101346470] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1103269566] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1106661927] Running *.by_negative: 6 -7 * . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1108311855] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1110180498] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1113542409] Running *.negative_negative: -6 -7 * . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1115281713] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1117309347] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1120591605] Running *.large_numbers: 32767 2 * . CR +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1122350838] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1124271960] Expected: Should print: 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] 65534 +[Hera] [HADES][TEST ] [KRELTSC: 1127812917] Running *.overflow: 65536 65536 * . CR +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1129507596] Test passed +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1131380586] Expected: May overflow +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 1134928683] Running *.empty_stack: * +[Hera] [HADES][ERROR] [KRELTSC: 1136152983] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1137234924] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1139278980] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1140672036] Running *.one_item: 42 * +[Hera] [HADES][ERROR] [KRELTSC: 1141828317] *: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1142968218] Expected error occurred +[Hera] [HADES][TEST ] Testing * ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1145033778] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1146381138] *: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1147697250] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1149230397] Testing word: / +[Hera] [HADES][TEST ] [KRELTSC: 1150239510] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1151357949] Running /.basic: 15 3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1152922512] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1154895777] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][INFO ] [KRELTSC: 1157371572] L8[TABLE]: Config 19 → 20 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1159813872] Running /.by_one: 42 1 / . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1161415437] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1163308587] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1166683455] Running /.negative_dividend: -15 3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1168513794] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1170453354] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1173752412] Running /.negative_divisor: 15 -3 / . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1175279553] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1176936915] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1179980214] Running /.both_negative: -15 -3 / . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1181430369] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1183177527] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1186085922] Running /.truncation: 7 3 / . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1187551176] Test passed +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1189295100] Expected: Should print: 2 (truncated) +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1192412319] Running /.by_zero: 42 0 / +[Hera] [HADES][ERROR] [KRELTSC: 1193500203] /: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1194459168] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1196364078] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1197516663] Running /.empty_stack: / +[Hera] [HADES][ERROR] [KRELTSC: 1198504377] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1199487198] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1201228056] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1202370519] Running /.one_item: 42 / +[Hera] [HADES][ERROR] [KRELTSC: 1203329925] /: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1204261044] Expected error occurred +[Hera] [HADES][TEST ] Testing / ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1206179982] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1207356549] /: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1208476059] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1209751452] Testing word: MOD +[Hera] [HADES][TEST ] [KRELTSC: 1210635678] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1211568624] Running MOD.basic: 17 5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1213326387] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1215017559] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1217939919] Running MOD.exact_division: 15 3 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1219409079] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1221063627] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1224038949] Running MOD.by_one: 42 1 MOD . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1225498827] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1227141006] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1230100956] Running MOD.negative_dividend: -17 5 MOD . CR +[Hera] [HADES][INFO ] [KRELTSC: 1231351338] L8[TABLE]: Config 20 → 21 regime=2 score=26214 L1=0 L2=0 L3=1 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1233076845] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1234683303] Expected: Should handle negative +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1237771731] Running MOD.negative_divisor: 17 -5 MOD . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1239288057] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1240990527] Expected: Should handle negative +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1244058585] Running MOD.small_by_large: 3 7 MOD . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1245575520] Test passed +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1247378202] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1250374650] Running MOD.by_zero: 42 0 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1251466839] MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1252432230] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1254161580] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1255394364] Running MOD.empty_stack: MOD +[Hera] [HADES][ERROR] [KRELTSC: 1256424519] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1257418785] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1259189211] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1260322350] Running MOD.one_item: 42 MOD +[Hera] [HADES][ERROR] [KRELTSC: 1261322580] MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1262233602] Expected error occurred +[Hera] [HADES][TEST ] Testing MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1263997560] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1265078178] MOD: 9 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1266196638] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1267579509] Testing word: /MOD +[Hera] [HADES][TEST ] [KRELTSC: 1268642529] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1269607542] Running /MOD.basic: 17 5 /MOD . . CR +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1271185230] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1272827661] Expected: Should print: 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] 3 2 +[Hera] [HADES][TEST ] [KRELTSC: 1275929277] Running /MOD.exact: 15 3 /MOD . . CR +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1277369436] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1279109265] Expected: Should print: 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] 5 0 +[Hera] [HADES][TEST ] [KRELTSC: 1282333626] Running /MOD.negative: -17 5 /MOD . . CR +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1283828994] Test passed +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1285505487] Expected: Should handle negative dividend +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 1288887138] Running /MOD.by_zero: 42 0 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1289939553] /MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1290902004] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1292655021] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 1293824049] Running /MOD.empty_stack: /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1294850109] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1295785533] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1297530633] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1298633070] Running /MOD.one_item: 42 /MOD +[Hera] [HADES][ERROR] [KRELTSC: 1299663351] /MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1300579602] Expected error occurred +[Hera] [HADES][TEST ] Testing /MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1302316218] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1303460886] /MOD: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1304587725] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1305946404] Testing word: ABS +[Hera] [HADES][TEST ] [KRELTSC: 1306824351] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1307755659] Running ABS.positive: 42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1309236159] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1310932560] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1313837637] Running ABS.negative: -42 ABS . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1315282248] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1316922579] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 [HADES][INFO ] [KRELTSC: 1319946159] L8[TABLE]: Config 21 → 22 regime=2 score=26214 L1=0 L2=0 L3=1 + +[Hera] [HADES][TEST ] [KRELTSC: 1321175646] Running ABS.zero: 0 ABS . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1322556522] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1324217937] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1327154409] Running ABS.min_int: -2147483648 ABS . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1328751816] Test passed +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1330433307] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1333968300] Running ABS.empty_stack: ABS +[Hera] [HADES][ERROR] [KRELTSC: 1335034470] ABS: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1335958155] Expected error occurred +[Hera] [HADES][TEST ] Testing ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1337723646] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1338835764] ABS: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1340013801] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1341313197] Testing word: NEGATE +[Hera] [HADES][TEST ] [KRELTSC: 1342184487] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1343129907] Running NEGATE.positive: 42 NEGATE . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1344774165] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1346449167] Expected: Should print: -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 1349479425] Running NEGATE.negative: -42 NEGATE . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1350968430] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1352749020] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1355725707] Running NEGATE.zero: 0 NEGATE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1357224708] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1359108051] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1362077346] Running NEGATE.min_int: -2147483648 NEGATE . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1363708962] Test passed +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1365383397] Expected: Should print: 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1368935526] Running NEGATE.empty_stack: NEGATE +[Hera] [HADES][ERROR] [KRELTSC: 1370041428] NEGATE: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1371048504] Expected error occurred +[Hera] [HADES][TEST ] Testing NEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1372836696] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1373997933] NEGATE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1375263183] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1376602647] Testing word: MIN +[Hera] [HADES][TEST ] [KRELTSC: 1377507579] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1378449702] Running MIN.basic: 5 3 MIN . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1379950278] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1381722048] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1384690902] Running MIN.equal: 42 42 MIN . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1386082467] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1387716267] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1390645746] Running MIN.negative: -5 -3 MIN . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1392099198] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1393872228] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1396960845] Running MIN.mixed: -1 1 MIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1398372675] Test passed +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1400016744] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 1402157862] L8[TABLE]: Config 22 → 23 regime=2 score=52428 L1=0 L2=0 L3=1 + +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1404107922] Running MIN.one_item: 42 MIN +[Hera] [HADES][ERROR] [KRELTSC: 1405128606] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1406101137] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1408040634] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1409161782] Running MIN.empty_stack: MIN +[Hera] [HADES][ERROR] [KRELTSC: 1410158379] MIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1411069569] Expected error occurred +[Hera] [HADES][TEST ] Testing MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1412865552] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1413977607] MIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1415096424] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1416373182] Testing word: MAX +[Hera] [HADES][TEST ] [KRELTSC: 1417249869] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1418161899] Running MAX.basic: 5 3 MAX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1419758613] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1421440020] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1424351334] Running MAX.equal: 42 42 MAX . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1425794769] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1427554695] Expected: Should print: 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 1430530143] Running MAX.negative: -5 -3 MAX . CR +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 1432075092] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1433767902] Expected: Should print: -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] -3 +[Hera] [HADES][TEST ] [KRELTSC: 1436771805] Running MAX.mixed: -1 1 MAX . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1438204698] Test passed +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1439844672] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1442755377] Running MAX.one_item: 42 MAX +[Hera] [HADES][ERROR] [KRELTSC: 1443774402] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1444912980] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1446707598] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1447798086] Running MAX.empty_stack: MAX +[Hera] [HADES][ERROR] [KRELTSC: 1448807934] MAX: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1449730359] Expected error occurred +[Hera] [HADES][TEST ] Testing MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1451479365] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1452632307] MAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1453811100] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1455235089] Testing word: 1+ +[Hera] [HADES][TEST ] [KRELTSC: 1456140021] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1457233827] Running 1+.basic: 5 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1458882138] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1460651115] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1463701449] Running 1+.zero: 0 1+ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1465065693] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1466778411] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 1469817006] Running 1+.negative: -1 1+ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1471310442] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1473053232] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1475992203] Running 1+.chain: 3 1+ 1+ 1+ . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1477457562] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1479186996] Expected: Should print: 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 1482467259] Running 1+.overflow: 2147483647 1+ . CR +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1484111748] Test passed +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1485912288] Expected: Should overflow +[Hera] 2147483648 +[Hera] 2147483648 [HADES][INFO ] [KRELTSC: 1487873520] L8[TABLE]: Config 23 → 24 regime=2 score=6553 L1=0 L2=0 L3=1 + +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 1490582289] Running 1+.empty_stack: 1+ +[Hera] [HADES][ERROR] [KRELTSC: 1491662613] 1+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1492661919] Expected error occurred +[Hera] [HADES][TEST ] Testing 1+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1494665403] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1495905621] 1+: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1497120660] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1498563696] Testing word: 1- +[Hera] [HADES][TEST ] [KRELTSC: 1499518986] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1500541350] Running 1-.basic: 5 1- . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 1501954524] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1503611634] Expected: Should print: 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 1506457743] Running 1-.to_zero: 1 1- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1507949016] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1509644073] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1512532392] Running 1-.to_negative: 0 1- . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1513931055] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1515598392] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1518576087] Running 1-.chain: 6 1- 1- 1- . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1520091489] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1521816366] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1524859119] Running 1-.underflow: -2147483648 1- . CR +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1526447034] Test passed +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1528121889] Expected: Should underflow +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] -2147483649 +[Hera] [HADES][TEST ] [KRELTSC: 1531607091] Running 1-.empty_stack: 1- +[Hera] [HADES][ERROR] [KRELTSC: 1532829480] 1-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1533758793] Expected error occurred +[Hera] [HADES][TEST ] Testing 1- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1535490789] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1536623298] 1-: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1537761288] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1539045291] Testing word: 2+ +[Hera] [HADES][TEST ] [KRELTSC: 1539997032] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1540927206] Running 2+.basic: 5 2+ . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1542441999] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1544121894] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 1547218092] Running 2+.zero: 0 2+ . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1548556674] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1550176320] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1553152104] Running 2+.negative: -3 2+ . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1554527625] Test passed +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1556233119] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1559360145] Running 2+.empty_stack: 2+ +[Hera] [HADES][ERROR] [KRELTSC: 1560421485] 2+: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1561390530] Expected error occurred +[Hera] [HADES][TEST ] Testing 2+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1563197160] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1564475703] 2+: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1565665626] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1566940746] Testing word: 2- +[Hera] [HADES][TEST ] [KRELTSC: 1567808865] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1568728392] Running 2-.basic: 7 2- . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1570251585] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1571955693] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1574866923] Running 2-.zero: 2 2- . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1576209369] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1577938761] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 1579764648] L8[TABLE]: Config 24 → 25 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1582617645] Running 2-.negative: 0 2- . CR +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1584154950] Test passed +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1585903662] Expected: Should print: -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] -2 +[Hera] [HADES][TEST ] [KRELTSC: 1588951959] Running 2-.empty_stack: 2- +[Hera] [HADES][ERROR] [KRELTSC: 1590009351] 2-: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1591103745] Expected error occurred +[Hera] [HADES][TEST ] Testing 2- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1593002670] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1594148094] 2-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1595430228] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1596726222] Testing word: 2* +[Hera] [HADES][TEST ] [KRELTSC: 1597593774] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1598525313] Running 2*.basic: 5 2* . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1600047288] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1601705007] Expected: Should print: 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 1604660988] Running 2*.zero: 0 2* . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1606020822] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1607823063] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1610711508] Running 2*.negative: -3 2* . CR +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 1612118445] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1613765538] Expected: Should print: -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] -6 +[Hera] [HADES][TEST ] [KRELTSC: 1616761692] Running 2*.one: 1 2* . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1618076271] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1619749089] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 1622938380] Running 2*.large: 1073741823 2* . CR +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 1624480389] Test passed +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1626096255] Expected: Should print: 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] 2147483646 +[Hera] [HADES][TEST ] [KRELTSC: 1629505584] Running 2*.empty_stack: 2* +[Hera] [HADES][ERROR] [KRELTSC: 1630555248] 2*: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1631484981] Expected error occurred +[Hera] [HADES][TEST ] Testing 2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1633339848] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1634470572] 2*: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1635648168] ▶ Testing module: v3/src/test_runner/modules/arithmetic_words +[Hera] [HADES][TEST ] [KRELTSC: 1636954998] Testing word: 2/ +[Hera] [HADES][TEST ] [KRELTSC: 1637826267] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1638748902] Running 2/.basic: 10 2/ . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1640149980] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1641796170] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 1644683964] Running 2/.odd: 7 2/ . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1646118138] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1647721677] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 1650781650] Running 2/.zero: 0 2/ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1652112168] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1653732738] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1656624711] Running 2/.negative_even: -10 2/ . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1658192802] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1659814065] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 1662789534] Running 2/.one: 1 2/ . CR +[Hera] [HADES][INFO ] [KRELTSC: 1663806039] L8[TABLE]: Config 25 → 26 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1665495174] Test passed +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1667159634] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1670138127] Running 2/.empty_stack: 2/ +[Hera] [HADES][ERROR] [KRELTSC: 1671322842] 2/: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1672283109] Expected error occurred +[Hera] [HADES][TEST ] Testing 2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1674012858] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1675129638] 2/: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1676347638] === Arithmetic Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 1677717783] +[Hera] === Testing Module: Logical Words === +[Hera] [HADES][INFO ] [KRELTSC: 1679118399] Running Logical Words Tests (Module 8)... +[Hera] [HADES][TEST ] [KRELTSC: 1680242571] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1681553433] Testing word: AND +[Hera] [HADES][TEST ] [KRELTSC: 1682428062] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1683592491] Running AND.both_true: -1 -1 AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1685040546] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1686705552] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1689797760] Running AND.first_false: 0 -1 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1691269335] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1692956202] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1696004583] Running AND.second_false: -1 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1697505684] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1699165545] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1702071609] Running AND.both_false: 0 0 AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1703483229] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1705174590] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1708219947] Running AND.bitwise: 85 51 AND . CR +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 1710417660] Test passed +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1712494014] Expected: Should print: 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] 17 +[Hera] [HADES][TEST ] [KRELTSC: 1716834126] Running AND.empty_stack: AND +[Hera] [HADES][ERROR] [KRELTSC: 1718326386] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1719749262] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1722298200] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1723462713] Running AND.one_item: 42 AND +[Hera] [HADES][ERROR] [KRELTSC: 1724533461] AND: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1725459771] Expected error occurred +[Hera] [HADES][TEST ] Testing AND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1727215791] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1728297879] AND: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1729568043] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1730856036] Testing word: OR +[Hera] [HADES][TEST ] [KRELTSC: 1731722979] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1732636689] Running OR.both_true: -1 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1734394536] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1736083860] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1739123652] Running OR.first_false: 0 -1 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1740609339] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1742383293] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1745329341] Running OR.second_false: -1 0 OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1746929310] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1748617269] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 1750804062] L8[TABLE]: Config 26 → 27 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1752995916] Running OR.both_false: 0 0 OR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1754418456] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1756040307] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1759047948] Running OR.bitwise: 85 51 OR . CR +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 1760466330] Test passed +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1762187847] Expected: Should print: 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] 119 +[Hera] [HADES][TEST ] [KRELTSC: 1765243284] Running OR.empty_stack: OR +[Hera] [HADES][ERROR] [KRELTSC: 1766255421] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1767218733] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1768968768] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1770031179] Running OR.one_item: 42 OR +[Hera] [HADES][ERROR] [KRELTSC: 1771098630] OR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1772073219] Expected error occurred +[Hera] [HADES][TEST ] Testing OR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1773889929] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1775005470] OR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1776181701] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1777526793] Testing word: XOR +[Hera] [HADES][TEST ] [KRELTSC: 1778395206] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1779344280] Running XOR.both_true: -1 -1 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1780877469] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1782508644] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1785524496] Running XOR.first_false: 0 -1 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1787022258] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1788696798] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1791721617] Running XOR.second_false: -1 0 XOR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1793222214] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1794855867] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1797962271] Running XOR.both_false: 0 0 XOR . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1799426643] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1801135623] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1804088559] Running XOR.bitwise: 85 51 XOR . CR +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 1805560680] Test passed +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1807222368] Expected: Should print: 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] 102 +[Hera] [HADES][TEST ] [KRELTSC: 1810474701] Running XOR.empty_stack: XOR +[Hera] [HADES][ERROR] [KRELTSC: 1811551938] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1812482952] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1814251362] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1815363270] Running XOR.one_item: 42 XOR +[Hera] [HADES][ERROR] [KRELTSC: 1816352622] XOR: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1817279688] Expected error occurred +[Hera] [HADES][TEST ] Testing XOR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1819131930] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1820232918] XOR: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1821415050] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1822806447] Testing word: NOT +[Hera] [HADES][TEST ] [KRELTSC: 1823689014] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1824612930] Running NOT.true: -1 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1826100549] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1827744009] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1830682791] Running NOT.false: 0 NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1832064822] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1833731823] Expected: Should print: -1 +[Hera] [HADES][INFO ] [KRELTSC: 1834909671] L8[TABLE]: Config 27 → 28 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1838238633] Running NOT.positive: 42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1839618333] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1841315742] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1844253264] Running NOT.negative: -42 NOT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1845645186] Test passed +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1847427351] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1850337720] Running NOT.empty_stack: NOT +[Hera] [HADES][ERROR] [KRELTSC: 1851398997] NOT: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1852332636] Expected error occurred +[Hera] [HADES][TEST ] Testing NOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1854071898] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1855201509] NOT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1856308944] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1857597294] Testing word: = +[Hera] [HADES][TEST ] [KRELTSC: 1858471587] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1859524170] Running =.equal: 42 42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1861004943] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1862653338] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1865642583] Running =.not_equal: 42 43 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1866995046] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1868659632] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1871662632] Running =.zero_equal: 0 0 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1873075197] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1874715633] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1877697360] Running =.negative_equal: -42 -42 = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1879222422] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1881028485] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1884071448] Running =.negative_positive: -42 42 = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1885711380] Test passed +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1887339090] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1890209916] Running =.empty_stack: = +[Hera] [HADES][ERROR] [KRELTSC: 1891256199] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1892191938] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1893924879] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1895062239] Running =.one_item: 42 = +[Hera] [HADES][ERROR] [KRELTSC: 1896030213] =: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1897047789] Expected error occurred +[Hera] [HADES][TEST ] Testing = ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1898747340] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1899832053] =: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1900942911] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1902232815] Testing word: <> +[Hera] [HADES][TEST ] [KRELTSC: 1903191045] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1904132160] Running <>.not_equal: 42 43 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1905760143] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1907485083] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1910512443] Running <>.equal: 42 42 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1911978768] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1913624055] Expected: Should print: 0 +[Hera] [HADES][INFO ] [KRELTSC: 1914771999] L8[TABLE]: Config 28 → 29 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1918195104] Running <>.zero_equal: 0 0 <> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1919587908] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1921238865] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1924313559] Running <>.negative: -42 42 <> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1925651343] Test passed +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1927354128] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1930342890] Running <>.empty_stack: <> +[Hera] [HADES][ERROR] [KRELTSC: 1931353536] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1932294462] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1934054934] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1935524829] Running <>.one_item: 42 <> +[Hera] [HADES][ERROR] [KRELTSC: 1936670862] <>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1937555886] Expected error occurred +[Hera] [HADES][TEST ] Testing <> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1939328223] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1940449056] <>: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1941588453] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1942869642] Testing word: < +[Hera] [HADES][TEST ] [KRELTSC: 1943717559] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1944649266] Running <.less_than: 5 7 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1946223573] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1947975960] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1950998910] Running <.greater_than: 7 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1952520192] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1954155693] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1957055898] Running <.equal: 5 5 < . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1958437824] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1960207746] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 1963567116] Running <.negative_positive: -5 5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1965577719] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1968081045] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1972440687] Running <.negative_negative: -7 -5 < . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1974424095] Test passed +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1976088723] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1979082609] Running <.empty_stack: < +[Hera] [HADES][ERROR] [KRELTSC: 1980125070] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1981075740] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1982805300] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1983892050] Running <.one_item: 42 < +[Hera] [HADES][ERROR] [KRELTSC: 1984936380] <: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1986197472] Expected error occurred +[Hera] [HADES][TEST ] Testing < ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1988126280] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 1989256059] <: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 1990368996] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 1991668980] Testing word: > +[Hera] [HADES][TEST ] [KRELTSC: 1992516939] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 1993449717] Running >.greater_than: 7 5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 1995023562] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 1996674141] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 2015856276] L8[TABLE]: Config 29 → 30 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2018255022] Running >.less_than: 5 7 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2019733002] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2021459328] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2024596266] Running >.equal: 5 5 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2025937221] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2027604789] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2030550102] Running >.positive_negative: 5 -5 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2032069746] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2033693109] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2036789538] Running >.negative_negative: -5 -7 > . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2038317939] Test passed +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2039984100] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2042933340] Running >.empty_stack: > +[Hera] [HADES][ERROR] [KRELTSC: 2043959736] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2044908180] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2046683226] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2047898622] Running >.one_item: 42 > +[Hera] [HADES][ERROR] [KRELTSC: 2048872875] >: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2049898452] Expected error occurred +[Hera] [HADES][TEST ] Testing > ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2051642691] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2052822408] >: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2053974048] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2055326658] Testing word: 0= +[Hera] [HADES][TEST ] [KRELTSC: 2056213950] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2057161449] Running 0=.zero: 0 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2058612423] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2060387406] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2063485683] Running 0=.positive: 42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2064937182] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2066679321] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2069652984] Running 0=.negative: -42 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2071075083] Test passed +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2072856009] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2075860500] Running 0=.empty_stack: 0= +[Hera] [HADES][ERROR] [KRELTSC: 2076896934] 0=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2077846281] Expected error occurred +[Hera] [HADES][TEST ] Testing 0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2079599655] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2080682499] 0=: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2081826999] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2083117953] Testing word: 0< +[Hera] [HADES][TEST ] [KRELTSC: 2084006421] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2084928657] Running 0<.negative: -42 0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2086540575] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2088241533] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2091186930] Running 0<.zero: 0 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2092625493] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2094329874] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2096878371] L8[TABLE]: Config 30 → 31 regime=2 score=6553 L1=0 L2=0 L3=1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2098713162] Running 0<.positive: 42 0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2100090720] Test passed +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2101706985] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2104684785] Running 0<.empty_stack: 0< +[Hera] [HADES][ERROR] [KRELTSC: 2105722122] 0<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2106665547] Expected error occurred +[Hera] [HADES][TEST ] Testing 0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2108422701] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2109510459] 0<: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2110739967] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2112042387] Testing word: 0> +[Hera] [HADES][TEST ] [KRELTSC: 2112928377] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2113853007] Running 0>.positive: 42 0> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2115460620] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2117115231] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2120082195] Running 0>.zero: 0 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2121460131] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2123152437] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2126265981] Running 0>.negative: -42 0> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2127671553] Test passed +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2129303316] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2132247558] Running 0>.empty_stack: 0> +[Hera] [HADES][ERROR] [KRELTSC: 2133276663] 0>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2134229223] Expected error occurred +[Hera] [HADES][TEST ] Testing 0> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2136180354] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2137363221] 0>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2138563959] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2139980850] Testing word: 0<> +[Hera] [HADES][TEST ] [KRELTSC: 2140922826] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2141932065] Running 0<>.nonzero_pos: 42 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2143527603] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2145270456] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2148596415] Running 0<>.nonzero_neg: -1 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2150288217] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2152233384] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2155557516] Running 0<>.zero: 0 0<> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2157181971] Test passed +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2159103114] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2162485416] Running 0<>.empty_stack: 0<> +[Hera] [HADES][ERROR] [KRELTSC: 2163748902] 0<>: stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2164842771] Expected error occurred +[Hera] [HADES][TEST ] Testing 0<> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2166948714] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2168264280] 0<>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2169596457] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2171157891] Testing word: U< +[Hera] [HADES][TEST ] [KRELTSC: 2172198315] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2173680348] Running U<.less: 3 5 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2175851475] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2177994126] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2182465362] Running U<.equal: 5 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2184480753] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2186574096] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2189539422] Running U<.greater: 7 5 U< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2190928971] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2192605653] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2194816869] L8[TABLE]: Config 31 → 32 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2196921216] Running U<.zero_one: 0 1 U< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2198331576] Test passed +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2200320087] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2203342785] Running U<.empty_stack: U< +[Hera] [HADES][ERROR] [KRELTSC: 2204378652] U<: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2205332010] Expected error occurred +[Hera] [HADES][TEST ] Testing U< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2207127489] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2208223647] U<: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2209360398] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2210681634] Testing word: U> +[Hera] [HADES][TEST ] [KRELTSC: 2211608280] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2212540785] Running U>.greater: 5 3 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2214098754] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2215753659] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2218802103] Running U>.equal: 5 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2220243249] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2221986606] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2225067642] Running U>.less: 3 5 U> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2226421449] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2228096514] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2231046279] Running U>.one_zero: 1 0 U> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2232460188] Test passed +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2234122317] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2237274858] Running U>.empty_stack: U> +[Hera] [HADES][ERROR] [KRELTSC: 2238324144] U>: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2239280526] Expected error occurred +[Hera] [HADES][TEST ] Testing U> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2241022644] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2242214793] U>: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2243442033] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2244792438] Testing word: WITHIN +[Hera] [HADES][TEST ] [KRELTSC: 2245728345] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2246661039] Running WITHIN.in_range: 3 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2248290912] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2250155292] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2253220431] Running WITHIN.at_low: 1 1 5 WITHIN . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2254706979] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2256394833] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2259414066] Running WITHIN.at_high: 5 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2260984425] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2262726375] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2264975706] L8[TABLE]: Config 32 → 33 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2267107878] Running WITHIN.below: 0 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2268584577] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2270268189] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2273204955] Running WITHIN.above: 6 1 5 WITHIN . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2274725481] Test passed +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2276454411] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2279476815] Running WITHIN.empty_stack: WITHIN +[Hera] [HADES][ERROR] [KRELTSC: 2280596241] WITHIN: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2281580406] Expected error occurred +[Hera] [HADES][TEST ] Testing WITHIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2283411900] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2284596216] WITHIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2285792460] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2287147968] Testing word: TRUE +[Hera] [HADES][TEST ] [KRELTSC: 2288036205] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2288959575] Running TRUE.value: TRUE . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2290369872] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2292051510] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2295001611] Running TRUE.as_flag: TRUE 0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2296401534] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2298042768] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2300989824] Running TRUE.in_and: TRUE TRUE AND . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2302491786] Test passed +[Hera] [HADES][TEST ] Testing TRUE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2304313830] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2307390393] TRUE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2308540899] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2309829333] Testing word: FALSE +[Hera] [HADES][TEST ] [KRELTSC: 2310739578] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2311746843] Running FALSE.value: FALSE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2313180114] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2314871559] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2317792827] Running FALSE.as_flag: FALSE 0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2319236073] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2320891020] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2323895427] Running FALSE.in_or: TRUE FALSE OR . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2325441426] Test passed +[Hera] [HADES][TEST ] Testing FALSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2327229744] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2330272980] FALSE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2331460782] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2332744008] Testing word: >= +[Hera] [HADES][TEST ] [KRELTSC: 2333583756] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2334517605] Running >=.less: 3 5 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2335973535] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2337698769] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 2340292101] L8[TABLE]: Config 33 → 34 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2342153310] Running >=.greater: 5 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2343644814] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2345329434] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2348388378] Running >=.equal: 3 3 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2349814110] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2351487516] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2354417688] Running >=.negative: -1 0 >= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2355806334] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2357478165] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2360407140] Running >=.neg_neg: -1 -2 >= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2361824136] Test passed +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2363571441] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2366604765] Running >=.underflow: >= +[Hera] [HADES][ERROR] [KRELTSC: 2367589455] >=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2368575447] Expected error occurred +[Hera] [HADES][TEST ] Testing >= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2370422838] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2371510638] >=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2372628762] ▶ Testing module: v3/src/test_runner/modules/logical_words_te +[Hera] [HADES][TEST ] [KRELTSC: 2373908817] Testing word: <= +[Hera] [HADES][TEST ] [KRELTSC: 2374929627] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2375865051] Running <=.less: 3 5 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2377353489] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2379112575] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2382178449] Running <=.greater: 5 3 <= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2383928211] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2386094403] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2390522043] Running <=.equal: 3 3 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2392540899] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2394764148] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2398036431] Running <=.negative: -1 0 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2399452524] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2401288680] Expected: Should print: -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2404376919] Running <=.neg_neg: -2 -1 <= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2405800236] Test passed +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2407447938] Expected: Should print: -1 +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 2408937195] L8[TABLE]: Config 34 → 35 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 2412016656] Running <=.underflow: <= +[Hera] [HADES][ERROR] [KRELTSC: 2413142067] <=: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2414079507] Expected error occurred +[Hera] [HADES][TEST ] Testing <= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2415878031] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2417042733] <=: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2418244269] === Logical Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 2419581927] +[Hera] === Testing Module: Mixed Arithmetic Words === +[Hera] [HADES][INFO ] [KRELTSC: 2421115641] Running Mixed Arithmetic Words Tests (Module 7)... +[Hera] [HADES][TEST ] [KRELTSC: 2422349223] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2423703912] Testing word: */ +[Hera] [HADES][TEST ] [KRELTSC: 2424610104] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2426063430] Running */.basic: 6 7 4 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2428352157] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2430464799] Expected: Should print: 10 (6*7/4) +[Hera] [HADES][TEST ] [KRELTSC: 2432492622] Running */.exact_division: 12 5 3 */ . CR +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 2434780824] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2437044099] Expected: Should print: 20 (12*5/3) +[Hera] [HADES][TEST ] [KRELTSC: 2438436987] Running */.zero_multiply: 0 999 123 */ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 2440026393] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2441716326] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 2442700407] Running */.by_one: 42 5 1 */ . CR +[Hera] 210 +[Hera] [HADES][TEST ] [KRELTSC: 2444176938] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2445803997] Expected: Should print: 210 (42*5/1) +[Hera] [HADES][TEST ] [KRELTSC: 2446882683] Running */.truncation: 7 3 2 */ . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 2448324354] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2450031969] Expected: Should print: 10 (21/2 truncated) +[Hera] [HADES][TEST ] [KRELTSC: 2451221766] Running */.negative_multiply: -6 7 4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 2452722909] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2454510030] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 2455500222] Running */.negative_divisor: 6 7 -4 */ . CR +[Hera] -10 +[Hera] [HADES][TEST ] [KRELTSC: 2457033348] Test passed +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2458701693] Expected: Should print: -10 +[Hera] [HADES][TEST ] [KRELTSC: 2459707740] Running */.div_by_zero: 6 7 0 */ +[Hera] [HADES][ERROR] [KRELTSC: 2460856776] */: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2461801356] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2463598452] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2464727538] Running */.empty_stack: */ +[Hera] [HADES][ERROR] [KRELTSC: 2465725857] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2466671781] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2468424273] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2469544518] Running */.two_items: 1 2 */ +[Hera] [HADES][ERROR] [KRELTSC: 2470568877] */: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2471483700] Expected error occurred +[Hera] [HADES][TEST ] Testing */ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2473909263] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2475479433] */: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2476641531] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2477956026] Testing word: */MOD +[Hera] [HADES][TEST ] [KRELTSC: 2478845775] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2479802934] Running */MOD.basic: 17 3 5 */MOD . . CR +[Hera] 10 1 +[Hera] [HADES][TEST ] [KRELTSC: 2481524052] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2483192460] Expected: Should print: 1 10 (51/5 = 10 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 2484383643] Running */MOD.exact_division: 15 4 3 */MOD . . CR +[Hera] 20 0 +[Hera] [HADES][TEST ] [KRELTSC: 2485957404] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2487715545] Expected: Should print: 0 20 (60/3 = 20 rem 0) +[Hera] [HADES][TEST ] [KRELTSC: 2489006961] Running */MOD.zero_multiply: 0 999 123 */MOD . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2490668943] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2492333130] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2493333843] Running */MOD.by_one: 42 5 1 */MOD . . CR +[Hera] 210 0 +[Hera] [HADES][TEST ] [KRELTSC: 2494939293] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2496756129] Expected: Should print: 0 210 +[Hera] [HADES][TEST ] [KRELTSC: 2497790253] Running */MOD.remainder: 7 8 5 */MOD . . CR +[Hera] 11 1 +[Hera] [HADES][TEST ] [KRELTSC: 2499354354] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2501112579] Expected: Should print: 1 11 (56/5 = 11 rem 1) +[Hera] [HADES][TEST ] [KRELTSC: 2502324237] Running */MOD.negative: -7 3 4 */MOD . . CR +[Hera] -5 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2503875318] Test passed +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2505510819] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2506562688] Running */MOD.div_by_zero: 6 7 0 */MOD +[Hera] [HADES][ERROR] [KRELTSC: 2507691963] */MOD: Division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2508691374] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2510535153] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2511670014] Running */MOD.empty_stack: */MOD +[Hera] [HADES][ERROR] [KRELTSC: 2512825539] */MOD: Stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2513832888] Expected error occurred +[Hera] [HADES][TEST ] Testing */MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2515747500] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2516889291] */MOD: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2518042317] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2519338290] Testing word: M+ +[Hera] [HADES][TEST ] [KRELTSC: 2520231042] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2521226274] Running M+.basic: 0 100 200 M+ . . CR +[Hera] 300 0 +[Hera] [HADES][TEST ] [KRELTSC: 2522891805] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2524571973] Expected: Should print: 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2525736234] Running M+.overflow: 0 2147483647 1 M+ . . CR +[Hera] 2147483648 0 +[Hera] [HADES][TEST ] [KRELTSC: 2527327635] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2528977815] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 2530074435] Running M+.negative: 0 -100 50 M+ . . CR +[Hera] -50 0 +[Hera] [HADES][TEST ] [KRELTSC: 2531629653] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2533380759] Expected: Should print: 50 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2534486031] Running M+.zero_add: 0 42 0 M+ . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2536082094] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2537708061] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2538874044] Running M+.both_negative: 0 -100 -200 M+ . . CR +[Hera] -300 0 +[Hera] [HADES][TEST ] [KRELTSC: 2540516979] Test passed +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2542146831] Expected: Should print: -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2543235681] Running M+.empty_stack: M+ +[Hera] [HADES][TEST ] [KRELTSC: 2544331503] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2546107662] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2547232065] Running M+.one_item: 42 M+ +[Hera] [HADES][TEST ] [KRELTSC: 2548224840] Expected error occurred +[Hera] [HADES][TEST ] Testing M+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2549980335] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2551148670] M+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2552314800] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2553642966] Testing word: M* +[Hera] [HADES][TEST ] [KRELTSC: 2554510560] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2555506107] Running M*.basic: 123 456 M* . . CR +[Hera] 0 56088 +[Hera] [HADES][TEST ] [KRELTSC: 2557103976] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2558730363] Expected: Should print: 56088 0 +[Hera] [HADES][TEST ] [KRELTSC: 2559784815] Running M*.by_zero: 999 0 M* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2561210652] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2562846195] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2563910244] Running M*.by_one: 42 1 M* . . CR +[Hera] 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2565374826] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2567060559] Expected: Should print: 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2568116334] Running M*.negative: -123 456 M* . . CR +[Hera] -1 -56088 +[Hera] [HADES][TEST ] [KRELTSC: 2569644399] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2571312471] Expected: Should print: -56088 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2572372950] Running M*.large_multiply: 65536 65536 M* . . CR +[Hera] 0 4294967296 +[Hera] [HADES][TEST ] [KRELTSC: 2574009081] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2575646892] Expected: Should handle large result +[Hera] [HADES][TEST ] [KRELTSC: 2576847462] Running M*.both_negative: -100 -200 M* . . CR +[Hera] 0 20000 +[Hera] [HADES][TEST ] [KRELTSC: 2578434600] Test passed +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2580170985] Expected: Should print: 20000 0 +[Hera] [HADES][TEST ] [KRELTSC: 2581308576] Running M*.empty_stack: M* +[Hera] [HADES][TEST ] [KRELTSC: 2582340075] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2584098951] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2585201808] Running M*.one_item: 42 M* +[Hera] [HADES][TEST ] [KRELTSC: 2586197334] Expected error occurred +[Hera] [HADES][TEST ] Testing M* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2587938885] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2589120534] M*: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2590224126] ▶ Testing module: v3/src/test_runner/modules/mixed_arithmetic +[Hera] [HADES][TEST ] [KRELTSC: 2591510061] Testing word: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2592382905] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2593313940] Running M/MOD.basic: 0 1000 100 M/MOD . . CR +[Hera] 10 0 +[Hera] [HADES][TEST ] [KRELTSC: 2595153939] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2596880139] Expected: Should print: 0 10 (1000/100) +[Hera] [HADES][TEST ] [KRELTSC: 2598088962] Running M/MOD.with_remainder: 0 1234 100 M/MOD . . CR +[Hera] 12 34 +[Hera] [HADES][TEST ] [KRELTSC: 2599850190] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2601685296] Expected: Should handle remainder +[Hera] [HADES][TEST ] [KRELTSC: 2602730025] Running M/MOD.double_dividend: 5001 0 10 M/MOD . . CR +[Hera] 1844674407370955161 6 +[Hera] [HADES][TEST ] [KRELTSC: 2604481215] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2606172408] Expected: Should print: 1 500 (5001/10) +[Hera] [HADES][TEST ] [KRELTSC: 2607317811] Running M/MOD.by_one: 0 42 1 M/MOD . . CR +[Hera] 42 0 +[Hera] [HADES][TEST ] [KRELTSC: 2608851525] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2610608847] Expected: Should print: 0 42 +[Hera] [HADES][TEST ] [KRELTSC: 2611654437] Running M/MOD.negative_dividend: -1 1000 100 M/MOD . . CR +[Hera] -184467440737095506 -16 +[Hera] [HADES][TEST ] [KRELTSC: 2613627009] Test passed +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2615297286] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 2616336744] Running M/MOD.div_by_zero: 0 100 0 M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2617488027] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2619334074] Expected: Should cause division by zero +[Hera] [HADES][TEST ] [KRELTSC: 2620493715] Running M/MOD.empty_stack: M/MOD +[Hera] [HADES][TEST ] [KRELTSC: 2621650206] Expected error occurred +[Hera] [HADES][TEST ] Testing M/MOD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2623520865] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2624663475] M/MOD: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2625890484] === Mixed Arithmetic Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 2627268861] +[Hera] === Testing Module: Double Words === +[Hera] [HADES][INFO ] [KRELTSC: 2628653769] Running Double Number Words Tests (Module 6)... +[Hera] [HADES][TEST ] [KRELTSC: 2629850328] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2631186663] Testing word: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2632102515] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2633043861] Running 2DROP.basic: 1 2 3 4 2DROP . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 2634622893] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2636290041] Expected: Should print: 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 2637298566] Running 2DROP.zeros: 0 0 42 99 2DROP . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2638945680] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2640673917] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2641692144] Running 2DROP.negative: -1 -2 100 200 2DROP . . CR +[Hera] -2 -1 +[Hera] [HADES][INFO ] [KRELTSC: 2643347028] L8[TABLE]: Config 35 → 36 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 2644750395] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2646389802] Expected: Should print: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 2647433481] Running 2DROP.exact_four: 10 20 30 40 2DROP DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 2649031203] Test passed +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2650717125] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 2651806101] Running 2DROP.empty_stack: 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2652872187] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2654675562] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2655826845] Running 2DROP.one_item: 42 2DROP +[Hera] [HADES][TEST ] [KRELTSC: 2656854774] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DROP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2658644541] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2659741728] 2DROP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2660890386] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2662325316] Testing word: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2663195283] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2664199062] Running 2DUP.basic: 100 200 2DUP . . . . CR +[Hera] 200 100 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2665990887] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2667639576] Expected: Should print: 100 200 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2668818327] Running 2DUP.zeros: 0 0 2DUP . . . . CR +[Hera] 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2670350361] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2672016228] Expected: Should print: 0 0 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2673131118] Running 2DUP.negative: -100 -200 2DUP . . . . CR +[Hera] -200 -100 -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2674965447] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2676760674] Expected: Should duplicate negatives +[Hera] [HADES][TEST ] [KRELTSC: 2677939425] Running 2DUP.depth_check: 10 20 2DUP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2679595107] Test passed +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2681351652] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 2682357888] Running 2DUP.empty_stack: 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2683418808] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2685174114] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2686273569] Running 2DUP.one_item: 42 2DUP +[Hera] [HADES][TEST ] [KRELTSC: 2687335497] Expected error occurred +[Hera] [HADES][TEST ] Testing 2DUP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2689250298] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2690370333] 2DUP: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2691503325] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2692773384] Testing word: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2693678484] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2694619179] Running 2OVER.basic: 10 20 30 40 2OVER . . . . . . CR +[Hera] 20 10 40 30 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 2696550507] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2698299324] Expected: Should print: 10 20 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2699552604] Running 2OVER.zeros: 0 0 99 88 2OVER . . . . . . CR +[Hera] 0 0 88 99 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2701400709] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2703226890] Expected: Should print: 0 0 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2704404990] Running 2OVER.mixed: -1 2 -3 4 2OVER . . . . . . CR +[Hera] 2 -1 4 -3 2 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2706170586] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2707942482] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2709036582] Running 2OVER.depth_check: 1 2 3 4 2OVER DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2710638546] Test passed +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2712346392] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 2713323375] Running 2OVER.three_items: 1 2 3 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2714553597] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2716330386] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2717496138] Running 2OVER.empty_stack: 2OVER +[Hera] [HADES][TEST ] [KRELTSC: 2718616320] Expected error occurred +[Hera] [HADES][TEST ] Testing 2OVER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2720429187] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2721527214] 2OVER: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2722724025] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2724061641] Testing word: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2724988014] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2725916907] Running 2SWAP.basic: 10 20 30 40 2SWAP . . . . CR +[Hera] 20 10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2727978603] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2729701569] Expected: Should print: 30 40 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2730846258] Running 2SWAP.zeros: 0 0 99 88 2SWAP . . . . CR +[Hera] 0 0 88 99 +[Hera] [HADES][TEST ] [KRELTSC: 2732488017] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2734188639] Expected: Should print: 99 88 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2735286162] Running 2SWAP.same_pairs: 42 42 42 42 2SWAP . . . . CR +[Hera] 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 2736987771] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2738712249] Expected: Should print: 42 42 42 42 +[Hera] [HADES][TEST ] [KRELTSC: 2739872184] Running 2SWAP.negative: -10 -20 30 40 2SWAP . . . . CR +[Hera] -20 -10 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2741669427] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2743441869] Expected: Should print: 30 40 -10 -20 +[Hera] [HADES][TEST ] [KRELTSC: 2744579439] Running 2SWAP.depth_check: 1 2 3 4 2SWAP DEPTH . CR +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 2746214856] Test passed +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2747929590] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 2748999792] Running 2SWAP.three_items: 1 2 3 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2750288016] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2752201809] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2753369451] Running 2SWAP.empty_stack: 2SWAP +[Hera] [HADES][TEST ] [KRELTSC: 2754464286] Expected error occurred +[Hera] [HADES][TEST ] Testing 2SWAP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2756365626] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2757510672] 2SWAP: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2758738395] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2760085062] Testing word: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2760997386] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2761981551] Running 2ROT.basic: 10 20 30 40 50 60 2ROT . . . . . . CR +[Hera] 20 10 60 50 40 30 +[Hera] [HADES][TEST ] [KRELTSC: 2764174140] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2765953407] Expected: Should print: 30 40 50 60 10 20 +[Hera] [HADES][TEST ] [KRELTSC: 2767116387] Running 2ROT.zeros: 0 0 1 1 2 2 2ROT . . . . . . CR +[Hera] 0 0 2 2 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 2768842440] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2770466139] Expected: Should rotate with zeros +[Hera] [HADES][TEST ] [KRELTSC: 2771587392] Running 2ROT.negative: -1 -2 3 4 -5 -6 2ROT . . . . . . CR +[Hera] -2 -1 -6 -5 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 2773468425] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2775126627] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2776172889] Running 2ROT.depth_check: 1 2 3 4 5 6 2ROT DEPTH . CR +[Hera] 6 +[Hera] [HADES][TEST ] [KRELTSC: 2777866098] Test passed +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2779619556] Expected: Should print: 6 +[Hera] [HADES][TEST ] [KRELTSC: 2780632974] Running 2ROT.five_items: 1 2 3 4 5 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2781817752] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2783590677] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2784684000] Running 2ROT.empty_stack: 2ROT +[Hera] [HADES][TEST ] [KRELTSC: 2785703403] Expected error occurred +[Hera] [HADES][TEST ] Testing 2ROT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2787547686] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2788641849] 2ROT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2789831541] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2791137405] Testing word: D+ +[Hera] [HADES][TEST ] [KRELTSC: 2792052648] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2793119343] Running D+.basic: 100 200 300 400 D+ . . CR +[Hera] 600 400 +[Hera] [HADES][TEST ] [KRELTSC: 2794808499] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2796453177] Expected: Should print: 400 600 +[Hera] [HADES][TEST ] [KRELTSC: 2797566366] Running D+.zero_add: 42 99 0 0 D+ . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2799129459] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2800765485] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2801767563] Running D+.negative: -100 -200 50 75 D+ . . CR +[Hera] -125 -50 +[Hera] [HADES][TEST ] [KRELTSC: 2804054001] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2805748092] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2806832742] Running D+.carry: 2147483647 0 1 0 D+ . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2808503586] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2810173905] Expected: Should handle carry +[Hera] [HADES][TEST ] [KRELTSC: 2811275481] Running D+.both_negative: -100 -200 -300 -400 D+ . . CR +[Hera] -599 -400 +[Hera] [HADES][TEST ] [KRELTSC: 2813033286] Test passed +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2814758604] Expected: Should add negatives +[Hera] [HADES][TEST ] [KRELTSC: 2815856127] Running D+.three_items: 1 2 3 D+ +[Hera] [HADES][TEST ] [KRELTSC: 2817042543] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2818794489] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2819907363] Running D+.empty_stack: D+ +[Hera] [HADES][TEST ] [KRELTSC: 2820873804] Expected error occurred +[Hera] [HADES][TEST ] Testing D+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2822691501] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2823865485] D+: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2824977687] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2826321561] Testing word: D- +[Hera] [HADES][TEST ] [KRELTSC: 2827226913] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2828211246] Running D-.basic: 500 600 100 200 D- . . CR +[Hera] 400 [HADES][INFO ] [KRELTSC: 2829911826] L8[TABLE]: Config 36 → 37 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] 400 +[Hera] [HADES][TEST ] [KRELTSC: 2831373048] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2833011216] Expected: Should print: 400 400 +[Hera] [HADES][TEST ] [KRELTSC: 2834140680] Running D-.zero_sub: 42 99 0 0 D- . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2835797832] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2837428482] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2838487113] Running D-.from_zero: 0 0 100 200 D- . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2840130972] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2841791988] Expected: Should print: -100 -200 +[Hera] [HADES][TEST ] [KRELTSC: 2842934283] Running D-.negative: 100 200 -50 -75 D- . . CR +[Hera] 274 150 +[Hera] [HADES][TEST ] [KRELTSC: 2844591561] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2846205705] Expected: Should handle negatives +[Hera] [HADES][TEST ] [KRELTSC: 2847312510] Running D-.borrow: 0 0 1 0 D- . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 2848824174] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2850521163] Expected: Should handle borrow +[Hera] [HADES][TEST ] [KRELTSC: 2851639056] Running D-.same_values: 100 200 100 200 D- . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2853283755] Test passed +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2855080557] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2856207585] Running D-.three_items: 1 2 3 D- +[Hera] [HADES][TEST ] [KRELTSC: 2857418634] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2859190110] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2860294773] Running D-.empty_stack: D- +[Hera] [HADES][TEST ] [KRELTSC: 2861306952] Expected error occurred +[Hera] [HADES][TEST ] Testing D- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2863069062] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2864192688] D-: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2865513504] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2866840914] Testing word: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2867809140] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2868823944] Running DNEGATE.positive: 100 200 DNEGATE . . CR +[Hera] -201 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2870669361] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2872485672] Expected: Should negate positive double +[Hera] [HADES][TEST ] [KRELTSC: 2873664129] Running DNEGATE.negative: -100 -200 DNEGATE . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 2875412568] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2877274449] Expected: Should negate negative double +[Hera] [HADES][TEST ] [KRELTSC: 2878678929] Running DNEGATE.zero: 0 0 DNEGATE . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2880283245] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2882038572] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2883125028] Running DNEGATE.max_positive: 2147483647 0 DNEGATE . . CR +[Hera] -1 -2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 2884937853] Test passed +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2886704079] Expected: Should negate max positive +[Hera] [HADES][TEST ] [KRELTSC: 2887801308] Running DNEGATE.one_item: 42 DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2889026532] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2891557410] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2893020417] Running DNEGATE.empty_stack: DNEGATE +[Hera] [HADES][TEST ] [KRELTSC: 2894626518] Expected error occurred +[Hera] [HADES][TEST ] Testing DNEGATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2897578362] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2899219974] DNEGATE: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2900788590] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2902260375] Testing word: DABS +[Hera] [HADES][TEST ] [KRELTSC: 2903397861] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2904326187] Running DABS.positive: 100 200 DABS . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2906091321] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2907898602] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2909307639] Running DABS.negative: -100 -200 DABS . . CR +[Hera] 199 100 +[Hera] [HADES][TEST ] [KRELTSC: 2910934866] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2912666925] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2913725535] Running DABS.zero: 0 0 DABS . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2915145933] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2916926334] Expected: Should print: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 2917970370] Running DABS.mixed_sign: 100 -1 DABS . . CR +[Hera] 0 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2919567798] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2921276484] Expected: Should handle mixed sign +[Hera] [HADES][TEST ] [KRELTSC: 2922355674] Running DABS.min_double: -2147483648 -1 DABS . . CR +[Hera] 0 2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 2924033007] Test passed +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2925848919] Expected: Should handle min double +[Hera] [HADES][TEST ] [KRELTSC: 2926945161] Running DABS.one_item: 42 DABS +[Hera] [HADES][TEST ] [KRELTSC: 2928134601] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2929945788] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2931128403] Running DABS.empty_stack: DABS +[Hera] [HADES][TEST ] [KRELTSC: 2932189260] Expected error occurred +[Hera] [HADES][TEST ] Testing DABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2933998956] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2935110045] DABS: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2936252634] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2937631578] Testing word: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2938523259] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2939447343] Running DMIN.basic: 100 200 300 400 DMIN . . CR +[Hera] 200 100 +[Hera] [HADES][TEST ] [KRELTSC: 2941400049] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2943123687] Expected: Should print: 100 200 +[Hera] [HADES][TEST ] [KRELTSC: 2944166757] Running DMIN.equal: 42 99 42 99 DMIN . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2945753454] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2947436709] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2948439228] Running DMIN.negative: -100 -200 -50 -75 DMIN . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2950093524] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2951742066] Expected: Should find min negative +[Hera] [HADES][TEST ] [KRELTSC: 2952821361] Running DMIN.mixed: -100 -1 100 0 DMIN . . CR +[Hera] -1 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2954459550] Test passed +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2956129659] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2957226090] Running DMIN.three_items: 1 2 3 DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2958314709] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2960064534] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2961155736] Running DMIN.empty_stack: DMIN +[Hera] [HADES][TEST ] [KRELTSC: 2962290555] Expected error occurred +[Hera] [HADES][TEST ] Testing DMIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2964111024] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2965230975] DMIN: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2966414115] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2967719517] Testing word: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2968594671] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2969499498] Running DMAX.basic: 100 200 300 400 DMAX . . CR +[Hera] 400 300 +[Hera] [HADES][TEST ] [KRELTSC: 2971209843] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2972953578] Expected: Should print: 300 400 +[Hera] [HADES][TEST ] [KRELTSC: 2974022289] Running DMAX.equal: 42 99 42 99 DMAX . . CR +[Hera] 99 42 +[Hera] [HADES][TEST ] [KRELTSC: 2975624463] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2977401903] Expected: Should print: 42 99 +[Hera] [HADES][TEST ] [KRELTSC: 2978484621] Running DMAX.negative: -300 -400 -100 -200 DMAX . . CR +[Hera] -200 -100 +[Hera] [HADES][TEST ] [KRELTSC: 2980267248] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2981901867] Expected: Should find max negative +[Hera] [HADES][TEST ] [KRELTSC: 2982979545] Running DMAX.mixed: -100 -1 100 0 DMAX . . CR +[Hera] 0 100 +[Hera] [HADES][TEST ] [KRELTSC: 2984552382] Test passed +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2986207476] Expected: Should handle mixed signs +[Hera] [HADES][TEST ] [KRELTSC: 2987293029] Running DMAX.three_items: 1 2 3 DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2988411930] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2990169609] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2991321354] Running DMAX.empty_stack: DMAX +[Hera] [HADES][TEST ] [KRELTSC: 2992334982] Expected error occurred +[Hera] [HADES][TEST ] Testing DMAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 2994138168] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 2995351128] DMAX: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 2996508543] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 2997834945] Testing word: D= +[Hera] [HADES][TEST ] [KRELTSC: 2998746702] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 2999738070] Running D=.equal: 100 200 100 200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3001342071] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3002954661] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3004085070] Running D=.not_equal_low: 100 200 101 200 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3005757930] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3007462878] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3008461050] Running D=.not_equal_high: 100 200 100 201 D= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3010012824] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3011711640] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3012773211] Running D=.zero_equal: 0 0 0 0 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3014278008] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3016027056] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3017085981] Running D=.negative_equal: -100 -200 -100 -200 D= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3018673308] Test passed +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3020291673] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3021270588] Running D=.three_items: 1 2 3 D= +[Hera] [HADES][TEST ] [KRELTSC: 3022365444] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3024115458] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3025237929] Running D=.empty_stack: D= +[Hera] [HADES][TEST ] [KRELTSC: 3026221905] Expected error occurred +[Hera] [HADES][TEST ] Testing D= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3028064655] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3029316066] D=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3030498093] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3031806582] Testing word: D< +[Hera] [HADES][TEST ] [KRELTSC: 3032763111] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3033748746] Running D<.less_than: 100 200 300 400 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3035401215] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3037063008] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3038102235] Running D<.greater_than: 300 400 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3039652770] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3041382015] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3042404988] Running D<.equal: 100 200 100 200 D< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3043967766] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3045647052] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3046737288] Running D<.negative_positive: -100 -1 100 0 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3048369345] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3049977084] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3050958120] Running D<.negative_negative: -300 -1 -100 -1 D< . CR +[Hera] -1 +[Hera] [HADES][INFO ] [KRELTSC: 3052595574] L8[TABLE]: Config 37 → 38 regime=2 score=26214 L1=0 L2=1 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 3054023301] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3055661238] Expected: Should compare negatives +[Hera] [HADES][TEST ] [KRELTSC: 3056724447] Running D<.high_word_diff: 100 200 100 300 D< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3058336743] Test passed +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3059988666] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3060968379] Running D<.three_items: 1 2 3 D< +[Hera] [HADES][TEST ] [KRELTSC: 3062049732] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3063818331] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3064954326] Running D<.empty_stack: D< +[Hera] [HADES][TEST ] [KRELTSC: 3065930763] Expected error occurred +[Hera] [HADES][TEST ] Testing D< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3067753794] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3068897601] D<: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3070024776] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3071359914] Testing word: D0= +[Hera] [HADES][TEST ] [KRELTSC: 3072213375] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3073156548] Running D0=.zero: 0 0 D0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3074601201] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3076228806] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3077229078] Running D0=.positive: 100 200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3078649980] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3080355999] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3081356103] Running D0=.negative: -100 -200 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3082792083] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3084462108] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3085451397] Running D0=.zero_high: 0 100 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3086866965] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3088537746] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3089661960] Running D0=.zero_low: 100 0 D0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3091100271] Test passed +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3092829474] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3093802131] Running D0=.one_item: 42 D0= +[Hera] [HADES][TEST ] [KRELTSC: 3094867335] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3096666258] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3097771530] Running D0=.empty_stack: D0= +[Hera] [HADES][TEST ] [KRELTSC: 3098758383] Expected error occurred +[Hera] [HADES][TEST ] Testing D0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3100632507] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3101812098] D0=: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3103005087] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3104464587] Testing word: D0< +[Hera] [HADES][TEST ] [KRELTSC: 3105425190] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3106398960] Running D0<.negative: -100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3107959365] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3109656732] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3110706060] Running D0<.zero: 0 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3112053987] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3113722269] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3114698622] Running D0<.positive: 100 0 D0< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3116090985] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3117797109] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3118784823] Running D0<.negative_high_only: 100 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3120293211] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3121981884] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3122980497] Running D0<.large_negative: -1 -1 D0< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3124448607] Test passed +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3126113382] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 3127090260] Running D0<.one_item: 42 D0< +[Hera] [HADES][TEST ] [KRELTSC: 3128258910] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3130378146] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3131542701] Running D0<.empty_stack: D0< +[Hera] [HADES][TEST ] [KRELTSC: 3132536967] Expected error occurred +[Hera] [HADES][TEST ] Testing D0< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3134323038] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3135495846] D0<: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3136598808] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3137888208] Testing word: S>D +[Hera] [HADES][TEST ] [KRELTSC: 3138786588] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3139713990] Running S>D.positive: 5 S>D . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3141218640] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3143134701] Expected: Should sign-extend positive: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3144410808] Running S>D.negative: -5 S>D . . CR +[Hera] -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 3146006136] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3147660894] Expected: Should sign-extend negative: -1 -5 +[Hera] [HADES][TEST ] [KRELTSC: 3148896282] Running S>D.zero: 0 S>D . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3150412209] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3152179737] Expected: Should sign-extend zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3153439338] Running S>D.max_int: 2147483647 S>D . . CR +[Hera] 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3155148255] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3156865740] Expected: Should extend max int: 0 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3158049405] Running S>D.min_int: -2147483648 S>D . . CR +[Hera] -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3159675960] Test passed +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3161315430] Expected: Should extend min int: -1 -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3162536664] Running S>D.empty_stack: S>D +[Hera] [HADES][TEST ] [KRELTSC: 3163610856] Expected error occurred +[Hera] [HADES][TEST ] Testing S>D ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3165427293] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3166525026] S>D: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3167721438] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3169049331] Testing word: D2* +[Hera] [HADES][TEST ] [KRELTSC: 3169929840] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3170844621] Running D2*.basic: 5 0 D2* . . CR +[Hera] 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 3172385601] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3174168795] Expected: Should double 5: 0 10 +[Hera] [HADES][TEST ] [KRELTSC: 3175236750] Running D2*.zero: 0 0 D2* . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3176662104] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3178338660] Expected: Should double zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3179466150] Running D2*.negative: -1 -1 D2* . . CR +[Hera] -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 3180988797] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3182674257] Expected: Should double -1: -1 -2 +[Hera] [HADES][TEST ] [KRELTSC: 3183736878] Running D2*.carry: 0 1 D2* . . CR +[Hera] 2 0 +[Hera] [HADES][TEST ] [KRELTSC: 3185097342] Test passed +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3186815142] Expected: Should shift high cell: 0 2 +[Hera] [HADES][TEST ] [KRELTSC: 3187892442] Running D2*.empty_stack: D2* +[Hera] [HADES][TEST ] [KRELTSC: 3188925369] Expected error occurred +[Hera] [HADES][TEST ] Testing D2* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3190765242] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3191925765] D2*: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3193074675] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3194426130] Testing word: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 3195358908] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3196325601] Running D2/.basic: 10 0 D2/ . . CR +[Hera] 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3197826471] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3199521486] Expected: Should halve 10: 0 5 +[Hera] [HADES][TEST ] [KRELTSC: 3200579403] Running D2/.negative: -2 -1 D2/ . . CR +[Hera] -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3202054296] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3203703132] Expected: Should halve -2: -1 -1 +[Hera] [HADES][TEST ] [KRELTSC: 3204829761] Running D2/.zero: 0 0 D2/ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3206231133] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3207923061] Expected: Should halve zero: 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 3208957605] Running D2/.odd: 3 0 D2/ . . CR +[Hera] 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 3210336843] Test passed +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3212041182] Expected: Should truncate toward zero: 0 1 +[Hera] [HADES][TEST ] [KRELTSC: 3213235746] Running D2/.empty_stack: D2/ +[Hera] [HADES][TEST ] [KRELTSC: 3214310106] Expected error occurred +[Hera] [HADES][TEST ] Testing D2/ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3216222660] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3217397148] D2/: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3218511345] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3219834576] Testing word: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 3220689654] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3221642088] Running 2>R.roundtrip: 10 20 2>R 2R> . . CR +[Hera] 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 3223385445] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3225047637] Expected: Should store and retrieve: 20 10 +[Hera] [HADES][TEST ] [KRELTSC: 3226264398] Running 2>R.depth_after: 1 2 2>R DEPTH . 2R> DROP DROP CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3227915523] Test passed +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3229612365] Expected: Should empty data stack: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3230700648] Running 2>R.empty_stack: 2>R +[Hera] [HADES][TEST ] [KRELTSC: 3231721143] Expected error occurred +[Hera] [HADES][TEST ] Testing 2>R ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3233654298] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3234809298] 2>R: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3235938552] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3237243387] Testing word: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 3238137147] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3239073684] Running 2R>.roundtrip: 5 6 2>R 2R> . . CR +[Hera] 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 3240600678] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3242354367] Expected: Should retrieve double: 6 5 +[Hera] [HADES][TEST ] [KRELTSC: 3243423561] Running 2R>.depth: 9 8 2>R 2R> DEPTH . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3244928757] Test passed +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3246566631] Expected: Should push 2 items to data stack: 2 +[Hera] [HADES][TEST ] [KRELTSC: 3247784127] Running 2R>.empty_rstack: 2R> +[Hera] [HADES][TEST ] [KRELTSC: 3248906451] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3250681140] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3251834712] 2R>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3252981984] ▶ Testing module: v3/src/test_runner/modules/double_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3254269704] Testing word: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 3255218925] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3256164156] Running 2R@.peek: 3 4 2>R 2R@ . . 2R> DROP DROP CR +[Hera] 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 3257880549] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3259635750] Expected: Should peek: 4 3 +[Hera] [HADES][TEST ] [KRELTSC: 3260645178] Running 2R@.non_destructive: 7 8 2>R 2R@ DROP DROP 2R> . . CR +[Hera] 8 7 +[Hera] [HADES][TEST ] [KRELTSC: 3262339143] Test passed +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3263998164] Expected: Should leave rstack intact +[Hera] [HADES][TEST ] [KRELTSC: 3265083318] Running 2R@.empty_rstack: 2R@ +[Hera] [HADES][TEST ] [KRELTSC: 3266126724] Expected error occurred +[Hera] [HADES][TEST ] Testing 2R@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3267963069] Expected: Should cause return stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3269165109] 2R@: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3270337329] === Double Number Words Summary: 0 passed, 0 failed, 0 skipped, +[Hera] [HADES][INFO ] [KRELTSC: 3271641156] +[Hera] === Testing Module: Format Words === +[Hera] [HADES][INFO ] [KRELTSC: 3273000297] Running Format Words Tests (Module 10)... +[Hera] [HADES][TEST ] [KRELTSC: 3274163949] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3275468049] Testing word: BASE +[Hera] [HADES][TEST ] [KRELTSC: 3276366660] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3277287237] Running BASE.decimal: DECIMAL 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3278818956] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3280583187] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3281575416] Running BASE.hex: HEX FF . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 3283000035] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3284701980] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3285731862] Running BASE.octal: OCTAL 52 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3287158749] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3288814683] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3289860462] Running BASE.base_store: 16 BASE ! 255 . CR +[Hera] 723 +[Hera] [HADES][TEST ] [KRELTSC: 3291388170] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3293143224] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3294173694] Running BASE.base_fetch: BASE @ . CR +[Hera] 16 +[Hera] [HADES][TEST ] [KRELTSC: 3295623135] Test passed +[Hera] [HADES][TEST ] Testing BASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3297263760] Expected: Should print current base +[Hera] [HADES][TEST ] [KRELTSC: 3298337007] BASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3299521638] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3300971436] Testing word: DECIMAL +[Hera] [HADES][TEST ] [KRELTSC: 3301899468] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3302835921] Running DECIMAL.from_hex: HEX FF DECIMAL . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3304379337] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3306152934] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 3307182438] Running DECIMAL.from_octal: OCTAL 52 DECIMAL . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3308718357] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3310427736] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3311465010] Running DECIMAL.state_persist: DECIMAL 42 . CR 42 . CR HEX 42 +[Hera] 42 +[Hera] 42 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3313862874] Test passed +[Hera] [HADES][TEST ] Testing DECIMAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3315527187] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3316540500] DECIMAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3317768454] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3319062411] Testing word: HEX +[Hera] [HADES][TEST ] [KRELTSC: 3319928220] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3320861565] Running HEX.from_decimal: DECIMAL 255 HEX . CR +[Hera] FF +[Hera] [HADES][TEST ] [KRELTSC: 3322416090] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3324056568] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 3325042581] Running HEX.from_octal: OCTAL 52 HEX . CR +[Hera] 2A +[Hera] [HADES][TEST ] [KRELTSC: 3326500296] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3328125234] Expected: Should print: 2A +[Hera] [HADES][TEST ] [KRELTSC: 3329090373] Running HEX.state_persist: HEX FF . CR DECIMAL 255 . CR +[Hera] FF +[Hera] [HADES][INFO ] [KRELTSC: 3330831798] L8[TABLE]: Config 38 → 39 regime=2 score=52428 L1=0 L2=1 L3=0 +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 3332589750] Test passed +[Hera] [HADES][TEST ] Testing HEX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3334324350] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3335367903] HEX: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3336600078] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3337917366] Testing word: OCTAL +[Hera] [HADES][TEST ] [KRELTSC: 3338836704] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3339791952] Running OCTAL.from_decimal: DECIMAL 42 OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3341352420] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3343326483] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3344411889] Running OCTAL.from_hex: HEX 2A OCTAL . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3346021413] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3347808219] Expected: Should print: 52 +[Hera] [HADES][TEST ] [KRELTSC: 3348837618] Running OCTAL.state_persist: DECIMAL 42 . CR OCTAL 52 . CR +[Hera] 42 +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 3350892636] Test passed +[Hera] [HADES][TEST ] Testing OCTAL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3352710900] Expected: Should maintain base +[Hera] [HADES][TEST ] [KRELTSC: 3353874888] OCTAL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3355146501] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3356613225] Testing word: <# +[Hera] [HADES][TEST ] [KRELTSC: 3357525150] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3358442976] Running <#.basic: DECIMAL 42 S>D <# #S #> TYPE CR +[Hera] 774763251095801167872 +[Hera] [HADES][TEST ] [KRELTSC: 3361317435] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3363204306] Expected: Should format number +[Hera] [HADES][TEST ] [KRELTSC: 3364276503] Running <#.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3365454981] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3367117173] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3368258964] Running <#.negative: -42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3369821427] Test passed +[Hera] [HADES][TEST ] Testing <# ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3371475114] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3372540024] <#: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3373699602] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3375022602] Testing word: # +[Hera] [HADES][TEST ] [KRELTSC: 3375901494] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3376892967] Running #.single_digit: 15 <# # #> TYPE CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3378422292] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3380073900] Expected: Should print rightmost digit +[Hera] [HADES][TEST ] [KRELTSC: 3381256767] Running #.multiple: 15 <# # # #> TYPE CR +[Hera] 15 +[Hera] [HADES][TEST ] [KRELTSC: 3382743630] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3384443748] Expected: Should print digits right to left +[Hera] [HADES][TEST ] [KRELTSC: 3385790520] Running #.zero_pad: 5 <# # 0 # #> TYPE CR +[Hera] 05 +[Hera] [HADES][TEST ] [KRELTSC: 3387351975] Test passed +[Hera] [HADES][TEST ] Testing # ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3388985985] Expected: Should handle zero padding +[Hera] [HADES][TEST ] [KRELTSC: 3390088947] #: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3391260705] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3392539311] Testing word: #S +[Hera] [HADES][TEST ] [KRELTSC: 3393465684] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3394477926] Running #S.basic: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3395931273] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3397555770] Expected: Should convert all digits +[Hera] [HADES][TEST ] [KRELTSC: 3398625972] Running #S.zero: 0 <# #S #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3400043850] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3401797203] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3402833532] Running #S.large: 1234567890 <# #S #> TYPE CR +[Hera] 1234567890 +[Hera] [HADES][TEST ] [KRELTSC: 3404420439] Test passed +[Hera] [HADES][TEST ] Testing #S ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3406137945] Expected: Should handle large numbers +[Hera] [HADES][TEST ] [KRELTSC: 3407231121] #S: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3408368880] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3409645407] Testing word: SIGN +[Hera] [HADES][TEST ] [KRELTSC: 3410519742] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3411442902] Running SIGN.negative: -42 ABS <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3413132499] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3414826695] Expected: Should add minus +[Hera] [HADES][TEST ] [KRELTSC: 3415878627] Running SIGN.positive: 42 <# #S SIGN #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3417482502] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3419199294] Expected: Should not add sign +[Hera] [HADES][TEST ] [KRELTSC: 3420221574] Running SIGN.zero: 0 <# #S SIGN #> TYPE CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3421712301] Test passed +[Hera] [HADES][TEST ] Testing SIGN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3423429408] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 3424509921] SIGN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3425623593] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3426915408] Testing word: #> +[Hera] [HADES][TEST ] [KRELTSC: 3427853604] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3428835774] Running #>.normal: 42 <# #S #> TYPE CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3430276479] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3431969079] Expected: Should terminate formatting +[Hera] [HADES][TEST ] [KRELTSC: 3433091718] Running #>.empty: 0 <# #> TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3434164188] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3435809223] Expected: Should handle empty format +[Hera] [HADES][TEST ] [KRELTSC: 3436949586] Running #>.stack_effect: 42 <# #S #> SWAP . . CR +[Hera] 24 2 +[Hera] [HADES][TEST ] [KRELTSC: 3438553503] Test passed +[Hera] [HADES][TEST ] Testing #> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3440207421] Expected: Should leave addr u +[Hera] [HADES][TEST ] [KRELTSC: 3441233691] #>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3442368069] ▶ Testing module: v3/src/test_runner/modules/format_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3443818140] Testing word: HOLD +[Hera] [HADES][TEST ] [KRELTSC: 3444763182] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3445732773] Running HOLD.basic: 42 <# 46 HOLD #S #> TYPE CR +[Hera] 42. +[Hera] [HADES][TEST ] [KRELTSC: 3447391668] Test passed +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3449084268] Expected: Should insert dot +[Hera] [HADES][TEST ] [KRELTSC: 3450078555] Running HOLD.overflow: <# 257 HOLD #> +[Hera] [HADES][ERROR] [KRELTSC: 3451223580] HOLD: byte out of range (257) +[Hera] [HADES][TEST ] [KRELTSC: 3452401701] Expected error occurred +[Hera] [HADES][TEST ] Testing HOLD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3454181829] Expected: Should handle overflow +[Hera] [HADES][TEST ] [KRELTSC: 3455238780] HOLD: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3456504009] === Format Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 3457799457] +[Hera] === Testing Module: String Words === +[Hera] [HADES][INFO ] [KRELTSC: 3459169959] Running String Words Tests (Module 11)... +[Hera] [HADES][TEST ] [KRELTSC: 3460333086] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3461640336] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 3462533109] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3463446378] Running COUNT.basic: HERE S" Test" DROP COUNT . . CR +[Hera] 84 121 +[Hera] [HADES][TEST ] [KRELTSC: 3465610491] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3467315607] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 3468426507] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 3470122089] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3471896610] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3473017149] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 3474719829] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3476416314] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 3477516336] Running COUNT.string_bounds: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3479170821] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3480815835] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 3481942632] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 3483059874] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3484079382] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3485838846] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3486962241] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3488143953] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3489455823] Testing word: -TRAILING +[Hera] [HADES][TEST ] [KRELTSC: 3490373817] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3491311698] Running -TRAILING.basic: HERE S" Test " -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3493193067] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3495015468] Expected: Should trim spaces +[Hera] [HADES][TEST ] [KRELTSC: 3496069353] Running -TRAILING.all_spaces: HERE S" " -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3497436495] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3499177563] Expected: Should handle all spaces +[Hera] [HADES][TEST ] [KRELTSC: 3500247765] Running -TRAILING.no_spaces: HERE S" Test" -TRAILING TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3501931503] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3503627526] Expected: Should handle no spaces +[Hera] [HADES][TEST ] [KRELTSC: 3504692751] Running -TRAILING.empty: HERE 0 -TRAILING TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3505953654] Test passed +[Hera] [HADES][TEST ] Testing -TRAILING ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3507731010] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3508825446] -TRAILING: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3510023160] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3511293051] Testing word: CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3512205816] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3513284061] Running CMOVE.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMOV + +[Hera] [HADES][TEST ] [KRELTSC: 3514984347] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3516623187] Expected: Should copy string +[Hera] [HADES][TEST ] [KRELTSC: 3517648491] Running CMOVE.empty: HERE HERE 10 + 0 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3518844651] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3520602834] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3521749182] Running CMOVE.overlap: HERE DUP 1+ 5 CMOVE +[Hera] [HADES][TEST ] [KRELTSC: 3523025163] Test passed +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3524797416] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 3525857391] Running CMOVE.bounds: HERE PAD 1000 CMOVE +[Hera] [HADES][ERROR] [KRELTSC: 3527067453] CMOVE: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 3528274386] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3530068227] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 3531143889] CMOVE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3532451433] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3533865090] Testing word: CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3534805659] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3535802382] Running CMOVE>.basic: HERE S" Test" DUP >R HERE 10 + SWAP CMO + +[Hera] [HADES][TEST ] [KRELTSC: 3537414615] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3539081721] Expected: Should copy backward +[Hera] [HADES][TEST ] [KRELTSC: 3540134598] Running CMOVE>.empty: HERE HERE 10 + 0 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3541383783] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3543072960] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3544278591] Running CMOVE>.overlap: HERE DUP 1+ 5 CMOVE> +[Hera] [HADES][TEST ] [KRELTSC: 3545436006] Test passed +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3547128501] Expected: Should handle overlap +[Hera] [HADES][TEST ] [KRELTSC: 3548168064] Running CMOVE>.bounds: HERE PAD 1000 CMOVE> +[Hera] [HADES][ERROR] [KRELTSC: 3549441672] CMOVE>: out-of-bounds (src=125 dst=5242368 n=1000) +[Hera] [HADES][TEST ] [KRELTSC: 3550653162] Expected error occurred +[Hera] [HADES][TEST ] Testing CMOVE> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3552466785] Expected: Should check bounds +[Hera] [HADES][TEST ] [KRELTSC: 3553488771] CMOVE>: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3554655363] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3555970173] Testing word: COMPARE +[Hera] [HADES][TEST ] [KRELTSC: 3557001168] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3557933085] Running COMPARE.equal: HERE S" Test" HERE S" Test" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3559910949] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3561658191] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 3562674885] Running COMPARE.less: HERE S" Test1" HERE S" Test2" COMPARE . +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3564413748] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3566100216] Expected: Should return -1 +[Hera] [HADES][TEST ] [KRELTSC: 3567105990] Running COMPARE.greater: HERE S" Test2" HERE S" Test1" COMPAR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3568838091] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3570668157] Expected: Should return 1 +[Hera] [HADES][TEST ] [KRELTSC: 3571713705] Running COMPARE.different_lengths: HERE S" Test" HERE S" Test +[Hera] [HADES][INFO ] [KRELTSC: 3573106530] L8[TABLE]: Config 39 → 40 regime=2 score=6553 L1=0 L2=1 L3=0 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3574896654] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3576812652] Expected: Should handle lengths +[Hera] [HADES][TEST ] [KRELTSC: 3577891191] Running COMPARE.empty: HERE 0 HERE 0 COMPARE . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3579644565] Test passed +[Hera] [HADES][TEST ] Testing COMPARE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3581348022] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3582519255] COMPARE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3583713735] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3585061305] Testing word: SEARCH +[Hera] [HADES][TEST ] [KRELTSC: 3585987993] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3586932762] Running SEARCH.found: HERE S" Testing" HERE S" Test" SEARCH . +[Hera] -1 15 120 +[Hera] [HADES][TEST ] [KRELTSC: 3589048890] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3590734119] Expected: Should find substring +[Hera] [HADES][TEST ] [KRELTSC: 3591772086] Running SEARCH.not_found: HERE S" Testing" HERE S" Xyz" SEARC +[Hera] -1 7 141 +[Hera] [HADES][TEST ] [KRELTSC: 3593589174] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3595364493] Expected: Should return false +[Hera] [HADES][TEST ] [KRELTSC: 3596409369] Running SEARCH.empty_pattern: HERE S" Test" HERE 0 SEARCH . . +[Hera] -1 4 145 +[Hera] [HADES][TEST ] [KRELTSC: 3598249410] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3599921850] Expected: Should handle empty pattern +[Hera] [HADES][TEST ] [KRELTSC: 3601044132] Running SEARCH.empty_string: HERE 0 HERE S" Test" SEARCH . . +[Hera] -1 30 120 +[Hera] [HADES][TEST ] [KRELTSC: 3602815881] Test passed +[Hera] [HADES][TEST ] Testing SEARCH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3604484688] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3605670138] SEARCH: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3607030812] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3608468955] Testing word: SCAN +[Hera] [HADES][TEST ] [KRELTSC: 3609417189] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3610379913] Running SCAN.basic: HERE S" Test,Data" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3612107100] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3613783929] Expected: Should find space +[Hera] [HADES][TEST ] [KRELTSC: 3614851128] Running SCAN.not_found: HERE S" TestData" BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3616315878] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3618066942] Expected: Should scan to end +[Hera] [HADES][TEST ] [KRELTSC: 3619103796] Running SCAN.empty: HERE 0 BL SCAN TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3620400042] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3622062129] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3623083191] Running SCAN.all_delims: HERE S" " BL SCAN TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3624789105] Test passed +[Hera] [HADES][TEST ] Testing SCAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3626512134] Expected: Should handle all delims +[Hera] [HADES][TEST ] [KRELTSC: 3627640590] SCAN: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3628934421] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3630448437] Testing word: SKIP +[Hera] [HADES][TEST ] [KRELTSC: 3631462527] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3632685105] Running SKIP.basic: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3634715364] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3636633084] Expected: Should skip spaces +[Hera] [HADES][TEST ] [KRELTSC: 3637779054] Running SKIP.no_delims: HERE S" Test" BL SKIP TYPE CR +[Hera] Test +[Hera] [HADES][TEST ] [KRELTSC: 3639535767] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3641359575] Expected: Should not skip +[Hera] [HADES][TEST ] [KRELTSC: 3642442587] Running SKIP.empty: HERE 0 BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3643708866] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3645545652] Expected: Should handle empty +[Hera] [HADES][TEST ] [KRELTSC: 3646612263] Running SKIP.all_delims: HERE S" " BL SKIP TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3647977977] Test passed +[Hera] [HADES][TEST ] Testing SKIP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3649666440] Expected: Should skip all +[Hera] [HADES][TEST ] [KRELTSC: 3650655876] SKIP: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3651808104] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3653197191] Testing word: BLANK +[Hera] [HADES][TEST ] [KRELTSC: 3654110271] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3655030302] Running BLANK.basic: HERE 5 BLANK HERE 5 TYPE CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3657019044] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3659000604] Expected: Should fill with spaces +[Hera] [HADES][TEST ] [KRELTSC: 3660099723] Running BLANK.zero: HERE 0 BLANK HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3661462245] Test passed +[Hera] [HADES][TEST ] Testing BLANK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3663122673] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 3664211544] BLANK: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3665407221] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3666713316] Testing word: S" +[Hera] [HADES][TEST ] [KRELTSC: 3667593783] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3668535297] Running S".interpret_len: S" hello" . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3670226490] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3671962203] Expected: Should print: 5 (length) +[Hera] [HADES][TEST ] [KRELTSC: 3673198893] Running S".interpret_type: S" hello" TYPE CR +[Hera] hello +[Hera] [HADES][TEST ] [KRELTSC: 3674809341] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3676503936] Expected: Should print: hello +[Hera] [HADES][TEST ] [KRELTSC: 3677546166] Running S".empty: S" " . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3678889032] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3680594421] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3681595218] Running S".compile_type: : TSQ S" world" TYPE CR ; TSQ +[Hera] world +[Hera] [HADES][TEST ] [KRELTSC: 3685839654] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3687568710] Expected: Should print: world +[Hera] [HADES][TEST ] [KRELTSC: 3688660248] Running S".compile_len: : TSQ2 S" forth" SWAP DROP . CR ; TSQ +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 3690706110] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3692460912] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 3693549237] Running S".compile_twice: : TSQ3 S" ab" TYPE S" cd" TYPE CR ; +[Hera] abcd +[Hera] [HADES][TEST ] [KRELTSC: 3695901132] Test passed +[Hera] [HADES][TEST ] Testing S" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3697580481] Expected: Should print: abcd +[Hera] [HADES][TEST ] [KRELTSC: 3698624265] S": 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3699815322] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3701244204] Testing word: BL +[Hera] [HADES][TEST ] [KRELTSC: 3702209217] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3703270158] Running BL.value: BL . CR +[Hera] 32 +[Hera] [HADES][TEST ] [KRELTSC: 3704720691] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3706453842] Expected: Should print: 32 +[Hera] [HADES][TEST ] [KRELTSC: 3707658297] Running BL.as_char: BL EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3709150683] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3710829192] Expected: Should emit a space +[Hera] [HADES][TEST ] [KRELTSC: 3711948219] Running BL.in_scan: HERE S" a b" BL SCAN SWAP DROP . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 3713649534] Test passed +[Hera] [HADES][TEST ] Testing BL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3715296753] Expected: Should find space at offset 1 +[Hera] [HADES][TEST ] [KRELTSC: 3716420379] BL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3717521115] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3718881033] Testing word: SOURCE +[Hera] [HADES][TEST ] [KRELTSC: 3719783760] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3720839535] Running SOURCE.returns_pair: SOURCE SWAP DROP 0< NOT . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3722946906] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3724658763] Expected: Should return non-negative length +[Hera] [HADES][TEST ] [KRELTSC: 3725889321] Running SOURCE.has_addr: SOURCE DROP 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 3727428663] Test passed +[Hera] [HADES][TEST ] Testing SOURCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3729123321] Expected: Should return non-null address +[Hera] [HADES][TEST ] [KRELTSC: 3730223049] SOURCE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3731397894] ▶ Testing module: v3/src/test_runner/modules/string_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 3732820686] Testing word: >IN +[Hera] [HADES][TEST ] [KRELTSC: 3733687902] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3734608374] Running >IN.initial: >IN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3736108320] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3737795061] Expected: Should return input offset +[Hera] [HADES][TEST ] [KRELTSC: 3738892458] Running >IN.advances: : TWIN >IN @ >IN @ - . CR ; TWIN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3740738337] Test passed +[Hera] [HADES][TEST ] Testing >IN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3742425414] Expected: Should print: 0 (no advance inside compiled word) +[Hera] [HADES][TEST ] [KRELTSC: 3743857194] >IN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3745070658] === String Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 3746507520] +[Hera] === Testing Module: I/O Words === +[Hera] [HADES][INFO ] [KRELTSC: 3747839655] Running I/O Words Tests (Module 9)... +[Hera] [HADES][TEST ] [KRELTSC: 3748951731] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3750294702] Testing word: . +[Hera] [HADES][TEST ] [KRELTSC: 3751165929] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3752107989] Running ..positive: 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 3753544515] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3755189298] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 3756184152] Running ..negative: -42 . CR +[Hera] -42 +[Hera] [HADES][TEST ] [KRELTSC: 3757520487] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3759277662] Expected: Should print: -42 +[Hera] [HADES][TEST ] [KRELTSC: 3760288140] Running ..zero: 0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3761555196] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3763163103] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3764142228] Running ..max_int: 2147483647 . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3765601770] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3767274042] Expected: Should print: 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 3768466485] Running ..min_int: -2147483648 . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3769938417] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3771743472] Expected: Should print: -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 3772821171] Running ..multiple: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3774296379] Test passed +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3775954581] Expected: Should print: 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3777070017] Running ..empty_stack: . +[Hera] [HADES][TEST ] [KRELTSC: 3778081860] Expected error occurred +[Hera] [HADES][TEST ] Testing . ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3779833680] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3780923160] .: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3782049033] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3783533859] Testing word: CR +[Hera] [HADES][TEST ] [KRELTSC: 3784397379] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3785390826] Running CR.basic: 42 . CR 43 . CR +[Hera] 42 +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 3787832538] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3789695532] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 3790825962] Running CR.multiple: CR CR CR + + + +[Hera] [HADES][TEST ] [KRELTSC: 3791909226] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3793586349] Expected: Should print multiple newlines +[Hera] [HADES][TEST ] [KRELTSC: 3794687043] Running CR.no_stack_effect: DEPTH CR DEPTH = . CR + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3796542456] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3798170922] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 3799219263] Running CR.after_output: 1 2 3 . . . CR +[Hera] 3 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 3800685189] Test passed +[Hera] [HADES][TEST ] Testing CR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3802317603] Expected: Should work after output +[Hera] [HADES][TEST ] [KRELTSC: 3803370228] CR: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3804491754] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3805752237] Testing word: SPACE +[Hera] [HADES][TEST ] [KRELTSC: 3806644569] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3807573777] Running SPACE.basic: 42 . SPACE 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3809308818] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3811207428] Expected: Should add space between numbers +[Hera] [HADES][TEST ] [KRELTSC: 3812463984] Running SPACE.multiple: SPACE SPACE SPACE +[Hera] [HADES][INFO ] [KRELTSC: 3814581477] L8[TABLE]: Config 40 → 0 regime=7 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 3815945154] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3817469481] Expected: Should print multiple spaces +[Hera] [HADES][TEST ] [KRELTSC: 3818674902] Running SPACE.no_stack_effect: DEPTH SPACE DEPTH = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3820421619] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3822324765] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 3823422351] Running SPACE.with_text: 65 EMIT SPACE 66 EMIT CR +[Hera] A B +[Hera] [HADES][TEST ] [KRELTSC: 3825098802] Test passed +[Hera] [HADES][TEST ] Testing SPACE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3826784724] Expected: Should space between chars +[Hera] [HADES][TEST ] [KRELTSC: 3827912298] SPACE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3829132671] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3830471631] Testing word: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3831406131] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3832354575] Running SPACES.zero: 0 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3833610858] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3835337814] Expected: Should print no spaces +[Hera] [HADES][TEST ] [KRELTSC: 3836460810] Running SPACES.one: 1 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3837929025] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3839330460] Expected: Should print one space +[Hera] [HADES][TEST ] [KRELTSC: 3840391758] Running SPACES.multiple: 5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3841914321] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3843316617] Expected: Should print five spaces +[Hera] [HADES][TEST ] [KRELTSC: 3844397844] Running SPACES.large: 20 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3845979039] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3847796778] Expected: Should print twenty spaces +[Hera] [HADES][TEST ] [KRELTSC: 3848891592] Running SPACES.negative: -5 SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3849977649] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3851689044] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3852905406] Running SPACES.with_output: 42 . 3 SPACES 43 . CR +[Hera] 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 3854561361] Test passed +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3856231470] Expected: Should space output +[Hera] [HADES][TEST ] [KRELTSC: 3857330001] Running SPACES.empty_stack: SPACES +[Hera] [HADES][TEST ] [KRELTSC: 3858558081] Expected error occurred +[Hera] [HADES][TEST ] Testing SPACES ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3860436216] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3861573282] SPACES: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3862823349] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3864137655] Testing word: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 3865040382] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3866073960] Running EMIT.letter_A: 65 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3867528966] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3869193804] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 3870176016] Running EMIT.letter_Z: 90 EMIT CR +[Hera] Z +[Hera] [HADES][TEST ] [KRELTSC: 3871601874] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3873238131] Expected: Should print: Z +[Hera] [HADES][TEST ] [KRELTSC: 3874210977] Running EMIT.digit: 48 EMIT CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3875547501] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3877234515] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 3878206269] Running EMIT.space_char: 32 EMIT CR +[Hera] +[Hera] [HADES][TEST ] [KRELTSC: 3879563730] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3881222352] Expected: Should print space +[Hera] [HADES][TEST ] [KRELTSC: 3882247782] Running EMIT.newline: 10 EMIT + +[Hera] [HADES][TEST ] [KRELTSC: 3883276803] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3885032298] Expected: Should print newline +[Hera] [HADES][TEST ] [KRELTSC: 3886059156] Running EMIT.high_ascii: 127 EMIT CR +[Hera]  +[Hera] [HADES][TEST ] [KRELTSC: 3887457777] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3889109994] Expected: Should print DEL char +[Hera] [HADES][TEST ] [KRELTSC: 3890154177] Running EMIT.truncation: 321 EMIT CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3891608385] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3893335026] Expected: Should truncate to low byte +[Hera] [HADES][TEST ] [KRELTSC: 3894437526] Running EMIT.negative: -1 EMIT CR +[Hera] ÿ +[Hera] [HADES][TEST ] [KRELTSC: 3895890894] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3897633348] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 3898723374] Running EMIT.sequence: 72 EMIT 73 EMIT 10 EMIT +[Hera] HI +[Hera] [HADES][TEST ] [KRELTSC: 3900222165] Test passed +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3901865247] Expected: Should print: HI +[Hera] [HADES][TEST ] [KRELTSC: 3902898783] Running EMIT.empty_stack: EMIT +[Hera] [HADES][TEST ] [KRELTSC: 3903991812] Expected error occurred +[Hera] [HADES][TEST ] Testing EMIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3905922279] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3907041222] EMIT: 10 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3908216844] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3909529260] Testing word: KEY +[Hera] [HADES][TEST ] [KRELTSC: 3910381440] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3911361405] KEY: 0 passed, 0 failed, 4 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3912475581] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3913783986] Testing word: ?KEY +[Hera] [HADES][TEST ] [KRELTSC: 3914658447] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3915651453] ?KEY: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3916776675] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3918127794] Testing word: TYPE +[Hera] [HADES][TEST ] [KRELTSC: 3919015191] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3919973988] Running TYPE.basic_string: HERE S" Hello" DUP >R HERE SWAP CM +[Hera] Hello +[Hera] [HADES][TEST ] [KRELTSC: 3921911070] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3923640714] Expected: Should print: Hello +[Hera] [HADES][TEST ] [KRELTSC: 3924688215] Running TYPE.empty_string: HERE 0 TYPE CR + +[Hera] [HADES][TEST ] [KRELTSC: 3925852875] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3927628824] Expected: Should print nothing +[Hera] [HADES][TEST ] [KRELTSC: 3928736994] Running TYPE.single_char: HERE 65 OVER C! 1 TYPE CR +[Hera] A +[Hera] [HADES][TEST ] [KRELTSC: 3930362373] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3932021856] Expected: Should print: A +[Hera] [HADES][TEST ] [KRELTSC: 3933011565] Running TYPE.numbers: HERE S" 12345" DUP >R HERE SWAP CMOVE H +[Hera] 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3934780542] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3936514617] Expected: Should print: 12345 +[Hera] [HADES][TEST ] [KRELTSC: 3937656429] Running TYPE.zero_length: PAD 0 TYPE +[Hera] [HADES][TEST ] [KRELTSC: 3938803995] Test passed +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3940467909] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 3941548569] Running TYPE.one_item: PAD TYPE +[Hera] [HADES][ERROR] [KRELTSC: 3942685782] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3943681917] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3945515133] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3946720827] Running TYPE.empty_stack: TYPE +[Hera] [HADES][ERROR] [KRELTSC: 3947741175] TYPE: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3948746214] Expected error occurred +[Hera] [HADES][TEST ] Testing TYPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3950516451] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3951630690] TYPE: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3952767945] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3954107346] Testing word: COUNT +[Hera] [HADES][TEST ] [KRELTSC: 3955028364] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3955941549] Running COUNT.basic: HERE S" Test" DROP C@ HERE 1+ SWAP COUNT +[Hera] 0 85 +[Hera] [HADES][TEST ] [KRELTSC: 3957744168] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3959581311] Expected: Should show length and addr+1 +[Hera] [HADES][TEST ] [KRELTSC: 3960714828] Running COUNT.empty: HERE 0 OVER C! COUNT . . CR +[Hera] 0 126 +[Hera] [HADES][TEST ] [KRELTSC: 3962372064] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3964086924] Expected: Should handle empty string +[Hera] [HADES][TEST ] [KRELTSC: 3965158407] Running COUNT.max_length: HERE 255 OVER C! COUNT . . CR +[Hera] 255 126 +[Hera] [HADES][TEST ] [KRELTSC: 3966867891] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3968566371] Expected: Should handle max length +[Hera] [HADES][TEST ] [KRELTSC: 3969654780] Running COUNT.zero_addr_plus_one: HERE COUNT SWAP 1- = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 3971322642] Test passed +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3973034982] Expected: Should increment address +[Hera] [HADES][TEST ] [KRELTSC: 3974107725] Running COUNT.empty_stack: COUNT +[Hera] [HADES][ERROR] [KRELTSC: 3975139119] COUNT: Data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3976175805] Expected error occurred +[Hera] [HADES][TEST ] Testing COUNT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3977929242] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3979082142] COUNT: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3980358522] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3981683265] Testing word: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3982604451] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 3983520828] Running EXPECT.zero_length: PAD 0 EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3985000425] Test passed +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3986676876] Expected: Should handle zero length +[Hera] [HADES][TEST ] [KRELTSC: 3987714339] Running EXPECT.one_item: PAD EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3988853484] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3990646611] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3991766247] Running EXPECT.empty_stack: EXPECT +[Hera] [HADES][TEST ] [KRELTSC: 3992809758] Expected error occurred +[Hera] [HADES][TEST ] Testing EXPECT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 3994722963] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 3995857824] EXPECT: 3 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 3997140315] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 3998497608] Testing word: SPAN +[Hera] [HADES][TEST ] [KRELTSC: 3999427047] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4000398087] Running SPAN.zero_input: PAD 0 EXPECT SPAN @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4002081804] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4003786815] Expected: Should show zero +[Hera] [HADES][TEST ] [KRELTSC: 4004775810] Running SPAN.variable_test: SPAN @ SPAN @ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4006318176] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4007987970] Expected: Should be consistent +[Hera] [HADES][TEST ] [KRELTSC: 4009007016] Running SPAN.address_test: SPAN 0<> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4010516412] Test passed +[Hera] [HADES][TEST ] Testing SPAN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4012182678] Expected: Should be valid address +[Hera] [HADES][TEST ] [KRELTSC: 4013222535] SPAN: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4014381504] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 4015702173] Testing word: WORD +[Hera] [HADES][TEST ] [KRELTSC: 4016618781] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4017544272] Running WORD.empty_input: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4019383725] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4021021389] Expected: Should handle empty input +[Hera] [HADES][TEST ] [KRELTSC: 4022254656] Running WORD.space_delim: 32 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 4023446763] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4025130270] Expected: Should use space as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 4026256248] Running WORD.newline_delim: 10 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 4027434495] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4029109182] Expected: Should use newline as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 4030250343] Running WORD.tab_delim: 9 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 4031317668] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4032984879] Expected: Should use tab as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 4034086581] Running WORD.comma_delim: 44 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 4035282132] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4036972548] Expected: Should use comma as delimiter +[Hera] [HADES][TEST ] [KRELTSC: 4038116334] Running WORD.skip_leading: BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 4039229124] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4040900115] Expected: Should skip leading spaces +[Hera] [HADES][TEST ] [KRELTSC: 4041982203] Running WORD.single_char: BL WORD COUNT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4043513271] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4045173006] Expected: Should parse single character +[Hera] [HADES][TEST ] [KRELTSC: 4046428869] Running WORD.long_word: BL WORD COUNT 0 > . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4048208031] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4049910081] Expected: Should parse long word +[Hera] [HADES][TEST ] [KRELTSC: 4050943890] Running WORD.zero_delim: 0 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 4052039313] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4053716709] Expected: Should handle null delimiter +[Hera] [HADES][TEST ] [KRELTSC: 4054828197] Running WORD.high_ascii: 127 WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 4055962113] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4057622016] Expected: Should handle DEL delimiter +[Hera] [HADES][TEST ] [KRELTSC: 4058815698] Running WORD.count_format: BL WORD C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4060523271] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4062297603] Expected: Should have count byte +[Hera] [HADES][TEST ] [KRELTSC: 4063405395] Running WORD.count_value: BL WORD COUNT SWAP DROP . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4065119940] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4066811658] Expected: Should return count +[Hera] [HADES][TEST ] [KRELTSC: 4067864115] Running WORD.empty_stack: WORD +[Hera] [HADES][TEST ] [KRELTSC: 4068964557] Expected error occurred +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4070849664] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4072027155] Running WORD.multi_delim: BL WORD DROP BL WORD DROP +[Hera] [HADES][TEST ] [KRELTSC: 4073538105] Test passed +[Hera] [HADES][TEST ] Testing WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4075240449] Expected: Should handle multiple parses +[Hera] [HADES][TEST ] [KRELTSC: 4076372916] WORD: 14 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4077565653] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 4078942665] Testing word: BASE_OUTPUT +[Hera] [HADES][TEST ] [KRELTSC: 4079890248] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4080862191] Running BASE_OUTPUT.decimal: 10 BASE ! 255 . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4082517537] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4084229835] Expected: Should print: 255 +[Hera] [HADES][TEST ] [KRELTSC: 4085311902] Running BASE_OUTPUT.hex: 16 BASE ! 255 . CR +[Hera] 597 +[Hera] [HADES][TEST ] [KRELTSC: 4086834171] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4088570430] Expected: Should print: FF +[Hera] [HADES][TEST ] [KRELTSC: 4089554868] Running BASE_OUTPUT.octal: 8 BASE ! 64 . CR +[Hera] 52 +[Hera] [HADES][TEST ] [KRELTSC: 4091038644] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4092812703] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 4093837797] Running BASE_OUTPUT.binary: 5 2 BASE ! . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 4095298179] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4096994370] Expected: Should print: 101 +[Hera] [HADES][TEST ] [KRELTSC: 4098250758] Running BASE_OUTPUT.base_restore: BASE @ DECIMAL 255 16 BA +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4099962363] Test passed +[Hera] [HADES][TEST ] Testing BASE_OUTPUT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4101698664] Expected: Should restore base +[Hera] [HADES][TEST ] [KRELTSC: 4102759395] BASE_OUTPUT: 5 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4103997534] ▶ Testing module: v3/src/test_runner/modules/io_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 4105332399] Testing word: FORMAT_COMBO +[Hera] [HADES][TEST ] [KRELTSC: 4106361315] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4107407766] Running FORMAT_COMBO.number_space_number: DECIMAL 42 . SPACE +[Hera] 42 [HADES][INFO ] [KRELTSC: 4109128905] L8[TABLE]: Config 0 → 1 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 43 +[Hera] [HADES][TEST ] [KRELTSC: 4110718689] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4112490354] Expected: Should format: 42 43 +[Hera] [HADES][TEST ] [KRELTSC: 4113536763] Running FORMAT_COMBO.multi_line: DECIMAL 1 . CR 2 . CR 3 . CR +[Hera] 1 +[Hera] 2 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 4115888049] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4117701189] Expected: Should print on separate lines +[Hera] [HADES][TEST ] [KRELTSC: 4118867508] Running FORMAT_COMBO.indented: DECIMAL 5 SPACES 42 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4120522875] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4122217806] Expected: Should indent number +[Hera] [HADES][TEST ] [KRELTSC: 4123563864] Running FORMAT_COMBO.table_format: DECIMAL 1 . 3 SPACES 10 . +[Hera] 1 10 100 +[Hera] [HADES][TEST ] [KRELTSC: 4125439038] Test passed +[Hera] [HADES][TEST ] Testing FORMAT_COMBO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4127175486] Expected: Should format table +[Hera] [HADES][TEST ] [KRELTSC: 4128244008] FORMAT_COMBO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4129536180] === I/O Words Summary: 0 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 4130845950] +[Hera] === Testing Module: Block Words === +[Hera] [HADES][INFO ] [KRELTSC: 4132238838] Running Block Words Tests (Module 16)... +[Hera] [HADES][TEST ] [KRELTSC: 4133373279] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4134721626] Testing word: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4135727442] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4136654193] Running BLOCK.basic: 1 BLOCK DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 4139005794] Test passed +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4140709083] Expected: Should return block address +[Hera] [HADES][TEST ] [KRELTSC: 4141831869] Running BLOCK.zero_block: 0 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4142928783] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4144761348] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4145812797] Running BLOCK.large_block: 65536 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4146956394] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4149251316] Expected: Should handle large number +[Hera] [HADES][TEST ] [KRELTSC: 4150428639] Running BLOCK.negative: -1 BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4151500689] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4153476075] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4154612973] Running BLOCK.empty_stack: BLOCK +[Hera] [HADES][TEST ] [KRELTSC: 4155669105] Expected error occurred +[Hera] [HADES][TEST ] Testing BLOCK ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4157466915] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4158557151] BLOCK: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4159763286] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4161454920] Testing word: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4162460316] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4163420142] Running BUFFER.basic: 1 BUFFER DUP . CR +[Hera] 5238784 +[Hera] [HADES][TEST ] [KRELTSC: 4165429821] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4167247917] Expected: Should return buffer address +[Hera] [HADES][TEST ] [KRELTSC: 4168340568] Running BUFFER.zero_block: 0 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4169517576] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4171343862] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4172354487] Running BUFFER.flush_dirty: 2 BLOCK 1+ 2 BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4173718542] Test passed +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4175501379] Expected: Should flush if dirty +[Hera] [HADES][TEST ] [KRELTSC: 4176581010] Running BUFFER.empty_stack: BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4177658562] Expected error occurred +[Hera] [HADES][TEST ] Testing BUFFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4179508788] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4180663536] BUFFER: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4181865870] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4183182255] Testing word: UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4184113122] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4185051276] Running UPDATE.basic: 1 BLOCK UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4186564998] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4188267090] Expected: Should mark block dirty +[Hera] [HADES][TEST ] [KRELTSC: 4189313814] Running UPDATE.multiple: 1 BLOCK UPDATE UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4190533536] Test passed +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4192292790] Expected: Should handle multiple updates +[Hera] [HADES][TEST ] [KRELTSC: 4193425950] Running UPDATE.no_block: 0 SCR ! UPDATE +[Hera] [HADES][TEST ] [KRELTSC: 4194603588] Expected error occurred +[Hera] [HADES][TEST ] Testing UPDATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4196457489] Expected: Should error: blk=0 is invalid +[Hera] [HADES][TEST ] [KRELTSC: 4197622359] UPDATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4198875240] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4200165963] Testing word: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4201148889] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4202084502] Running SAVE-BUFFERS.basic: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4203545955] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4205370876] Expected: Should flush all buffers +[Hera] [HADES][TEST ] [KRELTSC: 4206579216] Running SAVE-BUFFERS.dirty_blocks: 1 BLOCK UPDATE SAVE-BUFFER +[Hera] [HADES][TEST ] [KRELTSC: 4208040186] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4209800511] Expected: Should save dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4211040183] Running SAVE-BUFFERS.no_dirty: SAVE-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4212177249] Test passed +[Hera] [HADES][TEST ] Testing SAVE-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4213930035] Expected: Should handle no dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4215115905] SAVE-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4216330398] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4217676666] Testing word: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4218622716] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4219588065] Running EMPTY-BUFFERS.basic: EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4220844705] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4222576722] Expected: Should invalidate all buffers +[Hera] [HADES][TEST ] [KRELTSC: 4223746107] Running EMPTY-BUFFERS.after_use: 1 BLOCK EMPTY-BUFFERS +[Hera] [HADES][TEST ] [KRELTSC: 4225005519] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4226829957] Expected: Should invalidate used buffers +[Hera] [HADES][TEST ] [KRELTSC: 4227938715] Running EMPTY-BUFFERS.dirty_blocks: 1 BLOCK UPDATE EMPTY-BUFF +[Hera] [HADES][TEST ] [KRELTSC: 4229337777] Test passed +[Hera] [HADES][TEST ] Testing EMPTY-BUFFERS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4231066287] Expected: Should handle dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4232196654] EMPTY-BUFFERS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4233511065] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4234893621] Testing word: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4235896539] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4236859704] Running FLUSH.basic: FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4237977429] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4239624060] Expected: Should save and invalidate buffers +[Hera] [HADES][TEST ] [KRELTSC: 4240789140] Running FLUSH.dirty_blocks: 1 BLOCK UPDATE FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4242033663] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4243696023] Expected: Should flush dirty blocks +[Hera] [HADES][TEST ] [KRELTSC: 4244752344] Running FLUSH.after_empty: EMPTY-BUFFERS FLUSH +[Hera] [HADES][TEST ] [KRELTSC: 4245975279] Test passed +[Hera] [HADES][TEST ] Testing FLUSH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4247787873] Expected: Should handle empty buffers +[Hera] [HADES][TEST ] [KRELTSC: 4249001400] FLUSH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4250156631] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4251501156] Testing word: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4252425912] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4253420451] Running LOAD.basic: 1 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4254606636] Test passed +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4256336175] Expected: Should interpret block 1 +[Hera] [HADES][TEST ] [KRELTSC: 4257479562] Running LOAD.zero_block: 0 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4258580067] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4260321660] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4261403685] Running LOAD.nonexistent: 9999 LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4262479788] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4264282827] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 4265385222] Running LOAD.empty_stack: LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4266466323] Expected error occurred +[Hera] [HADES][TEST ] Testing LOAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4268284734] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4269418188] LOAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4270593810] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4271949276] Testing word: LIST +[Hera] [HADES][TEST ] [KRELTSC: 4272801645] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4273847130] Running LIST.basic: 1 LIST + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] [HADES][TEST ] [KRELTSC: 4296492165] Test passed +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4298183925] Expected: Should display block 1 +[Hera] [HADES][TEST ] [KRELTSC: 4299298731] Running LIST.zero_block: 0 LIST +[Hera] [HADES][TEST ] [KRELTSC: 4300420803] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4302254565] Expected: Should handle block 0 +[Hera] [HADES][TEST ] [KRELTSC: 4303351164] Running LIST.nonexistent: 9999 LIST +[Hera] [HADES][TEST ] [KRELTSC: 4304497071] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4306355340] Expected: Should handle missing block +[Hera] [HADES][TEST ] [KRELTSC: 4307484762] Running LIST.empty_stack: LIST +[Hera] [HADES][TEST ] [KRELTSC: 4308533691] Expected error occurred +[Hera] [HADES][TEST ] Testing LIST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4310353698] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4311524469] LIST: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4312679238] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4314059925] Testing word: SCR +[Hera] [HADES][TEST ] [KRELTSC: 4314951837] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4315927308] Running SCR.basic: SCR @ . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4317286281] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4319089719] Expected: Should show current block +[Hera] [HADES][TEST ] [KRELTSC: 4320205323] Running SCR.after_list: 1 LIST SCR @ . CR + +[Hera] Block 1 + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + +[Hera] 2d: +[Hera] + + + +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4342769760] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4344535671] Expected: Should update after LIST +[Hera] [HADES][TEST ] [KRELTSC: 4345664022] Running SCR.after_load: 1 LOAD SCR @ . CR +[Hera] [HADES][TEST ] [KRELTSC: 4346855037] Test passed +[Hera] [HADES][TEST ] Testing SCR ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4348494654] Expected: Should update after LOAD +[Hera] [HADES][TEST ] [KRELTSC: 4349677605] SCR: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4350817821] ▶ Testing module: v3/src/test_runner/modules/block_words_test +[Hera] [HADES][TEST ] [KRELTSC: 4352150733] Testing word: THRU +[Hera] [HADES][TEST ] [KRELTSC: 4353029226] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4353973260] Running THRU.single_block: 1 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4355328747] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4357013745] Expected: Should load single block (1-1) +[Hera] [HADES][TEST ] [KRELTSC: 4358234622] Running THRU.ascending: 1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4359319020] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4361052087] Expected: Should load blocks 1-3 in order +[Hera] [HADES][TEST ] [KRELTSC: 4362340269] Running THRU.descending: 3 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4363451043] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4365183543] Expected: Should auto-swap and load 1-3 +[Hera] [HADES][TEST ] [KRELTSC: 4366338984] Running THRU.same_block: 2 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4367401836] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4369073982] Expected: Should load single block (2-2) +[Hera] [HADES][TEST ] [KRELTSC: 4370204433] Running THRU.zero_start: 0 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4371300948] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4373085087] Expected: Should reject block 0 as start +[Hera] [HADES][TEST ] [KRELTSC: 4374244098] Running THRU.zero_end: 1 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4375297815] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4377073596] Expected: Should reject block 0 as end +[Hera] [HADES][TEST ] [KRELTSC: 4378167465] Running THRU.both_zero: 0 0 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4379189787] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4380972288] Expected: Should reject both blocks as 0 +[Hera] [HADES][TEST ] [KRELTSC: 4382122605] Running THRU.invalid_start: 9999 10000 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4383289533] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4385121048] Expected: Should reject invalid start block +[Hera] [HADES][TEST ] [KRELTSC: 4386301353] Running THRU.invalid_end: 1 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4387446294] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4389224973] Expected: Should reject invalid end block +[Hera] [HADES][TEST ] [KRELTSC: 4390416912] Running THRU.both_invalid: 9998 9999 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4391560005] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4393299246] Expected: Should reject both invalid blocks +[Hera] [HADES][TEST ] [KRELTSC: 4394488455] Running THRU.empty_stack: THRU +[Hera] [HADES][TEST ] [KRELTSC: 4395619851] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4397371650] Expected: Should cause stack underflow (no args) +[Hera] [HADES][TEST ] [KRELTSC: 4398586962] Running THRU.one_arg: 1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4399719450] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4401562998] Expected: Should cause stack underflow (one arg) +[Hera] [HADES][TEST ] [KRELTSC: 4402792086] Running THRU.small_range: 1 2 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4403906052] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4405573410] Expected: Should load 2-block range +[Hera] [HADES][TEST ] [KRELTSC: 4406689497] Running THRU.medium_range: 1 5 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4407825639] Test passed +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4409614272] Expected: Should load 5-block range +[Hera] [HADES][TEST ] [KRELTSC: 4410707826] Running THRU.negative_start: -1 3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4411910769] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4413675924] Expected: Should handle negative start +[Hera] [HADES][TEST ] [KRELTSC: 4414800012] Running THRU.negative_end: 1 -3 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4415911962] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4417757799] Expected: Should handle negative end +[Hera] [HADES][TEST ] [KRELTSC: 4418911602] Running THRU.both_negative: -3 -1 THRU +[Hera] [HADES][TEST ] [KRELTSC: 4420177020] Expected error occurred +[Hera] [HADES][TEST ] Testing THRU ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4421972793] Expected: Should handle both negative +[Hera] [HADES][TEST ] [KRELTSC: 4423079682] THRU: 17 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4424284536] === Block Words Summary: 0 passed, 0 failed, 0 skipped, 0 error +[Hera] [HADES][INFO ] [KRELTSC: 4425608649] +[Hera] === Testing Module: Dictionary Words === +[Hera] [HADES][INFO ] [KRELTSC: 4427042067] Running Dictionary Words Tests (Module 4)... +[Hera] [HADES][TEST ] [KRELTSC: 4428281046] Testing word: HERE +[Hera] [HADES][TEST ] [KRELTSC: 4429182555] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4430145993] Running HERE.basic: HERE HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4431607362] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4433312604] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4434356010] Running HERE.after_comma: HERE 42 , HERE SWAP - 1 CELLS = 0 S +[Hera] [HADES][TEST ] [KRELTSC: 4435744026] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4437525498] Expected: Asserts HERE advances by exactly 1 CELLS (8 bytes +[Hera] [HADES][TEST ] [KRELTSC: 4438909398] Running HERE.after_c_comma: HERE 65 C, HERE SWAP - . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 4440545529] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4442300184] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 4443365808] Running HERE.after_allot: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4444999335] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4446812853] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 4447839144] Running HERE.stability: HERE DUP HERE = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4449426324] Test passed +[Hera] [HADES][TEST ] Testing HERE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4451101914] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4452109767] HERE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4453293012] Testing word: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 4454184945] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4455128055] Running ALLOT.basic: HERE 10 ALLOT HERE SWAP - . CR +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 4456719225] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4458452838] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 4459435134] Running ALLOT.zero: HERE 0 ALLOT HERE SWAP - . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4461007131] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4462874850] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4463844714] Running ALLOT.negative: HERE -4 ALLOT HERE SWAP - . CR +[Hera] -4 +[Hera] [HADES][TEST ] [KRELTSC: 4465509384] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4467244194] Expected: Should print: -4 +[Hera] [HADES][TEST ] [KRELTSC: 4468256814] Running ALLOT.large: HERE 100 ALLOT HERE SWAP - . CR +[Hera] 100 +[Hera] [HADES][TEST ] [KRELTSC: 4469841054] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4471489869] Expected: Should print: 100 +[Hera] [HADES][TEST ] [KRELTSC: 4472549760] Running ALLOT.after_use: ALIGN HERE 10 ALLOT 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4474293348] Test passed +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4476026541] Expected: Should store and retrieve +[Hera] [HADES][TEST ] [KRELTSC: 4477126647] Running ALLOT.empty_stack: ALLOT +[Hera] [HADES][TEST ] [KRELTSC: 4478193531] Expected error occurred +[Hera] [HADES][TEST ] Testing ALLOT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4479953415] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4481044218] ALLOT: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4482219042] Testing word: , +[Hera] [HADES][TEST ] [KRELTSC: 4483068534] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4484032455] Running ,.basic: 42 , HERE 1 CELLS - @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4485591873] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4487265279] Expected: Should compile 42 +[Hera] [HADES][TEST ] [KRELTSC: 4488403332] Running ,.negative: -999 , HERE 1 CELLS - @ . CR +[Hera] [HADES][INFO ] [KRELTSC: 4504363731] L8[TABLE]: Config 1 → 2 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] -999 +[Hera] [HADES][TEST ] [KRELTSC: 4506018489] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4507579104] Expected: Should compile -999 +[Hera] [HADES][TEST ] [KRELTSC: 4508816487] Running ,.zero: 0 , HERE 1 CELLS - @ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4510428258] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4512136734] Expected: Should compile 0 +[Hera] [HADES][TEST ] [KRELTSC: 4513218927] Running ,.max_int: 2147483647 , HERE 1 CELLS - @ . CR +[Hera] 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4514959050] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4516602321] Expected: Should compile max int +[Hera] [HADES][TEST ] [KRELTSC: 4517748081] Running ,.min_int: -2147483648 , HERE 1 CELLS - @ . CR +[Hera] -2147483648 +[Hera] [HADES][TEST ] [KRELTSC: 4519609710] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4521297165] Expected: Should compile min int +[Hera] [HADES][TEST ] [KRELTSC: 4522367094] Running ,.multiple: 10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS +[Hera] 20 20 +[Hera] [HADES][TEST ] [KRELTSC: 4524118242] Test passed +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4525947363] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 4527005364] Running ,.empty_stack: , +[Hera] [HADES][TEST ] [KRELTSC: 4527986022] Expected error occurred +[Hera] [HADES][TEST ] Testing , ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4529757057] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4530877050] ,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4532004036] Testing word: C, +[Hera] [HADES][TEST ] [KRELTSC: 4532894373] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4533864720] Running C,.basic: 65 C, HERE 1 - C@ . CR +[Hera] 65 +[Hera] [HADES][TEST ] [KRELTSC: 4535488797] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4537168356] Expected: Should compile byte 65 +[Hera] [HADES][TEST ] [KRELTSC: 4538349522] Running C,.zero: 0 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4539839031] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4541522454] Expected: Should compile byte 0 +[Hera] [HADES][TEST ] [KRELTSC: 4542608952] Running C,.high_byte: 255 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4544208291] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4545868026] Expected: Should compile byte 255 +[Hera] [HADES][TEST ] [KRELTSC: 4547014605] Running C,.truncation: 256 C, HERE 1 - C@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4548643428] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4550427420] Expected: Should truncate to 0 +[Hera] [HADES][TEST ] [KRELTSC: 4551532566] Running C,.negative: -1 C, HERE 1 - C@ . CR +[Hera] 255 +[Hera] [HADES][TEST ] [KRELTSC: 4553107188] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4554786075] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 4555846239] Running C,.multiple: 65 C, 66 C, HERE 2 - C@ . HERE 1 - C@ . +[Hera] 65 66 +[Hera] [HADES][TEST ] [KRELTSC: 4557588210] Test passed +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4559251662] Expected: Should compile multiple +[Hera] [HADES][TEST ] [KRELTSC: 4560298575] Running C,.empty_stack: C, +[Hera] [HADES][TEST ] [KRELTSC: 4561401054] Expected error occurred +[Hera] [HADES][TEST ] Testing C, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4563199158] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4564321965] C,: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4565476251] Testing word: 2, +[Hera] [HADES][TEST ] [KRELTSC: 4566337377] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4567285149] Running 2,.basic: 12345 67890 2, HERE 2 CELLS - 2@ . . CR +[Hera] 67890 12345 +[Hera] [HADES][TEST ] [KRELTSC: 4569052341] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4570772913] Expected: Should compile double +[Hera] [HADES][TEST ] [KRELTSC: 4571823060] Running 2,.zero: 0 0 2, HERE 2 CELLS - 2@ . . CR +[Hera] 0 0 +[Hera] [HADES][TEST ] [KRELTSC: 4573524459] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4575294003] Expected: Should compile zero double +[Hera] [HADES][TEST ] [KRELTSC: 4576396902] Running 2,.negative: -1000 -2000 2, HERE 2 CELLS - 2@ . . CR +[Hera] -2000 -1000 +[Hera] [HADES][TEST ] [KRELTSC: 4578207060] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4579884918] Expected: Should compile negative double +[Hera] [HADES][TEST ] [KRELTSC: 4581026079] Running 2,.large: 2147483647 -1 2, HERE 2 CELLS - 2@ . . CR +[Hera] -1 2147483647 +[Hera] [HADES][TEST ] [KRELTSC: 4582785753] Test passed +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4584446874] Expected: Should compile large double +[Hera] [HADES][TEST ] [KRELTSC: 4585551768] Running 2,.one_item: 42 2, +[Hera] [HADES][TEST ] [KRELTSC: 4586588559] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4588405122] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4589504619] Running 2,.empty_stack: 2, +[Hera] [HADES][TEST ] [KRELTSC: 4590550335] Expected error occurred +[Hera] [HADES][TEST ] Testing 2, ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4592328930] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4593461439] 2,: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4594634247] Testing word: PAD +[Hera] [HADES][TEST ] [KRELTSC: 4595514441] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4596492369] Running PAD.basic: PAD PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4597924149] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4599586215] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4600675758] Running PAD.different_from_here: PAD HERE = . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4602223437] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4603868493] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 4604851398] Running PAD.stability: PAD DUP PAD = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4606363713] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4608064356] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4609049970] Running PAD.usable: PAD 42 OVER ! @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4610544393] Test passed +[Hera] [HADES][TEST ] Testing PAD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4612243209] Expected: Should be usable memory +[Hera] [HADES][TEST ] [KRELTSC: 4613378553] PAD: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4614540651] Testing word: SP@ +[Hera] [HADES][TEST ] [KRELTSC: 4615508604] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4616524920] Running SP@.depth_effect: 42 SP@ SWAP DROP SP@ = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4618216260] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4619924610] Expected: Should show stack effect +[Hera] [HADES][TEST ] [KRELTSC: 4621020978] Running SP@.empty_stack: DEPTH 0= SP@ AND . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4622551605] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4624240383] Expected: Should work on empty stack +[Hera] [HADES][TEST ] [KRELTSC: 4625346138] Running SP@.multiple_items: 1 2 3 SP@ SWAP DROP SWAP DROP SWA +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4627113771] Test passed +[Hera] [HADES][TEST ] Testing SP@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4628879787] Expected: Should track changes +[Hera] [HADES][TEST ] [KRELTSC: 4629984891] SP@: 3 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4631263791] Testing word: SP! +[Hera] [HADES][TEST ] [KRELTSC: 4632150705] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4633095390] Running SP!.basic_restore: 1 2 3 SP@ 4 5 6 DROP DROP DROP SP! +[Hera] 3 [HADES][TEST ] [KRELTSC: 4634892108] Test passed +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4636282707] Expected: Should restore stack +[Hera] [HADES][TEST ] [KRELTSC: 4637397954] Running SP!.invalid_addr: 0 SP! +[Hera] [HADES][TEST ] [KRELTSC: 4638617088] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4640408577] Expected: Should cause error +[Hera] [HADES][TEST ] [KRELTSC: 4641464751] Running SP!.empty_stack: SP! +[Hera] [HADES][TEST ] [KRELTSC: 4642492575] Expected error occurred +[Hera] [HADES][TEST ] Testing SP! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4644251493] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 4645384359] SP!: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4646524638] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 4647482679] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4648472199] Running LATEST.basic: LATEST LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4649989533] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4651811997] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 4652828418] Running LATEST.stability: LATEST DUP LATEST = . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4654423137] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4656095787] Expected: Should be stable +[Hera] [HADES][TEST ] [KRELTSC: 4657144044] LATEST: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4658418513] Testing word: COMPILATION +[Hera] [HADES][TEST ] [KRELTSC: 4659409398] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4660363155] Running COMPILATION.here_comma_sequence: HERE 10 , 20 , 30 , +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4662051492] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4663849743] Expected: Should advance HERE by 12 +[Hera] [HADES][TEST ] [KRELTSC: 4664936325] Running COMPILATION.mixed_compilation: HERE 42 , 65 C, 100 20 +[Hera] [HADES][INFO ] [KRELTSC: 4666617438] L8[TABLE]: Config 2 → 3 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4668331479] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4670139789] Expected: Should advance correctly +[Hera] [HADES][TEST ] [KRELTSC: 4671215409] Running COMPILATION.allot_comma_combo: HERE 10 ALLOT 99 , HER +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4673005029] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4674748029] Expected: Should combine allot and comma +[Hera] [HADES][TEST ] [KRELTSC: 4675950237] Running COMPILATION.pad_isolation: PAD 999 OVER ! HERE 42 , P +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 4677678747] Test passed +[Hera] [HADES][TEST ] Testing COMPILATION ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4679417484] Expected: PAD should be isolated +[Hera] [HADES][TEST ] [KRELTSC: 4680502281] COMPILATION: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4681711314] Testing word: STACK_MGMT +[Hera] [HADES][TEST ] [KRELTSC: 4682669607] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4683586824] Running STACK_MGMT.sp_round_trip: 42 43 SP@ >R 44 45 R> SP! . +[Hera] 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 4685325057] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4687089582] Expected: Should print: 43 42 +[Hera] [HADES][TEST ] [KRELTSC: 4688124756] Running STACK_MGMT.depth_preservation: 1 2 3 DEPTH >R SP@ >R +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4689894195] Test passed +[Hera] [HADES][TEST ] Testing STACK_MGMT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4691644293] Expected: Should preserve depth +[Hera] [HADES][TEST ] [KRELTSC: 4692684129] STACK_MGMT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4693963470] === Dictionary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 4695385338] +[Hera] === Testing Module: Dictionary Manipulation Words === +[Hera] [HADES][INFO ] [KRELTSC: 4696886712] Running Dictionary Manipulation Words Tests (Module 14)... +[Hera] [HADES][TEST ] [KRELTSC: 4698230502] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4699642185] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 4700622024] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4701646362] Running CREATE.basic: CREATE test1 42 , test1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4703816439] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4705591359] Expected: Should create and store +[Hera] [HADES][TEST ] [KRELTSC: 4706657004] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 4707796401] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4709630142] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 4710704040] Running CREATE.redefine_shadows: CREATE T 1 , CREATE T 2 , T +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 4712601222] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4714422825] Expected: Newest definition should win (prints 2) +[Hera] [HADES][TEST ] [KRELTSC: 4715723880] Running CREATE.duplicate: CREATE test2 CREATE test2 +[Hera] [HADES][TEST ] [KRELTSC: 4717156332] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4718953344] Expected: Should allow redefinition (latest shadows) +[Hera] [HADES][TEST ] [KRELTSC: 4720199316] CREATE: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4721428950] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4722891432] Testing word: FORGET +[Hera] [HADES][TEST ] [KRELTSC: 4723853463] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4724846280] Running FORGET.basic: CREATE temp1 FORGET temp1 +[Hera] [HADES][TEST ] [KRELTSC: 4726945272] Test passed +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4728683526] Expected: Should forget word +[Hera] [HADES][TEST ] [KRELTSC: 4729764816] Running FORGET.nonexistent: FORGET nonexistent +[Hera] [HADES][TEST ] [KRELTSC: 4731143907] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4732933884] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 4733995203] Running FORGET.protected: FORGET FORGET +[Hera] [HADES][TEST ] [KRELTSC: 4735230129] Expected error occurred +[Hera] [HADES][TEST ] Testing FORGET ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4737049800] Expected: Should protect system words +[Hera] [HADES][TEST ] [KRELTSC: 4738124811] FORGET: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4739387520] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4740754200] Testing word: FENCE +[Hera] [HADES][TEST ] [KRELTSC: 4741735782] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4742730678] Running FENCE.basic: CREATE fnc1 FENCE CREATE fnc2 FORGET fnc +[Hera] [HADES][TEST ] [KRELTSC: 4744497471] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4746170982] Expected: Should forget a word defined after FENCE +[Hera] [HADES][TEST ] [KRELTSC: 4747521534] Running FENCE.protects_older: CREATE fnc3 CREATE fnc4 FENCE F +[Hera] [HADES][TEST ] [KRELTSC: 4749287655] Expected error occurred +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4751300211] Expected: Should refuse to forget a word defined before FEN +[Hera] [HADES][TEST ] [KRELTSC: 4752757023] Running FENCE.forget_latest_keeps_predecessor: CREATE fnc5 FE +[Hera] [HADES][TEST ] [KRELTSC: 4754413713] Test passed +[Hera] [HADES][TEST ] Testing FENCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4756108791] Expected: Forgetting the newest word must not disturb an ol +[Hera] [HADES][TEST ] [KRELTSC: 4757435991] FENCE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4758679086] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4760059227] Testing word: IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 4761090096] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4762016910] Running IMMEDIATE.basic: : test3 42 ; IMMEDIATE test3 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4764330858] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4766065857] Expected: Should execute immediately +[Hera] [HADES][TEST ] [KRELTSC: 4767144354] Running IMMEDIATE.already_immediate: : test4 43 ; IMMEDIATE I +[Hera] [HADES][TEST ] [KRELTSC: 4768590120] Test passed +[Hera] [HADES][TEST ] Testing IMMEDIATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4770310902] Expected: Should handle double immediate +[Hera] [HADES][TEST ] [KRELTSC: 4771427325] IMMEDIATE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4772643498] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4773921978] Testing word: FIND +[Hera] [HADES][TEST ] [KRELTSC: 4774818741] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4775755341] Running FIND.existing: FIND DUP . CR +[Hera] 2225731376 +[Hera] [HADES][TEST ] [KRELTSC: 4777447668] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4779114564] Expected: Should find system word +[Hera] [HADES][TEST ] [KRELTSC: 4780169667] Running FIND.user_word: : test5 44 ; FIND test5 . CR +[Hera] 2226064960 +[Hera] [HADES][TEST ] [KRELTSC: 4781938098] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4783656990] Expected: Should find user word +[Hera] [HADES][TEST ] [KRELTSC: 4784865099] Running FIND.nonexistent: FIND nonexistent . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 4786522986] Test passed +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4788257733] Expected: Should return 0 +[Hera] [HADES][TEST ] [KRELTSC: 4789350195] Running FIND.empty: FIND +[Hera] [HADES][TEST ] [KRELTSC: 4790501457] Expected error occurred +[Hera] [HADES][TEST ] Testing FIND ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4792289229] Expected: Should error (no token) +[Hera] [HADES][TEST ] [KRELTSC: 4793376588] FIND: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4794514389] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4795862946] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4796798853] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4797756726] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4799098647] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4800792717] Expected: Should set current to context +[Hera] [HADES][TEST ] [KRELTSC: 4802059164] Running DEFINITIONS.multiple: FORTH DEFINITIONS DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4803349236] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4805108763] Expected: Should be idempotent +[Hera] [HADES][TEST ] [KRELTSC: 4806138267] DEFINITIONS: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4807326531] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4808634054] Testing word: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 4809506856] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4810458051] Running SMUDGE.during_def: : test6 SMUDGE 45 ; +[Hera] [HADES][TEST ] [KRELTSC: 4811897643] Test passed +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4813614876] Expected: Should hide incomplete def +[Hera] [HADES][TEST ] [KRELTSC: 4814826408] Running SMUDGE.outside_def: SMUDGE +[Hera] [HADES][TEST ] [KRELTSC: 4815954024] Expected error occurred +[Hera] [HADES][TEST ] Testing SMUDGE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4817792490] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 4818971493] SMUDGE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4820090709] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4821434961] Testing word: LATEST +[Hera] [HADES][TEST ] [KRELTSC: 4822311732] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4823249361] Running LATEST.basic: LATEST @ . CR +[Hera] 2225812800 +[Hera] [HADES][TEST ] [KRELTSC: 4824803298] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4826524584] Expected: Should show latest word +[Hera] [HADES][TEST ] [KRELTSC: 4827830574] Running LATEST.after_def: : test7 46 ; LATEST @ . CR +[Hera] 2225851984 +[Hera] [HADES][TEST ] [KRELTSC: 4829706777] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4831386294] Expected: Should update after def +[Hera] [HADES][TEST ] [KRELTSC: 4832410023] Running LATEST.after_forget: CREATE test8 FORGET test8 LATEST +[Hera] 2225851984 +[Hera] [HADES][TEST ] [KRELTSC: 4834308612] Test passed +[Hera] [HADES][TEST ] Testing LATEST ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4835977041] Expected: Should update after forget +[Hera] [HADES][TEST ] [KRELTSC: 4837038717] LATEST: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4838265705] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4839909858] Testing word: >BODY +[Hera] [HADES][TEST ] [KRELTSC: 4840831821] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4841982054] Running >BODY.basic: CREATE test9 ' test9 >BODY . CR +[Hera] 2226066472 +[Hera] [HADES][TEST ] [KRELTSC: 4844207634] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4846026234] Expected: Should get param field +[Hera] [HADES][TEST ] [KRELTSC: 4847088918] Running >BODY.variable: VARIABLE var1 ' var1 >BODY . CR +[Hera] 2226066936 +[Hera] [HADES][TEST ] [KRELTSC: 4849034589] Test passed +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4850709024] Expected: Should get var storage +[Hera] [HADES][TEST ] [KRELTSC: 4851746655] Running >BODY.nonexistent: ' NONEXISTENT >BODY +[Hera] [HADES][ERROR] [KRELTSC: 4853074443] ': word 'NONEXISTENT' not found +[Hera] [HADES][TEST ] [KRELTSC: 4854298785] Expected error occurred +[Hera] [HADES][TEST ] Testing >BODY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4856095965] Expected: Should handle missing word +[Hera] [HADES][TEST ] [KRELTSC: 4857173580] >BODY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4858327047] ▶ Testing module: v3/src/test_runner/modules/dictionary_manip +[Hera] [HADES][TEST ] [KRELTSC: 4859600109] Testing word: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 4860538683] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4861451616] Running HIDDEN.basic: : test10 HIDDEN 47 ; +[Hera] [HADES][TEST ] [KRELTSC: 4862761239] Test passed +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4864459719] Expected: Should hide word +[Hera] [HADES][TEST ] [KRELTSC: 4865622468] Running HIDDEN.outside_def: HIDDEN +[Hera] [HADES][TEST ] [KRELTSC: 4866728181] Expected error occurred +[Hera] [HADES][TEST ] Testing HIDDEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4868493042] Expected: Should error outside def +[Hera] [HADES][TEST ] [KRELTSC: 4869795357] HIDDEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4871010039] === Dictionary Manipulation Words Summary: 0 passed, 0 failed, +[Hera] [HADES][INFO ] [KRELTSC: 4872311451] +[Hera] === Testing Module: Vocabulary Words === +[Hera] [HADES][INFO ] [KRELTSC: 4873717170] Running Vocabulary Words Tests (Module 15)... +[Hera] [HADES][TEST ] [KRELTSC: 4874929374] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4876245444] Testing word: VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 4877332488] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4878270810] Running VOCABULARY.basic: VOCABULARY TEST-VOC1 TEST-VOC1 DEFI +[Hera] [HADES][TEST ] [KRELTSC: 4881298527] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4883128593] Expected: Should create vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 4884299301] Running VOCABULARY.create_and_switch: VOCABULARY MYVOC MYVOC +[Hera] 2226071456 +[Hera] [HADES][TEST ] [KRELTSC: 4887598149] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4889572002] Expected: Should create and switch +[Hera] [HADES][TEST ] [KRELTSC: 4890739266] Running VOCABULARY.word_isolation: VOCABULARY ISOLATED ISOLAT +[Hera] [HADES][TEST ] [KRELTSC: 4894665951] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4896534279] Expected: Should create word in isolated vocab +[Hera] [HADES][TEST ] [KRELTSC: 4897829853] Running VOCABULARY.cross_vocab_access: VOCABULARY V1 V1 DEFIN +[Hera] 11 +[Hera] [HADES][TEST ] [KRELTSC: 4901916432] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4904189661] Expected: Should access word across vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4905411168] Running VOCABULARY.multiple_vocabs: VOCABULARY VA VOCABULARY +[Hera] [HADES][TEST ] [KRELTSC: 4908292452] Test passed +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4910013402] Expected: Should create multiple vocabs +[Hera] [HADES][TEST ] [KRELTSC: 4911223086] Running VOCABULARY.duplicate: VOCABULARY TESTVOC VOCABULARY T +[Hera] [HADES][ERROR] [KRELTSC: 4912879629] VOCABULARY: duplicate 'TESTVOC' +[Hera] [HADES][TEST ] [KRELTSC: 4913896512] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4915811166] Expected: Should handle duplicate +[Hera] [HADES][TEST ] [KRELTSC: 4916887080] Running VOCABULARY.empty_name: VOCABULARY +[Hera] [HADES][ERROR] [KRELTSC: 4918069065] VOCABULARY: missing name +[Hera] [HADES][TEST ] [KRELTSC: 4919073264] Expected error occurred +[Hera] [HADES][TEST ] Testing VOCABULARY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4921023765] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 4922203125] VOCABULARY: 7 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4923492798] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4924739148] Testing word: FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4925659347] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4926624633] Running FORTH.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4928905233] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4930576077] Expected: Should select FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 4931667384] Running FORTH.persistence: FORTH : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 4933405911] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4935099645] Expected: Should find word in FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4936216698] Running FORTH.from_other: VOCABULARY OTHER-VOC OTHER-VOC FORT +[Hera] [HADES][TEST ] [KRELTSC: 4938832059] Test passed +[Hera] [HADES][TEST ] Testing FORTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4940638563] Expected: Should return to FORTH +[Hera] [HADES][TEST ] [KRELTSC: 4941679239] FORTH: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4942857633] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4944198021] Testing word: DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4945171056] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4946104065] Running DEFINITIONS.basic: FORTH DEFINITIONS +[Hera] [HADES][TEST ] [KRELTSC: 4948256922] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4950102948] Expected: Should set current vocabulary +[Hera] [HADES][TEST ] [KRELTSC: 4951311519] Running DEFINITIONS.new_vocab: VOCABULARY TEST-VOC6 TEST-VOC6 +[Hera] [HADES][TEST ] [KRELTSC: 4954218696] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4956637203] Expected: Should set new current +[Hera] [HADES][TEST ] [KRELTSC: 4958004744] Running DEFINITIONS.word_creation: VOCABULARY TEST-VOC7 TEST- +[Hera] [HADES][TEST ] [KRELTSC: 4961882163] Test passed +[Hera] [HADES][TEST ] Testing DEFINITIONS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4964388807] Expected: Should create in correct vocab +[Hera] [HADES][TEST ] [KRELTSC: 4966092663] DEFINITIONS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4967474925] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4968809958] Testing word: CONTEXT +[Hera] [HADES][TEST ] [KRELTSC: 4969728687] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4970660793] Running CONTEXT.basic: CONTEXT @ . CR +[Hera] 2226077440 +[Hera] [HADES][TEST ] [KRELTSC: 4972290540] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4974065649] Expected: Should show current context +[Hera] [HADES][TEST ] [KRELTSC: 4975205277] Running CONTEXT.modify: CONTEXT @ 1+ CONTEXT ! +[Hera] [HADES][TEST ] [KRELTSC: 4976444382] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4978209894] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 4979462607] Running CONTEXT.initial: FORTH CONTEXT @ . CR +[Hera] 2225822608 +[Hera] [HADES][TEST ] [KRELTSC: 4982143971] Test passed +[Hera] [HADES][TEST ] Testing CONTEXT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4983959946] Expected: Should show FORTH vocab +[Hera] [HADES][TEST ] [KRELTSC: 4985100288] CONTEXT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 4986318834] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 4987675875] Testing word: CURRENT +[Hera] [HADES][TEST ] [KRELTSC: 4988626776] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 4989685407] Running CURRENT.basic: CURRENT @ . CR +[Hera] 2226077440 +[Hera] [HADES][TEST ] [KRELTSC: 4991556843] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4993323069] Expected: Should show current vocab +[Hera] [HADES][TEST ] [KRELTSC: 4994407593] Running CURRENT.after_def: VOCABULARY TEST-VOC8 TEST-VOC8 DEF +[Hera] 2226074144 +[Hera] [HADES][TEST ] [KRELTSC: 4997669544] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 4999424724] Expected: Should show new vocab +[Hera] [HADES][TEST ] [KRELTSC: 5000442699] Running CURRENT.protect: CURRENT @ 1+ CURRENT ! +[Hera] [HADES][INFO ] [KRELTSC: 5001830547] L8[TABLE]: Config 3 → 4 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] [HADES][TEST ] [KRELTSC: 5003331963] Test passed +[Hera] [HADES][TEST ] Testing CURRENT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5005040649] Expected: Should allow modification (impl-defined effect) +[Hera] [HADES][TEST ] [KRELTSC: 5006317764] CURRENT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5007479757] ▶ Testing module: v3/src/test_runner/modules/vocabulary_words +[Hera] [HADES][TEST ] [KRELTSC: 5008822854] Testing word: ORDER +[Hera] [HADES][TEST ] [KRELTSC: 5009752335] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5010717852] Running ORDER.basic: ORDER +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 5013323406] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5014967685] Expected: Should list search order +[Hera] [HADES][TEST ] [KRELTSC: 5016146016] Running ORDER.multiple: VOCABULARY TEST-VOC9 TEST-VOC9 DEFINI +[Hera] Search order: +[Hera] + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 5019990276] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5021691129] Expected: Should show all vocabs +[Hera] [HADES][TEST ] [KRELTSC: 5022756900] Running ORDER.after_forth: TEST-VOC9 FORTH ORDER +[Hera] Search order: + + +[Hera] Current: + + +[Hera] [HADES][TEST ] [KRELTSC: 5025764814] Test passed +[Hera] [HADES][TEST ] Testing ORDER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5027394519] Expected: Should show FORTH only +[Hera] [HADES][TEST ] [KRELTSC: 5028525600] ORDER: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5029753575] === Vocabulary Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 5031079137] +[Hera] === Testing Module: System Words === +[Hera] [HADES][INFO ] [KRELTSC: 5032493298] Running System Words Tests (Module 18)... +[Hera] [HADES][WARN ] [KRELTSC: 5033608209] Some system tests marked as unimplemented due to system-level e +[Hera] [HADES][TEST ] [KRELTSC: 5034975666] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5036286255] Testing word: QUIT +[Hera] [HADES][TEST ] [KRELTSC: 5037186693] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5038196247] Running QUIT.in_definition: : BAD-WORD QUIT ; +[Hera] [HADES][TEST ] [KRELTSC: 5039670111] Expected error occurred +[Hera] [HADES][TEST ] Testing QUIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5041489047] Expected: Should prevent compilation +[Hera] [HADES][TEST ] [KRELTSC: 5042585772] QUIT: 1 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5043818136] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5045154429] Testing word: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 5046048126] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5046990375] Running ABORT.basic: ABORT +[Hera] [HADES][TEST ] [KRELTSC: 5048010765] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5049856056] Expected: Should clear stacks and return to QUIT +[Hera] [HADES][TEST ] [KRELTSC: 5051185293] Running ABORT.with_data: 1 2 3 ABORT DEPTH . CR +[Hera] [HADES][TEST ] [KRELTSC: 5052426981] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5054197785] Expected: Should clear stack +[Hera] [HADES][TEST ] [KRELTSC: 5055314313] Running ABORT.in_definition_runtime: : BAD-WORD ABORT ; 123 +[Hera] [HADES][TEST ] [KRELTSC: 5057134341] Test passed +[Hera] [HADES][TEST ] Testing ABORT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5058902499] Expected: ABORT may appear in a definition; when executed i +[Hera] [HADES][TEST ] [KRELTSC: 5060384826] ABORT: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5061626346] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5062981413] Testing word: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 5063895879] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5064819522] Running ABORT".condition_true: -1 ABORT" Error" + +[Hera] [HADES][TEST ] [KRELTSC: 5066496519] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5068205478] Expected: Should abort with message (no error; stacks clear +[Hera] [HADES][TEST ] [KRELTSC: 5069502186] Running ABORT".condition_false: 0 ABORT" Error" +[Hera] [HADES][TEST ] [KRELTSC: 5070722979] Test passed +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5072546409] Expected: Should not abort +[Hera] [HADES][TEST ] [KRELTSC: 5073541893] Running ABORT".empty_stack: ABORT" +[Hera] [HADES][TEST ] [KRELTSC: 5074649790] Expected error occurred +[Hera] [HADES][TEST ] Testing ABORT" ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5076442581] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5077542939] ABORT": 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5078731959] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5080074909] Testing word: BYE +[Hera] [HADES][TEST ] [KRELTSC: 5081011908] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5081983032] BYE: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5083117809] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5084442678] Testing word: COLD +[Hera] [HADES][TEST ] [KRELTSC: 5085335283] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5086263126] COLD: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5087386458] ▶ Testing module: v3/src/test_runner/modules/system_words_tes +[Hera] [HADES][TEST ] [KRELTSC: 5088676866] Testing word: WARM +[Hera] [HADES][TEST ] [KRELTSC: 5089556766] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5090491287] WARM: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5091754437] === System Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 5093157678] +[Hera] === Testing Module: Defining Words === +[Hera] [HADES][INFO ] [KRELTSC: 5094562032] Running Defining Words Tests (Module 13)... +[Hera] [HADES][TEST ] [KRELTSC: 5095754790] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5097099693] Testing word: : +[Hera] [HADES][TEST ] [KRELTSC: 5097969177] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5098904013] Running :.basic: : TEST1 42 ; TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5100639159] Test passed +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5102285958] Expected: Should define and execute +[Hera] [HADES][TEST ] [KRELTSC: 5103401730] Running :.empty_name: : +[Hera] [HADES][TEST ] [KRELTSC: 5104394904] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5106140949] Expected: Should handle empty definition +[Hera] [HADES][TEST ] [KRELTSC: 5107278960] Running :.nested: : TEST3 : ; +[Hera] [HADES][ERROR] [KRELTSC: 5108428017] Nested ':' inside a definition is not allowed +[Hera] [HADES][TEST ] [KRELTSC: 5109596436] Expected error occurred +[Hera] [HADES][TEST ] Testing : ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5111331708] Expected: Should prevent nested definition +[Hera] [HADES][TEST ] [KRELTSC: 5112510459] :: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5113665879] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5115035037] Testing word: ; +[Hera] [HADES][TEST ] [KRELTSC: 5115938583] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5116916406] Running ;.alone: ; +[Hera] [HADES][TEST ] [KRELTSC: 5117863254] Expected error occurred +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5119609173] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5120744643] Running ;.immediate: : TEST4 42 ; IMMEDIATE TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5122535691] Test passed +[Hera] [HADES][TEST ] Testing ; ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5124376362] Expected: Should handle immediate +[Hera] [HADES][TEST ] [KRELTSC: 5125517376] ;: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5126734683] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5128070178] Testing word: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 5129122215] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5130145146] Running CONSTANT.basic: 42 CONSTANT MEANING MEANING . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5132326563] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5134142265] Expected: Should create constant +[Hera] [HADES][TEST ] [KRELTSC: 5135324313] Running CONSTANT.zero: 0 CONSTANT ZERO ZERO . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5137093563] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5138806617] Expected: Should handle zero +[Hera] [HADES][TEST ] [KRELTSC: 5139819615] Running CONSTANT.negative: -1 CONSTANT MINUS MINUS . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5141502282] Test passed +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5143272330] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5144310969] Running CONSTANT.empty_stack: CONSTANT +[Hera] [HADES][TEST ] [KRELTSC: 5145445158] Expected error occurred +[Hera] [HADES][TEST ] Testing CONSTANT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5147240679] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5148373251] CONSTANT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5149523715] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5150806374] Testing word: VARIABLE +[Hera] [HADES][TEST ] [KRELTSC: 5151738921] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5152704543] Running VARIABLE.basic: VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5154720249] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5156441640] Expected: Should create variable +[Hera] [HADES][TEST ] [KRELTSC: 5157508587] Running VARIABLE.multiple: VARIABLE VAR2 VARIABLE VAR3 +[Hera] [HADES][TEST ] [KRELTSC: 5158952022] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5160695757] Expected: Should create multiple +[Hera] [HADES][TEST ] [KRELTSC: 5161726899] Running VARIABLE.store_fetch: VARIABLE VAR4 -99 VAR4 ! VAR4 @ +[Hera] -99 +[Hera] [HADES][TEST ] [KRELTSC: 5163535776] Test passed +[Hera] [HADES][TEST ] Testing VARIABLE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5165269284] Expected: Should store/fetch +[Hera] [HADES][TEST ] [KRELTSC: 5166332094] VARIABLE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5167510950] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5168840901] Testing word: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 5169736761] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5170676322] Running CREATE.basic: CREATE OBJ1 +[Hera] [HADES][TEST ] [KRELTSC: 5171850558] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5173555128] Expected: Should create word +[Hera] [HADES][TEST ] [KRELTSC: 5174557374] Running CREATE.with_data: CREATE OBJ2 42 , OBJ2 @ . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5176281705] Test passed +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5177962734] Expected: Should allow data +[Hera] [HADES][TEST ] [KRELTSC: 5179026615] Running CREATE.empty_name: CREATE +[Hera] [HADES][TEST ] [KRELTSC: 5180103453] Expected error occurred +[Hera] [HADES][TEST ] Testing CREATE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5181917223] Expected: Should handle empty name +[Hera] [HADES][TEST ] [KRELTSC: 5182998072] CREATE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5184162333] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5185540374] Testing word: DOES> +[Hera] [HADES][TEST ] [KRELTSC: 5186433882] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5187368802] Running DOES>.basic: : CONST CREATE , DOES> @ ; 42 CONST MEAN +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5190279024] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5192025930] Expected: Should define behavior +[Hera] [HADES][TEST ] [KRELTSC: 5193079269] Running DOES>.multiple: : ARRAY CREATE DOES> SWAP CELLS + ; C +[Hera] [HADES][TEST ] [KRELTSC: 5194718865] Test passed +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5196419802] Expected: Should work with arrays +[Hera] [HADES][TEST ] [KRELTSC: 5197469172] Running DOES>.outside: DOES> +[Hera] [HADES][ERROR] [KRELTSC: 5198607729] DOES>: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5199488217] Expected error occurred +[Hera] [HADES][TEST ] Testing DOES> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5201263641] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5202386112] DOES>: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5203559760] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5204952228] Testing word: [ +[Hera] [HADES][TEST ] [KRELTSC: 5205837168] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5206784016] Running [.basic: : TEST5 [ 42 ] LITERAL ; TEST5 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5208741762] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5210489886] Expected: Should enter interpret +[Hera] [HADES][TEST ] [KRELTSC: 5211596082] Running [.outside: [ +[Hera] [HADES][TEST ] [KRELTSC: 5212625628] Test passed +[Hera] [HADES][TEST ] Testing [ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5214303486] Expected: Should be allowed outside definition (no error) +[Hera] [HADES][TEST ] [KRELTSC: 5215695135] [: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5216876553] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5218218180] Testing word: ] +[Hera] [HADES][TEST ] [KRELTSC: 5219202870] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5220199761] Running ].basic: [ 42 ] . CR +[Hera] [HADES][TEST ] [KRELTSC: 5221356903] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5223074829] Expected: Should resume compile +[Hera] [HADES][TEST ] [KRELTSC: 5224136988] Running ].nested: : TEST6 [ ] 42 ; TEST6 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5225889060] Test passed +[Hera] [HADES][TEST ] Testing ] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5227671582] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5228743569] ]: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5229996324] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5231366427] Testing word: DEFER +[Hera] [HADES][TEST ] [KRELTSC: 5232279717] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5233192755] Running DEFER.basic: DEFER DF1 : DF1W 42 . CR ; ' DF1W IS DF1 +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5235504288] Test passed +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5237173431] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5238242814] Running DEFER.uninit: DEFER DF2 DF2 +[Hera] [HADES][ERROR] [KRELTSC: 5239485132] DEFER runtime: no target set for 'DF2' +[Hera] [HADES][TEST ] [KRELTSC: 5240647545] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5242622826] Expected: Should error: uninitialized deferred word +[Hera] [HADES][TEST ] [KRELTSC: 5243898324] DEFER: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5245133796] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5246578155] Testing word: IS +[Hera] [HADES][TEST ] [KRELTSC: 5247432771] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5248480356] Running IS.basic: DEFER IS1 : IS1W 99 . CR ; ' IS1W IS IS1 IS +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5250709317] Test passed +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5252461452] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5253524262] Running IS.not_defer: 42 IS DUP +[Hera] [HADES][ERROR] [KRELTSC: 5254751103] IS: 'DUP' was not created by DEFER +[Hera] [HADES][TEST ] [KRELTSC: 5255835354] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5257627557] Expected: Should error: DUP is not a DEFER word +[Hera] [HADES][TEST ] [KRELTSC: 5258919750] Running IS.not_found: 42 IS NOSUCH +[Hera] [HADES][ERROR] [KRELTSC: 5260214085] IS: word 'NOSUCH' not found +[Hera] [HADES][TEST ] [KRELTSC: 5261465181] Expected error occurred +[Hera] [HADES][TEST ] Testing IS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5263242075] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5264627109] IS: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5265749244] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5267104563] Testing word: DEFER@ +[Hera] [HADES][TEST ] [KRELTSC: 5267988747] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5268943029] Running DEFER@.basic: DEFER DFA1 : DFA1W 7 . CR ; ' DFA1W IS +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 5271194418] Test passed +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5272864611] Expected: Should print: -1 +[Hera] [HADES][TEST ] [KRELTSC: 5273876685] Running DEFER@.not_found: DEFER@ NOSUCH2 +[Hera] [HADES][ERROR] [KRELTSC: 5274993864] DEFER@: word 'NOSUCH2' not found +[Hera] [HADES][TEST ] [KRELTSC: 5276074041] Expected error occurred +[Hera] [HADES][TEST ] Testing DEFER@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5277961479] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5279174418] DEFER@: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5280456867] ▶ Testing module: v3/src/test_runner/modules/defining_words_t +[Hera] [HADES][TEST ] [KRELTSC: 5281879806] Testing word: ['] +[Hera] [HADES][TEST ] [KRELTSC: 5282771487] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5283754266] Running ['].compile_xt: : BKT1 ['] DUP ; 77 BKT1 EXECUTE . . +[Hera] 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 5286144906] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5287789815] Expected: Should print: 77 77 +[Hera] [HADES][TEST ] [KRELTSC: 5288792187] Running ['].pin_like: : BKT2 ['] DROP ; 1 2 BKT2 EXECUTE . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5290607889] Test passed +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5292480312] Expected: Should print: 1 +[Hera] [HADES][TEST ] [KRELTSC: 5293493583] Running ['].not_found: : BKT3 ['] NOSUCHWORD ; +[Hera] [HADES][ERROR] [KRELTSC: 5294835504] [']': word 'NOSUCHWORD' not found +[Hera] [HADES][TEST ] [KRELTSC: 5295896445] Expected error occurred +[Hera] [HADES][TEST ] Testing ['] ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5297673192] Expected: Should error: word not found +[Hera] [HADES][TEST ] [KRELTSC: 5298794403] [']: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5299954212] === Defining Words Summary: 0 passed, 0 failed, 0 skipped, 0 er +[Hera] [HADES][INFO ] [KRELTSC: 5301265641] +[Hera] === Testing Module: Control Words === +[Hera] [HADES][INFO ] [KRELTSC: 5302714326] Running Control Words Tests (Module 12)... +[Hera] [HADES][TEST ] [KRELTSC: 5303835999] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5305278993] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 5306165382] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5307114288] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5309664633] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5311345158] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 5312396355] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 5314303134] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5315979207] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 5317044705] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] [HADES][INFO ] [KRELTSC: 5318799486] L8[TABLE]: Config 4 → 5 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5320556241] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5322241848] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5323375743] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5325123384] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5326847169] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5327901873] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 5328951117] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5329941288] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5331735696] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5332914930] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5334102879] Testing word: IF +[Hera] [HADES][TEST ] [KRELTSC: 5334987210] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5336019276] Running IF.true: : TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5337871791] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5339523945] Expected: Should take true branch +[Hera] [HADES][TEST ] [KRELTSC: 5340596184] Running IF.false: : TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR +[Hera] 24 +[Hera] [HADES][TEST ] [KRELTSC: 5342486835] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5344201611] Expected: Should take false branch +[Hera] [HADES][TEST ] [KRELTSC: 5345309823] Running IF.nested: : TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5347185774] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5348860377] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5349908424] Running IF.no_else: : TEST4 IF 42 THEN ; -1 TEST4 . CR +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5351633343] Test passed +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5353293225] Expected: Should work without ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5354352192] Running IF.empty_stack: IF +[Hera] [HADES][ERROR] [KRELTSC: 5355458157] IF: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5356366974] Expected error occurred +[Hera] [HADES][TEST ] Testing IF ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5358261888] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 5359470648] IF: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5360752551] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5362069377] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5362962171] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5363990709] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 5365028571] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5366007150] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5367876213] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5368937196] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5370339723] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 5371244529] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5373060525] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5374178565] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5375408199] Testing word: ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5376289926] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5377250319] Running ELSE.alone: ELSE +[Hera] [HADES][ERROR] [KRELTSC: 5378380014] ELSE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5379301179] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5381168289] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5382267618] Running ELSE.double: : BAD IF 1 ELSE ELSE 2 THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5383631379] ELSE: missing IF +[Hera] [HADES][TEST ] [KRELTSC: 5384522955] Expected error occurred +[Hera] [HADES][TEST ] Testing ELSE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5386283133] Expected: Should prevent double ELSE +[Hera] [HADES][TEST ] [KRELTSC: 5387471418] ELSE: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5388616716] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5389924701] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 5390805357] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5391762117] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 5392911993] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5393894184] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5395674774] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5396735988] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5398059324] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 5398969821] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 5399895774] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5401750641] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 5402899278] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5404114485] Testing word: THEN +[Hera] [HADES][TEST ] [KRELTSC: 5405064126] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5406154215] Running THEN.alone: THEN +[Hera] [HADES][ERROR] [KRELTSC: 5407194681] THEN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5408085921] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5409856200] Expected: Should error outside IF +[Hera] [HADES][TEST ] [KRELTSC: 5410955508] Running THEN.extra: : BAD IF 1 THEN THEN ; +[Hera] [HADES][ERROR] [KRELTSC: 5412261351] CF: underflow +[Hera] [HADES][ERROR] [KRELTSC: 5413088499] THEN: unmatched +[Hera] [HADES][TEST ] [KRELTSC: 5413956051] Expected error occurred +[Hera] [HADES][TEST ] Testing THEN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5415685128] Expected: Should prevent extra THEN +[Hera] [HADES][TEST ] [KRELTSC: 5416850439] THEN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5418110187] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5419473801] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5420442573] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5421388329] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5423746692] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5425504329] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 5426650257] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5429217213] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5431013301] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 5432109249] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 5433223866] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5434128735] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5435965563] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5437103511] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5438244252] Testing word: BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5439122913] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5440184568] Running BEGIN.until: : TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5442233328] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5444013855] Expected: Should loop until true +[Hera] [HADES][TEST ] [KRELTSC: 5445072696] Running BEGIN.while: : TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 5446792890] L8[TABLE]: Config 5 → 6 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5448761514] Test passed +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5450530176] Expected: Should loop while true +[Hera] [HADES][TEST ] [KRELTSC: 5451630702] Running BEGIN.alone: BEGIN +[Hera] [HADES][ERROR] [KRELTSC: 5452685028] BEGIN: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5453610309] Expected error occurred +[Hera] [HADES][TEST ] Testing BEGIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5455359651] Expected: Should error outside definition +[Hera] [HADES][TEST ] [KRELTSC: 5456587521] BEGIN: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5457786516] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5459118966] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 5460094563] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5461076439] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5463339693] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5465134542] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5466216105] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 5467690431] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5469517032] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 5470631670] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 5471942322] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5472908238] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5474780766] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5475911742] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5477130372] Testing word: UNTIL +[Hera] [HADES][TEST ] [KRELTSC: 5478002712] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5478948216] Running UNTIL.basic: : TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5481008883] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5482797663] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5483847390] Running UNTIL.immediate: : TEST9 BEGIN 1 UNTIL ; IMMEDIATE +[Hera] [HADES][TEST ] [KRELTSC: 5485326399] Test passed +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5486995521] Expected: Should be immediate +[Hera] [HADES][TEST ] [KRELTSC: 5488069923] Running UNTIL.no_begin: UNTIL +[Hera] [HADES][ERROR] [KRELTSC: 5489114190] UNTIL: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5490045771] Expected error occurred +[Hera] [HADES][TEST ] Testing UNTIL ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5491935960] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5493011811] UNTIL: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5494200663] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5495494305] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5496389703] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5497340352] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5499426639] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5501154603] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 5502150381] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5503987545] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5505885000] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 5507084898] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 5508195420] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5509108437] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5510891988] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5512014627] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5513181702] Testing word: WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5514164313] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5515145034] Running WHILE.basic: : TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5517302133] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5519067267] Expected: Should count up +[Hera] [HADES][TEST ] [KRELTSC: 5520082890] Running WHILE.zero_times: : TEST11 BEGIN DUP 0< WHILE 1+ REPE +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5521923330] Test passed +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5523654108] Expected: Should handle zero iterations +[Hera] [HADES][TEST ] [KRELTSC: 5524850457] Running WHILE.no_begin: WHILE +[Hera] [HADES][ERROR] [KRELTSC: 5525897790] WHILE: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5526834558] Expected error occurred +[Hera] [HADES][TEST ] Testing WHILE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5528619558] Expected: Should error without BEGIN +[Hera] [HADES][TEST ] [KRELTSC: 5529742659] WHILE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5530909692] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5532351069] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 5533268370] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5534193798] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] [HADES][INFO ] [KRELTSC: 5535785703] L8[TABLE]: Config 6 → 7 regime=7 score=26214 L1=0 L2=0 L3=0 L +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5537699832] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5539380882] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 5540456271] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 5541577587] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5542505661] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5544468153] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5545548918] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5546700096] Testing word: REPEAT +[Hera] [HADES][TEST ] [KRELTSC: 5547741444] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5548762863] Running REPEAT.basic: : TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5550928824] Test passed +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5552726487] Expected: Should terminate loop +[Hera] [HADES][TEST ] [KRELTSC: 5553782346] Running REPEAT.no_while: REPEAT +[Hera] [HADES][ERROR] [KRELTSC: 5554812816] REPEAT: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5555766615] Expected error occurred +[Hera] [HADES][TEST ] Testing REPEAT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5557612557] Expected: Should error without WHILE +[Hera] [HADES][TEST ] [KRELTSC: 5558707098] REPEAT: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5559873837] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5561273361] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 5562166218] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5563109286] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5565739725] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5567452233] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5568524766] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 5570590872] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5572244286] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5573284248] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5574686649] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5576365662] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 5577442416] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5579736309] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5581518264] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5582538885] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5583676224] Testing word: DO +[Hera] [HADES][TEST ] [KRELTSC: 5584516518] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5585520822] Running DO.basic: : TEST13 5 0 DO I . LOOP ; TEST13 CR +[Hera] 0 1 2 3 [HADES][INFO ] [KRELTSC: 5587557633] L8[TABLE]: Config 7 → 8 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5588953293] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5590697595] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5591729577] Running DO.negative: : TEST14 -1 -5 DO I . LOOP ; TEST14 CR +[Hera] -5 -4 -3 -2 +[Hera] [HADES][TEST ] [KRELTSC: 5593815654] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5595557562] Expected: Should handle negative +[Hera] [HADES][TEST ] [KRELTSC: 5596615962] Running DO.empty: : TEST15 0 0 DO LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5597935371] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5599615791] Expected: Should handle empty range +[Hera] [HADES][TEST ] [KRELTSC: 5600765478] Running DO.nested: : TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; +[Hera] 0 1 2 1 2 3 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5603109351] Test passed +[Hera] [HADES][TEST ] Testing DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5604917052] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5605935384] DO: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5607129129] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5608448118] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 5609353323] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5610311196] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5612720421] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5614355586] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5615398761] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5616838479] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5618488596] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 5619666927] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5621794773] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5623479855] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5624528154] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5625682419] Testing word: ?DO +[Hera] [HADES][TEST ] [KRELTSC: 5626554717] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5627557173] Running ?DO.basic: : TEST17 5 0 ?DO I . LOOP ; TEST17 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5629541190] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5631159177] Expected: Should count 0 to 4 +[Hera] [HADES][TEST ] [KRELTSC: 5632403805] Running ?DO.skip: : TEST18 1 1 ?DO I . LOOP ; +[Hera] [HADES][TEST ] [KRELTSC: 5633821221] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5635500255] Expected: Should skip when equal +[Hera] [HADES][TEST ] [KRELTSC: 5636552586] Running ?DO.nested: : TEST19 3 0 ?DO 3 I ?DO J I + . LOOP LOO +[Hera] [HADES][INFO ] [KRELTSC: 5638224396] L8[TABLE]: Config 8 → 9 regime=7 score=6553 L1=0 L2=0 L3=0 L4 +[Hera] 0 1 2 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5640278847] Test passed +[Hera] [HADES][TEST ] Testing ?DO ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5641956684] Expected: Should handle nesting +[Hera] [HADES][TEST ] [KRELTSC: 5643033921] ?DO: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5644324035] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5645647980] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5646553458] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5647479663] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5649403683] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5651124549] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 5652195192] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 5653264596] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5654134941] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5656003374] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 5657174397] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5658342732] Testing word: LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5659325364] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5660248440] Running LOOP.basic: : TEST20 5 0 DO I . LOOP ; TEST20 CR +[Hera] 0 1 2 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5662275150] Test passed +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5663950467] Expected: Should increment by 1 +[Hera] [HADES][TEST ] [KRELTSC: 5665003596] Running LOOP.no_do: LOOP +[Hera] [HADES][ERROR] [KRELTSC: 5665959033] LOOP: compile-only +[Hera] [HADES][TEST ] [KRELTSC: 5666898594] Expected error occurred +[Hera] [HADES][TEST ] Testing LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5668650897] Expected: Should error without DO +[Hera] [HADES][TEST ] [KRELTSC: 5669819232] LOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5671043112] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5672450700] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5673410232] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5674363149] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 5677042644] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5678813931] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 5679980376] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 5682330822] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5684136339] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5685134595] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 5687265339] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5688948195] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 5690005965] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5691143850] Testing word: +LOOP +[Hera] [HADES][TEST ] [KRELTSC: 5692036245] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5692978305] Running +LOOP.basic: : TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR +[Hera] [HADES][INFO ] [KRELTSC: 5694728487] L8[TABLE]: Config 9 → 10 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 0 2 4 6 8 +[Hera] [HADES][TEST ] [KRELTSC: 5696595660] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5698377657] Expected: Should count by 2 +[Hera] [HADES][TEST ] [KRELTSC: 5699496684] Running +LOOP.negative: : TEST22 0 10 DO I . -1 +LOOP ; TEST2 +[Hera] 10 9 8 7 6 5 4 3 2 1 0 +[Hera] [HADES][TEST ] [KRELTSC: 5701741227] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5703499998] Expected: Should count down +[Hera] [HADES][TEST ] [KRELTSC: 5704582863] Running +LOOP.variable: : TEST23 10 0 DO I . DUP +LOOP ; 3 TE +[Hera] 0 3 6 9 +[Hera] [HADES][TEST ] [KRELTSC: 5706627381] Test passed +[Hera] [HADES][TEST ] Testing +LOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5708508099] Expected: Should use stack value +[Hera] [HADES][TEST ] [KRELTSC: 5709627084] +LOOP: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5710845756] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5712229005] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 5713105020] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5714106972] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5716529511] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5718273456] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5719316820] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5721431541] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5723135208] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5724307491] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5726401359] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5728116870] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5729196333] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5731205529] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5733008085] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5734081689] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5735267580] Testing word: I +[Hera] [HADES][TEST ] [KRELTSC: 5736178161] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5737214364] Running I.basic: : TI 4 0 DO I . LOOP CR ; TI +[Hera] 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5739260184] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5740942977] Expected: Should print: 0 1 2 3 +[Hera] [HADES][TEST ] [KRELTSC: 5742088212] Running I.single: : TI1 1 0 DO I . LOOP CR ; TI1 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 5743983126] L8[TABLE]: Config 10 → 11 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 5745499536] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5747158830] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5748162420] Running I.offset: : TI2 5 3 DO I . LOOP CR ; TI2 +[Hera] 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5749936479] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5751558456] Expected: Should print: 3 4 +[Hera] [HADES][TEST ] [KRELTSC: 5752544889] Running I.in_expr: : TI3 3 0 DO I 2 * . LOOP CR ; TI3 +[Hera] 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5754400155] Test passed +[Hera] [HADES][TEST ] Testing I ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5756106783] Expected: Should print: 0 2 4 +[Hera] [HADES][TEST ] [KRELTSC: 5757139038] I: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5758359243] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5759689152] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 5760541710] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5761474698] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5763862713] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5765524863] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5766729885] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5769071343] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5770951998] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5772076632] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5773220187] Testing word: J +[Hera] [HADES][TEST ] [KRELTSC: 5774077806] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5774996157] Running J.basic: : TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ +[Hera] 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5777249415] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5778944955] Expected: Should print: 0 0 0 1 1 1 +[Hera] [HADES][TEST ] [KRELTSC: 5780037018] Running J.paired: : TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; +[Hera] 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5782228956] Test passed +[Hera] [HADES][TEST ] Testing J ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5783967714] Expected: Should print: 0 1 1 2 +[Hera] [HADES][TEST ] [KRELTSC: 5785103457] J: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5786194323] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5787486810] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 5788344555] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5789313978] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5791090809] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5792795526] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 5793892125] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] [HADES][INFO ] [KRELTSC: 5795720931] L8[TABLE]: Config 11 → 12 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5797536297] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5799314640] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5800366530] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5802321567] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5804084622] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 5805149259] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5807015886] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5808851055] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5809885515] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5811013488] Testing word: EXIT +[Hera] [HADES][TEST ] [KRELTSC: 5811926589] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5812941729] Running EXIT.early_return: : TEX 5 EXIT 99 ; TEX . CR +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 5815122978] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5816856570] Expected: Should print: 5 +[Hera] [HADES][TEST ] [KRELTSC: 5817884184] Running EXIT.cond_exit_pos: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5819870007] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5821720611] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5822755722] Running EXIT.cond_exit_neg: : TEX2 DUP 0> IF EXIT THEN NEGATE +[Hera] 4 +[Hera] [HADES][TEST ] [KRELTSC: 5824624764] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5826452688] Expected: Should print: 4 +[Hera] [HADES][TEST ] [KRELTSC: 5827465098] Running EXIT.no_skipped: : TEX3 1 2 EXIT 3 ; TEX3 . . CR +[Hera] 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5829340251] Test passed +[Hera] [HADES][TEST ] Testing EXIT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5831112567] Expected: Should print: 2 1 +[Hera] [HADES][TEST ] [KRELTSC: 5832166389] EXIT: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5833500729] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5834933811] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 5835900126] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5836885215] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5839439277] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5841130302] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5842111464] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5843955327] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5845687155] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5846685516] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5848678542] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5850369126] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 5851453335] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5852646051] Testing word: LEAVE +[Hera] [HADES][TEST ] [KRELTSC: 5853515325] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5854447074] Running LEAVE.basic: : TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LO +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5856520866] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5858366430] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5859342531] Running LEAVE.at_start: : TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 +[Hera] [HADES][INFO ] [KRELTSC: 5860959951] L8[TABLE]: Config 12 → 13 regime=7 score=6553 L1=0 L2=0 L3=0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5862699570] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5864345802] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5865344142] Running LEAVE.qdloop: : TLV3 0 5 0 ?DO I 2 = IF LEAVE THEN 1+ +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 5867314320] Test passed +[Hera] [HADES][TEST ] Testing LEAVE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5869054170] Expected: Should print: 2 +[Hera] [HADES][TEST ] [KRELTSC: 5870023362] LEAVE: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5871310074] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5872621062] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 5873497518] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5874443169] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5876505411] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5878184403] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5879182197] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5881208382] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5883023202] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5884165875] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5885380431] Testing word: UNLOOP +[Hera] [HADES][TEST ] [KRELTSC: 5886345675] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5887357203] Running UNLOOP.early_exit: : TUL 5 0 DO I 2 = IF UNLOOP 42 EX +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 5889503718] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5891308248] Expected: Should print: 42 +[Hera] [HADES][TEST ] [KRELTSC: 5892353208] Running UNLOOP.full_loop: : TUL2 5 0 DO I 9 = IF UNLOOP 77 EX +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5894724801] Test passed +[Hera] [HADES][TEST ] Testing UNLOOP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5896586430] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5897580843] UNLOOP: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5898717573] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5900059305] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 5900939352] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5901887418] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 [HADES][INFO ] [KRELTSC: 5904199917] L8[TABLE]: Config 13 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 + +[Hera] [HADES][TEST ] [KRELTSC: 5905302417] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5906987982] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5907953667] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5910088107] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5911869201] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5912890935] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5914046292] Testing word: AGAIN +[Hera] [HADES][TEST ] [KRELTSC: 5914979847] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5915924196] Running AGAIN.basic: : TAG 0 BEGIN 1+ DUP 3 = IF EXIT THEN AG +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 5917870602] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5919514923] Expected: Should print: 3 +[Hera] [HADES][TEST ] [KRELTSC: 5920507278] Running AGAIN.countdown: : CD 10 BEGIN 1- DUP 0= IF EXIT THEN +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 5922651420] Test passed +[Hera] [HADES][TEST ] Testing AGAIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5924344650] Expected: Should print: 0 +[Hera] [HADES][TEST ] [KRELTSC: 5925344166] AGAIN: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5926503429] ▶ Testing module: v3/src/test_runner/modules/control_words_te +[Hera] [HADES][TEST ] [KRELTSC: 5927823279] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 5928740034] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5929733208] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 5932581060] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5934476940] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 5935574484] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 5937726858] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5939492937] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 5940563664] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][INFO ] [KRELTSC: 5943128142] L8[TABLE]: Config 14 → 0 regime=6 score=26214 L1=0 L2=0 L3=0 +[Hera] [HADES][TEST ] [KRELTSC: 5944532916] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5946390912] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5947414599] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 5949682095] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5951458338] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 5952512160] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 5954778963] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5956524231] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 5957581245] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5958858339] Testing word: CASE +[Hera] [HADES][TEST ] [KRELTSC: 5959728012] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5960693844] Running CASE.match_1: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 10 +[Hera] [HADES][TEST ] [KRELTSC: 5962888932] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5964586803] Expected: Should print: 10 +[Hera] [HADES][TEST ] [KRELTSC: 5965619079] Running CASE.match_2: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 5967724896] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5969484570] Expected: Should print: 20 +[Hera] [HADES][TEST ] [KRELTSC: 5970515082] Running CASE.default: : TC CASE 1 OF 10 ENDOF 2 OF 20 ENDOF 9 +[Hera] 99 +[Hera] [HADES][TEST ] [KRELTSC: 5972901060] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5974585239] Expected: Should print: 99 +[Hera] [HADES][TEST ] [KRELTSC: 5975667096] Running CASE.zero_case: : TC CASE 0 OF 88 ENDOF 1 OF 77 ENDOF +[Hera] 88 +[Hera] [HADES][TEST ] [KRELTSC: 5977974807] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5979673308] Expected: Should print: 88 +[Hera] [HADES][TEST ] [KRELTSC: 5980686915] Running CASE.neg_case: : TC CASE -1 OF 55 ENDOF 44 SWAP ENDCA +[Hera] 55 +[Hera] [HADES][TEST ] [KRELTSC: 5982817260] Test passed +[Hera] [HADES][TEST ] Testing CASE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5984654424] Expected: Should print: 55 +[Hera] [HADES][TEST ] [KRELTSC: 5985710913] CASE: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 5986899870] === Control Words Summary: 0 passed, 0 failed, 0 skipped, 0 err +[Hera] [HADES][INFO ] [KRELTSC: 5988245718] +[Hera] === Testing Module: StarForth Words === +[Hera] [HADES][INFO ] [KRELTSC: 5989621575] Running StarForth Words Tests (Module 17: StarForth Extensions) +[Hera] [HADES][TEST ] [KRELTSC: 5990969523] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 5992320663] Testing word: ENTROPY@ +[Hera] [HADES][TEST ] [KRELTSC: 5993230761] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 5994266922] Running ENTROPY@.after_execution: : TESTWORD 1 1 + DROP ; TES +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 5996474673] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 5998159524] Expected: Should show execution count > 0 +[Hera] [HADES][TEST ] [KRELTSC: 5999346612] Running ENTROPY@.zero_initial: : NEWWORD ; ' NEWWORD ENTROPY@ +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6001184049] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6002947818] Expected: Should show 0 for unused word +[Hera] [HADES][TEST ] [KRELTSC: 6004057227] Running ENTROPY@.multiple_calls: : ENTTEST 1 DROP ; ENTTEST E +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6005925156] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6007673889] Expected: Should increment with each call +[Hera] [HADES][TEST ] [KRELTSC: 6008993949] Running ENTROPY@.null_addr: 0 ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 6010246452] ENTROPY@: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 6011271672] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6013169547] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 6014240064] Running ENTROPY@.empty_stack: ENTROPY@ +[Hera] [HADES][ERROR] [KRELTSC: 6015455208] ENTROPY@: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6016444854] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6018228153] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6019341552] ENTROPY@: 5 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6020580636] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6022092069] Testing word: ENTROPY! +[Hera] [HADES][TEST ] [KRELTSC: 6023002545] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6024113445] Running ENTROPY!.set_entropy: : ENTSET ; 42 ' ENTSET ENTROPY! +[Hera] 42 +[Hera] [HADES][TEST ] [KRELTSC: 6026281128] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6027994707] Expected: Should set entropy to 42 +[Hera] [HADES][TEST ] [KRELTSC: 6029039751] Running ENTROPY!.overwrite: : ENTOV ; 10 ' ENTOV ENTROPY! 20 +[Hera] [HADES][INFO ] [KRELTSC: 6030639363] L8[TABLE]: Config 0 → 14 regime=7 score=6553 L1=0 L2=0 L3=0 L +[Hera] 20 +[Hera] [HADES][TEST ] [KRELTSC: 6032413212] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6034276479] Expected: Should overwrite previous value +[Hera] [HADES][TEST ] [KRELTSC: 6035447019] Running ENTROPY!.zero_entropy: : ENTZERO ; 0 ' ENTZERO ENTROP +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6037271268] Test passed +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6039004860] Expected: Should set entropy to 0 +[Hera] [HADES][TEST ] [KRELTSC: 6040065003] Running ENTROPY!.null_addr: 42 0 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 6041245098] ENTROPY!: null dictionary entry +[Hera] [HADES][TEST ] [KRELTSC: 6042253644] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6044147739] Expected: Should handle null address +[Hera] [HADES][TEST ] [KRELTSC: 6045290223] Running ENTROPY!.one_arg: 42 ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 6046482939] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6047584200] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6049476552] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6050576028] Running ENTROPY!.empty_stack: ENTROPY! +[Hera] [HADES][ERROR] [KRELTSC: 6051681321] ENTROPY!: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6052696251] Expected error occurred +[Hera] [HADES][TEST ] Testing ENTROPY! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6054498954] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6055722141] ENTROPY!: 6 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6056923509] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6058186344] Testing word: WORD-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 6059164188] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6060200832] Running WORD-ENTROPY.display_all: 1 DUP DUP DUP DROP DROP DRO +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 1 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 119 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 305 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 121 + +[Hera] :: 129 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 135 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 51 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6817 + +[Hera] Total words: 516 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 6145255326] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6146992131] Expected: Should display all word entropy stats +[Hera] [HADES][TEST ] [KRELTSC: 6148378257] Running WORD-ENTROPY.after_execution: : WDENT 1 2 + DROP ; WD +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 2 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 79 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6834 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] [HADES][TEST ] [KRELTSC: 6233163216] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6234991770] Expected: Should show defined word entropy +[Hera] [HADES][TEST ] [KRELTSC: 6236244378] Running WORD-ENTROPY.stack_preserved: DEPTH WORD-ENTROPY DEPT +[Hera] Word Usage Statistics (Execution Heat Counts): + +[Hera] ============================================= + +[Hera] WDENT: 2 + +[Hera] DEFER@: 2 + +[Hera] IS: 5 + +[Hera] DEFER: 4 + +[Hera] WORD-ENTROPY: 3 + +[Hera] ENTROPY!: 7 + +[Hera] ENTROPY@: 8 + +[Hera] ENDCASE: 10 + +[Hera] ENDOF: 18 + +[Hera] OF: 18 + +[Hera] CASE: 10 + +[Hera] EXIT: 121 + +[Hera] UNLOOP: 6 + +[Hera] J: 58 + +[Hera] I: 212 + +[Hera] LEAVE: 6 + +[Hera] +LOOP: 6 + +[Hera] LOOP: 48 + +[Hera] DO: 42 + +[Hera] ?DO: 10 + +[Hera] UNTIL: 8 + +[Hera] AGAIN: 4 + +[Hera] REPEAT: 10 + +[Hera] WHILE: 10 + +[Hera] BEGIN: 20 + +[Hera] THEN: 32 + +[Hera] ELSE: 14 + +[Hera] IF: 32 + +[Hera] (LEAVE): 6 + +[Hera] (+LOOP): 40 + +[Hera] (LOOP): 152 + +[Hera] (DO): 48 + +[Hera] (?DO): 12 + +[Hera] (0BRANCH): 142 + +[Hera] (BRANCH): 72 + +[Hera] DOES>: 3 + +[Hera] does_rt: 1 + +[Hera] LITERAL: 1 + +[Hera] LIT: 309 + +[Hera] FENCE: 3 + +[Hera] FORGET: 7 + +[Hera] ]: 3 + +[Hera] [: 4 + +[Hera] IMMEDIATE: 6 + +[Hera] CONSTANT: 4 + +[Hera] VARIABLE: 5 + +[Hera] CREATE: 23 + +[Hera] ;: 122 + +[Hera] :: 130 + +[Hera] ABORT": 3 + +[Hera] ABORT: 4 + +[Hera] QUIT: 1 + +[Hera] EXECUTE: 2 + +[Hera] ORDER: 3 + +[Hera] FORTH: 10 + +[Hera] CURRENT: 4 + +[Hera] CONTEXT: 5 + +[Hera] DEFINITIONS: 15 + +[Hera] VOCABULARY: 15 + +[Hera] ': 16 + +[Hera] FIND: 4 + +[Hera] >BODY: 2 + +[Hera] HIDDEN: 2 + +[Hera] SMUDGE: 2 + +[Hera] LATEST: 7 + +[Hera] SP@: 8 + +[Hera] SP!: 5 + +[Hera] PAD: 15 + +[Hera] 2,: 7 + +[Hera] C,: 10 + +[Hera] ,: 21 + +[Hera] ALLOT: 9 + +[Hera] ALIGN: 1 + +[Hera] HERE: 109 + +[Hera] SCR: 3 + +[Hera] THRU: 17 + +[Hera] LIST: 5 + +[Hera] LOAD: 5 + +[Hera] FLUSH: 3 + +[Hera] EMPTY-BUFFERS: 4 + +[Hera] SAVE-BUFFERS: 3 + +[Hera] UPDATE: 7 + +[Hera] BUFFER: 4 + +[Hera] BLOCK: 12 + +[Hera] SPACES: 10 + +[Hera] SPACE: 7 + +[Hera] TYPE: 43 + +[Hera] CR: 659 + +[Hera] EMIT: 15 + +[Hera] BLANK: 2 + +[Hera] SKIP: 4 + +[Hera] SCAN: 5 + +[Hera] SEARCH: 4 + +[Hera] COMPARE: 5 + +[Hera] CMOVE>: 4 + +[Hera] CMOVE: 6 + +[Hera] -TRAILING: 4 + +[Hera] LITERAL: 1 + +[Hera] [']: 3 + +[Hera] BL: 19 + +[Hera] SOURCE: 2 + +[Hera] >IN: 5 + +[Hera] S": 37 + +[Hera] (s"): 4 + +[Hera] WORD: 15 + +[Hera] SPAN: 4 + +[Hera] EXPECT: 4 + +[Hera] COUNT: 14 + +[Hera] OCTAL: 6 + +[Hera] HEX: 7 + +[Hera] DECIMAL: 14 + +[Hera] BASE: 9 + +[Hera] SIGN: 3 + +[Hera] HOLD: 2 + +[Hera] #>: 16 + +[Hera] #S: 11 + +[Hera] #: 5 + +[Hera] <#: 17 + +[Hera] .: 901 + +[Hera] D2/: 5 + +[Hera] D2*: 5 + +[Hera] D0<: 7 + +[Hera] D0=: 7 + +[Hera] 2R@: 3 + +[Hera] 2R>: 7 + +[Hera] 2>R: 7 + +[Hera] 2ROT: 6 + +[Hera] 2OVER: 6 + +[Hera] 2SWAP: 7 + +[Hera] 2DUP: 6 + +[Hera] 2DROP: 6 + +[Hera] D=: 7 + +[Hera] D<: 8 + +[Hera] DMIN: 6 + +[Hera] DMAX: 6 + +[Hera] DABS: 7 + +[Hera] DNEGATE: 6 + +[Hera] D-: 8 + +[Hera] D+: 7 + +[Hera] S>D: 7 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] M/MOD: 7 + +[Hera] M*: 8 + +[Hera] M+: 7 + +[Hera] FALSE: 18 + +[Hera] TRUE: 30 + +[Hera] WITHIN: 31 + +[Hera] U>: 25 + +[Hera] U<: 25 + +[Hera] <=: 31 + +[Hera] >=: 31 + +[Hera] >: 30 + +[Hera] <: 74 + +[Hera] <>: 26 + +[Hera] =: 176 + +[Hera] 0<>: 22 + +[Hera] 0>: 27 + +[Hera] 0<: 24 + +[Hera] 0=: 66 + +[Hera] NOT: 18 + +[Hera] XOR: 32 + +[Hera] OR: 22 + +[Hera] AND: 43 + +[Hera] MAX: 26 + +[Hera] MIN: 4 + +[Hera] NEGATE: 30 + +[Hera] ABS: 25 + +[Hera] 2/: 31 + +[Hera] 2*: 31 + +[Hera] 2-: 10 + +[Hera] 2+: 19 + +[Hera] 1-: 79 + +[Hera] 1+: 84 + +[Hera] */MOD: 8 + +[Hera] */: 10 + +[Hera] /MOD: 20 + +[Hera] MOD: 38 + +[Hera] /: 35 + +[Hera] *: 50 + +[Hera] -: 34 + +[Hera] +: 138 + +[Hera] CELLS: 18 + +[Hera] ERASE: 11 + +[Hera] MOVE: 11 + +[Hera] FILL: 23 + +[Hera] 2!: 17 + +[Hera] 2@: 14 + +[Hera] -!: 17 + +[Hera] +!: 35 + +[Hera] C!: 51 + +[Hera] C@: 97 + +[Hera] !: 111 + +[Hera] @: 182 + +[Hera] R@: 47 + +[Hera] R>: 64 + +[Hera] >R: 66 + +[Hera] ROLL: 10 + +[Hera] PICK: 16 + +[Hera] DEPTH: 80 + +[Hera] -ROT: 18 + +[Hera] ROT: 31 + +[Hera] OVER: 52 + +[Hera] SWAP: 41 + +[Hera] DUP: 144 + +[Hera] DROP: 54 + +[Hera] ------------------------------------- + +[Hera] Total executions: 6836 + +[Hera] Total words: 517 + +[Hera] Average executions per word: 13 + +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6321236166] Test passed +[Hera] [HADES][TEST ] Testing WORD-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6322989183] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 6324156867] WORD-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6325369008] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6326695914] Testing word: RESET-ENTROPY +[Hera] [HADES][TEST ] [KRELTSC: 6327731403] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6328737093] Running RESET-ENTROPY.reset_defined: : RESETTEST 1 DROP ; RES +[Hera] [HADES][TEST ] [KRELTSC: 6330701706] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6332455941] Expected: Should reset all entropy counters +[Hera] [HADES][TEST ] [KRELTSC: 6333632718] Running RESET-ENTROPY.double_reset: RESET-ENTROPY RESET-ENTRO +[Hera] [HADES][TEST ] [KRELTSC: 6334950720] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6336765708] Expected: Should handle multiple resets +[Hera] [HADES][TEST ] [KRELTSC: 6337908633] Running RESET-ENTROPY.after_usage: 1 DUP DUP DUP DROP DROP DR +[Hera] [HADES][TEST ] [KRELTSC: 6339297951] Test passed +[Hera] [HADES][TEST ] Testing RESET-ENTROPY ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6341057982] Expected: Should reset after word usage +[Hera] [HADES][TEST ] [KRELTSC: 6342209454] RESET-ENTROPY: 3 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6343451037] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6344742285] Testing word: TOP-WORDS +[Hera] [HADES][TEST ] [KRELTSC: 6345681636] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6346639614] Running TOP-WORDS.display_top5: : TOPTEST 1 DROP ; TOPTEST TO +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6352234560] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6353962146] Expected: Should display top 5 hot words +[Hera] [HADES][TEST ] [KRELTSC: 6355085394] Running TOP-WORDS.display_top10: 10 TOP-WORDS +[Hera] Top 10 most frequently used words: + +[Hera] ================================== + +[Hera] 1. DROP: 6 + +[Hera] 2. TOPTEST: 5 + +[Hera] 3. EXIT: 5 + +[Hera] 4. LIT: 5 + +[Hera] 5. TOP-WORDS: 2 + +[Hera] 6. ;: 1 + +[Hera] 7. :: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6360446841] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6362640312] Expected: Should display top 10 words +[Hera] [HADES][TEST ] [KRELTSC: 6363739011] Running TOP-WORDS.after_reset: RESET-ENTROPY 5 TOP-WORDS +[Hera] Top 5 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 1 + +[Hera] [HADES][TEST ] [KRELTSC: 6366840753] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6368610675] Expected: Should handle display after reset +[Hera] [HADES][TEST ] [KRELTSC: 6369804798] Running TOP-WORDS.single_word: 1 TOP-WORDS +[Hera] Top 1 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 2 + +[Hera] [HADES][TEST ] [KRELTSC: 6372769620] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6374696958] Expected: Should display top 1 word +[Hera] [HADES][TEST ] [KRELTSC: 6375822873] Running TOP-WORDS.large_count: 100 TOP-WORDS +[Hera] Top 100 most frequently used words: + +[Hera] ================================== + +[Hera] 1. TOP-WORDS: 3 + +[Hera] [HADES][TEST ] [KRELTSC: 6378872220] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6380609550] Expected: Should handle large count +[Hera] [HADES][TEST ] [KRELTSC: 6381738720] Running TOP-WORDS.zero_count: 0 TOP-WORDS +[Hera] TOP-WORDS: invalid count 0 + +[Hera] [HADES][TEST ] [KRELTSC: 6383519268] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6385298745] Expected: Should handle zero count +[Hera] [HADES][TEST ] [KRELTSC: 6386567460] Running TOP-WORDS.negative_count: -5 TOP-WORDS +[Hera] TOP-WORDS: invalid count -5 + +[Hera] [HADES][TEST ] [KRELTSC: 6388484361] Test passed +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6390228075] Expected: Should handle negative count +[Hera] [HADES][TEST ] [KRELTSC: 6391382508] Running TOP-WORDS.empty_stack: TOP-WORDS +[Hera] [HADES][ERROR] [KRELTSC: 6392583981] TOP-WORDS: data stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6393599142] Expected error occurred +[Hera] [HADES][TEST ] Testing TOP-WORDS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6395460771] Expected: Should cause stack underflow +[Hera] [HADES][TEST ] [KRELTSC: 6396585006] TOP-WORDS: 8 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6397760439] ▶ Testing module: v3/src/test_runner/modules/starforth_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6399150429] Testing word: (- +[Hera] [HADES][TEST ] [KRELTSC: 6400101162] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6401149230] Running (-.comment_line: (- This is a comment +[Hera] 1 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6402993408] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6403973394] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6405600873] Expected: Should ignore rest of line +[Hera] [HADES][TEST ] [KRELTSC: 6406698270] Running (-.mid_line: 1 (- comment here +[Hera] 2 + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6408188010] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6409150776] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6410777142] Expected: Should work mid-expression +[Hera] [HADES][TEST ] [KRELTSC: 6411978594] Running (-.no_stack_effect: DEPTH (- comment +[Hera] DEPTH = . CR +[Hera] [HADES][WARN ] [KRELTSC: 6413634864] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6414607773] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6416254656] Expected: Should not affect stack +[Hera] [HADES][TEST ] [KRELTSC: 6417310998] Running (-.multiple: 1 (- first +[Hera] 2 (- second +[Hera] + . CR +[Hera] [HADES][WARN ] [KRELTSC: 6419128086] (- comment not terminated +[Hera] [HADES][TEST ] [KRELTSC: 6420107547] Test passed +[Hera] [HADES][TEST ] Testing (- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6421732044] Expected: Should handle multiple comments +[Hera] [HADES][TEST ] [KRELTSC: 6422852709] (-: 4 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6424129656] === StarForth Words Summary: 0 passed, 0 failed, 0 skipped, 0 e +[Hera] [HADES][INFO ] [KRELTSC: 6425440182] +[Hera] === Testing Module: ACL Words === +[Hera] [HADES][INFO ] [KRELTSC: 6426888006] Running ACL Words Tests (Module 24)... +[Hera] [HADES][WARN ] [KRELTSC: 6430064109] ACL: denied '__acl_deny_test__' +[Hera] [HADES][INFO ] [KRELTSC: 6432346704] SKIP: STRICT mode test (ACL.4th not loaded) +[Hera] [HADES][INFO ] [KRELTSC: 6434086554] SKIP: ACL-TTL-COMPUTE (ACL.4th not loaded) +[Hera] [HADES][WARN ] [KRELTSC: 6435773001] vm_create_word: cannot shadow pinned word '__acl_shadow_target_ +[Hera] [HADES][TEST ] [KRELTSC: 6439532610] === ACL Words Summary: 29 passed, 0 failed, 0 skipped, 0 errors +[Hera] [HADES][INFO ] [KRELTSC: 6441112356] +[Hera] === Testing Module: Mama FORTH Words === +[Hera] [HADES][INFO ] [KRELTSC: 6442516269] Running Mama FORTH Words Tests (Capsule System M7.1)... +[Hera] [HADES][TEST ] [KRELTSC: 6443847900] Testing word: CAPSULE-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 6444937569] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6445934376] CAPSULE-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6447287574] Testing word: CAPSULE@ +[Hera] [HADES][TEST ] [KRELTSC: 6448225413] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6449263359] CAPSULE@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6450442509] Testing word: CAPSULE-FLAGS@ +[Hera] [HADES][TEST ] [KRELTSC: 6451444020] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6452436438] CAPSULE-FLAGS@: 0 passed, 0 failed, 3 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6453752634] Testing word: CAPSULE-LEN@ +[Hera] [HADES][TEST ] [KRELTSC: 6454731318] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6455741922] CAPSULE-LEN@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6456971304] Testing word: CAPSULE-HASH@ +[Hera] [HADES][TEST ] [KRELTSC: 6457975902] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6458967480] CAPSULE-HASH@: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6460174329] Testing word: MAMA-VM-ID +[Hera] [HADES][TEST ] [KRELTSC: 6461111664] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6462129450] MAMA-VM-ID: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6463335795] Testing word: VM-COUNT +[Hera] [HADES][TEST ] [KRELTSC: 6464255553] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6465200553] VM-COUNT: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6466377708] Testing word: CAPSULE-BIRTH +[Hera] [HADES][TEST ] [KRELTSC: 6467364015] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6468300237] CAPSULE-BIRTH: 0 passed, 0 failed, 2 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6469532034] Testing word: CAPSULE-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6470531508] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6471490536] CAPSULE-RUN: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6472733190] Testing word: CAPSULE-TEST +[Hera] [HADES][TEST ] [KRELTSC: 6473696145] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6474751794] CAPSULE-TEST: 0 passed, 0 failed, 1 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6476044260] === Mama FORTH Words Summary: 0 passed, 0 failed, 0 skipped, 0 +[Hera] [HADES][INFO ] [KRELTSC: 6477366084] +[Hera] === Testing Module: Q48.16 Words === +[Hera] [HADES][INFO ] [KRELTSC: 6478758720] Running Q48.16 Words Tests (Module 25)... +[Hera] [HADES][TEST ] [KRELTSC: 6479928693] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6481259274] Testing word: Q.+ +[Hera] [HADES][TEST ] [KRELTSC: 6482152089] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6483137766] Running Q.+.basic: 1 Q.FROM-INT 2 Q.FROM-INT Q.+ Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6485022684] Test passed +[Hera] [HADES][TEST ] Testing Q.+ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6486885930] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6490004031] Q.+: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6491290659] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6492644781] Testing word: Q.- +[Hera] [HADES][TEST ] [KRELTSC: 6493541859] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6494515461] Running Q.-.basic: 5 Q.FROM-INT 2 Q.FROM-INT Q.- Q.TO-INT . C +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6496348362] Test passed +[Hera] [HADES][TEST ] Testing Q.- ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6497987559] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][INFO ] [KRELTSC: 6500435655] L8[TABLE]: Config 14 → 0 regime=3 score=26214 L1=0 L2=0 L3=0 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6502615413] Q.-: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6503774634] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6505066197] Testing word: Q.* +[Hera] [HADES][TEST ] [KRELTSC: 6505926903] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6506861067] Running Q.*.basic: 3 Q.FROM-INT 4 Q.FROM-INT Q.* Q.TO-INT . C +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 6508608771] Test passed +[Hera] [HADES][TEST ] Testing Q.* ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6510270795] Expected: Should print: 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] 12 +[Hera] [HADES][TEST ] [KRELTSC: 6513427326] Q.*: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6514611369] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6515917800] Testing word: Q./ +[Hera] [HADES][TEST ] [KRELTSC: 6516796944] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6517840371] Running Q./.basic: 10 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6519682008] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6521400837] Expected: Should print: 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] 5 +[Hera] [HADES][TEST ] [KRELTSC: 6524481348] Running Q./.by_zero: 5 Q.FROM-INT 0 Q.FROM-INT Q./ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6526267146] Test passed +[Hera] [HADES][TEST ] Testing Q./ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6528127410] Expected: Should print: 0 (division by zero yields q=0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6531522669] Q./: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6532642893] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6533979165] Testing word: Q.ABS +[Hera] [HADES][TEST ] [KRELTSC: 6534871287] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6535828425] Running Q.ABS.basic: 3 Q.FROM-INT Q.NEG Q.ABS Q.TO-INT . CR +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6537828570] Test passed +[Hera] [HADES][TEST ] Testing Q.ABS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6539582868] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6542542923] Q.ABS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6543761847] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6545068383] Testing word: Q.NEG +[Hera] [HADES][TEST ] [KRELTSC: 6545954121] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6546924174] Running Q.NEG.basic: 5 Q.FROM-INT Q.NEG Q.TO-INT . CR +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 6548547894] Test passed +[Hera] [HADES][TEST ] Testing Q.NEG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6550294443] Expected: Should print: -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] -5 +[Hera] [HADES][TEST ] [KRELTSC: 6553297527] Q.NEG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6554490411] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6555820488] Testing word: Q.LOG +[Hera] [HADES][TEST ] [KRELTSC: 6556701879] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6557639361] Running Q.LOG.of_one: Q.1 Q.LOG Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6559243866] Test passed +[Hera] [HADES][TEST ] Testing Q.LOG ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6561000705] Expected: Should print: 0 (ln 1.0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][INFO ] [KRELTSC: 6563542650] L8[TABLE]: Config 0 → 1 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6565669089] Q.LOG: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6566844963] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6568147089] Testing word: Q.EXP +[Hera] [HADES][TEST ] [KRELTSC: 6569056935] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6569989482] Running Q.EXP.of_zero: Q.0 Q.EXP Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6571736577] Test passed +[Hera] [HADES][TEST ] Testing Q.EXP ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6573544047] Expected: Should print: 1 (e^0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6576598245] Q.EXP: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6577755618] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6579113856] Testing word: Q.SQRT +[Hera] [HADES][TEST ] [KRELTSC: 6579996171] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6580979223] Running Q.SQRT.of_four: 4 Q.FROM-INT Q.SQRT Q.TO-INT . CR +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 6582824619] Test passed +[Hera] [HADES][TEST ] Testing Q.SQRT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6584524254] Expected: Should print: 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] 2 +[Hera] [HADES][TEST ] [KRELTSC: 6587667471] Q.SQRT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6588819069] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6590129889] Testing word: Q.SIN +[Hera] [HADES][TEST ] [KRELTSC: 6591030348] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6591985218] Running Q.SIN.of_zero: Q.0 Q.SIN Q.TO-INT . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6593701254] Test passed +[Hera] [HADES][TEST ] Testing Q.SIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6595380015] Expected: Should print: 0 (sin 0 = 0) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6598476591] Q.SIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6599631066] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6601098126] Testing word: Q.COS +[Hera] [HADES][TEST ] [KRELTSC: 6602013390] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6602950767] Running Q.COS.of_zero: Q.0 Q.COS Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6604682259] Test passed +[Hera] [HADES][TEST ] Testing Q.COS ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6606379878] Expected: Should print: 1 (cos 0 = 1) +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6609438087] Q.COS: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6610606821] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6611946537] Testing word: Q.FROM-INT +[Hera] [HADES][TEST ] [KRELTSC: 6613072200] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6614070498] Running Q.FROM-INT.round_trip: 7 Q.FROM-INT Q.TO-INT . CR +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6615729813] Test passed +[Hera] [HADES][TEST ] Testing Q.FROM-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6617459163] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6620330535] Q.FROM-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6621642678] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6622961079] Testing word: Q.TO-INT +[Hera] [HADES][TEST ] [KRELTSC: 6623862441] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6624789024] Running Q.TO-INT.of_one: Q.1 Q.TO-INT . CR +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6626397855] Test passed +[Hera] [HADES][TEST ] Testing Q.TO-INT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6628186194] Expected: Should print: 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] 1 +[Hera] [HADES][TEST ] [KRELTSC: 6631101456] Q.TO-INT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6632292156] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6633576894] Testing word: Q.1 +[Hera] [HADES][TEST ] [KRELTSC: 6634447407] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6635394213] Running Q.1.raw_value: Q.1 . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6636804048] Test passed +[Hera] [HADES][TEST ] Testing Q.1 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6638610762] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6641729682] Q.1: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6642939408] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6644250081] Testing word: Q.0 +[Hera] [HADES][TEST ] [KRELTSC: 6645131766] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6646139472] Running Q.0.raw_value: Q.0 . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6647490381] Test passed +[Hera] [HADES][TEST ] Testing Q.0 ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6649139784] Expected: Should print: 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6652179870] Q.0: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6653339343] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6654708753] Testing word: Q.SCALE +[Hera] [HADES][TEST ] [KRELTSC: 6655676307] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6656645079] Running Q.SCALE.raw_value: Q.SCALE . CR +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6658237173] Test passed +[Hera] [HADES][TEST ] Testing Q.SCALE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6660005793] Expected: Should print: 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] 65536 +[Hera] [HADES][TEST ] [KRELTSC: 6663183828] Q.SCALE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6664449708] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6665760675] Testing word: Q.= +[Hera] [HADES][TEST ] [KRELTSC: 6666636060] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6667582971] Running Q.=.equal: Q.1 Q.1 Q.= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6669166875] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6670817916] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 [HADES][INFO ] [KRELTSC: 6689056710] L8[TABLE]: Config 1 → 2 regime=3 score=26214 L1=0 L2=0 L3=0 L + +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6691532274] Running Q.=.not_equal: Q.1 Q.0 Q.= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6693117501] Test passed +[Hera] [HADES][TEST ] Testing Q.= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6694921212] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6698092527] Q.=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6699284991] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6700792161] Testing word: Q.< +[Hera] [HADES][TEST ] [KRELTSC: 6701756754] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6702800601] Running Q.<.true: Q.0 Q.1 Q.< . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6704411994] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6706094640] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6709345860] Running Q.<.false: Q.1 Q.0 Q.< . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6710752965] Test passed +[Hera] [HADES][TEST ] Testing Q.< ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6712421079] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6715514673] Q.<: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6716663583] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6717988935] Testing word: Q.> +[Hera] [HADES][TEST ] [KRELTSC: 6718864467] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6719806338] Running Q.>.true: Q.1 Q.0 Q.> . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6721279026] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6722936598] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6726058038] Running Q.>.false: Q.0 Q.1 Q.> . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6727489608] Test passed +[Hera] [HADES][TEST ] Testing Q.> ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6729239202] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6732262446] Q.>: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6733401885] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6734708610] Testing word: Q.0= +[Hera] [HADES][TEST ] [KRELTSC: 6735580845] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6736523388] Running Q.0=.true: Q.0 Q.0= . CR +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6737962413] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6739902204] Expected: Should print: -1 (true) +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] -1 +[Hera] [HADES][TEST ] [KRELTSC: 6743194374] Running Q.0=.false: Q.1 Q.0= . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6744615822] Test passed +[Hera] [HADES][TEST ] Testing Q.0= ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6746313336] Expected: Should print: 0 (false) +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6749420601] Q.0=: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6750588873] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6751972983] Testing word: Q.MAX +[Hera] [HADES][TEST ] [KRELTSC: 6752924430] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6753841605] Running Q.MAX.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MAX Q.TO-INT +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6755629923] Test passed +[Hera] [HADES][TEST ] Testing Q.MAX ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6757327416] Expected: Should print: 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] 7 +[Hera] [HADES][INFO ] [KRELTSC: 6760003341] L8[TABLE]: Config 2 → 3 regime=3 score=26214 L1=0 L2=0 L3=0 L +[Hera] 7 +[Hera] [HADES][TEST ] [KRELTSC: 6761770701] Q.MAX: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6762941262] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6764320710] Testing word: Q.MIN +[Hera] [HADES][TEST ] [KRELTSC: 6765233286] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6766187337] Running Q.MIN.basic: 3 Q.FROM-INT 7 Q.FROM-INT Q.MIN Q.TO-INT +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6767913096] Test passed +[Hera] [HADES][TEST ] Testing Q.MIN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6769698726] Expected: Should print: 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6772720416] Q.MIN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6773895807] ▶ Testing module: v3/src/test_runner/modules/q48_words_test.c +[Hera] [HADES][TEST ] [KRELTSC: 6775186677] Testing word: Q.PRINT +[Hera] [HADES][TEST ] [KRELTSC: 6776148141] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6777096333] Running Q.PRINT.of_one: Q.1 Q.PRINT CR +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 6778788534] Test passed +[Hera] [HADES][TEST ] Testing Q.PRINT ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6780485439] Expected: Should print: 1.00000 +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] 1.5u +[Hera] [HADES][TEST ] [KRELTSC: 6783679014] Q.PRINT: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6784906968] === Q48.16 Words Summary: 0 passed, 0 failed, 0 skipped, 0 erro +[Hera] [HADES][INFO ] [KRELTSC: 6786222513] +[Hera] === Testing Module: Inference Engine Words === +[Hera] [HADES][INFO ] [KRELTSC: 6787707402] Running Inference Engine Words Tests (Module 26)... +[Hera] [HADES][TEST ] [KRELTSC: 6789050646] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6790528185] Testing word: Q.VARIANCE +[Hera] [HADES][TEST ] [KRELTSC: 6791484084] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6792426417] Running Q.VARIANCE.three_cells: 100 HERE ! 200 HERE 8 + ! 300 +[Hera] 6666 +[Hera] [HADES][TEST ] [KRELTSC: 6794521797] Test passed +[Hera] [HADES][TEST ] Testing Q.VARIANCE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6796280589] Expected: Should print population variance of {100,200,300} +[Hera] [HADES][TEST ] [KRELTSC: 6797602980] Q.VARIANCE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6798877617] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6800191503] Testing word: INFER-DECAY-SLOPE +[Hera] [HADES][TEST ] [KRELTSC: 6801277350] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6802208763] Running INFER-DECAY-SLOPE.three_cells: 300 HERE ! 200 HERE 8 +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6804465255] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY-SLOPE ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6806305065] Expected: Should print decay slope for a decreasing traject +[Hera] [HADES][TEST ] [KRELTSC: 6807671871] INFER-DECAY-SLOPE: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6808949322] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6810317409] Testing word: INFER-WINDOW-WIDTH +[Hera] [HADES][TEST ] [KRELTSC: 6811450296] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6812412075] Running INFER-WINDOW-WIDTH.three_cells: 100 HERE ! 200 HERE 8 +[Hera] 3 +[Hera] [HADES][TEST ] [KRELTSC: 6814469886] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW-WIDTH ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6816316248] Expected: Should print an inferred window width (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6817653969] INFER-WINDOW-WIDTH: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6818991102] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6820405431] Testing word: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6821338923] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6822331929] Running INFER-RUN.basic: INFER-RUN +[Hera] [HADES][TEST ] [KRELTSC: 6827047353] Test passed +[Hera] [HADES][TEST ] Testing INFER-RUN ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6828886764] Expected: Should run without error +[Hera] [HADES][TEST ] [KRELTSC: 6830017236] INFER-RUN: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6831346221] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6832779051] Testing word: INFER-WINDOW@ +[Hera] [HADES][TEST ] [KRELTSC: 6833723904] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6834686649] Running INFER-WINDOW@.after_run: INFER-RUN INFER-WINDOW@ . CR +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6838142787] Test passed +[Hera] [HADES][TEST ] Testing INFER-WINDOW@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6840070440] Expected: Should print last adaptive_window_width (no error +[Hera] [HADES][TEST ] [KRELTSC: 6841492770] INFER-WINDOW@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6842724567] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6844038915] Testing word: INFER-DECAY@ +[Hera] [HADES][TEST ] [KRELTSC: 6845030577] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6845959218] Running INFER-DECAY@.after_run: INFER-RUN INFER-DECAY@ Q.TO-I +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6848703750] Test passed +[Hera] [HADES][TEST ] Testing INFER-DECAY@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6850501245] Expected: Should print last adaptive_decay_slope (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6852014652] INFER-DECAY@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6853251657] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6854653281] Testing word: INFER-VARIANCE@ +[Hera] [HADES][TEST ] [KRELTSC: 6855658173] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6856611069] Running INFER-VARIANCE@.after_run: INFER-RUN INFER-VARIANCE@ +[Hera] 1169 +[Hera] [HADES][TEST ] [KRELTSC: 6859254087] Test passed +[Hera] [HADES][TEST ] Testing INFER-VARIANCE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6861130815] Expected: Should print last window_variance_q48 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6862521288] INFER-VARIANCE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6863879190] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6865224555] Testing word: INFER-FIT@ +[Hera] [HADES][TEST ] [KRELTSC: 6866172138] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6867180201] Running INFER-FIT@.after_run: INFER-RUN INFER-FIT@ Q.TO-INT . +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6869925804] Test passed +[Hera] [HADES][TEST ] Testing INFER-FIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6871686234] Expected: Should print last slope_fit_quality_q48 (no error +[Hera] [HADES][TEST ] [KRELTSC: 6872980233] INFER-FIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6874249935] ▶ Testing module: v3/src/test_runner/modules/inference_words_ +[Hera] [HADES][TEST ] [KRELTSC: 6875565795] Testing word: INFER-EARLY-EXIT@ +[Hera] [HADES][TEST ] [KRELTSC: 6876623229] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6877578855] Running INFER-EARLY-EXIT@.after_run: INFER-RUN INFER-EARLY-EX +[Hera] 0 +[Hera] [HADES][TEST ] [KRELTSC: 6881728182] Test passed +[Hera] [HADES][TEST ] Testing INFER-EARLY-EXIT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6883643718] Expected: Should print 0 or 1 (no error) +[Hera] [HADES][TEST ] [KRELTSC: 6884876481] INFER-EARLY-EXIT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6886183857] === Inference Engine Words Summary: 0 passed, 0 failed, 0 skipp +[Hera] [HADES][INFO ] [KRELTSC: 6887524035] +[Hera] === Testing Module: Physics Freeze Words === +[Hera] [HADES][INFO ] [KRELTSC: 6888941808] Running Physics Freeze Words Tests (Module 27)... +[Hera] [HADES][TEST ] [KRELTSC: 6890285640] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6891646377] Testing word: FREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 6892654797] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6893639277] Running FREEZE-WORD.basic: : __freeze_test_word__ ; S" __free +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 6896165598] Test passed +[Hera] [HADES][TEST ] Testing FREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6897999801] Expected: Should print: -1 (word is now frozen) +[Hera] [HADES][TEST ] [KRELTSC: 6899214273] FREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6900528327] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6901958301] Testing word: UNFREEZE-WORD +[Hera] [HADES][TEST ] [KRELTSC: 6902958237] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6903973041] Running UNFREEZE-WORD.basic: : __unfreeze_test_word__ ; S" __ +[Hera] 270 +[Hera] [HADES][TEST ] [KRELTSC: 6906242784] Test passed +[Hera] [HADES][TEST ] Testing UNFREEZE-WORD ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6908100297] Expected: Should print: 0 (freeze cleared) +[Hera] [HADES][TEST ] [KRELTSC: 6909277893] UNFREEZE-WORD: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6910666749] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6911979039] Testing word: FROZEN? +[Hera] [HADES][TEST ] [KRELTSC: 6912935946] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6913880211] Running FROZEN?.not_frozen: : __frozen_test_word__ ; S" __fro +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6916083006] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6917864394] Expected: Should print: 0 (freshly defined word is not froz +[Hera] [HADES][TEST ] [KRELTSC: 6919201716] Running FROZEN?.not_found: S" __nonexistent_freeze_xyz__" FRO +[Hera] 245 +[Hera] [HADES][TEST ] [KRELTSC: 6920955783] Test passed +[Hera] [HADES][TEST ] Testing FROZEN? ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6922726167] Expected: Should print: 0 (not-found treated as not frozen) +[Hera] [HADES][TEST ] [KRELTSC: 6924049482] FROZEN?: 2 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6925223550] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6926523660] Testing word: HEAT! +[Hera] [HADES][TEST ] [KRELTSC: 6927504780] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6928458621] Running HEAT!.basic: : __heat_store_test_word__ ; 999 S" __he +[Hera] 249 +[Hera] [HADES][TEST ] [KRELTSC: 6930599109] Test passed +[Hera] [HADES][TEST ] Testing HEAT! ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6932315943] Expected: Should print: 999 +[Hera] [HADES][TEST ] [KRELTSC: 6933316530] HEAT!: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6934473105] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6935844300] Testing word: HEAT@ +[Hera] [HADES][TEST ] [KRELTSC: 6936812358] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6937793394] Running HEAT@.of_fresh_word: : __heat_fetch_test_word__ ; S" +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6939697254] Test passed +[Hera] [HADES][TEST ] Testing HEAT@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6941420766] Expected: Should print: 0 (freshly defined word has zero he +[Hera] [HADES][TEST ] [KRELTSC: 6942778143] HEAT@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6943936692] ▶ Testing module: v3/src/test_runner/modules/physics_freeze_w +[Hera] [HADES][TEST ] [KRELTSC: 6945258180] Testing word: DECAY-RATE@ +[Hera] [HADES][TEST ] [KRELTSC: 6946205826] ------------------------ +[Hera] [HADES][TEST ] [KRELTSC: 6947134404] Running DECAY-RATE@.basic: DECAY-RATE@ . CR +[Hera] 224 +[Hera] [HADES][TEST ] [KRELTSC: 6948739035] Test passed +[Hera] [HADES][TEST ] Testing DECAY-RATE@ ... PASS +[Hera] [HADES][TEST ] [KRELTSC: 6950693127] Expected: Should print the compile-time DECAY_RATE_PER_US_Q +[Hera] [HADES][TEST ] [KRELTSC: 6952181313] DECAY-RATE@: 1 passed, 0 failed, 0 stubs, 0 errors +[Hera] [HADES][TEST ] [KRELTSC: 6953582433] === Physics Freeze Words Summary: 0 passed, 0 failed, 0 skipped +[Hera] [HADES][INFO ] [KRELTSC: 6954963414] FINAL TEST SUMMARY: +[Hera] [HADES][INFO ] [KRELTSC: 6955894806] Total tests run: 1050 +[Hera] [HADES][INFO ] [KRELTSC: 6956868408] Passed: 1012 +[Hera] [HADES][INFO ] [KRELTSC: 6957822039] Failed: 0 +[Hera] [HADES][INFO ] [KRELTSC: 6958863786] Stubs (not yet implemented): 38 +[Hera] [HADES][INFO ] [KRELTSC: 6959902026] Errors: 0 +[Hera] [HADES][INFO ] [KRELTSC: 6960895662] ALL IMPLEMENTED TESTS PASSED! +[Hera] [HADES][INFO ] [KRELTSC: 6961937409] Contract checks (A4'/A1): all passed +[Hera] [HADES][INFO ] [KRELTSC: 6963098646] ============================================== +[Hera] PARITY:M7.1a word_count=530 here=0x00000000000000d8 latest_id=699 hash=0x08873e0f44b7cb2a +[Hera] PARITY:OK +[Hera] POST: PASSED +[Hera] [HAL][exec] regions frozen: +[Hera] kernel.text: [0x00000000bdecb000, 0x00000000bdf08ea4) +[Hera] VM: parity bootstrap complete +[Hera] PCI: init... +[Hera] virtio-rng: found device +[Hera] rng: backend = virtio-rng +[Hera] entropy: ready +[Hera] virtio-blk: found device +[Hera] Artemis: virtio-blk attached +[Hera] [HADES][ERROR] [KRELTSC: 7018369554] virtio_blk: vblk_io timed out (write=1 sector=2096634) -- queue +[Hera] Artemis: genesis signature stamp FAILED +[Hera] virtio-input: found device +[Hera] virtio-input: driver ready +[Hera] Init: Mama birth... +[Hera] [HADES][WARN ] [KRELTSC: 7042686756] capsule sig: init.4th: missing (unsigned) +[Hera] [HADES][WARN ] [KRELTSC: 7050668856] ( Unterminated comment +[Hera] [HADES][WARN ] [KRELTSC: 7054045404] ( Unterminated comment + +[Hera] ================================================ +[Hera] LithosAnanke — FORTH-79 bare-metal kernel +[Hera] Stadium step one: Hera alone +[Hera] ================================================ +[Hera] Hera [live] +[Hera] ================================================ + +[Hera] (no identity) +[Hera] PARITY:MAMA_INIT capsule_id=0xea038ba684c53443 mode=m capsule_hash=0xea038ba684c53443 dict_hash=0xe11082140cf86b05 +[Hera] Init: Mama birth OK +[Hera] ACL: CAPSULE-BIRTH pinned STRICT +[Hera] ACL: BIRTH pinned STRICT +[Hera] Starting heartbeat... +[Hera] SBI: timer armed (TIME extension) +[Hera] Heartbeat running. +[Hera] Stadium words: promotions=422 evictions=0 +[Hera] Stadium conservation: resident_sum=43691 reservoir=21845 sum=65536 (Q48_ONE=65536) +[Hera] Stadium conservation: CONSERVED +[Hera] Stadium quota grant self-test: OK +[Hera] Hera reservoir=21845 +[Hera] test-vm reservoir=65536 +[Hera] Kernel-Hermes alloc/release self-test: Scan cross-check (counters vs arena): PASS +[Hera] scan_held_before_decay=8192 +[Hera] scan_held_after_decay=8148 +[Hera] Stage B (ledger + stadium_conserved): PASS +[Hera] vm_consumed=737 +[Hera] PASS +[Hera] audit_failures=0 +[Hera] decay_consumed=352 +[Hera] reservoir0=65536 +[Hera] Q_SLOT=2048 +[Hera] expected_n=32 +[Hera] got_n=32 +[Hera] reservoir_after_alloc=0 +[Hera] reservoir_final=65536 +[Hera] held(final)=0 +[Hera] pulled(final)=65536 +[Hera] returned(final)=65536 +[Hera] consumed(final)=0 +[Hera] Startup: birthing Hestia (fleet foundation)... +[Hestia] [HADES][WARN ] [KRELTSC: 7144724244] capsule sig: hestia:init.4th: missing (unsigned) +[Hestia] [HADES][WARN ] [KRELTSC: 7310832753] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 7316555568] ( Unterminated comment +[Hestia] [HADES][WARN ] [KRELTSC: 7359517641] ( Unterminated comment +[Hestia] (no identity) +[Hestia] PARITY:BIRTH vm_id=0x3e417af7a996424b-0xac711f4444782b53 capsule_id=0x64e111990fbc45ff mode=p capsule_hash=0x64e111990fbc45ff dict_hash=0xb1256603f848e2b9 +[Hera] BIRTH: Hestia live +[Hera] Startup: Hestia live +[Hera] Startup: birthing Artemis (fleet foundation)... +[Artemis] [HADES][WARN ] [KRELTSC: 7404458964] capsule sig: artemis:init.4th: missing (unsigned) +[Artemis] Artemis: blank disk -- formatting +[Artemis] Artemis self-test... +[Artemis] 3076 allocated +[Artemis] 0.5u K after alloc +[Artemis] 0.5u K after free +[Artemis] PASS +[Artemis] Artemis: persist-write... +[Artemis] PASS: persist-write +[Artemis] Artemis ready +[Artemis] Artemis: 22998 data blocks +[Artemis] K-total=0.5u +[Artemis] ARTEMIS-K=1.5u +[Artemis] (no identity) +[Artemis] [HADES][WARN ] [KRELTSC: 19717864803] ( Unterminated comment +[Artemis] PARITY:BIRTH vm_id=0xf6f94b9c36ea463f-0xb8d8e10f85efa90b capsule_id=0xe6fba9ae56e1c916 mode=p capsule_hash=0xe6fba9ae56e1c916 dict_hash=0xc791409ac1715690 +[Hera] BIRTH: Artemis live +[Hera] Startup: Artemis live +[Hera] Heartbeat: 607 ticks, trust=0x00010000, variance=0x00000000 +[Hera] Kernel-Hermes common-channel fleet self-test: PASS +[Hera] common channel members=3 +[Hera] channel table capacity=50 +[Hera] Kernel-Hermes synthetic private-topic self-test: PASS +[Hera] Kernel-Hermes publish self-test: PASS +[Hera] Kernel-Hermes drain self-test: SKIPPED (Hermes not live) +[Hera] Kernel-Hermes chunk self-test: PASS +[Hera] Kernel-Hermes negotiation self-test: PASS +[Hera] Kernel-Hermes channel-open policy self-test: SKIPPED (Hera/Hermes not available) +[Hera] blkio_usb: MSC device ready +[Hera] Kernel-Hermes BLK-ATTACH-EVENT (real, Stage C): ledger held=2048 pulled=237568 returned=234783 consumed=737 stadium_conserved(Artemis)=true +[Hera] Zuse: genesis minted onto attached thumbdrive +[Hera] LithosAnanke v2.1.0 +[Hera] StarForth Version 3.2.0 + +[Hera] StarForth CLI +[Hera] FORTH-79 interpreter type BYE or power off to exit + +[zuse@Hera] ok>  \ No newline at end of file diff --git a/logs/20261007-085017/amd64/qemu-amd64-20261007-085017.log b/logs/20261007-085017/amd64/qemu-amd64-20261007-085017.log new file mode 100644 index 00000000..892bbaad --- /dev/null +++ b/logs/20261007-085017/amd64/qemu-amd64-20261007-085017.log @@ -0,0 +1,148 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 7 2026 08:49:51 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 135 +Total memory: 1023 MB +Usable memory: 966 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 248749 + Free pages : 247226 + Used pages : 1523 + Total MB : 971 + Free MB : 965 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2102367869 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1009406533, tick_hz=100, initial_count=10094065 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x4eb584bf6c169ea1 capsule_hash=0x4eb584bf6c169ea1 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xe6453dd9449a3f64 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xab589e162cb5e638 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +PCI: ECAM mapped (amd64) +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 77646744] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-085254/aarch64/qemu-aarch64-20261007-085254.log b/logs/20261007-085254/aarch64/qemu-aarch64-20261007-085254.log new file mode 100644 index 00000000..8580fc35 --- /dev/null +++ b/logs/20261007-085254/aarch64/qemu-aarch64-20261007-085254.log @@ -0,0 +1,121 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 7 2026 08:52:28 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4054 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039362 + Free pages : 1037951 + Used pages : 1411 + Total MB : 4060 + Free MB : 4054 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x4eb584bf6c169ea1 capsule_hash=0x4eb584bf6c169ea1 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xe6453dd9449a3f64 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xab589e162cb5e638 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 1372126] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-085636/riscv64/qemu-riscv64-20261007-085636.log b/logs/20261007-085636/riscv64/qemu-riscv64-20261007-085636.log new file mode 100644 index 00000000..4df7ba83 --- /dev/null +++ b/logs/20261007-085636/riscv64/qemu-riscv64-20261007-085636.log @@ -0,0 +1,191 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdcab9f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 7 2026 08:55:59 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 975 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250276 + Free pages : 249624 + Used pages : 652 + Total MB : 977 + Free MB : 975 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x4eb584bf6c169ea1 capsule_hash=0x4eb584bf6c169ea1 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xe6453dd9449a3f64 +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xab589e162cb5e638 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 33683055] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-092835/amd64/qemu-amd64-20261007-092835.log b/logs/20261007-092835/amd64/qemu-amd64-20261007-092835.log new file mode 100644 index 00000000..4075237a --- /dev/null +++ b/logs/20261007-092835/amd64/qemu-amd64-20261007-092835.log @@ -0,0 +1,148 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 7 2026 09:28:08 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 966 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 248746 + Free pages : 247223 + Used pages : 1523 + Total MB : 971 + Free MB : 965 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2097105936 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1008484717, tick_hz=100, initial_count=10084847 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x1d4ff6398f190c13 capsule_hash=0x1d4ff6398f190c13 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x1c771623a746cc7f +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xd8221bd6371d0ef3 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +PCI: ECAM mapped (amd64) +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 83774187] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-093112/aarch64/qemu-aarch64-20261007-093112.log b/logs/20261007-093112/aarch64/qemu-aarch64-20261007-093112.log new file mode 100644 index 00000000..f3a16e8f --- /dev/null +++ b/logs/20261007-093112/aarch64/qemu-aarch64-20261007-093112.log @@ -0,0 +1,121 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 7 2026 09:30:46 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4054 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039359 + Free pages : 1037948 + Used pages : 1411 + Total MB : 4059 + Free MB : 4054 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x1d4ff6398f190c13 capsule_hash=0x1d4ff6398f190c13 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x1c771623a746cc7f +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xd8221bd6371d0ef3 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 1376451] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-093456/riscv64/qemu-riscv64-20261007-093456.log b/logs/20261007-093456/riscv64/qemu-riscv64-20261007-093456.log new file mode 100644 index 00000000..6ec2c4b2 --- /dev/null +++ b/logs/20261007-093456/riscv64/qemu-riscv64-20261007-093456.log @@ -0,0 +1,191 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdcab9f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 7 2026 09:34:18 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 975 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250276 + Free pages : 249624 + Used pages : 652 + Total MB : 977 + Free MB : 975 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x1d4ff6398f190c13 capsule_hash=0x1d4ff6398f190c13 words=310 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x1c771623a746cc7f +V4: capsule v4:post79.4th signature: missing (unsigned) +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_CAPSULE name=v4:post79.4th capsule_id=0xb26d1b974884179d capsule_hash=0xb26d1b974884179d dict_hash=0xd8221bd6371d0ef3 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 23947707] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> BYE +BYE: cold restart diff --git a/logs/20261007-105118/amd64/qemu-amd64-20261007-105118.log b/logs/20261007-105118/amd64/qemu-amd64-20261007-105118.log new file mode 100644 index 00000000..408182d1 --- /dev/null +++ b/logs/20261007-105118/amd64/qemu-amd64-20261007-105118.log @@ -0,0 +1,158 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 7 2026 10:50:50 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 966 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 248741 + Free pages : 247218 + Used pages : 1523 + Total MB : 971 + Free MB : 965 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2149499758 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1031765227, tick_hz=100, initial_count=10317652 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x467b3793e193b467 capsule_hash=0x467b3793e193b467 words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xf268e314e12931c4 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=411 dict_hash=0x6fb1d09418b189ee +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +PCI: ECAM mapped (amd64) +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 78934212] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +42 42 + ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> RS1 +42 42 + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> HERE . +9585 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261007-105335/aarch64/qemu-aarch64-20261007-105335.log b/logs/20261007-105335/aarch64/qemu-aarch64-20261007-105335.log new file mode 100644 index 00000000..aa3b6393 --- /dev/null +++ b/logs/20261007-105335/aarch64/qemu-aarch64-20261007-105335.log @@ -0,0 +1,131 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 7 2026 10:53:09 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4054 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039357 + Free pages : 1037946 + Used pages : 1411 + Total MB : 4059 + Free MB : 4054 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x467b3793e193b467 capsule_hash=0x467b3793e193b467 words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xf268e314e12931c4 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=411 dict_hash=0x6fb1d09418b189ee +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 1501177] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +42 42 + ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> RS1 +42 42 + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> HERE . +9585 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261007-105651/riscv64/qemu-riscv64-20261007-105651.log b/logs/20261007-105651/riscv64/qemu-riscv64-20261007-105651.log new file mode 100644 index 00000000..8b1b0a8c --- /dev/null +++ b/logs/20261007-105651/riscv64/qemu-riscv64-20261007-105651.log @@ -0,0 +1,201 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdca29f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 7 2026 10:56:11 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 975 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250273 + Free pages : 249621 + Used pages : 652 + Total MB : 977 + Free MB : 975 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x467b3793e193b467 capsule_hash=0x467b3793e193b467 words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xf268e314e12931c4 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=411 dict_hash=0x6fb1d09418b189ee +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 40981668] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +42 42 + ok +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> RS1 +42 42 + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> HERE . +9585 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261007-112638/amd64/qemu-amd64-20261007-112638.log b/logs/20261007-112638/amd64/qemu-amd64-20261007-112638.log new file mode 100644 index 00000000..782328dd --- /dev/null +++ b/logs/20261007-112638/amd64/qemu-amd64-20261007-112638.log @@ -0,0 +1,155 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 7 2026 11:26:09 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 966 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 248742 + Free pages : 247219 + Used pages : 1523 + Total MB : 971 + Free MB : 965 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=1876630930 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=908830414, tick_hz=100, initial_count=9088304 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x467b3793e193b467 capsule_hash=0x467b3793e193b467 words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xf268e314e12931c4 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=314 dict_hash=0x220ab283a504a3b3 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +PCI: ECAM mapped (amd64) +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 80247384] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261007-112901/aarch64/qemu-aarch64-20261007-112901.log b/logs/20261007-112901/aarch64/qemu-aarch64-20261007-112901.log new file mode 100644 index 00000000..a797808b --- /dev/null +++ b/logs/20261007-112901/aarch64/qemu-aarch64-20261007-112901.log @@ -0,0 +1,128 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 7 2026 11:28:32 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4054 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039356 + Free pages : 1037945 + Used pages : 1411 + Total MB : 4059 + Free MB : 4054 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x467b3793e193b467 capsule_hash=0x467b3793e193b467 words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xf268e314e12931c4 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=314 dict_hash=0x220ab283a504a3b3 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 1493527] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261007-113220/riscv64/qemu-riscv64-20261007-113220.log b/logs/20261007-113220/riscv64/qemu-riscv64-20261007-113220.log new file mode 100644 index 00000000..3dd488e9 --- /dev/null +++ b/logs/20261007-113220/riscv64/qemu-riscv64-20261007-113220.log @@ -0,0 +1,198 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdca29f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 7 2026 11:31:39 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 975 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250273 + Free pages : 249621 + Used pages : 652 + Total MB : 977 + Free MB : 975 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x467b3793e193b467 capsule_hash=0x467b3793e193b467 words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0xf268e314e12931c4 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=314 dict_hash=0x220ab283a504a3b3 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 24420207] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261007-121743/amd64/qemu-amd64-20261007-121743.log b/logs/20261007-121743/amd64/qemu-amd64-20261007-121743.log new file mode 100644 index 00000000..0092f332 --- /dev/null +++ b/logs/20261007-121743/amd64/qemu-amd64-20261007-121743.log @@ -0,0 +1,160 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 7 2026 12:17:15 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 966 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 248744 + Free pages : 247221 + Used pages : 1523 + Total MB : 971 + Free MB : 965 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2091392980 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1007112438, tick_hz=100, initial_count=10071124 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xbb8f7aba92a2f5dc capsule_hash=0xbb8f7aba92a2f5dc words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x145ecc5563d10b54 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=314 dict_hash=0x5f0a949a6fc8ef2b +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +PCI: ECAM mapped (amd64) +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 80440941] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 5 7 PORT! +No one on that port + ERROR +ok> 1 2 + . +3 ok +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261007-122008/aarch64/qemu-aarch64-20261007-122008.log b/logs/20261007-122008/aarch64/qemu-aarch64-20261007-122008.log new file mode 100644 index 00000000..bfe8195a --- /dev/null +++ b/logs/20261007-122008/aarch64/qemu-aarch64-20261007-122008.log @@ -0,0 +1,133 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 7 2026 12:19:41 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4054 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039358 + Free pages : 1037947 + Used pages : 1411 + Total MB : 4059 + Free MB : 4054 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xbb8f7aba92a2f5dc capsule_hash=0xbb8f7aba92a2f5dc words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x145ecc5563d10b54 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=314 dict_hash=0x5f0a949a6fc8ef2b +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 1354093] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 5 7 PORT! +No one on that port + ERROR +ok> 1 2 + . +3 ok +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261007-122337/riscv64/qemu-riscv64-20261007-122337.log b/logs/20261007-122337/riscv64/qemu-riscv64-20261007-122337.log new file mode 100644 index 00000000..d0ba38a1 --- /dev/null +++ b/logs/20261007-122337/riscv64/qemu-riscv64-20261007-122337.log @@ -0,0 +1,203 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdca29f8 +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 7 2026 12:22:56 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 975 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250273 + Free pages : 249621 + Used pages : 652 + Total MB : 977 + Free MB : 975 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0xbb8f7aba92a2f5dc capsule_hash=0xbb8f7aba92a2f5dc words=308 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x145ecc5563d10b54 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=314 dict_hash=0x5f0a949a6fc8ef2b +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +Artemis: virtio-blk attached +[HADES][INFO ] [KRELTSC: 37118739] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 5 7 PORT! +No one on that port + ERROR +ok> 1 2 + . +3 ok +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/logs2/.gitkeep b/logs2/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/logs2/README.md b/logs2/README.md deleted file mode 100644 index 8af4e21f..00000000 --- a/logs2/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# logs2/ - -A second, flatter archive of QEMU serial captures and screenshots (159 -loose files: `qemu-amd64-*.log`, `qemu-aarch64-*.log`, -`qemu-riscv64-*.log`, `qemu-screenshot-*`), predating or running parallel -to the timestamped-subdirectory convention used in `logs/`. Historical — -no per-file index; browse by timestamp in the filename. diff --git a/logs2/qemu-aarch64-20260609-192112.log b/logs2/qemu-aarch64-20260609-192112.log deleted file mode 100644 index 2f7c953a..00000000 --- a/logs2/qemu-aarch64-20260609-192112.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:83592610388794eaebdb48599b9b5029fc05031283d56ee3842f86a4c9ddefa6 -size 445259 diff --git a/logs2/qemu-aarch64-20260611-002443.log b/logs2/qemu-aarch64-20260611-002443.log deleted file mode 100644 index 63e80052..00000000 --- a/logs2/qemu-aarch64-20260611-002443.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3bfe27c8e32cd3e1af32ebc053f858ba75eca8c160b960aec6a2ca7e5425f2a6 -size 453599 diff --git a/logs2/qemu-aarch64-20260611-024456.log b/logs2/qemu-aarch64-20260611-024456.log deleted file mode 100644 index 0e82fb19..00000000 --- a/logs2/qemu-aarch64-20260611-024456.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2dc5080cfa9bfa8451cc868393e2db67d7c8660a5b7c923575e4b493229d2b8a -size 5286367 diff --git a/logs2/qemu-aarch64-20260611-173737.log b/logs2/qemu-aarch64-20260611-173737.log deleted file mode 100644 index d75f8f63..00000000 --- a/logs2/qemu-aarch64-20260611-173737.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cd881909023f366709be8dbc472f2242b036e3b525e36f444f2bd46b3c81eb7c -size 2860321 diff --git a/logs2/qemu-aarch64-20260611-174951.log b/logs2/qemu-aarch64-20260611-174951.log deleted file mode 100644 index db0d847f..00000000 --- a/logs2/qemu-aarch64-20260611-174951.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2600af8c22e63034d608813b31c8e26dfb591126f41f5024668b5ca53a5f815c -size 444849 diff --git a/logs2/qemu-aarch64-20260611-175257.log b/logs2/qemu-aarch64-20260611-175257.log deleted file mode 100644 index 69556556..00000000 --- a/logs2/qemu-aarch64-20260611-175257.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:548df876d4fd35678a1635f035134aabd50bfc4f94834c7f1954b32ca43ebd6a -size 444396 diff --git a/logs2/qemu-aarch64-20260611-190822.log b/logs2/qemu-aarch64-20260611-190822.log deleted file mode 100644 index db0f610d..00000000 --- a/logs2/qemu-aarch64-20260611-190822.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1e3a8fe80891d91d4969965414f9ac788d7a39bf85374f62f9c385f6f88e01d1 -size 24550579 diff --git a/logs2/qemu-aarch64-20260611-202955.log b/logs2/qemu-aarch64-20260611-202955.log deleted file mode 100644 index 56e2d5c1..00000000 --- a/logs2/qemu-aarch64-20260611-202955.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ec3b597aef2c9c692b9825ef822d77b61bad209aae74e9d4a730c5c012c392e -size 2860331 diff --git a/logs2/qemu-aarch64-20260612-132412.log b/logs2/qemu-aarch64-20260612-132412.log deleted file mode 100644 index 369178ef..00000000 --- a/logs2/qemu-aarch64-20260612-132412.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b7bcfd56a593b7dc7e94f1ee546ab482c2b7a0d6b0ef6031b52e2ab7591bdb9b -size 24547039 diff --git a/logs2/qemu-aarch64-20260612-141722.log b/logs2/qemu-aarch64-20260612-141722.log deleted file mode 100644 index dbebd8ea..00000000 --- a/logs2/qemu-aarch64-20260612-141722.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b049b883a58d66c646e20df02e5d931477901339ddf27c2d0d00ec73f62a0b48 -size 24571257 diff --git a/logs2/qemu-aarch64-20260612-160132.log b/logs2/qemu-aarch64-20260612-160132.log deleted file mode 100644 index 9d0e760c..00000000 --- a/logs2/qemu-aarch64-20260612-160132.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9c1543e8f781c0ffda150e68a473b436ef0611ae8ec0c3c57e838d82fbda99c5 -size 24557311 diff --git a/logs2/qemu-aarch64-20260614-164017.log b/logs2/qemu-aarch64-20260614-164017.log deleted file mode 100644 index c613be51..00000000 --- a/logs2/qemu-aarch64-20260614-164017.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e9f0a5be56112b6e6ccdc6760c3e0cfff35a1575f76dbd8481b0943b38a1e3e5 -size 445798 diff --git a/logs2/qemu-aarch64-20260614-164043.log b/logs2/qemu-aarch64-20260614-164043.log deleted file mode 100644 index 7155bc6c..00000000 --- a/logs2/qemu-aarch64-20260614-164043.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:59c913bd5cafa83a930be572322946d54250f3e627ed3c7bb98479f0fbc073f7 -size 445830 diff --git a/logs2/qemu-aarch64-20260614-182154.log b/logs2/qemu-aarch64-20260614-182154.log deleted file mode 100644 index 5b14e80b..00000000 --- a/logs2/qemu-aarch64-20260614-182154.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:74fd6eab5924ba58deb1530223267a70316d651420709eeedbeae1ba5c09a780 -size 445940 diff --git a/logs2/qemu-aarch64-20260614-190109.log b/logs2/qemu-aarch64-20260614-190109.log deleted file mode 100644 index c3579842..00000000 --- a/logs2/qemu-aarch64-20260614-190109.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ec60bcb52390ce385697baa07c4188630be60227d606edf5f5df3281071443e1 -size 446081 diff --git a/logs2/qemu-aarch64-20260614-230803.log b/logs2/qemu-aarch64-20260614-230803.log deleted file mode 100644 index c02c03fd..00000000 --- a/logs2/qemu-aarch64-20260614-230803.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e785237ae55ff3327eb7f68aa262abada47614704f06be316c069d0b1a71da6b -size 24762825 diff --git a/logs2/qemu-aarch64-20260615-003908.log b/logs2/qemu-aarch64-20260615-003908.log deleted file mode 100644 index 0b81ce4f..00000000 --- a/logs2/qemu-aarch64-20260615-003908.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b00954cc3f39dcc4cdd8133baaa20f71e9b4a708138b41f2243a79e0c83759b4 -size 24791976 diff --git a/logs2/qemu-aarch64-20260615-005301.log b/logs2/qemu-aarch64-20260615-005301.log deleted file mode 100644 index 7c0dfa2b..00000000 --- a/logs2/qemu-aarch64-20260615-005301.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6fef1dd6edd20ac9f32396e449be401579be2165840d5a17df8763a880de1f78 -size 24810271 diff --git a/logs2/qemu-aarch64-20260615-020020.log b/logs2/qemu-aarch64-20260615-020020.log deleted file mode 100644 index 2f385fe3..00000000 --- a/logs2/qemu-aarch64-20260615-020020.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6809d86a1b7eae40c2c8ad42c10854e3e22ac96ccb2f8b50cc7d07da3d196ea1 -size 24798283 diff --git a/logs2/qemu-aarch64-20260615-103253.log b/logs2/qemu-aarch64-20260615-103253.log deleted file mode 100644 index b47ff0cb..00000000 --- a/logs2/qemu-aarch64-20260615-103253.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c79dd37830259c5988c36de5fc6d3cb0be96efe405b8bfb215685558aa69acd8 -size 446176 diff --git a/logs2/qemu-aarch64-20260615-103655.log b/logs2/qemu-aarch64-20260615-103655.log deleted file mode 100644 index 70cfd266..00000000 --- a/logs2/qemu-aarch64-20260615-103655.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d752ffb4307e3b822788f64f55ce959a72de251ab0a8a35870ee32b47ce5402 -size 446096 diff --git a/logs2/qemu-aarch64-20260615-121103.log b/logs2/qemu-aarch64-20260615-121103.log deleted file mode 100644 index 7d342f68..00000000 --- a/logs2/qemu-aarch64-20260615-121103.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9398bee6c2494a07c23d1250814427236cbfe72881cf79387f1360b5105d2f97 -size 39524558 diff --git a/logs2/qemu-aarch64-20260615-123814.log b/logs2/qemu-aarch64-20260615-123814.log deleted file mode 100644 index 551b18a5..00000000 --- a/logs2/qemu-aarch64-20260615-123814.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b69188e7704e3f2dda83ae30f72220aa3b6edb6940c26e5d9f901263bfa3e859 -size 40407590 diff --git a/logs2/qemu-aarch64-20260615-160204.log b/logs2/qemu-aarch64-20260615-160204.log deleted file mode 100644 index 7a3317e0..00000000 --- a/logs2/qemu-aarch64-20260615-160204.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8702707f3ff9558294139bbeeee25e1a1993c2cafdecaa81b8c621611af5e0aa -size 40382353 diff --git a/logs2/qemu-aarch64-20260615-183010.log b/logs2/qemu-aarch64-20260615-183010.log deleted file mode 100644 index 311e1b25..00000000 --- a/logs2/qemu-aarch64-20260615-183010.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:af8042f75f58308aeefcaaeac464b0b571b27b6ba559923fd2df35693e76e37a -size 445915 diff --git a/logs2/qemu-aarch64-20260615-192747.log b/logs2/qemu-aarch64-20260615-192747.log deleted file mode 100644 index 45d7e8dc..00000000 --- a/logs2/qemu-aarch64-20260615-192747.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a62df6904fff8e5a31790475d2121d91cf09ae1483122a9b237dde6ad6f0d8e9 -size 25720612 diff --git a/logs2/qemu-aarch64-20260615-194133.log b/logs2/qemu-aarch64-20260615-194133.log deleted file mode 100644 index e0d37b7a..00000000 --- a/logs2/qemu-aarch64-20260615-194133.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c9e78c199ae0dc052016a86c4478e7194d7ed2a26a400de58e37812fc300c7ca -size 25728577 diff --git a/logs2/qemu-aarch64-20260615-204232.log b/logs2/qemu-aarch64-20260615-204232.log deleted file mode 100644 index d81bd935..00000000 --- a/logs2/qemu-aarch64-20260615-204232.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a97c07ff0ad676c5d59b9b724ea6f3be785fec5167f06950be5107a2b47391bf -size 25730370 diff --git a/logs2/qemu-aarch64-20260615-223549.log b/logs2/qemu-aarch64-20260615-223549.log deleted file mode 100644 index 86841a74..00000000 --- a/logs2/qemu-aarch64-20260615-223549.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f10800135a26e0131326a9831d55315ad39ef194d912e4ce046d1519f9dd7fcb -size 446759 diff --git a/logs2/qemu-aarch64-20260615-235720.log b/logs2/qemu-aarch64-20260615-235720.log deleted file mode 100644 index 1109cfa0..00000000 --- a/logs2/qemu-aarch64-20260615-235720.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4df71446c9efe65f799d14f42672542570cd5f305e2b212fde2693e0347e1509 -size 24826180 diff --git a/logs2/qemu-aarch64-20260616-000920.log b/logs2/qemu-aarch64-20260616-000920.log deleted file mode 100644 index 4ea3f40b..00000000 --- a/logs2/qemu-aarch64-20260616-000920.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e93a8ca1550f57abc3f7622bef06944de1c10fece7671a58a64d6086f86885b -size 24826961 diff --git a/logs2/qemu-aarch64-20260616-011049.log b/logs2/qemu-aarch64-20260616-011049.log deleted file mode 100644 index d96286e9..00000000 --- a/logs2/qemu-aarch64-20260616-011049.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:27a0cf152b499f395d50627028ea0e7d4d1a8a79a14794d46952c0eed7bcbd52 -size 24818835 diff --git a/logs2/qemu-aarch64-20260616-112907.log b/logs2/qemu-aarch64-20260616-112907.log deleted file mode 100644 index de788d20..00000000 --- a/logs2/qemu-aarch64-20260616-112907.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba61d2da7c79df29001522ad883f89013c4ee6fd2456f6aadacb44be1b95c022 -size 2861725 diff --git a/logs2/qemu-aarch64-20260616-155223.log b/logs2/qemu-aarch64-20260616-155223.log deleted file mode 100644 index e93447d2..00000000 --- a/logs2/qemu-aarch64-20260616-155223.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c3e133f3d8863c737ed9a9122c5dec2d5b0550795fa364646801c60d44e5588d -size 2861637 diff --git a/logs2/qemu-aarch64-20260616-175845.log b/logs2/qemu-aarch64-20260616-175845.log deleted file mode 100644 index 29bd15a6..00000000 --- a/logs2/qemu-aarch64-20260616-175845.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fade9151f59cbd3268d1ce00f2e82dfb8e593b42000f95a5ce854a92d954f4f -size 446777 diff --git a/logs2/qemu-aarch64-20260620-222449.log b/logs2/qemu-aarch64-20260620-222449.log deleted file mode 100644 index f0931a54..00000000 --- a/logs2/qemu-aarch64-20260620-222449.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:33a2129c7b81183f63e83709fedfabb6918611e3c6af7cc5315da0ab8af952e0 -size 446938 diff --git a/logs2/qemu-aarch64-20260621-004736.log b/logs2/qemu-aarch64-20260621-004736.log deleted file mode 100644 index 8417c1d8..00000000 --- a/logs2/qemu-aarch64-20260621-004736.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3cb60e03b9837f6f4301668c98abf9ec5b6c87d953531e4bdd3a92913d892599 -size 455373 diff --git a/logs2/qemu-amd64-20260609-184750.log b/logs2/qemu-amd64-20260609-184750.log deleted file mode 100644 index 395e0868..00000000 --- a/logs2/qemu-amd64-20260609-184750.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:de8b3b76a479fdd3b80d8e678b3ffeacfbee6bceba39458889c7a59ef83d496d -size 124750043 diff --git a/logs2/qemu-amd64-20260609-193717.log b/logs2/qemu-amd64-20260609-193717.log deleted file mode 100644 index 49eac741..00000000 --- a/logs2/qemu-amd64-20260609-193717.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:264da04e9961b71db4ec4f41a6142b7a91dbe652c5a77b363a4b5ba42c9444f4 -size 452546 diff --git a/logs2/qemu-amd64-20260611-002301.log b/logs2/qemu-amd64-20260611-002301.log deleted file mode 100644 index fcf1c42a..00000000 --- a/logs2/qemu-amd64-20260611-002301.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:700b82c28e7871cc91e2dcaff02bfc8f9067671293e4d56c20e7eefa18fb0c15 -size 459031 diff --git a/logs2/qemu-amd64-20260611-012412.log b/logs2/qemu-amd64-20260611-012412.log deleted file mode 100644 index 2dd16200..00000000 --- a/logs2/qemu-amd64-20260611-012412.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7a0aacf2887944ca026af06807220dc950c8d451bbd1c3a3d315e6a062e29558 -size 25304213 diff --git a/logs2/qemu-amd64-20260611-013401.log b/logs2/qemu-amd64-20260611-013401.log deleted file mode 100644 index a54d891d..00000000 --- a/logs2/qemu-amd64-20260611-013401.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cc7c9205fb2fcba2a3d4b7816189e092234c6becf5061962fe8e1ce777dd1da9 -size 51847478 diff --git a/logs2/qemu-amd64-20260611-023023.log b/logs2/qemu-amd64-20260611-023023.log deleted file mode 100644 index dfe07389..00000000 --- a/logs2/qemu-amd64-20260611-023023.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36ad81e9c25263496226870600ec7045a634709bfe34d559fa19c2bfa79af1f9 -size 1229048 diff --git a/logs2/qemu-amd64-20260611-023818.log b/logs2/qemu-amd64-20260611-023818.log deleted file mode 100644 index e33dfe25..00000000 --- a/logs2/qemu-amd64-20260611-023818.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c6c8f18746be9320b887e647aa718665b93cdabc7a83cbcd1e4f5652e36ea51c -size 5437912 diff --git a/logs2/qemu-amd64-20260611-172713.log b/logs2/qemu-amd64-20260611-172713.log deleted file mode 100644 index 657bfaa9..00000000 --- a/logs2/qemu-amd64-20260611-172713.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bb922c9a54f2652ce1a583e77094458e60c65b6df3b30ef478f3ea371be1835a -size 2986532 diff --git a/logs2/qemu-amd64-20260611-174904.log b/logs2/qemu-amd64-20260611-174904.log deleted file mode 100644 index 8eb20203..00000000 --- a/logs2/qemu-amd64-20260611-174904.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ea16d957689e30ecff83b93f8596d1b87e784fd735971db3ef84ce7f14eb0b4c -size 452793 diff --git a/logs2/qemu-amd64-20260611-175217.log b/logs2/qemu-amd64-20260611-175217.log deleted file mode 100644 index 4836f432..00000000 --- a/logs2/qemu-amd64-20260611-175217.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a6cbf185529b069e76b4a803facc6d7f8c7ed86426d0687d893253434186d76a -size 452229 diff --git a/logs2/qemu-amd64-20260611-180750.log b/logs2/qemu-amd64-20260611-180750.log deleted file mode 100644 index 6ad85163..00000000 --- a/logs2/qemu-amd64-20260611-180750.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:026efae6d5ee2af7ff980b45aae7a7b01ac8ef65aee9da7e5c4c44cd904e48d9 -size 16809778 diff --git a/logs2/qemu-amd64-20260611-192015.log b/logs2/qemu-amd64-20260611-192015.log deleted file mode 100644 index 70ce7925..00000000 --- a/logs2/qemu-amd64-20260611-192015.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b4ca1094d0b8b819711a348159ea1a222192972985780b432f3ab235c8008cd2 -size 15873920 diff --git a/logs2/qemu-amd64-20260611-201951.log b/logs2/qemu-amd64-20260611-201951.log deleted file mode 100644 index 28de5f03..00000000 --- a/logs2/qemu-amd64-20260611-201951.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8b9481705be52280fa8bd2462de213c82813f0898e04944b51856ed6d7f1fc20 -size 2990826 diff --git a/logs2/qemu-amd64-20260611-204126.log b/logs2/qemu-amd64-20260611-204126.log deleted file mode 100644 index bf608125..00000000 --- a/logs2/qemu-amd64-20260611-204126.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:600a1199e2c4d87ff564082bdcbbb2a2e34a54c6d1bfc4e2656ae42dfb3937c6 -size 16994750 diff --git a/logs2/qemu-amd64-20260611-223613.log b/logs2/qemu-amd64-20260611-223613.log deleted file mode 100644 index 47e14582..00000000 --- a/logs2/qemu-amd64-20260611-223613.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:53fd8da927e76fbc0c15b0596bab99a09f7e301e5f057428020c3a11dad67972 -size 24296628 diff --git a/logs2/qemu-amd64-20260612-110212.log b/logs2/qemu-amd64-20260612-110212.log deleted file mode 100644 index 4594ee43..00000000 --- a/logs2/qemu-amd64-20260612-110212.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58d2f47e95d24705ddef7fea8c8ea34b522141e60b0a4c029d88d5a982654247 -size 26655843 diff --git a/logs2/qemu-amd64-20260612-142323.log b/logs2/qemu-amd64-20260612-142323.log deleted file mode 100644 index 6db15b98..00000000 --- a/logs2/qemu-amd64-20260612-142323.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:76a6a7af9c49d54a4ff812ff4cbd0d61ccd3d9444d093d4e23474669b9002082 -size 26814590 diff --git a/logs2/qemu-amd64-20260612-160656.log b/logs2/qemu-amd64-20260612-160656.log deleted file mode 100644 index d4c37437..00000000 --- a/logs2/qemu-amd64-20260612-160656.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:11f3c49d85895d547add1cd1a465479103b82d46bee48784e0f11ea7126fb167 -size 26787619 diff --git a/logs2/qemu-amd64-20260614-163853.log b/logs2/qemu-amd64-20260614-163853.log deleted file mode 100644 index a2f3714a..00000000 --- a/logs2/qemu-amd64-20260614-163853.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:79768405c5684fdbe3a37a0a20d10455f9a71689b2de19747bfc2a4e2f96ecdc -size 452449 diff --git a/logs2/qemu-amd64-20260614-182034.log b/logs2/qemu-amd64-20260614-182034.log deleted file mode 100644 index f7033f5d..00000000 --- a/logs2/qemu-amd64-20260614-182034.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:91ab796a2962f55f083225ec016df2d993a157f4c7ffdff0297e8fdca96f44dc -size 454035 diff --git a/logs2/qemu-amd64-20260614-182119.log b/logs2/qemu-amd64-20260614-182119.log deleted file mode 100644 index 1601438f..00000000 --- a/logs2/qemu-amd64-20260614-182119.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d575a3d5e65e08e83dd9ffafe823afbe6461397944c87fe550d0894639428e24 -size 454035 diff --git a/logs2/qemu-amd64-20260614-183302.log b/logs2/qemu-amd64-20260614-183302.log deleted file mode 100644 index f0638900..00000000 --- a/logs2/qemu-amd64-20260614-183302.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:28b0858d6ff05c8c7e3f43bac46abc1c999e89d341ab81cc54a8995be8731b5b -size 454084 diff --git a/logs2/qemu-amd64-20260614-185942.log b/logs2/qemu-amd64-20260614-185942.log deleted file mode 100644 index 9d69ae2e..00000000 --- a/logs2/qemu-amd64-20260614-185942.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4f528c79f5107275bd0e1a4e4d7dfbea814e12d52ad1c664e596bde47f99df11 -size 454111 diff --git a/logs2/qemu-amd64-20260614-190244.log b/logs2/qemu-amd64-20260614-190244.log deleted file mode 100644 index ee25f576..00000000 --- a/logs2/qemu-amd64-20260614-190244.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d703df3557bdd25026e54230a3d91e47849001f78331b09754e00eecd8b132c8 -size 454093 diff --git a/logs2/qemu-amd64-20260614-212929.log b/logs2/qemu-amd64-20260614-212929.log deleted file mode 100644 index 83deedb1..00000000 --- a/logs2/qemu-amd64-20260614-212929.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d3d625ea9b5712bb569182f6e69be834d944ddc4c337d160a948131c8be94ba8 -size 26750601 diff --git a/logs2/qemu-amd64-20260614-233623.log b/logs2/qemu-amd64-20260614-233623.log deleted file mode 100644 index 727f18bf..00000000 --- a/logs2/qemu-amd64-20260614-233623.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c64cef6aa7612c046f55596d4303cd93f52def9b229c1978db686eb3ac0c68a6 -size 26653964 diff --git a/logs2/qemu-amd64-20260615-005725.log b/logs2/qemu-amd64-20260615-005725.log deleted file mode 100644 index dfe9b396..00000000 --- a/logs2/qemu-amd64-20260615-005725.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:535c12b23a1d1f555475283784ee3a80442379752c946ebe391e8e179aa18a6b -size 26678736 diff --git a/logs2/qemu-amd64-20260615-020446.log b/logs2/qemu-amd64-20260615-020446.log deleted file mode 100644 index b99dbe33..00000000 --- a/logs2/qemu-amd64-20260615-020446.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:951797fcd00093a2ff1f9aaff10cacbb0697d83ad33bdd4052aa59b716b2d8f7 -size 26669147 diff --git a/logs2/qemu-amd64-20260615-103154.log b/logs2/qemu-amd64-20260615-103154.log deleted file mode 100644 index 8bce7da7..00000000 --- a/logs2/qemu-amd64-20260615-103154.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36244198d4ea8df9153d36bf317aa460b9891a1a8f23a112c04e3a96596cc419 -size 454240 diff --git a/logs2/qemu-amd64-20260615-103619.log b/logs2/qemu-amd64-20260615-103619.log deleted file mode 100644 index 34078166..00000000 --- a/logs2/qemu-amd64-20260615-103619.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c0b7c167eed3efb9c6eddd434dbf34f42599c62c2229af469ad6c1841b293f7 -size 453990 diff --git a/logs2/qemu-amd64-20260615-103843.log b/logs2/qemu-amd64-20260615-103843.log deleted file mode 100644 index cfe6e37f..00000000 --- a/logs2/qemu-amd64-20260615-103843.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:391f8438be7e7d8db94a27aa2206c508310ec96c6d8c445f218ea8bcae2cf026 -size 26759728 diff --git a/logs2/qemu-amd64-20260615-124956.log b/logs2/qemu-amd64-20260615-124956.log deleted file mode 100644 index 9dcdaa58..00000000 --- a/logs2/qemu-amd64-20260615-124956.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e5d57b7581a046460ad6f7916b572f88e908f9f255a9736f7ef64243ceea8d8b -size 1310694 diff --git a/logs2/qemu-amd64-20260615-125017.log b/logs2/qemu-amd64-20260615-125017.log deleted file mode 100644 index b4176e99..00000000 --- a/logs2/qemu-amd64-20260615-125017.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:862d1ae1c84781c78ccd637761c22065a9277d104b3e48a1de18dc648f29b2e8 -size 1220938 diff --git a/logs2/qemu-amd64-20260615-125335.log b/logs2/qemu-amd64-20260615-125335.log deleted file mode 100644 index 1f089ad3..00000000 --- a/logs2/qemu-amd64-20260615-125335.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6206230729075784373806c4e194ae45c46af6dbef4807f1603b40c91d7fd962 -size 26459082 diff --git a/logs2/qemu-amd64-20260615-142839.log b/logs2/qemu-amd64-20260615-142839.log deleted file mode 100644 index 6fa32cc6..00000000 --- a/logs2/qemu-amd64-20260615-142839.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7cdd0225e3eb4516a7cba323664b95aff5f00bb070d207e3e4dc3cffa1fd441b -size 26804029 diff --git a/logs2/qemu-amd64-20260615-161023.log b/logs2/qemu-amd64-20260615-161023.log deleted file mode 100644 index 492cc9bd..00000000 --- a/logs2/qemu-amd64-20260615-161023.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0cd6e72e44a976d342e13c7b20c84a9a25386a29e2ede68facdf1facc5d45b8c -size 26781098 diff --git a/logs2/qemu-amd64-20260615-180252.log b/logs2/qemu-amd64-20260615-180252.log deleted file mode 100644 index 293121b9..00000000 --- a/logs2/qemu-amd64-20260615-180252.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f60516570b2de42393232c7129e0db94bd02985109b9cff0315c34a5ab8c1f0 -size 1155561 diff --git a/logs2/qemu-amd64-20260615-182339.log b/logs2/qemu-amd64-20260615-182339.log deleted file mode 100644 index e8bde4e7..00000000 --- a/logs2/qemu-amd64-20260615-182339.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:04957e8778b0b4160143b83865d21cfc79e0a8d9b97095fb040b1a93a18e68e5 -size 2977576 diff --git a/logs2/qemu-amd64-20260615-182946.log b/logs2/qemu-amd64-20260615-182946.log deleted file mode 100644 index 0e0ee3c8..00000000 --- a/logs2/qemu-amd64-20260615-182946.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:39b1c2e88bba99a54b4473eeb1c24281cadea9376a03f575f76386d541bf1dba -size 138597 diff --git a/logs2/qemu-amd64-20260615-183023.log b/logs2/qemu-amd64-20260615-183023.log deleted file mode 100644 index a2ad21ec..00000000 --- a/logs2/qemu-amd64-20260615-183023.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:28de2fff2c4e0103afa17e382b11c09587de7634766887f9bd2fb1cbbc1f24b2 -size 26627477 diff --git a/logs2/qemu-amd64-20260615-194545.log b/logs2/qemu-amd64-20260615-194545.log deleted file mode 100644 index 710af523..00000000 --- a/logs2/qemu-amd64-20260615-194545.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0ae003125d32ae45ace427117fc72799ca3265e38e22a4bb87c500aba471bddc -size 26619977 diff --git a/logs2/qemu-amd64-20260615-204632.log b/logs2/qemu-amd64-20260615-204632.log deleted file mode 100644 index d23880c1..00000000 --- a/logs2/qemu-amd64-20260615-204632.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2315ce9165ed63d041be4f69fbfad30ed01bddc156ef34ee8ffac498a21291b -size 26624536 diff --git a/logs2/qemu-amd64-20260615-223531.log b/logs2/qemu-amd64-20260615-223531.log deleted file mode 100644 index e69de29b..00000000 diff --git a/logs2/qemu-amd64-20260615-223607.log b/logs2/qemu-amd64-20260615-223607.log deleted file mode 100644 index 35ff0116..00000000 --- a/logs2/qemu-amd64-20260615-223607.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:74ce1bcfe28e9f9a7dc2b4f2059822b646d668eb87ed8a603eff66c08c888c69 -size 6149285 diff --git a/logs2/qemu-amd64-20260615-230419.log b/logs2/qemu-amd64-20260615-230419.log deleted file mode 100644 index d3e06b9b..00000000 --- a/logs2/qemu-amd64-20260615-230419.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:975395f039c9cf72a8e4345f52eb4ad1b460f12ac9e590aa18a4b28c86f2a1d3 -size 26585196 diff --git a/logs2/qemu-amd64-20260616-001614.log b/logs2/qemu-amd64-20260616-001614.log deleted file mode 100644 index d85fec71..00000000 --- a/logs2/qemu-amd64-20260616-001614.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdca033d07fb2060c65d6b5fee3d6f0d561be8851a23aa269f574915a599b73a -size 26589065 diff --git a/logs2/qemu-amd64-20260616-011447.log b/logs2/qemu-amd64-20260616-011447.log deleted file mode 100644 index fa1b717f..00000000 --- a/logs2/qemu-amd64-20260616-011447.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8663beb8f2d885ff9230f7a33acd87bec353bc8ab9aae0d6cf9024eec4aba54f -size 26594760 diff --git a/logs2/qemu-amd64-20260616-111913.log b/logs2/qemu-amd64-20260616-111913.log deleted file mode 100644 index a2bb3131..00000000 --- a/logs2/qemu-amd64-20260616-111913.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:54e64439fc6838e884e5963c225eaf596e1ef297e4b1e915e0aac0e569269de7 -size 2989365 diff --git a/logs2/qemu-amd64-20260616-154608.log b/logs2/qemu-amd64-20260616-154608.log deleted file mode 100644 index 95c95fa6..00000000 --- a/logs2/qemu-amd64-20260616-154608.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a925f3e693496963a135dd0a26bff73f96b9d52748b7789e1163291ba3d20f61 -size 2979714 diff --git a/logs2/qemu-amd64-20260616-175829.log b/logs2/qemu-amd64-20260616-175829.log deleted file mode 100644 index 6045e214..00000000 --- a/logs2/qemu-amd64-20260616-175829.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:748ec87f38fe3ee754e56f64c2d35d1a1fa52fe9c7363a260431765117c60fc8 -size 454128 diff --git a/logs2/qemu-amd64-20260620-222036.log b/logs2/qemu-amd64-20260620-222036.log deleted file mode 100644 index 7d0d760e..00000000 --- a/logs2/qemu-amd64-20260620-222036.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f2d88a222232a42b27d41bef5852ac44351f2a076625b495a2b6c747edda11e7 -size 454888 diff --git a/logs2/qemu-amd64-20260621-002830.log b/logs2/qemu-amd64-20260621-002830.log deleted file mode 100644 index 4cd23e23..00000000 --- a/logs2/qemu-amd64-20260621-002830.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b48635e970f3d19331d075386cd793bbc2069cd073ed962d272970cb1fd290c6 -size 463427 diff --git a/logs2/qemu-amd64-20260621-004710.log b/logs2/qemu-amd64-20260621-004710.log deleted file mode 100644 index f385ef3d..00000000 --- a/logs2/qemu-amd64-20260621-004710.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:60a9c348ace7155d195ad47acabbbfc314fc20b2a353435423f7f0bedc79cd87 -size 463389 diff --git a/logs2/qemu-riscv64-20260609-192223.log b/logs2/qemu-riscv64-20260609-192223.log deleted file mode 100644 index f3f5113a..00000000 --- a/logs2/qemu-riscv64-20260609-192223.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:13265fd92a595a4ecf253c4bb6461d5ae284b31c6565e6d9053d85f38a110082 -size 454533 diff --git a/logs2/qemu-riscv64-20260611-002548.log b/logs2/qemu-riscv64-20260611-002548.log deleted file mode 100644 index 81ed5b7e..00000000 --- a/logs2/qemu-riscv64-20260611-002548.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c3a24074ce39f43c81052c2ce1cddf0794d8ceec07b3195cd96acad9b6d5a7d7 -size 3656 diff --git a/logs2/qemu-riscv64-20260611-003502.log b/logs2/qemu-riscv64-20260611-003502.log deleted file mode 100644 index 5c4fa2a2..00000000 --- a/logs2/qemu-riscv64-20260611-003502.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1982b748e57fe8c302c83fe804e55e6437e505e748405e5c7d32cb7b710b4c3e -size 3656 diff --git a/logs2/qemu-riscv64-20260611-003801.log b/logs2/qemu-riscv64-20260611-003801.log deleted file mode 100644 index 276d9df0..00000000 --- a/logs2/qemu-riscv64-20260611-003801.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5d39b719c48058e3d903bc92d121ac446772f177d05bdbf3a9bfa519e30da119 -size 461796 diff --git a/logs2/qemu-riscv64-20260611-024624.log b/logs2/qemu-riscv64-20260611-024624.log deleted file mode 100644 index e1099f32..00000000 --- a/logs2/qemu-riscv64-20260611-024624.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3a8ad9c1bb22efb837c9a7b9646832a688cca6710177155f3ee7a8f4c96699ea -size 5246437 diff --git a/logs2/qemu-riscv64-20260611-173903.log b/logs2/qemu-riscv64-20260611-173903.log deleted file mode 100644 index 19d4411f..00000000 --- a/logs2/qemu-riscv64-20260611-173903.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e3bbd31797d0b4ad4f22622f4c15c9b2e4f2a0b68841b540a775d0ac1d6ea8d -size 2869662 diff --git a/logs2/qemu-riscv64-20260611-175348.log b/logs2/qemu-riscv64-20260611-175348.log deleted file mode 100644 index 472e8a1a..00000000 --- a/logs2/qemu-riscv64-20260611-175348.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b6379b501b237f23888354d49f01775a6361162af5c6cc3252a721ac4a1db1c4 -size 453754 diff --git a/logs2/qemu-riscv64-20260611-191335.log b/logs2/qemu-riscv64-20260611-191335.log deleted file mode 100644 index be5a74fb..00000000 --- a/logs2/qemu-riscv64-20260611-191335.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:424044bf92ab72748724fe3432e7cf09720cf64834dc0c9d4502b9daf0b18fd5 -size 24461243 diff --git a/logs2/qemu-riscv64-20260611-203104.log b/logs2/qemu-riscv64-20260611-203104.log deleted file mode 100644 index f39af689..00000000 --- a/logs2/qemu-riscv64-20260611-203104.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bdc8f152b9c1216ebfc5aaa3bddeefe53462485de887ba2bbc0109554905e0af -size 2869665 diff --git a/logs2/qemu-riscv64-20260612-135612.log b/logs2/qemu-riscv64-20260612-135612.log deleted file mode 100644 index 12487e24..00000000 --- a/logs2/qemu-riscv64-20260612-135612.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a6ba3e43f91ef13cbafe6d288930d2e7a9d1a065421403f6b12ed50ec9fbf489 -size 24461719 diff --git a/logs2/qemu-riscv64-20260612-141129.log b/logs2/qemu-riscv64-20260612-141129.log deleted file mode 100644 index 06ced14b..00000000 --- a/logs2/qemu-riscv64-20260612-141129.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fedc2623db6780b04521c478657f700f7eb6d5d2d46d86d718f602bbc8ba98d9 -size 24487550 diff --git a/logs2/qemu-riscv64-20260612-174414.log b/logs2/qemu-riscv64-20260612-174414.log deleted file mode 100644 index be3f2930..00000000 --- a/logs2/qemu-riscv64-20260612-174414.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:672ec58e1c3395a7c2ecd3324ff3772699b6423737576e37ce9fa651b6cb10cc -size 24470192 diff --git a/logs2/qemu-riscv64-20260614-164140.log b/logs2/qemu-riscv64-20260614-164140.log deleted file mode 100644 index 1f4d81c6..00000000 --- a/logs2/qemu-riscv64-20260614-164140.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:68de4275e8a5d79d049870690cb6ae80872a619176a724ff26189d27e2e43951 -size 3478 diff --git a/logs2/qemu-riscv64-20260614-165900.log b/logs2/qemu-riscv64-20260614-165900.log deleted file mode 100644 index ea6c6cf0..00000000 --- a/logs2/qemu-riscv64-20260614-165900.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8e09f737f70ee5d08d85c4548cef334215b30c31d1b51938913eaa1737414a70 -size 3484 diff --git a/logs2/qemu-riscv64-20260614-170926.log b/logs2/qemu-riscv64-20260614-170926.log deleted file mode 100644 index c5aca9dd..00000000 --- a/logs2/qemu-riscv64-20260614-170926.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7bda12cfc05493e20f42ebba91e207d0ae1ae8190035f352617ebd59ac127f3f -size 4746 diff --git a/logs2/qemu-riscv64-20260614-171955.log b/logs2/qemu-riscv64-20260614-171955.log deleted file mode 100644 index 8de4f3ef..00000000 --- a/logs2/qemu-riscv64-20260614-171955.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a16185d8e5cdcb302637af85b6c8a66d73cbd7c8f983aba88cb73981957d02a0 -size 454514 diff --git a/logs2/qemu-riscv64-20260614-182235.log b/logs2/qemu-riscv64-20260614-182235.log deleted file mode 100644 index fa8d972a..00000000 --- a/logs2/qemu-riscv64-20260614-182235.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e545d0827cff65a7f125590a27583a163f248b484b0a333d3015cdd826db0b5f -size 455326 diff --git a/logs2/qemu-riscv64-20260614-190152.log b/logs2/qemu-riscv64-20260614-190152.log deleted file mode 100644 index 1cfdb783..00000000 --- a/logs2/qemu-riscv64-20260614-190152.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:94f39f57529b464ae62455f9df5d204b2fcb2a4b0f72efbd5b77d3d05681c064 -size 455396 diff --git a/logs2/qemu-riscv64-20260614-230220.log b/logs2/qemu-riscv64-20260614-230220.log deleted file mode 100644 index 308170f4..00000000 --- a/logs2/qemu-riscv64-20260614-230220.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a9252d099af5aae9ba861e96f4e28b52ed6acf1b36714883f5dc4b721084a3d4 -size 24721249 diff --git a/logs2/qemu-riscv64-20260615-004335.log b/logs2/qemu-riscv64-20260615-004335.log deleted file mode 100644 index 01f0508d..00000000 --- a/logs2/qemu-riscv64-20260615-004335.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e266bf0ab69591c30071e90b59eb4f2394e7c75c54897a2ac78e4b1a78610cc -size 24715944 diff --git a/logs2/qemu-riscv64-20260615-004822.log b/logs2/qemu-riscv64-20260615-004822.log deleted file mode 100644 index 0ad56fcc..00000000 --- a/logs2/qemu-riscv64-20260615-004822.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:afa30fafd39d23078b484fd0a876e706307800c7e894a8e466595a1d58f856bd -size 24742087 diff --git a/logs2/qemu-riscv64-20260615-031059.log b/logs2/qemu-riscv64-20260615-031059.log deleted file mode 100644 index 209a8aaa..00000000 --- a/logs2/qemu-riscv64-20260615-031059.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b54e988ed8fff287a1ea4f2f6390a8ddf9bf1f08c7cb4a2f690d13a3039fc66b -size 24726338 diff --git a/logs2/qemu-riscv64-20260615-103741.log b/logs2/qemu-riscv64-20260615-103741.log deleted file mode 100644 index c199af61..00000000 --- a/logs2/qemu-riscv64-20260615-103741.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:889f022a9a9b4f835d8b1cb3b9a31aaf63982f43e871b569fec347a61ceea121 -size 455449 diff --git a/logs2/qemu-riscv64-20260615-122026.log b/logs2/qemu-riscv64-20260615-122026.log deleted file mode 100644 index 23990740..00000000 --- a/logs2/qemu-riscv64-20260615-122026.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba68fb8c137c5db04ee89d8355a18dbccaf6cc533fc65f558ad339194aa2c69d -size 40469576 diff --git a/logs2/qemu-riscv64-20260615-122930.log b/logs2/qemu-riscv64-20260615-122930.log deleted file mode 100644 index d21ea928..00000000 --- a/logs2/qemu-riscv64-20260615-122930.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8cdaafbdc7baae96e6cc5e6f8f0522ee4dbef2a02692c6c3fc88bf276290bbf1 -size 40707313 diff --git a/logs2/qemu-riscv64-20260615-174420.log b/logs2/qemu-riscv64-20260615-174420.log deleted file mode 100644 index 3e92765a..00000000 --- a/logs2/qemu-riscv64-20260615-174420.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d8de0e7cfbdbe9f1b764778019095962bdb83961c18da79ec77c4bd12fce9f67 -size 40970797 diff --git a/logs2/qemu-riscv64-20260615-183017.log b/logs2/qemu-riscv64-20260615-183017.log deleted file mode 100644 index 35eadadf..00000000 --- a/logs2/qemu-riscv64-20260615-183017.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7093abe9e9ebca406ca4ee0f13ab0c44c1aab6dd362162422c450c934866dd3 -size 454565 diff --git a/logs2/qemu-riscv64-20260615-193223.log b/logs2/qemu-riscv64-20260615-193223.log deleted file mode 100644 index 58e23cf5..00000000 --- a/logs2/qemu-riscv64-20260615-193223.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ab2d39c04e76e34ad66606adfb5cba94edad5f4268fe221f4186e02e90cf4b9 -size 25739252 diff --git a/logs2/qemu-riscv64-20260615-193711.log b/logs2/qemu-riscv64-20260615-193711.log deleted file mode 100644 index 8b2add39..00000000 --- a/logs2/qemu-riscv64-20260615-193711.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a92d3d9d1dea81945339edfde95ea96fafd671adee5aff4fdcc5780956dc694 -size 25753142 diff --git a/logs2/qemu-riscv64-20260615-214335.log b/logs2/qemu-riscv64-20260615-214335.log deleted file mode 100644 index 544abeca..00000000 --- a/logs2/qemu-riscv64-20260615-214335.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f3fb8b4c9e3cd3d4c93c9a8edd5ff127f8c493bdc399f8daa90df213e62af36e -size 25766622 diff --git a/logs2/qemu-riscv64-20260615-223550.log b/logs2/qemu-riscv64-20260615-223550.log deleted file mode 100644 index 4273f514..00000000 --- a/logs2/qemu-riscv64-20260615-223550.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f12ca988cc5b7df213b9bc36d1ced1a3b972f26b6a6e5cb8c09ac585494a6727 -size 456148 diff --git a/logs2/qemu-riscv64-20260616-000114.log b/logs2/qemu-riscv64-20260616-000114.log deleted file mode 100644 index c8514038..00000000 --- a/logs2/qemu-riscv64-20260616-000114.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:583e5a555c3c47d551b5c310cd0efe7156b8510d40c6144da379a60f7b42adf0 -size 24732863 diff --git a/logs2/qemu-riscv64-20260616-000522.log b/logs2/qemu-riscv64-20260616-000522.log deleted file mode 100644 index 56e055d7..00000000 --- a/logs2/qemu-riscv64-20260616-000522.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:20003eacea2508d339b62eb1283943212bc1053424e2ccaea9cb6c7fde94bd9c -size 24740552 diff --git a/logs2/qemu-riscv64-20260616-021123.log b/logs2/qemu-riscv64-20260616-021123.log deleted file mode 100644 index 49c2f30f..00000000 --- a/logs2/qemu-riscv64-20260616-021123.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:22833409d3f85b78bfdd04dabff0178009ebdefea664c021c91940035fa5fe6f -size 24738045 diff --git a/logs2/qemu-riscv64-20260616-113103.log b/logs2/qemu-riscv64-20260616-113103.log deleted file mode 100644 index 0acf79db..00000000 --- a/logs2/qemu-riscv64-20260616-113103.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d8afb3224c857e35b36a733406c5582f0725b274d767e5c0755cd4a2d15e0a3c -size 2871138 diff --git a/logs2/qemu-riscv64-20260616-155324.log b/logs2/qemu-riscv64-20260616-155324.log deleted file mode 100644 index 35f42dad..00000000 --- a/logs2/qemu-riscv64-20260616-155324.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4ea73709d6cb5d9dd2c6917832a0f584a71a97aae402706a1d2ca542c3a3cc13 -size 2870243 diff --git a/logs2/qemu-riscv64-20260616-175915.log b/logs2/qemu-riscv64-20260616-175915.log deleted file mode 100644 index 57df4bc8..00000000 --- a/logs2/qemu-riscv64-20260616-175915.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d9b5fcaf0a7fc241170023df5cf64052b569eb43848b262d3fe3446925b6728 -size 456125 diff --git a/logs2/qemu-riscv64-20260620-231806.log b/logs2/qemu-riscv64-20260620-231806.log deleted file mode 100644 index e56f120b..00000000 --- a/logs2/qemu-riscv64-20260620-231806.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a5d8473c973399578f544e0570190d1ecf4b168a71ed9825338f071059d02334 -size 456336 diff --git a/logs2/qemu-riscv64-20260621-004843.log b/logs2/qemu-riscv64-20260621-004843.log deleted file mode 100644 index 57c4b485..00000000 --- a/logs2/qemu-riscv64-20260621-004843.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8094140433a197527fe5c462cb5d386f04d3acef87a1e690d8faf93b433ec45b -size 464944 diff --git a/logs2/qemu-screenshot-20260609-105458.png b/logs2/qemu-screenshot-20260609-105458.png deleted file mode 100644 index 47ebf099..00000000 Binary files a/logs2/qemu-screenshot-20260609-105458.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260609-130717.png b/logs2/qemu-screenshot-20260609-130717.png deleted file mode 100644 index 88526cc4..00000000 Binary files a/logs2/qemu-screenshot-20260609-130717.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260609-181200.png b/logs2/qemu-screenshot-20260609-181200.png deleted file mode 100644 index 46748d8b..00000000 Binary files a/logs2/qemu-screenshot-20260609-181200.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260609-193724.log b/logs2/qemu-screenshot-20260609-193724.log deleted file mode 100644 index 58987244..00000000 --- a/logs2/qemu-screenshot-20260609-193724.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c9c87048a095a22f62092b734a48c0b27e41946f433f023132b6bae3dbda3ac8 -size 452582 diff --git a/logs2/qemu-screenshot-20260609-193724.png b/logs2/qemu-screenshot-20260609-193724.png deleted file mode 100644 index c0fa4639..00000000 Binary files a/logs2/qemu-screenshot-20260609-193724.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260609-194549.png b/logs2/qemu-screenshot-20260609-194549.png deleted file mode 100644 index 57bba522..00000000 Binary files a/logs2/qemu-screenshot-20260609-194549.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260609-194812.png b/logs2/qemu-screenshot-20260609-194812.png deleted file mode 100644 index 0397151d..00000000 Binary files a/logs2/qemu-screenshot-20260609-194812.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260609-222537.png b/logs2/qemu-screenshot-20260609-222537.png deleted file mode 100644 index fd5705ac..00000000 Binary files a/logs2/qemu-screenshot-20260609-222537.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260609-225958.png b/logs2/qemu-screenshot-20260609-225958.png deleted file mode 100644 index 81a4b0d4..00000000 Binary files a/logs2/qemu-screenshot-20260609-225958.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260609-232904.png b/logs2/qemu-screenshot-20260609-232904.png deleted file mode 100644 index 8a1a841f..00000000 Binary files a/logs2/qemu-screenshot-20260609-232904.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260610-005734.png b/logs2/qemu-screenshot-20260610-005734.png deleted file mode 100644 index e9be55f6..00000000 Binary files a/logs2/qemu-screenshot-20260610-005734.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260610-134732.png b/logs2/qemu-screenshot-20260610-134732.png deleted file mode 100644 index c15cfc8e..00000000 Binary files a/logs2/qemu-screenshot-20260610-134732.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260610-145902.png b/logs2/qemu-screenshot-20260610-145902.png deleted file mode 100644 index 94f3cf5d..00000000 Binary files a/logs2/qemu-screenshot-20260610-145902.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260610-213714.png b/logs2/qemu-screenshot-20260610-213714.png deleted file mode 100644 index f4694fbc..00000000 Binary files a/logs2/qemu-screenshot-20260610-213714.png and /dev/null differ diff --git a/logs2/qemu-screenshot-20260611-002306.log b/logs2/qemu-screenshot-20260611-002306.log deleted file mode 100644 index aff53f54..00000000 --- a/logs2/qemu-screenshot-20260611-002306.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:199e9f695072ae75c77b893a73b6a7382fe94782bc78e1f32bdb67b9e97400ae -size 459201 diff --git a/logs2/qemu-screenshot-20260611-004156.log b/logs2/qemu-screenshot-20260611-004156.log deleted file mode 100644 index 7affce54..00000000 --- a/logs2/qemu-screenshot-20260611-004156.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba128e200b7f3d691f1eeae1a924f37522f7ee162041716f383eef2b4d57af30 -size 459018 diff --git a/logs2/qemu-screenshot-20260611-012817.log b/logs2/qemu-screenshot-20260611-012817.log deleted file mode 100644 index 2347d6e7..00000000 --- a/logs2/qemu-screenshot-20260611-012817.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0712969ca14c5963b7499d5afa4252578f1fe78131f1a17fe405122c88895b08 -size 25304214 diff --git a/logs2/qemu-screenshot-20260611-023758.log b/logs2/qemu-screenshot-20260611-023758.log deleted file mode 100644 index 42970cdc..00000000 --- a/logs2/qemu-screenshot-20260611-023758.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7714a174fbb9793b69d1898fa5ac98ef9bcb6d48ec38cdea3c3a90e00f6f1565 -size 604233 diff --git a/logs2/qemu-screenshot-20260611-024401.log b/logs2/qemu-screenshot-20260611-024401.log deleted file mode 100644 index 7209e51f..00000000 --- a/logs2/qemu-screenshot-20260611-024401.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bebab938202d4aa165b10f57995cadf09381f0fccf7ec076fb9f3feb4f42d76a -size 2866250 diff --git a/logs2/qemu-screenshot-20260611-173657.log b/logs2/qemu-screenshot-20260611-173657.log deleted file mode 100644 index c60e60bd..00000000 --- a/logs2/qemu-screenshot-20260611-173657.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1c06d0476ea2356dce906c9d5fb6fb92bdd63d40449bef71fc56e4cf2e38c67c -size 452560 diff --git a/logs2/qemu-screenshot-20260611-174914.log b/logs2/qemu-screenshot-20260611-174914.log deleted file mode 100644 index 68fb3be5..00000000 --- a/logs2/qemu-screenshot-20260611-174914.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fa5498124fe32dfafdebf6357953bf0c984302be801c3de8a5892a5716212ac8 -size 452631 diff --git a/logs2/qemu-screenshot-20260611-175224.log b/logs2/qemu-screenshot-20260611-175224.log deleted file mode 100644 index 6ae2e0a1..00000000 --- a/logs2/qemu-screenshot-20260611-175224.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cee76955a92b5cb596c9b151127800e39a3e27014566c564c35938f4edee0abb -size 452264 diff --git a/logs2/qemu-screenshot-20260611-190757.log b/logs2/qemu-screenshot-20260611-190757.log deleted file mode 100644 index 8676f52f..00000000 --- a/logs2/qemu-screenshot-20260611-190757.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ccd417963fa0ba7df6837e024585f7cde5fd9d9590731566415396b40bab786a -size 452625 diff --git a/logs2/qemu-screenshot-20260611-202932.log b/logs2/qemu-screenshot-20260611-202932.log deleted file mode 100644 index 4318c6eb..00000000 --- a/logs2/qemu-screenshot-20260611-202932.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:39778c1b2c0305f5cca9a5721f32e6acfc62cc1061a045b211231e4ca984a81f -size 452591 diff --git a/logs2/qemu-screenshot-20260612-115354.log b/logs2/qemu-screenshot-20260612-115354.log deleted file mode 100644 index d2677734..00000000 --- a/logs2/qemu-screenshot-20260612-115354.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:70965feaf792b1c68be9ad045ab3927fb19761a6fb094cdd17b08fa737287e51 -size 450345 diff --git a/logs2/qemu-screenshot-20260612-160054.log b/logs2/qemu-screenshot-20260612-160054.log deleted file mode 100644 index 8ee35b46..00000000 --- a/logs2/qemu-screenshot-20260612-160054.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ab2fb5c928eccdaf8ffe880b56cc58e1d48b5c8cc1432ee86acf3c1716a226d0 -size 452714 diff --git a/logs2/qemu-screenshot-20260612-174331.log b/logs2/qemu-screenshot-20260612-174331.log deleted file mode 100644 index 93393887..00000000 --- a/logs2/qemu-screenshot-20260612-174331.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bfb85553d48568163408c013ad76dfe3d6b2ef633517a3bbcd0dc1366f0d5c78 -size 452712 diff --git a/logs2/qemu-screenshot-20260614-163902.log b/logs2/qemu-screenshot-20260614-163902.log deleted file mode 100644 index 7968ffa0..00000000 --- a/logs2/qemu-screenshot-20260614-163902.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9cfedb98dd49805599db38c2d8f7d974399c2adc4f18719d2514148369ad8d9c -size 452394 diff --git a/logs2/qemu-screenshot-20260614-182044.log b/logs2/qemu-screenshot-20260614-182044.log deleted file mode 100644 index e69de29b..00000000 diff --git a/logs2/qemu-screenshot-20260614-182127.log b/logs2/qemu-screenshot-20260614-182127.log deleted file mode 100644 index 89d3a041..00000000 --- a/logs2/qemu-screenshot-20260614-182127.log +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1105c2be14434743bc2ab87c17e362523c02be36ea29beaa2d66d49bcce1d076 -size 453849 diff --git a/mk/Kconfig.mk b/mk/Kconfig.mk index 4d2bfc08..a5575e78 100644 --- a/mk/Kconfig.mk +++ b/mk/Kconfig.mk @@ -1,5 +1,5 @@ # ============================================================================== -# mk/Kconfig.mk — shared Kconfig bridge for Makefile and Makefile.starkernel +# mk/Kconfig.mk — shared Kconfig bridge for Makefile and kernel/Makefile # ============================================================================== # # Included by both build systems, after each has finished resolving its own @@ -101,7 +101,7 @@ savedefconfig: $(KCONFIG_CONF) # dispatching any -jN jobs" behavior fully serializes "regenerate config" # before "compile anything" -- for free, with no hand-maintained # prerequisite list. Deliberately not the include/version.h-style -# order-only pattern (Makefile.starkernel:49-53/656-658), which needed its +# order-only pattern (kernel/Makefile:49-53/656-658), which needed its # own special-cased -j/clean workaround once already. # # Guarded on the config file already existing: until a developer opts in via diff --git a/mk/README.md b/mk/README.md index 98155bfe..74fd285f 100644 --- a/mk/README.md +++ b/mk/README.md @@ -1,7 +1,7 @@ # mk/ - `Kconfig.mk` — shared Kconfig bridge included by both `Makefile` and - `Makefile.starkernel`. Each Makefile canonicalizes its own `ARCH` and + `kernel/Makefile`. Each Makefile canonicalizes its own `ARCH` and sets `KCONFIG_ARCH_DIR` before including this file, since the hosted and kernel builds map `aarch64` to different object-directory names. Config lives per-architecture under `build/$(KCONFIG_ARCH_DIR)/` rather diff --git a/scripts/mkdiskimage.sh b/scripts/mkdiskimage.sh new file mode 100644 index 00000000..f0bb89c7 --- /dev/null +++ b/scripts/mkdiskimage.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# mkdiskimage.sh -- build a single-partition FAT32 boot disk image. +# +# Used by `make boot_image TARGET=` (kernel/Makefile). One script for +# every board so the geometry rules live in one place: +# - partition 1 starts at 1 MiB (sector 2048) and runs to the last usable +# sector; the FAT32 filesystem is sized to the partition exactly (a +# larger filesystem overruns the partition -- the bug that made early +# SER5 thumbdrive images unbootable, see kernel/Makefile `thumbdrive`); +# - GPT tables reserve 33 sectors at the end of the disk for the backup +# header, MBR tables do not. +# +# Usage: +# mkdiskimage.sh --out IMG --table gpt|mbr --size-mib N --label LABEL \ +# SRC:DEST [SRC:DEST ...] +# +# --table gpt -> partition type "EFI System" (UEFI firmware, U-Boot bootefi) +# --table mbr -> partition type 0x0c FAT32 (LBA) (Raspberry Pi firmware) +# DEST is an absolute path inside the FAT filesystem; parent directories are +# created as needed. +# +# Needs only sfdisk (util-linux), mkfs.fat (dosfstools) and mtools -- no +# root, no loop devices. +set -euo pipefail + +OUT="" TABLE="" SIZE_MIB="" LABEL="" +while [ $# -gt 0 ]; do + case "$1" in + --out) OUT="$2"; shift 2 ;; + --table) TABLE="$2"; shift 2 ;; + --size-mib) SIZE_MIB="$2"; shift 2 ;; + --label) LABEL="$2"; shift 2 ;; + --) shift; break ;; + -*) echo "mkdiskimage.sh: unknown option $1" >&2; exit 2 ;; + *) break ;; + esac +done + +[ -n "$OUT" ] && [ -n "$TABLE" ] && [ -n "$SIZE_MIB" ] && [ -n "$LABEL" ] || { + echo "mkdiskimage.sh: --out, --table, --size-mib and --label are required" >&2; exit 2; } +[ $# -gt 0 ] || { echo "mkdiskimage.sh: no SRC:DEST files given" >&2; exit 2; } + +for tool in sfdisk mkfs.fat mmd mcopy; do + command -v "$tool" >/dev/null 2>&1 || PATH="$PATH:/usr/sbin:/sbin" + command -v "$tool" >/dev/null 2>&1 || { + echo "mkdiskimage.sh: $tool not found (install util-linux, dosfstools, mtools)" >&2; exit 1; } +done + +TOTAL_SECTORS=$(( SIZE_MIB * 2048 )) +START=2048 +case "$TABLE" in + gpt) LAST=$(( TOTAL_SECTORS - 34 )); PTYPE="C12A7328-F81F-11D2-BA4B-00A0C93EC93B" ;; + mbr) LAST=$(( TOTAL_SECTORS - 1 )); PTYPE="c" ;; + *) echo "mkdiskimage.sh: --table must be gpt or mbr" >&2; exit 2 ;; +esac +PART_SECTORS=$(( LAST - START + 1 )) + +ESP="$OUT.part1" +rm -f "$OUT" "$ESP" +mkdir -p "$(dirname "$OUT")" + +truncate -s $(( TOTAL_SECTORS * 512 )) "$OUT" +if [ "$TABLE" = gpt ]; then + printf 'label: gpt\nstart=%d, size=%d, type=%s, name="EFI System"\n' \ + "$START" "$PART_SECTORS" "$PTYPE" | sfdisk --quiet "$OUT" +else + printf 'label: dos\nstart=%d, size=%d, type=%s, bootable\n' \ + "$START" "$PART_SECTORS" "$PTYPE" | sfdisk --quiet "$OUT" +fi + +truncate -s $(( PART_SECTORS * 512 )) "$ESP" +mkfs.fat -F 32 -n "$LABEL" "$ESP" >/dev/null + +for spec in "$@"; do + src="${spec%%:*}" + dest="${spec#*:}" + [ -f "$src" ] || { echo "mkdiskimage.sh: missing input $src" >&2; rm -f "$OUT" "$ESP"; exit 1; } + dir="$(dirname "$dest")" + path="" + IFS=/ read -r -a parts <<< "${dir#/}" + for p in "${parts[@]}"; do + [ -n "$p" ] || continue + path="$path/$p" + mmd -D s -i "$ESP" "::$path" 2>/dev/null || true + done + mcopy -o -i "$ESP" "$src" "::$dest" +done + +dd if="$ESP" of="$OUT" bs=512 seek="$START" conv=notrunc status=none +rm -f "$ESP" +echo " IMAGE $OUT ($TABLE, ${SIZE_MIB} MiB, FAT32 '$LABEL')" diff --git a/scripts/perf-profile.sh b/scripts/perf-profile.sh index 4953aee7..c38c489d 100755 --- a/scripts/perf-profile.sh +++ b/scripts/perf-profile.sh @@ -50,7 +50,7 @@ ARGS=(--log-error --run-tests) # We need to run specific control word tests echo "[CLEAN]"; make clean echo "[BUILD performance w/ symbols for profiling]" -make CFLAGS="-std=c99 -O3 -g -fno-omit-frame-pointer -DSTARFORTH_PERFORMANCE -DNDEBUG -march=native -Wall -Werror -Iinclude -Isrc/word_source -Isrc/test_runner/include -DSTRICT_PTR=1" LDFLAGS="" +make -f v3/Makefile CFLAGS="-std=c99 -O3 -g -fno-omit-frame-pointer -DSTARFORTH_PERFORMANCE -DNDEBUG -march=native -Wall -Werror -Iv3/include -Ikernel/include -Iv3/src/word_source -Iv3/src/test_runner/include -DSTRICT_PTR=1" LDFLAGS="" [[ -x "$EXE" ]] || { echo "ERROR: $EXE missing/not executable"; exit 2; } diff --git a/scripts/perf-profile_control.sh b/scripts/perf-profile_control.sh index bc685855..7d6874e5 100755 --- a/scripts/perf-profile_control.sh +++ b/scripts/perf-profile_control.sh @@ -48,7 +48,7 @@ set -euo pipefail EXE="./build/starforth" echo "[CLEAN]"; make clean echo "[BUILD for control words profiling]" -make CFLAGS="-std=c99 -O3 -g -fno-omit-frame-pointer -DSTARFORTH_PERFORMANCE -DNDEBUG -march=native -Wall -Werror -Iinclude -Isrc/word_source -Isrc/test_runner/include -DSTRICT_PTR=1" LDFLAGS="" +make -f v3/Makefile CFLAGS="-std=c99 -O3 -g -fno-omit-frame-pointer -DSTARFORTH_PERFORMANCE -DNDEBUG -march=native -Wall -Werror -Iv3/include -Ikernel/include -Iv3/src/word_source -Iv3/src/test_runner/include -DSTRICT_PTR=1" LDFLAGS="" [[ -x "$EXE" ]] || { echo "ERROR: $EXE missing/not executable"; exit 2; } diff --git a/scripts/remove_loop_conditionals.sh b/scripts/remove_loop_conditionals.sh index 50c9e6bb..7070b0a0 100755 --- a/scripts/remove_loop_conditionals.sh +++ b/scripts/remove_loop_conditionals.sh @@ -50,9 +50,9 @@ echo "Removing ENABLE_LOOP conditional compilation directives..." # Files to process FILES=( - "src/vm.c" - "src/inference_engine.c" - "src/doe_metrics.c" + "v3/src/vm.c" + "v3/src/inference_engine.c" + "v3/src/doe_metrics.c" ) for file in "${FILES[@]}"; do diff --git a/tools/README.md b/tools/README.md index 2799879f..272fdd21 100644 --- a/tools/README.md +++ b/tools/README.md @@ -7,7 +7,7 @@ toolchain. | File | Purpose | |------|---------| -| `mkcapsule.c` | Assembles `.4th` capsule files into `capsule_generated.c` baked into the kernel image. Invoked automatically by `Makefile.starkernel`. | +| `mkcapsule.c` | Assembles `.4th` capsule files into `capsule_generated.c` baked into the kernel image. Invoked automatically by `kernel/Makefile`. | | `mkcapsule` | Compiled host binary (rebuilt on demand). | | `ttftest.c` | Host TTF glyph-rendering test — font rasterization unit tests, no QEMU needed. | | `pe_reloc_gen.py` | Generates PE32+ relocation tables for the UEFI loader. | @@ -21,7 +21,7 @@ toolchain. ```bash # Invoked automatically by the kernel build: -make -f Makefile.starkernel ARCH=amd64 clean qemu +make -f kernel/Makefile ARCH=amd64 clean qemu # Manual invocation (for inspection): ./tools/mkcapsule capsules/ build/amd64/kernel/capsule_generated.c @@ -33,5 +33,5 @@ type `(m)` to `init.4th` and `(p)` to everything else. ## See also - [`capsules/README.md`](../capsules/README.md) — capsule file format and block namespace -- [`Makefile.starkernel`](../Makefile.starkernel) — kernel build system +- [`kernel/Makefile`](../kernel/Makefile) — kernel build system - [Project root](../README.md) diff --git a/tools/mkcapsule.c b/tools/mkcapsule.c index 1c737904..d8b419b5 100644 --- a/tools/mkcapsule.c +++ b/tools/mkcapsule.c @@ -405,11 +405,13 @@ static int validate_forth_blocks(const char *fpath, block_num = (int)strtol((const char *)(data + start + 6), NULL, 10); line_in_block = 0; - /* Block number must be in user space: [2048, 5120) */ - if (block_num < 2048 || block_num >= 5120) { + /* Blocks 0..2047 are the VM's fast RAM and the only ones a + * capsule may not claim; there is no upper bound + * (docs/v4.0.0/NUCLEUS.md 5.2). */ + if (block_num < 2048) { fprintf(stderr, - "mkcapsule: ERROR: %s:%d: block %d out of user range " - "[2048, 5120)\n", + "mkcapsule: ERROR: %s:%d: block %d is in the VM's fast " + "RAM (0..2047)\n", fpath, file_line, block_num); errors++; } diff --git a/tools/ttftest.c b/tools/ttftest.c index 756298b3..ed93aabc 100644 --- a/tools/ttftest.c +++ b/tools/ttftest.c @@ -25,7 +25,7 @@ #include #include -#include "../include/starkernel/ttf.h" +#include "../kernel/include/starkernel/ttf.h" typedef struct { uint32_t codepoint; diff --git a/v3/Makefile b/v3/Makefile new file mode 100644 index 00000000..930d6253 --- /dev/null +++ b/v3/Makefile @@ -0,0 +1,1340 @@ +# ============================================================================== +# StarForth Build System - The Fastest Forth in the West! +# ============================================================================== +# +# Quick Start: +# make - Standard optimized build (auto ARCH, TARGET=standard) +# make TARGET=fastest - Maximum performance build +# make ARCH=arm64 TARGET=fastest - Build for arm64 (e.g., Raspberry Pi 4) +# make help - Show all available targets +# +# ============================================================================== + +# ============================================================================== +# CONFIGURATION +# ============================================================================== + +VERSION ?= 3.2.0 +CC = gcc + +# Isabelle configuration +# NOTE: Isabelle must be installed separately and available on PATH +# See docs/DEVELOPER.md for installation instructions +ISABELLE ?= isabelle + +# Architecture / target selection +ARCH ?= $(shell uname -m) +ARCH := $(strip $(ARCH)) +TARGET ?= standard +TARGET := $(strip $(TARGET)) + +# Friendly guardrail: 32-bit builds are not supported +unsupported_32bit_arches := i386 i486 i586 i686 x86 armv6 armv7 armv7l arm +ifneq ($(filter $(ARCH),$(unsupported_32bit_arches)),) + $(error StarForth targets 64-bit platforms only. ARCH='$(ARCH)' is unsupported. Please build on amd64/arm64/raspi/riscv64.) +endif + +# Canonical architecture normalization (x86_64→amd64, aarch64→arm64, etc.) +canon_arch = $(strip $(if $(filter x86_64,$1),amd64,$(if $(filter amd64,$1),amd64,$(if $(filter aarch64 arm64,$1),arm64,$(if $(filter riscv riscv64,$1),riscv64,$1))))) +ARCH_DIR := $(call canon_arch,$(ARCH)) +# Normalize ARCH for consistent ifeq matching +ARCH := $(call canon_arch,$(ARCH)) + +# Kconfig bridge (menuconfig/xconfig/config/oldconfig/*_defconfig). See +# mk/Kconfig.mk for why KCONFIG_ARCH_DIR must be set here, before include. +# .DEFAULT_GOAL is pinned explicitly because mk/Kconfig.mk's first rule +# would otherwise silently become Make's default goal, since it's included +# before this Makefile's own `all:` target is defined below. +.DEFAULT_GOAL := all +KCONFIG_ARCH_DIR := $(ARCH_DIR) +include mk/Kconfig.mk + +# Kconfig platform-mode choice (Phase 5): PLATFORM_DEFAULT/PLATFORM_MINIMAL +# in Kconfig.variant (PLATFORM_L4RE removed -- L4Re support is historical, +# see the "Platform support" section below). Must run this early -- before +# anything below that branches on MINIMAL -- since Make evaluates a Makefile +# top-to-bottom and a variable's value at the point an `ifdef` is reached is +# whatever it resolved to *so far*, not its final value. Only applies when a +# developer hasn't already set MINIMAL explicitly (command line or +# environment) -- `ifdef` in the "Platform support" section below cares +# about definedness, not value, so this can't reuse the kconfig_bool/ +# kconfig_int pattern (those always define their target variable once +# active). Checked with $(origin ...) so an explicit `make MINIMAL=1` (or +# unset) always wins over whatever .config says. +ifeq ($(KCONFIG_ACTIVE),1) +ifeq ($(origin MINIMAL),undefined) +ifeq ($(CONFIG_PLATFORM_MINIMAL),y) +MINIMAL := 1 +endif +endif +endif + +ifeq ($(ARCH),amd64) + ARCH_NAME = x86_64 + ARCH_FLAGS = -march=native + ARCH_DEFINES = -DARCH_X86_64=1 + ASM_SYNTAX = -masm=intel +else ifeq ($(ARCH),arm64) + ARCH_NAME = ARM64 + ARCH_FLAGS = -march=armv8-a+crc+simd -mtune=cortex-a72 + ARCH_DEFINES = -DARCH_ARM64=1 + ASM_SYNTAX = +else ifeq ($(ARCH),raspi) + ARCH_NAME = Raspberry Pi 4 (ARM64) + ARCH_FLAGS = -march=armv8-a+crc+simd -mtune=cortex-a72 + ARCH_DEFINES = -DARCH_ARM64=1 -DRASPBERRY_PI_BUILD=1 + ASM_SYNTAX = +else ifeq ($(ARCH),riscv64) + ARCH_NAME = RISC-V 64 (QEMU) + ARCH_FLAGS = -march=rv64gc -mabi=lp64d -mcmodel=medany + ARCH_DEFINES = -DARCH_RISCV64=1 + ASM_SYNTAX = +else ifeq ($(ARCH),riscv) + ARCH_NAME = RISC-V 64 (QEMU) + ARCH_FLAGS = -march=rv64gc -mabi=lp64d -mcmodel=medany + ARCH_DEFINES = -DARCH_RISCV64=1 + ASM_SYNTAX = +else + $(warning Unknown architecture: $(ARCH), using generic flags) + ARCH_NAME = generic + ARCH_FLAGS = + ARCH_DEFINES = + ASM_SYNTAX = +endif + +# Compiler flags +# Feature switches (default: enabled) +# Physics/SSM knob family: repointed through the Kconfig bridge (see +# mk/Kconfig.mk's kconfig_bool/kconfig_int) as of the Kconfig migration's +# Phase 3. Each call below is a drop-in replacement for a bare `?=`: when +# no build/$(ARCH)/.config exists (KCONFIG_ACTIVE unset), it's exactly +# `VAR ?= default`, identical to before; once a .config exists, the +# Kconfig-fed value takes over. `make VAR=x` on the command line always +# wins regardless of which branch fires. +# +# STRICT_PTR: VM memory bounds checking on every pointer access +# Default: 1 (enabled). Disable only for raw benchmarking comparisons. +$(eval $(call kconfig_bool,STRICT_PTR,1)) + +# ENABLE_HOTWORDS_CACHE: Physics-driven hot-words cache (1.78× speedup on dictionary lookups) +# Default: 1 (enabled - experiments show cache is optimal) +# Set ENABLE_HOTWORDS_CACHE=0 to disable (for research comparison only) +$(eval $(call kconfig_bool,ENABLE_HOTWORDS_CACHE,0)) + +# ENABLE_PIPELINING: Speculative execution via word transition prediction +# Default: 1 (enabled - experiments show pipelining is optimal) +# Set ENABLE_PIPELINING=0 to disable (for research comparison only) +# NOTE: As of 2025-11-19, all future experiments use both cache and pipelining enabled +$(eval $(call kconfig_bool,ENABLE_PIPELINING,0)) + +# EMERGENCY_CONSOLE_ENABLED: 1 = REPL recovers from errors and continues (interactive fallthrough) +# 0 = errors are non-recoverable; REPL exits and vm_fault_handler() is called instead +# Default: 1 (dev/recovery builds) +# Set EMERGENCY_CONSOLE_ENABLED=0 for production, embedded, or high-security builds +# where no interactive fallthrough surface should exist. +# Heartbeat family: repointed through the Kconfig bridge (Phase 4). Same +# drop-in-replacement-for-`?=` behavior as the physics/SSM family (Phase 3). +$(eval $(call kconfig_bool,EMERGENCY_CONSOLE_ENABLED,1)) + +# Heartbeat configuration +# HEARTBEAT_THREAD_ENABLED: 1 = run vm_tick() in background thread (OPTIMAL), 0 = inline (legacy) +# Default: 1 (experiments show threaded heartbeat is optimal for adaptive tuning) +# NOTE: As of 2025-11-19, all future experiments use heartbeat enabled +$(eval $(call kconfig_bool,HEARTBEAT_THREAD_ENABLED,1)) + +# HEARTBEAT_TICK_NS: Wake frequency for heartbeat thread (default 1ms) +$(eval $(call kconfig_int,HEARTBEAT_TICK_NS,10000)) + +# HEARTBEAT_CHECK_FREQUENCY / HEARTBEAT_WINDOW_TUNING_FREQUENCY / +# HEARTBEAT_SLOPE_VALIDATION_FREQUENCY: previously unwired in the hosted +# Makefile -- no `?=` and no -D forwarding existed for any of these three +# before Phase 4, so hosted builds always got starforth_config.h's bare +# defaults (256/1000/5000) with no override mechanism at all. The kernel +# Makefile has always had opt-in forwarding for them (VM_FEATURE_FLAG_VARS). +# Promoted here for parity, same treatment as Phase 3's SSM_* knobs. +$(eval $(call kconfig_int,HEARTBEAT_CHECK_FREQUENCY,256)) +$(eval $(call kconfig_int,HEARTBEAT_WINDOW_TUNING_FREQUENCY,1000)) +$(eval $(call kconfig_int,HEARTBEAT_SLOPE_VALIDATION_FREQUENCY,5000)) + +# HISTORICAL: L4Re had no pthreads, so this forced HEARTBEAT_THREAD_ENABLED +# off whenever L4RE=1 was set. L4Re support is no longer an active target; +# see "Platform support" below. +# ifeq ($(L4RE),1) +# HEARTBEAT_THREAD_ENABLED := 0 +# endif + +# Feedback Loop Toggle Switches (for systematic performance measurement) +# ============================================================================ +# These allow turning each feedback loop on/off to measure additive performance gains +# EXP_00-BASELINE: all loops OFF (plain FORTH-79) +# EXP_01: Loop #1 ON +# EXP_02: Loops #1-2 ON +# ... etc, building cumulatively to measure each loop's contribution + +# ============================================================================== +# SSM (Steady State Machine) Configuration - Data-Driven Architecture +# ============================================================================== +# Based on 2^7 DoE with 300 reps (128 configs, 38,400 runs). +# Top 5% analysis (speed + stability) reveals optimal loop combinations. +# +# Experimentally Validated Architecture: +# L1 (heat_tracking): DISABLED (harmful in 86% of top configs) +# L4 (pipelining_metrics): DISABLED (harmful in 100% of top configs) +# L7 (adaptive_heartrate): ALWAYS ON (beneficial in 71% of top configs) +# L2, L3, L5, L6: Runtime-controlled by L8 (workload-dependent) +# L8 (Jacquard): 4-bit mode selector (16 modes: C0-C15) +# +# L8 dynamically controls L2/L3/L5/L6 based on entropy, CV, and temporal metrics. +# Top 5% validated modes: C4, C7, C9, C11, C12 (see v3/src/ssm_jacquard.c) + +# Tuning Knobs (Physics-driven Optimization System) +# ============================================================================ +# Knob #7: ROLLING_WINDOW_SIZE (Initial execution history capture) +# - Default: 4096 (conservative, ensures statistical significance at cold start) +# - Usage: make ROLLING_WINDOW_SIZE=8192 (larger for complex workloads) +# or ROLLING_WINDOW_SIZE=2048 (smaller for memory constraints) +# - System AUTOMATICALLY shrinks during execution if diminishing returns detected +# - Window starts conservative, self-tunes down if pattern diversity plateaus +# - Window becomes "warm" (representative) after N executions, then adapts +$(eval $(call kconfig_int,ROLLING_WINDOW_SIZE,4096)) + +# Knob #6: TRANSITION_WINDOW_SIZE (Pipelining context depth) +# - Default: 8 (see starforth_config.h for the exact shipped value) +# - Usage: make TRANSITION_WINDOW_SIZE=1 (or 2, 4 for shallower context) +# - Empirically tuned via binary chop: 1 vs 2 vs 4 vs 8 +$(eval $(call kconfig_int,TRANSITION_WINDOW_SIZE,8)) + +# SPECULATION_THRESHOLD_Q48 / SPECULATION_DEPTH / MIN_SAMPLES_FOR_SPECULATION / +# MISPREDICTION_COST_Q48 / MINIMUM_PREFETCH_ROI: previously hardcoded, +# non-overridable #define in physics_pipelining_metrics.h -- no Makefile +# knob or -D forwarding existed for any of these five before Phase 5. +# Promoted here for parity, same treatment as Phase 3/4's other +# previously-unwired constants. All five are Q48.16-fixed-point or plain +# counts meaningful only when ENABLE_PIPELINING is on; see Kconfig.physics +# for the exact hex/decimal defaults. MINIMUM_PREFETCH_ROI's default was +# corrected from the long-shipped 0x11999A to 0x1199A (rev y) -- the +# former was ~17.6 in Q48.16, not the documented 1.10. +$(eval $(call kconfig_int,SPECULATION_THRESHOLD_Q48,0x8000)) +$(eval $(call kconfig_int,SPECULATION_DEPTH,1)) +$(eval $(call kconfig_int,MIN_SAMPLES_FOR_SPECULATION,10)) +$(eval $(call kconfig_int,MISPREDICTION_COST_Q48,0x190000)) +$(eval $(call kconfig_int,MINIMUM_PREFETCH_ROI,0x1199A)) + +# Knobs #8-11: Adaptive Window Shrinking Control +# ============================================================================ +# These control how aggressively the rolling window learns and adapts +# (NOT the initial window size - that's ROLLING_WINDOW_SIZE above) + +# Knob #8: ADAPTIVE_SHRINK_RATE (percentage to retain when shrinking) +# - Default: 50 (shrink to 50% = discard 50% each cycle) +# - Range: 50-95 (lower = more aggressive, higher = more conservative) +# - Usage: make ADAPTIVE_SHRINK_RATE=75 (slower learning) or 90 (slow learning) +$(eval $(call kconfig_int,ADAPTIVE_SHRINK_RATE,50)) + +# Knob #9: ADAPTIVE_MIN_WINDOW_SIZE (floor to prevent over-shrinking) +# - Default: 256 (never shrink below 256 word IDs) +# - Range: 64-1024 (smaller = leaner, larger = safer) +# - Usage: make ADAPTIVE_MIN_WINDOW_SIZE=512 (conservative) or 128 (lean) +$(eval $(call kconfig_int,ADAPTIVE_MIN_WINDOW_SIZE,256)) + +# Knob #10: ADAPTIVE_CHECK_FREQUENCY (how often to measure diversity) +# - Default: 512 (check after every 512 executions) +# - Range: 32-1024 (more = faster response, less = less overhead) +# - Usage: make ADAPTIVE_CHECK_FREQUENCY=128 (responsive) or 256 (default of comparable knobs) +$(eval $(call kconfig_int,ADAPTIVE_CHECK_FREQUENCY,512)) + +# Knob #11: ADAPTIVE_GROWTH_THRESHOLD (growth rate that signals saturation) +# - Default: 5 (shrink when growth < 5%) +# - Range: 0-10 (lower = eager shrinking, higher = cautious) +# - Usage: make ADAPTIVE_GROWTH_THRESHOLD=0 (aggressive) or 1 (less conservative) +$(eval $(call kconfig_int,ADAPTIVE_GROWTH_THRESHOLD,5)) + +# Knob #11a: INITIAL_DECAY_SLOPE_Q48 (Starting decay slope for inference engine) +# - Default: 21845 (1/3 in Q48.16 format, = 0.333... starting slope) +# - Range: 13107-43691 (0.2 to 0.67 in Q48.16) +# - Usage: make INITIAL_DECAY_SLOPE_Q48=13107 (0.2) or 32768 (0.5) or 43691 (0.67) +# - DoE: OPP #3 tests 0.2, 0.33, 0.5, 0.67 to find optimal starting point for convergence +# - Note: Inference engine adapts this value at runtime; this is just the cold-start value +$(eval $(call kconfig_int,INITIAL_DECAY_SLOPE_Q48,21845)) + +# Knob #11b: DECAY_MIN_INTERVAL (Minimum time before decay applies) +# - Default: 500 (nanoseconds) +# - Range: 500-5000 (balance between decay sensitivity and overhead) +# - Usage: make DECAY_MIN_INTERVAL=1000 (slower decay) or 2000 (slower still) +# - NOTE: as of the tick-based Loop #3 decay conversion (rev t, see +# docs/working/architecture/VM-FLEET-ATTRACTOR-DESIGN-20260705.md), +# Loop #3 no longer consults this value at all -- decay is gated on +# elapsed heartbeat ticks, not elapsed nanoseconds. Kept only because +# doe_metrics.c still reports it as a metrics field; informational, +# not load-bearing. +$(eval $(call kconfig_int,DECAY_MIN_INTERVAL,500)) + +# Knob #11d: HEARTBEAT_INFERENCE_FREQUENCY (How often to run inference engine) +# - Default: 1000 (ticks between inference runs) +# - Set VERY HIGH (999999) to effectively disable inference (static mode) +# - Set LOW for frequent inference (adaptive mode) +# - DoE: OPP #3 tests 999999 (static, no Loop #6) vs 1000 (adaptive, with Loop #6) +# - Measures: Inference engine cost vs benefit in optimized performance +$(eval $(call kconfig_int,HEARTBEAT_INFERENCE_FREQUENCY,1000)) + +# Knob #12: DECAY_RATE_PER_US_Q16 (Heat decay rate in Q16 fixed-point) +# - Default: 1 (1/65536 heat units decayed per microsecond) +# - Range: 0-65536 (0 = no decay, 65536 = 1 heat/µs) +# - Half-life: ~6.5 seconds at default (100-heat word → 50-heat in 6.5s) +# - Usage: make DECAY_RATE_PER_US_Q16=2 (faster decay) or 0 (no decay for baseline) +# - DoE: Vary this to measure impact of heat decay on performance +$(eval $(call kconfig_int,DECAY_RATE_PER_US_Q16,1)) + +# L8 Jacquard mode selector thresholds (ssm_jacquard.h). Previously unwired -- +# no Makefile knob or -D forwarding existed for these before the Kconfig +# migration's Phase 3; ssm_jacquard.h's own #ifndef fallback was the only +# place any of these five values lived. See Kconfig.physics for the +# rationale behind modeling the four float thresholds as Kconfig `string` +# symbols (Kconfig has no native float type). +$(eval $(call kconfig_int,SSM_ENTROPY_HIGH_THRESHOLD,0.75)) +$(eval $(call kconfig_int,SSM_CV_HIGH_THRESHOLD,0.15)) +$(eval $(call kconfig_int,SSM_TEMPORAL_DECAY_THRESHOLD,0.5)) +$(eval $(call kconfig_int,SSM_TEMPORAL_DECAY_LOW_THRESHOLD,0.3)) +$(eval $(call kconfig_int,SSM_HYSTERESIS_TICKS,5)) + +# Build the CFLAGS with tuning knobs +# L8 FINAL INTEGRATION: All experimental loop flags removed. +# L1-L7 are now always-on internal physics layers. +# L8 Jacquard mode selector is the sole policy engine. +BASE_CFLAGS = -std=c99 -Wall -Werror -Iv3/include -Ikernel/include -Iv3/src/word_source -Iv3/src/test_runner/include \ + -DSTRICT_PTR=$(STRICT_PTR) \ + -DENABLE_HOTWORDS_CACHE=$(ENABLE_HOTWORDS_CACHE) \ + -DENABLE_PIPELINING=$(ENABLE_PIPELINING) \ + -DROLLING_WINDOW_SIZE=$(ROLLING_WINDOW_SIZE) \ + -DTRANSITION_WINDOW_SIZE=$(TRANSITION_WINDOW_SIZE) \ + -DSPECULATION_THRESHOLD_Q48=$(SPECULATION_THRESHOLD_Q48) \ + -DSPECULATION_DEPTH=$(SPECULATION_DEPTH) \ + -DMIN_SAMPLES_FOR_SPECULATION=$(MIN_SAMPLES_FOR_SPECULATION) \ + -DMISPREDICTION_COST_Q48=$(MISPREDICTION_COST_Q48) \ + -DMINIMUM_PREFETCH_ROI=$(MINIMUM_PREFETCH_ROI) \ + -DADAPTIVE_SHRINK_RATE=$(ADAPTIVE_SHRINK_RATE) \ + -DADAPTIVE_MIN_WINDOW_SIZE=$(ADAPTIVE_MIN_WINDOW_SIZE) \ + -DADAPTIVE_CHECK_FREQUENCY=$(ADAPTIVE_CHECK_FREQUENCY) \ + -DADAPTIVE_GROWTH_THRESHOLD=$(ADAPTIVE_GROWTH_THRESHOLD) \ + -DINITIAL_DECAY_SLOPE_Q48=$(INITIAL_DECAY_SLOPE_Q48) \ + -DDECAY_RATE_PER_US_Q16=$(DECAY_RATE_PER_US_Q16) \ + -DHEARTBEAT_THREAD_ENABLED=$(HEARTBEAT_THREAD_ENABLED) \ + -DHEARTBEAT_TICK_NS=$(HEARTBEAT_TICK_NS) \ + -DHEARTBEAT_INFERENCE_FREQUENCY=$(HEARTBEAT_INFERENCE_FREQUENCY) \ + -DHEARTBEAT_CHECK_FREQUENCY=$(HEARTBEAT_CHECK_FREQUENCY) \ + -DHEARTBEAT_WINDOW_TUNING_FREQUENCY=$(HEARTBEAT_WINDOW_TUNING_FREQUENCY) \ + -DHEARTBEAT_SLOPE_VALIDATION_FREQUENCY=$(HEARTBEAT_SLOPE_VALIDATION_FREQUENCY) \ + -DEMERGENCY_CONSOLE_ENABLED=$(EMERGENCY_CONSOLE_ENABLED) \ + -DSSM_ENTROPY_HIGH_THRESHOLD=$(SSM_ENTROPY_HIGH_THRESHOLD) \ + -DSSM_CV_HIGH_THRESHOLD=$(SSM_CV_HIGH_THRESHOLD) \ + -DSSM_TEMPORAL_DECAY_THRESHOLD=$(SSM_TEMPORAL_DECAY_THRESHOLD) \ + -DSSM_TEMPORAL_DECAY_LOW_THRESHOLD=$(SSM_TEMPORAL_DECAY_LOW_THRESHOLD) \ + -DSSM_HYSTERESIS_TICKS=$(SSM_HYSTERESIS_TICKS) + +ifeq ($(HEARTBEAT_THREAD_ENABLED),1) +# HISTORICAL: this used to branch on L4RE (no pthreads there) -- +# THREAD_FLAGS := if L4RE else -pthread. L4Re support is no longer an +# active target; see "Platform support" below. +THREAD_FLAGS := -pthread +else +THREAD_FLAGS := +endif + +BASE_CFLAGS += $(THREAD_FLAGS) + +# Build profiles (TARGET values) +SUPPORTED_TARGETS := standard fast fastest turbo asan + +TARGET_DESCRIPTION_standard := Standard optimized build +TARGET_CFLAGS_standard := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O2 -flto=auto -fuse-linker-plugin -DNDEBUG \ + -DUSE_ASM_OPT=1 \ + -ffunction-sections -fdata-sections -fomit-frame-pointer \ + -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-strict-aliasing +TARGET_LDFLAGS_standard := -Wl,--gc-sections -s -flto=auto -fuse-linker-plugin -static $(THREAD_FLAGS) + +TARGET_DESCRIPTION_fast := Fast optimized build (no LTO, easier debugging) +TARGET_CFLAGS_fast := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG +TARGET_LDFLAGS_fast := -s $(THREAD_FLAGS) + +TARGET_DESCRIPTION_fastest := Maximum performance build (ASM + LTO + direct threading) +TARGET_CFLAGS_fastest := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG \ + -flto=auto -fuse-linker-plugin -funroll-loops -finline-functions -fomit-frame-pointer -fno-plt -fno-semantic-interposition +TARGET_LDFLAGS_fastest := -flto=auto -fuse-linker-plugin -s -Wl,--gc-sections $(THREAD_FLAGS) + +TARGET_DESCRIPTION_turbo := Assembly-optimized build (no direct threading) +TARGET_CFLAGS_turbo := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O3 -DUSE_ASM_OPT=1 -DNDEBUG -flto +TARGET_LDFLAGS_turbo := -flto -s $(THREAD_FLAGS) + +TARGET_DESCRIPTION_asan := ASan/UBSan instrumented build for memory error detection +TARGET_CFLAGS_asan := $(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O1 -g \ + -fsanitize=address,undefined -fno-omit-frame-pointer +TARGET_LDFLAGS_asan := -fsanitize=address,undefined $(THREAD_FLAGS) + +define TARGET_POST_fastest + @echo "" + @echo "🎯 You've built the FASTEST FORTH IN THE WEST!" + @echo "" + @echo "Quick-draw benchmark:" + @time -f " ⏱️ Time: %E seconds" ./$(BINARY) -c ": BENCH 1000000 0 DO 1 2 + DROP LOOP ; BENCH BYE" 2>/dev/null || true +endef + +TARGET_DESCRIPTION := $(TARGET_DESCRIPTION_$(TARGET)) +ifeq ($(strip $(TARGET_DESCRIPTION)),) + $(error Unknown TARGET '$(TARGET)'. Supported targets: $(SUPPORTED_TARGETS)) +endif + +TARGET_CFLAGS_SELECTED := $(TARGET_CFLAGS_$(TARGET)) +TARGET_LDFLAGS_SELECTED := $(TARGET_LDFLAGS_$(TARGET)) +TARGET_POST := $(or $(TARGET_POST_$(TARGET)),@:) + +CFLAGS ?= $(TARGET_CFLAGS_SELECTED) +LDFLAGS ?= $(TARGET_LDFLAGS_SELECTED) + +CFLAGS += $(EXTRA_CFLAGS) +LDFLAGS += $(EXTRA_LDFLAGS) + +USE_ASM_OPT := $(if $(findstring -DUSE_ASM_OPT=1,$(CFLAGS)),1,0) +USE_LTO := $(if $(or $(findstring -flto,$(CFLAGS)),$(findstring -flto,$(LDFLAGS))),1,0) + +# Platform support +# +# HISTORICAL: L4Re/Fiasco.OC was a supported platform target (`make L4RE=1`) +# through mid-2026. Removed as an active target; v3/src/platform/l4re/time.c +# is retained for reference but no longer wired into any build. To restore: +# reinstate the `else ifdef L4RE` branch below and the L4RE-conditional +# logic marked HISTORICAL elsewhere in this Makefile (search "L4RE"/"L4Re"). +# +# ifdef MINIMAL +# ... +# else ifdef L4RE +# CFLAGS += -D__l4__=1 +# PLATFORM_TIME_SRC = v3/src/platform/l4re/time.c v3/src/platform/platform_init.c +# PLATFORM_ALLOC_SRC = v3/src/platform/alloc_kernel.c +# else +# ... +# endif +ifdef MINIMAL +# DISABLED 2026-07-08: this was never a finished feature, not a small bug. +# v3/src/platform/starforth_minimal.c (referenced below) does not exist +# anywhere in the repo, and only 5 of ~90 source files under v3/src/ have any +# STARFORTH_MINIMAL awareness despite -nostdlib -ffreestanding applying to +# the entire tree. Confirmed by trying it: even a throwaway empty stub for +# the missing file lets the build report "success" while linking a binary +# with no _start entry point (this build's specific -nostdlib/-static/ +# -pthread/-flto flag combination doesn't actually exclude libc, so most +# calls silently resolve anyway -- the illusion of success is the trap). +# Reviving this needs an actual freestanding platform layer written from +# scratch, not a quick fix -- failing loudly here instead of letting +# anyone hit a confusing compile error or, worse, a binary that "builds" +# but can't run. See .claude/CLAUDE.md's punch list for status. +$(error MINIMAL=1 build is disabled: incomplete freestanding platform layer, not currently supported. See the comment immediately above this line for why) +CFLAGS += -DSTARFORTH_MINIMAL=1 -nostdlib -ffreestanding +LDFLAGS += -nostdlib +PLATFORM_SRC = v3/src/platform/starforth_minimal.c +PLATFORM_ALLOC_SRC = v3/src/platform/alloc_kernel.c +else +PLATFORM_TIME_SRC = v3/src/platform/linux/time.c v3/src/platform/linux/io.c v3/src/platform/platform_init.c +PLATFORM_ALLOC_SRC = v3/src/platform/alloc_host.c +endif + +PLATFORM_COMMON_SRC = v3/src/platform/threading.c $(PLATFORM_ALLOC_SRC) + +# Source and object files +SRC = $(wildcard v3/src/*.c v3/src/word_source/*.c v3/src/test_runner/*.c v3/src/test_runner/modules/*.c) $(PLATFORM_SRC) $(PLATFORM_TIME_SRC) $(PLATFORM_COMMON_SRC) +BUILD_ROOT ?= build +build_dir = $(BUILD_ROOT)/$(call canon_arch,$(or $2,$(ARCH)))/$1 +binary_path = $(call build_dir,$1,$2)/starforth +BUILD_DIR = $(call build_dir,$(TARGET),$(ARCH)) +BINARY = $(call binary_path,$(TARGET),$(ARCH)) +OBJ = $(patsubst v3/src/%.c,$(BUILD_DIR)/%.o,$(SRC)) +ASM_FILES = $(patsubst v3/src/%.c,$(BUILD_DIR)/%.s,$(SRC)) + +# Profiler support for test targets +PROFILE_LEVEL := $(strip $(PROFILE)) +ifeq ($(PROFILE_LEVEL),) +PROFILE_ARGS := +else +PROFILE_ARGS := --profile $(PROFILE_LEVEL) +PROFILE_REPORT ?= 1 +ifneq ($(strip $(PROFILE_REPORT)),0) +PROFILE_ARGS += --profile-report +endif +endif + +# Installation directories +PREFIX ?= . +BINDIR = $(PREFIX)/bin +MANDIR = $(PREFIX)/share/man/man1 +INFODIR = $(PREFIX)/share/info +DOCDIR = $(PREFIX)/share/doc/starforth +CONFDIR = $(PREFIX)/etc/starforth + +# ============================================================================== +# PHONY TARGETS +# ============================================================================== + +.PHONY: all banner help clean clean-obj clean-docs starkernel mkcapsule capsule-gen capsule-manifest +.PHONY: fastest fast turbo +.PHONY: rpi4 rpi4-cross rpi4-fastest riscv64-clang +.PHONY: minimal debug profile performance +.PHONY: test bench benchmark +.PHONY: asm sbom +.PHONY: docs api-docs docs-latex docs-isabelle isabelle-build isabelle-check info math-companion math-companion-clean +.PHONY: refinement-status refinement-init refinement-phase1 verify-defect refinement-annotate-check refinement-report +.PHONY: install uninstall package deb rpm +.PHONY: quality compile_commands clang_tidy cppcheck gcc_analyzer +.PHONY: FORCE version-info build-manifest + +# ============================================================================== +# MAIN TARGETS +# ============================================================================== + +all: banner $(BINARY) + @echo "" + @echo "✓ Build complete: $(BINARY)" + @echo " Architecture: $(ARCH_NAME)" + @echo " Profile: $(TARGET_DESCRIPTION) ($(TARGET))" + @echo " Output directory: $(BUILD_DIR)" + @echo " Optimizations: $(if $(findstring USE_ASM_OPT,$(CFLAGS)),Enabled,Disabled)" + @echo " Direct Threading: $(if $(findstring USE_DIRECT_THREADING,$(CFLAGS)),Enabled,Disabled)" + @mkdir -p lfs/$(ARCH_DIR) + @cp $(BINARY) lfs/$(ARCH_DIR)/starforth + @echo " LFS copy: lfs/$(ARCH_DIR)/starforth" + $(TARGET_POST) + +banner: + @echo "════════════════════════════════════════════════════════════" + @echo " ⚡ Building the Fastest Forth in the West! ⚡" + @echo "════════════════════════════════════════════════════════════" + @echo " Target Architecture: $(ARCH_NAME) ($(ARCH_DIR))" + @echo " Build Profile: $(TARGET_DESCRIPTION) ($(TARGET))" + @echo "" + +# ============================================================================== +# OPTIMIZATION BUILDS - The Fastest in the West +# ============================================================================== + +# Maximum performance - no compromises +fastest: + @echo "🏆 Building FASTEST configuration..." + @echo " - Architecture: $(ARCH_NAME)" + @echo " - Assembly optimizations: ENABLED" + @echo " - Direct threading: ENABLED" + @echo "" + @$(MAKE) -f v3/Makefile TARGET=fastest all + +# Fast without LTO (easier debugging) +fast: + @echo "⚡ Building FAST configuration (no LTO for debugging)..." + @$(MAKE) -f v3/Makefile TARGET=fast all + +# Assembly optimizations only (no direct threading) +turbo: + @echo "🚀 Building TURBO configuration (ASM only)..." + @$(MAKE) -f v3/Makefile TARGET=turbo all + +# ============================================================================== +# PLATFORM-SPECIFIC BUILDS +# ============================================================================== + +# Raspberry Pi 4 - native build +rpi4: + @echo "🥧 Building for Raspberry Pi 4 (native)..." + @$(MAKE) -f v3/Makefile ARCH=raspi TARGET=fastest CFLAGS="$(BASE_CFLAGS) -march=armv8-a+crc+simd -mtune=cortex-a72 -DARCH_ARM64=1 -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -flto" LDFLAGS="-flto -s" all + @echo "✓ Raspberry Pi build ready: $(call binary_path,fastest,raspi)" + +# Raspberry Pi 4 - cross-compile from x86_64 +rpi4-cross: + @echo "🥧 Cross-compiling for Raspberry Pi 4..." + @$(MAKE) -f v3/Makefile ARCH=raspi TARGET=fastest CC=aarch64-linux-gnu-gcc \ + CFLAGS="$(BASE_CFLAGS) -march=armv8-a+crc+simd -mtune=cortex-a72 -DARCH_ARM64=1 -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -flto -static" \ + LDFLAGS="-flto -s -static" \ + all + @echo "✓ Cross-compiled binary ready: $(call binary_path,fastest,raspi)" + @echo " Copy to RPi4: scp $(call binary_path,fastest,raspi) pi@raspberrypi.local:~/" + +# Raspberry Pi 4 - maximum optimization +rpi4-fastest: + @echo "🥧⚡ Building FASTEST for Raspberry Pi 4..." + @$(MAKE) -f v3/Makefile ARCH=raspi TARGET=fastest CC=aarch64-linux-gnu-gcc \ + CFLAGS="$(BASE_CFLAGS) -march=armv8-a+crc+simd+crypto -mtune=cortex-a72 -DARCH_ARM64=1 -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -flto -funroll-loops -finline-functions" \ + LDFLAGS="-flto -s -static" \ + all + @echo "✓ Raspberry Pi FASTEST build ready: $(call binary_path,fastest,raspi)" + +# RISC-V 64 - cross-compile via clang (GCC fails to build this tree under +# -std=c99: a nanosleep visibility failure, not yet root-caused — see +# docs/lithosananke/hosted-acceptance-test/README.md and +# docs/working/archive/session-logs/2026-07-24-punch-list.md item #3). +# CFLAGS deliberately does NOT reuse $(BASE_CFLAGS): BASE_CFLAGS hardcodes +# -std=c99, and clang needs -std=c11 -pthread here. This mirrors the exact +# recipe verified in the hosted-acceptance-test doc, kept in sync with it. +riscv64-clang: + @echo "🦀 Cross-compiling for RISC-V 64 (clang)..." + @$(MAKE) -f v3/Makefile ARCH=riscv64 TARGET=fastest \ + CC="clang-18 --target=riscv64-linux-gnu --sysroot=/usr/riscv64-linux-gnu" \ + CFLAGS="-std=c11 -pthread -Wall -Werror -Iv3/include -Ikernel/include -Iv3/src/word_source -Iv3/src/test_runner/include -DSTRICT_PTR=1 -march=rv64gc -mabi=lp64d -mcmodel=medany -DARCH_RISCV64=1 -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1 -DNDEBUG -flto -static" \ + LDFLAGS="-flto -s -static -fuse-ld=lld" \ + all + @echo "✓ Cross-compiled binary ready: $(call binary_path,fastest,riscv64)" + @echo " Run: qemu-riscv64 $(call binary_path,fastest,riscv64)" + +# Minimal/embedded build +minimal: + $(MAKE) -f v3/Makefile MINIMAL=1 + +# HISTORICAL: L4Re support removed as an active target (see "Platform +# support" above). This target cross-compiled a minimal build with the +# L4Re toolchain (l4-gcc) for smoke-testing without real L4Re headers. +# fake-l4re: +# $(MAKE) -f v3/Makefile MINIMAL=1 CC=l4-gcc CFLAGS="$(BASE_CFLAGS) -DL4RE_TARGET=1" + +# ============================================================================== +# DEBUG & DEVELOPMENT BUILDS +# ============================================================================== + +# Debug build with symbols +debug: banner + @echo "🐛 Building DEBUG configuration..." + $(MAKE) -f v3/Makefile CFLAGS="$(BASE_CFLAGS) -O0 -g -DDEBUG" LDFLAGS="" $(BINARY) + +# Build with profiler support +profile: + $(MAKE) -f v3/Makefile CFLAGS="$(BASE_CFLAGS) -g -O1" $(BINARY) + +# Performance build (legacy alias - redirects to 'fastest') +performance: fastest + +# ============================================================================== +# BUILD RULES +# ============================================================================== + +# Generate version header from Makefile VERSION, ARCH, TARGET, and timestamp +v3/include/version.h: FORCE + @mkdir -p v3/include + @echo "Generating version header..." + @BUILD_TS=$$(date -Iseconds 2>/dev/null || echo "unknown"); \ + printf '#ifndef STARFORTH_VERSION_H\n#define STARFORTH_VERSION_H\n\n' > $@; \ + printf '#define STARFORTH_VERSION "%s"\n' "$(VERSION)" >> $@; \ + printf '#define STARFORTH_ARCH "%s"\n' "$(ARCH_NAME)" >> $@; \ + printf '#define STARFORTH_TARGET "%s"\n' "$(TARGET)" >> $@; \ + printf '#define STARFORTH_TIMESTAMP "%s"\n' "$$BUILD_TS" >> $@; \ + printf '#define STARFORTH_VERSION_FULL "StarForth v%s %s %s %s"\n\n' "$(VERSION)" "$(ARCH_NAME)" "$(TARGET)" "$$BUILD_TS" >> $@; \ + printf '#endif /* STARFORTH_VERSION_H */\n' >> $@ + +# Ensure version.h exists and is up-to-date before compilation +FORCE: + +# ============================================================================== +# CAPSULE SUBSYSTEM +# ============================================================================== + +CAPSULES_DIR ?= capsules +MKCAPSULE_SRC = tools/mkcapsule.c +MKCAPSULE_BIN = $(BUILD_DIR)/tools/mkcapsule +CAPSULE_GENERATED = $(BUILD_DIR)/capsule_generated.c +CAPSULE_GENERATED_OBJ = $(BUILD_DIR)/capsule_generated.o +CAPSULE_MANIFEST = $(CAPSULES_DIR)/MANIFEST_AUTO.md + +# Build the mkcapsule host tool +$(MKCAPSULE_BIN): $(MKCAPSULE_SRC) + @mkdir -p $(dir $@) + @echo " HOSTCC $<" + @$(CC) -O2 -Wall -o $@ $< + +# Run mkcapsule to generate the capsule directory C source +$(CAPSULE_GENERATED): $(MKCAPSULE_BIN) $(CAPSULES_DIR) + @mkdir -p $(dir $@) + @echo " MKCAP $(CAPSULES_DIR) -> $@" + @$(MKCAPSULE_BIN) $(CAPSULES_DIR) $@ + +# Compile the generated capsule directory +$(CAPSULE_GENERATED_OBJ): $(CAPSULE_GENERATED) | v3/include/version.h + @mkdir -p $(dir $@) + @echo " CC $<" + @$(CC) $(CFLAGS) -c $< -o $@ + +.PHONY: mkcapsule capsule-gen capsule-manifest +mkcapsule: $(MKCAPSULE_BIN) +capsule-manifest: $(MKCAPSULE_BIN) + @echo " MANIFEST $(CAPSULES_DIR) -> $(CAPSULE_MANIFEST)" + @$(MKCAPSULE_BIN) --manifest $(CAPSULES_DIR) $(CAPSULE_MANIFEST) +capsule-gen: $(CAPSULE_GENERATED) capsule-manifest + +# starkernel: full capsule-aware build +# 1. Build mkcapsule tool +# 2. Generate capsule_generated.c from capsules/ +# 3. Compile StarForth with __STARKERNEL__ and capsule_generated.o linked in +starkernel: $(MKCAPSULE_BIN) $(CAPSULE_GENERATED_OBJ) + @$(MAKE) -f v3/Makefile $(BINARY) \ + EXTRA_CFLAGS="-D__STARKERNEL__=1 -Iv3/include -Ikernel/include" \ + EXTRA_OBJ="$(CAPSULE_GENERATED_OBJ)" + +# ============================================================================== +# Main executable +$(BINARY): $(OBJ) $(EXTRA_OBJ) + @echo "🔗 Linking $(BINARY)..." + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +# Pattern rule for all C files (consolidates 5 repetitive rules) +# Order-only dependency: version.h must exist before compilation, but changes don't trigger rebuild +$(BUILD_DIR)/%.o: v3/src/%.c | v3/include/version.h + @mkdir -p $(dir $@) + @echo " CC $<" + @$(CC) $(CFLAGS) -c $< -o $@ +ifdef ASM + @$(CC) $(CFLAGS) -S $(ASM_SYNTAX) $< -o $(patsubst %.o,%.s,$@) +endif + +# Files that include version.h - rebuild when timestamp changes +$(BUILD_DIR)/main.o: v3/include/version.h +$(BUILD_DIR)/cli.o: v3/include/version.h +$(BUILD_DIR)/word_source/starforth_words.o: v3/include/version.h + +# ============================================================================== +# TESTING & BENCHMARKING +# ============================================================================== + +# Quick benchmark +bench: $(BINARY) + @echo "" + @echo "🏇 Running quick-draw benchmark..." + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "Test: 1 million stack operations" + @time -f "Time: %E seconds" ./$(BINARY) -c ": BENCH 1000000 0 DO 1 2 + DROP LOOP ; BENCH BYE" 2>/dev/null || echo "Benchmark complete" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +# Full benchmark suite +benchmark: $(BINARY) + @echo "" + @echo "🎯 Full Benchmark Suite - Fastest Forth in the West" + @echo "════════════════════════════════════════════════════════════" + @echo "" + @echo "📊 Stack Operations (1M iterations):" + @time -f " ⏱️ %E seconds" ./$(BINARY) -c ": BENCH-STACK 1000000 0 DO 1 2 3 DROP DROP DROP LOOP ; BENCH-STACK BYE" 2>/dev/null || true + @echo "" + @echo "📊 Arithmetic Operations (1M iterations):" + @time -f " ⏱️ %E seconds" ./$(BINARY) -c ": BENCH-MATH 1000000 0 DO 10 20 + 5 * 100 / DROP LOOP ; BENCH-MATH BYE" 2>/dev/null || true + @echo "" + @echo "📊 Logic Operations (1M iterations):" + @time -f " ⏱️ %E seconds" ./$(BINARY) -c ": BENCH-LOGIC 1000000 0 DO 255 DUP AND DUP OR XOR DROP LOOP ; BENCH-LOGIC BYE" 2>/dev/null || true + @echo "" + @echo "════════════════════════════════════════════════════════════" + +# ============================================================================== +# ASSEMBLY OUTPUT & ANALYSIS +# ============================================================================== + +# Generate assembly files for inspection +asm: banner + @echo "📝 Generating assembly output..." + @echo " Cleaning to force rebuild..." + @$(MAKE) -f v3/Makefile clean-obj > /dev/null 2>&1 + $(MAKE) -f v3/Makefile ASM=1 CFLAGS="$(BASE_CFLAGS) $(ARCH_FLAGS) $(ARCH_DEFINES) -O3 -DUSE_ASM_OPT=1 -DUSE_DIRECT_THREADING=1" LDFLAGS="" $(BINARY) + @echo "✓ Assembly files generated in $(BUILD_DIR)/" + @echo " Files generated: $$(find $(BUILD_DIR) -name '*.s' | wc -l)" + @echo " Example: less $(BUILD_DIR)/stack_management.s" + +# Generate Software Bill of Materials (SBOM) in SPDX format +sbom: + @echo "📋 Generating SBOM (Software Bill of Materials)..." + @if ! which syft >/dev/null 2>&1; then \ + echo "Error: syft not found. Install from https://github.com/anchore/syft"; \ + exit 1; \ + fi + @syft dir:. -o spdx-json=sbom.spdx.json -o spdx=sbom.spdx \ + --source-name LithosAnanke \ + --source-version $(VERSION) \ + --exclude './build/**' --exclude './tools/**' --exclude './.git/**' + @echo "✅ SBOM generated:" + @echo " SPDX JSON: sbom.spdx.json" + @echo " SPDX: sbom.spdx" + @echo " Version: $(VERSION)" + +# ============================================================================== +# DOCUMENTATION +# ============================================================================== + +# Generate API documentation (Doxygen XML → AsciiDoc) +api-docs: + @echo "📚 Generating API documentation from Doxygen..." + @if [ ! -f scripts/generate-doxygen-appendix.sh ]; then \ + echo "Error: scripts/generate-doxygen-appendix.sh not found"; \ + exit 1; \ + fi + @./scripts/generate-doxygen-appendix.sh + @echo "✅ API documentation generated: docs/src/appendix/" + +# ---------------------------------------------------------------------------- +# Math companion to the SSRN paper. +# Builds docs/SSRN_companion/Math_Companion_SSRN.pdf from the LaTeX source. +# Requires: pdflatex (texlive-latex-base, texlive-latex-extra, texlive-science). +# ---------------------------------------------------------------------------- +math-companion: + @echo "Building SSRN math companion (docs/SSRN_companion/Math_Companion_SSRN.pdf)..." + @if ! command -v pdflatex >/dev/null 2>&1; then \ + echo "Error: pdflatex not found."; \ + echo " Install with: apt-get install texlive-latex-base texlive-latex-extra texlive-science"; \ + exit 1; \ + fi + @cd docs/SSRN_companion && \ + pdflatex -interaction=nonstopmode -halt-on-error Math_Companion_SSRN.tex >/dev/null && \ + pdflatex -interaction=nonstopmode -halt-on-error Math_Companion_SSRN.tex >/dev/null && \ + pdflatex -interaction=nonstopmode -halt-on-error Math_Companion_SSRN.tex >/dev/null + @echo "Built: docs/SSRN_companion/Math_Companion_SSRN.pdf" + @cd docs/SSRN_companion && ls -lh Math_Companion_SSRN.pdf | awk '{print " Size:", $$5, " Pages: see pdfinfo"}' + +math-companion-clean: + @rm -f docs/SSRN_companion/Math_Companion_SSRN.{aux,log,out,toc,lof,lot,nav,snm,vrb} + @rm -f docs/SSRN_companion/Math_Companion_SSRN.pdf + @echo "Cleaned math companion build artifacts." + +# Convert all AsciiDoc to LaTeX +docs-latex: + @echo "📄 Converting AsciiDoc to LaTeX..." + @if [ ! -f scripts/asciidoc-to-latex.sh ]; then \ + echo "Error: scripts/asciidoc-to-latex.sh not found"; \ + exit 1; \ + fi + @./scripts/asciidoc-to-latex.sh + @echo "✅ LaTeX files generated: docs/latex/" + +# Build and verify Isabelle theories +isabelle-build: + @echo "🔬 Building Isabelle formal verification theories..." + @if ! command -v $(ISABELLE) >/dev/null 2>&1; then \ + echo "Error: Isabelle not found: $(ISABELLE)"; \ + echo " Install Isabelle or set ISABELLE variable"; \ + exit 1; \ + fi + @echo " Using: $$(command -v $(ISABELLE))" + @echo " Building StarForth_Formal session (VM + Physics)..." + @cd docs/src/internal/formal && $(ISABELLE) build -v -d . StarForth_Formal + @echo "✅ Isabelle theories verified successfully" + +# Quick check of Isabelle theories (faster than full build) +isabelle-check: + @echo "🔬 Quick-checking Isabelle theories..." + @if ! command -v $(ISABELLE) >/dev/null 2>&1; then \ + echo "Error: Isabelle not found: $(ISABELLE)"; \ + exit 1; \ + fi + @cd docs/src/internal/formal && \ + for thy in *.thy; do \ + echo " Checking $$thy..."; \ + $(ISABELLE) process -T "$$thy" 2>&1 | head -5; \ + done + @echo "✅ Quick check complete" + +# Generate comprehensive Isabelle documentation (for auditing & CI/CD) +# This generates documentation and verification reports regardless of proof status +# Suitable for Jenkinsfile pipelines - shows complete state including errors +docs-isabelle: + @echo "📚 Generating comprehensive Isabelle documentation (audit mode)..." + @mkdir -p docs/src/isabelle + @echo "" + @echo "Step 1: Attempting to verify Isabelle theories..." + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @cd docs/src/internal/formal && \ + if $(ISABELLE) build -v -d . StarForth_Formal > "$(CURDIR)/docs/src/isabelle/build.log" 2>&1; then \ + echo "✅ All theories verified successfully"; \ + else \ + echo "⚠️ Some theories have incomplete proofs (see build.log for details)"; \ + fi + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "" + @echo "Step 2: Generating documentation from theory source..." + @if [ ! -f scripts/isabelle-to-adoc.sh ]; then \ + echo "⚠️ Warning: scripts/isabelle-to-adoc.sh not found"; \ + echo " Creating default script..."; \ + mkdir -p scripts; \ + echo '#!/bin/bash' > scripts/isabelle-to-adoc.sh; \ + echo 'echo "Generating Isabelle theory reports to AsciiDoc..."' >> scripts/isabelle-to-adoc.sh; \ + echo 'cd docs/src/internal/formal' >> scripts/isabelle-to-adoc.sh; \ + echo 'for thy in *.thy; do' >> scripts/isabelle-to-adoc.sh; \ + echo ' base=$$(basename "$$thy" .thy)' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "= $$base Theory" > "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "Formal verification theory for StarForth VM." >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "== Theory Source" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "[source,isabelle]" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "----" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' cat "$$thy" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo ' echo "----" >> "../../../isabelle/$$base.adoc"' >> scripts/isabelle-to-adoc.sh; \ + echo 'done' >> scripts/isabelle-to-adoc.sh; \ + chmod +x scripts/isabelle-to-adoc.sh; \ + fi + @bash scripts/isabelle-to-adoc.sh + @echo "" + @echo "Step 3: Creating audit summary..." + @echo "✅ Comprehensive Isabelle documentation generated: docs/src/isabelle/" + @echo "" + @echo "📂 Documentation includes:" + @echo " • index.adoc - Master index of all theories" + @echo " • VERIFICATION_REPORT.adoc - Audit report" + @echo " • .adoc - Individual theory documentation with source" + @echo " • build.log - Isabelle build output (verification status)" + +# ============================================================================== +# REFINEMENT VERIFICATION (C ⊑ Isabelle) +# ============================================================================== + +# Refinement status dashboard +refinement-status: + @echo "════════════════════════════════════════════════════════════" + @echo " StarForth C ⊑ Isabelle Refinement Status" + @echo "════════════════════════════════════════════════════════════" + @echo "" + @if [ ! -f docs/REFINEMENT_CAPA.adoc ]; then \ + echo "⚠️ No REFINEMENT_CAPA.adoc found. Initialize with: make refinement-init"; \ + echo ""; \ + echo "Refinement infrastructure status: UNINITIALIZED"; \ + else \ + echo "📋 Defect Summary:"; \ + echo ""; \ + echo -n " Total Defects: "; grep -c "^== DEFECT-" docs/REFINEMENT_CAPA.adoc || echo "0"; \ + echo -n " OPEN: "; grep "| OPEN" docs/REFINEMENT_CAPA.adoc | wc -l; \ + echo -n " IN-PROGRESS: "; grep "| IN-PROGRESS" docs/REFINEMENT_CAPA.adoc | wc -l; \ + echo -n " CLOSED: "; grep "| CLOSED" docs/REFINEMENT_CAPA.adoc | wc -l; \ + fi + @echo "" + @echo "🏆 Phase Status:" + @echo " Phase 1: vm.c core .............. NOT STARTED" + @echo " Phase 2: Root utilities ......... NOT STARTED" + @echo " Phase 3: Test harness .......... NOT STARTED" + @echo " Phase 4: Primitive dictionary .. NOT STARTED" + @echo " Phase 5: VM expansion .......... NOT STARTED" + @echo "" + @echo "📂 Documentation:" + @echo " • docs/REFINEMENT_CAPA.adoc - Defect tracking" + @echo " • docs/REFINEMENT_ANNOTATIONS.adoc - Code annotation guide" + @echo "" + @echo "Next steps: make refinement-phase1 (to start Phase 1 proofs)" + @echo "════════════════════════════════════════════════════════════" + +# Initialize refinement tracking +refinement-init: + @echo "Initializing refinement tracking..." + @if [ -f docs/REFINEMENT_CAPA.adoc ]; then \ + echo "✅ docs/REFINEMENT_CAPA.adoc already exists"; \ + else \ + echo "📋 Creating REFINEMENT_CAPA.adoc"; \ + fi + @if [ -f docs/REFINEMENT_ANNOTATIONS.adoc ]; then \ + echo "✅ docs/REFINEMENT_ANNOTATIONS.adoc already exists"; \ + else \ + echo "📋 Creating REFINEMENT_ANNOTATIONS.adoc"; \ + fi + @echo "✅ Refinement infrastructure ready" + @echo "" + @echo "Next: Review docs/REFINEMENT_ANNOTATIONS.adoc" + @echo " Then: make refinement-phase1" + +# Phase 1: VM Core refinement +refinement-phase1: + @echo "════════════════════════════════════════════════════════════" + @echo " ⚙️ PHASE 1: VM Core Refinement (C ⊑ Isabelle)" + @echo "════════════════════════════════════════════════════════════" + @echo "" + @echo "Building refinement proofs for:" + @echo " • stack_push / stack_pop (DEFECT-001, DEFECT-002)" + @echo " • execute_call / execute_return (DEFECT-002)" + @echo " • instruction_dispatch (DEFECT-003)" + @echo "" + @echo "Proof target: StarForth_Refinement (Isabelle theory)" + @if ! command -v $(ISABELLE) >/dev/null 2>&1; then \ + echo "Error: Isabelle not found. Install or set ISABELLE variable"; \ + exit 1; \ + fi + @echo "" + @echo "Step 1: Creating StarForth_Refinement.thy if needed..." + @if [ ! -f docs/src/internal/formal/StarForth_Refinement.thy ]; then \ + echo "Creating template..."; \ + mkdir -p docs/src/internal/formal; \ + touch docs/src/internal/formal/StarForth_Refinement.thy; \ + echo "TODO: Add refinement proofs here" > docs/src/internal/formal/StarForth_Refinement.thy; \ + fi + @echo "" + @echo "Step 2: Attempting to build refinement proofs..." + @echo "(This will fail until proofs are written)" + @cd docs/src/internal/formal && \ + $(ISABELLE) build -v -d . StarForth_Formal 2>&1 | tail -20 + @echo "" + @echo "📋 Next steps:" + @echo " 1. Review open defects: grep 'OPEN' docs/REFINEMENT_CAPA.adoc" + @echo " 2. Start working on DEFECT-001 (stack_push)" + @echo " 3. Add refinement proofs to StarForth_Refinement.thy" + @echo " 4. Run: make verify-defect DEFECT=001" + +# Verify specific defect resolution +verify-defect: + @if [ -z "$(DEFECT)" ]; then \ + echo "Usage: make verify-defect DEFECT=001"; \ + echo ""; \ + echo "Available defects:"; \ + grep "== DEFECT-" docs/REFINEMENT_CAPA.adoc | sed 's/== / /'; \ + exit 1; \ + fi + @echo "════════════════════════════════════════════════════════════" + @echo " 🔍 Verifying Resolution: $(DEFECT)" + @echo "════════════════════════════════════════════════════════════" + @echo "" + @if ! grep -q "== DEFECT-$(DEFECT):" docs/REFINEMENT_CAPA.adoc; then \ + echo "❌ DEFECT-$(DEFECT) not found in REFINEMENT_CAPA.adoc"; \ + exit 1; \ + fi + @echo "Defect Details:" + @grep -A 30 "== DEFECT-$(DEFECT):" docs/REFINEMENT_CAPA.adoc | head -35 + @echo "" + @echo "Next: Implement corrective action, then run this again" + +# Check code annotation coverage +refinement-annotate-check: + @echo "════════════════════════════════════════════════════════════" + @echo " 📝 Checking Code Annotation Coverage" + @echo "════════════════════════════════════════════════════════════" + @echo "" + @echo "Phase 1 target functions:" + @echo "" + @for func in stack_push stack_pop execute_instruction execute_call execute_return; do \ + if grep -q "REFINEMENT.*$$func\|void $$func" v3/src/vm.c; then \ + if grep -q "REFINEMENT:" v3/src/vm.c | grep -q "$$func"; then \ + echo " ✅ $$func - ANNOTATED"; \ + else \ + echo " ❌ $$func - MISSING ANNOTATION"; \ + fi; \ + else \ + echo " ⚠️ $$func - NOT FOUND"; \ + fi; \ + done + @echo "" + @echo "Guide: docs/REFINEMENT_ANNOTATIONS.adoc" + +# Generate refinement report +refinement-report: + @echo "🔄 Generating refinement status report..." + @mkdir -p docs/reports + @echo "# StarForth Refinement Status" > docs/reports/refinement-status.md + @echo "" >> docs/reports/refinement-status.md + @echo "Generated: $$(date)" >> docs/reports/refinement-status.md + @echo "" >> docs/reports/refinement-status.md + @echo "## Summary" >> docs/reports/refinement-status.md + @echo "" >> docs/reports/refinement-status.md + @grep -c "== DEFECT-" docs/REFINEMENT_CAPA.adoc | xargs -I {} echo "Total Defects: {}" >> docs/reports/refinement-status.md + @echo "" >> docs/reports/refinement-status.md + @echo "See docs/REFINEMENT_CAPA.adoc for details" >> docs/reports/refinement-status.md + @echo "✅ Report: docs/reports/refinement-status.md" + +# Generate GNU info documentation +docs/starforth.info: + @if [ ! -f docs/starforth.texi ]; then \ + echo "⚠️ Skipping info docs: docs/starforth.texi not present"; \ + touch docs/starforth.info; \ + else \ + echo "📖 Building GNU info documentation..."; \ + if ! command -v makeinfo >/dev/null 2>&1; then \ + echo "Warning: makeinfo not found. Install with: sudo apt-get install texinfo"; \ + touch docs/starforth.info; \ + else \ + makeinfo docs/starforth.texi -o docs/starforth.info && \ + echo "✅ Info documentation: docs/starforth.info"; \ + fi; \ + fi + +# Generate all documentation +docs: api-docs docs-isabelle + @echo "✅ All documentation generated!" + @echo "" + @echo "📂 Documentation locations:" + @echo " • API docs: docs/src/appendix/" + @echo " • Isabelle docs: docs/src/isabelle/" + @echo " • LaTeX: docs/latex/" + +# Clean generated documentation +clean-docs: + @echo "🗑️ Cleaning generated documentation..." + @rm -rf docs/src/appendix/ docs/latex/ docs/src/isabelle/ + @echo "✅ Documentation cleaned" + +# ============================================================================== +# INSTALLATION +# ============================================================================== + +install: $(BINARY) + @echo "📦 Installing StarForth to $(PREFIX)..." + @install -d $(BINDIR) + @install -m 755 $(BINARY) $(BINDIR)/starforth + @echo " ✓ Binary installed: $(BINDIR)/starforth" + @if [ -f capsules/init.4th ]; then \ + install -d $(CONFDIR); \ + install -m 644 capsules/init.4th $(CONFDIR)/init.4th; \ + echo " ✓ Config installed: $(CONFDIR)/init.4th"; \ + fi + @if [ -f man/starforth.1 ]; then \ + install -d $(MANDIR); \ + install -m 644 man/starforth.1 $(MANDIR)/starforth.1; \ + echo " ✓ Man page installed: $(MANDIR)/starforth.1"; \ + fi + @if [ -f docs/starforth.info ]; then \ + install -d $(INFODIR); \ + install -m 644 docs/starforth.info $(INFODIR)/starforth.info; \ + install-info --info-dir=$(INFODIR) $(INFODIR)/starforth.info 2>/dev/null || true; \ + echo " ✓ Info docs installed: $(INFODIR)/starforth.info"; \ + fi + @install -d $(DOCDIR) + @if [ -f README.md ]; then install -m 644 README.md $(DOCDIR)/; fi + @if [ -f QUICKSTART.md ]; then install -m 644 QUICKSTART.md $(DOCDIR)/; fi + @if ls docs/*.md >/dev/null 2>&1; then install -m 644 docs/*.md $(DOCDIR)/ 2>/dev/null || true; fi + @echo " ✓ Documentation installed: $(DOCDIR)/" + @echo "✅ Installation complete!" + +uninstall: + @echo "🗑️ Uninstalling StarForth from $(PREFIX)..." + @rm -f $(BINDIR)/starforth + @rm -f $(MANDIR)/starforth.1 + @install-info --delete --info-dir=$(INFODIR) $(INFODIR)/starforth.info 2>/dev/null || true + @rm -f $(INFODIR)/starforth.info + @rm -rf $(DOCDIR) + @rm -rf $(CONFDIR) + @echo "✅ Uninstall complete!" + +# ============================================================================== +# PACKAGING +# ============================================================================== + +# Build Debian package +deb: $(BINARY) + @echo "📦 Building Debian package..." + @if ! command -v fpm >/dev/null 2>&1; then \ + echo "Error: fpm not found. Install with: gem install fpm"; \ + echo " or: sudo apt-get install ruby-dev && gem install fpm"; \ + exit 1; \ + fi + @mkdir -p package/deb + @fpm -s dir -t deb \ + -n starforth \ + -v $(VERSION) \ + -a native \ + --description "StarForth - The Fastest Forth in the West" \ + --url "https://github.com/yourusername/starforth" \ + --maintainer "StarForth Team" \ + --license "MIT" \ + --category "devel" \ + --package package/deb/ \ + --deb-compression xz \ + $(BINARY)=/usr/bin/starforth \ + capsules/init.4th=/etc/starforth/init.4th \ + README.md=/usr/share/doc/starforth/README.md + @echo "✅ Debian package created: package/deb/starforth_$(VERSION)_*.deb" + +# Build RPM package +rpm: $(BINARY) + @echo "📦 Building RPM package..." + @if ! command -v fpm >/dev/null 2>&1; then \ + echo "Error: fpm not found. Install with: gem install fpm"; \ + exit 1; \ + fi + @mkdir -p package/rpm + @fpm -s dir -t rpm \ + -n starforth \ + -v $(VERSION) \ + -a native \ + --description "StarForth - The Fastest Forth in the West" \ + --url "https://github.com/yourusername/starforth" \ + --maintainer "StarForth Team" \ + --license "MIT" \ + --category "Development/Languages" \ + --package package/rpm/ \ + $(BINARY)=/usr/bin/starforth \ + capsules/init.4th=/etc/starforth/init.4th \ + README.md=/usr/share/doc/starforth/README.md + @echo "✅ RPM package created: package/rpm/starforth-$(VERSION)-*.rpm" + +# Build all packages +package: deb rpm + @echo "" + @echo "✅ All packages built successfully!" + @echo " Debian: package/deb/" + @echo " RPM: package/rpm/" + +# ============================================================================== +# VERSIONING & BUILD MANIFEST (Workflow/Governance Integration) +# ============================================================================== + +# Parse version from v3/include/version.h +GET_VERSION = $(shell grep "define STARFORTH_VERSION" v3/include/version.h | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+' | head -1) + +.PHONY: version-info +version-info: + @echo "Current Version: $(GET_VERSION)" + @grep "STARFORTH_VERSION" v3/include/version.h | grep define + +.PHONY: build-manifest +build-manifest: $(BINARY) + @echo "📋 Generating BUILD_MANIFEST.json..." + @mkdir -p builds/manifest + @VERSION=$$(grep "STARFORTH_VERSION_STRING" v3/include/version.h | grep -o '"[^"]*"' | tr -d '"'); \ + GIT_HASH=$$(git rev-parse --short HEAD 2>/dev/null || echo "0000000"); \ + GIT_BRANCH=$$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown"); \ + BUILD_TIME=$$(date -Iseconds); \ + BINARY_PATH="$(BINARY)"; \ + if [ -f "$$BINARY_PATH" ]; then \ + BINARY_SHA256=$$(sha256sum "$$BINARY_PATH" | awk '{print $$1}'); \ + else \ + BINARY_SHA256="not-built"; \ + fi; \ + cat > builds/manifest/BUILD_MANIFEST.json << EOF; \ +{ \ + "version": "$$VERSION", \ + "timestamp": "$$BUILD_TIME", \ + "git": { \ + "commit_hash": "$$GIT_HASH", \ + "branch": "$$GIT_BRANCH", \ + "tag": "v$$VERSION" \ + }, \ + "build": { \ + "timestamp": "$$BUILD_TIME", \ + "compiler": "$$(gcc --version | head -1)", \ + "compiler_flags": "$(CFLAGS) $(ARCH_FLAGS)", \ + "target_architecture": "$(ARCH_NAME)", \ + "use_asm_opt": $(USE_ASM_OPT), \ + "use_lto": $(USE_LTO) \ + }, \ + "testing": { \ + "total_tests": 936, \ + "passed_tests": 0, \ + "failed_tests": 0, \ + "code_coverage_percent": 0, \ + "smoke_test_result": "N/A" \ + }, \ + "binary": { \ + "path": "$$BINARY_PATH", \ + "sha256": "$$BINARY_SHA256" \ + }, \ + "signatures": { \ + "builder": "jenkins-agent", \ + "approval_timestamp": "$(shell date -Iseconds)" \ + } \ +} \ +EOF + @echo "✓ BUILD_MANIFEST created: builds/manifest/BUILD_MANIFEST.json" + @cat builds/manifest/BUILD_MANIFEST.json | head -20 + +# ============================================================================== +# CLEANUP +# ============================================================================== + +clean: + @echo "🧹 Cleaning build artifacts..." + @rm -rfv build/* + @rm -f v3/src/*.gcda v3/src/word_source/*.gcda v3/src/*.gcno v3/src/word_source/*.gcno + @echo "✓ Clean complete" + +clean-obj: + @echo "🧹 Cleaning object files..." + @find build -name "*.o" -type f -delete 2>/dev/null || true + @echo "✓ Object files cleaned" + +# ============================================================================== +# HELP +# ============================================================================== + +help: + @echo "════════════════════════════════════════════════════════════" + @echo " ⚡ StarForth Build System - Fastest in the West! ⚡" + @echo "════════════════════════════════════════════════════════════" + @echo "" + @echo "🛠️ Variables:" + @echo " ARCH= (default: $(ARCH); canonical directory: $(ARCH_DIR))" + @echo " TARGET= (standard | fast | fastest | turbo)" + @echo "" + @echo "🏆 OPTIMIZATION BUILDS:" + @echo " fastest - Maximum performance (ASM + direct threading + LTO)" + @echo " fast - Fast without LTO (easier debugging)" + @echo " turbo - Assembly optimizations only" + @echo "" + @echo "🥧 PLATFORM-SPECIFIC BUILDS:" + @echo " rpi4 - Native build on Raspberry Pi 4" + @echo " rpi4-cross - Cross-compile from x86_64" + @echo " rpi4-fastest - Maximum optimization for RPi4" + @echo " riscv64-clang - Cross-compile for RISC-V 64 via clang (GCC fails here)" + @echo " minimal - Minimal/embedded build" + @echo "" + @echo "🔧 DEBUG & DEVELOPMENT:" + @echo " all - Standard optimized build (default)" + @echo " debug - Debug build with symbols (-g -O0)" + @echo " profile - Build with profiling support" + @echo " performance - Legacy performance build (use 'fastest')" + @echo "" + @echo "🧪 TESTING & BENCHMARKING:" + @echo " test - Run full test suite" + @echo " bench - Quick benchmark" + @echo " benchmark - Full benchmark suite" + @echo "" + @echo "📝 ANALYSIS & DOCUMENTATION:" + @echo " asm - Generate assembly output" + @echo " sbom - Generate SBOM (Software Bill of Materials, SPDX)" + @echo " docs - Generate all documentation" + @echo " api-docs - Generate API docs (Doxygen → AsciiDoc)" + @echo " docs-latex - Convert AsciiDoc to LaTeX" + @echo " docs-isabelle - Generate Isabelle documentation for auditing (includes build log)" + @echo " isabelle-build - Build and verify Isabelle formal theories (strict verification)" + @echo " isabelle-check - Quick-check Isabelle theories" + @echo " info - Build GNU info documentation" + @echo "" + @echo "🔬 REFINEMENT VERIFICATION (C ⊑ Isabelle):" + @echo " refinement-init - Initialize refinement tracking (CAPA + annotations)" + @echo " refinement-status - Show refinement defect summary and phase status" + @echo " refinement-phase1 - Build Phase 1 refinement proofs (vm.c core)" + @echo " verify-defect - Verify specific defect (Usage: make verify-defect DEFECT=001)" + @echo " refinement-annotate-check - Check code annotation coverage" + @echo " refinement-report - Generate refinement status report" + @echo "" + @echo "📦 INSTALLATION & PACKAGING:" + @echo " install - Install to PREFIX (default: .)" + @echo " uninstall - Uninstall from PREFIX" + @echo " deb - Build Debian package" + @echo " rpm - Build RPM package" + @echo " package - Build all packages" + @echo "" + @echo "🧹 CLEANUP:" + @echo " clean - Remove all build artifacts" + @echo " clean-obj - Remove object files only" + @echo " clean-docs - Remove generated documentation" + @echo "" + @echo "⚙️ CONFIGURATION VARIABLES:" + @echo " CC - Compiler (default: gcc)" + @echo " CFLAGS - Compiler flags (override defaults)" + @echo " LDFLAGS - Linker flags (override defaults)" + @echo " PREFIX - Install prefix (default: .)" + @echo " MINIMAL=1 - Minimal build mode (DISABLED -- incomplete, errors out)" + @echo " ASM=1 - Generate assembly files during build" + @echo "" + @echo "📋 EXAMPLES:" + @echo " make fastest # Fastest build for current platform" + @echo " make rpi4-cross # Cross-compile for Raspberry Pi 4" + @echo " make riscv64-clang # Cross-compile for RISC-V 64 (clang)" + @echo " make asm # Generate assembly for inspection" + @echo " make debug # Debug build" + @echo " make PREFIX=/usr/local install # Install system-wide" + @echo "" + @echo "🌟 CURRENT PLATFORM: $(ARCH_NAME)" + @echo "════════════════════════════════════════════════════════════" + +quality: compile_commands clang_tidy cppcheck gcc_analyzer + +compile_commands: + bear --output build/compile_commands.json -- make -j$(nproc) + +clang_tidy: + clang-tidy -p build $(shell find src -name '*.c' -o -name '*.h') | tee build/clang-tidy.txt + +cppcheck: + cppcheck --enable=all --inconclusive --std=c99 src 2> build/cppcheck.txt || true + +gcc_analyzer: + $(MAKE) -f v3/Makefile clean + CFLAGS="$(CFLAGS) -fanalyzer -Wall -Wextra" $(MAKE) -f v3/Makefile all 2>&1 | tee build/gcc-analyzer.txt diff --git a/include/README.md b/v3/include/README.md similarity index 100% rename from include/README.md rename to v3/include/README.md diff --git a/include/arch_detect.h b/v3/include/arch_detect.h similarity index 100% rename from include/arch_detect.h rename to v3/include/arch_detect.h diff --git a/include/blkcfg.h b/v3/include/blkcfg.h similarity index 100% rename from include/blkcfg.h rename to v3/include/blkcfg.h diff --git a/include/blkio.h b/v3/include/blkio.h similarity index 100% rename from include/blkio.h rename to v3/include/blkio.h diff --git a/include/blkio_factory.h b/v3/include/blkio_factory.h similarity index 100% rename from include/blkio_factory.h rename to v3/include/blkio_factory.h diff --git a/include/block_subsystem.h b/v3/include/block_subsystem.h similarity index 99% rename from include/block_subsystem.h rename to v3/include/block_subsystem.h index 5dc56fca..84309961 100644 --- a/include/block_subsystem.h +++ b/v3/include/block_subsystem.h @@ -327,7 +327,7 @@ typedef struct { enum { BLK_FMT_FORMATTED = 0, BLK_FMT_PROVISIONAL = 1 }; /* ===== Public API ===== */ -int blk_subsys_init(VM *vm, uint8_t *ram_base, size_t ram_size); +int blk_subsys_init(uint8_t *ram_base, size_t ram_size); int blk_subsys_attach_device(struct blkio_dev *dev); diff --git a/include/cli.h b/v3/include/cli.h similarity index 100% rename from include/cli.h rename to v3/include/cli.h diff --git a/include/compudynamics.h b/v3/include/compudynamics.h similarity index 100% rename from include/compudynamics.h rename to v3/include/compudynamics.h diff --git a/include/dictionary_heat_optimization.h b/v3/include/dictionary_heat_optimization.h similarity index 100% rename from include/dictionary_heat_optimization.h rename to v3/include/dictionary_heat_optimization.h diff --git a/include/dictionary_management.h b/v3/include/dictionary_management.h similarity index 100% rename from include/dictionary_management.h rename to v3/include/dictionary_management.h diff --git a/include/doe_metrics.h b/v3/include/doe_metrics.h similarity index 100% rename from include/doe_metrics.h rename to v3/include/doe_metrics.h diff --git a/include/inference_engine.h b/v3/include/inference_engine.h similarity index 100% rename from include/inference_engine.h rename to v3/include/inference_engine.h diff --git a/include/io.h b/v3/include/io.h similarity index 100% rename from include/io.h rename to v3/include/io.h diff --git a/include/log.h b/v3/include/log.h similarity index 100% rename from include/log.h rename to v3/include/log.h diff --git a/include/math_portable.h b/v3/include/math_portable.h similarity index 100% rename from include/math_portable.h rename to v3/include/math_portable.h diff --git a/include/memory_management.h b/v3/include/memory_management.h similarity index 100% rename from include/memory_management.h rename to v3/include/memory_management.h diff --git a/include/physics_execution_hooks.h b/v3/include/physics_execution_hooks.h similarity index 100% rename from include/physics_execution_hooks.h rename to v3/include/physics_execution_hooks.h diff --git a/include/physics_hotwords_cache.h b/v3/include/physics_hotwords_cache.h similarity index 100% rename from include/physics_hotwords_cache.h rename to v3/include/physics_hotwords_cache.h diff --git a/include/physics_metadata.h b/v3/include/physics_metadata.h similarity index 100% rename from include/physics_metadata.h rename to v3/include/physics_metadata.h diff --git a/include/physics_pipelining_metrics.h b/v3/include/physics_pipelining_metrics.h similarity index 100% rename from include/physics_pipelining_metrics.h rename to v3/include/physics_pipelining_metrics.h diff --git a/include/physics_runtime.h b/v3/include/physics_runtime.h similarity index 100% rename from include/physics_runtime.h rename to v3/include/physics_runtime.h diff --git a/include/platform_alloc.h b/v3/include/platform_alloc.h similarity index 100% rename from include/platform_alloc.h rename to v3/include/platform_alloc.h diff --git a/include/platform_io.h b/v3/include/platform_io.h similarity index 100% rename from include/platform_io.h rename to v3/include/platform_io.h diff --git a/include/platform_lock.h b/v3/include/platform_lock.h similarity index 100% rename from include/platform_lock.h rename to v3/include/platform_lock.h diff --git a/include/platform_time.h b/v3/include/platform_time.h similarity index 100% rename from include/platform_time.h rename to v3/include/platform_time.h diff --git a/include/profiler.h b/v3/include/profiler.h similarity index 100% rename from include/profiler.h rename to v3/include/profiler.h diff --git a/include/q48_16.h b/v3/include/q48_16.h similarity index 100% rename from include/q48_16.h rename to v3/include/q48_16.h diff --git a/include/repl.h b/v3/include/repl.h similarity index 100% rename from include/repl.h rename to v3/include/repl.h diff --git a/include/rolling_window_knobs.h b/v3/include/rolling_window_knobs.h similarity index 100% rename from include/rolling_window_knobs.h rename to v3/include/rolling_window_knobs.h diff --git a/include/rolling_window_of_truth.h b/v3/include/rolling_window_of_truth.h similarity index 100% rename from include/rolling_window_of_truth.h rename to v3/include/rolling_window_of_truth.h diff --git a/include/ssm_jacquard.h b/v3/include/ssm_jacquard.h similarity index 100% rename from include/ssm_jacquard.h rename to v3/include/ssm_jacquard.h diff --git a/include/starforth_config.h b/v3/include/starforth_config.h similarity index 100% rename from include/starforth_config.h rename to v3/include/starforth_config.h diff --git a/include/startup.h b/v3/include/startup.h similarity index 100% rename from include/startup.h rename to v3/include/startup.h diff --git a/v3/include/version.h b/v3/include/version.h new file mode 100644 index 00000000..6603a0b5 --- /dev/null +++ b/v3/include/version.h @@ -0,0 +1,10 @@ +#ifndef STARFORTH_VERSION_H +#define STARFORTH_VERSION_H + +#define STARFORTH_VERSION "3.2.0" +#define STARFORTH_ARCH "x86_64" +#define STARFORTH_TARGET "standard" +#define STARFORTH_TIMESTAMP "2026-10-01T15:21:25-04:00" +#define STARFORTH_VERSION_FULL "StarForth v3.2.0 x86_64 standard 2026-10-01T15:21:25-04:00" + +#endif /* STARFORTH_VERSION_H */ diff --git a/include/vm.h b/v3/include/vm.h similarity index 100% rename from include/vm.h rename to v3/include/vm.h diff --git a/include/vm_api.h b/v3/include/vm_api.h similarity index 100% rename from include/vm_api.h rename to v3/include/vm_api.h diff --git a/include/vm_asm_opt.h b/v3/include/vm_asm_opt.h similarity index 100% rename from include/vm_asm_opt.h rename to v3/include/vm_asm_opt.h diff --git a/include/vm_asm_opt_arm64.h b/v3/include/vm_asm_opt_arm64.h similarity index 100% rename from include/vm_asm_opt_arm64.h rename to v3/include/vm_asm_opt_arm64.h diff --git a/include/vm_asm_opt_riscv64.h b/v3/include/vm_asm_opt_riscv64.h similarity index 100% rename from include/vm_asm_opt_riscv64.h rename to v3/include/vm_asm_opt_riscv64.h diff --git a/include/vm_debug.h b/v3/include/vm_debug.h similarity index 100% rename from include/vm_debug.h rename to v3/include/vm_debug.h diff --git a/include/vm_host.h b/v3/include/vm_host.h similarity index 100% rename from include/vm_host.h rename to v3/include/vm_host.h diff --git a/include/vm_inner_interp_arm64.h b/v3/include/vm_inner_interp_arm64.h similarity index 100% rename from include/vm_inner_interp_arm64.h rename to v3/include/vm_inner_interp_arm64.h diff --git a/include/vm_inner_interp_asm.h b/v3/include/vm_inner_interp_asm.h similarity index 100% rename from include/vm_inner_interp_asm.h rename to v3/include/vm_inner_interp_asm.h diff --git a/include/vm_inner_interp_riscv64.h b/v3/include/vm_inner_interp_riscv64.h similarity index 100% rename from include/vm_inner_interp_riscv64.h rename to v3/include/vm_inner_interp_riscv64.h diff --git a/include/word_registry.h b/v3/include/word_registry.h similarity index 100% rename from include/word_registry.h rename to v3/include/word_registry.h diff --git a/src/README.md b/v3/src/README.md similarity index 100% rename from src/README.md rename to v3/src/README.md diff --git a/src/blkio_factory.c b/v3/src/blkio_factory.c similarity index 100% rename from src/blkio_factory.c rename to v3/src/blkio_factory.c diff --git a/src/blkio_file.c b/v3/src/blkio_file.c similarity index 100% rename from src/blkio_file.c rename to v3/src/blkio_file.c diff --git a/src/blkio_ram.c b/v3/src/blkio_ram.c similarity index 100% rename from src/blkio_ram.c rename to v3/src/blkio_ram.c diff --git a/src/block_subsystem.c b/v3/src/block_subsystem.c similarity index 99% rename from src/block_subsystem.c rename to v3/src/block_subsystem.c index e6d924a1..d8f04d2f 100644 --- a/src/block_subsystem.c +++ b/v3/src/block_subsystem.c @@ -168,7 +168,6 @@ struct blk_dev_slot { /* ===== global state ===== */ static struct { - VM *vm; uint8_t *ram_base; size_t ram_size; uint8_t dirty_ram[BLK_RAM_BLOCKS]; @@ -644,11 +643,10 @@ static inline uint64_t blk_get_timestamp(void) { /* ===== public API ===== */ -int blk_subsys_init(VM *vm, uint8_t *ram_base, size_t ram_size) { - if (!vm || !ram_base || ram_size < ((size_t) BLK_RAM_BLOCKS * BLK_FORTH_SIZE)) +int blk_subsys_init(uint8_t *ram_base, size_t ram_size) { + if (!ram_base || ram_size < ((size_t) BLK_RAM_BLOCKS * BLK_FORTH_SIZE)) return BLK_EINVAL; memset(&g, 0, sizeof(g)); - g.vm = vm; g.ram_base = ram_base; g.ram_size = ram_size; g.ram_user = (BLK_RAM_BLOCKS > BLK_FORTH_SYS_RESERVED) diff --git a/src/cli.c b/v3/src/cli.c similarity index 100% rename from src/cli.c rename to v3/src/cli.c diff --git a/src/compudynamics.c b/v3/src/compudynamics.c similarity index 100% rename from src/compudynamics.c rename to v3/src/compudynamics.c diff --git a/src/dictionary_heat_optimization.c b/v3/src/dictionary_heat_optimization.c similarity index 100% rename from src/dictionary_heat_optimization.c rename to v3/src/dictionary_heat_optimization.c diff --git a/src/dictionary_management.c b/v3/src/dictionary_management.c similarity index 100% rename from src/dictionary_management.c rename to v3/src/dictionary_management.c diff --git a/src/doe_metrics.c b/v3/src/doe_metrics.c similarity index 100% rename from src/doe_metrics.c rename to v3/src/doe_metrics.c diff --git a/src/heartbeat_export.c b/v3/src/heartbeat_export.c similarity index 100% rename from src/heartbeat_export.c rename to v3/src/heartbeat_export.c diff --git a/src/inference_engine.c b/v3/src/inference_engine.c similarity index 100% rename from src/inference_engine.c rename to v3/src/inference_engine.c diff --git a/src/io.c b/v3/src/io.c similarity index 100% rename from src/io.c rename to v3/src/io.c diff --git a/src/log.c b/v3/src/log.c similarity index 100% rename from src/log.c rename to v3/src/log.c diff --git a/src/main.c b/v3/src/main.c similarity index 99% rename from src/main.c rename to v3/src/main.c index 686249d7..bc9dd4fc 100644 --- a/src/main.c +++ b/v3/src/main.c @@ -316,9 +316,9 @@ static int init_vm_and_subsystem(VM* vm) } /* Initialize block subsystem */ - extern int blk_subsys_init(VM* vm, uint8_t* ram_base, size_t ram_size); + extern int blk_subsys_init(uint8_t* ram_base, size_t ram_size); static uint8_t blk_ram[BLK_RAM_BLOCKS * BLK_FORTH_SIZE]; - int rc = blk_subsys_init(vm, blk_ram, sizeof(blk_ram)); + int rc = blk_subsys_init(blk_ram, sizeof(blk_ram)); if (rc != 0) { fprintf(stderr, "Failed to initialize block subsystem (rc=%d)\n", rc); diff --git a/src/math_portable.c b/v3/src/math_portable.c similarity index 100% rename from src/math_portable.c rename to v3/src/math_portable.c diff --git a/src/memory_management.c b/v3/src/memory_management.c similarity index 100% rename from src/memory_management.c rename to v3/src/memory_management.c diff --git a/src/physics_execution_hooks.c b/v3/src/physics_execution_hooks.c similarity index 100% rename from src/physics_execution_hooks.c rename to v3/src/physics_execution_hooks.c diff --git a/src/physics_hotwords_cache.c b/v3/src/physics_hotwords_cache.c similarity index 100% rename from src/physics_hotwords_cache.c rename to v3/src/physics_hotwords_cache.c diff --git a/src/physics_metadata.c b/v3/src/physics_metadata.c similarity index 100% rename from src/physics_metadata.c rename to v3/src/physics_metadata.c diff --git a/src/physics_pipelining_metrics.c b/v3/src/physics_pipelining_metrics.c similarity index 100% rename from src/physics_pipelining_metrics.c rename to v3/src/physics_pipelining_metrics.c diff --git a/src/physics_runtime.c b/v3/src/physics_runtime.c similarity index 100% rename from src/physics_runtime.c rename to v3/src/physics_runtime.c diff --git a/src/platform/README.md b/v3/src/platform/README.md similarity index 100% rename from src/platform/README.md rename to v3/src/platform/README.md diff --git a/src/platform/alloc_host.c b/v3/src/platform/alloc_host.c similarity index 100% rename from src/platform/alloc_host.c rename to v3/src/platform/alloc_host.c diff --git a/src/platform/alloc_kernel.c b/v3/src/platform/alloc_kernel.c similarity index 100% rename from src/platform/alloc_kernel.c rename to v3/src/platform/alloc_kernel.c diff --git a/src/platform/l4re/README.md b/v3/src/platform/l4re/README.md similarity index 100% rename from src/platform/l4re/README.md rename to v3/src/platform/l4re/README.md diff --git a/src/platform/l4re/time.c b/v3/src/platform/l4re/time.c similarity index 100% rename from src/platform/l4re/time.c rename to v3/src/platform/l4re/time.c diff --git a/src/platform/linux/README.md b/v3/src/platform/linux/README.md similarity index 100% rename from src/platform/linux/README.md rename to v3/src/platform/linux/README.md diff --git a/src/platform/linux/io.c b/v3/src/platform/linux/io.c similarity index 100% rename from src/platform/linux/io.c rename to v3/src/platform/linux/io.c diff --git a/src/platform/linux/time.c b/v3/src/platform/linux/time.c similarity index 100% rename from src/platform/linux/time.c rename to v3/src/platform/linux/time.c diff --git a/src/platform/platform_init.c b/v3/src/platform/platform_init.c similarity index 100% rename from src/platform/platform_init.c rename to v3/src/platform/platform_init.c diff --git a/src/platform/threading.c b/v3/src/platform/threading.c similarity index 100% rename from src/platform/threading.c rename to v3/src/platform/threading.c diff --git a/src/profiler.c b/v3/src/profiler.c similarity index 100% rename from src/profiler.c rename to v3/src/profiler.c diff --git a/src/repl.c b/v3/src/repl.c similarity index 100% rename from src/repl.c rename to v3/src/repl.c diff --git a/src/rolling_window_of_truth.c b/v3/src/rolling_window_of_truth.c similarity index 100% rename from src/rolling_window_of_truth.c rename to v3/src/rolling_window_of_truth.c diff --git a/src/ssm_jacquard.c b/v3/src/ssm_jacquard.c similarity index 100% rename from src/ssm_jacquard.c rename to v3/src/ssm_jacquard.c diff --git a/src/stack_management.c b/v3/src/stack_management.c similarity index 100% rename from src/stack_management.c rename to v3/src/stack_management.c diff --git a/src/test_runner/README.md b/v3/src/test_runner/README.md similarity index 100% rename from src/test_runner/README.md rename to v3/src/test_runner/README.md diff --git a/src/test_runner/include/README.md b/v3/src/test_runner/include/README.md similarity index 100% rename from src/test_runner/include/README.md rename to v3/src/test_runner/include/README.md diff --git a/src/test_runner/include/test_common.h b/v3/src/test_runner/include/test_common.h similarity index 99% rename from src/test_runner/include/test_common.h rename to v3/src/test_runner/include/test_common.h index c6154902..aa8942ab 100644 --- a/src/test_runner/include/test_common.h +++ b/v3/src/test_runner/include/test_common.h @@ -50,8 +50,8 @@ #ifndef TEST_COMMON_H #define TEST_COMMON_H -#include "../include/vm.h" -#include "../include/log.h" +#include "../../../include/vm.h" +#include "../../../include/log.h" #include "test_contracts.h" /** @name Test Configuration diff --git a/src/test_runner/include/test_contracts.h b/v3/src/test_runner/include/test_contracts.h similarity index 100% rename from src/test_runner/include/test_contracts.h rename to v3/src/test_runner/include/test_contracts.h diff --git a/src/test_runner/include/test_runner.h b/v3/src/test_runner/include/test_runner.h similarity index 100% rename from src/test_runner/include/test_runner.h rename to v3/src/test_runner/include/test_runner.h diff --git a/src/test_runner/modules/README.md b/v3/src/test_runner/modules/README.md similarity index 100% rename from src/test_runner/modules/README.md rename to v3/src/test_runner/modules/README.md diff --git a/src/test_runner/modules/acl_words_test.c b/v3/src/test_runner/modules/acl_words_test.c similarity index 100% rename from src/test_runner/modules/acl_words_test.c rename to v3/src/test_runner/modules/acl_words_test.c diff --git a/src/test_runner/modules/arithmetic_words_test.c b/v3/src/test_runner/modules/arithmetic_words_test.c similarity index 100% rename from src/test_runner/modules/arithmetic_words_test.c rename to v3/src/test_runner/modules/arithmetic_words_test.c diff --git a/src/test_runner/modules/block_words_test.c b/v3/src/test_runner/modules/block_words_test.c similarity index 100% rename from src/test_runner/modules/block_words_test.c rename to v3/src/test_runner/modules/block_words_test.c diff --git a/src/test_runner/modules/break_me_tests.c b/v3/src/test_runner/modules/break_me_tests.c similarity index 100% rename from src/test_runner/modules/break_me_tests.c rename to v3/src/test_runner/modules/break_me_tests.c diff --git a/src/test_runner/modules/control_words_test.c b/v3/src/test_runner/modules/control_words_test.c similarity index 100% rename from src/test_runner/modules/control_words_test.c rename to v3/src/test_runner/modules/control_words_test.c diff --git a/src/test_runner/modules/defining_words_tests.c b/v3/src/test_runner/modules/defining_words_tests.c similarity index 100% rename from src/test_runner/modules/defining_words_tests.c rename to v3/src/test_runner/modules/defining_words_tests.c diff --git a/src/test_runner/modules/dictionary_manipulation_words_test.c b/v3/src/test_runner/modules/dictionary_manipulation_words_test.c similarity index 100% rename from src/test_runner/modules/dictionary_manipulation_words_test.c rename to v3/src/test_runner/modules/dictionary_manipulation_words_test.c diff --git a/src/test_runner/modules/dictionary_words_test.c b/v3/src/test_runner/modules/dictionary_words_test.c similarity index 100% rename from src/test_runner/modules/dictionary_words_test.c rename to v3/src/test_runner/modules/dictionary_words_test.c diff --git a/src/test_runner/modules/double_words_test.c b/v3/src/test_runner/modules/double_words_test.c similarity index 100% rename from src/test_runner/modules/double_words_test.c rename to v3/src/test_runner/modules/double_words_test.c diff --git a/src/test_runner/modules/format_words_test.c b/v3/src/test_runner/modules/format_words_test.c similarity index 100% rename from src/test_runner/modules/format_words_test.c rename to v3/src/test_runner/modules/format_words_test.c diff --git a/src/test_runner/modules/inference_words_test.c b/v3/src/test_runner/modules/inference_words_test.c similarity index 100% rename from src/test_runner/modules/inference_words_test.c rename to v3/src/test_runner/modules/inference_words_test.c diff --git a/src/test_runner/modules/integration_tests.c b/v3/src/test_runner/modules/integration_tests.c similarity index 100% rename from src/test_runner/modules/integration_tests.c rename to v3/src/test_runner/modules/integration_tests.c diff --git a/src/test_runner/modules/io_words_test.c b/v3/src/test_runner/modules/io_words_test.c similarity index 100% rename from src/test_runner/modules/io_words_test.c rename to v3/src/test_runner/modules/io_words_test.c diff --git a/src/test_runner/modules/logical_words_test.c b/v3/src/test_runner/modules/logical_words_test.c similarity index 100% rename from src/test_runner/modules/logical_words_test.c rename to v3/src/test_runner/modules/logical_words_test.c diff --git a/src/test_runner/modules/mama_forth_words_test.c b/v3/src/test_runner/modules/mama_forth_words_test.c similarity index 100% rename from src/test_runner/modules/mama_forth_words_test.c rename to v3/src/test_runner/modules/mama_forth_words_test.c diff --git a/src/test_runner/modules/memory_words_test.c b/v3/src/test_runner/modules/memory_words_test.c similarity index 100% rename from src/test_runner/modules/memory_words_test.c rename to v3/src/test_runner/modules/memory_words_test.c diff --git a/src/test_runner/modules/mixed_arithmetic_words_test.c b/v3/src/test_runner/modules/mixed_arithmetic_words_test.c similarity index 100% rename from src/test_runner/modules/mixed_arithmetic_words_test.c rename to v3/src/test_runner/modules/mixed_arithmetic_words_test.c diff --git a/src/test_runner/modules/physics_freeze_words_test.c b/v3/src/test_runner/modules/physics_freeze_words_test.c similarity index 100% rename from src/test_runner/modules/physics_freeze_words_test.c rename to v3/src/test_runner/modules/physics_freeze_words_test.c diff --git a/src/test_runner/modules/q48_words_test.c b/v3/src/test_runner/modules/q48_words_test.c similarity index 100% rename from src/test_runner/modules/q48_words_test.c rename to v3/src/test_runner/modules/q48_words_test.c diff --git a/src/test_runner/modules/return_stack_words_test.c b/v3/src/test_runner/modules/return_stack_words_test.c similarity index 100% rename from src/test_runner/modules/return_stack_words_test.c rename to v3/src/test_runner/modules/return_stack_words_test.c diff --git a/src/test_runner/modules/stack_words_test.c b/v3/src/test_runner/modules/stack_words_test.c similarity index 100% rename from src/test_runner/modules/stack_words_test.c rename to v3/src/test_runner/modules/stack_words_test.c diff --git a/src/test_runner/modules/starforth_words_test.c b/v3/src/test_runner/modules/starforth_words_test.c similarity index 100% rename from src/test_runner/modules/starforth_words_test.c rename to v3/src/test_runner/modules/starforth_words_test.c diff --git a/src/test_runner/modules/stress_tests.c b/v3/src/test_runner/modules/stress_tests.c similarity index 100% rename from src/test_runner/modules/stress_tests.c rename to v3/src/test_runner/modules/stress_tests.c diff --git a/src/test_runner/modules/string_words_test.c b/v3/src/test_runner/modules/string_words_test.c similarity index 100% rename from src/test_runner/modules/string_words_test.c rename to v3/src/test_runner/modules/string_words_test.c diff --git a/src/test_runner/modules/system_words_test.c b/v3/src/test_runner/modules/system_words_test.c similarity index 100% rename from src/test_runner/modules/system_words_test.c rename to v3/src/test_runner/modules/system_words_test.c diff --git a/src/test_runner/modules/vocabulary_words_test.c b/v3/src/test_runner/modules/vocabulary_words_test.c similarity index 100% rename from src/test_runner/modules/vocabulary_words_test.c rename to v3/src/test_runner/modules/vocabulary_words_test.c diff --git a/src/test_runner/test_common.c b/v3/src/test_runner/test_common.c similarity index 100% rename from src/test_runner/test_common.c rename to v3/src/test_runner/test_common.c diff --git a/src/test_runner/test_contracts.c b/v3/src/test_runner/test_contracts.c similarity index 100% rename from src/test_runner/test_contracts.c rename to v3/src/test_runner/test_contracts.c diff --git a/src/test_runner/test_runner.c b/v3/src/test_runner/test_runner.c similarity index 100% rename from src/test_runner/test_runner.c rename to v3/src/test_runner/test_runner.c diff --git a/src/vm.c b/v3/src/vm.c similarity index 100% rename from src/vm.c rename to v3/src/vm.c diff --git a/src/vm_api.c b/v3/src/vm_api.c similarity index 100% rename from src/vm_api.c rename to v3/src/vm_api.c diff --git a/src/vm_bootstrap.c b/v3/src/vm_bootstrap.c similarity index 99% rename from src/vm_bootstrap.c rename to v3/src/vm_bootstrap.c index b933918e..f0e7d0f3 100644 --- a/src/vm_bootstrap.c +++ b/v3/src/vm_bootstrap.c @@ -65,8 +65,8 @@ #include "word_source/include/vocabulary_words.h" #ifdef __STARKERNEL__ -#include "../include/starkernel/capsule_birth.h" -#include "../include/starkernel/capsule_run.h" +#include "starkernel/capsule_birth.h" +#include "starkernel/capsule_run.h" #endif #include diff --git a/src/vm_debug.c b/v3/src/vm_debug.c similarity index 100% rename from src/vm_debug.c rename to v3/src/vm_debug.c diff --git a/src/vm_internal.h b/v3/src/vm_internal.h similarity index 100% rename from src/vm_internal.h rename to v3/src/vm_internal.h diff --git a/src/vm_time.c b/v3/src/vm_time.c similarity index 100% rename from src/vm_time.c rename to v3/src/vm_time.c diff --git a/src/word_registry.c b/v3/src/word_registry.c similarity index 100% rename from src/word_registry.c rename to v3/src/word_registry.c diff --git a/src/word_source/README.md b/v3/src/word_source/README.md similarity index 100% rename from src/word_source/README.md rename to v3/src/word_source/README.md diff --git a/src/word_source/acl_words.c b/v3/src/word_source/acl_words.c similarity index 100% rename from src/word_source/acl_words.c rename to v3/src/word_source/acl_words.c diff --git a/src/word_source/arithmetic_words.c b/v3/src/word_source/arithmetic_words.c similarity index 100% rename from src/word_source/arithmetic_words.c rename to v3/src/word_source/arithmetic_words.c diff --git a/src/word_source/block_words.c b/v3/src/word_source/block_words.c similarity index 100% rename from src/word_source/block_words.c rename to v3/src/word_source/block_words.c diff --git a/src/word_source/control_words.c b/v3/src/word_source/control_words.c similarity index 100% rename from src/word_source/control_words.c rename to v3/src/word_source/control_words.c diff --git a/src/word_source/defer_words.c b/v3/src/word_source/defer_words.c similarity index 100% rename from src/word_source/defer_words.c rename to v3/src/word_source/defer_words.c diff --git a/src/word_source/defining_words.c b/v3/src/word_source/defining_words.c similarity index 100% rename from src/word_source/defining_words.c rename to v3/src/word_source/defining_words.c diff --git a/src/word_source/dictionary_heat_diagnostic_words.c b/v3/src/word_source/dictionary_heat_diagnostic_words.c similarity index 100% rename from src/word_source/dictionary_heat_diagnostic_words.c rename to v3/src/word_source/dictionary_heat_diagnostic_words.c diff --git a/src/word_source/dictionary_manipulation_words.c b/v3/src/word_source/dictionary_manipulation_words.c similarity index 100% rename from src/word_source/dictionary_manipulation_words.c rename to v3/src/word_source/dictionary_manipulation_words.c diff --git a/src/word_source/dictionary_words.c b/v3/src/word_source/dictionary_words.c similarity index 100% rename from src/word_source/dictionary_words.c rename to v3/src/word_source/dictionary_words.c diff --git a/src/word_source/double_words.c b/v3/src/word_source/double_words.c similarity index 100% rename from src/word_source/double_words.c rename to v3/src/word_source/double_words.c diff --git a/src/word_source/editor_words.c b/v3/src/word_source/editor_words.c similarity index 100% rename from src/word_source/editor_words.c rename to v3/src/word_source/editor_words.c diff --git a/src/word_source/format_words.c b/v3/src/word_source/format_words.c similarity index 100% rename from src/word_source/format_words.c rename to v3/src/word_source/format_words.c diff --git a/src/word_source/framebuffer_words.c b/v3/src/word_source/framebuffer_words.c similarity index 100% rename from src/word_source/framebuffer_words.c rename to v3/src/word_source/framebuffer_words.c diff --git a/src/word_source/include/README.md b/v3/src/word_source/include/README.md similarity index 100% rename from src/word_source/include/README.md rename to v3/src/word_source/include/README.md diff --git a/src/word_source/include/acl_words.h b/v3/src/word_source/include/acl_words.h similarity index 100% rename from src/word_source/include/acl_words.h rename to v3/src/word_source/include/acl_words.h diff --git a/src/word_source/include/arithmetic_words.h b/v3/src/word_source/include/arithmetic_words.h similarity index 100% rename from src/word_source/include/arithmetic_words.h rename to v3/src/word_source/include/arithmetic_words.h diff --git a/src/word_source/include/block_words.h b/v3/src/word_source/include/block_words.h similarity index 100% rename from src/word_source/include/block_words.h rename to v3/src/word_source/include/block_words.h diff --git a/src/word_source/include/control_words.h b/v3/src/word_source/include/control_words.h similarity index 100% rename from src/word_source/include/control_words.h rename to v3/src/word_source/include/control_words.h diff --git a/src/word_source/include/defer_words.h b/v3/src/word_source/include/defer_words.h similarity index 89% rename from src/word_source/include/defer_words.h rename to v3/src/word_source/include/defer_words.h index cc24580b..1015e3d0 100644 --- a/src/word_source/include/defer_words.h +++ b/v3/src/word_source/include/defer_words.h @@ -10,7 +10,7 @@ #ifndef DEFER_WORDS_H #define DEFER_WORDS_H -#include "../../include/vm.h" +#include "../../../include/vm.h" void register_defer_words(VM *vm); diff --git a/src/word_source/include/defining_words.h b/v3/src/word_source/include/defining_words.h similarity index 100% rename from src/word_source/include/defining_words.h rename to v3/src/word_source/include/defining_words.h diff --git a/src/word_source/include/dictionary_heat_diagnostic_words.h b/v3/src/word_source/include/dictionary_heat_diagnostic_words.h similarity index 100% rename from src/word_source/include/dictionary_heat_diagnostic_words.h rename to v3/src/word_source/include/dictionary_heat_diagnostic_words.h diff --git a/src/word_source/include/dictionary_manipulation_words.h b/v3/src/word_source/include/dictionary_manipulation_words.h similarity index 100% rename from src/word_source/include/dictionary_manipulation_words.h rename to v3/src/word_source/include/dictionary_manipulation_words.h diff --git a/src/word_source/include/dictionary_words.h b/v3/src/word_source/include/dictionary_words.h similarity index 100% rename from src/word_source/include/dictionary_words.h rename to v3/src/word_source/include/dictionary_words.h diff --git a/src/word_source/include/double_words.h b/v3/src/word_source/include/double_words.h similarity index 100% rename from src/word_source/include/double_words.h rename to v3/src/word_source/include/double_words.h diff --git a/src/word_source/include/editor_words.h b/v3/src/word_source/include/editor_words.h similarity index 100% rename from src/word_source/include/editor_words.h rename to v3/src/word_source/include/editor_words.h diff --git a/src/word_source/include/format_words.h b/v3/src/word_source/include/format_words.h similarity index 100% rename from src/word_source/include/format_words.h rename to v3/src/word_source/include/format_words.h diff --git a/src/word_source/include/framebuffer_words.h b/v3/src/word_source/include/framebuffer_words.h similarity index 100% rename from src/word_source/include/framebuffer_words.h rename to v3/src/word_source/include/framebuffer_words.h diff --git a/src/word_source/include/inference_words.h b/v3/src/word_source/include/inference_words.h similarity index 100% rename from src/word_source/include/inference_words.h rename to v3/src/word_source/include/inference_words.h diff --git a/src/word_source/include/io_words.h b/v3/src/word_source/include/io_words.h similarity index 100% rename from src/word_source/include/io_words.h rename to v3/src/word_source/include/io_words.h diff --git a/src/word_source/include/keyboard_words.h b/v3/src/word_source/include/keyboard_words.h similarity index 100% rename from src/word_source/include/keyboard_words.h rename to v3/src/word_source/include/keyboard_words.h diff --git a/src/word_source/include/log_words.h b/v3/src/word_source/include/log_words.h similarity index 100% rename from src/word_source/include/log_words.h rename to v3/src/word_source/include/log_words.h diff --git a/src/word_source/include/logical_words.h b/v3/src/word_source/include/logical_words.h similarity index 100% rename from src/word_source/include/logical_words.h rename to v3/src/word_source/include/logical_words.h diff --git a/src/word_source/include/mama_forth_words.h b/v3/src/word_source/include/mama_forth_words.h similarity index 100% rename from src/word_source/include/mama_forth_words.h rename to v3/src/word_source/include/mama_forth_words.h diff --git a/src/word_source/include/memory_words.h b/v3/src/word_source/include/memory_words.h similarity index 100% rename from src/word_source/include/memory_words.h rename to v3/src/word_source/include/memory_words.h diff --git a/src/word_source/include/mixed_arithmetic_words.h b/v3/src/word_source/include/mixed_arithmetic_words.h similarity index 100% rename from src/word_source/include/mixed_arithmetic_words.h rename to v3/src/word_source/include/mixed_arithmetic_words.h diff --git a/src/word_source/include/physics_benchmark_words.h b/v3/src/word_source/include/physics_benchmark_words.h similarity index 100% rename from src/word_source/include/physics_benchmark_words.h rename to v3/src/word_source/include/physics_benchmark_words.h diff --git a/src/word_source/include/physics_diagnostic_words.h b/v3/src/word_source/include/physics_diagnostic_words.h similarity index 100% rename from src/word_source/include/physics_diagnostic_words.h rename to v3/src/word_source/include/physics_diagnostic_words.h diff --git a/src/word_source/include/physics_freeze_words.h b/v3/src/word_source/include/physics_freeze_words.h similarity index 100% rename from src/word_source/include/physics_freeze_words.h rename to v3/src/word_source/include/physics_freeze_words.h diff --git a/src/word_source/include/physics_pipelining_diagnostic_words.h b/v3/src/word_source/include/physics_pipelining_diagnostic_words.h similarity index 100% rename from src/word_source/include/physics_pipelining_diagnostic_words.h rename to v3/src/word_source/include/physics_pipelining_diagnostic_words.h diff --git a/src/word_source/include/q48_words.h b/v3/src/word_source/include/q48_words.h similarity index 100% rename from src/word_source/include/q48_words.h rename to v3/src/word_source/include/q48_words.h diff --git a/src/word_source/include/return_stack_words.h b/v3/src/word_source/include/return_stack_words.h similarity index 100% rename from src/word_source/include/return_stack_words.h rename to v3/src/word_source/include/return_stack_words.h diff --git a/src/word_source/include/scroll_words.h b/v3/src/word_source/include/scroll_words.h similarity index 100% rename from src/word_source/include/scroll_words.h rename to v3/src/word_source/include/scroll_words.h diff --git a/src/word_source/include/stack_words.h b/v3/src/word_source/include/stack_words.h similarity index 100% rename from src/word_source/include/stack_words.h rename to v3/src/word_source/include/stack_words.h diff --git a/src/word_source/include/starforth_words.h b/v3/src/word_source/include/starforth_words.h similarity index 100% rename from src/word_source/include/starforth_words.h rename to v3/src/word_source/include/starforth_words.h diff --git a/src/word_source/include/string_words.h b/v3/src/word_source/include/string_words.h similarity index 100% rename from src/word_source/include/string_words.h rename to v3/src/word_source/include/string_words.h diff --git a/src/word_source/include/system_words.h b/v3/src/word_source/include/system_words.h similarity index 100% rename from src/word_source/include/system_words.h rename to v3/src/word_source/include/system_words.h diff --git a/src/word_source/include/ttf_words.h b/v3/src/word_source/include/ttf_words.h similarity index 100% rename from src/word_source/include/ttf_words.h rename to v3/src/word_source/include/ttf_words.h diff --git a/src/word_source/include/vocabulary_words.h b/v3/src/word_source/include/vocabulary_words.h similarity index 100% rename from src/word_source/include/vocabulary_words.h rename to v3/src/word_source/include/vocabulary_words.h diff --git a/src/word_source/inference_words.c b/v3/src/word_source/inference_words.c similarity index 100% rename from src/word_source/inference_words.c rename to v3/src/word_source/inference_words.c diff --git a/src/word_source/io_words.c b/v3/src/word_source/io_words.c similarity index 100% rename from src/word_source/io_words.c rename to v3/src/word_source/io_words.c diff --git a/src/word_source/keyboard_words.c b/v3/src/word_source/keyboard_words.c similarity index 100% rename from src/word_source/keyboard_words.c rename to v3/src/word_source/keyboard_words.c diff --git a/src/word_source/lifecycle_words_hosted.c b/v3/src/word_source/lifecycle_words_hosted.c similarity index 100% rename from src/word_source/lifecycle_words_hosted.c rename to v3/src/word_source/lifecycle_words_hosted.c diff --git a/src/word_source/log_words.c b/v3/src/word_source/log_words.c similarity index 100% rename from src/word_source/log_words.c rename to v3/src/word_source/log_words.c diff --git a/src/word_source/logical_words.c b/v3/src/word_source/logical_words.c similarity index 100% rename from src/word_source/logical_words.c rename to v3/src/word_source/logical_words.c diff --git a/src/word_source/memory_words.c b/v3/src/word_source/memory_words.c similarity index 100% rename from src/word_source/memory_words.c rename to v3/src/word_source/memory_words.c diff --git a/src/word_source/mixed_arithmetic_words.c b/v3/src/word_source/mixed_arithmetic_words.c similarity index 100% rename from src/word_source/mixed_arithmetic_words.c rename to v3/src/word_source/mixed_arithmetic_words.c diff --git a/src/word_source/physics_benchmark_words.c b/v3/src/word_source/physics_benchmark_words.c similarity index 100% rename from src/word_source/physics_benchmark_words.c rename to v3/src/word_source/physics_benchmark_words.c diff --git a/src/word_source/physics_diagnostic_words.c b/v3/src/word_source/physics_diagnostic_words.c similarity index 100% rename from src/word_source/physics_diagnostic_words.c rename to v3/src/word_source/physics_diagnostic_words.c diff --git a/src/word_source/physics_freeze_words.c b/v3/src/word_source/physics_freeze_words.c similarity index 100% rename from src/word_source/physics_freeze_words.c rename to v3/src/word_source/physics_freeze_words.c diff --git a/src/word_source/physics_pipelining_diagnostic_words.c b/v3/src/word_source/physics_pipelining_diagnostic_words.c similarity index 99% rename from src/word_source/physics_pipelining_diagnostic_words.c rename to v3/src/word_source/physics_pipelining_diagnostic_words.c index 662d9431..1e928c35 100644 --- a/src/word_source/physics_pipelining_diagnostic_words.c +++ b/v3/src/word_source/physics_pipelining_diagnostic_words.c @@ -50,9 +50,9 @@ */ -#include "../include/vm.h" -#include "../include/physics_pipelining_metrics.h" -#include "../include/word_registry.h" +#include "../../include/vm.h" +#include "../../include/physics_pipelining_metrics.h" +#include "../../include/word_registry.h" #include #include #include diff --git a/src/word_source/q48_16_words.c b/v3/src/word_source/q48_16_words.c similarity index 99% rename from src/word_source/q48_16_words.c rename to v3/src/word_source/q48_16_words.c index 0b0279b4..b6e5b190 100644 --- a/src/word_source/q48_16_words.c +++ b/v3/src/word_source/q48_16_words.c @@ -45,7 +45,7 @@ #include #include -#include "../include/q48_16.h" +#include "../../include/q48_16.h" /* ============================================================================ * Core Arithmetic: Multiply diff --git a/src/word_source/q48_words.c b/v3/src/word_source/q48_words.c similarity index 100% rename from src/word_source/q48_words.c rename to v3/src/word_source/q48_words.c diff --git a/src/word_source/return_stack_words.c b/v3/src/word_source/return_stack_words.c similarity index 100% rename from src/word_source/return_stack_words.c rename to v3/src/word_source/return_stack_words.c diff --git a/src/word_source/scroll_words.c b/v3/src/word_source/scroll_words.c similarity index 100% rename from src/word_source/scroll_words.c rename to v3/src/word_source/scroll_words.c diff --git a/src/word_source/stack_words.c b/v3/src/word_source/stack_words.c similarity index 100% rename from src/word_source/stack_words.c rename to v3/src/word_source/stack_words.c diff --git a/src/word_source/starforth_words.c b/v3/src/word_source/starforth_words.c similarity index 100% rename from src/word_source/starforth_words.c rename to v3/src/word_source/starforth_words.c diff --git a/src/word_source/string_words.c b/v3/src/word_source/string_words.c similarity index 100% rename from src/word_source/string_words.c rename to v3/src/word_source/string_words.c diff --git a/src/word_source/system_words.c b/v3/src/word_source/system_words.c similarity index 100% rename from src/word_source/system_words.c rename to v3/src/word_source/system_words.c diff --git a/src/word_source/ttf_words.c b/v3/src/word_source/ttf_words.c similarity index 100% rename from src/word_source/ttf_words.c rename to v3/src/word_source/ttf_words.c diff --git a/src/word_source/vocabulary_words.c b/v3/src/word_source/vocabulary_words.c similarity index 100% rename from src/word_source/vocabulary_words.c rename to v3/src/word_source/vocabulary_words.c diff --git a/v4/.gitignore b/v4/.gitignore new file mode 100644 index 00000000..e757b735 --- /dev/null +++ b/v4/.gitignore @@ -0,0 +1,2 @@ +# Build output. Regenerated by `make test` / `make sanitize`. +build/ diff --git a/v4/Makefile b/v4/Makefile new file mode 100644 index 00000000..328ca604 --- /dev/null +++ b/v4/Makefile @@ -0,0 +1,288 @@ +# v4/Makefile -- host golden model build. +# +# JUSTIFICATION.md section 5: the host node runs the same mesh-defined +# instruction set as the hardware, so the C99 model is the reference the +# hardware is compared against -- not a host-specific reimplementation. +# There is consequently nothing v4-specific in the architecture here; the +# build is plain hosted C99 and the ISA is defined in DECOMPOSITION.md. +# +# The two builds that matter are the two cell widths. v4/Makefile builds and +# runs the tests at both, because a width-dependent bug that only appears at +# 32 bits is exactly the failure mode the F18's 32-bit cells invite and +# exactly the one a 64-bit-only test run would miss. +# +# C99, warnings fatal. A warning here is a defect in a model whose only job +# is to be trusted. + +CC ?= cc +CSTD := -std=c99 +WARN := -Wall -Wextra -Wpedantic -Werror +OPT ?= -O2 -g +CFLAGS ?= $(CSTD) $(WARN) $(OPT) + +# Anchor everything to this Makefile's directory so the build behaves the same +# whether it is invoked as `make -C v4 test` or `make -f v4/Makefile test` +# from the repository root. Without this the wildcards below silently expand +# to nothing from the root and the build "succeeds" having compiled no tests. +HERE := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST))))) + +SRCS := $(wildcard $(HERE)/src/*.c) +TESTS := $(wildcard $(HERE)/tests/test_*.c) + +# Cell widths to build and verify. 32 is the F18/Zynq case, 64 the aarch64 +# host case; see DECOMPOSITION.md D-5. +WIDTHS := 32 64 + +BINDIR := $(HERE)/build + +# Node memory is a build parameter (V4_NODE_WORDS, node.h; 1024 words unless +# set). A mesh node is small, but the host node holds the compiler, the +# dictionary and the text being compiled (JUSTIFICATION.md section 9), which +# do not fit 1024 words. Tests named test_host_*.c are therefore built with a +# host node of HOST_WORDS words; every other test keeps the mesh-node size. +# +# The host node's stacks are deeper too (DECOMPOSITION.md D-17): 32 values and +# 32 return entries, where a mesh node has the F18's 10 and 9. The stack is +# its top registers and a ring; the ring sizes are what is set here. +HOST_WORDS := 16384 +HOST_DATA_RING := 30 +HOST_RET_RING := 31 +node_size = $(if $(findstring /test_host_,$(1)),-DV4_NODE_WORDS=$(HOST_WORDS) -DV4_DATA_RING=$(HOST_DATA_RING) -DV4_RET_RING=$(HOST_RET_RING)) + +# BLOCKS (docs/v4.0.0/MESH.md section 8). A node asks its kernel for a +# block, and system/blocks.c serves it from the kernel's block subsystem, +# which is v3's and is built as v3 builds it. Tests named +# test_host_*.c link them. V3_BLOCK_SRCS is all of v3 that the block +# subsystem needs: its two device back ends, the log and the clock. +ROOT_DIR := $(abspath $(HERE)/..) +V3_BLOCK_SRCS := $(addprefix $(ROOT_DIR)/v3/src/,block_subsystem.c blkio_ram.c blkio_file.c log.c platform/platform_init.c platform/linux/time.c) +V3_CFLAGS := -std=gnu99 -Wall $(OPT) -I$(ROOT_DIR)/v3/include -I$(ROOT_DIR)/kernel/include +BLOCKS_SRC := $(HERE)/system/blocks.c +V3_INC := -isystem $(ROOT_DIR)/v3/include -isystem $(ROOT_DIR)/kernel/include +uses_blocks = $(findstring /test_host_,$(1)) +blocks_inc = $(if $(call uses_blocks,$(1)),$(V3_INC)) + +$(BINDIR)/v3blocks.o: $(V3_BLOCK_SRCS) $(wildcard $(ROOT_DIR)/v3/include/*.h) $(HERE)/Makefile + @rm -rf $(BINDIR)/v3o && mkdir -p $(BINDIR)/v3o + cd $(BINDIR)/v3o && $(CC) $(V3_CFLAGS) -c $(V3_BLOCK_SRCS) + $(LD) -r $(BINDIR)/v3o/*.o -o $@ +$(BINDIR)/san-v3blocks.o: $(V3_BLOCK_SRCS) $(wildcard $(ROOT_DIR)/v3/include/*.h) $(HERE)/Makefile + @rm -rf $(BINDIR)/san-v3o && mkdir -p $(BINDIR)/san-v3o + cd $(BINDIR)/san-v3o && $(CC) $(V3_CFLAGS) -O1 -g -fno-omit-frame-pointer -fsanitize=address,undefined -fno-sanitize-recover=all -c $(V3_BLOCK_SRCS) + $(LD) -r $(BINDIR)/san-v3o/*.o -o $@ +# blocks.c is compiled with each test that uses it, under that test's own +# flags: its warnings, its sanitizers, its cell width and node size. +# So are POST's runner and its cases (system/post.c, system/post_cases.c; +# docs/v4.0.0/NUCLEUS.md 6.3), which are the kernel's too. +blocks_src = $(if $(call uses_blocks,$(1)),$(BLOCKS_SRC) $(HERE)/system/post.c $(HERE)/system/post_cases.c) +blocks_objs = $(if $(call uses_blocks,$(1)),$(BINDIR)/v3blocks.o) +san_blocks_objs = $(if $(call uses_blocks,$(1)),$(BINDIR)/san-v3blocks.o) + +# The capsule sources: definitions as text (include/v4/text.h), which tests +# assemble onto a node. The directory is passed to the tests so that they +# find the files whatever directory make was run from. +CAPSULES := $(wildcard $(HERE)/capsule/*.v4) +capsule_dir := -DV4_CAPSULE_DIR='"$(HERE)/capsule"' + +# THE NUCLEUS IMAGE. tools/mkimage.c, built for the host node (HOST_WORDS +# and the host stack sizes) at one cell width, assembles the nucleus -- +# capsule/*.v4 -- and writes it as a C file, $(BINDIR)/v4_image_.c. +# The hosted system below and the bare-metal kernel (kernel/Makefile, +# STARFORTH_V4=1) link the 64-bit one. docs/v4.0.0/NUCLEUS.md. +# The nucleus as a capsule of F18 code (include/v4/capsule.h). The 64-bit one +# is a product's: it goes into the capsule directory, ../capsules/v4, where +# the repository's mkcapsule finds it, hashes it and signs it with every +# other capsule. It is a built file kept in the tree, as +# ../capsules/BLOCK_MAP.md is, and is to be committed when it changes. +ROOT := $(abspath $(HERE)/..) +NUCLEUS_64 := $(ROOT)/capsules/v4/nucleus-64.f18 +NUCLEUS_32 := $(BINDIR)/nucleus-32.f18 +HOST_DEFS := -DV4_NODE_WORDS=$(HOST_WORDS) -DV4_DATA_RING=$(HOST_DATA_RING) -DV4_RET_RING=$(HOST_RET_RING) +ENGINE_SRCS := $(addprefix $(HERE)/src/,node.c exec.c stack.c iword.c heat.c guard.c image.c fabric.c capsule.c message.c) + +define IMAGE_RULE +$(BINDIR)/mkimage-$(1): $(HERE)/tools/mkimage.c $$(SRCS) $$(wildcard $(HERE)/include/v4/*.h) $(HERE)/tests/host_map.h $(HERE)/Makefile + @mkdir -p $(BINDIR) + $$(CC) $$(CFLAGS) -I$(HERE)/include -DV4_CELL_BITS=$(1) $(HOST_DEFS) $(capsule_dir) $(HERE)/tools/mkimage.c $$(SRCS) -o $$@ + +$(BINDIR)/v4_image_$(1).c: $(BINDIR)/mkimage-$(1) $$(CAPSULES) + $(BINDIR)/mkimage-$(1) $$@ $$(NUCLEUS_$(1)) +endef +$(foreach w,$(WIDTHS),$(eval $(call IMAGE_RULE,$(w)))) + +.PHONY: image +image: $(foreach w,$(WIDTHS),$(BINDIR)/v4_image_$(w).c) + +# THE HOSTED SYSTEM: StarForth v4 as a Linux program, a product, for amd64, +# aarch64 and riscv64 -- $(BINDIR)/starforth4-. It is the engine, the +# 64-bit nucleus image, the capsule directory and the boot (system/boot.c) +# that loads the capsules from it: the same four the kernel links. The +# directory is made by the repository's own tools/mkcapsule.c from +# ../capsules, signed if the key is on this machine (kernel/Makefile, +# SIGN_KEY), and the code that reads it is the kernel's, compiled here as it +# is there. The binaries are static, so the two foreign ones run under +# user-mode QEMU with nothing else installed. +HOSTED_ISAS := amd64 aarch64 riscv64 +CC_amd64 ?= cc +CC_aarch64 ?= aarch64-linux-gnu-gcc +CC_riscv64 ?= riscv64-linux-gnu-gcc +RUN_amd64 ?= +RUN_aarch64 ?= qemu-aarch64 +RUN_riscv64 ?= qemu-riscv64 + +SIGN_KEY ?= /home/rajames/CLionProjects/lithosananke-ca/intermediate/snakeoil-intermediate.key +SIGN_KEY_ARGS = $(if $(wildcard $(SIGN_KEY)),--sign-key $(SIGN_KEY),) +CRYPTO_SRCS := $(addprefix $(ROOT)/kernel/src/crypto/,ed25519.c fe25519.c scalar25519.c sha512.c) +MKCAPSULE_SRCS := $(ROOT)/tools/mkcapsule.c $(ROOT)/tools/pkcs8_ed25519.c $(CRYPTO_SRCS) +CAPSULE_FILES := $(shell find $(ROOT)/capsules -type f ! -name '.*' 2>/dev/null) +CAPSULE_DIR_C := $(BINDIR)/capsule_generated.c + +# the kernel's capsule code: find, check the hash, verify the signature, +# split a payload into blocks +SYSTEM_SRCS := $(HERE)/system/boot.c $(HERE)/system/post.c $(HERE)/system/post_cases.c \ + $(addprefix $(ROOT)/kernel/src/capsule/,capsule_find.c capsule_validate.c capsule_sig.c capsule_blocks.c) \ + $(ROOT)/kernel/src/hash/xxhash64.c $(ROOT)/kernel/src/crypto/x509_ed25519.c $(CRYPTO_SRCS) +# The kernel's sources are held to the kernel's warnings, not this model's. +SYSTEM_CFLAGS := $(CSTD) -Wall -Wextra $(OPT) -I$(HERE)/include -I$(ROOT)/kernel/include -I$(ROOT)/v3/include \ + -DV4_CELL_BITS=64 $(HOST_DEFS) + +$(BINDIR)/mkcapsule: $(MKCAPSULE_SRCS) + @mkdir -p $(BINDIR) + cc -std=c99 -Wall -Wextra -O2 -I$(ROOT)/v3/include -I$(ROOT)/kernel/include -I$(ROOT)/tools -o $@ $(MKCAPSULE_SRCS) + +$(CAPSULE_DIR_C): $(BINDIR)/mkcapsule $(CAPSULE_FILES) $(BINDIR)/v4_image_64.c + $(BINDIR)/mkcapsule $(SIGN_KEY_ARGS) $(ROOT)/capsules $@ + +define HOSTED_RULE +$(BINDIR)/starforth4-$(1): $(HERE)/tools/hosted.c $(BINDIR)/v4_image_64.c $(CAPSULE_DIR_C) $$(ENGINE_SRCS) $$(SYSTEM_SRCS) $(BLOCKS_SRC) $(V3_BLOCK_SRCS) $$(wildcard $(HERE)/include/v4/*.h) $(HERE)/Makefile + $$(CC_$(1)) $$(CFLAGS) -D_POSIX_C_SOURCE=200809L -I$(HERE)/include $(V3_INC) -DV4_CELL_BITS=64 $(HOST_DEFS) -c $(HERE)/tools/hosted.c -o $(BINDIR)/hosted-$(1).o + @rm -rf $(BINDIR)/v3o-$(1) && mkdir -p $(BINDIR)/v3o-$(1) + cd $(BINDIR)/v3o-$(1) && $$(CC_$(1)) $(V3_CFLAGS) -I$(HERE)/include -DV4_CELL_BITS=64 $(HOST_DEFS) -c $(V3_BLOCK_SRCS) $(BLOCKS_SRC) + $$(CC_$(1)) $$(SYSTEM_CFLAGS) -static $(BINDIR)/hosted-$(1).o $(BINDIR)/v4_image_64.c $(CAPSULE_DIR_C) $$(ENGINE_SRCS) $$(SYSTEM_SRCS) $(BINDIR)/v3o-$(1)/*.o -o $$@ + +$(BINDIR)/boot-$(1).txt: $(BINDIR)/starforth4-$(1) + @echo " [hosted $(1)]" + @$$(RUN_$(1)) $(BINDIR)/starforth4-$(1) < /dev/null > $$@ || { cat $$@; rm -f $$@; exit 1; } + @cat $$@ +endef +$(foreach i,$(HOSTED_ISAS),$(eval $(call HOSTED_RULE,$(i)))) + +# `make post` boots the amd64 system alone, which is the quick check after a +# change to the vocabulary: nucleus, forth79.4th, POST, prompt. `make +# post79` writes POST's cases, system/post_cases.c, again from +# v3's cases and tools/post79_rules.py (tools/mkpost.py); it needs the +# hosted v3 binary. +.PHONY: post post79 +post: $(BINDIR)/starforth4-amd64 + @$(BINDIR)/starforth4-amd64 < /dev/null +post79: + python3 $(HERE)/tools/mkpost.py + +# `make hosted` builds the three. `make hosted-check` boots each with no +# input and requires that all three print the same lines, ending in +# PARITY:OK, POST: PASSED and the prompt: the same hashes on every ISA. It +# also checks that what the boot loaded is part of the system: after COLD +# the capsule's words and the kernel's are still there, and FORGET refuses +# them; that POST has left nothing of itself or of what its cases defined; +# and that a boot whose POST has a failing case fails. +.PHONY: hosted hosted-check +hosted: $(foreach i,$(HOSTED_ISAS),$(BINDIR)/starforth4-$(i)) +hosted-check: $(foreach i,$(HOSTED_ISAS),$(BINDIR)/boot-$(i).txt) $(BINDIR)/starforth4-postfail + @grep -q '^POST: PASSED$$' $(BINDIR)/boot-amd64.txt || { echo "hosted-check: no POST: PASSED"; exit 1; } + @cmp $(BINDIR)/boot-amd64.txt $(BINDIR)/boot-aarch64.txt + @cmp $(BINDIR)/boot-amd64.txt $(BINDIR)/boot-riscv64.txt + @printf 'COLD\n3 4 U* . .\nFORGET U*\nBYE\n' | $(BINDIR)/starforth4-amd64 > $(BINDIR)/cold-amd64.txt + @grep -q '^ok> 0 12 ok$$' $(BINDIR)/cold-amd64.txt || { echo "hosted-check: COLD lost the capsule's words"; cat $(BINDIR)/cold-amd64.txt; exit 1; } + @grep -q '^ok> Protected word$$' $(BINDIR)/cold-amd64.txt || { echo "hosted-check: a capsule word could be forgotten"; exit 1; } + @grep -q '^ok> Goodbye!$$' $(BINDIR)/cold-amd64.txt || { echo "hosted-check: COLD lost BYE"; exit 1; } + @printf 'RS1\nT{\nWORDS\n' | $(BINDIR)/starforth4-amd64 > $(BINDIR)/after-post-amd64.txt + @grep -q "^ok> UNKNOWN WORD: 'RS1'$$" $(BINDIR)/after-post-amd64.txt || { echo "hosted-check: a word a POST case defined is still there"; exit 1; } + @grep -q "^ok> UNKNOWN WORD: 'T{'$$" $(BINDIR)/after-post-amd64.txt || { echo "hosted-check: POST's harness is on the node"; exit 1; } + @printf '5 7 PORT!\n1 2 + .\n' | $(BINDIR)/starforth4-amd64 > $(BINDIR)/noone-amd64.txt 2>&1; true + @grep -q '^ok> No one on that port$$' $(BINDIR)/noone-amd64.txt && grep -q '^ok> 3 ok$$' $(BINDIR)/noone-amd64.txt || { echo "hosted-check: a write to a port with no one on it was not an error the node came back from"; cat $(BINDIR)/noone-amd64.txt | tail -4; exit 1; } + @$(BINDIR)/starforth4-postfail < /dev/null > $(BINDIR)/postfail.txt; test $$? -ne 0 || { echo "hosted-check: a boot with a failing case did not fail"; exit 1; } + @grep -q '^POST FAIL: fail.wrong out<5 5 $$' $(BINDIR)/postfail.txt || { echo "hosted-check: the failing case was not named"; cat $(BINDIR)/postfail.txt; exit 1; } + @grep -q '^POST FAIL: fail.many out \|^5 5 $$\|PARITY:OK\|PARITY:V4_SYSTEM' $(BINDIR)/postfail.txt || { echo "hosted-check: a failed boot gave a prompt, or showed a case's printing"; exit 1; } + @echo "hosted-check: amd64, aarch64 and riscv64 boot identically; a boot with a failing case fails" + +# A hosted program whose POST has a case that fails (tests/post_cases_fail.c +# in the place of system/post_cases.c): hosted-check boots it and requires +# that the boot stops there. docs/v4.0.0/MESH.md step 6b, acceptance 4. +$(BINDIR)/starforth4-postfail: $(BINDIR)/starforth4-amd64 $(HERE)/tests/post_cases_fail.c + $(CC) $(SYSTEM_CFLAGS) -static $(BINDIR)/hosted-amd64.o $(BINDIR)/v4_image_64.c $(CAPSULE_DIR_C) $(ENGINE_SRCS) $(filter-out %/post_cases.c,$(SYSTEM_SRCS)) $(HERE)/tests/post_cases_fail.c $(BINDIR)/v3o-amd64/*.o -o $@ + +.PHONY: all test sanitize clean $(addprefix test-,$(WIDTHS)) + +all: test + +# A build that finds no tests must fail loudly, not report a vacuous pass. A +# loop over an empty list exits 0 having run nothing, which in CI is +# indistinguishable from a green run -- the worst possible failure mode for a +# test harness, and one this Makefile has already produced once. +ifeq ($(strip $(TESTS)),) +$(error No test sources under $(HERE)/tests -- refusing to report success) +endif + +# One test binary per (width, test source) pair. The cell width is a +# preprocessor parameter rather than a runtime one, so the two widths are +# separate compilations -- which is the point: there is no single code path +# that could paper over a width assumption. +# +# `make test` builds optimised; `make sanitize` builds the same sources under +# AddressSanitizer and UndefinedBehaviorSanitizer at both widths and runs them. +# The optimized run catches logic errors, this one catches the out-of-bounds +# ring index and the width-dependent shift that a logic-only test cannot see. +# -fno-sanitize-recover=all makes every UBSan report fatal: without it UBSan +# prints the report and carries on, and the run still says "passed". +# +# Both binaries depend on this Makefile, so a flag change rebuilds them. +define TEST_RULE +$(BINDIR)/$(1)-$(notdir $(2)): $(2) $$(SRCS) $(call blocks_src,$(2)) $(call blocks_objs,$(2)) $$(wildcard $(HERE)/include/v4/*.h) $$(wildcard $(HERE)/tests/*.h) $(HERE)/Makefile + @mkdir -p $(BINDIR) + $$(CC) $$(CFLAGS) -I$(HERE)/include $(call blocks_inc,$(2)) -DV4_CELL_BITS=$(1) $(call node_size,$(2)) $(capsule_dir) \ + $(2) $$(SRCS) $(call blocks_src,$(2)) $(call blocks_objs,$(2)) -o $$@ + +$(BINDIR)/san-$(1)-$(notdir $(2)): $(2) $$(SRCS) $(call blocks_src,$(2)) $(call san_blocks_objs,$(2)) $$(wildcard $(HERE)/include/v4/*.h) $$(wildcard $(HERE)/tests/*.h) $(HERE)/Makefile + @mkdir -p $(BINDIR) + $$(CC) $$(CSTD) $$(WARN) -O1 -g -fno-omit-frame-pointer \ + -fsanitize=address,undefined -fno-sanitize-recover=all -I$(HERE)/include $(call blocks_inc,$(2)) -DV4_CELL_BITS=$(1) $(call node_size,$(2)) $(capsule_dir) \ + $(2) $$(SRCS) $(call blocks_src,$(2)) $(call san_blocks_objs,$(2)) -o $$@ +endef + +# One run target per (width, test) and one prerequisite line per width, so +# adding a test file cannot redefine a recipe and the run cannot skip the +# build. A shell loop over `$^` is avoided deliberately: `$^` is make syntax +# that does not survive the define/eval expansion, and a silently-empty loop +# list is exactly the vacuous-pass failure this file already made once. +define RUN_RULE +run-$(1)-$(notdir $(2)): $(BINDIR)/$(1)-$(notdir $(2)) $$(CAPSULES) + @echo " [V4_CELL_BITS=$(1) $$@]" + @$(BINDIR)/$(1)-$(notdir $(2)) + +test-$(1): run-$(1)-$(notdir $(2)) +endef + +# The same sources and the same assertions, under ASan+UBSan. +define SAN_RULE +san-$(1)-$(notdir $(2)): $(BINDIR)/san-$(1)-$(notdir $(2)) + @echo " [ASan+UBSan V4_CELL_BITS=$(1) $$@]" + @$(BINDIR)/san-$(1)-$(notdir $(2)) +endef + +$(foreach w,$(WIDTHS),$(foreach t,$(TESTS),$(eval $(call TEST_RULE,$(w),$(t))))) +$(foreach w,$(WIDTHS),$(foreach t,$(TESTS),$(eval $(call RUN_RULE,$(w),$(t))))) +$(foreach w,$(WIDTHS),$(foreach t,$(TESTS),$(eval $(call SAN_RULE,$(w),$(t))))) + +sanitize: $(foreach w,$(WIDTHS),$(foreach t,$(TESTS),san-$(w)-$(notdir $(t)))) + @echo "all v4 tests passed under ASan+UBSan" + +.PHONY: $(foreach w,$(WIDTHS),$(foreach t,$(TESTS),run-$(w)-$(notdir $(t)) san-$(w)-$(notdir $(t)))) + +test: $(addprefix test-,$(WIDTHS)) + @echo "all v4 tests passed" + +clean: + rm -rf $(BINDIR) diff --git a/v4/README.md b/v4/README.md new file mode 100644 index 00000000..a2b2f294 --- /dev/null +++ b/v4/README.md @@ -0,0 +1,194 @@ +# v4/ + +StarForth v4: the 32-instruction F18-derived core. The design lives in +`docs/v4.0.0/JUSTIFICATION.md` (why) and `docs/v4.0.0/DECOMPOSITION.md` +(every v3 word mapped to a v4 fate). + +The first deliverable is the hosted C99 golden model (`JUSTIFICATION.md` §10, +step 1). It must pass POST and hold K≡1.0 with 32- and 64-bit cells on all +three host ISAs. + +Acceptance (`JUSTIFICATION.md` §16): v4 must be equivalent to v3 at any point +in time, with the same vocabularies and behaviour, on the F18-derived engine; +and every ISA, hosted and bare metal, must still reach its `ok` prompt. +`make -C v4 test` passing is a development check, not acceptance. + +What exists so far is the single node: registers, circular stacks, memory, all +32 opcodes, per-opcode and per-call-target heat, and three console +registers (`CONSOLE-TX`, which captures output, and `CONSOLE-RX` and `CONSOLE-STATUS`, which hand out +input a test feeds) standing in for the console node until the mesh exists. The tests load definitions +onto a node either opcode by opcode (`v4/include/v4/asm.h`) or as text in the notation `DECOMPOSITION.md` +uses (`v4/include/v4/text.h`). `make -C v4 test` builds +and runs the tests at both cell widths; `make -C v4 sanitize` repeats them +under ASan and UBSan. There is no POST and no K measurement yet. + +## The system: nucleus, capsules, prompt + +`docs/v4.0.0/NUCLEUS.md` is the design. A v4 system is four things: + +| Part | Where | What it is | +|---|---|---| +| Engine | `v4/src` | The golden model of the 32-opcode node | +| Nucleus | `v4/capsule/*.v4`, built by `v4/tools/mkimage.c` into `capsules/v4/nucleus-64.f18` | The assembled words, as a capsule of F18 code: sent through its port to a node born empty | +| Capsules | `capsules/v4/*.4th`, baked by `tools/mkcapsule.c` | FORTH source, loaded when the system comes up | +| Boot | `v4/system/boot.c` | Starts the nucleus, checks and loads each capsule, prints the parity lines, gives the prompt | + +Two products link the same four and differ only in the console: + +- **Hosted Linux**, `v4/tools/hosted.c`: `make -C v4 hosted` builds + `v4/build/starforth4-amd64`, `-aarch64` and `-riscv64`, static, 64-bit cells. +- **Bare metal**, `kernel/src/v4/sk_v4.c`: `make -f kernel/Makefile ARCH= STARFORTH_V4=1`. + +A boot prints: + +``` +PARITY:V4_NUCLEUS words=292 image_hash=0x... +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x... capsule_hash=0x... dict_hash=0x... +PARITY:OK +ok> +``` + +Every build of one commit prints the same hashes. `make -C v4 hosted-check` +boots the three hosted binaries (the two foreign ones under user-mode QEMU) +and fails unless their output is identical and ends in `PARITY:OK`. + +A capsule line the node does not answer ` ok` to ends the boot, naming the +capsule, block and line, with `PARITY:FAIL` and `POST: FAILED`. + +State, 2026-10-05, after `ENGINE.md` step 1: all six builds start the nucleus, +load `v4:forth79.4th`, pass POST and reach `ok>`, with the same lines: + +``` +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=... capsule_hash=0x97a655081b2af559 words=298 +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=... dict_hash=... +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=314 dict_hash=... +PARITY:OK +POST: PASSED +ok> +``` + +Bare-metal logs: `logs/20261006-110551/amd64/`, `logs/20261006-111621/aarch64/`, +`logs/20261006-111341/riscv64/`. On each, seven lines were then typed at the +prompt through the serial port — a definition, its use with the capsule's +`U*`, `COLD`, the capsule word again, a `FORGET` of it (refused), a kernel +word no one serves, and `BYE` — and each was answered as the hosted binary +answers it. The +capsules were unsigned (no signing key on this machine). + +**A node is sent text as a message** (`docs/v4.0.0/MESH.md` section 6). It +does not read its own command line, prints no prompt and has no console of +its own. With nothing to do it is blocked reading its ports. A neighbour +writes it a message; text for it is interpreted; what it prints goes back +as messages to the sender, and then a message saying how the text ended. +Its console says ` ok` or ` ERROR` and prompts, as the kernel's REPL does +for a v3 VM. A message carries 1024 characters, a block. `v4/src/message.c` +is the format for a host; `v4_boot_line` (`v4/system/boot.c`) is the +console both products and the capsule loader use. + +**A node asks its kernel by writing to its port** (`ENGINE.md` 3.3). The +write blocks the node until it has been served. A kernel word is a +dictionary entry made by `n KERNEL-WORD name`, whose body writes `n` to the +port; its arguments and results are on the data stack. `BYE` is the one +kernel word so far. A node can be stopped between any two instruction +words and is blocked while it waits at its port, which is what a system of +many users and tasks, preemptive and cooperative, needs of it +(`ENGINE.md` 3a). + +**The two products have parted** (`ENGINE.md` 3c). They share the engine, +the FORTH-79 capsule and its POST; their nuclei may differ. The hosted +product is its own and may become a hosted SDK. The bare-metal product is +to be LithosAnanke with the node in the StarForth VM's place, and +everything about word records, the fleet and identity is its alone. + +**Nodes that talk** (`docs/v4.0.0/MESH.md`) are the next step, ahead of +making v4 equal v3 on bare metal. Its first part is built and tested in +the engine: a node has `V4_PORTS` ports; a read from one blocks until the +neighbour writes and a write until the neighbour reads; a node is born +empty with `P` at its ports and executes what a neighbour sends it, which +is how each product's node now gets its nucleus, as a capsule; and +the fabric (`v4/src/fabric.c`) is the nodes there are and the table of how +their ports are wired, both of which change while they run. The products +below are still one node each; they become the five nodes at `MESH.md` +steps 8 and 9. + +**Finding the way** (`MESH.md` step 4) is built: a node has a table of +which port leads toward which node (`ROUTE`, `DEFAULT-ROUTE`, `NO-ROUTES`), +passes on a message that is not for it, and `SEND`s text to another node; +`v4/tests/test_host_mesh.c` runs three StarForth nodes in a row. A node +looks before it begins a message (`MESH.md` section 7a): it takes in what +its neighbours are waiting to write to it, keeps those messages until it +has nothing else to do, and writes only to a neighbour that is waiting to +read -- or, of two neighbours, the one with the lower number may wait. +`NEIGHBOUR ( node port -- )` tells a node who is on each port. A node with +no room for one more message lets it go and counts it in `(LOST)`. + +**Five nodes from nothing** (`MESH.md` step 5) is built and proven in the +fabric under test: Hera asks whoever holds the fabric for a node +(`v4/src/manage.c`: `NODE-BORN`, `NODE-WIRE` and the rest), sends it the +nucleus through the port that joins them, then FORTH-79 a line at a +time, and joins four such nodes in a square round her +(`capsules/v4/hera.4th`: `BIRTH`, `UNIT`). `v4/tests/test_host_unit.c`. +The two products are not yet this: they become the five nodes at steps 8 +and 9. +A node she births is not POSTed: POST is the kernel's, once, on Hera. + +**Blocks** (`MESH.md` step 6). The block words are the kernel's, as they +are for a v3 VM: `BLOCK`, `BUFFER`, `UPDATE`, `SAVE-BUFFERS` and +`EMPTY-BUFFERS` each write one request to port 0, by block number only +(`v4/include/v4/blocks.h`). The node has a window of four slots in its +memory; the kernel copies blocks into it, keeps the record of what is in +it, and decides when a block is written (`v4/system/blocks.c`). The blocks +are the kernel's block subsystem's, which is v3's +(`v3/src/block_subsystem.c`): +one chain, the same blocks at the same numbers for every node. A hosted +program has the chain's fast RAM, blocks 1 to 2047. On bare metal the chain +is fast RAM, the ramdrive and the virtio disk; the disk is read and not yet +written, because nothing in v4 gives its owner's word that it may be +formatted. Who may have which block is not checked yet. + +**This is still the lone node.** On bare metal `kernel_main.c` starts it +before the fleet tables, beside the kernel's own system and not in the VM's +place. `ENGINE.md` sets out the steps from here; step 1 is done and step 2 is +part done. `V3-PARITY.md` records the rulings it is built from. + +**What this does not yet show.** `forth79.4th` holds two definitions, `U*` +and `U/MOD`. Every other word is still in the assembled nucleus, so POST is +so far a test of the assembled words. Moving them to the capsule, a group at +a time with POST after each, is the next step (`NUCLEUS.md` section 8). + +## POST + +POST is the kernel's, as in v3 (`MESH.md` step 6b, `NUCLEUS.md` 6.3). The +kernel holds the cases, `v4/system/post_cases.c`: 538 of them, covering 126 +of the 130 words of the FORTH-79 Required Word Set. 431 are v3's cases with +what the hosted v3 binary did as the expected result; every other case, +and the v3 cases left out, are listed with reasons in +`docs/v4.0.0/POST79.md`. + +- `make -C v4 post` boots the amd64 system: the quick check after a change. +- `make -C v4 hosted-check` boots all three hosted ISAs and compares them. +- `make -C v4 post79` writes the cases again (`tools/mkpost.py`, + `tools/post79_rules.py`); it needs the hosted v3 binary. + +The runner, `v4/system/post.c`, feeds each case to the node a line at a +time, keeps what the node prints, reads its data stack from outside, and +judges: an error exactly if one is expected, and otherwise the stack and +every character printed. Nothing of POST is in the node's dictionary, and +POST leaves nothing: the system is sealed before it, and afterwards the +kernel puts the node back to the system as sealed, as v3 puts the +dictionary back after each of its suites. The boot then prints +`PARITY:V4_SYSTEM word_count=N dict_hash=0x...`, and passes only if no +case failed (`v4/system/boot.c`). A case the node does not come back from +ends POST there, named. `make -C v4 hosted-check` also boots a program +whose POST has failing cases and requires that the boot fails. + +Not tested: `KEY`, `EXPECT`, `QUERY` (the keyboard) and `QUIT` (it returns +without ` ok`). + +Open: `PAD 42 OVER !` faults on v4, because `PAD` is a byte address and `!` +takes a cell address (D-1). FORTH-79 expects it to work. The v3 case for it +is left out until that is ruled. + +The Required Word Set list in `tools/mkpost.py` was written from memory of +the standard and has not been checked against the document. diff --git a/v4/capsule/ACL.fth b/v4/capsule/ACL.fth new file mode 100644 index 00000000..da1a55a1 --- /dev/null +++ b/v4/capsule/ACL.fth @@ -0,0 +1,57 @@ +\ ACL.fth -- word-level access control: the policy. +\ +\ This is v3's capsules/ACL.4th, as FORTH source the node compiles itself. +\ The capsule supplies the fields of an entry and the check (acl.v4, +\ compile.v4); what is strict, how long a TTL lasts and what is pinned is +\ decided here. Loading this file switches access control on: its last +\ line runs ACL-BOOT. A system that does not load it has none. +\ +\ The xt these words take is what FIND and ['] give: the word's code. + +FORTH DEFINITIONS + +1 CONSTANT ACL-STRICT-MODE +0 CONSTANT ACL-TTL-MODE-VAL +\ the TTL of a cold word, tuned 2026-06-15 on v3 +256 CONSTANT ACL-BASE-TTL +65535 CONSTANT ACL-MAX-TTL + +\ ( xt -- xt ) for symmetry: the xt is the entry +: ACL-ENTRY ; + +: ACL-STRICT ( xt -- ) + DUP ACL-PINNED? IF DROP EXIT THEN ACL-STRICT-MODE SWAP ACL-MODE! ; +: ACL-TTL-MODE ( xt -- ) + DUP ACL-PINNED? IF DROP EXIT THEN ACL-TTL-MODE-VAL SWAP ACL-MODE! ; + +\ ( xt -- ttl ) a hotter word earns a longer TTL: heat/4 + 256, at most 65535 +: ACL-TTL-COMPUTE ACL-HEAT@ 4 / ACL-BASE-TTL + ACL-MAX-TTL MIN ; + +\ ( xt -- ) what the check runs when a word's TTL is 0. +\ STRICT: allow, and leave the TTL 0 so that every use comes back here. +\ TTL: compute a TTL from the word's heat; allow. +: ACL-RECHECK + DUP ACL-PINNED? IF DROP EXIT THEN + DUP ACL-MODE@ ACL-STRICT-MODE = IF + 1 OVER ACL-ALLOW! 0 OVER ACL-TTL! DROP EXIT + THEN + DUP ACL-TTL-COMPUTE OVER ACL-TTL! 1 SWAP ACL-ALLOW! ; + +\ the system CA's public key; placeholders, as in v3 +0 CONSTANT ACL-CA-KEY-LO +0 CONSTANT ACL-CA-KEY-HI + +\ ( req-hi req-lo -- allow? ) the fabric asks this word whether a channel +\ may be opened. The default approves every request; a policy edits this. +: HERMES-CHANNEL-OPEN? 2DROP 1 ; + +\ ( -- ) default fields on every word; the words that enforce the policy +\ pinned; the recheck switched on +: ACL-BOOT + ACL-INIT-PRIMITIVES + ['] ACL-RECHECK ACL-PIN ['] ACL-INIT-PRIMITIVES ACL-PIN + ['] ACL-RECHECK ACL-HOOK ! + LOG-INFO" ACL: active" ; +' ACL-BOOT ACL-PIN + +ACL-BOOT diff --git a/v4/capsule/acl.v4 b/v4/capsule/acl.v4 new file mode 100644 index 00000000..1f685001 --- /dev/null +++ b/v4/capsule/acl.v4 @@ -0,0 +1,83 @@ +\ acl.v4 -- word-level access control: the fields of an entry. +\ +\ DECOMPOSITION.md 5.20, as v3: ACL-MODE@ ACL-MODE! ACL-TTL@ ACL-TTL! ACL-ALLOW@ +\ ACL-ALLOW! ACL-PINNED? ACL-PIN ACL-INHERIT ACL-INIT-PRIMITIVES ACL-HEAT@ +\ ACL-WORD-ID. These are all the capsule does itself; the policy -- what is +\ strict, how long a TTL is, what is pinned -- is FORTH source, ACL.fth, as +\ it is ACL.4th in v3. The fields and the check are described in +\ compile.v4. Rests on compile.v4, quit.v4 and system.v4. +\ +\ An xt of 0 is an error (code 16, "Not a word"). A pinned word's fields are +\ not changed by the ! words: they do nothing, as in v3. +\ +\ Constants the loader supplies: +\ (ACL-HOOK) word address of the variable: the xt of the recheck word, or 0 + +\ ( xt -- xt ) refuse 0 +: (ACL-XT) if NULL ; NULL: drop NODE-ERROR b! 16 !b 0 ; +\ ( xt -- flag ) non-zero if it is pinned. A holds the flags' address. +: (PINNED) -3 + a! @ 64 and ; + +header ACL-HOOK inline : ACL-HOOK' (ACL-HOOK) ; + +header ACL-MODE@ +: ACL-MODE@ ( xt -- mode ) (ACL-XT) -3 + a! @ 8/ 255 and ; +header ACL-TTL@ +: ACL-TTL@ ( xt -- n ) (ACL-XT) -3 + a! @ 8/ 8/ 65535 and ; +header ACL-ALLOW@ +: ACL-ALLOW@ ( xt -- flag ) (ACL-XT) -3 + a! @ 32 and if YES drop 0 ; YES: drop -1 ; +header ACL-PINNED? +: ACL-PINNED? ( xt -- flag ) (ACL-XT) (PINNED) if NO drop -1 ; NO: ; +header ACL-PIN +: ACL-PIN ( xt -- ) (ACL-XT) -3 + a! @ 64 OR ! ; + +header ACL-MODE! +: ACL-MODE! ( mode xt -- ) + (ACL-XT) (PINNED) if FREE drop drop ; + FREE: drop 255 and 8* @ -65281 and + ! ; +\ as v3: below 0 is 0. The TTL is sixteen bits here: above 65535 is 65535. +header ACL-TTL! +: ACL-TTL! ( n xt -- ) + (ACL-XT) (PINNED) if FREE drop drop ; + FREE: drop + -if POS drop 0 jump SET + POS: dup -65536 and if SMALL drop drop 65535 jump SET + SMALL: drop + SET: 8* 8* @ 65535 and + ! ; +header ACL-ALLOW! +: ACL-ALLOW! ( flag xt -- ) + (ACL-XT) (PINNED) if FREE drop drop ; + FREE: drop if DENY drop @ -33 and ! ; + DENY: drop @ 32 OR ! ; + +\ ( src dst -- ) as v3: dst takes src's mode; it is not pinned, its TTL +\ is 0 and it is allowed. This is the one word that unpins. +header ACL-INHERIT +: ACL-INHERIT + (ACL-XT) SWAP (ACL-XT) \ dst src + -3 + a! @ $FF00 and \ dst mode + SWAP -3 + a! @ 255 and -97 and + ! ; \ the five flags, nothing else + +\ ( xt -- ) every entry from xt back that is not pinned: TTL mode, TTL 0, +\ allowed +: (ACL-INIT) + L: if DONE + dup (PINNED) if FREE drop jump NXT + FREE: drop @ 31 and ! + NXT: -1 + a! @ jump L + DONE: drop ; +\ ( -- ) as v3: do that to every word in the dictionary, in every vocabulary +header ACL-INIT-PRIMITIVES +: ACL-INIT-PRIMITIVES + (LATEST) a! @ (ACL-INIT) + VOC-LINK a! @ + V: if DONE dup a! @ (ACL-INIT) 1 + a! @ jump V + DONE: drop ; + +\ ( xt -- heat ) how often the word has been used. The node's heat +\ counters are not readable from a programme yet (D-6): 0. +header ACL-HEAT@ +: ACL-HEAT@ (ACL-XT) drop 0 ; +\ ( xt -- n ) a number for the word that never changes: its address +header ACL-WORD-ID +: ACL-WORD-ID (ACL-XT) ; diff --git a/v4/capsule/blocks.v4 b/v4/capsule/blocks.v4 new file mode 100644 index 00000000..ef99b8ef --- /dev/null +++ b/v4/capsule/blocks.v4 @@ -0,0 +1,127 @@ +\ blocks.v4 -- mass storage: blocks of 1024 characters, and text loaded from them. +\ +\ DECOMPOSITION.md 5.11, FORTH-79: BLOCK BUFFER UPDATE SAVE-BUFFERS +\ EMPTY-BUFFERS LIST LOAD SCR BLK, and v3's FLUSH THRU and --> . Part of the +\ compiler capsule; rests on everything before it. +\ +\ STORAGE IS THE KERNEL'S (docs/v4.0.0/MESH.md section 8, ENGINE.md 3.3), as +\ it is for a v3 VM. A node only ever asks for a block by number, and it +\ asks its kernel: it writes a request to port 0, where its kernel is, and +\ when the write has been served the answer is on the data stack. The +\ node has a window in its memory, four slots of 256 cells; the kernel +\ keeps the record of which block is in which slot, does the copying, and +\ decides when a block is written. The requests (v4/include/v4/blocks.h): +\ BLOCK# ( n -- waddr status ) the slot holding block n +\ BUFFER# ( n -- waddr status ) a slot for block n, not read +\ UPDATE# ( -- status ) the block last asked for is changed +\ SAVE-BUFFERS# ( -- status ) every changed block is written +\ EMPTY-BUFFERS# ( -- ) every slot is let go +\ The status is 0, or 2 storage refused (error 17), or 3 there is no such +\ block (error 13). BLOCK and BUFFER give a byte address, as PAD and TIB +\ are: what C@ CMOVE and TYPE take. +\ +\ Constants the loader supplies: +\ BLOCK# BUFFER# UPDATE# SAVE-BUFFERS# EMPTY-BUFFERS# the requests' numbers +\ SCR word address of the variable: the block LIST showed last +\ BLK (SRC) (SRC-HOOK) see input.v4 + +header SCR inline : SCR' SCR ; +header BLK inline : BLK' BLK ; + +\ ( status -- ) a request that did not work is an error +: (B-ERR) + if FINE -2 + if E17 drop NODE-ERROR b! 13 !b ; + E17: drop NODE-ERROR b! 17 !b ; + FINE: drop ; + +\ ( waddr status -- baddr ) the slot's byte address, or the error +: (B-GOT) + if OK SWAP drop jump (B-ERR) + OK: drop 2* 2* ; + +\ ( n -- baddr ) FORTH-79: the address of a buffer assigned to block n. +\ What the buffer holds is not read from storage. +header BUFFER +: BUFFER BUFFER# (PORT) b! !b jump (B-GOT) + +\ ( n -- baddr ) FORTH-79: the address of a buffer that holds block n, +\ read from storage if it is not already in one. +header BLOCK +: BLOCK BLOCK# (PORT) b! !b jump (B-GOT) + +\ FORTH-79: mark the block most recently asked for as changed, so that it is +\ written before its buffer is used for another. +header UPDATE +: UPDATE UPDATE# (PORT) b! !b jump (B-ERR) + +\ FORTH-79: write every block that has been UPDATEd. +header SAVE-BUFFERS +: SAVE-BUFFERS SAVE-BUFFERS# (PORT) b! !b jump (B-ERR) +\ As v3: the same. +header FLUSH +: FLUSH jump SAVE-BUFFERS +\ FORTH-79: forget what is in the buffers; nothing is written. +header EMPTY-BUFFERS +: EMPTY-BUFFERS EMPTY-BUFFERS# (PORT) b! !b ; + +\ ---- LIST ---------------------------------------------------------------------- +\ ( n -- ) as v3: a new line, "Block n", then sixteen lines of 64 +\ characters, each after its number, and an empty line. SCR is left holding n. A character +\ that is not printable is shown as a blank. (Q)+0 is the line, (Q)+1 the +\ column, (Q)+2 the block's number. +header LIST +: LIST + dup (Q)+2 a! ! BLOCK drop \ an error here leaves nothing behind + (Q)+2 a! @ dup SCR a! ! + CR $636F6C42 (EMIT4) $206B (EMIT4) 0 DOT-R CR \ "Block " + 0 (Q) a! ! + LN: (Q) a! @ 0 <# # # #> TYPE 58 EMIT SPACE + 0 (Q)+1 a! ! + CH: SCR a! @ BLOCK (Q) a! @ 2* 2* 2* 2* 2* 2* + (Q)+1 a! @ + C@ + dup -32 + -if GE drop drop 32 jump EM + GE: drop dup -127 + -if BIG drop jump EM + BIG: drop drop 32 + EM: EMIT + (Q)+1 a! @ 1 + dup ! -64 + if EOL drop jump CH + EOL: drop CR + (Q) a! @ 1 + dup ! -16 + if DONE drop jump LN + DONE: drop jump CR + +\ ---- LOAD ---------------------------------------------------------------------- +\ The text being interpreted is at (SRC), SPAN characters of it, >IN the +\ place in it. LOAD saves those and BLK on the return stack, points them at +\ the block, interprets it, and puts them back; so a block may LOAD another, +\ and the rest of the line LOAD was on is interpreted afterwards. (v3's +\ LOAD loses the rest of its line.) + +\ ( -- ) what WORD calls before it reads: while a block is being loaded, +\ make sure it is in a buffer and (SRC) is that buffer. +: (BLK-SRC) + BLK a! @ if TERM BLOCK (SRC) a! ! ; + TERM: drop ; + +\ ( n -- ) FORTH-79: interpret block n, then go on with what follows. +header LOAD +: LOAD + -if POS jump BAD + POS: if BAD + BLK a! @ push >IN a! @ push SPAN a! @ push (SRC) a! @ push + BLK a! ! 0 >IN a! ! 1024 SPAN a! ! + &(BLK-SRC) (SRC-HOOK) a! ! + INTERPRET + pop (SRC) a! ! pop SPAN a! ! pop >IN a! ! pop BLK a! ! ; + BAD: drop NODE-ERROR b! 13 !b ; + +\ ( -- ) go on with the next block. Only in a block being loaded: at the +\ terminal it is an error (code 14). +header --> immediate +: NEXT-BLOCK + BLK a! @ if TERM 1 + ! 0 >IN a! ! ; + TERM: drop NODE-ERROR b! 14 !b ; + +\ ( first last -- ) as v3: LOAD each block from first to last. +header THRU +: THRU + push + L: dup inv pop dup push + 1 + -if GO drop drop pop drop ; \ last - first + GO: drop dup push LOAD pop 1 + jump L diff --git a/v4/capsule/codegen.v4 b/v4/capsule/codegen.v4 new file mode 100644 index 00000000..de601a0c --- /dev/null +++ b/v4/capsule/codegen.v4 @@ -0,0 +1,119 @@ +\ codegen.v4 -- the code generator: opcodes, literals and branches packed into +\ instruction words at HERE. +\ +\ This is what the compiling words ( : ; IF LOOP LITERAL ... ) are built on. +\ It lays code down exactly as DECOMPOSITION.md 1.2 and 2 require and as the +\ test harness's own packers do (v4/include/v4/asm.h, text.h): +\ +\ - opcodes fill slots 0 .. 5 of a word left to right; a full word is +\ appended to the dictionary and a new one started; unused slots are nop +\ - a literal is @p in a slot and its value in the cell after the word; +\ several in one word follow it in order +\ - ; and ex close the word, since nothing after them runs +\ - a branch closes the word: the bits to its right are its address +\ - a branch goes only in a slot whose address field reaches all of the +\ node's memory; otherwise the word is closed first and the branch starts +\ the next one. So no branch ever needs a reach check. +\ +\ An instruction word is 32 bits at every cell width (D-9): slot k is the five +\ bits whose lowest is bit 27 - 5k, and a branch there has 27 - 5k address bits. +\ +\ Rests on core.v4 and dict.v4. Constants the loader supplies: +\ (CG) word address of fourteen cells of scratch for this file +\ CG-BSLOTS how many slots, counted from slot 0, may hold a branch + +\ Like WORD, these run under whatever the user has on the stacks, so what they +\ work on is in (CG), they keep at most three cells of their own on the data +\ stack, and they call each other as little as they can (D-2): +\ (CG)+0 the word being built (CG)+1 its next free slot +\ (CG)+2 how many literals it owes, and (CG)+3 .. (CG)+8 the literals +\ (CG)+9 the opcode (OP,) was given (CG)+10 the ref (BRANCH0) made +\ (CG)+11 the target a branch is to reach (CG)+12 which literal (FLUSH) is at +\ (CG)+13 what (FLUSH) fills unused slots with: nop, or 0 after a branch +\ +\ The word being built is kept right-justified: each opcode is shifted in +\ below the ones before it, and (FLUSH) shifts in what fills the rest and the +\ two spare bits. So nothing is ever shifted by a counted loop, which would +\ want a return-stack entry for its count. + +\ ( k -- mask ) the address bits of a branch in slot k: 2^(27-5k) - 1 +: (MASK) + if K0 -1 + if K1 -1 + if K2 + drop 4095 ; + K2: drop 131071 ; + K1: drop 4194303 ; + K0: drop 134217727 ; + +\ ( -- ) forget the word being built +: (CG-RESET) 0 (CG) a! ! 0 (CG)+1 a! ! 0 (CG)+2 a! ! 28 (CG)+13 a! ! ; + +\ ( x -- ) five bits into the next free slot, which must be free +: (PUT) + (CG) a! @ 2* 2* 2* 2* 2* + ! + (CG)+1 a! @ 1 + ! ; + +\ ( -- ) append the word being built, its unused slots filled, then the +\ literals it owes; nothing if no slot is in use +: (FLUSH) + (CG)+1 a! @ if EMPTY drop + P: (CG)+1 a! @ -6 + if FULL drop (CG)+13 a! @ (PUT) jump P + FULL: drop + (CG) a! @ 2* 2* , \ the two spare bits + 0 (CG)+12 a! ! + L: (CG)+12 a! @ (CG)+2 a! @ xor if DONE + drop (CG)+12 a! @ dup 1 + ! (CG)+3 + a! @ , + jump L + DONE: drop + jump (CG-RESET) + EMPTY: drop ; + +\ ( op -- ) any opcode that is neither a branch nor @p +: (OP,) + dup (CG)+9 a! ! (PUT) + (CG)+9 a! @ if ENDS -1 + if ENDS \ ; and ex end the word + drop (CG)+1 a! @ -6 + if ENDS drop ; \ and so does its last slot + ENDS: drop jump (FLUSH) + +\ ( x -- ) @p and its value +: (LIT,) + (CG)+2 a! @ dup 1 + ! \ x n + (CG)+3 + a! ! + 8 (PUT) + (CG)+1 a! @ -6 + if FULL drop ; + FULL: drop jump (FLUSH) + +\ ( -- addr ) where the next word will go: a branch target +: (LABEL) (FLUSH) HERE ; + +\ ( op -- ) a branch (jump 2, call 3, next 5, if 6, -if 7) whose address is +\ not filled in yet. Its ref -- the branch's word address times 8, plus its +\ slot -- is left in (CG)+10. The rest of its word is filled with 0, which +\ is its address field. It ends by jumping to (FLUSH), so that the chain of +\ calls under it is one shorter. +: (BRANCH0) + (CG)+1 a! @ CG-BSLOTS inv + 1 + -if MOVE drop jump PLACED \ slot - CG-BSLOTS + MOVE: drop (FLUSH) + PLACED: + \ the word will be appended at HERE; its literals, if any, come after it + HERE 2* 2* 2* (CG)+1 a! @ + (CG)+10 a! ! + (PUT) + 0 (CG)+13 a! ! jump (FLUSH) + +\ ( op -- ref ) the same, leaving the ref, for (RESOLVE) to fill in later +: (BRANCH>) (BRANCH0) (CG)+10 a! @ ; + +\ ( ref -- ) put the address in (CG)+11 into the branch at ref +: (RESOLVE1) + dup 7 and (MASK) push \ ref R: mask + 2/ 2/ 2/ a! \ A: the branch's word + (CG)+11 b! @b pop dup push and \ the address bits + @ pop inv and + ! ; + +\ ( target ref -- ) put the address into the branch at ref +: (RESOLVE) SWAP (CG)+11 a! ! jump (RESOLVE1) + +\ ( target op -- ) a branch to a known address +: (BRANCH,) SWAP (CG)+11 a! ! (BRANCH0) (CG)+10 a! @ jump (RESOLVE1) + +: (JUMP,) ( addr -- ) 2 jump (BRANCH,) +: (CALL,) ( addr -- ) 3 jump (BRANCH,) diff --git a/v4/capsule/compile.v4 b/v4/capsule/compile.v4 new file mode 100644 index 00000000..7c8fd0c9 --- /dev/null +++ b/v4/capsule/compile.v4 @@ -0,0 +1,466 @@ +\ compile.v4 -- the interpreter's inner loop, and the defining and compiling +\ words. +\ +\ DECOMPOSITION.md 5.17 and 5.18: STATE [ ] : ; EXIT IMMEDIATE LITERAL COMPILE +\ [COMPILE] ' EXECUTE CREATE VARIABLE CONSTANT DOES>, the control structures +\ IF ELSE THEN BEGIN UNTIL AGAIN WHILE REPEAT DO ?DO LOOP +LOOP, and INTERPRET, +\ which they cannot be run without. Part of the compiler capsule. Rests on +\ core.v4, input.v4, dict.v4 and codegen.v4. +\ +\ HOW A WORD IS COMPILED. v4 code is native: a colon definition is +\ instruction words, and compiling a word into one lays down a call to it. +\ Two flags on an entry (dict.v4) change that: +\ inline its code is a straight run of opcodes and literals ending +\ in ; -- that run is copied in place of a call. Everything +\ that touches the return stack must be, since a call would +\ bury what it works on (DECOMPOSITION.md 0, fate IN). +\ compile-only it may not be executed by the interpreter. +\ An immediate word is executed even when compiling. +\ +\ THE STACKS ARE SHORT: written for ten cells of data and nine return entries +\ (D-2; the host node now has 32 of each, D-17), and one more of either is a +\ fault (D-16). The interpreter and compiler run on the same +\ stacks as the user's words, with the user's values beneath them, so: +\ - every word here keeps what it works on in (C), and has at most three +\ cells of its own on the data stack at any moment; +\ - what an IF or a DO leaves for its THEN or LOOP goes on a control-flow +\ stack in memory, not on the data stack, so structures may nest as +\ deep as that stack (32 cells) allows whatever the user has stacked. +\ +\ Constants the loader supplies: +\ STATE word address of the variable: non-zero while compiling +\ (C) word address of ten cells of scratch for this file: +\ (C)+0 (C)+1 (C)+4 the in-liner's word, literal pointer and slot +\ (C)+2 LATEST before a header is made (C)+3 a data word's routine +\ (C)+5 what a loop's end lays after its test +\ (C)+6 (C)+7 a branch and a tag a control word is holding +\ (C)+8 whether a data word's entry was made +\ (C)+9 the error code a line is being abandoned with +\ (CFP) word address of the control-flow stack's pointer +\ CFBASE CFEND word addresses of its first cell and of the cell past its last + +macro ROT push SWAP pop SWAP endmacro + +\ ---- errors ------------------------------------------------------------------ + +\ ( -- ) give up the line: stop compiling, forget the word being built and +\ whatever control structures were open, skip the rest of the input, and set +\ NODE-ERROR. A definition that was under way stays hidden. It returns to +\ whatever called INTERPRET, which is QUIT (quit.v4): QUIT sees NODE-ERROR +\ and prints ERROR. +\ (ABANDON-AS) is the same with an error code (core.v4) for the prompt to +\ print the message of. +: (ABANDON-AS) ( code -- ) + (C)+9 a! ! + 0 STATE a! ! (CG-RESET) + CFBASE (CFP) a! ! + SPAN a! @ >IN a! ! + (C)+9 a! @ NODE-ERROR b! !b ; +: (ABANDON) -1 jump (ABANDON-AS) + +\ ---- the control-flow stack ---------------------------------------------------- + +\ ( x -- ) push; a full stack abandons the line +: >CF + (CFP) a! @ CFEND xor if FULL + drop (CFP) a! @ dup 1 + ! a! ! ; + FULL: drop drop 8 jump (ABANDON-AS) \ control structures too deep + +\ ( -- x ) pop; 0 from an empty stack, which no opening word leaves +: CF> + (CFP) a! @ CFBASE xor if EMPTY + drop (CFP) a! @ -1 + dup ! a! @ ; + EMPTY: ; + +\ ---- compiling one word ------------------------------------------------------ + +\ ( w -- op ) the opcode in slot 0 of the instruction word w +: (TOP5) 8/ 8/ 8/ 2/ 2/ 2/ 31 and ; + +\ ( xt -- ) copy the in-line word at xt into the definition being built. +\ Each slot is read from the top of the word in (C)+0, which is then moved +\ up five bits for the next. +: (INLINE,) + W: dup a! @ (C) a! ! 1 + (C)+1 a! ! \ the word, and its literals after it + 0 (C)+4 a! ! \ slot + S: (C) a! @ dup 2* 2* 2* 2* 2* ! (TOP5) \ op + if END \ ; ends the copy + dup -8 + if LIT + drop dup -28 + if NOP \ nop is padding + drop (OP,) + NXT: (C)+4 a! @ 1 + dup ! -6 + if NEXTW drop jump S + NEXTW: drop (C)+1 a! @ jump W \ the next instruction word follows the literals + LIT: drop drop (C)+1 a! @ dup 1 + ! a! @ (LIT,) jump NXT + NOP: drop drop jump NXT + END: drop ; + +\ ( xt -- ) compile the word at xt: in line if it is flagged so, else a call +: (COMPILE,) + dup -3 + a! @ 8 and if CALL drop jump (INLINE,) + CALL: drop jump (CALL,) + +\ ---- access control (5.20) ------------------------------------------------------- +\ Each entry's flags cell also holds its access control fields: +\ bit 5 (32) denied: the word may not be used +\ bit 6 (64) pinned: the fields cannot be changed +\ bits 8 .. 15 the mode: 0 TTL, 1 STRICT +\ bits 16 .. 31 the TTL, a count of uses left before the next recheck +\ A new entry has all of them zero: allowed, not pinned, TTL mode, TTL 0. +\ +\ (ACL?) is run by INTERPRET for every word it is about to execute or +\ compile. As v3: if the TTL is 0 the word is rechecked, otherwise the TTL +\ is counted down; then a denied word is refused. The recheck is the word +\ whose address is in (ACL-HOOK) -- ACL-RECHECK, once ACL.fth has loaded -- +\ and with none there the word is allowed and given the longest TTL. +\ +\ v3 checks every execution, inside definitions too. v4 code is native: a +\ compiled call goes straight to its word. So v4 checks a word when it is +\ compiled as well as when it is interpreted -- a denied word cannot be +\ built into anything new -- but a call compiled while the word was allowed +\ is not checked again. + +\ ( xt -- ) recheck +: (ACL-RECHECK) + (ACL-HOOK) a! @ if NONE push ex \ call it with the xt + ; + NONE: drop -3 + a! @ 65535 and -33 and $FFFF0000 + ! ; + +\ ( xt -- xt ) as above; a denied word ends the line +: (ACL?) + dup -3 + a! @ \ xt flags + dup $FFFF0000 and if ZERO + drop -65536 + ! jump TEST \ one use fewer + ZERO: drop drop dup (ACL-RECHECK) + TEST: dup -3 + a! @ 32 and if OK + drop drop + $33335B1B (EMIT4) $6D (EMIT4) $4E524157 (EMIT4) $203A (EMIT4) $6D305B1B (EMIT4) \ v3's line: WARN: in yellow + $3A4C4341 (EMIT4) $6E656420 (EMIT4) $20646569 (EMIT4) $27 (EMIT4) + (.WORD) 39 EMIT CR + DSTACK-DEPTH b! a !b \ as v3, the stack is emptied + pop drop jump (ABANDON) + OK: drop ; + +\ ( -- ) print the word WORD has just left +: (.WORD) WBUF COUNT jump TYPE + +header EXECUTE +: EXECUTE ( xt -- ) push ; + +\ ---- the interpreter's inner loop --------------------------------------------- + +\ ( -- n flag ) the word WORD has just left, as a single-cell number in the +\ current BASE, and -1; or 0 0 if it is not one. A leading minus sign is +\ allowed. This is what the interpreter uses: NUMBER (input.v4) makes a +\ double and needs more of the stack than can be spared here. +\ (P)+2 the number so far, (P)+3 where it is in the word, (P)+4 the word's +\ length, (P)+5 the sign, (P)+6 the base. +: (NUM?) + WBUF C@ if EMPTY + (P)+4 a! ! 0 (P)+2 a! ! 1 (P)+3 a! ! 0 (P)+5 a! ! + (BASE) (P)+6 a! ! + WBUF+1 C@ -45 + if NEG drop jump DIGITS + NEG: drop -1 (P)+5 a! ! 2 (P)+3 a! ! + (P)+4 a! @ -1 + if EMPTY drop \ a sign alone + DIGITS: + L: (P)+4 a! @ (P)+3 a! @ - -if MORE + drop (P)+2 a! @ (P)+5 a! @ if POS drop NEGATE -1 ; + POS: drop -1 ; + MORE: drop + (P)+3 a! @ dup 1 + ! WBUF + C@ (DIGIT) \ d + -if DIGIT jump BAD1 + DIGIT: dup (P)+6 a! @ - -if BAD2 drop + (P)+2 a! @ (P)+6 a! @ STAR + (P)+2 a! ! + jump L + BAD2: drop + BAD1: drop 0 0 ; + EMPTY: drop 0 0 ; + +\ ( -- ) FORTH-79: take words from the input stream until it is exhausted. +\ A word in the dictionary is executed, or, when compiling and not immediate, +\ compiled. Anything else must be a number in the current BASE: it is left +\ on the stack, or compiled as a literal. What is neither, or a compile-only +\ word met while interpreting, abandons the line, with v3's message: +\ UNKNOWN WORD: 'xxx' xxx: compile-only +header INTERPRET +: INTERPRET + L: 32 WORD dup C@ if EOL + drop (LOOKUP) if NUM + dup -3 + a! @ \ xt flags + STATE a! @ if INTERP + drop 1 and if COMP \ compiling: immediate words still run + drop (ACL?) EXECUTE jump L + COMP: drop (ACL?) (COMPILE,) jump L + INTERP: drop 16 and if RUN + drop drop (.WORD) \ ": compile-only" + $6F63203A (EMIT4) $6C69706D (EMIT4) $6E6F2D65 (EMIT4) $796C (EMIT4) CR + jump (ABANDON) + RUN: drop (ACL?) EXECUTE jump L + NUM: drop (NUM?) if BAD + drop + STATE a! @ if KEEP drop (LIT,) jump L + KEEP: drop jump L + BAD: drop drop (UNKNOWN) drop jump (ABANDON) + EOL: drop drop ; + +\ ---- state --------------------------------------------------------------------- + +header [ immediate +: LEFT-BRACKET 0 STATE a! ! ; +header ] +: RIGHT-BRACKET -1 STATE a! ! ; + +\ ( x -- ) FORTH-79: if compiling, compile x as a literal +header LITERAL immediate +: LITERAL STATE a! @ if NO drop jump (LIT,) NO: drop ; + +\ ( -- addr ) FORTH-79: the next word's parameter field address; if +\ compiling, compiled as a literal +header ' immediate +: TICK (') jump LITERAL + +\ ['] xxx the same inside a definition, whatever STATE is; and [LITERAL], +\ which v3 has as another name for LITERAL. +header ['] immediate compile-only +: BRACKET-TICK (') jump (LIT,) +header [LITERAL] immediate +: BRACKET-LITERAL jump LITERAL + +\ ---- colon definitions ----------------------------------------------------------- + +\ FORTH-79: start a definition; it cannot be found until ; ends it. The +\ CONTEXT vocabulary is set to the CURRENT one. +\ (C)+2 holds LATEST while the entry is made, to tell whether one was. +header : +: COLON + CURRENT a! @ CONTEXT a! ! + LATEST (C)+2 a! ! + 32 WORD (HEADER) + LATEST (C)+2 a! @ xor if NONE drop + HIDDEN (CG-RESET) CFBASE (CFP) a! ! jump RIGHT-BRACKET + NONE: drop jump (ABANDON) \ no entry: the rest of the line is not a definition + +\ FORTH-79: compile the return, let the word be found, stop compiling +header ; immediate compile-only +: SEMICOLON + 0 (OP,) + LATEST (FLAGS) a! @ -3 and ! + jump LEFT-BRACKET + +\ ( n -- ) KERNEL-WORD xxx A WORD THAT ASKS THE KERNEL (docs/v4.0.0/ +\ ENGINE.md 3.3). xxx is made a word whose whole body is "write n to the +\ port": n is the number of a request, the port is the node's way to its +\ kernel, and the write blocks the node until the kernel has served it +\ (DECOMPOSITION.md section 6). xxx's arguments are whatever it finds on +\ the data stack and its results are what the kernel leaves there. This is +\ what a word that is a C function in v3 -- BIRTH, BLOCK, BYE -- is on a +\ node. Not FORTH-79 and not in v3, where such a word is registered from C. +\ The constant (PORT) is the port's word address. +header KERNEL-WORD +: KERNEL-WORD + COLON (LIT,) (PORT) (LIT,) 30 (OP,) 14 (OP,) \ n port b! !b + jump SEMICOLON + +\ FORTH-79: return from the definition at this point +header EXIT immediate compile-only +: EXIT 0 jump (OP,) + +header IMMEDIATE +: IMMEDIATE LATEST if NONE (FLAGS) a! @ 1 OR ! ; NONE: drop ; + +\ COMPILE xxx FORTH-79: when the word this is in runs, xxx is compiled +header COMPILE immediate compile-only +: COMPILE + 32 WORD (LOOKUP) if MISSING + (LIT,) &(COMPILE,) jump (CALL,) + MISSING: drop (UNKNOWN) drop jump (ABANDON) + +\ [COMPILE] xxx FORTH-79: compile xxx even though it is immediate +header [COMPILE] immediate compile-only +: BRACKET-COMPILE + 32 WORD (LOOKUP) if MISSING jump (COMPILE,) + MISSING: drop (UNKNOWN) drop jump (ABANDON) + +\ ---- data words --------------------------------------------------------------------- +\ A data word's code is one call to its run-time routine; the call leaves the +\ address of the cell after it -- the parameter field -- on the return stack. + +: (DOVAR) pop ; \ leave the parameter field address +: (DOCON) pop a! @ ; \ leave what it holds + +\ ( -- ) an entry for the next word, flagged data, its code a call to the +\ routine whose address is in (C)+3. (C)+8 is left -1 if one was made, else +\ 0. It ends by jumping, and CREATE jumps to it, so that a defining word +\ has as few return entries under it as can be. +: (DATA) + 0 (C)+8 a! ! + LATEST (C)+2 a! ! + 32 WORD (HEADER) + LATEST (C)+2 a! @ xor if NONE drop + (CG-RESET) + LATEST (FLAGS) a! @ 4 OR ! + -1 (C)+8 a! ! + (C)+3 a! @ jump (CALL,) + NONE: drop ; + +\ FORTH-79: an entry whose word leaves the address of its parameter field +header CREATE +: CREATE &(DOVAR) (C)+3 a! ! jump (DATA) + +\ FORTH-79: CREATE and one cell. The standard leaves its first value to the +\ programme; here it is 0. +header VARIABLE +: VARIABLE &(DOVAR) (C)+3 a! ! (DATA) (C)+8 a! @ if NONE drop 0 jump , NONE: drop ; + +\ ( n -- ) FORTH-79: an entry whose word leaves n +header CONSTANT +: CONSTANT &(DOCON) (C)+3 a! ! (DATA) (C)+8 a! @ if NONE drop jump , NONE: drop drop ; + +\ FORTH-79: in : DEFINER CREATE ... DOES> ... ; the words after DOES> become +\ what each word DEFINER makes does, starting with its parameter field address +\ on the stack. (DOES), run by DEFINER, turns the newest entry's code into a +\ call to the code after it and leaves DEFINER; that code starts with pop, +\ which fetches the parameter field address the call left. +: (DOES) pop 402653184 + LATEST a! ! ; \ 402653184 is `call` in slot 0 +header DOES> immediate compile-only +: DOES> &(DOES) (CALL,) 25 jump (OP,) + +\ ---- control structures (5.18, section 2) --------------------------------------------- +\ All immediate and compile-only. Each puts what the word that closes it +\ needs on the control-flow stack, with a number on top saying which word put +\ it there: 1 IF, 2 ELSE, 3 BEGIN, 4 WHILE, 5 DO, 6 ?DO, 7 CASE, 8 OF. A closing word that +\ finds the wrong number abandons the line. + +\ ( tag wanted -- ) if they differ, abandon the line and leave the control +\ word that called this as well: its return address is dropped, so the +\ abandoning returns to the interpreter and nothing more is laid down. +: (PAIR) xor if OK drop pop drop 7 jump (ABANDON-AS) OK: drop ; + +\ ( ref -- ) the branch at ref lands here +: (HERE!) (FLUSH) HERE SWAP jump (RESOLVE) + +\ Native if leaves the flag, so both ways out of it drop it (section 2): +\ IF a THEN if L1 drop a jump L2 L1: drop L2: +\ IF a ELSE b THEN if L1 drop a jump L2 L1: drop b L2: +header IF immediate compile-only +: IF 6 (BRANCH>) >CF 23 (OP,) 1 jump >CF +header ELSE immediate compile-only +: ELSE + CF> 1 (PAIR) CF> (C)+6 a! ! \ the if + 2 (BRANCH>) >CF \ the jump over the else part + (C)+6 a! @ (HERE!) 23 (OP,) + 2 jump >CF +header THEN immediate compile-only +: THEN + CF> dup -1 + if PLAIN + drop 2 (PAIR) CF> jump (HERE!) + PLAIN: drop drop + CF> (C)+6 a! ! \ the if + 2 (BRANCH>) >CF + (C)+6 a! @ (HERE!) 23 (OP,) + CF> jump (HERE!) + +\ A loop that tests at its end jumps back with the flag still there, so it +\ jumps back to a drop laid just ahead of the body: +\ BEGIN a UNTIL jump L0 Ld: drop L0: a if Ld drop +\ BEGIN a WHILE b REPEAT jump L0 Ld: drop L0: a if Lx drop b jump L0 Lx: drop +\ BEGIN a AGAIN jump L0 Ld: drop L0: a jump L0 +\ The control-flow stack holds Ld, L0 and 3. +header BEGIN immediate compile-only +: BEGIN + 2 (BRANCH>) (C)+6 a! ! + (LABEL) >CF 23 (OP,) + (LABEL) dup >CF (C)+6 a! @ (RESOLVE) + 3 jump >CF +header UNTIL immediate compile-only +: UNTIL CF> 3 (PAIR) CF> drop CF> 6 (BRANCH,) 23 jump (OP,) +header AGAIN immediate compile-only +: AGAIN CF> 3 (PAIR) CF> (JUMP,) CF> drop ; +header WHILE immediate compile-only +: WHILE CF> 3 (PAIR) 3 >CF 6 (BRANCH>) >CF 23 (OP,) 4 jump >CF +header REPEAT immediate compile-only +: REPEAT + CF> 4 (PAIR) CF> (C)+6 a! ! \ the while + CF> 3 (PAIR) CF> (JUMP,) CF> drop + (C)+6 a! @ (HERE!) 23 jump (OP,) + +\ CASE: the value being chosen on stays on the stack through the clauses. +\ CASE x1 OF a ENDOF x2 OF b ENDOF c ENDCASE +\ lays, for each clause, +\ over xor if M drop jump N M: drop drop a jump END N: +\ and ENDCASE lays the drop that the part after the last ENDOF leaves the +\ value for, with END after it. The control-flow stack holds the jumps to +\ END, how many there are, and 7; inside a clause, the jump to N and 8. +: (of) over xor ; +header CASE immediate compile-only +: CASE 0 >CF 7 jump >CF +header OF immediate compile-only +: OF + CF> 7 (PAIR) + &(of) (INLINE,) 6 (BRANCH>) (C)+6 a! ! \ if M + 23 (OP,) 2 (BRANCH>) >CF \ drop, jump N + (C)+6 a! @ (HERE!) 23 (OP,) 23 (OP,) \ M: drop drop + 8 jump >CF +header ENDOF immediate compile-only +: ENDOF + CF> 8 (PAIR) CF> (C)+6 a! ! \ the jump to N + CF> (C)+7 a! ! \ how many jumps to END so far + 2 (BRANCH>) >CF \ one more + (C)+7 a! @ 1 + >CF + (C)+6 a! @ (HERE!) \ N: + 7 jump >CF +header ENDCASE immediate compile-only +: ENDCASE + CF> 7 (PAIR) CF> (C)+7 a! ! + 23 (OP,) + L: (C)+7 a! @ if DONE -1 + ! + CF> (HERE!) jump L + DONE: drop ; + +\ DO loops: the limit and index are on the return stack, limit below (5.18). +: (do) over push push drop ; +: (?do) over over xor ; +: (inc) pop 1 + pop ; \ index' limit +: (+inc) dup a! pop + pop ; \ index' limit A: the step +: (differ) drop over ; +: (same) drop over over - ; +: (a-xor) a xor ; +: (again) drop push push ; +: (3drop) drop drop drop ; + +\ The end of a loop. The control-flow stack holds the body's address and 5, +\ or for ?DO its skip, the body and 6; (C)+5 holds the xt of in-line code to +\ lay after the test, or 0. Laid down, in order: +\ ( i' lim -- i' lim s ), the top bit of s set when i' < lim: +\ over over xor -if SAME drop over jump T SAME: drop over over - T: +\ the code in (C)+5, if any +\ -if EXIT drop push push jump BODY EXIT: drop drop drop +\ and for ?DO the landing of its skip: jump PAST SKIP: drop drop drop PAST: +\ It is one word, jumped to by LOOP and +LOOP, so that laying a loop's end +\ takes as few return entries as laying anything else. +: (LOOPS) + &(?do) (INLINE,) 7 (BRANCH>) >CF + &(differ) (INLINE,) 2 (BRANCH>) (C)+6 a! ! + CF> (HERE!) &(same) (INLINE,) + (C)+6 a! @ (HERE!) + (C)+5 a! @ if NOMORE (INLINE,) jump TESTED + NOMORE: drop + TESTED: + CF> (C)+7 a! ! \ the tag + 7 (BRANCH>) (C)+6 a! ! + &(again) (INLINE,) CF> (JUMP,) + (C)+6 a! @ (HERE!) &(3drop) (INLINE,) + (C)+7 a! @ -5 + if PLAIN + drop (C)+7 a! @ 6 (PAIR) + 2 (BRANCH>) (C)+6 a! ! + CF> (HERE!) &(3drop) (INLINE,) + (C)+6 a! @ jump (HERE!) + PLAIN: drop ; + +header DO immediate compile-only +: DO &(do) (INLINE,) (LABEL) >CF 5 jump >CF +header ?DO immediate compile-only +: ?DO &(?do) (INLINE,) 6 (BRANCH>) >CF 23 (OP,) &(do) (INLINE,) (LABEL) >CF 6 jump >CF +header LOOP immediate compile-only +: LOOP &(inc) (INLINE,) 0 (C)+5 a! ! jump (LOOPS) +header +LOOP immediate compile-only +: +LOOP &(+inc) (INLINE,) &(a-xor) (C)+5 a! ! jump (LOOPS) diff --git a/v4/capsule/core.v4 b/v4/capsule/core.v4 new file mode 100644 index 00000000..80efae00 --- /dev/null +++ b/v4/capsule/core.v4 @@ -0,0 +1,291 @@ +\ core.v4 -- the core words the host-node capsules rest on. +\ +\ Each is the definition DECOMPOSITION.md gives and the golden-model tests +\ execute (test_foundation.c, test_strings.c, test_terminal.c, test_pictured.c), +\ written here as text for the text assembler (v4/include/v4/text.h). +\ +\ Constants the loader supplies: N-1 (cell bits - 1), NODE-ERROR, CONSOLE-TX, +\ CONSOLE-RX, CONSOLE-STATUS, BASE, (MSG), (REPLY), (ME), (OUT), +\ (OUT^), (CONSOLE), (ROUTES), (ROUTE#), (ROUTE-DEFAULT), (PRINT-TO), +\ (PRINT-PORT). +\ +\ ERRORS (D-18). A word that finds an error takes its arguments off the stack +\ and stores a code in NODE-ERROR. On a node with a prompt that store is a +\ trap: the word goes no further, and the prompt prints the message for the +\ code and ERROR (quit.v4, (RAISED)). The codes: +\ 1 Negative count 2 Not a number 3 Number too long +\ 4 Not a character 5 Dictionary full 6 Name missing +\ 7 Control structure mismatch 8 Control structures too deep +\ 9 Shift count out of range 10 Protected word +\ 11 Division by zero (Q./) 12 Argument out of range +\ 13 Block out of range 14 No block is being loaded +\ 15 Deferred word not set 16 Not a word +\ 17 Storage refused 18 No one on that port +\ -1 the word has printed its own message + +macro SWAP over push push drop pop pop endmacro +macro - push inv pop + inv endmacro \ x y -- x-y +macro NEGATE inv 1 + endmacro +macro NIP push drop pop endmacro + +\ ---- section 4: multiply ------------------------------------------------ +header UM* +: UM* ( u1 u2 -- ulo uhi ) + over 1 and inv 1 + over 2/ and \ u1 u2 t0 t0 = u2 2/ if u1 odd + over a! N-1 push \ A: u2 R: loop count + push over 2/ pop \ u1 u2 s t0 s = u1 2/ + L: +* unext \ u1 u2 s hi A: lo + push drop pop \ u1 u2 hi + 2* a -if L0 drop 1 + jump L1 L0: drop L1: push + over -if L2 drop dup jump L3 L2: drop 0 L3: push + dup -if L4 drop over 1 and jump L5 L4: drop 0 L5: + pop + pop + push + and 1 and a 2* + pop ; + +\ ---- section 5.7: doubles ------------------------------------------------ +header D+ +: D+ ( d1 d2 -- d3 ) + push over push push drop pop \ al bl R: bh ah + over over xor -if L1 + drop + -if C1 jump C0 + L1: drop over -if L2 + drop + jump C1 + L2: drop + + C0: pop pop + ; + C1: pop pop + 1 + ; + +header DNEGATE +: DNEGATE ( d -- -d ) + inv over if L1 drop push inv 1 + pop ; + L1: drop 1 + ; + +\ ---- section 5.3: bytes -------------------------------------------------- +\ The shifts are written out, eight to a line, where DECOMPOSITION.md 5.3 has +\ a FOR ... UNEXT loop: a loop keeps its count on the return stack, and C@ and +\ C! are at the bottom of every chain of calls in the compiler capsule, where +\ there is not an entry to spare (D-2). The result is the same. +macro 8/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ endmacro +macro 8* 2* 2* 2* 2* 2* 2* 2* 2* endmacro + +header C@ +: C@ ( baddr -- c ) + dup 2/ 2/ a! 3 and + if K0 -1 + if K1 -1 + if K2 + drop @ 8/ 8/ 8/ 255 and ; + K2: drop @ 8/ 8/ 255 and ; + K1: drop @ 8/ 255 and ; + K0: drop @ 255 and ; + +header C! +: C! ( c baddr -- ) + dup 2/ 2/ a! 3 and + if K0 -1 + if K1 -1 + if K2 + drop 8* 8* 8* 4278190080 and @ 4278190080 inv and + ! ; + K2: drop 8* 8* 16711680 and @ -16711681 and + ! ; + K1: drop 8* 65280 and @ -65281 and + ! ; + K0: drop 255 and @ -256 and + ! ; + +\ ---- section 5.9: strings ------------------------------------------------ +header CMOVE +: CMOVE ( src dst u -- ) + -if OK drop drop drop NODE-ERROR b! 1 !b ; + OK: if DONE push + over C@ over C! 1 + push 1 + pop pop -1 + jump OK + DONE: drop drop drop ; + +\ ---- section 5.10: the console ------------------------------------------- +\ ---- what a node prints (docs/v4.0.0/MESH.md section 6) ------------------------ +\ A node has no console of its own. It does what a message asks, and what +\ it prints while doing it is sent as a message: to the node in (CONSOLE), or +\ if that is 0 to whoever sent the text; by the port that leads there, or if +\ this node knows of none, by the port the text came on. A message is seven words and then its text, four +\ characters to a word: +\ to, from, type, heat and TTL, ACL tag, sequence, length in characters +\ The types: 1 text to be interpreted 2 what a node printed 3 how the +\ text ended (one word of text: 0 QUIT, 1 completed, 2 an error). +\ The header of the message being served is in the seven cells (MSG); (REPLY) +\ is the address of the port it came on; (ME) is this node's number. +\ +\ Characters are kept in (OUT), 256 of them, a character to a cell, and sent +\ when it is full and when the text has been done with (quit.v4). (OUT^) +\ is where the next goes. +\ +\ THE STACK. What prints may be run with the data stack all but full: EMIT +\ has always needed one free cell and no more, and still does -- it keeps +\ the character and A on the return stack while it works. Sending needs +\ two. + +\ FINDING THE WAY (MESH.md section 7). A node knows its ports and nothing of +\ the shape they are wired in. Whoever wires it tells it, for a node, which +\ port leads toward that node: the table (ROUTES), (ROUTE#) entries of a +\ node's number and a port's address; and (ROUTE-DEFAULT), the port for any +\ node that is not in the table, or 0. + +\ ( node -- port | 0 ) the address of the port that leads toward the node +: (PORT-FOR) + (ROUTE#) a! @ if NONE -1 + (ROUTES) a! + FOR dup @+ xor if HIT drop @+ drop NEXT + 0 + NONE: drop drop (ROUTE-DEFAULT) a! @ ; + HIT: drop drop @+ pop drop ; + +\ LOOKING BEFORE WRITING (MESH.md section 7a). A write waits until the +\ neighbour reads, and a node that is waiting to write reads nothing: two +\ neighbours that each began to write to the other would wait for ever. So +\ a node does not begin a message until it has looked, (GATE): +\ - while any neighbour is waiting to write to it, it takes that message +\ in and keeps it with the messages waiting, to deal with when it has +\ nothing else to do; +\ - then, if the neighbour it means to write to is waiting to read, it +\ writes; +\ - and if that neighbour is not, it writes all the same when the +\ neighbour's number is the higher of the two, and otherwise looks +\ again. Of two neighbours one only may wait to write to the other, and +\ it is the lower: so those that wait are waiting on ever higher +\ numbers, and the highest of them is not waiting to write; it is +\ looking, and takes in what is being written to it. +\ (WRITERS) and (READERS) are the node's two looks at its neighbours, a bit +\ for each port. (NEAR) is the number of the node on each port, told by +\ whoever wires it (NEIGHBOUR, quit.v4); a port not told of -- a device's +\ -- is written to only when what is there is waiting to read. +\ +\ THE MESSAGES WAITING are kept in (MQ) .. (MQ-END), one after another, +\ going round: for each its seven words, the port it came on, and its text. +\ (MQ-HEAD) is where the oldest begins, (MQ-TAIL) where the next will go, +\ (MQ#) how many cells are taken. One that there is no room for is read to +\ its end and let go, and (LOST) counts it. + +\ ( mask index -- bit ) +: (BIT) + if Z -1 + FOR 2/ NEXT 1 and ; + Z: drop 1 and ; + +\ ( mask -- index ) the lowest port in it; the mask is not zero +: (LOW) + 0 push + L: dup 1 and if UP drop drop pop ; + UP: drop 2/ pop 1 + push jump L + +\ ( w -- ) one more cell of the messages waiting. B is kept. +: (MQ!) + (MQ-TAIL) a! @ a! !+ + a (MQ-END) xor if WRAP drop a jump SET + WRAP: drop (MQ) + SET: (MQ-TAIL) a! ! + (MQ#) a! @ 1 + ! ; + +\ ( -- w ) the oldest cell of the messages waiting, which goes +: (MQ@) + (MQ-HEAD) a! @ a! @+ + a (MQ-END) xor if WRAP drop a jump SET + WRAP: drop (MQ) + SET: (MQ-HEAD) a! ! + (MQ#) a! @ -1 + ! ; + +\ ( port to -- ) the seven words of a message being taken in, and the +\ port, go into (MQ-HDR). B is at the port, by its address, and `to` is +\ the message's first word, already read from it. +: (TAKE-HDR) + (MQ-HDR) a! !+ 5 FOR @b !+ UNEXT ! ; + +\ ( -- ) the message whose seven words are in (MQ-HDR) is kept with the +\ messages waiting: its text is read from the port B is at. A length +\ below zero, or above what a message carries, is kept as -1 with no text: +\ a longer one is read to its end first, so that what follows it is not +\ taken for a message. +: (TAKE-KEEP) + (MQ-HDR)+6 a! @ -if SIZED + drop -1 (MQ-HDR)+6 a! ! 0 jump COUNTED + SIZED: dup -1025 + -if LONG drop 3 + 2/ 2/ jump COUNTED + LONG: drop 3 + 2/ 2/ -1 + FOR @b drop UNEXT -1 (MQ-HDR)+6 a! ! 0 + COUNTED: \ ( n ) how many words of text follow + dup (MQ#) a! @ + -MQ-ROOM + -if FULL + drop push + (MQ-HDR) a! @ (MQ!) (MQ-HDR)+1 a! @ (MQ!) (MQ-HDR)+2 a! @ (MQ!) (MQ-HDR)+3 a! @ (MQ!) + (MQ-HDR)+4 a! @ (MQ!) (MQ-HDR)+5 a! @ (MQ!) (MQ-HDR)+6 a! @ (MQ!) (MQ-HDR)+7 a! @ (MQ!) + pop if NOTEXT -1 + FOR @b (MQ!) NEXT ; + NOTEXT: drop ; + FULL: drop if GONE -1 + FOR @b drop UNEXT jump LOSE + GONE: drop + LOSE: (LOST) a! @ 1 + ! ; + +\ ( port to -- ) take in a message and keep it +: (TAKE) (TAKE-HDR) jump (TAKE-KEEP) + +\ ( port -- ) wait until a message may be begun on the port, by its +\ address, taking in whatever is being written to this node meanwhile; and +\ leave B at the port. The port is kept in (GATE-PORT), not on the stack: +\ this is run with the stack as full as EMIT may be. +: (GATE) + (GATE-PORT) a! ! + L: (WRITERS) b! @b if QUIET + (LOW) (PORT) + dup b! @b (TAKE) jump L + QUIET: drop + (GATE-PORT) a! @ (PORT) - (NEAR) + a! @ if ASK + (ME) a! @ - -if GO jump ASK \ its number less this node's + GO: drop (GATE-PORT) a! @ b! ; \ the neighbour's is the higher + ASK: drop + (READERS) b! @b (GATE-PORT) a! @ (PORT) - (BIT) if NOTYET + drop (GATE-PORT) a! @ b! ; \ it is waiting to read + NOTYET: drop jump L + +\ ( type -- ) words 1 to 5 of a message this node sends: from, type, and +\ the three that are carried and not used yet. Its caller has put B at the +\ port and sent word 0, whom it is to, and sends the length and the text. +\ Each write waits for the neighbour to take it. +: (HDR) + (ME) a! @ !b \ from + !b \ type + 0 !b 0 !b 0 !b ; \ heat and TTL, ACL tag, sequence + +\ ( -- ) send what has been printed, to where (PRINT-TO) says, by the port +\ (PRINT-PORT): its length, then its characters, four to a word, the first +\ lowest. quit.v4 sets those two when text for this node arrives. +: (FLUSH-OUT) + (OUT^) a! @ (OUT) xor if NONE drop + (PRINT-PORT) a! @ (GATE) (PRINT-TO) a! @ !b + 2 (HDR) + (OUT^) a! @ (OUT) - dup !b + 3 + 2/ 2/ -1 + (OUT) a! + FOR @+ @+ 8* + @+ 8* 8* + @+ 8* 8* 8* + !b NEXT + (OUT) (OUT^) a! ! ; + NONE: drop ; + +\ EMIT puts the character with what has been printed. Everything the node +\ prints goes through EMIT. A is kept: the words that print have always +\ been free to use it across an EMIT. As v3, only the low 8 bits of the +\ character are printed. +header EMIT +: EMIT ( c -- ) + 255 and a push push \ A, and then the character, to the return stack + (OUT^) b! @b a! pop !+ a !b \ the character goes where (OUT^) points, which moves on + a (OUT)+256 xor if FULL drop pop a! ; + FULL: drop (FLUSH-OUT) pop a! ; +header KEY +: KEY ( -- c ) + L: CONSOLE-STATUS b! @b if WAIT drop CONSOLE-RX b! @b ; + WAIT: drop jump L + +header CR +: CR ( -- ) 10 jump EMIT +header SPACE +: SPACE ( -- ) 32 jump EMIT +header COUNT +: COUNT ( baddr -- baddr+1 c ) dup C@ push 1 + pop ; +header TYPE +: TYPE ( baddr u -- ) + -if OK drop drop NODE-ERROR b! 1 !b ; + OK: if DONE over C@ EMIT push 1 + pop -1 + jump OK + DONE: drop drop ; + +\ ( x -- ) up to four characters packed in one cell, the first in the low +\ byte: how the capsule prints its own short messages, a literal at a time. +: (EMIT4) + L: if DONE dup EMIT 8/ jump L + DONE: drop ; + +\ ---- section 5.8: the number base ---------------------------------------- +: (BASE) ( -- b ) \ BASE, or 10 when it is outside 2 .. 36 + BASE b! @b dup -2 + -if L1 drop drop 10 ; + L1: drop dup -37 + -if L2 drop ; + L2: drop drop 10 ; diff --git a/v4/capsule/dict.v4 b/v4/capsule/dict.v4 new file mode 100644 index 00000000..7f35bbf8 --- /dev/null +++ b/v4/capsule/dict.v4 @@ -0,0 +1,233 @@ +\ dict.v4 -- the dictionary: its space, its entries, and looking a name up. +\ +\ DECOMPOSITION.md 5.12 and 5.13: HERE ALIGN ALLOT , C, 2, PAD LATEST, FIND ' , +\ and the entry-field words >LINK LFA LINK> >NAME NFA NAME> CFA PFA >BODY +\ TRAVERSE SMUDGE HIDDEN. Part of the compiler capsule: it runs on the host +\ node. Rests on core.v4 and input.v4. +\ +\ AN ENTRY. A word's execution address (xt) is the address of its code, and +\ everything else is found from it: +\ +\ name the count byte, then the characters, four bytes to a cell, +\ padded with zeros to a whole cell +\ xt - 3 flags: 1 immediate, 2 hidden, 4 data +\ xt - 2 the word address of the name +\ xt - 1 the link: the xt of the entry before this one, 0 for the first +\ xt the code +\ +\ A name holds at most 31 characters; longer ones are cut to 31 both when +\ defined and when looked up, so 31 characters are significant (FORTH-79). +\ A "data" word is one whose code is a single call to its run-time routine, +\ with its parameter field in the cell after it: xt + 1. For any other word +\ the parameter field is the code itself. +\ +\ THE SPACE. DP is a byte address, so that C, can pack characters; HERE is +\ the next whole cell. An address unit is a cell (D-1): ALLOT counts cells. +\ +\ Constants the loader supplies: +\ DP word address of the variable: the next free byte +\ (LATEST) word address of the variable: the xt of the newest entry of the +\ FORTH vocabulary, or 0 +\ CONTEXT CURRENT word addresses of the variables: each holds the address +\ of a vocabulary's head cell -- the cell that holds the xt of +\ that vocabulary's newest entry. FORTH's head cell is (LATEST). +\ +\ VOCABULARIES (FORTH-79). A name is looked up in the CONTEXT vocabulary and +\ then, if that is not FORTH, in FORTH. A new entry goes into the CURRENT +\ vocabulary: it is linked to that vocabulary's newest entry and becomes it. +\ DBASE DLIMIT byte addresses of the start and end of dictionary space +\ PAD byte address of the scratch area for strings, 84 bytes or more +\ (D) word address of five cells of scratch for this file +\ (WORD-DEFINED) (WORD-FORGOTTEN) word addresses of two variables: see +\ "telling the kernel" below +\ PAD is in line. + +macro 4* 2* 2* endmacro +macro 4/ 2/ 2/ endmacro +macro OR over inv and xor endmacro + +\ ---- the space (5.12) ------------------------------------------------------ +\ These reach DP through B and leave A alone, so that , and C, can keep what +\ they are storing in A while the space is taken: nothing of theirs is then +\ on the data stack under (DP+), which itself needs three cells (D-2). + +: (DERR) ( -- 0 ) NODE-ERROR b! 5 !b 0 ; \ dictionary full + +\ ( n -- flag ) move DP by n bytes if it stays inside the dictionary space +\ and say -1; otherwise leave it, set NODE-ERROR and say 0. The two +\ subtractions are x + ~y + 1, which unlike the in-line - needs no return +\ entry: these words are called at the bottom of long chains of calls. +: (DP+) + DP b! @b + + dup DBASE inv + 1 + -if LOW drop drop jump (DERR) \ new - DBASE + LOW: drop dup inv DLIMIT + 1 + -if HIGH drop drop jump (DERR) \ DLIMIT - new + HIGH: drop DP b! !b -1 ; + +header HERE +: HERE ( -- addr ) DP b! @b 3 + 4/ ; +header ALIGN +: ALIGN ( -- ) DP b! @b 3 + -4 and !b ; +header ALLOT +: ALLOT ( n -- ) ALIGN 4* (DP+) drop ; + +\ , calls nothing: the code generator calls it from as deep as anything goes. +header , +: , ( x -- ) + a! + DP b! @b 3 + -4 and \ the next whole cell, as a byte address + dup inv DLIMIT + -3 + -if ROOM \ DLIMIT - (it + 4) + drop drop NODE-ERROR b! 5 !b ; + ROOM: drop dup 4 + !b \ DP is past it + 4/ b! a !b ; +header C, +: C, ( c -- ) + a! 1 (DP+) if FULL + drop a DP b! @b -1 + jump C! + FULL: drop ; +header 2, +: 2, ( lo hi -- ) SWAP , , ; \ the low cell first, as v3 + +header LATEST +: LATEST ( -- xt ) CURRENT a! @ a! @ ; \ the newest entry of the CURRENT vocabulary + +\ ---- the fields of an entry (5.13) ----------------------------------------- + +: (FLAGS) ( xt -- addr ) -3 + ; +header >LINK +: >LINK ( xt -- addr ) -1 + ; +header LFA +: LFA ( xt -- addr ) jump >LINK +header LINK> +: LINK> ( addr -- xt ) a! @ ; +header >NAME +: >NAME ( xt -- baddr ) -2 + a! @ 4* ; +header NFA +: NFA ( xt -- baddr ) jump >NAME +header NAME> +: NAME> ( baddr -- xt ) dup C@ 31 and 4 + 4/ push 4/ pop + 3 + ; +header CFA +: CFA ( xt -- xt ) ; +header PFA +: PFA ( xt -- addr ) dup (FLAGS) a! @ 4 and if CODE drop 1 + ; CODE: drop ; +header >BODY +: >BODY ( xt -- addr ) jump PFA + +\ ( baddr n -- baddr' ) as v3: for n > 0, from a name's count byte to the +\ byte after its last character; otherwise the address unchanged. +header TRAVERSE +: TRAVERSE + -if NN drop ; + NN: if ZERO drop dup C@ 31 and + 1 + ; + ZERO: drop ; + +header SMUDGE +: SMUDGE ( -- ) LATEST if NONE (FLAGS) a! @ 2 xor ! ; NONE: drop ; +header HIDDEN +: HIDDEN ( -- ) LATEST if NONE (FLAGS) a! @ 2 OR ! ; NONE: drop ; + +\ ---- telling the kernel (docs/v4.0.0/ENGINE.md 3b) ------------------------------ +\ A word's code is here on the node; its accounts are a record its kernel +\ keeps. So the kernel has to be told of every entry that is made and of +\ every entry that goes. An entry is made in one place, (HEADER); entries go +\ in two, FORGET and COLD (system.v4). Each tells through a variable that +\ holds the xt of a word to run, or 0 for a node whose host keeps no records: +\ (WORD-DEFINED) ( xt -- ) an entry has been made; its code will be at xt +\ (WORD-FORGOTTEN) ( w -- ) every entry at word address w or above is gone +\ On the bare-metal system the kernel puts words of its own there. + +\ ( -- ) tell of the entry just made, whose code starts at HERE +: (DEFINED) + (WORD-DEFINED) b! @b if NONE HERE SWAP push ; + NONE: drop ; + +\ ( w -- ) tell that the entries from word address w up have gone +: (FORGOTTEN) + (WORD-FORGOTTEN) b! @b if NONE push ; + NONE: drop drop ; + +\ ---- making an entry ------------------------------------------------------- +\ (D)+0 where the name starts (D)+1 the name being looked up +\ (D)+2 the name being copied, or the entry being looked at +\ (D)+3 a count (D)+4 whether a lookup has gone on to FORTH + +\ ( -- bytes ) what an entry for a name of (D)+3 characters takes: its name +\ cells and three more +: (NEED) (D)+3 a! @ 4 + -4 and 12 + ; + +\ ( baddr -- ) an entry for the counted string at baddr; its code starts at +\ HERE afterwards. An empty name, or no room, makes nothing and sets +\ NODE-ERROR. +: (HEADER) + dup (D)+2 a! ! \ (CLIP), in line + C@ -32 + -if LONG drop jump CLIPPED + LONG: drop 31 (D)+2 a! @ C! + CLIPPED: + (D)+2 a! @ C@ if EMPTY \ len + (D)+3 a! ! + ALIGN + (NEED) (DP+) if FULL drop \ there is room; + (NEED) NEGATE (DP+) drop \ DP back where it was + HERE (D) a! ! \ where the name starts + (D)+3 a! @ C, + L: (D)+3 a! @ if DONE -1 + ! + (D)+2 a! @ 1 + dup ! C@ C, + jump L + DONE: drop + P: DP b! @b 3 and if ALIGNED drop 0 C, jump P + ALIGNED: drop + 0 , (D) a! @ , LATEST , + HERE CURRENT a! @ a! ! + jump (DEFINED) + FULL: drop ; \ (DP+) has set NODE-ERROR + EMPTY: drop NODE-ERROR b! 6 !b ; \ name missing + +\ ---- looking a name up ----------------------------------------------------- + +\ ( baddr -- xt | 0 ) the newest visible entry named by the counted string. +\ Written out in one piece -- the string cut to 31, each entry's flags and +\ name fetched, the two names compared byte by byte -- so that the only call +\ it makes is C@: it is called from the interpreter for every word of every +\ line, with the user's return stack beneath it. +: (LOOKUP) + dup (D)+1 a! ! \ cut the string to 31 characters + C@ -32 + -if LONG drop jump CUT + LONG: drop 31 (D)+1 a! @ C! + CUT: + 0 (D)+4 a! ! \ not yet on to FORTH + CONTEXT a! @ a! @ + L: if END + (D)+2 a! ! + (D)+2 a! @ -3 + a! @ 2 and if VISIBLE drop jump OLDER + VISIBLE: drop + (D)+2 a! @ -2 + a! @ 4* (D) a! ! \ its name + (D)+1 a! @ C@ 1 + (D)+3 a! ! \ the count byte and the characters + C: (D)+3 a! @ if SAME -1 + dup ! \ k + dup (D) a! @ + C@ \ k c1 + SWAP (D)+1 a! @ + C@ \ c1 c2 + xor if EQ drop jump OLDER + EQ: drop jump C + SAME: drop (D)+2 a! @ ; + OLDER: (D)+2 a! @ -1 + a! @ jump L + END: (D)+4 a! @ if FIRST drop ; \ FORTH has been searched: not found + FIRST: drop -1 (D)+4 a! ! + CONTEXT a! @ (LATEST) xor if ISFORTH \ CONTEXT is FORTH: that was it + drop drop (LATEST) a! @ jump L + ISFORTH: drop ; + +\ ( -- xt | 0 ) FORTH-79: the compilation address of the next word in the +\ input stream, or 0 if it is not in the dictionary. +header FIND +: FIND 32 WORD jump (LOOKUP) + +\ ( -- addr ) FORTH-79: the parameter field address of the next word in the +\ input stream. Not found is an error: 0, and NODE-ERROR is set. This is ' +\ when interpreting; compile.v4 adds what ' does when compiling. +\ ( -- 0 ) say that the word WORD has just left is not known, as v3 does: +\ UNKNOWN WORD: 'xxx' +: (UNKNOWN) + $4E4B4E55 (EMIT4) $204E574F (EMIT4) $44524F57 (EMIT4) $27203A (EMIT4) + WBUF COUNT TYPE 39 EMIT CR + NODE-ERROR b! -1 !b 0 ; + +: (') 32 WORD (LOOKUP) if MISSING jump PFA + MISSING: drop jump (UNKNOWN) diff --git a/v4/capsule/editor.fth b/v4/capsule/editor.fth new file mode 100644 index 00000000..28ee6ccd --- /dev/null +++ b/v4/capsule/editor.fth @@ -0,0 +1,68 @@ +\ editor.fth -- the block editor, in FORTH. +\ +\ This file is FORTH source: the node compiles it itself, a line at a time, +\ as if it were typed. No line is longer than 79 characters. +\ +\ A block is a screen of 16 lines of 64 characters. SCR is the screen being +\ edited. The editor is a vocabulary, EDITOR: its words are ordinary FORTH +\ words used at the ordinary prompt, so everything else is there as well. +\ +\ n EDIT edit screen n: list it and make EDITOR the CONTEXT vocabulary +\ L list the screen N B the next, the one before +\ n T type line n +\ n P text put the rest of the input line on line n +\ n E erase line n WIPE blank the whole screen +\ n D delete line n; the lines below move up; it is held in PAD +\ n S spread: a blank line at n; the lines from n move down +\ n H hold line n in PAD n R replace line n from PAD +\ n I insert PAD's line at n +\ DONE write what has changed and go back to FORTH +\ a b COPY copy screen a to screen b (in FORTH) +\ +\ Every change is UPDATEd; nothing reaches storage until FLUSH or DONE, or +\ until the buffer is wanted for another block. + +FORTH DEFINITIONS + +\ ( baddr -- ) 64 characters; a zero shows as a blank, others as a dot +: (.LINE) + 64 0 DO DUP I + C@ + DUP 0= IF DROP 32 THEN DUP 32 < OVER 126 > OR IF DROP 46 THEN EMIT + LOOP DROP ; +\ ( n -- baddr ) where line n of screen SCR is +: (LINE) + DUP 0< OVER 15 > OR ABORT" Line out of range" 64 * SCR @ BLOCK + ; + +\ v3's three: a line shown, a line set from a string, the screen shown +: L ( n -- ) (LINE) (.LINE) CR ; +: S ( baddr u n -- ) + (LINE) DUP 64 BLANK SWAP 0 MAX 64 MIN CMOVE UPDATE ; +: SHOW ( -- ) + ." Screen " SCR @ 0 .R ." :" CR + 16 0 DO I 2 .R ." : " I (LINE) (.LINE) CR LOOP ; + +: COPY ( from to -- ) SWAP BLOCK SWAP BUFFER 1024 CMOVE UPDATE ; + +VOCABULARY EDITOR EDITOR DEFINITIONS + +: T ( n -- ) DUP (LINE) SWAP 2 .R ." : " (.LINE) CR ; +: L ( -- ) SHOW ; +: E ( n -- ) (LINE) 64 BLANK UPDATE ; +: P ( n -- ) (LINE) DUP 64 BLANK 0 WORD COUNT 64 MIN ROT SWAP CMOVE UPDATE ; +: H ( n -- ) (LINE) PAD 64 CMOVE ; +: R ( n -- ) PAD SWAP (LINE) 64 CMOVE UPDATE ; +: D ( n -- ) + DUP H DUP 15 < IF + DUP 1+ (LINE) OVER (LINE) ROT 15 SWAP - 64 * CMOVE + ELSE DROP THEN 15 E ; +: S ( n -- ) + DUP 15 < IF DUP (LINE) OVER 1+ (LINE) 3 PICK 15 SWAP - 64 * CMOVE> THEN E ; +: I ( n -- ) DUP S R ; +: WIPE ( -- ) SCR @ BLOCK 1024 BLANK UPDATE ; +: N ( -- ) 1 SCR +! L ; +: B ( -- ) -1 SCR +! L ; +: DONE ( -- ) FLUSH [COMPILE] FORTH ; + +FORTH DEFINITIONS + +: EDIT ( n -- ) DUP BLOCK DROP SCR ! EDITOR [ EDITOR ] L [ FORTH ] ; diff --git a/v4/capsule/forth.v4 b/v4/capsule/forth.v4 new file mode 100644 index 00000000..c4c0422f --- /dev/null +++ b/v4/capsule/forth.v4 @@ -0,0 +1,229 @@ +\ forth.v4 -- the first words of the FORTH vocabulary: the ones that are +\ opcodes or short runs of them, and the variables that are in-line addresses. +\ +\ Each is the definition DECOMPOSITION.md gives (sections 4, 5.1 - 5.5, 5.18). +\ A word flagged inline is copied into a definition in place of a call; the +\ ones that touch the return stack are compile-only as well. Rests on core.v4, +\ compile.v4's loader constants, and quit.v4, which the division words leave +\ through when the divisor is zero. (F) is seven cells of scratch for +\ this file. + +\ ---- stack ---- +header DUP inline : DUP dup ; +header DROP inline : DROP drop ; +header OVER inline : OVER over ; +header SWAP inline : SWAP' SWAP ; +header ROT inline : ROT' ROT ; +header -ROT inline : -ROT SWAP push SWAP pop ; +header ?DUP : ?DUP if Z dup ; Z: ; +header 2DUP inline : 2DUP over over ; +header 2DROP inline : 2DROP drop drop ; + +\ ---- the stack as a whole (D-16) ---- +\ DEPTH reads the stack register. PICK and ROLL reach under the top of a +\ stack that has no addresses: the values above the one wanted are set aside +\ in (S), and put back. (F)+3 how many are still to set aside, (F)+4 where +\ the next goes, (F)+5 the value wanted, (F)+6 how many are set aside. With n on top of a stack that is +\ otherwise one short of full there is no room at all, so until a value has been set aside nothing here pushes +\ anything while n is still there, and never more than one cell after. + +\ FORTH-79: how many values were on the stack before DEPTH +header DEPTH +: DEPTH DSTACK-DEPTH b! @b ; + +\ ( name -- ) "xxxx: Invalid index", and the line ends with ERROR +: (INDEX) + R-CLEAR (EMIT4) $6E49203A (EMIT4) $696C6176 (EMIT4) $6E692064 (EMIT4) $786564 (EMIT4) CR + 2 jump (DONE) + +\ ( x1 .. xn-1 -- ) A: n, which is 2 or more. Set the n-1 values above +\ the n-th aside. If there are not that many, the pop that finds the stack +\ empty is a fault: "Stack underflow". The count is taken down only after a +\ value has been set aside, when there is room to do the arithmetic. +: (DIG) + (F)+3 b! a !b + (F)+4 b! (S) !b + (F)+6 b! 0 !b + L: (F)+4 b! @b a! !+ + a (F)+4 b! !b + (F)+6 b! @b 1 + !b + (F)+3 b! @b -1 + dup !b + -1 + if DONE drop jump L + DONE: drop ; +\ ( -- x1 .. xk ) put them back. The test that ends it pushes one cell: +\ after the last value is back the stack may be one short of full. +: (BURY) + L: (F)+6 b! @b if DONE -1 + !b + (F)+4 a! @ -1 + dup ! a! @ + jump L + DONE: drop ; + +\ ( n -- x ) FORTH-79: a copy of the n-th value, not counting n itself. +\ 1 PICK is DUP, 2 PICK is OVER. n less than one is an error. +header PICK +: PICK + -if POS jump BAD + POS: if BAD + a! a 2/ if ONE drop \ n is 1 when half of it is 0 + (DIG) dup (F)+5 a! ! (BURY) (F)+5 a! @ ; + ONE: drop dup ; + BAD: drop $4B434950 jump (INDEX) + +\ ( n -- ) FORTH-79: the n-th value, not counting n itself, is taken out +\ and put on top. 3 ROLL is ROT, 2 ROLL is SWAP, 1 ROLL does nothing. n +\ less than one is an error. +header ROLL +: ROLL + -if POS jump BAD + POS: if BAD + a! a 2/ if ONE drop + (DIG) (F)+5 a! ! (BURY) (F)+5 a! @ ; + ONE: drop ; + BAD: drop $4C4C4F52 jump (INDEX) + +\ ---- return stack: in line, and only inside a definition ---- +header >R inline compile-only : >R push ; +header R> inline compile-only : R> pop ; +header R@ inline compile-only : R@ pop dup push ; +header I inline compile-only : I pop dup push ; +header J inline compile-only : J pop pop pop dup push a! push push a ; +header LEAVE inline compile-only : LEAVE pop pop drop dup push push ; +header UNLOOP inline compile-only : UNLOOP pop drop pop drop ; + +\ ---- memory ---- +header @ inline : FETCH a! @ ; +header ! inline : STORE a! ! ; +header +! inline : +! a! @ + ! ; +header CELLS inline : CELLS ; \ an address unit is a cell (D-1) + +\ ---- arithmetic ---- +header + inline : PLUS + ; +header - inline : MINUS - ; +\ The low cell of the product, by N steps of +* with nothing but the count on +\ the return stack. UM* drop gives the same cell but needs two more return +\ entries, which a word inside two DO loops does not have (D-2). The low +\ cell is exact: what +* loses at the top of T (D-3) takes N shifts to reach +\ the bit that moves into A, and the loop ends first. +header * : STAR a! 0 N-1 FOR +* UNEXT drop drop a ; +header NEGATE inline : NEGATE' NEGATE ; +header 1+ inline : 1+ 1 + ; +header 1- inline : 1- -1 + ; +header 2+ inline : 2+ 2 + ; +header 2- inline : 2- -2 + ; +header 2* inline : TWO* 2* ; +header 2/ inline : TWO/ 2/ ; + +\ ---- division (sections 4 and 5.6) ---- +\ Division by zero is guarded (D-15): each word tests its divisor before it +\ does anything else, and a zero divisor prints v3's message -- +\ /: Division by zero +\ -- and ends the line with ERROR, from however deep, as an address fault +\ does. The word's operands are taken off the stack, as v3 takes them, and +\ its caller is not returned to. + +\ ( name2 name1 -- ) the word's name: its first four characters, and the +\ rest or 0 (EMIT4). The return stack is emptied before anything is called: +\ the word may have been run with it full. +: (DIV0) + R-CLEAR (EMIT4) (EMIT4) $6944203A (EMIT4) $69736976 (EMIT4) $62206E6F (EMIT4) \ ": Division b" + $657A2079 (EMIT4) $6F72 (EMIT4) CR \ "y zero" + 2 jump (DONE) + +\ ( d n -- rem quot ) truncating toward zero: the quotient has the sign of +\ d xor n, the remainder the sign of d. This is section 4's SM/REM with its +\ UM/MOD -- restoring division, one step a bit, the divisor in A -- written +\ into it, and the two signs kept in (F) where section 4 has them on the +\ return stack. A word that divides is then four return entries deep, not +\ eight, so division can be used inside words that other words call (D-2). +\ The answer is the same. Exact when the quotient fits a cell; its callers +\ have seen to it that n is not zero. +: SM/REM + over over xor (F) a! ! \ the quotient's sign, in its top bit + over (F)+1 a! ! \ the remainder's + -if L0 inv 1 + L0: a! \ A: |n| + -if L1 DNEGATE L1: \ |d| + N-1 FOR + -if S0 + 2* over -if S1 drop 1 + jump S2 + S1: drop S2: push 2* pop + jump SUB + S0: + 2* over -if S3 drop 1 + jump S4 + S3: drop S4: push 2* pop + dup a xor -if S5 + drop -if NOSUB jump SUB + S5: drop dup inv a + inv -if S6 + drop jump NOSUB + S6: push drop pop jump SETBIT + SUB: inv a + inv + SETBIT: push 1 + pop + NOSUB: + NEXT + over push push drop pop pop \ urem uquot + (F)+1 a! @ -if L2 drop push inv 1 + pop jump L3 L2: drop L3: + (F) a! @ -if L4 drop inv 1 + ; L4: drop ; + +header S>D +: S>D ( n -- d ) dup -if P drop -1 ; P: drop 0 ; +\ The product's sign waits in (F), not on the return stack, for the same +\ reason as SM/REM's. +header M* +: M* ( n1 n2 -- d ) + over over xor (F) a! ! -if A inv 1 + A: push -if B inv 1 + B: pop UM* + (F) a! @ -if P drop jump DNEGATE P: drop ; + +\ ( n1 n2 n3 -- rem quot ) n1 * n2 as a double, divided by n3, which is +\ not zero. M* is written in, and n3 waits in (F)+2, so that the multiply +\ is as few return entries down as it can be. +: (*/MOD) + (F)+2 a! ! + over over xor (F) a! ! -if A inv 1 + A: push -if B inv 1 + B: pop UM* + (F) a! @ -if P drop DNEGATE jump Q P: drop Q: + (F)+2 a! @ jump SM/REM + +header /MOD +: /MOD ( n1 n2 -- rem quot ) + if Z push S>D pop jump SM/REM + Z: drop drop 0 $444F4D2F jump (DIV0) +header / +: / ( n1 n2 -- quot ) + if Z push S>D pop SM/REM NIP ; + Z: drop drop 0 $2F jump (DIV0) +header MOD +: MOD ( n1 n2 -- rem ) + if Z push S>D pop SM/REM drop ; + Z: drop drop 0 $444F4D jump (DIV0) +header */MOD +: */MOD ( n1 n2 n3 -- rem quot ) + if Z jump (*/MOD) + Z: drop drop drop $44 $4F4D2F2A jump (DIV0) +header */ +: */ ( n1 n2 n3 -- quot ) + if Z (*/MOD) NIP ; + Z: drop drop drop 0 $2F2A jump (DIV0) +header M/MOD +: M/MOD ( d n -- rem quot ) + if Z jump SM/REM + Z: drop drop drop $44 $4F4D2F4D jump (DIV0) + +\ ---- logic and comparison ---- +header AND inline : AND and ; +header XOR inline : XOR xor ; +header OR inline : OR' OR ; +header 0= : 0= if L1 drop 0 ; L1: drop -1 ; +header 0< : 0< -if L1 drop -1 ; L1: drop 0 ; +header NOT : NOT jump 0= +header = : EQUALS xor jump 0= +header < : LESS + over over xor -if SAME drop drop jump 0< + SAME: drop - jump 0< +header > : GREATER SWAP jump LESS + +\ ---- in-line addresses and constants ---- +header BL inline : BL' BL ; +header TIB inline : TIB' TIB ; +header >IN inline : >IN' >IN ; +header SPAN inline : SPAN' SPAN ; +header BASE inline : BASE' BASE ; +header PAD inline : PAD' PAD ; +header STATE inline : STATE' STATE ; diff --git a/v4/capsule/input.v4 b/v4/capsule/input.v4 new file mode 100644 index 00000000..6ceb43a7 --- /dev/null +++ b/v4/capsule/input.v4 @@ -0,0 +1,217 @@ +\ input.v4 -- reading a line and splitting it into words and numbers. +\ +\ DECOMPOSITION.md 5.9: TIB >IN SPAN SOURCE BL EXPECT QUERY WORD ENCLOSE +\ CONVERT NUMBER, and the comment words ( and \ of 5.15 (named PAREN and +\ BACKSLASH here, since the text assembler reads those two characters as its +\ own comments; the dictionary will give them their names). Part of the compiler +\ capsule: it runs on the host node. Rests on core.v4. +\ +\ Constants the loader supplies: +\ TIB byte address of the text input buffer; QUERY fills at most 81 bytes +\ >IN word address of the variable: offset in TIB of the next character +\ SPAN word address of the variable: how many characters the last +\ EXPECT or QUERY read +\ WBUF byte address of WORD's buffer, 257 bytes +\ (P) word address of eight cells of scratch for this file +\ (SRC) word address of the variable: the byte address of the text being +\ interpreted. QUERY makes it TIB; LOAD (blocks.v4) makes it a +\ block buffer. >IN is an offset from it and SPAN its length. +\ (SRC-HOOK) word address of a variable: 0, or the address of a word +\ that WORD calls before it looks at the text, to make sure (SRC) +\ is right. LOAD puts one there: a block buffer can be given to +\ another block between one word of the text and the next. +\ BLK word address of the variable: the block being interpreted, or +\ 0 for the terminal (FORTH-79) +\ TIB >IN SPAN and BL are in-line: written in a definition they are literals. + +macro BL 32 endmacro + +\ ( -- baddr u ) the input buffer and how much of it is in use +header SOURCE +: SOURCE (SRC) a! @ SPAN a! @ -if P drop 0 P: ; + +\ ( baddr n -- ) FORTH-79: characters from the terminal are stored from +\ baddr upward until a new-line or until n have been received; the new-line +\ is taken but not stored. A zero is added after the text, so the buffer +\ must hold n + 1 bytes. No action for n <= 0. SPAN is how many characters +\ were stored (SPAN is not FORTH-79; v3 has it). A line longer than n leaves +\ the rest, its new-line included, to be read next. +\ It is what the prompt reads every line with, with whatever the user has left +\ on the stack beneath it, so it works in (P) -- (P)+0 where the next +\ character goes, (P)+1 how many more may come, (P)+2 where the first went -- +\ and has at most three cells of its own on the data stack (D-2). +header EXPECT +: EXPECT + -if NN drop drop ; \ n < 0 + NN: if ZERO + (P)+1 a! ! dup (P)+2 a! ! (P) a! ! + L: (P)+1 a! @ if END drop + KEY dup -10 + if NL drop \ c + (P) a! @ C! + (P) a! @ 1 + ! (P)+1 a! @ -1 + ! + jump L + NL: drop drop jump FIN + END: drop + FIN: 0 (P) a! @ C! + (P) a! @ (P)+2 a! @ - SPAN a! ! ; + ZERO: drop drop ; + +\ ( -- ) FORTH-79: up to 80 characters, or a line, into TIB; >IN to 0. +header QUERY +: QUERY TIB (SRC) a! ! TIB 80 EXPECT 0 >IN a! ! ; + +\ ---- WORD ------------------------------------------------------------------ +\ WORD is called from deep inside the interpreter and compiler, with whatever +\ the user has on the stacks beneath it, and the stacks are ten and nine deep +\ (D-2). So everything it works on is in (P), and it never has more than +\ three cells of its own on the data stack: +\ (P)+0 the delimiter (P)+1 the length of the text in TIB +\ (P)+2 the word's length (P)+3 how much of it is still to be copied +\ (P)+6 where it is in TIB (P)+7 where the word starts +\ (CONVERT and NUMBER use (P)+2 .. (P)+5; they and WORD never run inside +\ each other.) + +\ ( -- c ) the character WORD is at. A zero reads as a blank when words +\ are being split at blanks: a block that has never been written is all +\ zeros, and so is the end of one whose lines were put there one at a time. +: (SRC@) + (P)+6 a! @ (SRC) a! @ + C@ if Z ; + Z: drop (P) a! @ -32 + if B drop 0 ; + B: drop 32 ; + +\ In line, not called: WORD may have only a few return entries to spare. +macro (LEFT) (P)+6 a! @ (P)+1 a! @ - endmacro \ ( -- d ) d < 0 while inside the text +macro (CH) (SRC@) (P) a! @ xor endmacro \ ( -- x ) x = 0 at a delimiter +macro (STEP) (P)+6 a! @ 1 + ! endmacro + +\ ( c -- baddr ) FORTH-79: characters are taken from TIB until the +\ delimiter c or the end of the text, leading delimiters ignored, and stored +\ in WBUF as a counted string. The delimiter met -- c, or a zero if the text +\ ran out -- is stored after them and is not counted. >IN is left just past +\ that delimiter. With nothing left the count is 0. The count is a byte, +\ so a word longer than 255 characters is cut to 255. +\ The three parts of WORD. The first is called and returns before anything +\ else is; the last is jumped to; so WORD's calls of C@ and C! are no deeper +\ than if it were written in one piece. +: (WORD-SET) ( c -- ) + 255 and (P) a! ! + (SRC-HOOK) a! @ if NONE push ex \ call it: ex comes back to the next word + jump HOOKED + NONE: drop + HOOKED: + SPAN a! @ -if A drop 0 A: (P)+1 a! ! + >IN a! @ -if B drop 0 B: (P)+6 a! ! ; + +: (WORD-TAKE) ( -- baddr ) + (P)+6 a! @ (P)+7 a! ! \ where it starts + SC: (LEFT) -if SCE drop (CH) if SCE drop (STEP) jump SC \ up to a delimiter + SCE: drop + (P)+6 a! @ (P)+7 a! @ - \ its length + dup -256 + -if CAP drop jump FITS CAP: drop drop 255 FITS: + dup (P)+2 a! ! (P)+3 a! ! + (P)+2 a! @ WBUF C! + \ copy it, last character first + CP: (P)+3 a! @ if COPIED -1 + dup ! \ k + dup (P)+7 a! @ + (SRC) a! @ + C@ \ k c + SWAP WBUF+1 + C! + jump CP + COPIED: drop + (LEFT) -if RANOUT + drop (P) a! @ (P)+2 a! @ WBUF+1 + C! \ the delimiter after the text + (P)+6 a! @ 1 + >IN a! ! WBUF ; + RANOUT: drop 0 (P)+2 a! @ WBUF+1 + C! + (P)+6 a! @ >IN a! ! WBUF ; + +header WORD +: WORD + (WORD-SET) + SK: (LEFT) -if SKE drop (CH) if SKS drop jump (WORD-TAKE) \ past delimiters + SKS: drop (STEP) jump SK + SKE: drop jump (WORD-TAKE) + +\ ( c -- baddr ) as WORD, but leading delimiters are not ignored: the text +\ starts at >IN, and may be empty. This is what ." needs: ." " is an +\ empty string, where WORD would step over its closing quote. +: (PARSE) (WORD-SET) jump (WORD-TAKE) + +\ ---- ENCLOSE --------------------------------------------------------------- +\ (P)+0 the delimiter, (P)+1 the string's address. +: (E?) ( i -- i k ) \ k: 0 at the end of the string, 1 at a delimiter, else 2 + dup (P)+1 a! @ + C@ if END (P) a! @ xor if DEL drop 2 ; + DEL: drop 1 ; + END: drop 0 ; +: (ESKIP) ( i -- i' ) L: (E?) -1 + if S drop ; S: drop 1 + jump L +: (ESCAN) ( i -- i' ) L: (E?) -2 + if S drop ; S: drop 1 + jump L + +\ ( baddr c -- baddr n1 n2 n3 ) in the zero-terminated string at baddr: +\ n1 the offset of the first character that is not c, n2 the offset of the +\ first c after it, n3 the offset of the first character after that run of c. +header ENCLOSE +: ENCLOSE + 255 and (P) a! ! dup (P)+1 a! ! + 0 (ESKIP) dup (ESCAN) dup (ESKIP) ; + +\ ---- CONVERT and NUMBER ---------------------------------------------------- +\ ( c -- n ) the value of the digit c, 0 .. 35, in either case; -1 if none +: (DIGIT) + dup -48 + -if GE0 drop drop -1 ; + GE0: drop dup -58 + -if GT9 drop -48 + ; + GT9: drop dup -65 + -if GEA drop drop -1 ; + GEA: drop dup -91 + -if GTZ drop -55 + ; + GTZ: drop dup -97 + -if GEa drop drop -1 ; + GEa: drop dup -123 + -if GTz drop -87 + ; + GTz: drop drop -1 ; + +\ ( d1 baddr1 -- d2 baddr2 ) FORTH-79: the characters from baddr1 + 1 on are +\ taken as digits in the current BASE, each accumulated into the double after +\ it is multiplied by BASE, until one is not a digit; baddr2 is its address. +\ (P)+2 holds the digit while the double is multiplied and (P)+5 the address, +\ so nothing waits on the return stack across the calls. +header CONVERT +: CONVERT + L: 1 + dup (P)+5 a! ! C@ (DIGIT) \ lo hi n + -if DIG drop (P)+5 a! @ ; + DIG: dup (BASE) - -if BIG + drop (P)+2 a! ! \ lo hi + (BASE) UM* drop \ lo hi*base + SWAP (BASE) UM* \ hi*base plo phi + push SWAP pop + \ plo hi' + (P)+2 a! @ 0 D+ + (P)+5 a! @ jump L + BIG: drop drop (P)+5 a! @ ; + +\ ( baddr -- d flag ) the counted string at baddr as a signed double in the +\ current BASE, and -1; it may begin with a minus sign. If it is empty, is +\ only a sign, or holds anything that is not a digit: 0 0 and 0. The character after the string must not be a digit +\ (WORD puts the delimiter or a zero there); if it is, that too is reported +\ as an error. (P)+3 the address of its last character, (P)+4 the sign. +: (NUMBER?) + dup C@ if ERR2 + over + (P)+3 a! ! \ baddr + dup 1 + C@ -45 + if NEG + drop 0 (P)+4 a! ! jump GO + NEG: drop -1 (P)+4 a! ! 1 + + dup (P)+3 a! @ xor if ERR2 drop + GO: push 0 0 pop CONVERT \ lo hi baddr2 + (P)+3 a! @ 1 + xor if FINE + drop drop drop jump ERR0 + FINE: drop (P)+4 a! @ if POS drop DNEGATE -1 ; + POS: drop -1 ; + ERR2: drop drop + ERR0: 0 0 0 ; + +\ ( baddr -- d ) FORTH-79. What is not a number gives 0 and sets NODE-ERROR. +header NUMBER +: NUMBER + (NUMBER?) if BAD drop ; + BAD: drop NODE-ERROR b! 2 !b ; + +\ ---- comments (5.15) ------------------------------------------------------- +\ PAREN skips to the closing parenthesis; BACKSLASH skips the rest of the line. +header ( immediate +: PAREN 41 WORD drop ; +header \ immediate +\ In a block a line is 64 characters: skip to the start of the next. +: BACKSLASH + BLK a! @ if TERM drop >IN a! @ -64 and 64 + ! ; + TERM: drop SPAN a! @ >IN a! ! ; diff --git a/v4/capsule/log.v4 b/v4/capsule/log.v4 new file mode 100644 index 00000000..56f5b986 --- /dev/null +++ b/v4/capsule/log.v4 @@ -0,0 +1,72 @@ +\ log.v4 -- logging, as v3: a message has a level, and is printed if the +\ level is at or below LOG-LEVEL. +\ +\ DECOMPOSITION.md 5.25: the level constants LOG-ERROR LOG-WARN LOG-INFO +\ LOG-TEST LOG-DEBUG (0 .. 4), LOG-LEVEL! LOG-LEVEL@, LOG-ERROR" ... LOG-DEBUG" +\ and LOG-ERROR-STR ... LOG-DEBUG-STR. Part of the compiler capsule; rests +\ on core.v4, codegen.v4 and quit.v4. +\ +\ WHAT IS PRINTED is v3's line without its time of day, which a node has +\ not got: the level's colour, the level's name and a colon, the colour off, +\ the text, a new line -- +\ ESC [32m INFO: ESC [0m text +\ On the mesh a message will go to the recorder's log ring (5.25); until +\ then it goes to the console. +\ +\ Constants the loader supplies: +\ (LOG-LEVEL) word address of the variable: 2, LOG-INFO, at switch-on + +header LOG-ERROR inline : LOG-ERROR 0 ; +header LOG-WARN inline : LOG-WARN 1 ; +header LOG-INFO inline : LOG-INFO 2 ; +header LOG-TEST inline : LOG-TEST 3 ; +header LOG-DEBUG inline : LOG-DEBUG 4 ; + +header LOG-LEVEL@ +: LOG-LEVEL@ ( -- n ) (LOG-LEVEL) a! @ ; +\ ( n -- ) as v3: a level below 0 is 0, one above 4 is 4 +header LOG-LEVEL! +: LOG-LEVEL! + -if POS drop 0 jump SET + POS: dup -5 + -if BIG drop jump SET + BIG: drop drop 4 + SET: (LOG-LEVEL) a! ! ; + +\ ( baddr u level -- ) the message, if the level is at or below LOG-LEVEL +: (LOG) + dup inv (LOG-LEVEL) a! @ + 1 + -if SHOW drop drop drop drop ; \ LOG-LEVEL - level + SHOW: drop + if P0 -1 + if P1 -1 + if P2 -1 + if P3 -1 + if P4 + drop jump OUT + P0: drop $31335B1B (EMIT4) $6D (EMIT4) $4F525245 (EMIT4) $203A52 (EMIT4) $6D305B1B (EMIT4) jump OUT + P1: drop $33335B1B (EMIT4) $6D (EMIT4) $4E524157 (EMIT4) $203A (EMIT4) $6D305B1B (EMIT4) jump OUT + P2: drop $32335B1B (EMIT4) $6D (EMIT4) $4F464E49 (EMIT4) $203A (EMIT4) $6D305B1B (EMIT4) jump OUT + P3: drop $35335B1B (EMIT4) $6D (EMIT4) $54534554 (EMIT4) $203A (EMIT4) $6D305B1B (EMIT4) jump OUT + P4: drop $34335B1B (EMIT4) $6D (EMIT4) $55424544 (EMIT4) $203A47 (EMIT4) $6D305B1B (EMIT4) jump OUT + OUT: TYPE jump CR + +header LOG-ERROR-STR : LOG-ERROR-STR ( baddr u -- ) 0 jump (LOG) +header LOG-WARN-STR : LOG-WARN-STR ( baddr u -- ) 1 jump (LOG) +header LOG-INFO-STR : LOG-INFO-STR ( baddr u -- ) 2 jump (LOG) +header LOG-TEST-STR : LOG-TEST-STR ( baddr u -- ) 3 jump (LOG) +header LOG-DEBUG-STR : LOG-DEBUG-STR ( baddr u -- ) 4 jump (LOG) + +\ ( level -- ) the run time of LOG-xxx" : the text is after the call, as +\ for ." ; log it at that level and go on after it. +header (LOG") compile-only +: (LOG") + pop 4* dup C@ over + 4/ 1 + push \ level baddr R: the cell after the text + COUNT ROT jump (LOG) + +\ ( level -- ) LOG-xxx" text" logs the text -- now, if interpreting; when +\ the word it is compiled into runs, if compiling. (Q)+3 holds the level. +: (LOG-QUOTE) + (Q)+3 a! ! 34 (PARSE) drop + STATE a! @ if NOW + drop (Q)+3 a! @ (LIT,) &(LOG") (CALL,) jump (STRING,) + NOW: drop WBUF COUNT (Q)+3 a! @ jump (LOG) +header LOG-ERROR" immediate : LOG-ERROR-QUOTE 0 jump (LOG-QUOTE) +header LOG-WARN" immediate : LOG-WARN-QUOTE 1 jump (LOG-QUOTE) +header LOG-INFO" immediate : LOG-INFO-QUOTE 2 jump (LOG-QUOTE) +header LOG-TEST" immediate : LOG-TEST-QUOTE 3 jump (LOG-QUOTE) +header LOG-DEBUG" immediate : LOG-DEBUG-QUOTE 4 jump (LOG-QUOTE) diff --git a/v4/capsule/numout.v4 b/v4/capsule/numout.v4 new file mode 100644 index 00000000..e6958023 --- /dev/null +++ b/v4/capsule/numout.v4 @@ -0,0 +1,153 @@ +\ numout.v4 -- printing numbers: pictured output, the . words, and .S +\ +\ DECOMPOSITION.md 5.8: <# # #S HOLD SIGN #> . .R U. U.R D. D.R ? SPACES +\ DECIMAL HEX OCTAL, each the definition given there and executed on the mesh +\ node by test_pictured.c, test_numout.c and test_printing.c; and .S, which +\ D-16 makes possible again. Part of the compiler capsule. Rests on core.v4 +\ and forth.v4. +\ +\ Constants the loader supplies: +\ HEND byte address just past the hold buffer, which is 64 bytes +\ -HFLOOR minus the lowest address HOLD may store at: -(HEND - 62) +\ HLD word address of the variable: where the picture has got to +\ (W) word address of three cells of scratch for this file: +\ (W)+0 the width a number is to be printed in +\ (W)+1 whether a blank follows it (W)+2 .S's count + +macro (-ROT) SWAP push SWAP pop endmacro + +\ ---- unsigned division (section 4) ---- +\ One step a bit, the divisor in A. Exact for uhi < ud. +: UM/MOD ( ulo uhi ud -- urem uquot ) + a! N-1 FOR + -if L0 + 2* over -if L1 drop 1 + jump L2 + L1: drop L2: push 2* pop + jump SUB + L0: + 2* over -if L3 drop 1 + jump L4 + L3: drop L4: push 2* pop + dup a xor -if L5 + drop -if NOSUB jump SUB + L5: drop dup inv a + inv -if L6 + drop jump NOSUB + L6: push drop pop jump SETBIT + SUB: inv a + inv + SETBIT: push 1 + pop + NOSUB: + NEXT + over push push drop pop pop ; + +\ ---- pictured output ---- +header <# +: <# ( -- ) HEND HLD b! !b ; +header HOLD +: HOLD ( c -- ) + dup -256 and if OKC drop drop NODE-ERROR b! 4 !b ; \ not a character + OKC: drop HLD b! @b -HFLOOR + -if ROOM + drop drop NODE-ERROR b! 3 !b ; \ the buffer is full + ROOM: drop HLD b! @b -1 + dup !b jump C! +header SIGN +: SIGN ( n -- ) -if L1 drop 45 jump HOLD L1: drop ; +header # +: # ( ud1 -- ud2 ) + 0 (BASE) UM/MOD (-ROT) \ qhi lo rem1 + (BASE) UM/MOD (-ROT) \ qlo qhi rem + dup -10 + -if L1 drop 48 + jump L2 L1: drop 55 + L2: jump HOLD +header #S +: #S ( ud -- 0 0 ) L: # over over OR if L1 drop jump L L1: drop ; +header #> +: #> ( ud -- baddr u ) drop drop HLD b! @b HEND over push inv pop + inv ; + +\ ---- spaces and the number base ---- +header SPACES +: SPACES ( n -- ) -if L drop ; L: if DONE SPACE -1 + jump L DONE: drop ; +header DECIMAL +: DECIMAL 10 BASE a! ! ; +header HEX +: HEX 16 BASE a! ! ; +header OCTAL +: OCTAL 8 BASE a! ! ; + +\ ---- numbers ---- +\ One picture for signed singles, one for unsigned, one for doubles. Each +\ plain word is its .R word with a width of 0 and the blank flag set, and all +\ six share one tail, which prints the blank only when the flag is set. + +\ ( baddr u -- ) right-justified in the width, then the blank if wanted +: (.TAIL) + (W) b! @b -if POS drop jump OUT \ width < 0 + POS: over - SPACES \ width - u spaces + OUT: TYPE (W)+1 b! @b if DONE drop jump SPACE + DONE: drop ; +: (.BODY) ( n width -- ) + (W) b! !b dup push -if A inv 1 + A: 0 <# #S pop SIGN #> jump (.TAIL) +: (U.BODY) ( u width -- ) + (W) b! !b 0 <# #S #> jump (.TAIL) +: (D.BODY) ( d width -- ) + (W) b! !b dup push -if A DNEGATE A: <# #S pop SIGN #> jump (.TAIL) + +header .R +: DOT-R ( n width -- ) 0 (W)+1 b! !b jump (.BODY) +header . +: DOT ( n -- ) -1 (W)+1 b! !b 0 jump (.BODY) +header U.R +: U-DOT-R ( u width -- ) 0 (W)+1 b! !b jump (U.BODY) +header U. +: U-DOT ( u -- ) -1 (W)+1 b! !b 0 jump (U.BODY) +header D.R +: D-DOT-R ( d width -- ) 0 (W)+1 b! !b jump (D.BODY) +header D. +: D-DOT ( d -- ) -1 (W)+1 b! !b 0 jump (D.BODY) + +\ ( addr -- ) print what the cell holds +header ? +: QUESTION a! @ jump DOT + +\ ( -- ) as v3: the depth between < and >, then every value on the stack, +\ the deepest first, each followed by a blank; then a new line. The stack is +\ left as it was. It reads each value with PICK, so it needs a few cells of +\ the stack free to work in. +header .S +: DOT-S + 60 EMIT DEPTH 0 U-DOT-R 62 EMIT SPACE + DEPTH (W)+2 b! !b + L: (W)+2 b! @b if DONE + PICK DOT + (W)+2 b! @b -1 + !b jump L + DONE: drop jump CR + +\ ---- DUMP ---- +\ ( baddr u -- ) u bytes from the byte address baddr, sixteen to a line: the +\ address, the bytes in hex, and the bytes as characters between bars. +\ Everything it keeps between words is in (DP): the saved BASE, the address, +\ the count and the column. ADDR-DIGITS is two for each byte of a cell. +: (DB) ( -- c ) (DP)+1 b! @b (DP)+3 b! @b + jump C@ +header DUMP +: DUMP + -if OK drop drop NODE-ERROR b! 1 !b ; + OK: (DP)+2 b! !b (DP)+1 b! !b + BASE b! @b (DP) b! !b 16 BASE b! !b + LINE: (DP)+2 b! @b if DONE drop + (DP)+1 b! @b 0 <# ADDR-DIGITS (DP)+3 b! !b + AD: # (DP)+3 b! @b -1 + dup !b if ADX drop jump AD + ADX: drop #> TYPE 58 EMIT SPACE + 0 (DP)+3 b! !b + HX: (DP)+2 b! @b (DP)+3 b! @b inv + -if HAVE + drop SPACE SPACE SPACE jump HN + HAVE: drop (DB) 0 <# # # #> TYPE SPACE + HN: (DP)+3 b! @b 1 + dup !b -16 + -if HXX drop jump HX + HXX: drop SPACE 124 EMIT + 0 (DP)+3 b! !b + CH: (DP)+2 b! @b (DP)+3 b! @b inv + -if HAVC jump CHX + HAVC: drop (DB) + dup -32 + -if GE drop drop 46 jump EM + GE: drop dup -127 + -if BIG drop jump EM + BIG: drop drop 46 + EM: EMIT + (DP)+3 b! @b 1 + dup !b -16 + -if CHX drop jump CH + CHX: drop 124 EMIT CR + (DP)+1 b! @b 16 + !b + (DP)+2 b! @b -16 + -if MORE jump DONE + MORE: !b jump LINE + DONE: drop (DP) b! @b BASE b! !b ; diff --git a/v4/capsule/qmath.v4 b/v4/capsule/qmath.v4 new file mode 100644 index 00000000..5267e29b --- /dev/null +++ b/v4/capsule/qmath.v4 @@ -0,0 +1,247 @@ +\ qmath.v4 -- Q48.16 fixed point: a signed double with sixteen bits of +\ fraction (D-8, D-10). +\ +\ DECOMPOSITION.md 5.26. Each word is the definition given there and +\ executed on the mesh node by test_foundation.c and test_printing.c, here in +\ the host node's vocabulary. Rests on core.v4, forth.v4, numout.v4 and +\ words.v4. +\ +\ ERRORS. Q./ by zero, and Q.SQRT and Q.LOG outside their domain, leave the +\ result D-11 and D-12 give and then raise an error (D-18): codes 11, +\ "Division by zero", and 12, "Argument out of range". +\ +\ Constants the loader supplies: +\ MSB MAXHI the high cells of Q min and Q max +\ HIMASK every bit but the top sixteen +\ 2N+15 N-18 N-17 loop counts, N the cell width in bits +\ (Q/) (QE) (QR) (QL) (QT) (QP) word addresses of the words' scratch +\ cells: 5, 8, 5, 7, 6 and 4 of them + +\ the logical double shift right: one +* step with S = 0, the top bit cleared +macro (UD2/) push a! 0 pop +* MAXHI and push drop a pop endmacro + +: (QERR11) NODE-ERROR b! 11 !b ; +: (QERR12) NODE-ERROR b! 12 !b ; + +\ ---- conversion and constants ---- +header Q.FROM-INT +: Q.FROM-INT ( n -- q ) push 0 a! 0 pop N-17 FOR +* UNEXT push drop a pop ; +header Q.TO-INT +: Q.TO-INT ( q -- n ) push a! 0 pop 15 FOR +* UNEXT drop drop a ; +header Q.1 inline : Q.1 65536 0 ; +header Q.0 inline : Q.0 0 0 ; +header Q.SCALE inline : Q.SCALE 65536 0 ; + +\ ---- the double words under other names ---- +header Q.+ : Q.+ jump D+ +header Q.- : Q.- jump D- +header Q.ABS : Q.ABS jump DABS +header Q.NEG : Q.NEG jump DNEGATE +header Q.= : Q.= jump D= +header Q.< : Q.< jump D< +header Q.> : Q.> 2SWAP jump D< +header Q.0= : Q.0= jump D0= +header Q.MAX : Q.MAX jump DMAX +header Q.MIN : Q.MIN jump DMIN + +\ ---- multiply ---- +header Q.* +: Q.* ( a b -- c ) + SWAP push over over UM* drop + push push over pop + -if L1 SWAP jump L2 L1: SWAP drop 0 L2: + pop SWAP - push + push over pop UM* pop + + ROT pop dup push + over -if L3 drop dup jump L4 L3: drop 0 L4: + push UM* pop - D+ + ROT pop UM* + SWAP push 0 D+ pop + push over pop SWAP Q.TO-INT push Q.TO-INT pop SWAP ; + +\ ---- divide ---- +: D2*C ( lo hi cin -- lo' hi' cout ) + a! dup -if L1 drop 1 jump L2 L1: drop 0 L2: push + over -if L3 drop 1 jump L4 L3: drop 0 L4: + over + + + push 2* a + pop pop ; + +: (UQ/) ( a0 a1 b0 b1 -- q0 q1 ) + (Q/)+2 a! SWAP !+ ! (Q/) a! SWAP !+ ! 0 0 0 + 2N+15 FOR + push (Q/) a! @+ @ pop D2*C + push (Q/)+1 a! ! (Q/) a! ! pop D2*C + if CMP drop jump TAKE + CMP: drop (Q/)+3 b! @b + over over xor if EQH -if SAMEH + drop drop -if NT1 jump TAKE NT1: jump NOTAKE + SAMEH: drop over SWAP push inv pop + inv + -if T2 drop jump NOTAKE T2: drop jump TAKE + EQH: drop drop over (Q/)+2 b! @b + over over xor -if SAMEL + drop drop -if NT3 drop jump TAKEL NT3: drop jump NOTAKEL + SAMEL: drop push inv pop + inv + -if T4 drop jump NOTAKEL T4: drop jump TAKEL + TAKEL: drop (Q/)+2 b! @b push inv pop + inv 0 1 jump END + NOTAKEL: 0 jump END + TAKE: push (Q/)+2 b! @b over over push inv pop + inv push + over over xor -if SB drop NIP -if NB drop 1 jump BD NB: drop 0 jump BD + SB: drop push inv pop + inv -if NB2 drop 1 jump BD NB2: drop 0 + BD: pop pop (Q/)+3 b! @b push inv pop + inv + push SWAP pop SWAP - 1 jump END + NOTAKE: 0 + END: + NEXT + push (Q/) a! @+ @ pop D2*C drop push push drop drop pop pop ; + +header Q./ +: Q./ ( a b -- q ) + over over OR if ZERO drop + push over pop SWAP over xor (Q/)+4 b! !b + -if L1 DNEGATE L1: push push -if L2 DNEGATE L2: pop pop + dup if CHK drop jump DIV + CHK: drop over -131072 and if CHK2 drop jump DIV + CHK2: drop push push dup pop dup push N-18 FOR 2* UNEXT + over over xor -if SAME drop drop -if NOOV jump OV + SAME: drop push inv pop + inv -if OV + NOOV: drop pop pop jump DIV + OV: drop drop drop pop pop drop drop + (Q/)+4 b! @b -if OVP drop 0 MSB ; OVP: drop -1 MAXHI ; + DIV: (UQ/) (Q/)+4 b! @b -if L3 drop DNEGATE ; L3: drop ; + ZERO: drop drop drop + over over OR if Z0 drop -if ZP drop drop 0 MSB jump (QERR11) + ZP: drop drop -1 MAXHI jump (QERR11) + Z0: drop jump (QERR11) + +\ ---- e to the x ---- +header Q.EXP +: Q.EXP ( q -- e ) + over over OR if ONE drop + dup (QE)+6 b! !b -if L1 DNEGATE L1: + over over -1048576 -1 D+ push drop pop -if BIG drop + over over (QE)+2 a! SWAP !+ ! over over (QE) a! SWAP !+ ! + 65536 0 D+ (QE)+4 a! SWAP !+ ! + 2 (QE)+7 b! !b + LOOP: + (QE)+2 a! @+ @ (QE) a! @+ @ Q.* + (QE)+7 b! @b Q.FROM-INT Q./ + over over (QE)+2 a! SWAP !+ ! + (QE)+4 a! @+ @ D+ (QE)+4 a! SWAP !+ ! + (QE)+2 a! @+ @ if HI0 drop drop jump CONT + HI0: drop -if SM drop jump CONT + SM: -50 + -if CONT1 drop jump DONE + CONT1: drop + CONT: (QE)+7 b! @b 1 + dup !b -11 + -if DONE1 drop jump LOOP + DONE1: drop + DONE: (QE)+4 a! @+ @ (QE)+6 b! @b -if POS drop 65536 0 2SWAP jump Q./ + POS: drop ; + BIG: drop drop drop (QE)+6 b! @b -if BIGP drop 0 0 ; BIGP: drop -1 MAXHI ; + ONE: drop drop drop 65536 0 ; + +\ ---- square root ---- +header Q.SQRT +: Q.SQRT ( q -- r ) + dup -if POS drop drop drop 0 0 jump (QERR12) + POS: drop over over OR if ZERO drop + over 65536 xor over OR if ONE drop + over over (QR) a! SWAP !+ ! (UD2/) 16384 0 D+ (QR)+2 a! SWAP !+ ! + 8 (QR)+4 b! !b + LOOP: (QR) a! @+ @ (QR)+2 a! @+ @ Q./ (QR)+2 a! @+ @ D+ (UD2/) + over over (QR)+2 a! @+ @ DNEGATE D+ -if L1 DNEGATE L1: + if HI0 drop drop jump NXT + HI0: drop -if SM drop jump NXT + SM: -10 + -if NXT1 drop drop drop (QR)+2 a! @+ @ ; + NXT1: drop + NXT: (QR)+2 a! SWAP !+ ! + (QR)+4 b! @b -1 + dup !b if DONE drop jump LOOP + DONE: drop (QR)+2 a! @+ @ ; + ZERO: drop ; + ONE: drop ; + +\ ---- natural logarithm ---- +header Q.LOG +: Q.LOG ( x -- ln x ) + dup -if POS drop jump ERR + POS: drop over over OR if ZERO drop 0 (QL)+2 b! !b + DOWN: dup if CHKLO drop jump SHR + CHKLO: drop over -131072 and if DOWNDONE drop + SHR: (UD2/) (QL)+2 b! @b 1 + !b jump DOWN + DOWNDONE: drop drop + UP: dup -65536 and if UPSHIFT drop jump NORM + UPSHIFT: drop 2* (QL)+2 b! @b -1 + !b jump UP + NORM: dup (QL) b! !b -65536 + (QL)+1 b! !b 6 (QL)+3 b! !b + NEWTON: (QL)+1 b! @b dup (QL)+4 b! !b 65536 + (QL)+5 b! !b + 131072 (QL)+6 b! !b + EXPL: (QL)+4 b! @b 0 (QL)+1 b! @b 0 Q.* drop + 0 (QL)+6 b! @b 0 Q./ drop dup (QL)+4 b! !b + dup (QL)+5 b! @b + !b + -50 + -if EXPC drop jump EXPD + EXPC: drop (QL)+6 b! @b 65536 + dup !b -720896 + -if EXPD2 drop jump EXPL + EXPD2: drop + EXPD: (QL) b! @b (QL)+5 b! @b push inv pop + inv + dup (QL)+4 b! !b + if DZ -if DPOS + inv 1 + 0 (QL)+5 b! @b 0 Q./ drop + (QL)+1 b! @b SWAP push inv pop + inv -if KEEP drop 0 KEEP: (QL)+1 b! !b + jump TEST + DPOS: 0 (QL)+5 b! @b 0 Q./ drop (QL)+1 b! @b + !b jump TEST + DZ: drop + TEST: (QL)+4 b! @b -if AP inv 1 + AP: -100 + -if CONT drop jump FIN + CONT: drop (QL)+3 b! @b -1 + dup !b if FIN0 drop jump NEWTON + FIN0: drop + FIN: (QL)+1 b! @b (QL)+2 b! @b + -if KP inv 1 + 45426 UM* drop inv 1 + jump KS KP: 45426 UM* drop + KS: + dup -if SP drop -1 ; SP: drop 0 ; + ZERO: drop + ERR: drop drop 0 0 jump (QERR12) + +\ ---- sine and cosine ---- +: (Q.REDUCE) ( x -- r ) + dup (QT) b! !b -if L1 DNEGATE L1: + 0 411774 UM/MOD drop 411774 UM/MOD drop + (QT) b! @b -if P1 drop inv 1 + jump J1 P1: drop J1: + dup -205888 + -if BIG drop + dup 205887 + -if OK drop 411774 + ; + OK: drop ; + BIG: drop -411774 + ; + +\ The Taylor loop both use; each sets (QT) up and jumps here. +: (TRIG) + T: (QT)+2 b! @b 0 (QT)+1 b! @b 0 Q.* drop + 0 (QT)+4 b! @b dup -1 + UM* drop 65536 UM* drop 0 Q./ drop + dup (QT)+2 b! !b + (QT)+5 b! @b if ADDT drop inv 1 + jump ACC ADDT: drop + ACC: (QT)+3 b! @b + !b (QT)+5 b! @b inv !b + (QT)+2 b! @b -10 + -if CONT drop jump END + CONT: drop (QT)+4 b! @b 2 + dup !b -12 + -if END2 drop jump T + END2: drop + END: (QT)+3 b! @b (QT) b! @b -if PR drop inv 1 + jump SD PR: drop + SD: dup -if SP drop -1 ; SP: drop 0 ; + +header Q.SIN +: Q.SIN ( x -- sin x ) + (Q.REDUCE) dup (QT) b! !b -if A1 inv 1 + A1: + dup (QT)+2 b! !b dup (QT)+3 b! !b + 0 over 0 Q.* drop (QT)+1 b! !b + 3 (QT)+4 b! !b -1 (QT)+5 b! !b jump (TRIG) +header Q.COS +: Q.COS ( x -- cos x ) + (Q.REDUCE) -if A1 inv 1 + A1: + 0 (QT) b! !b 0 over 0 Q.* drop (QT)+1 b! !b + 65536 (QT)+2 b! !b 65536 (QT)+3 b! !b + 2 (QT)+4 b! !b -1 (QT)+5 b! !b jump (TRIG) + +\ ---- printing ---- +\ The integer part, a point, five digits, a blank; always in decimal. +header Q.PRINT +: Q.PRINT ( q -- ) + dup (QP)+3 b! !b -if A DNEGATE A: (QP)+2 b! !b dup (QP)+1 b! !b + BASE b! @b (QP) b! !b 10 BASE b! !b + 65535 and 4 FOR dup 2* 2* + UNEXT 10 FOR 2/ UNEXT + 0 <# # # # # # drop drop 46 HOLD + (QP)+1 b! @b (QP)+2 b! @b dup push + push a! 0 pop 15 FOR +* UNEXT drop drop a + pop 15 FOR 2/ UNEXT HIMASK and + #S (QP)+3 b! @b SIGN #> + (QP) b! @b BASE b! !b + TYPE jump SPACE diff --git a/v4/capsule/quit.v4 b/v4/capsule/quit.v4 new file mode 100644 index 00000000..b378d5e6 --- /dev/null +++ b/v4/capsule/quit.v4 @@ -0,0 +1,392 @@ +\ quit.v4 -- a line of text, interpreted; how it ends; and the words that +\ print text written in the source. +\ +\ DECOMPOSITION.md 5.15 and 5.10: QUIT ABORT ABORT" (ABORT") ." (."). Part of +\ the compiler capsule. Rests on all the files before it. +\ +\ A NODE IS SENT TEXT (docs/v4.0.0/MESH.md section 6). It does not read its +\ own command line and prints no prompt. A node with nothing to do waits at +\ its ports; a neighbour writes it a message; if that is text for this node +\ it is interpreted; what it printed goes back as a message, and then a +\ message saying how the text ended: +\ 1 it completed a console says " ok" +\ 2 it ended in an error the message is already printed; " ERROR" +\ 0 QUIT nothing is said +\ What a console then shows is v3's: +\ ok> 65 EMIT the console's prompt, and the line +\ A ok what the line printed, then " ok" +\ ok> NOSUCH +\ UNKNOWN WORD: 'NOSUCH' +\ ERROR +\ ok> -1 @ +\ Address out of range an address fault (D-14), from any depth +\ ERROR +\ KEY, EXPECT and QUERY are FORTH-79 words that read characters, as before; +\ they are not how text reaches the node. They still read the console's +\ registers, CONSOLE-RX and CONSOLE-STATUS, and not a message. +\ +\ THE STACKS are guarded (D-16): each counts what it holds, and a push onto +\ a full one or a pop from an empty one is a fault. So QUIT and ABORT, which +\ never return to whatever ran them, must empty the return stack, and ABORT +\ the data stack too. A store to RSTACK-DEPTH or DSTACK-DEPTH does that. +\ +\ Constants the loader supplies: +\ (LINE-STATUS) word address of the variable: how the last text ended +\ (MSG) (REPLY) (ME) (OUT) (OUT^) see core.v4, "what a node prints" +\ (PORT) word address of the node's port 0; (PORT)+8 is "any port" and +\ (PORT)+9 the port the last read from that came on +\ (Q) word address of four cells of scratch, which system.v4 and +\ blocks.v4 use too +\ DSTACK-DEPTH RSTACK-DEPTH word addresses of the stack registers + +\ ( -- ) empty the return stack. `a` is only something to store: any +\ store to the register empties the stack, and `a` needs nothing to be on +\ the data stack. One cell of the data stack is used for a moment. +macro R-CLEAR RSTACK-DEPTH b! a !b endmacro + +\ ( -- ) stop compiling; forget the word being built and any open control +\ structures. A definition that was under way stays hidden. +: (RESET) 0 STATE a! ! (CG-RESET) CFBASE (CFP) a! ! ; + +\ ( s -- ) the text is done with. What it printed is sent, then a message +\ saying how it ended -- 0 QUIT, 1 completed, 2 an error -- and the node waits +\ for the next. (DONE) is entered with the same number and, for an error, +\ stops compiling first; it is always jumped to, never called, by +\ something that has emptied the return stack (or by a fault, which empties +\ it). (LINE-STATUS) keeps how the last text ended. +: (FINISH) ( s -- ) + (LINE-STATUS) b! dup !b + (FLUSH-OUT) + (DONE-PORT) a! @ (GATE) (MSG)+1 a! @ !b \ to whoever sent the text + 3 (HDR) 4 !b !b \ a message of type 3, four characters long: how it ended + jump (IDLE) + +: (DONE) + if GO -1 + if OK + drop (RESET) 2 jump (FINISH) + OK: drop 1 jump (FINISH) + GO: drop 0 jump (FINISH) + +\ ( -- ) WAITING. A node with nothing to do deals with the oldest of the +\ messages waiting (core.v4). With none waiting it is blocked reading its +\ ports (docs/v4.0.0/MESH.md 4.1): it executes nothing until a neighbour +\ writes, and what arrives is taken in as any message is, its first word +\ from any port and the rest from the port that came on. The message's +\ text goes into TIB, which holds 1024 characters, the most a message +\ carries; one that came with a length no message has is error 12. A +\ message of type 1 for this node is text to interpret: it is done as a +\ line was, and (FINISH) reports how it ended. A message for another node +\ is passed on, (PASS-ON). +: (IDLE) + L: (MQ#) a! @ if WAIT drop jump HAVE + WAIT: drop (PORT)+8 b! @b (PORT)+9 b! @b (PORT) + dup b! \ ( to port ) B: the port it came on + SWAP (TAKE) jump L + HAVE: + (MQ@) (MSG) a! ! (MQ@) (MSG)+1 a! ! (MQ@) (MSG)+2 a! ! (MQ@) (MSG)+3 a! ! + (MQ@) (MSG)+4 a! ! (MQ@) (MSG)+5 a! ! (MQ@) (MSG)+6 a! ! (MQ@) (REPLY) a! ! + (MSG)+6 a! @ -if SIZED + drop 0 (MSG)+6 a! ! 0 SPAN a! ! NODE-ERROR b! 12 !b \ no telling what it was + SIZED: drop + TIB 2/ 2/ (MSG)+6 a! @ 3 + 2/ 2/ if EMPTY + -1 + FOR (MQ@) over a! ! 1 + NEXT + drop jump READ + EMPTY: drop drop + READ: + 0 (MSG)+6 a! @ TIB + C! \ a zero after the text + (MSG)+6 a! @ SPAN a! ! + (MSG) a! @ (ME) a! @ xor if MINE drop jump (PASS-ON) + MINE: drop + (MSG)+2 a! @ -1 + if TEXT drop jump (IDLE) \ for this node and not text: let go + TEXT: drop + (MSG)+1 a! @ (PORT-FOR) if D0 jump D1 \ the way back to whoever sent it: + D0: drop (REPLY) a! @ \ the port it came on, if no other is known + D1: (DONE-PORT) a! ! + (CONSOLE) a! @ if P0 jump P1 \ where what it prints goes: the console, + P0: drop (MSG)+1 a! @ \ or whoever sent it + P1: dup (PRINT-TO) a! ! + (PORT-FOR) if Q0 jump Q1 + Q0: drop (REPLY) a! @ + Q1: (PRINT-PORT) a! ! + jump (LINE) + +\ ( -- ) A MESSAGE FOR ANOTHER NODE is passed on (MESH.md section 7): all +\ of it, as it came, to the port that leads toward that node. With no way +\ known it is let go, and (LOST) counts it. +: (PASS-ON) + (MSG) a! @ (PORT-FOR) if NOWAY + (GATE) (MSG) a! 6 FOR @+ !b UNEXT \ its seven words + (MSG)+6 a! @ 3 + 2/ 2/ if SENT + -1 + TIB 2/ 2/ a! FOR @+ !b UNEXT \ and its text + jump (IDLE) + SENT: drop jump (IDLE) + NOWAY: drop (LOST) a! @ 1 + ! jump (IDLE) + +\ ( -- ) THE TEXT, INTERPRETED. It is in TIB with a zero after it and its +\ length in SPAN, and the return stack is empty. It is interpreted with one +\ return entry under it, this word's call of INTERPRET; whatever is on the +\ data stack stays there. +: (LINE) + 0 BLK a! ! \ the terminal, whatever was being loaded + TIB (SRC) a! ! 0 >IN a! ! + 0 NODE-ERROR b! !b + INTERPRET + NODE-ERROR b! @b if GOOD + drop 2 jump (DONE) + GOOD: drop 1 jump (DONE) + +\ ---- the node among others (MESH.md sections 6 and 7) --------------------------- +\ Not FORTH-79 and not in v3: v3's VMs are sent to through the kernel. + +\ ( node port -- ) the port, by its number, leads toward that node +header ROUTE +: ROUTE + (ROUTE#) a! @ -16 + if FULL drop + (PORT) + (ROUTE#) a! @ 2* (ROUTES) + a! + push !+ pop !+ + (ROUTE#) a! @ 1 + ! ; + FULL: drop drop drop NODE-ERROR b! 12 !b ; + +\ ( node port -- ) the node on the other end of the port, by its number; +\ 0: none, or a device. Whoever wires the node tells it, and tells it again +\ when the wiring changes. It is what lets one of two neighbours, and one +\ only, wait to write to the other (core.v4, (GATE)). +header NEIGHBOUR +: NEIGHBOUR + dup -if POS jump BAD + POS: -PORTS + -if BAD drop (NEAR) + a! ! ; + BAD: drop drop drop NODE-ERROR b! 12 !b ; + +\ ( port -- ) the port, by its number, leads toward every node not told of +header DEFAULT-ROUTE +: DEFAULT-ROUTE (PORT) + (ROUTE-DEFAULT) a! ! ; + +\ ( -- ) forget every way: for when the wiring has changed +header NO-ROUTES +: NO-ROUTES 0 (ROUTE#) a! ! 0 (ROUTE-DEFAULT) a! ! ; + +\ ( baddr u node port -- ) send the node u characters of text to +\ interpret, by the port given, by its address. It is on its way when this +\ returns. The write waits for the neighbour to read, and is not begun +\ until it may be (core.v4, (GATE)). +: (SEND-ON) + (GATE) !b \ to + 1 (HDR) + dup !b \ length + 3 + 2/ 2/ if NONE -1 + + FOR dup C@ over 1 + C@ 8* + over 2 + C@ 8* 8* + over 3 + C@ 8* 8* 8* + !b 4 + NEXT + drop ; + NONE: drop drop ; + +\ ( baddr u node -- ) send the node u characters of text to interpret, +\ by the way this node knows to it. What it prints there goes to that +\ node's console. With no way to the node it is error 12. +header SEND +: SEND + dup (PORT-FOR) if NOWAY jump (SEND-ON) + NOWAY: drop drop drop drop NODE-ERROR b! 12 !b ; + +\ ( baddr u node port -- ) the same by a port this node names, by its +\ number, whatever ways it knows: for a neighbour that has no number of +\ its own yet, to which text is sent as to node 0. +header SEND-ON +: SEND-ON + dup -if POS jump BAD + POS: -PORTS + -if BAD drop (PORT) + jump (SEND-ON) + BAD: drop drop drop drop drop NODE-ERROR b! 12 !b ; + +\ ( node -- how ) WAIT FOR THE NODE'S WORD OF HOW TEXT ENDED: 0 QUIT, +\ 1 completed, 2 an error. This node is blocked reading its ports until a +\ message of type 3 comes for it from that node; every other message that +\ comes meanwhile is kept with the messages waiting. It waits for ever +\ for a node that never answers. +header AWAIT +: AWAIT + (AWAIT-FROM) a! ! + L: (PORT)+8 b! @b (PORT)+9 b! @b (PORT) + dup b! SWAP (TAKE-HDR) + (MQ-HDR) a! @ (ME) a! @ xor if A1 drop jump KEEP + A1: drop (MQ-HDR)+2 a! @ -3 + if A2 drop jump KEEP + A2: drop (MQ-HDR)+1 a! @ (AWAIT-FROM) a! @ xor if A3 drop jump KEEP + A3: drop (MQ-HDR)+6 a! @ -4 + if A4 drop jump KEEP + A4: drop @b ; \ its one word + KEEP: (TAKE-KEEP) jump L + +\ ( w port -- ) write a cell to the port, by its number. It waits until +\ the neighbour has taken it. This is how a node is sent a capsule of F18 +\ code (docs/v4.0.0/MESH.md section 5): the cells go as they are, not as a +\ message, to a node that is executing from its ports. +header PORT! +: PORT! + dup -if POS jump BAD + POS: -PORTS + -if BAD drop (PORT) + b! !b ; + BAD: drop drop drop NODE-ERROR b! 12 !b ; + +\ ( -- ) WHAT IS IN THE DICTIONARY NOW IS THE SYSTEM: COLD comes back to +\ it and FORGET will not go below it. Whoever has loaded a node's capsules +\ has it do this (system.v4, (BOOT) and FENCE). +header (SEAL) +: (SEAL) + DP a! @ (BOOT) a! ! + (LATEST) a! @ (BOOT)+1 a! ! + DP a! @ 3 + 2/ 2/ FENCE a! ! ; + +\ FORTH-79: clear the return stack, set execution mode, return control to +\ the terminal; no message is given. The data stack is left as it is. +\ NODE-ERROR, by name: how a definition written in FORTH raises an error. +\ A store of a code that is not zero is the trap of D-18 -- the word goes no +\ further, the message for the code is printed (-1: the word has printed +\ its own) and the line ends with ERROR. The codes are listed in core.v4. +header NODE-ERROR inline : NODE-ERROR' NODE-ERROR ; +header (ME) inline : (ME)' (ME) ; +header (CONSOLE) inline : (CONSOLE)' (CONSOLE) ; +header (LOST) inline : (LOST)' (LOST) ; +header (WORD-DEFINED) inline : (WORD-DEFINED)' (WORD-DEFINED) ; +header (WORD-FORGOTTEN) inline : (WORD-FORGOTTEN)' (WORD-FORGOTTEN) ; + +header QUIT +: QUIT R-CLEAR (RESET) CR 0 jump (DONE) + +\ FORTH-79: clear the data and return stacks, set execution mode, return +\ control to the terminal. As v3, the line it stops ends with " ok". +\ Both are emptied before anything is called: ABORT may be run with the +\ return stack full. +header ABORT +: ABORT R-CLEAR DSTACK-DEPTH b! a !b (RESET) 1 jump (DONE) + +\ ---- faults (D-14, D-16) ------------------------------------------------------- +\ Where the node goes when a programme uses an address outside its memory, +\ pushes onto a full stack or pops an empty one. The opcode that faulted did +\ nothing, and both stacks have been emptied. Each handler says what happened; +\ whatever was running is abandoned, as by ABORT, and the line ends with +\ ERROR. +: (FAULT) \ "Address out of range" + $72646441 (EMIT4) $20737365 (EMIT4) $2074756F (EMIT4) $7220666F (EMIT4) $65676E61 (EMIT4) CR + 2 jump (DONE) +: (D-OVER) \ "Stack overflow" + $63617453 (EMIT4) $766F206B (EMIT4) $6C667265 (EMIT4) $776F (EMIT4) CR + 2 jump (DONE) +: (D-UNDER) \ "Stack underflow" + $63617453 (EMIT4) $6E75206B (EMIT4) $66726564 (EMIT4) $776F6C (EMIT4) CR + 2 jump (DONE) +: (R-OVER) \ "Return stack overflow" + $75746552 (EMIT4) $73206E72 (EMIT4) $6B636174 (EMIT4) $65766F20 (EMIT4) $6F6C6672 (EMIT4) $77 (EMIT4) CR + 2 jump (DONE) +: (R-UNDER) \ "Return stack underflow" + $75746552 (EMIT4) $73206E72 (EMIT4) $6B636174 (EMIT4) $646E7520 (EMIT4) $6C667265 (EMIT4) $776F (EMIT4) CR + 2 jump (DONE) + +\ A word has stored an error code in NODE-ERROR (D-18; the codes are listed +\ in core.v4). Print its message -- a negative code means the word printed +\ its own -- and end the line with ERROR. The return stack has been +\ emptied; the data stack is as the word left it. +: (RAISED) + NODE-ERROR b! @b + -if POS drop 2 jump (DONE) + POS: -1 + if M1 -1 + if M2 -1 + if M3 -1 + if M4 + -1 + if M5 -1 + if M6 -1 + if M7 -1 + if M8 -1 + if M9 + -1 + if M10 -1 + if M11 -1 + if M12 -1 + if M13 -1 + if M14 + -1 + if M15 -1 + if M16 -1 + if M17 -1 + if M18 + drop 2 jump (DONE) + M1: drop $6167654E (EMIT4) $65766974 (EMIT4) $756F6320 (EMIT4) $746E (EMIT4) CR 2 jump (DONE) + M2: drop $20746F4E (EMIT4) $756E2061 (EMIT4) $7265626D (EMIT4) CR 2 jump (DONE) + M3: drop $626D754E (EMIT4) $74207265 (EMIT4) $6C206F6F (EMIT4) $676E6F (EMIT4) CR 2 jump (DONE) + M4: drop $20746F4E (EMIT4) $68632061 (EMIT4) $63617261 (EMIT4) $726574 (EMIT4) CR 2 jump (DONE) + M5: drop $74636944 (EMIT4) $616E6F69 (EMIT4) $66207972 (EMIT4) $6C6C75 (EMIT4) CR 2 jump (DONE) + M6: drop $656D614E (EMIT4) $73696D20 (EMIT4) $676E6973 (EMIT4) CR 2 jump (DONE) + M7: drop $746E6F43 (EMIT4) $206C6F72 (EMIT4) $75727473 (EMIT4) $72757463 (EMIT4) $696D2065 (EMIT4) $74616D73 (EMIT4) $6863 (EMIT4) CR 2 jump (DONE) + M8: drop $746E6F43 (EMIT4) $206C6F72 (EMIT4) $75727473 (EMIT4) $72757463 (EMIT4) $74207365 (EMIT4) $64206F6F (EMIT4) $706565 (EMIT4) CR 2 jump (DONE) + M9: drop $66696853 (EMIT4) $6F632074 (EMIT4) $20746E75 (EMIT4) $2074756F (EMIT4) $7220666F (EMIT4) $65676E61 (EMIT4) CR 2 jump (DONE) + M10: drop $746F7250 (EMIT4) $65746365 (EMIT4) $6F772064 (EMIT4) $6472 (EMIT4) CR 2 jump (DONE) + M11: drop $69766944 (EMIT4) $6E6F6973 (EMIT4) $20796220 (EMIT4) $6F72657A (EMIT4) CR 2 jump (DONE) + M12: drop $75677241 (EMIT4) $746E656D (EMIT4) $74756F20 (EMIT4) $20666F20 (EMIT4) $676E6172 (EMIT4) $65 (EMIT4) CR 2 jump (DONE) + M13: drop $636F6C42 (EMIT4) $756F206B (EMIT4) $666F2074 (EMIT4) $6E617220 (EMIT4) $6567 (EMIT4) CR 2 jump (DONE) + M14: drop $62206F4E (EMIT4) $6B636F6C (EMIT4) $20736920 (EMIT4) $6E696562 (EMIT4) $6F6C2067 (EMIT4) $64656461 (EMIT4) CR 2 jump (DONE) + M15: drop $65666544 (EMIT4) $64657272 (EMIT4) $726F7720 (EMIT4) $6F6E2064 (EMIT4) $65732074 (EMIT4) $74 (EMIT4) CR 2 jump (DONE) + M16: drop $20746F4E (EMIT4) $6F772061 (EMIT4) $6472 (EMIT4) CR 2 jump (DONE) + M17: drop $726F7453 (EMIT4) $20656761 (EMIT4) $75666572 (EMIT4) $646573 (EMIT4) CR 2 jump (DONE) + M18: drop $6F206F4E (EMIT4) $6F20656E (EMIT4) $6874206E (EMIT4) $70207461 (EMIT4) $74726F (EMIT4) CR 2 jump (DONE) + +\ The table the loader gives the node: six words, one for each kind of +\ fault in the node's order, each a jump. A jump fills its word, so they +\ are one after another. +: (FAULTS) + jump (FAULT) jump (D-OVER) jump (D-UNDER) jump (R-OVER) jump (R-UNDER) jump (RAISED) + +\ ---- text in the source --------------------------------------------------------- +\ The three run-time words have names, as v3's have, so that SEE can tell a +\ string in a definition from code; they cannot be used from the prompt. +\ ." and ABORT" take the text up to the next " , which may be none at all +\ (input.v4's (PARSE)); with no closing " it is the rest of the line. Inside a definition they lay +\ down a call to their run-time word and, after it, the text as a counted +\ string: the count byte and the characters, four to a cell, the last cell +\ filled with zeros. The run-time word finds the string by the return +\ address the call left, and returns to the cell after the string. + +\ ( -- ) lay the counted string in WBUF into the dictionary, as above. +\ (Q)+0 how many bytes are still to go, (Q)+1 which is next. +: (STRING,) + (FLUSH) + WBUF C@ 1 + (Q) a! ! 0 (Q)+1 a! ! + L: (Q) a! @ if DONE -1 + ! + (Q)+1 a! @ dup 1 + ! WBUF + C@ C, + jump L + DONE: drop + P: DP b! @b 3 and if ALIGNED drop 0 C, jump P + ALIGNED: drop ; + +\ The run time of ." : print the string after the call, go on after it. +\ It takes the return address off before it calls anything and keeps the +\ count there instead, so a word that prints text goes no deeper than one +\ that calls any other word. +header (.") compile-only +: (.") + pop 4* dup C@ \ baddr n + L: if DONE + push 1 + dup C@ EMIT pop -1 + jump L + DONE: drop 4/ 1 + push ; \ the cell after the last character + +\ FORTH-79: ." text" prints the text -- now, if interpreting; when the word +\ it is compiled into runs, if compiling. +header ." immediate +: DOT-QUOTE + 34 (PARSE) drop + STATE a! @ if NOW + drop &(.") (CALL,) jump (STRING,) + NOW: drop WBUF COUNT jump TYPE + +\ ( flag -- ) the run time of ABORT" : if the flag is not zero print the +\ string after the call, start a new line and ABORT; otherwise go on after +\ the string. +header (ABORT") compile-only +: (ABORT") + if NO + drop pop 4* R-CLEAR COUNT TYPE CR jump ABORT + NO: drop pop 4* dup C@ + 4/ 1 + push ; + +\ ( flag -- ) ABORT" text" as v3 (it is FORTH-83's, not FORTH-79's): if +\ the flag is not zero, print the text and ABORT. +header ABORT" immediate +: ABORT-QUOTE + 34 (PARSE) drop + STATE a! @ if NOW + drop &(ABORT") (CALL,) jump (STRING,) + NOW: drop if NO + drop WBUF COUNT TYPE CR jump ABORT + NO: drop ; + +\ The run time of S" : leave the address and length of the string after the +\ call, and go on after it. +header (S") compile-only +: (S") + pop 4* dup C@ \ baddr n + over over + 4/ 1 + push \ the cell after the last character + push 1 + pop ; \ baddr+1 n + +\ ( -- baddr u ) S" text" as v3. In a definition the text is compiled +\ into it. At the prompt it is copied to PAD, where it stays until PAD is +\ used again: WORD's buffer is overwritten by the very next word of the line. +header S" immediate +: S-QUOTE + 34 (PARSE) drop + STATE a! @ if NOW + drop &(S") (CALL,) jump (STRING,) + NOW: drop WBUF+1 PAD WBUF C@ CMOVE PAD WBUF jump C@ diff --git a/v4/capsule/system.v4 b/v4/capsule/system.v4 new file mode 100644 index 00000000..aa48a364 --- /dev/null +++ b/v4/capsule/system.v4 @@ -0,0 +1,170 @@ +\ system.v4 -- words about the dictionary as a whole: WORDS, FORGET, FENCE. +\ +\ DECOMPOSITION.md 5.13 and 5.15. Part of the compiler capsule; rests on +\ dict.v4, quit.v4 and forth.v4. +\ +\ Constants the loader supplies: +\ FENCE word address of the variable: FORGET will not remove an entry +\ that starts below the address it holds +\ VOC-LINK word address of the variable: the newest vocabulary, or 0 +\ (BOOT) word address of two cells: DP and (LATEST) as the loader left them + +header FENCE inline : FENCE' FENCE ; + +\ ---- vocabularies (FORTH-79) ---------------------------------------------------- +\ A vocabulary is two cells: its head -- the xt of its newest entry, or 0 -- +\ and the address of the vocabulary defined before it, or 0. VOC-LINK holds +\ the newest one's address. FORTH's head is (LATEST) and it is in no chain. +header CONTEXT inline : CONTEXT' CONTEXT ; +header CURRENT inline : CURRENT' CURRENT ; + +\ FORTH-79: the primary vocabulary; it becomes the CONTEXT vocabulary. +header FORTH immediate +: FORTH (LATEST) CONTEXT a! ! ; +\ FORTH-79: new definitions go into the CONTEXT vocabulary from now on. +header DEFINITIONS +: DEFINITIONS CONTEXT a! @ CURRENT a! ! ; + +\ VOCABULARY xxx FORTH-79: xxx is a new, empty list of words; executing +\ xxx makes it the CONTEXT vocabulary. When a search of it finds nothing, +\ FORTH is searched. +: (DOVOC) pop CONTEXT a! ! ; +header VOCABULARY +: VOCABULARY + &(DOVOC) (C)+3 a! ! (DATA) (C)+8 a! @ if NONE drop + 0 , VOC-LINK a! @ , HERE -2 + VOC-LINK a! ! ; + NONE: drop ; + +\ ( cell -- ) print the name of the vocabulary whose head cell this is +: (.VOC) + dup (LATEST) xor if F drop -1 + -2 + a! @ 4* COUNT 31 and jump TYPE + F: drop drop $54524F46 (EMIT4) $48 (EMIT4) ; + +\ ( -- ) as v3's, but true: where names are looked for, and where new ones go +header ORDER +: ORDER + $72616553 (EMIT4) $6F206863 (EMIT4) $72656472 (EMIT4) $203A (EMIT4) + CONTEXT a! @ dup (.VOC) SPACE + (LATEST) xor if ONLY drop (LATEST) (.VOC) jump TWO + ONLY: drop + TWO: CR + $72727543 (EMIT4) $3A746E65 (EMIT4) $20 (EMIT4) + CURRENT a! @ (.VOC) jump CR + +\ ( -- ) the names in the CONTEXT vocabulary, the newest first, a blank after +\ each, a new line whenever one has passed column 64. Hidden entries -- a +\ definition under way -- are not shown. (Q)+0 is the column. +header WORDS +: WORDS + 0 (Q) a! ! + CONTEXT a! @ a! @ + L: if DONE + dup -3 + a! @ 2 and if SHOW drop jump NXT + SHOW: drop + dup -2 + a! @ 4* COUNT 31 and \ xt baddr u + dup (Q) a! @ + 1 + ! + TYPE SPACE + (Q) a! @ -64 + -if WRAP drop jump NXT + WRAP: drop CR 0 (Q) a! ! + NXT: -1 + a! @ jump L + DONE: drop jump CR +header VLIST +: VLIST jump WORDS + +\ ( cell -- ) take off a vocabulary's list every entry at or above the +\ address in (Q)+0. The newest are first, so it stops at the first one below. +: (PRUNE) + (Q)+1 a! ! + L: (Q)+1 a! @ a! @ if DONE + dup (Q) a! @ inv + 1 + -if CUT drop drop ; + CUT: drop -1 + a! @ (Q)+1 a! @ a! ! jump L + DONE: drop ; + +\ FORGET xxx FORTH-79: remove xxx and every word defined after it, in +\ whatever vocabulary; the space they took is free again. A vocabulary that +\ goes is no longer CONTEXT or CURRENT: FORTH is. A word that is not there +\ is an error, and so is one below FENCE, which is where the capsule's own +\ words are (code 10, "Protected word"). +header FORGET +: FORGET + 32 WORD (LOOKUP) if MISSING + -2 + a! @ \ where its name starts + dup FENCE a! @ inv + 1 + -if OK \ name - fence + drop drop NODE-ERROR b! 10 !b ; + OK: drop + dup (Q) a! ! 4* DP a! ! \ the space from its name on + (LATEST) (PRUNE) + V: VOC-LINK a! @ if PRUNED \ vocabularies that go + dup (Q) a! @ inv + 1 + -if GONE drop jump KEPT + GONE: drop 1 + a! @ VOC-LINK a! ! jump V + KEPT: P: if PRUNED \ the lists of those that stay + dup (PRUNE) 1 + a! @ jump P + PRUNED: drop + CONTEXT a! @ (Q) a! @ inv + 1 + -if C1 drop jump C2 + C1: drop (LATEST) CONTEXT a! ! + C2: CURRENT a! @ (Q) a! @ inv + 1 + -if C3 drop jump TOLD + C3: drop (LATEST) CURRENT a! ! + TOLD: (Q) a! @ jump (FORGOTTEN) \ the kernel's records of them go too (dict.v4) + MISSING: drop (UNKNOWN) drop ; + +\ ---- the system as a whole ------------------------------------------------------- +\ (BOOT) is two cells the loader fills when the capsule is in place: DP and +\ the newest FORTH entry as they then are. COLD goes back to them. + +\ FORTH-79: execute to be sure a FORTH-79 system is there. It is: nothing +\ happens. (v3's prints two lines and leaves a flag.) +header 79-STANDARD +: 79-STANDARD ; + +\ ( -- ) which system this is, and its cell width +header VERSION +: VERSION + $72617453 (EMIT4) $74726F46 (EMIT4) $34762068 (EMIT4) $302E302E (EMIT4) $38314620 (EMIT4) $20 (EMIT4) + N-1 1 + 0 U-DOT-R $7469622D (EMIT4) CR ; + +\ ( -- ) clear the screen and put the cursor at the top, as v3: ESC [2J ESC [H +header PAGE +: PAGE 27 EMIT 91 EMIT 50 EMIT 74 EMIT 27 EMIT 91 EMIT 72 jump EMIT + +\ ( -- ) as v3's message, and then ABORT: both stacks emptied, the prompt +header WARM +: WARM + $54524F46 (EMIT4) $39372D48 (EMIT4) $72615720 (EMIT4) $7453206D (EMIT4) $747261 (EMIT4) CR + $74737953 (EMIT4) $72206D65 (EMIT4) $61747365 (EMIT4) $64657472 (EMIT4) $2E (EMIT4) CR + jump ABORT + +\ ( -- ) the system as it was when the capsule had just been loaded: +\ everything defined since is gone, there is one vocabulary, numbers are +\ decimal, the block buffers are empty. Then as WARM. +header COLD +: COLD + (BOOT) a! @ DP a! ! + (BOOT)+1 a! @ (LATEST) a! ! + (BOOT) a! @ 2/ 2/ FENCE a! ! + (LATEST) CONTEXT a! ! (LATEST) CURRENT a! ! 0 VOC-LINK a! ! + 10 BASE a! ! 0 SCR a! ! 2 (LOG-LEVEL) a! ! 0 (ACL-HOOK) a! ! EMPTY-BUFFERS + (BOOT) a! @ 2/ 2/ (FORGOTTEN) \ the kernel's records of what has gone go too (dict.v4) + $54524F46 (EMIT4) $39372D48 (EMIT4) $6C6F4320 (EMIT4) $74532064 (EMIT4) $747261 (EMIT4) CR + $74737953 (EMIT4) $69206D65 (EMIT4) $6974696E (EMIT4) $7A696C61 (EMIT4) $2E6465 (EMIT4) CR + jump ABORT + +\ ---- deferred words (as v3) ------------------------------------------------------- +\ DEFER xxx makes xxx, which does whatever word it has been given: +\ ' yyy IS xxx gives it one; DEFER@ xxx leaves the one it has. A deferred +\ word with none is an error (code 15, "Deferred word not set"). +: (DODEFER) + pop a! @ if UNSET push ; \ go to it: it returns to xxx's caller + UNSET: drop NODE-ERROR b! 15 !b ; +header DEFER +: DEFER &(DODEFER) (C)+3 a! ! (DATA) (C)+8 a! @ if NONE drop 0 jump , NONE: drop ; +: (is!) a! ! ; +: (defer@) a! @ ; +header IS immediate +: IS + (') STATE a! @ if NOW drop (LIT,) &(is!) jump (CALL,) + NOW: drop jump (is!) +header DEFER@ immediate +: DEFER@ + (') STATE a! @ if NOW drop (LIT,) &(defer@) jump (CALL,) + NOW: drop jump (defer@) + diff --git a/v4/capsule/tools.fth b/v4/capsule/tools.fth new file mode 100644 index 00000000..a987ce0d --- /dev/null +++ b/v4/capsule/tools.fth @@ -0,0 +1,82 @@ +\ tools.fth -- SEE, in FORTH. +\ +\ This file is FORTH source, compiled by the node a line at a time; no line +\ is longer than 79 characters. +\ +\ v4 code is native: a definition is instruction words, six five-bit opcodes +\ to a word, so SEE is a disassembler. It prints the name, then each +\ instruction word on a line: the opcodes by name, a literal's value after +\ its @p, and after a call or a branch the name of the word it goes to, or +\ the address if that is not a word. Text compiled by ." S" or ABORT" is +\ shown in quotes after the call it follows. Padding (nop) is not shown. +\ It stops at the first ; ex or jump that no earlier branch goes past. + +FORTH DEFINITIONS + +\ the opcode names, five characters each, in the order of their numbers +: (OPS1) S" ; ex jump call unextnext if -if @p @+ @b @ " ; +: (OPS2) S" !p !+ !b ! +* 2* 2/ inv + and xor drop " ; +: (OPS3) S" dup pop over a nop push b! a! " ; +: (.OP) ( op -- ) + DUP 12 < IF (OPS1) ELSE DUP 24 < IF 12 - (OPS2) ELSE 24 - (OPS3) THEN THEN + DROP SWAP 5 * + 5 -TRAILING TYPE ; + +VARIABLE (SP) \ the address after the instruction word being shown +VARIABLE (SW) \ that word +VARIABLE (SK) \ the slot +VARIABLE (SOP) \ the opcode last shown +VARIABLE (SLITS) \ how many literals the word has had so far +VARIABLE (SEND) \ the furthest a branch has gone forward +VARIABLE (SN) \ how many lines + +\ ( -- xt ) the newest word of FORTH +: (HEAD) CONTEXT @ >R [COMPILE] FORTH CONTEXT @ @ R> CONTEXT ! ; +\ ( addr xt -- baddr | 0 ) the name of the word at addr, in the list from xt +: (IN-LIST) + BEGIN DUP WHILE 2DUP = IF SWAP DROP >NAME EXIT THEN >LINK @ REPEAT + SWAP DROP ; +\ ( addr -- ) its name if it is a word, else the number +: (.ADDR) + DUP CONTEXT @ @ (IN-LIST) ?DUP 0= IF DUP (HEAD) (IN-LIST) THEN + ?DUP IF COUNT 31 AND TYPE DROP ELSE 0 .R THEN ; +\ ( -- addr ) where the branch in this slot goes +: (TARGET) + 1 27 (SK) @ 5 * - LSHIFT 1- + DUP INVERT (SP) @ AND SWAP (SW) @ AND OR ; +\ ( addr -- ) after a call to addr: if it is one of the words that are +\ followed by text, show the text and count its cells with the literals +: (TEXT?) + DUP ['] (.") = OVER ['] (ABORT") = OR OVER ['] (LOG") = OR + SWAP ['] (S") = OR IF + (SP) @ (SLITS) @ + 4 * COUNT 34 EMIT 2DUP TYPE 34 EMIT SPACE + SWAP DROP 4 + 4 / (SLITS) +! + THEN ; +\ ( -- flag ) show this slot; true if the instruction word ends with it +: (SLOT) + (SW) @ 27 (SK) @ 5 * - RSHIFT 31 AND + DUP 28 = IF DROP 0 EXIT THEN + DUP (SOP) ! DUP (.OP) SPACE + DUP 8 = IF (SP) @ (SLITS) @ + @ . 1 (SLITS) +! THEN + DUP 2 = OVER 3 = OR OVER 5 = OR OVER 6 = OR OVER 7 = OR IF + (TARGET) DUP (.ADDR) SPACE + SWAP 3 = IF (TEXT?) ELSE (SEND) @ MAX (SEND) ! THEN + -1 EXIT + THEN + 2 < ; +: (SEE-LINE) ( -- ) + (SP) @ @ (SW) ! 1 (SP) +! 0 (SLITS) ! 0 (SK) ! 28 (SOP) ! + 2 SPACES + BEGIN (SLOT) IF -1 ELSE 1 (SK) +! (SK) @ 6 = THEN UNTIL + CR (SLITS) @ (SP) +! ; +: (SEE-CODE) ( xt -- ) + DUP (SP) ! (SEND) ! 0 (SN) ! + BEGIN (SEE-LINE) 1 (SN) +! + (SOP) @ 3 < (SP) @ (SEND) @ > AND (SN) @ 63 > OR + UNTIL ; + +\ SEE xxx show the word xxx +: SEE + FIND DUP 0= ABORT" SEE: not found" + ." : " DUP >NAME COUNT 31 AND TYPE CR + DUP 3 - @ 4 AND IF ." data: " DUP 1+ @ . CR ELSE DUP (SEE-CODE) THEN + 3 - @ 1 AND IF ." IMMEDIATE" CR THEN ; diff --git a/v4/capsule/words.v4 b/v4/capsule/words.v4 new file mode 100644 index 00000000..717135b3 --- /dev/null +++ b/v4/capsule/words.v4 @@ -0,0 +1,201 @@ +\ words.v4 -- more of the FORTH vocabulary: the stack, comparison, double, +\ mixed, shift and string words that are short runs of opcodes or small loops. +\ +\ Each is the definition DECOMPOSITION.md gives (sections 4, 5.1 - 5.7, 5.9) +\ and the mesh-node tests execute (test_cells.c, test_foundation.c, +\ test_strings.c), here as words of the host node's vocabulary. Rests on +\ core.v4, forth.v4 and numout.v4. +\ +\ Constants the loader supplies: +\ MAX-INT the largest positive number: every bit but the top one +\ (X) word address of four cells of scratch for COMPARE and SEARCH + +\ ---- stack ---- +header 2SWAP +: 2SWAP ( a b c d -- c d a b ) ROT push ROT pop ; +header 2OVER +: 2OVER ( a b c d -- a b c d a b ) push push over over pop pop jump 2SWAP +header 2ROT +: 2ROT ( a b c d e f -- c d e f a b ) push push 2SWAP pop pop jump 2SWAP +header 2>R inline compile-only : 2>R SWAP push push ; +header 2R> inline compile-only : 2R> pop pop SWAP ; +header 2R@ inline compile-only : 2R@ pop pop over over push push SWAP ; +header NOP inline : NOP' nop ; +header TRUE inline : TRUE -1 ; +header FALSE inline : FALSE 0 ; +header INVERT inline : INVERT inv ; + +\ ---- memory ---- +header 2@ +: 2@ ( addr -- lo hi ) a! @+ @ ; +header 2! +: 2! ( lo hi addr -- ) a! SWAP !+ ! ; +header -! +: -! ( n addr -- ) a! NEGATE @ + ! ; + +\ ---- comparison ---- +header 0<> +: 0<> if Z drop -1 ; Z: ; +header 0> +: 0> -if NN drop 0 ; NN: if Z drop -1 ; Z: ; +header <> +: <> xor jump 0<> +header <= +: <= GREATER jump 0= +header >= +: >= LESS jump 0= +header U< +: U< over over xor -if SAME drop NIP jump 0< + SAME: drop - jump 0< +header U> +: U> SWAP jump U< +header ABS +: ABS -if P inv 1 + P: ; +header MAX +: MAX over over LESS if A drop push drop pop ; A: drop drop ; +header MIN +: MIN over over LESS if B drop drop ; B: drop push drop pop ; +header WITHIN +: WITHIN ( n low high -- flag ) push over pop LESS push LESS inv pop and ; + +\ ---- shifts ---- +\ As v3, a count that is negative or as large as the cell is wide is an +\ error (code 9, "Shift count out of range"). +header LSHIFT +: LSHIFT ( x n -- x' ) + -if NN jump BAD + NN: dup N-1 inv + -if BAD2 drop + L: if DONE -1 + push 2* pop jump L + DONE: drop ; + BAD2: drop + BAD: drop drop NODE-ERROR b! 9 !b ; +header RSHIFT +: RSHIFT ( x n -- x' ) \ zeros come in at the top + -if NN jump BAD + NN: dup N-1 inv + -if BAD2 drop + L: if DONE -1 + push 2/ MAX-INT and pop jump L + DONE: drop ; + BAD2: drop + BAD: drop drop NODE-ERROR b! 9 !b ; + +\ ---- doubles and mixed ---- +header D- +: D- DNEGATE jump D+ +header DABS +: DABS -if P jump DNEGATE P: ; +header D0= +: D0= OR jump 0= +header D0< +: D0< push drop pop jump 0< +header D= +: D= D- jump D0= +header D2* +: D2* 2* over -if P drop 1 + jump J P: drop J: push 2* pop ; +header D2/ +: D2/ push a! 0 pop +* push drop a pop ; +header M+ +: M+ S>D jump D+ +header M- +: M- S>D DNEGATE jump D+ + +\ ( d1 d2 -- d1 d2 flag ) the flag's top bit is set exactly when d1 < d2 +: (D<) + dup push push over pop over over xor if TIE + drop over over xor -if HS drop drop jump S1 + HS: drop push inv pop + inv + S1: -if N1 drop -1 jump D1 N1: drop 0 + D1: pop SWAP ; + TIE: drop drop drop dup push push over pop + over over xor -if LS drop NIP jump S2 + LS: drop push inv pop + inv + S2: -if N2 drop -1 jump D2 N2: drop 0 + D2: pop pop ROT ; +header D< +: D< (D<) push drop drop drop drop pop ; +header DMAX +: DMAX (D<) if L drop push push drop drop pop pop ; L: drop drop drop ; +header DMIN +: DMIN (D<) if L drop drop drop ; L: drop push push drop drop pop pop ; + +\ ---- strings and memory ---- +header ?TERMINAL +: ?TERMINAL ( -- flag ) CONSOLE-STATUS b! @b ; + +header CMOVE> +: CMOVE> ( src dst u -- ) + -if OK drop drop drop NODE-ERROR b! 1 !b ; + OK: if DONE -1 + push + over pop dup push + C@ + over pop dup push + C! + pop jump OK + DONE: drop drop drop ; + +\ FORTH-79: n cells from addr1 to addr2, the cell at addr1 first. +header MOVE +: MOVE ( addr1 addr2 n -- ) + -if OK drop drop drop ; + OK: if DONE push over a! @ over a! ! 1 + push 1 + pop pop -1 + jump OK + DONE: drop drop drop ; + +header FILL +: FILL ( baddr u c -- ) + SWAP push SWAP pop \ c baddr u + -if OK drop drop drop NODE-ERROR b! 1 !b ; + OK: if DONE push over over C! 1 + pop -1 + jump OK + DONE: drop drop drop ; +header ERASE +: ERASE ( baddr u -- ) 0 jump FILL +header BLANK +: BLANK ( baddr u -- ) 32 jump FILL + +header -TRAILING +: -TRAILING ( baddr u -- baddr u' ) + -if L drop 0 ; + L: if DONE over over + -1 + C@ -32 + if SP drop ; + SP: drop -1 + jump L + DONE: ; + +header COMPARE +: COMPARE ( a1 u1 a2 u2 -- n ) + -if A drop 0 A: (X)+1 b! !b + SWAP -if B drop 0 B: dup (X) b! !b + (X)+1 b! @b + over over - -if GE drop drop jump M + GE: drop push drop pop + M: + L: if EQ push + over C@ over C@ - if SAME + -if GT drop drop drop pop drop -1 ; + GT: drop drop drop pop drop 1 ; + SAME: drop 1 + push 1 + pop pop -1 + jump L + EQ: drop drop drop (X) b! @b (X)+1 b! @b - + -if NN drop -1 ; + NN: if ZZ drop 1 ; + ZZ: ; + +header SEARCH +: SEARCH ( a1 u1 a2 u2 -- a3 u3 flag ) + -if A drop 0 A: (X)+1 b! !b (X) b! !b + -if B drop 0 B: dup (X)+3 b! !b over (X)+2 b! !b + L: dup (X)+1 b! @b - -if TRY + drop drop drop (X)+2 b! @b (X)+3 b! @b 0 ; + TRY: drop over (X) b! @b (X)+1 b! @b + I: if MATCH push + over C@ over C@ xor if SAME + drop drop drop pop drop push 1 + pop -1 + jump L + SAME: drop 1 + push 1 + pop pop -1 + jump I + MATCH: drop drop drop -1 ; + +header SCAN +: SCAN ( baddr u c -- baddr' u' ) + 255 and push -if L drop 0 + L: if DONE over C@ pop dup push xor if FOUND + drop push 1 + pop -1 + jump L + FOUND: drop + DONE: pop drop ; +header SKIP +: SKIP ( baddr u c -- baddr' u' ) + 255 and push -if L drop 0 + L: if DONE over C@ pop dup push xor if SAME drop jump DONE + SAME: drop push 1 + pop -1 + jump L + DONE: pop drop ; diff --git a/v4/include/v4/asm.h b/v4/include/v4/asm.h new file mode 100644 index 00000000..619cd9d0 --- /dev/null +++ b/v4/include/v4/asm.h @@ -0,0 +1,68 @@ +/* asm.h -- slot packer for hand-assembled test programs. + * + * This is not the compiler capsule (JUSTIFICATION.md section 9). It exists so + * that tests can write a DECOMPOSITION.md definition opcode by opcode and have + * the slots, literals and branch targets laid out the way section 1.2 and + * section 2 require, instead of packing words by hand in every test. + * + * Layout rules it applies: + * + * - Opcodes fill slots 0..5 left to right; a full word is written out and a + * new one started. Unused slots are padded with `nop`. + * - A literal is `@p` in a slot plus its value in the word after the + * instruction word. Several literals in one word follow it in order. + * - `;` and `ex` close the word, since nothing after them executes. + * - A branch closes the word, since the bits to its right are its address. + * If the next free slot is 4 or 5 the word is closed first, because + * branches are legal in slots 0-3 only. + * - A branch target must lie in the same page as P at the time the branch + * executes, for the reach of the slot it landed in. Otherwise the + * assembler sets its error flag rather than emit a branch that goes + * somewhere else. + */ +#ifndef V4_ASM_H +#define V4_ASM_H + +#include "v4/iword.h" +#include "v4/node.h" + +typedef struct { + v4_node *n; + v4_cell here; /* address of the word being built */ + v4_iword cur; + unsigned slot; /* next free slot, 0..V4_SLOT_COUNT */ + v4_cell lit[V4_SLOT_COUNT]; /* literals owed after this word */ + unsigned nlit; + int error; +} v4_asm; + +/* A branch whose target is not known yet. */ +typedef struct { + v4_cell addr; /* the word holding the branch */ + unsigned slot; + v4_cell p; /* P when the branch executes */ +} v4_asm_ref; + +void v4_asm_begin(v4_asm *as, v4_node *n, v4_cell origin); + +/* Any opcode that is neither a branch nor `@p`. */ +void v4_asm_op(v4_asm *as, unsigned op); + +/* `@p` and its value. */ +void v4_asm_lit(v4_asm *as, v4_cell value); + +/* jump, call, next, if, -if to a known address. */ +void v4_asm_branch(v4_asm *as, unsigned op, v4_cell target); + +/* The same with the target supplied later by v4_asm_resolve. */ +v4_asm_ref v4_asm_branch_fwd(v4_asm *as, unsigned op); +void v4_asm_resolve(v4_asm *as, v4_asm_ref ref, v4_cell target); + +/* Close the word being built and return the address of the next one. This is + * how a label is taken: branch targets are word addresses. */ +v4_cell v4_asm_label(v4_asm *as); + +/* 1 if nothing went wrong so far. Closes the word being built. */ +int v4_asm_ok(v4_asm *as); + +#endif /* V4_ASM_H */ diff --git a/v4/include/v4/blocks.h b/v4/include/v4/blocks.h new file mode 100644 index 00000000..499fa6c9 --- /dev/null +++ b/v4/include/v4/blocks.h @@ -0,0 +1,84 @@ +/* blocks.h -- a node asks its kernel for a block. + * docs/v4.0.0/MESH.md section 8, docs/v4.0.0/ENGINE.md 3.3, + * docs/v4.0.0/V3-PARITY.md 1d. + * + * A node only ever asks for a block by number, and it asks the kernel: a + * request written to the port where its kernel is, as any kernel word is. + * This is v3's way (v3/src/word_source/block_words.c). The node has a + * WINDOW in its memory, V4_BLOCK_SLOTS slots of 256 cells, as a v3 VM has + * four slots of 1 KiB at the top of its memory. The kernel keeps the + * record of which block is in which slot and does all the copying, and it + * writes into the window and nowhere else in the node. The requests, the + * same for every node: + * + * V4_REQ_BLOCK ( n -- waddr status ) the slot that holds block n, read + * from storage if it is not in one + * V4_REQ_BUFFER ( n -- waddr status ) a slot for block n, of zeros if it + * is not in one: nothing is read + * V4_REQ_UPDATE ( -- status ) the block most recently asked for + * is marked changed + * V4_REQ_SAVE_BUFFERS ( -- status ) every block marked is written + * V4_REQ_EMPTY_BUFFERS ( -- ) every slot is let go; nothing is + * written + * + * Their numbers are below zero: the requests a host names for its own + * words (KERNEL-WORD) count up from 1. + * + * waddr is the word address of the slot, or 0 when the status is not 0. + * The status is 0; or V4_BLOCK_RANGE, there is no such block; or + * V4_BLOCK_REFUSED: storage would not have a block that had to be written, + * the stack did not hold the request's argument, or the window is not all + * in the node's memory. + * + * WHEN A BLOCK IS WRITTEN is FORTH-79's: UPDATE marks it, and it is written + * by SAVE-BUFFERS or when its slot is wanted for another block. (v3's + * UPDATE copies the slot to the kernel at once; the standard is followed.) + * A slot whose block is not marked is taken before one whose block is. A + * block that storage would not take is let go of: its slot is empty. + * + * When the kernel's chain of devices changes, everything in the slots is + * let go and nothing of it is written, as v3 does (blk_vm_check_epoch). + * + * A block is 1024 bytes and 256 cells, four bytes to a cell, the first + * lowest, whatever the cell width: a block read leaves the rest of each + * cell zero, and a write takes the low 32 bits. + * + * The blocks are the kernel's block subsystem's (v3/src/block_subsystem.c). + * Who may have which block is not checked here yet (MESH.md 8.4). + */ +#ifndef V4_BLOCKS_H +#define V4_BLOCKS_H + +#include "v4/node.h" + +#define V4_REQ_BLOCK (-1) +#define V4_REQ_BUFFER (-2) +#define V4_REQ_UPDATE (-3) +#define V4_REQ_SAVE_BUFFERS (-4) +#define V4_REQ_EMPTY_BUFFERS (-5) + +#define V4_BLOCK_OK 0 +#define V4_BLOCK_REFUSED 2 +#define V4_BLOCK_RANGE 3 + +#define V4_BLOCK_SLOTS 4u + +/* What the kernel keeps for one node. */ +typedef struct { + v4_cell window; /* word address of the first slot */ + uint32_t block[V4_BLOCK_SLOTS]; /* the block in each slot; 0: none */ + unsigned char changed[V4_BLOCK_SLOTS]; /* UPDATEd and not yet written */ + unsigned next; /* where the search for a slot to take begins */ + int last; /* the slot most recently asked for; -1: none */ + uint64_t epoch; /* the chain as it was when the slots were filled */ +} v4_blocks; + +/* A node's window is at `window`, and nothing is in it. */ +void v4_blocks_init(v4_blocks *w, v4_cell window); + +/* If `request` is one of the five, serve it for the node and return 1. + * Otherwise touch nothing and return 0. The node is stopped, blocked at + * its port, when this is called. */ +int v4_blocks_serve(v4_blocks *w, v4_node *n, v4_cell request); + +#endif /* V4_BLOCKS_H */ diff --git a/v4/include/v4/boot.h b/v4/include/v4/boot.h new file mode 100644 index 00000000..10305877 --- /dev/null +++ b/v4/include/v4/boot.h @@ -0,0 +1,85 @@ +/* boot.h -- how a StarForth v4 system comes up: the nucleus, then its + * capsules, then the prompt. docs/v4.0.0/NUCLEUS.md. + * + * The hosted binary (tools/hosted.c) and the bare-metal kernel + * (kernel/src/v4/sk_v4.c) both call v4_boot_run and differ only in where + * the text goes. So the two start the same way and print the same lines: + * + * PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x... capsule_hash=0x... words=N + * PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x... capsule_hash=0x... dict_hash=0x... + * PARITY:V4_POST tests=N pass=N fail=N (POST is the kernel's: v4/post.h) + * PARITY:V4_SYSTEM word_count=N dict_hash=0x... (the system as sealed, after POST) + * PARITY:OK + * POST: PASSED + * + * or, if anything is wrong, what was wrong and then + * + * PARITY:FAIL + * POST: FAILED + * + * A capsule is found by name in the directory tools/mkcapsule.c baked into + * the binary, its hash is recomputed, its signature is checked -- one that + * does not verify refuses the capsule, a missing one is only reported, as + * for v3's capsules -- and its blocks are handed to the node a line at a + * time (docs/v4.0.0/ENGINE.md 3.1). Every line must complete; the first + * that ends in an error, or in QUIT, ends the boot. What a line prints is + * shown. + * + * The dictionary hash is FNV-1a over the node's memory below HERE, a cell at + * a time, low byte first, then LATEST. It does not depend on the machine: + * every build of one commit, with one cell width, prints the same hashes. + */ +#ifndef V4_BOOT_H +#define V4_BOOT_H + +#include "v4/image.h" +#include "v4/message.h" + +typedef struct { + v4_node *n; + v4_exec_state *es; + v4_heat *h; + const v4_image *im; /* the nucleus */ + void (*out)(const char *text, unsigned len); /* the console */ + int (*key)(void); /* a character for a line that reads the keyboard, or 0: there is none */ + + /* THE KERNEL'S WORDS (docs/v4.0.0/ENGINE.md 3.3). `words` names them, + * `word_count` of them; the boot makes each a word on the node (KERNEL- + * WORD, v4/capsule/compile.v4) whose request number is its place in the + * list, counting from 1. When the node writes a request to its port it + * is blocked, and `serve` is called with the number: it takes the + * word's arguments from the node's data stack and leaves its results + * there, and when it returns the node goes on. The kernel's two block + * requests (v4/blocks.h) are served for every node and are not in the + * list. Any other request is an error on the node: 12, Argument out of + * range. */ + const char *const *words; + unsigned word_count; + void (*serve)(v4_node *n, unsigned request); + +} v4_boot; + +/* What `key` returns when it has no character. */ +#define V4_BOOT_KEY_NONE (-1) /* not yet: it is asked again */ +#define V4_BOOT_KEY_END (-2) /* and there never will be */ + +/* A node is born empty (v4_image_born); it is sent the nucleus through its + * port; and the capsules are loaded. Its blocks are the kernel's block + * subsystem's, which whoever calls this has set up (v4/blocks.h). Returns 1 with the node idle, + * waiting to be handed a line; or 0, the failure printed. It prints no + * prompt: that is the host's. */ +int v4_boot_run(const v4_boot *b); + +/* Hand the node a line and run it to its end, sending what it prints to + * `out`. The line is sent to the node as a message and what it prints + * comes back as messages (message.h). Returns how it ended -- V4_TEXT_QUIT, + * V4_TEXT_COMPLETED or V4_TEXT_ERROR -- or one of these: */ +#define V4_BOOT_LINE_TOO_LONG (-1) /* more than the node's input buffer holds; nothing was run */ +#define V4_BOOT_LINE_STOPPED (-2) /* the node stopped on a fault, or never finished */ +#define V4_BOOT_LINE_NO_INPUT (-3) /* the line read the keyboard and there is no more input */ +int v4_boot_line(const v4_boot *b, const char *text, unsigned len); + +/* The dictionary hash of a node started from `im`. */ +uint64_t v4_boot_dict_hash(const v4_node *n, const v4_image *im); + +#endif /* V4_BOOT_H */ diff --git a/v4/include/v4/capsule.h b/v4/include/v4/capsule.h new file mode 100644 index 00000000..4185c6fa --- /dev/null +++ b/v4/include/v4/capsule.h @@ -0,0 +1,36 @@ +/* capsule.h -- a capsule of F18 code: what a neighbour writes to a node's + * port to put a programme into it and start it. docs/v4.0.0/MESH.md + * section 5. + * + * A node newly born has nothing in it and executes what arrives at its port + * (node.h). So a capsule of F18 code is not a format a node has to + * understand: it is the words themselves, in the order they are sent. For + * each stretch of memory that is not zero, + * + * @p a! @p push the node executes this from its port, + * address takes these two as its literals, + * count - 1 + * @p !+ unext and then this: each word that follows is fetched + * the words ... from the port and stored + * + * and at the end + * + * jump start + * + * This is the F18's own way of loading a node through a port. Nothing here + * knows what the programme is: StarForth's nucleus is one such capsule + * (v4/tools/mkimage.c), and anything written for the node is another. + */ +#ifndef V4_CAPSULE_H +#define V4_CAPSULE_H + +#include "v4/node.h" + +/* Write the capsule that makes a node's memory what `n`'s is, and starts it + * at `start`: `out` is called with each word in turn. Words of `n` that + * are zero are not sent -- a node is born with its memory zero. Returns + * how many words were written. */ +unsigned v4_capsule_write(const v4_node *n, v4_cell start, + void (*out)(void *self, v4_cell word), void *self); + +#endif /* V4_CAPSULE_H */ diff --git a/v4/include/v4/cell.h b/v4/include/v4/cell.h new file mode 100644 index 00000000..9f5286b2 --- /dev/null +++ b/v4/include/v4/cell.h @@ -0,0 +1,60 @@ +/* cell.h -- v4 cell width as a build parameter. + * + * DECOMPOSITION.md D-5: the host node's cell width matches the host CPU + * (32 on a Zynq-7000 Cortex-A9, 64 on an aarch64 host). JUSTIFICATION.md + * section 5 makes this the second invariance axis: if K==1.0 holds across + * cell widths as well as across ISAs, the conservation law is shown not to + * depend on word size. + * + * The compiler capsule is written width-independent against these types. + * Nothing in v4 may assume a particular V4_CELL_BITS; if you find yourself + * wanting to, the code belongs in the host node, not the mesh. + * + * JUSTIFICATION.md section 5 also fixes the split that matters for the + * physics: heat and K arithmetic stay 64-bit on every host regardless of + * cell width, because they must not lose precision when the cell shrinks. + * That is why this header defines a separate v4_heat_t rather than reusing + * v4_cell. + */ +#ifndef V4_CELL_H +#define V4_CELL_H + +#include + +#ifndef V4_CELL_BITS +#error "V4_CELL_BITS must be defined to 32 or 64 (e.g. -DV4_CELL_BITS=32)." +#endif + +#if V4_CELL_BITS == 32 +typedef int32_t v4_cell; +typedef uint32_t v4_ucell; +#elif V4_CELL_BITS == 64 +typedef int64_t v4_cell; +typedef uint64_t v4_ucell; +#else +#error "V4_CELL_BITS must be 32 or 64." +#endif + +/* Physics/heat arithmetic width. Fixed at 64 by JUSTIFICATION.md section 5: + * "Heat and K arithmetic remain 64-bit (int64_t in C99 on every host; double + * cells on a 32-bit node). Changing only the payload width keeps the + * experiment clean: any difference in K can be attributed to cell width and + * not to lost precision." The C side is therefore always 64-bit; the + * double-cell framing is the 32-bit node's problem, not this type's. */ +typedef int64_t v4_heat_t; +typedef uint64_t v4_uheat_t; + +/* MSB -- the cell-width top-bit constant. + * + * DECOMPOSITION.md section 5.5 (RSHIFT) and section 5.7 (D2/) both call for + * "MSB, the cell-width top-bit constant" but never define it, which leaves a + * bit-width-dependent constant to be invented mid-arithmetic. It is defined + * here once, as a value with exactly the cell's sign bit set and nothing + * else, so that the sign-test idioms in those two words are width-correct by + * construction at 32 and at 64. */ +#define V4_MSB (((v4_ucell)1) << (V4_CELL_BITS - 1)) + +/* All-ones, the width-correct "true". FORTH-79 uses -1 for TRUE. */ +#define V4_ALL_ONES ((v4_cell)-1) + +#endif /* V4_CELL_H */ diff --git a/v4/include/v4/exec.h b/v4/include/v4/exec.h new file mode 100644 index 00000000..ca066b72 --- /dev/null +++ b/v4/include/v4/exec.h @@ -0,0 +1,72 @@ +/* exec.h -- instruction execution for v4. + * + * DECOMPOSITION.md section 1.2: "Slots execute left to right." A branch + * (jump, call, next, if, -if) takes its target from all bits to the right of + * its slot and replaces the same low bits of P (page-relative). Branches are + * legal in slots 0-3 only. Nothing to the right of a branch executes, taken + * or not, because those bits are its address. + * + * Section 1.4: "Every retired instruction increments that opcode's heat counter + * and advances the anti-clock; every `call` increments the heat counter of its + * target. None of this costs an instruction." + * + * The node owns P, A, B, the stacks and memory; heat and the anti-clock are + * separate physics state (section 7 names them as registers). + * + * THREE POINTS THE SPEC LEAVES TO THE F18, and which this model takes from it: + * + * - `ex` ends the word, like `;`. P has been replaced, so the remaining + * slots belong to a word that is no longer the current one. + * - `unext` restarts the *already fetched* word at slot 0. It does not + * refetch and does not move P, so `@p` and `!p` inside a unext loop step + * through the words that follow the loop word. When R reaches 0 the loop + * ends and execution continues with the slot after `unext`. + * - `+*` shifts T arithmetically (sign bit kept). Section 1.3 says only + * "shift T:A right one bit"; D-3 says plain F18 semantics. + * + * A branch opcode in slot 4 or 5 is outside the spec. The model does not trap + * it: it applies the 7- or 2-bit target the layout formula gives. + */ +#ifndef V4_EXEC_H +#define V4_EXEC_H + +#include "v4/heat.h" +#include "v4/iword.h" +#include "v4/node.h" + +typedef struct { + v4_uheat_t anticlock; + + /* A node blocked at its port in the middle of an instruction word + * (node.h) goes on, when it has been served, from the slot after the + * store: the word and the slot are kept here meanwhile. */ + int resume; + v4_iword resume_iw; + unsigned resume_slot; + unsigned resume_faults; /* n->faults when it blocked: a fault since then means P is a handler and the rest of the word is abandoned */ +} v4_exec_state; + +void v4_exec_reset(v4_exec_state *es); + +/* Execute one instruction word: fetch at P, advance P, run the slots left to + * right until the word ends. A unext loop runs to completion inside one call, + * so the call does not return while R is nonzero at a `unext`. Returns the + * number of instructions retired. + * + * FAULTS (node.h; D-14 and D-16). Before an opcode runs, the stacks must + * hold what it takes -- a T or S it only reads counts -- and have room for + * what it leaves; and an address it uses, or P at the fetch, must be inside + * node memory. If not, that opcode and the rest of the word do not execute, + * both stacks are emptied, and P is that kind's word of the node's fault + * table on return. With no table the node stops, and this does nothing and + * returns 0 from then on. */ +unsigned v4_exec_step_word(v4_node *n, v4_exec_state *es, v4_heat *h); + +/* Execute a single opcode. The branch opcodes read their target from `w` and + * `slot`; every other opcode ignores both. `unext` here only updates R; the + * restart is v4_exec_step_word's. A value above 31 does nothing and retires + * nothing. */ +void v4_exec_op(v4_node *n, v4_exec_state *es, v4_heat *h, + unsigned op, v4_iword w, unsigned slot); + +#endif /* V4_EXEC_H */ diff --git a/v4/include/v4/fabric.h b/v4/include/v4/fabric.h new file mode 100644 index 00000000..e6a94b09 --- /dev/null +++ b/v4/include/v4/fabric.h @@ -0,0 +1,111 @@ +/* fabric.h -- the nodes there are, how their ports are wired, and time + * passing for all of them at once. docs/v4.0.0/MESH.md 4.3. + * + * On the fabric every node runs at the same time and a node with nothing to + * do is blocked at a port. Here that is: every node that is awake and not + * blocked executes one instruction word, and then every write that has a + * reader waiting on the other end of its wire is handed over. There is no + * choice of whose turn it is. + * + * THE GEOMETRY IS DATA. Which port connects to what is a table, and it can + * be changed while the nodes run; nodes can be added and removed while they + * run. Nothing here knows what shape the wiring makes. + * + * Nothing here knows what the nodes are for, either: no message, no + * capsule, no StarForth. And nothing here uses the C library: whoever owns + * the fabric supplies the memory for it and for each node. + */ +#ifndef V4_FABRIC_H +#define V4_FABRIC_H + +#include "v4/exec.h" + +/* What is on the other end of a port that is not a node: a console, a disk, + * the kernel that serves a node's requests. Either function may be 0. */ +typedef struct { + int (*take)(void *self, v4_cell value); /* the node wrote `value`: 1 if it is taken, 0 if not yet */ + int (*give)(void *self, v4_cell *value); /* the node is reading: 1 with a word in *value, 0 if not yet */ + void *self; +} v4_device; + +/* One end of a wire. */ +enum { V4_WIRE_NONE = 0, V4_WIRE_NODE, V4_WIRE_DEVICE }; +typedef struct { + int kind; + unsigned node, port; /* V4_WIRE_NODE: the other node and its port */ + const v4_device *device; /* V4_WIRE_DEVICE */ +} v4_wire; + +/* A node, with what the engine needs to run it. Its owner supplies one of + * these for every node there is to be. */ +typedef struct { + v4_node n; + v4_exec_state es; + v4_heat h; +} v4_fabric_node; + +/* A place in the fabric: a node, or nothing. */ +typedef struct { + v4_fabric_node *node; /* 0: no node here */ + int asleep; + v4_wire wire[V4_PORTS]; +} v4_place; + +typedef struct { + v4_place *place; + unsigned capacity; + v4_cell gone_error; /* see v4_fabric_gone_error; 0: none */ +} v4_fabric; + +/* An empty fabric with room for `capacity` nodes, in `places`. */ +void v4_fabric_init(v4_fabric *f, v4_place *places, unsigned capacity); + +/* A PORT WITH NOTHING ON IT. On the fabric a node that writes to such a + * port, or reads from it, waits for ever (docs/v4.0.0/MESH.md 4.1). That + * is so here for a bare node. But a node that can take an error is not + * left there: when it is blocked writing to, or reading from, one port that + * nothing is wired to -- because nothing ever was, or because what was + * there has been removed or the wire cut -- the error `code` is raised on + * it and it goes on (node.h, v4_node_port_gone). A node whose neighbour is + * asleep waits, and so does one reading "any port". With `code` 0, which + * is how a fabric begins, nothing is raised. */ +void v4_fabric_gone_error(v4_fabric *f, v4_cell code); + +/* More room: `places`, of `capacity` no less than before, takes over; every + * node keeps its number and its wiring. */ +void v4_fabric_grow(v4_fabric *f, v4_place *places, unsigned capacity); + +/* A node is born (node.h, v4_node_born): empty, its ports at `port_base`, + * wired to nothing, awake and blocked reading its ports. Returns its + * number, or -1 if there is no room. */ +int v4_fabric_add(v4_fabric *f, v4_fabric_node *storage, v4_cell port_base); + +/* A node is removed, whatever it was doing. Every wire to it is cut; a + * neighbour blocked on one of them stays blocked, as it would on a port + * with nothing there. Returns the storage it was given, or 0. */ +v4_fabric_node *v4_fabric_remove(v4_fabric *f, unsigned id); + +/* The node numbered `id`, or 0 if there is none. */ +v4_fabric_node *v4_fabric_node_at(const v4_fabric *f, unsigned id); + +/* Wire port `pa` of node `a` to port `pb` of node `b`, or to a device; or + * cut whatever is on it. Whatever was on a port before is cut, at both + * ends. Each returns 1, or 0 if a node or a port is not there. */ +int v4_fabric_wire(v4_fabric *f, unsigned a, unsigned pa, unsigned b, unsigned pb); +int v4_fabric_wire_device(v4_fabric *f, unsigned a, unsigned pa, const v4_device *device); +int v4_fabric_unwire(v4_fabric *f, unsigned a, unsigned pa); + +/* A node that is asleep executes nothing, and nothing is handed to it or + * taken from it. It can be put to sleep and woken at any instruction + * word. */ +void v4_fabric_sleep(v4_fabric *f, unsigned id); +void v4_fabric_wake(v4_fabric *f, unsigned id); + +/* Time passes: every node that is awake and not blocked executes one + * instruction word; then every write with a reader waiting on the other end + * of its wire is handed over, and every device is asked. Returns how many + * instructions were executed and words handed over together: 0 means + * nothing can happen until something outside changes. */ +unsigned v4_fabric_step(v4_fabric *f); + +#endif /* V4_FABRIC_H */ diff --git a/v4/include/v4/guard.h b/v4/include/v4/guard.h new file mode 100644 index 00000000..9e9b5058 --- /dev/null +++ b/v4/include/v4/guard.h @@ -0,0 +1,92 @@ +/* guard.h -- 5% safety boundaries at each end of every bounded list. + * + * The convention used throughout this project is that a bounded list carries a + * safety boundary at each end rather than trusting its own bounds. The kernel + * arena is the reference instance (kernel/src/vm/arena.c): + * + * #define SK_VM_GUARD_SIZE PMM_PAGE_SIZE + * #define SK_VM_GUARD_PATTERN_HEAD 0x5ac0ffeed0c0ffeeULL + * #define SK_VM_GUARD_PATTERN_TAIL 0x0bad0badf00df00dULL + * + * with a guard_fill / guard_check pair, and total size = payload + 2 * guard. + * Two properties of that instance are kept here deliberately: + * + * - HEAD and TAIL carry *different* patterns, so a check that fails can say + * which end was overrun. A single pattern tells you that something ran + * off the end and nothing about where. + * - the boundary is placed immediately adjacent to the payload, because a + * boundary separated from what it protects catches nothing. + * + * This header supplies the same facility at a size that scales with the list + * (5% at each end) rather than a fixed page, and reduces it to two helpers so + * that no list in v4 has to hand-roll the arithmetic. + * + * WHY THIS IS LOAD-BEARING HERE, NOT DECORATIVE. AddressSanitizer already + * catches a genuine out-of-struct access, so a guard band cannot be justified + * as "catching overflow" -- ASan does that. What ASan does *not* catch is an + * index that is wrong but still lands inside the same object, which is exactly + * the failure mode of a circular buffer driven by unsigned index arithmetic: + * + * head = (head + V4_DATA_RING - 1u) % V4_DATA_RING; correct + * head = (head + V4_DATA_RING - 1u) & (V4_DATA_RING - 1u); correct today + * + * The second line is identical today *only because 8 is a power of two*. It + * is the sort of "simplification" that gets made, it is right for the current + * depths, and it silently breaks the first time a ring size stops being a power + * of two. Both forms stay in range, so ASan stays quiet. A guard band with a + * 5% margin either side is what turns "the tests happened to cover it" into a + * check that fires. The tests in tests/test_stack.c exercise that directly: + * they index past each end on purpose and require the check to catch it. + * + * The boundary is sized with ceiling division and a floor of one element, so a + * short list still gets a real boundary. A 5% margin on a 3-element list + * rounds to 0, and a zero-width guard is not a guard -- it is a comment. + */ +#ifndef V4_GUARD_H +#define V4_GUARD_H + +#include "v4/cell.h" + +/* Fraction of the payload reserved as a boundary at each end. */ +#define V4_GUARD_PCT 5u + +/* Boundary width, in elements, for a payload of n elements: 5% rounded up, + * never less than one. Written as a macro so that a struct can size its own + * inline boundary at compile time -- the boundary has to be storage the object + * owns, not something a helper allocates later, because a mesh node has no + * heap to allocate it from. + * + * n = 8 -> 1 (5% = 0.4, rounds up) + * n = 32 -> 2 (5% = 1.6, rounds up) + * n = 100 -> 5 + * n = 1000 -> 50 + * n = 3 -> 1 (5% = 0.15, rounds up to 1 -- not 0) + */ +#define V4_GUARD_ELEMS(n) \ + (((n) * V4_GUARD_PCT + 99u) / 100u) + +/* The kernel arena's patterns, carried over so that a hex dump from a mesh + * node and one from the kernel can be read with the same key. Casting to + * v4_ucell truncates cleanly at 32-bit cells: the arena's own constants are + * 64-bit, and their low halves are as distinct as the full words -- + * 0xd0c0ffee against 0xf00df00d -- so "which end" stays answerable at both + * widths. */ +#define V4_GUARD_PATTERN_HEAD ((v4_ucell)0x5ac0ffeed0c0ffeeULL) +#define V4_GUARD_PATTERN_TAIL ((v4_ucell)0x0bad0badf00df00dULL) + +/* If these ever compare equal the boundary has stopped saying which end was + * overrun, which is half its purpose. C99 has no _Static_assert. */ +typedef char v4_guard_patterns_are_distinct + [(V4_GUARD_PATTERN_HEAD != V4_GUARD_PATTERN_TAIL) ? 1 : -1]; + +/* Write one boundary band. `band` is the start of the band, `n` its width in + * elements. */ +void v4_guard_fill(v4_cell *band, unsigned n, v4_ucell pattern); + +/* 1 if the whole band still holds `pattern`, else 0. Checks every element, not + * just the ends: the band is 5% wide precisely so there is something to check + * in it, and a single word is what the kernel arena can afford at page + * granularity. */ +int v4_guard_intact(const v4_cell *band, unsigned n, v4_ucell pattern); + +#endif /* V4_GUARD_H */ diff --git a/v4/include/v4/heat.h b/v4/include/v4/heat.h new file mode 100644 index 00000000..96d8832a --- /dev/null +++ b/v4/include/v4/heat.h @@ -0,0 +1,79 @@ +/* heat.h -- heat and anti-clock, not instructions themselves (1.4). + * + * DECOMPOSITION.md section 1.4 states: "Execution itself drives the physics. + * Every retired instruction increments that opcode's heat counter and advances + * the anti-clock; every `call` increments the heat counter of its target. None + * of this costs an instruction." + * + * D-6 is deferred to step 2, but the note immediately adds: "The golden model + * implements per-opcode and per-call-target heat in the meantime." The + * counters here are therefore a two-dimensional heat structure (op × target) + * on a per-call basis, with counts stored in 64-bit (because heat is + * accumulated and must not roll over at 32-bit). The "per-call-target" + * counter is indexed by the address of the called target -- on a word-addressed + * node, that is a cell value equal to the address `a` passed to `call a`. + * + * The anti-clock is a virtual tick driven by execution -- one tick per retired + * instruction -- and the rest of §7 refers to it via `ANTICLOCK`. It is not a + * wall-clock time, it is a function of the execution stream, as specified. + * + * The MM names in §7: `HEAT-OP[0..31]` (R), `HEAT-CALL[...]` (R/W) with a + * freeze bit (D-6). D-4 (memory map) is deferred, so the model does not + * materialize those MM addresses yet. This header defines the backing storage + * that a later MM layer will expose; it keeps the counts separate from the node + * itself because heat is physics data, not the instruction word stream, and it + * needs to be accessible to assertions such as K conservation tests later. + * + * Counts are 64-bit. Even for a short run a call-heavy word can heat up many + * times, and the golden model must run POST and remain monotonic and + * comparable. They are stored as `v4_uheat_t` (which is uint64_t by cell-width + * parameterisation) rather than cell-sized so that a 32-bit node's heat is not + * width-truncated in the model. (JUSTIFICATION.md §5 keeps heat arithmetic + * 64-bit regardless of cell width.) + */ +#ifndef V4_HEAT_H +#define V4_HEAT_H + +#include "v4/cell.h" +#include "v4/opcode.h" + +#define V4_HEAT_MAX_CALL_TARGETS 4096u + +typedef struct { + v4_uheat_t op[V4_OPCODE_COUNT]; /* HEAT-OP[0..31] */ + + /* Per-call-target heat. Indexed by target address. The table is fixed-size + * for the golden model; the actual hardware table size is deferred with D-6, + * but "in the meantime" the model must have a per-call-target structure. + * 4096 entries is small (32KB if using 64-bit per entry), enough to cover a + * typical test program's call targets without needing to allocate on-the-fly + * -- and since the node has boundaries, over-indexing is caught. */ + v4_uheat_t call[V4_HEAT_MAX_CALL_TARGETS]; + v4_ucell call_freeze_mask[V4_HEAT_MAX_CALL_TARGETS / (sizeof(v4_ucell) * 8u)]; + /* freeze bits: one per call-target entry (D-6). Stored as a bitmask. */ +} v4_heat; + +void v4_heat_reset(v4_heat *h); + +/* Every retired instruction: +1 to the opcode's heat and +1 to ANTICLOCK. */ +void v4_heat_on_retire(v4_heat *h, unsigned op, v4_uheat_t *anticlock); + +/* Every call: +1 to the call-target's heat. The target is the address passed + * to call (word address). If the target is outside the table range, the model + * must not silently wrap -- a boundary-style check is the conservative choice + * here, because the table size is a model parameter. */ +void v4_heat_on_call(v4_heat *h, v4_cell target); + +/* Read/write helpers for per-call-target heat (R/W). Freeze bits are set per + * target when D-6's freeze bit is asserted; writes to a frozen target should be + * ignored in a real implementation, but the MM layer is not defined yet. The + * golden model stores freeze bits and the accessor can enforce them later. */ +v4_uheat_t v4_heat_call_get(const v4_heat *h, v4_cell target); +int v4_heat_call_set(v4_heat *h, v4_cell target, v4_uheat_t val); + +/* Freeze control (D-6). */ +void v4_heat_call_freeze(v4_heat *h, v4_cell target); +void v4_heat_call_unfreeze(v4_heat *h, v4_cell target); +int v4_heat_call_is_frozen(const v4_heat *h, v4_cell target); + +#endif /* V4_HEAT_H */ diff --git a/v4/include/v4/image.h b/v4/include/v4/image.h new file mode 100644 index 00000000..03c628db --- /dev/null +++ b/v4/include/v4/image.h @@ -0,0 +1,93 @@ +/* image.h -- the StarForth nucleus, as its host knows it: where things are + * in a node that has taken it in, and how a line is handed to that node. + * + * The nucleus is text (capsule/ *.v4). tools/mkimage.c assembles it on the + * build machine and writes two things: + * + * - the nucleus as a capsule of F18 code (capsule.h), which is put into + * an empty node through its port. It is a capsule like any other: in + * the capsule directory, with a name, a hash and a signature + * (capsules/v4/nucleus-.f18). docs/v4.0.0/MESH.md section 5. + * - this description of it, a C file: the addresses a host needs. + * + * A node that has taken the nucleus in is sent text as messages and sends + * back what it prints (v4/include/v4/message.h); nothing here hands it a + * line. + * + * A description is for one cell width, one node size and one pair of stack + * sizes; v4_image_born refuses one the engine was not built for. + */ +#ifndef V4_IMAGE_H +#define V4_IMAGE_H + +#include "v4/exec.h" + +typedef struct { + /* what the image was built for */ + unsigned cell_bits, node_words, data_ring, ret_ring; + + /* Where the nucleus waits for a message (v4/capsule/quit.v4, (IDLE)): + * the node's P is there, blocked reading its ports, when it has nothing + * to do. */ + v4_cell idle; + v4_cell fault_table; /* (FAULTS): where a fault goes */ + v4_cell port; /* word address of the node's port (node.h) */ + + /* KEY's code: a node whose P is in key_start .. key_end - 1 with no + * character pending is waiting for one */ + v4_cell key_start, key_end; + + /* the memory-mapped registers (DECOMPOSITION.md section 7; D-4 leaves + * the map to the loader, and this is the map the image was built with) */ + v4_cell console_tx, console_rx, console_status; + v4_cell dstack_reg, rstack_reg; + v4_cell node_error; + + /* the dictionary's two variables: DP holds HERE, a byte address, and + * LATEST the newest word of FORTH. What lies below HERE, and LATEST, + * is what the dictionary hash covers (v4/include/v4/boot.h). */ + v4_cell dp, latest; + + /* What COLD returns the system to and FORGET will not go below: two + * cells, DP and LATEST as they were when the system was complete, and + * the variable FENCE. The image has them as the nucleus alone; a system + * that loads capsules when it boots sets them again when it has + * (v4_image_seal). */ + v4_cell boot_cells, fence; + + /* the block window: the word address of the slots the kernel copies + * blocks into (v4/blocks.h) */ + v4_cell block_window; +} v4_image; + +/* The nucleus's error for a node blocked at a port with no one on it + * (v4/capsule/core.v4's list; node.h, v4_node_port_gone): "No one on that + * port". */ +#define V4_ERROR_NO_ONE 18 + +/* The description of the nucleus built from v4/capsule (the generated file + * defines it). */ +extern const v4_image v4_capsule_image; + +/* The system is complete: what is in the dictionary now is what COLD comes + * back to, and FORGET will not go below it. */ +void v4_image_seal(v4_node *n, const v4_image *im); + +/* The dictionary hash of a node started from `im`: FNV-1a over its memory + * below HERE, a cell at a time, low byte first, and then LATEST. It does + * not depend on the machine: every build of one commit, with one cell + * width, gives the same hash for the same dictionary. */ +uint64_t v4_image_dict_hash(const v4_node *n, const v4_image *im); + +/* A node newly born (node.h), with the registers the nucleus expects of the + * node it runs on. Its memory is empty and it is blocked + * reading its ports: the nucleus is yet to be sent to it. Returns 1, or 0 + * if the description is not for this build of the engine (nothing is then + * done). */ +int v4_image_born(v4_node *n, v4_exec_state *es, v4_heat *h, const v4_image *im); + +/* 1 if the node is waiting for a character: it is inside KEY and none is + * pending. */ +int v4_image_waiting(const v4_node *n, const v4_image *im); + +#endif /* V4_IMAGE_H */ diff --git a/v4/include/v4/iword.h b/v4/include/v4/iword.h new file mode 100644 index 00000000..cf75b7b1 --- /dev/null +++ b/v4/include/v4/iword.h @@ -0,0 +1,101 @@ +/* iword.h -- the 32-bit instruction word and its decode. + * + * DECOMPOSITION.md section 1.2: + * + * 31 27 26 22 21 17 16 12 11 7 6 2 1 0 + * +--------+--------+--------+--------+--------+--------+----+ + * | slot 0 | slot 1 | slot 2 | slot 3 | slot 4 | slot 5 | xx | + * +--------+--------+--------+--------+--------+--------+----+ + * + * "Slots execute left to right. A branch (jump, call, next, if, -if) takes + * its target from all bits to the right of its slot, and that target replaces + * the same low bits of P (page-relative, as in the F18). Branches are + * therefore legal in slots 0-3 only", with reach 27 / 22 / 17 / 12 bits. + * + * That reach column is not a separate rule, it falls out of the layout: slot k + * sits at bits [31-5k : 27-5k], so the bits to its right are [26-5k : 0], + * which is 27-5k bits -- 27, 22, 17, 12 for slots 0..3. This header derives + * the masks from that one formula rather than hard-coding four of them, so the + * decode cannot drift from the reach table. + * + * THE SPARE BITS ARE ADDRESS BITS. "Spare" means only that they are never + * *executed*: they are below every slot, so "all bits to the right of its + * slot" includes them, and they are the low bits of the address of a branch in + * any slot. They are inert for opcode decode and live in a branch target. + * This is easy to assume otherwise and get wrong -- an earlier revision of + * this header subtracted them from the branch width, which silently cost two + * address bits off every branch and was caught by tests/test_iword.c. They + * exist because 6*5 = 30 does not fill a 32-bit word, and on the F18 those low + * bits are simply the bottom of the address space. + * + * The consequence for the compiler is worth stating: a non-branch slot's low + * bits are free to carry a compressed argument, but a branch slot's are not, + * because they are address. + * + * NOTE ON WIDTH. The word format is 32 bits regardless of V4_CELL_BITS: the + * diagram is 32 bits wide and 6*5+2 = 32 exactly. D-5 makes the *cell* width + * a build parameter, but the instruction word is not a payload and does not + * follow the cell. At 32-bit cells a word is a cell. At 64-bit cells it is + * the low 32 bits of the cell and the high half is ignored (D-9), so compiled + * code is identical at both widths. The decode below operates on a distinct + * 32-bit type; the fetch in exec.c does the narrowing. + */ +#ifndef V4_IWORD_H +#define V4_IWORD_H + +#include + +#include "v4/cell.h" +#include "v4/opcode.h" + +/* The instruction word is 32 bits at every cell width. */ +typedef uint32_t v4_iword; + +#define V4_SLOT_COUNT 6u /* six 5-bit slots, DECOMPOSITION.md 1.1 */ +#define V4_SPARE_BITS 2u /* "plus 2 spare bits" */ + +/* C99 has no _Static_assert, so the "6*5+2 == 32" identity is enforced with + * the negative-array-size idiom. If the slot count, the spare-bit count or the + * word width ever stop adding up to 32, this fails to compile. */ +typedef char v4_iword_layout_is_exact + [((V4_SLOT_COUNT * 5u + V4_SPARE_BITS) == 32u) ? 1 : -1]; + +/* Bit range of slot k: high bit 31-5k, low bit 27-5k. */ +#define V4_SLOT_HIGH_BIT(k) (31u - 5u * (k)) +#define V4_SLOT_LOW_BIT(k) (27u - 5u * (k)) + +/* Number of address bits a branch in slot k carries: all bits to the right of + * the slot. Slot k's low bit is 27-5k, so the bits below it are 0..(26-5k), + * which is 27-5k bits -- equal to the slot's own low bit. This is the single + * source of the reach column, and it is why the spare bits are *not* subtracted + * here: see the note on the spare bits below. */ +#define V4_BRANCH_ADDR_BITS(k) (V4_SLOT_LOW_BIT(k)) + +/* Mask of the low address bits a branch in slot k replaces in P. */ +uint32_t v4_iword_slot_mask(unsigned slot); + +/* The 5-bit opcode in slot k, 0..31. */ +unsigned v4_iword_op(v4_iword w, unsigned slot); + +/* The 2 spare low bits. Never executed. */ +unsigned v4_iword_spare(v4_iword w); + +/* The branch target carried by a branch in slot k: all bits to the right of + * the slot, zero-extended. Meaningful only for the five branch opcodes. */ +v4_iword v4_iword_target(v4_iword w, unsigned slot); + +/* Assemble a word from six 5-bit opcodes and the 2 spare bits. Opcode values + * above 31 or spare bits above 3 are rejected, because a golden model must not + * paper over an out-of-range encoding. */ +v4_iword v4_iword_assemble(const unsigned op[V4_SLOT_COUNT], unsigned spare); + +/* Apply a branch: replace the low V4_BRANCH_ADDR_BITS(slot) bits of P with the + * target, preserving the bits above (page-relative, F18-style). */ +v4_cell v4_iword_branch(v4_cell p, v4_iword w, unsigned slot); + +/* Branches are legal in slots 0-3 only (section 1.2). Slots 4 and 5 have 7 and + * 2 address bits respectively, which is not a useful reach and is not + * sanctioned by the table. */ +int v4_iword_branch_legal(unsigned slot); + +#endif /* V4_IWORD_H */ diff --git a/v4/include/v4/manage.h b/v4/include/v4/manage.h new file mode 100644 index 00000000..93ff4110 --- /dev/null +++ b/v4/include/v4/manage.h @@ -0,0 +1,81 @@ +/* manage.h -- what Hera asks of whoever holds the fabric. + * docs/v4.0.0/MESH.md section 9. + * + * Hera decides which nodes exist and are awake (MESH.md ruling 7). She is + * a node like any other and cannot make one: she asks, by a write to the + * port where her requests go (ENGINE.md 3.3), and the write blocks her until + * she is answered. Each request is a word on her, made with KERNEL-WORD + * (v4/capsule/compile.v4); its arguments are what it finds on her data + * stack and its results are what is left there. + * + * These are the requests, in order. The n-th is request `first + n`, where + * `first` is whatever number the host gives the first of them: + * + * NODE-ME ( -- place ) the place of the node that asks + * NODE-BORN ( -- place | -1 ) a node is born, empty, listening at + * its ports; -1: there is no room + * NODE-WIRE ( a pa b pb -- flag ) port pa of the node at a is wired + * to port pb of the node at b + * NODE-UNWIRE ( a pa -- ) what is on that port is cut + * NODE-SLEEP ( place -- ) it executes nothing until woken + * NODE-WAKE ( place -- ) + * NODE-KILL ( place -- ) it is removed, whatever it was doing + * NODE-PARITY ( place number -- ) the host records the node's parity: + * its number and its dictionary hash + * CAPSULE-OPEN ( baddr u -- flag ) the capsule of that name is found + * and checked, and is read from its + * start; 0: there is none, or it is + * not what it says it is + * CAPSULE-CELL ( -- w flag ) the next cell of a capsule of F18 + * code; 0 0 when there are no more + * CAPSULE-LINE ( baddr -- u | -1 ) the next line of a capsule of + * FORTH blocks, put at baddr: at + * most 64 characters; -1 at its end + * + * A place is where a node is in the fabric (fabric.h); it is the host's + * name for the node. A node's number, which messages are addressed by, is + * the nodes' own affair: Hera gives a newborn its number by telling it. + * + * Only the node the host has wired to this is answered, so only Hera's + * requests are honoured. The unit rule (MESH.md ruling 5) is not here: it + * is what Hera does with these, in her capsule. + * + * Nothing here uses the C library: the bare-metal kernel links this file. + */ +#ifndef V4_MANAGE_H +#define V4_MANAGE_H + +#include "v4/fabric.h" + +#define V4_MANAGE_WORDS 11 +extern const char *const v4_manage_words[V4_MANAGE_WORDS]; +#define V4_MANAGE_LINE 64 /* the most characters in a line of a block */ + +typedef struct { + v4_fabric *f; + + /* A node is born: the host finds it room, adds it to the fabric and + * gives it what a node's hardware gives it. Its place, or -1. */ + int (*born)(void *self); + /* The node that was at `place` has been removed: its room is free. */ + void (*gone)(void *self, unsigned place, v4_fabric_node *was); + /* The capsule called `name`, `len` characters: found, its hash and + * signature checked, and to be read from its start. 1, or 0. */ + int (*open)(void *self, const char *name, unsigned len); + /* The next cell of the open capsule: 1 with it in *w, 0 at its end. */ + int (*cell)(void *self, v4_cell *w); + /* The next line of the open capsule that is part of a block, into + * `text`, at most V4_MANAGE_LINE characters: its length, or -1. */ + int (*line)(void *self, char *text); + /* The node at `place`, which Hera calls `number`: record its parity. */ + void (*parity)(void *self, unsigned place, v4_cell number, const v4_node *n); + void *self; +} v4_manage; + +/* The node at `place` has written request `n` (0 is NODE-ME) to the port + * its requests go to. Its arguments are taken from its data stack and its + * results left there. Returns 1; 0 if `n` is not one of the requests, and + * then nothing has been done. */ +int v4_manage_serve(const v4_manage *m, unsigned place, unsigned n); + +#endif /* V4_MANAGE_H */ diff --git a/v4/include/v4/message.h b/v4/include/v4/message.h new file mode 100644 index 00000000..02b3dd18 --- /dev/null +++ b/v4/include/v4/message.h @@ -0,0 +1,63 @@ +/* message.h -- a message, as it is written to a port and read from one. + * docs/v4.0.0/MESH.md section 6. + * + * The ports are the transport; the message is what is transported. It is + * v3's Hermes message with what it carries, a word at a time: + * + * word 0 to: the node it is for + * word 1 from: the node that sent it + * word 2 type + * word 3 heat and TTL + * word 4 ACL tag: the sender's identity fingerprint + * word 5 sequence + * word 6 how many characters of text follow, 0 to 1024 + * word 7.. the text, four characters to a word, the first lowest + * + * Words 3, 4 and 5 are carried and not yet used: checking them is the + * router's, and awaits rulings (MESH.md section 3). + * + * This is for whatever is on the other end of a node's port and is not a + * node -- a console, a host -- to speak what the nodes speak (v4/capsule/ + * core.v4 and quit.v4 are the same thing in the node). Nothing here uses + * the C library. + */ +#ifndef V4_MESSAGE_H +#define V4_MESSAGE_H + +#include "v4/cell.h" + +#define V4_MSG_HEADER 7u +#define V4_MSG_MAX_CHARS 1024u /* a block */ +#define V4_MSG_MAX_WORDS (V4_MSG_HEADER + V4_MSG_MAX_CHARS / 4u) + +#define V4_MSG_TEXT 1 /* text to be interpreted */ +#define V4_MSG_OUTPUT 2 /* what a node printed */ +#define V4_MSG_DONE 3 /* how the text ended: one word, V4_TEXT_* */ + +/* how text ended */ +#define V4_TEXT_QUIT 0 /* QUIT: nothing is to be said */ +#define V4_TEXT_COMPLETED 1 /* a console says " ok" */ +#define V4_TEXT_ERROR 2 /* the message is printed; a console says " ERROR" */ + +typedef struct { + v4_cell word[V4_MSG_MAX_WORDS]; + unsigned count; /* words in it */ +} v4_message; + +/* A message of `len` characters, at most V4_MSG_MAX_CHARS. Returns how many + * words it is, or 0 if `len` is too many. */ +unsigned v4_message_text(v4_message *m, v4_cell to, v4_cell from, v4_cell type, const char *chars, unsigned len); + +/* A message arriving a word at a time. Start with m->count = 0 and give + * each word as it comes: returns 1 when the message is whole, 0 if there is + * more to come. A length that is not 0 to V4_MSG_MAX_CHARS is taken as 0. */ +int v4_message_word(v4_message *m, v4_cell word); + +/* Its parts. */ +#define v4_message_to(m) ((m)->word[0]) +#define v4_message_from(m) ((m)->word[1]) +#define v4_message_type(m) ((m)->word[2]) +unsigned v4_message_length(const v4_message *m); /* characters of text */ +char v4_message_char(const v4_message *m, unsigned i); /* the i-th of them */ + +#endif /* V4_MESSAGE_H */ diff --git a/v4/include/v4/node.h b/v4/include/v4/node.h new file mode 100644 index 00000000..cc2cd116 --- /dev/null +++ b/v4/include/v4/node.h @@ -0,0 +1,369 @@ +/* node.h -- the v4 node: registers, stacks, and word-addressed memory. + * + * DECOMPOSITION.md section 1.1: + * + * | Cell | 32 bits (mesh node). Host node's width is a build + * | parameter; see D-5. | + * | Addressing | Word-addressed (D-1). | + * | Registers | T (top of data stack), S (second), R (top of return + * | stack), P (program counter), A and B (address + * | registers). | + * | Stacks | F18 circular hardware stacks, not visible to code + * | (D-2) ... data stack 10 deep, return stack 9 deep. | + * | Instruction | Six 5-bit slots, plus 2 spare bits. | + * + * T, S and R are not fields here: they live inside v4_dstack and v4_rstack, + * because on the F18 they are the topmost slots of the circular stacks rather + * than registers that happen to shadow them, and the golden model has to model + * the mechanism and not just the values. P, A and B are genuinely separate + * registers and live here. + * + * MEMORY SIZE IS A BUILD PARAMETER, not a constant of the design. + * JUSTIFICATION.md section 10 names cell width, node count and node memory as + * the three parameters of the golden model, and no word count is fixed anywhere + * in DECOMPOSITION.md -- D-4, which is where a node memory map would be pinned + * down, is deferred to step 2. The default here is a round number that suits + * a host; the datapoint worth knowing is JUSTIFICATION.md section 4, that a + * GA144 node had 64 words of RAM and 64 of ROM. v4 keeps the same split -- + * dictionary and interpreter live in the compiler capsule on the host and are + * streamed to nodes, so node memory is not sized by capsule size. + */ +#ifndef V4_NODE_H +#define V4_NODE_H + +#include "v4/cell.h" +#include "v4/guard.h" +#include "v4/stack.h" + +/* Words of node memory. Overridable at build time. */ +/* How many ports a node has. A build parameter, as the cell width and the + * node's memory are: the geometry the nodes are wired in is data, and a node + * has as many ports as the geometry in use needs (docs/v4.0.0/MESH.md 4.1). */ +#ifndef V4_PORTS +#define V4_PORTS 8u +#endif +#define V4_PORT_ANY V4_PORTS /* not a port: "whichever port has a neighbour writing" */ + +#ifndef V4_NODE_WORDS +#define V4_NODE_WORDS 1024u +#endif + +/* 5% safety boundary at each end of node memory, per guard.h. Note the + * arithmetic: at 1024 words that is 52 words either side, 5.2% of memory + * spent on a boundary. That is the cost of the convention on a resource that + * is scarce by construction, and it is worth naming rather than discovering + * later -- on a real mesh node the memory is 32-bit words on silicon with no + * second chance. A deployment that cannot afford it sets V4_GUARD_PCT to 0 at + * build time, which is why the percentage is a macro and not baked in. */ +#define V4_MEM_BOUND V4_GUARD_ELEMS(V4_NODE_WORDS) + +/* Characters the console capture holds. Overridable at build time. */ +#ifndef V4_CONSOLE_CAP +#define V4_CONSOLE_CAP 4096u +#endif + +typedef struct { + v4_cell p; /* P -- program counter */ + v4_cell a; /* A -- address register */ + v4_cell b; /* B -- address register */ + + v4_dstack ds; /* holds T and S */ + v4_rstack rs; /* holds R */ + + v4_cell mem_guard_head[V4_MEM_BOUND]; + v4_cell mem[V4_NODE_WORDS]; + v4_cell mem_guard_tail[V4_MEM_BOUND]; + + /* CONSOLE-TX capture (DECOMPOSITION.md section 7). See + * v4_node_console_attach below. */ + v4_cell console_tx; /* its word address, or -1: no console */ + unsigned console_len; /* characters captured */ + unsigned console_dropped; /* characters that did not fit */ + unsigned char console[V4_CONSOLE_CAP]; + + /* CONSOLE-RX and CONSOLE-STATUS (section 7). See + * v4_node_console_input_attach below. */ + v4_cell console_rx; /* its word address, or -1: no input */ + v4_cell console_status; /* its word address, or -1 */ + unsigned input_len; /* characters fed */ + unsigned input_pos; /* characters taken; input_len - input_pos are pending */ + unsigned char input[V4_CONSOLE_CAP]; + + /* Faults (D-14, D-16). See v4_node_fault_attach below. */ + v4_cell fault_vector; /* word address of the handler table, or -1: none */ + v4_cell fault_addr; /* the address of the latest address fault */ + unsigned fault_kind; /* which kind the latest fault was (V4_FAULT_*) */ + unsigned faults; /* how many there have been */ + int stopped; /* non-zero: faulted with no handler */ + + /* The port (DECOMPOSITION.md section 6): a write to it blocks the node + * until its neighbour has taken what was written. See + * v4_node_port_attach below. */ + v4_cell port; /* word address of port 0, or -1: no ports */ + int asking; /* non-zero: blocked, having written `request` to port `ask_port` */ + v4_cell request; /* what it wrote */ + unsigned ask_port; /* to which port */ + int reading; /* non-zero: blocked, wanting a word from port `read_port` */ + unsigned read_port; /* a port, or V4_PORT_ANY */ + int given; /* non-zero: `given_value` has come from port `given_port` and not been taken yet */ + v4_cell given_value; + unsigned given_port; + unsigned last_from; /* the port the last read from "any" took its word from */ + unsigned writers; /* bit k: the neighbour on port k is blocked writing to this node */ + unsigned readers; /* bit k: the neighbour on port k is blocked reading from this node */ + + /* DSTACK-DEPTH and RSTACK-DEPTH (D-16). See v4_node_stack_regs_attach. */ + v4_cell dstack_reg; /* its word address, or -1 */ + v4_cell rstack_reg; /* its word address, or -1 */ + + + /* NODE-ERROR as a trap (D-18). See v4_node_error_attach. */ + v4_cell error_reg; /* its word address, or -1 */ +} v4_node; + +/* Zero P, A and B, empty the stacks, and clear memory. Installs every + * boundary (memory and both stacks) and leaves the node in a defined state. */ +void v4_node_reset(v4_node *n); + +/* 1 if every boundary in the node is intact -- memory and both stacks -- else + * 0. This is the single call a caller needs to detect that an index went + * wrong somewhere; see guard.h for what it catches that AddressSanitizer + * cannot. */ +int v4_node_guards_intact(const v4_node *n); + +/* Read and write one word. D-1: word-addressed, so `addr` counts words and + * CELLS is a no-op. `addr` is a v4_cell because A, B and P are all v4_cells + * and a narrower parameter would put a conversion between the register and the + * access on every one of the eight memory opcodes. + * + * An address outside 0 .. V4_NODE_WORDS-1 is never used to index memory + * (D-14, ruled 2026-10-04): v4_node_load gives 0 for it and v4_node_store + * does nothing. That is all these two do. They are what C code uses -- the + * assemblers, the tests -- and they do not count a fault; the executor does, + * for the addresses a running programme uses (see v4_node_fault_attach). + * + * The 5% band on each side of mem is a different protection: it is where a + * linear index error in the model's own C -- mem[-1], mem[V4_NODE_WORDS] -- + * would land, inside the struct where AddressSanitizer cannot see it, and + * v4_node_guards_intact() reports it. */ +v4_cell v4_node_load(const v4_node *n, v4_cell addr); +void v4_node_store(v4_node *n, v4_cell addr, v4_cell value); + +/* CONSOLE-TX, the console's transmit register, on the single-node model. + * + * EMIT is a device service: one character sent to the console node + * (DECOMPOSITION.md 5.10). The mesh and its ports are development step 2, + * and the memory map is open (D-4), so until then the model stands in for + * the console with one memory-mapped register and a capture buffer. That is + * enough to run every printing word and compare what it prints with v3. + * + * After v4_node_console_attach(n, addr), a store to word address `addr` + * appends the low 8 bits of the value to n->console instead of writing + * memory; n->mem[addr] is never changed by it, and a load from `addr` reads + * that memory word as before. All four store opcodes go through + * v4_node_store, so all four reach it. Once V4_CONSOLE_CAP characters are + * held, further ones are counted in n->console_dropped and discarded. + * + * A node has no console until one is attached: v4_node_reset detaches it + * (console_tx = -1) and empties the capture. Attaching empties it too. + * Passing -1 detaches. The address is the caller's choice. */ +void v4_node_console_attach(v4_node *n, v4_cell addr); + +/* THE PORTS. A node reaches its neighbours through its ports, and a port is + * an address (DECOMPOSITION.md section 6): "a read from a port blocks until + * the neighbour writes; a write blocks until the neighbour reads. This is + * the GA144 model. No instruction is added." docs/v4.0.0/MESH.md 4.1. + * + * After v4_node_port_attach(n, base) the node's V4_PORTS ports are the word + * addresses base .. base + V4_PORTS - 1. Two more follow them: + * base + V4_PORTS "any port": a read here takes from whichever port + * has a neighbour writing + * base + V4_PORTS + 1 which port the last read from "any" came from + * base + V4_PORTS + 2 which ports have a neighbour waiting to write to this + * node: bit k for port k + * base + V4_PORTS + 3 which ports have a neighbour waiting to read from it + * The last two are how a node looks before it writes (MESH.md 7a), as the + * F18's io register lets it. They are what whoever connects the ports last + * said, v4_node_port_status; fetching them waits for nothing and changes + * nothing. + * (read only) + * None of them is memory while the ports are attached. + * + * A WRITE. A store to a port does not write memory: the node keeps the + * value in n->request and the port in n->ask_port, sets n->asking and is + * blocked. When its neighbour has taken the value -- v4_node_port_served -- + * it goes on from the opcode after the store, in the same instruction word + * if there are any left. + * + * A READ. A fetch from a port -- @ @b @+, the literal fetch @p, or the + * fetch of an instruction word when P is a port -- does not happen until + * there is a word to fetch. The node sets n->reading and n->read_port and + * is blocked, the opcode not yet executed. When its neighbour writes -- + * v4_node_port_give -- the fetch is made, and it gets that word. When P is + * a port it is not advanced by a fetch: the node goes on executing what + * arrives there, as an F18 node does. + * + * A blocked node executes nothing: v4_exec_step_word returns 0 and changes + * nothing. Who the neighbour is, and whether there is one, is not the + * node's to know (fabric.h). A store to "any port" or to the "which port" + * address is an address fault. + * + * A node has no ports until they are attached: v4_node_reset detaches them. */ +void v4_node_port_attach(v4_node *n, v4_cell base); + +/* The neighbour has taken what the node wrote. */ +void v4_node_port_served(v4_node *n); + +/* THERE IS NO ONE ON THE PORT the node is blocked at -- writing to it, or + * reading from that one port -- and there will not be. A node that can + * take an error (it has an error register and a fault table: node.h, + * v4_node_error_attach, v4_node_fault_attach) is let go and the error + * `code` is raised on it, as if it had stored the code to its error + * register: what it was doing ends there. Returns 1. A node that cannot + * stays blocked, as on the fabric, and 0 is returned; so is 0 for a node + * that is not blocked at a port, or is reading "any port". */ +int v4_node_port_gone(v4_node *n, v4_cell code); + +/* The neighbour on `port` writes `value`: the node, blocked reading that + * port or "any", is unblocked and will fetch it. */ +void v4_node_port_give(v4_node *n, unsigned port, v4_cell value); + +/* What is on the other end of the node's ports now: bit k of `writers` if + * the neighbour on port k is blocked writing to this node, bit k of + * `readers` if it is blocked reading from it and would take a word. */ +void v4_node_port_status(v4_node *n, unsigned writers, unsigned readers); + +/* Which port `addr` is: 0 .. V4_PORTS - 1, V4_PORT_ANY, V4_PORTS + 1 for the + * "which port" address, or -1 if it is none of them. */ +int v4_node_port_index(const v4_node *n, v4_cell addr); + +/* 1 if a fetch from `addr` can be made now: it is not a port, or the word + * has been given. 0 if it is a port with nothing given: the node is then + * blocked reading it, and the fetch must not be made. */ +int v4_node_read_ready(v4_node *n, v4_cell addr); + +/* A NODE NEWLY BORN (docs/v4.0.0/MESH.md 4.2). Reset, its ports attached at + * `base`, and P at "any port": it is blocked reading its ports, and will + * execute what a neighbour sends it. Nothing else is in it. */ +void v4_node_born(v4_node *n, v4_cell base); + +/* CONSOLE-RX and CONSOLE-STATUS, the console's receive side, on the + * single-node model. + * + * KEY and ?TERMINAL are device services too (DECOMPOSITION.md 5.10), and for + * the same reason as CONSOLE-TX the model stands in for the console with two + * memory-mapped registers and a queue of characters the test feeds. + * + * After v4_node_console_input_attach(n, rx, status), a data fetch (the + * opcodes @, @+ and @b, which go through v4_node_fetch) from word address + * `status` gives -1 when a character is pending and 0 when none is; + * `rx` gives the next pending character, 0 .. 255, and takes it off + * the queue; with none pending it gives -1 and takes nothing. + * Fetching the status changes nothing. Neither fetch reads or writes + * n->mem, a store to either address is an ordinary memory store, and + * v4_node_load -- which the executor uses to fetch instruction words and + * literals, and the assembler to patch them -- always reads memory, so code + * and literals are never mistaken for the registers. + * + * v4_node_console_feed appends characters to the queue and returns how many + * it took; the queue holds V4_CONSOLE_CAP characters that have not been + * read. A node has no input until it is attached: v4_node_reset detaches it + * (both addresses -1) and empties the queue. Attaching empties it too. + * Passing -1 for both detaches. The addresses are the caller's choice and + * must differ from each other and from CONSOLE-TX. + * + * Nothing here blocks. A KEY that must wait polls CONSOLE-STATUS, so on + * this model a wait is a loop that runs until the test feeds a character. */ +void v4_node_console_input_attach(v4_node *n, v4_cell rx, v4_cell status); +unsigned v4_node_console_feed(v4_node *n, const void *chars, unsigned len); + +/* A data fetch: what @, @+ and @b read at `addr`. The two receive registers + * above when attached, memory otherwise; 0 outside memory, as v4_node_load. */ +v4_cell v4_node_fetch(v4_node *n, v4_cell addr); + +/* 1 if `addr` is a word of node memory. */ +int v4_node_addr_ok(v4_cell addr); + +/* FAULTS (DECOMPOSITION.md D-14 and D-16, ruled 2026-10-04: an address + * outside the node's memory, and a stack pushed when full or popped when + * empty, are guarded; an error is shown; the node returns to its prompt). + * + * The executor checks before every opcode (exec.h): + * - that the stacks hold what the opcode takes and have room for what it + * leaves; + * - every address a programme uses: P when an instruction word or an `@p` + * literal is fetched or `!p` stores, A for `@ @+ ! !+`, B for `@b !b`. + * If a check fails there is a fault: + * - the opcode does nothing, and the rest of its instruction word is not + * executed; A and B are untouched; + * - fault_kind says which, fault_addr is the address for an address fault, + * and faults is one more; + * - both stacks are emptied. The handler does not return to the + * programme, and what a word stopped in the middle of its work has left + * on the data stack is not something its caller can use. (A raised + * error, below, empties only the return stack: the word that raised it + * chose to, after taking its own arguments off); + * - P becomes fault_vector + fault_kind. The handler table is six words, + * one for each kind in the order below, each a jump to that kind's + * handler (capsule/quit.v4, (FAULTS)). + * With no table attached (fault_vector -1) the node stops instead: `stopped` + * is set and v4_exec_step_word does nothing more until the node is reset or + * a table is attached. + * + * v4_node_reset detaches the table and clears the count. Attaching clears + * `stopped` and the count; all six words of the table must be in memory, + * or `table` -1 to detach. */ +#define V4_FAULT_ADDRESS 0u /* an address outside memory (D-14) */ +#define V4_FAULT_DATA_OVER 1u /* a push onto a full data stack */ +#define V4_FAULT_DATA_UNDER 2u /* the data stack holds too little for the opcode */ +#define V4_FAULT_RET_OVER 3u /* a push onto a full return stack */ +#define V4_FAULT_RET_UNDER 4u /* the return stack holds too little for the opcode */ +#define V4_FAULT_RAISED 5u /* a programme stored an error code in NODE-ERROR (D-18) */ +#define V4_FAULT_KINDS 6u + +void v4_node_fault_attach(v4_node *n, v4_cell table); + +/* For the executor: record a fault of `kind` (at `addr`, for an address + * fault) and redirect or stop the node, as above. */ +void v4_node_fault(v4_node *n, unsigned kind, v4_cell addr); + +/* DSTACK-DEPTH and RSTACK-DEPTH, the stack registers (D-16). + * + * After v4_node_stack_regs_attach(n, d, r): + * a data fetch from `d` gives how many values the data stack holds (the + * fetch's own push not counted), and from `r` how many entries the return + * stack holds; + * a store to `d` empties the data stack (the value stored is taken off + * first and ignored), and a store to `r` empties the return stack. + * Neither reads or writes n->mem. This is all a programme can see of the + * stacks: there is still no stack pointer and no address for a stack cell. + * DEPTH reads the first; QUIT and ABORT store to them. v4_node_reset + * detaches both (-1); the addresses are the caller's choice (D-4). */ +void v4_node_stack_regs_attach(v4_node *n, v4_cell d, v4_cell r); + +/* A BLOCK (DECOMPOSITION.md D-19, 5.11). Mass storage is the kernel's: a + * node asks it for a block by a request on port 0 (docs/v4.0.0/MESH.md + * section 8; blocks.h), and has nothing of it but these. A block is 1024 bytes, and a byte + * address is four times a word address plus 0 .. 3 (D-1), so a block is 256 + * cells, four bytes to a cell, the first byte lowest, whatever the cell + * width. */ +#define V4_BLOCK_BYTES 1024u +#define V4_BLOCK_CELLS 256u + +/* NODE-ERROR as a trap (DECOMPOSITION.md D-18, ruled 2026-10-04: every error + * is guarded, shown, and returns the node to its prompt). + * + * A word that finds an error stores a code, which is not zero, in NODE-ERROR. + * After v4_node_error_attach(n, addr) a store of a non-zero value to `addr` + * writes that memory word, as before, and is then a fault of kind + * V4_FAULT_RAISED: the rest of the instruction word is not executed, the + * return stack is emptied, fault_addr is the code, and P becomes the sixth + * word of the fault table. The data stack is left alone. A store of zero + * -- which is how the flag is cleared -- is an ordinary store. + * + * Not attached (-1, as after v4_node_reset), NODE-ERROR is ordinary memory + * and a word that stores to it simply goes on: that is how a word can be run + * and its error seen with no prompt to return to. */ +void v4_node_error_attach(v4_node *n, v4_cell addr); + +#endif /* V4_NODE_H */ diff --git a/v4/include/v4/opcode.h b/v4/include/v4/opcode.h new file mode 100644 index 00000000..cbe67810 --- /dev/null +++ b/v4/include/v4/opcode.h @@ -0,0 +1,64 @@ +/* opcode.h -- the 32 core opcodes. + * + * DECOMPOSITION.md section 1.3. "Opcode numbering follows the F18. Two names + * differ from Moore's: F18 `-` is renamed `inv` and F18 `or` (which is + * exclusive-or) is renamed `xor`, so instruction names never collide with + * FORTH-79 word names." + * + * Those two renames are load-bearing, not cosmetic: FORTH-79 has words named + * `-` and `OR`, and the DECOMPOSITION table would otherwise have two distinct + * meanings per name. The renames are therefore asserted against the FORTH + * name set in tests/test_iword.c, so a future edit that reintroduces a + * collision fails a test rather than silently producing an ambiguous table. + * + * Branch opcodes are marked because the instruction-word format depends on + * them: only these five take a target out of the low bits of their slot, and + * only they are legal outside the low four slots (section 1.2). + */ +#ifndef V4_OPCODE_H +#define V4_OPCODE_H + +typedef enum { + V4_OP_SEMI = 0x00, /* ; return */ + V4_OP_EX = 0x01, /* ex swap P and R */ + V4_OP_JUMP = 0x02, /* jump a */ + V4_OP_CALL = 0x03, /* call a */ + V4_OP_UNEXT = 0x04, /* unext */ + V4_OP_NEXT = 0x05, /* next a */ + V4_OP_IF = 0x06, /* if a */ + V4_OP_MINUS_IF = 0x07, /* -if a */ + V4_OP_FETCH_P = 0x08, /* @p literal */ + V4_OP_FETCH_INC= 0x09, /* @+ */ + V4_OP_FETCH_B = 0x0A, /* @b */ + V4_OP_FETCH_A = 0x0B, /* @ */ + V4_OP_STORE_P = 0x0C, /* !p */ + V4_OP_STORE_INC= 0x0D, /* !+ */ + V4_OP_STORE_B = 0x0E, /* !b */ + V4_OP_STORE_A = 0x0F, /* ! */ + V4_OP_MUL_STEP = 0x10, /* +* multiply step, D-3 */ + V4_OP_TWO_STAR = 0x11, /* 2* */ + V4_OP_TWO_SLASH= 0x12, /* 2/ */ + V4_OP_INV = 0x13, /* inv (F18 `-`) */ + V4_OP_ADD = 0x14, /* + */ + V4_OP_AND = 0x15, /* and */ + V4_OP_XOR = 0x16, /* xor (F18 `or`) */ + V4_OP_DROP = 0x17, /* drop */ + V4_OP_DUP = 0x18, /* dup */ + V4_OP_RPOP = 0x19, /* pop R to data stack */ + V4_OP_OVER = 0x1A, /* over */ + V4_OP_PUSH_A = 0x1B, /* a */ + V4_OP_NOP = 0x1C, /* nop */ + V4_OP_PUSH = 0x1D, /* push T to return stack */ + V4_OP_BANG_B = 0x1E, /* b! B <- T */ + V4_OP_BANG_A = 0x1F, /* a! A <- T */ + + V4_OPCODE_COUNT = 0x20 +} v4_opcode; + +/* True for the five opcodes that take a branch target from the low bits of + * their slot: jump, call, next, if, -if. Everything else ignores the low + * bits of its slot, which is what makes a non-branch slot's low bits + * free for the compiler to use as a compressed argument. */ +int v4_op_is_branch(unsigned op); + +#endif /* V4_OPCODE_H */ diff --git a/v4/include/v4/post.h b/v4/include/v4/post.h new file mode 100644 index 00000000..fe91ff5b --- /dev/null +++ b/v4/include/v4/post.h @@ -0,0 +1,68 @@ +/* post.h -- POST, which is the kernel's. docs/v4.0.0/NUCLEUS.md section 6. + * + * As in v3, the kernel holds the cases and runs them on the node: nothing + * of POST is in the node's dictionary. A case is a name, its lines of + * FORTH, and what it must do. The table is generated from v3's own cases + * (v4/tools/mkpost.py -> v4/system/post_cases.c). + */ +#ifndef V4_POST_H +#define V4_POST_H + +#include "v4/node.h" + +#define V4_POST_STACK 0 /* its data stack and what it prints are compared */ +#define V4_POST_DEPTH 1 /* only how many values it leaves; what it prints is not compared */ +#define V4_POST_DEPTH_OUTPUT 2 /* how many values it leaves, and what it prints */ +#define V4_POST_ERROR 3 /* it must end in an error; nothing else is compared */ + +typedef struct { + const char *name; + const char *const *lines; /* line_count of them, sent one at a time */ + unsigned line_count; + int expect; /* V4_POST_* */ + const long long *stack; /* V4_POST_STACK: depth values, the deepest first; else 0 */ + unsigned depth; + const char *output; /* output_len characters */ + unsigned output_len; +} v4_post_case; + +extern const v4_post_case v4_post_cases[]; +extern const unsigned v4_post_case_count; + +/* THE RUNNER (v4/system/post.c). Whoever runs POST on a node supplies how a + * line is sent to it and where the console is. For each case the runner + * empties the node's data stack from outside; sends DECIMAL FORTH + * DEFINITIONS, the state every expected result was taken from; sends the + * case's lines one at a time, keeping what the node prints and showing none + * of it; and judges. A case passes when it ended in an error exactly if + * one was expected and, if none was, its stack and its printing are what + * the table has. It has ended in an error if any of its lines did. What + * the cases define is still in the node's dictionary when the runner + * returns: whoever runs POST puts the dictionary back afterwards, as v3 + * does after each of its suites (v3/src/test_runner/test_common.c, + * run_test_suite: "to remove test-created words"). + * + * If the node does not come back from a line -- it has stopped, or runs for + * ever -- that case fails and POST ends there: the runner says which case + * it was and how many were not run. */ +#define V4_POST_OUT 1024u /* the most of a case's printing that is kept */ + +typedef struct { + void *self; + v4_node *n; /* the node: its data stack is read and emptied */ + /* Send the node a line and run it to its end. What it prints is put at + * `out`, at most `cap` characters, and *len is how many it printed in + * all. Returns V4_TEXT_QUIT, V4_TEXT_COMPLETED or V4_TEXT_ERROR + * (message.h); or a negative number if the line did not come back. */ + int (*line)(void *self, const char *text, unsigned text_len, char *out, unsigned cap, unsigned *len); + void (*say)(void *self, const char *text, unsigned len); /* the console */ +} v4_post_host; + +typedef struct { unsigned tests, pass, fail; } v4_post_tally; + +/* Run the cases. Prints "POST FAIL: name out<...> stack<...>" for each + * failing case and then "PARITY:V4_POST tests=N pass=N fail=N", where tests + * is how many were run. Returns 1 if every case was run and none failed. */ +int v4_post_run(const v4_post_host *h, const v4_post_case *cases, unsigned count, v4_post_tally *tally); + +#endif /* V4_POST_H */ diff --git a/v4/include/v4/stack.h b/v4/include/v4/stack.h new file mode 100644 index 00000000..542b1994 --- /dev/null +++ b/v4/include/v4/stack.h @@ -0,0 +1,118 @@ +/* stack.h -- F18 circular hardware stacks (DECOMPOSITION.md D-2), counted (D-16). + * + * REVISED BY D-16 (2026-10-04). What follows describes the storage, which is + * unchanged: registers over a ring that wraps. But a running programme no + * longer sees the wrap. Each stack also counts what it holds, and the + * executor faults before an opcode would push onto a full stack or pop an + * empty one (exec.h). The wrap is now only what push and pop do when C code + * calls them directly at either end. + * + * D-2 rules these explicitly: "F18 circular stacks, hidden. Data stack 10 + * deep (T, S + 8 circular), return stack 9 deep (R + 8 circular), exactly as + * the F18. No stack pointer is visible to code, so DEPTH, PICK, ROLL, .S, + * SP@ and SP! are retired everywhere, host node included." + * + * Two consequences that the ISA and the capsule code must both respect: + * + * 1. There is no overflow or underflow detection, and there never will be. + * Pushing past the bottom silently overwrites the oldest entry. This is + * hardware behaviour, reproduced faithfully here rather than defended + * against: a golden model that trapped on overflow would diverge from + * the thing it is a model of, which is the whole point of the exercise. + * + * 2. Nesting is therefore shallow (10 and 9), and exceeding either depth + * corrupts silently rather than faulting. DECOMPOSITION.md section 3 + * calls this out as the constraint that "every CAP definition in section + * 4 and 5 must be re-checked against ... before it is accepted as a POST + * target; the hand traces so far assumed unbounded stacks." + * + * The T/S + 8-ring decomposition is the hardware shape, not an optimisation: + * T and S are architectural registers (section 1.1 lists them), and the ring + * is the circular part behind them. It is provably equivalent to a flat + * 10-deep circular buffer, which is what tests/test_stack.c checks it + * against -- see the equivalence argument in stack.c. + */ +#ifndef V4_STACK_H +#define V4_STACK_H + +#include "v4/cell.h" +#include "v4/guard.h" + +/* D-2: data stack is T, S + 8 circular = 10 deep. That is a mesh node. The + * ring size is a build parameter, like node memory (node.h): D-17 gives the + * host node, which runs the interpreter and the compiler under the user's + * programme, deeper stacks. Nothing else about the mechanism changes. */ +#ifndef V4_DATA_RING +#define V4_DATA_RING 8 +#endif +#define V4_DATA_DEPTH (V4_DATA_RING + 2) + +/* D-2: return stack is R + 8 circular = 9 deep; a build parameter likewise. */ +#ifndef V4_RET_RING +#define V4_RET_RING 8 +#endif +#define V4_RET_DEPTH (V4_RET_RING + 1) + +/* 5% safety boundary at each end of each ring, per guard.h. The bands sit + * immediately either side of `ring` -- a boundary separated from the payload + * by another field catches nothing -- and are storage the struct owns, because + * a mesh node has no heap. Widths are 1 element each at the current ring + * sizes; V4_GUARD_ELEMS scales them if a ring size ever changes. */ +#define V4_DATA_BOUND V4_GUARD_ELEMS(V4_DATA_RING) +#define V4_RET_BOUND V4_GUARD_ELEMS(V4_RET_RING) + +typedef struct { + v4_cell t; /* T -- top of data stack (a register) */ + v4_cell s; /* S -- second (a register) */ + unsigned head; + unsigned depth; /* how many values it holds, 0 .. V4_DATA_DEPTH (D-16) */ + + v4_cell guard_head[V4_DATA_BOUND]; + v4_cell ring[V4_DATA_RING]; + v4_cell guard_tail[V4_DATA_BOUND]; +} v4_dstack; + +typedef struct { + v4_cell r; /* R -- top of return stack (a register) */ + unsigned head; + unsigned depth; /* how many entries it holds, 0 .. V4_RET_DEPTH (D-16) */ + + v4_cell guard_head[V4_RET_BOUND]; + v4_cell ring[V4_RET_RING]; + v4_cell guard_tail[V4_RET_BOUND]; +} v4_rstack; + +void v4_dstack_reset(v4_dstack *st); +void v4_dstack_push(v4_dstack *st, v4_cell x); +v4_cell v4_dstack_pop(v4_dstack *st); + +/* Read the top without disturbing the stack. T is a register on hardware, so + * this is a plain read and needs no ring access. */ +v4_cell v4_dstack_peek(const v4_dstack *st); +/* Read the second element without disturbing the stack. */ +v4_cell v4_dstack_peek2(const v4_dstack *st); + +void v4_rstack_reset(v4_rstack *st); +void v4_rstack_push(v4_rstack *st, v4_cell x); +v4_cell v4_rstack_pop(v4_rstack *st); +v4_cell v4_rstack_peek(const v4_rstack *st); + +/* 1 if both boundaries of the data stack are intact, else 0. See guard.h for + * what this catches that AddressSanitizer does not. */ +/* THE DEPTH COUNT (DECOMPOSITION.md D-16, ruled 2026-10-04). Each stack + * counts what it holds: a push adds one, up to the stack's size, and a pop + * takes one, down to zero. The storage is still the F18's -- registers over + * a ring -- and push and pop still do exactly what they did when the count + * is at either end, so these functions never fail. It is the executor that + * guards: it reads the count before every opcode and faults instead of + * pushing onto a full stack or popping an empty one (exec.h). + * + * v4_dstack_clear and v4_rstack_clear empty a stack: the count goes to zero + * and nothing else changes. */ +void v4_dstack_clear(v4_dstack *st); +void v4_rstack_clear(v4_rstack *st); + +int v4_dstack_guards_intact(const v4_dstack *st); +int v4_rstack_guards_intact(const v4_rstack *st); + +#endif /* V4_STACK_H */ diff --git a/v4/include/v4/testcode.h b/v4/include/v4/testcode.h new file mode 100644 index 00000000..a5045c82 --- /dev/null +++ b/v4/include/v4/testcode.h @@ -0,0 +1,20 @@ +/* testcode.h -- run a word on a node, for tests. */ +#ifndef V4_TESTCODE_H +#define V4_TESTCODE_H + +#include "v4/exec.h" + +/* Where a word called by v4_test_call returns to. Nothing is executed there: + * arriving is the stop condition. */ +#define V4_TEST_HALT ((v4_cell)(V4_NODE_WORDS - 1u)) + +/* Call the word at `entry` as a caller would: push a return address, set P, + * and step instruction words until the word returns. The stacks and A, B are + * left as the caller set them, so arguments go on the data stack first. + * Returns the number of instruction words stepped, or -1 if the word had not + * returned after `max_words` or the node stopped on a fault (D-14, D-16). A + * stop left by an earlier call is cleared first. */ +long v4_test_call(v4_node *n, v4_exec_state *es, v4_heat *h, + v4_cell entry, long max_words); + +#endif /* V4_TESTCODE_H */ diff --git a/v4/include/v4/text.h b/v4/include/v4/text.h new file mode 100644 index 00000000..02213392 --- /dev/null +++ b/v4/include/v4/text.h @@ -0,0 +1,154 @@ +/* text.h -- assemble definitions written as text onto a node. + * + * Until now every DECOMPOSITION.md definition was retyped by hand in the + * tests as calls to the slot packer (asm.h), one opcode at a time. This + * reads the definitions as they are written in the document instead: + * + * : EMIT ( c -- ) CONSOLE-TX b! !b ; + * : SPACE 32 jump EMIT + * + * and lays them down through the same slot packer, so the words it produces + * are the ones the hand-written calls would have produced. It is test + * support, like asm.h: it is not the compiler capsule (JUSTIFICATION.md + * section 9), which is itself v4 code and will be assembled by this. + * + * THE NOTATION. Tokens are separated by white space. Names are case + * sensitive; the 32 opcode mnemonics are lower case. + * + * \ ... comment to the end of the line + * ( ... ) comment to the closing parenthesis + * : NAME start the word NAME at the next instruction word. A + * word ends where the next one starts; `;` is the return + * opcode and a word may hold several, or none (it then + * runs on into the next word). + * NAME call the word NAME. It may be defined later in the + * text, or in a later call to v4_text_assemble. + * 123 -5 $FF a literal: `@p` and its value. Decimal, or hex after $. + * It must fit a cell, as a signed or an unsigned number. + * CONST a constant given by v4_text_constant: a literal. + * CONST+N the constant plus the number N: one literal. (Only when + * the whole token is not itself a name.) + * &NAME the address of the word NAME, which must already be + * defined: a literal. + * ; + dup a! ... an opcode. `@p` cannot be written; write the number. + * jump X call X if X -if X next X + * a branch to X: a label of this word if it has one of + * that name, before or after the branch; otherwise a word. + * LABEL: a label, at the next instruction word. Labels belong + * to the word they are in and may be used before they + * are defined. + * FOR ... NEXT `push`, then the body, then `next` back to the body. + * FOR ... UNEXT the same with `unext`: the body and the `unext` must + * fit one instruction word and hold no literal. + * macro NAME ... endmacro + * NAME stands for the tokens between, wherever it is + * written afterwards (the document's "in line"). A macro + * may use other macros; it may not define a word, a label + * or a macro. + * + * header NAME a dictionary entry for NAME (capsule/dict.v4), laid down + * in front of the word that the next `:` starts, and + * linked to the header before it. NAME is taken as it + * stands -- it may be ( or \ or + -- and is at most 31 + * characters. Between it and the `:` may come the flags + * immediate, data, inline and compile-only. The word after + * `:` is the assembler's name for the code, as always, and + * need not be the same: header + inline : PLUS + ; + * + * A name is looked up in this order: opcode, macro, number, constant, label + * (for a branch target), word. So an opcode's name cannot be redefined, and + * the FORTH words that share one (`@`, `!`, `+`, ...) are written as their + * opcode sequences. + * + * BRANCH PLACEMENT. A branch's address field is what is left of its word, so + * it reaches less the later its slot. The slot packer refuses a branch that + * cannot reach its target; this never asks it to: a branch is put in a slot + * only if that slot reaches the whole node (at 1024 words, every legal slot), + * and otherwise starts a new word. + * + * ERRORS. The first error stops the assembly and is kept: v4_text_error + * gives a message with the line number, and every later call does nothing. + */ +#ifndef V4_TEXT_H +#define V4_TEXT_H + +#include "v4/asm.h" + +#define V4_TEXT_MAX_SYMBOLS 2048u /* words, constants and macros */ +#define V4_TEXT_MAX_LABELS 64u /* in one word */ +#define V4_TEXT_MAX_REFS 1024u /* branches whose target is not known yet */ +#define V4_TEXT_POOL 65536u /* characters of names and macro text */ +#define V4_TEXT_MAX_TOKEN 63u +#define V4_TEXT_MAX_DEPTH 8u /* macros inside macros; FOR inside FOR */ + +typedef struct { + unsigned name; /* offset into pool */ + unsigned char kind; + v4_cell value; /* address, constant, or macro text offset */ +} v4_text_symbol; + +typedef struct { + unsigned name; + v4_asm_ref ref; + unsigned line; + int local; /* may still turn out to be a label of this word */ +} v4_text_ref; + +typedef struct { + v4_asm as; + + v4_text_symbol sym[V4_TEXT_MAX_SYMBOLS]; + unsigned nsym; + + struct { unsigned name; v4_cell addr; } label[V4_TEXT_MAX_LABELS]; + unsigned nlabel; + + v4_text_ref ref[V4_TEXT_MAX_REFS]; + unsigned nref; + + v4_cell for_addr[V4_TEXT_MAX_DEPTH]; + unsigned nfor; + + char pool[V4_TEXT_POOL]; + unsigned pool_used; + + v4_cell latest; /* xt of the newest header, 0 if none */ + int header_pending; /* a header waits for its `:` */ + + unsigned line; + int failed; + char message[224]; +} v4_text; + +/* Start assembling at word address `origin` of node `n`. */ +void v4_text_begin(v4_text *t, v4_node *n, v4_cell origin); + +/* Give NAME a value; written in the text it is a literal. */ +void v4_text_constant(v4_text *t, const char *name, v4_cell value); + +/* Assemble `source`, a NUL-terminated string. May be called several times; + * words, constants and macros carry over, labels do not. Returns 1 if there + * has been no error. */ +int v4_text_assemble(v4_text *t, const char *source); + +/* The same for the text in the file at `path`. Its errors name the file. */ +int v4_text_assemble_file(v4_text *t, const char *path); + +/* Finish: every branch must have found its target. Returns 1 if there has + * been no error. Assembling may continue afterwards. */ +int v4_text_finish(v4_text *t); + +/* The address of the word NAME, or -1 if there is none. */ +v4_cell v4_text_word(const v4_text *t, const char *name); + +/* The xt of the newest `header`, 0 if there has been none: what the + * dictionary's LATEST starts as. */ +v4_cell v4_text_latest(const v4_text *t); + +/* The next free word address. */ +v4_cell v4_text_here(v4_text *t); + +/* "" if there has been no error, else what and where. */ +const char *v4_text_error(const v4_text *t); + +#endif /* V4_TEXT_H */ diff --git a/v4/include/v4/umul.h b/v4/include/v4/umul.h new file mode 100644 index 00000000..382b7640 --- /dev/null +++ b/v4/include/v4/umul.h @@ -0,0 +1,32 @@ +/* umul.h -- unsigned multiply fixing UM* under D-3 constraints. + * + * DECOMPOSITION.md section 4 first said of UM* (since rewritten to be exact over + * the full range; see test_foundation.c): "NEEDS REVISION: written for the carry-keeping + * +* that D-3 rejected. With plain F18 +* the carry out of T is lost, so this + * is only correct when the partial sums never overflow T (operands below 2^31). + * A full-range UM* needs a correction step; to be rewritten and proven on the + * golden model." + * + * D-3 states: "Plain F18 semantics. The carry out of T is not kept." + * The +* defined in the F18 shifts T:A right; the add is T <- T+S when bit 0 + * of A was set, but any carry out of that addition is discarded (not shifted + * into the high part). That means UM* as written only works for inputs whose + * partial products don't generate a carry beyond T's width during the loop. + * + * We need a correct full-range unsigned multiply (u1*u2 -> ulo, uhi) that is + * correct for all cell-width values of u1,u2, expressed in terms of the v4 + * primitives or at least specified precisely for the golden model. Since + * we're building the golden model in C first, the canonical implementation is + * the width-correct C multiplication split into high/low halves at V4_CELL_BITS. + * This header provides both: a reference C implementation (for verification) + * and a documented form that matches D-3's +* constraint. + */ +#ifndef V4_UMUL_H +#define V4_UMUL_H + +#include "v4/cell.h" + +/* Unsigned multiply: (u1, u2) -> (ulo, uhi). Full range, width-correct. */ +void v4_umul(v4_ucell u1, v4_ucell u2, v4_ucell *ulo, v4_ucell *uhi); + +#endif /* V4_UMUL_H */ diff --git a/v4/src/asm.c b/v4/src/asm.c new file mode 100644 index 00000000..0a2c7378 --- /dev/null +++ b/v4/src/asm.c @@ -0,0 +1,115 @@ +/* asm.c -- slot packer for test programs. See asm.h. */ +#include "v4/asm.h" + +static void put(v4_asm *as, unsigned op) +{ + as->cur |= (v4_iword)(op & 0x1Fu) << V4_SLOT_LOW_BIT(as->slot); + as->slot++; +} + +static void emit(v4_asm *as, v4_cell value) +{ + if (as->here < 0 || (v4_ucell)as->here >= V4_NODE_WORDS) { + as->error = 1; + return; + } + v4_node_store(as->n, as->here, value); + as->here++; +} + +/* Write out the word being built, then the literals it owes. */ +static void flush(v4_asm *as) +{ + if (as->slot == 0) return; + while (as->slot < V4_SLOT_COUNT) put(as, V4_OP_NOP); + emit(as, (v4_cell)as->cur); + for (unsigned i = 0; i < as->nlit; i++) emit(as, as->lit[i]); + as->cur = 0; + as->slot = 0; + as->nlit = 0; +} + +/* 1 if a branch in `slot`, executing with P = p, can reach `target`. */ +static int reachable(v4_cell p, unsigned slot, v4_cell target) +{ + v4_ucell mask = (v4_ucell)v4_iword_slot_mask(slot); + return (((v4_ucell)p ^ (v4_ucell)target) & ~mask) == 0; +} + +void v4_asm_begin(v4_asm *as, v4_node *n, v4_cell origin) +{ + as->n = n; + as->here = origin; + as->cur = 0; + as->slot = 0; + as->nlit = 0; + as->error = 0; +} + +void v4_asm_op(v4_asm *as, unsigned op) +{ + if (op >= V4_OPCODE_COUNT || v4_op_is_branch(op) || op == V4_OP_FETCH_P) { + as->error = 1; + return; + } + put(as, op); + if (op == V4_OP_SEMI || op == V4_OP_EX || as->slot == V4_SLOT_COUNT) flush(as); +} + +void v4_asm_lit(v4_asm *as, v4_cell value) +{ + put(as, V4_OP_FETCH_P); + as->lit[as->nlit++] = value; + if (as->slot == V4_SLOT_COUNT) flush(as); +} + +v4_asm_ref v4_asm_branch_fwd(v4_asm *as, unsigned op) +{ + v4_asm_ref ref; + + if (!v4_op_is_branch(op)) as->error = 1; + if (!v4_iword_branch_legal(as->slot)) flush(as); + + ref.addr = as->here; + ref.slot = as->slot; + /* The word has been fetched and every literal before the branch consumed + * by the time the branch executes. */ + ref.p = as->here + 1 + (v4_cell)as->nlit; + + put(as, op); + as->slot = V4_SLOT_COUNT; /* the rest of the word is address */ + flush(as); + return ref; +} + +void v4_asm_resolve(v4_asm *as, v4_asm_ref ref, v4_cell target) +{ + v4_ucell mask = (v4_ucell)v4_iword_slot_mask(ref.slot); + v4_ucell word; + + if (as->error) return; + if (!reachable(ref.p, ref.slot, target)) { + as->error = 1; + return; + } + word = (v4_ucell)v4_node_load(as->n, ref.addr); + word = (word & ~mask) | ((v4_ucell)target & mask); + v4_node_store(as->n, ref.addr, (v4_cell)word); +} + +void v4_asm_branch(v4_asm *as, unsigned op, v4_cell target) +{ + v4_asm_resolve(as, v4_asm_branch_fwd(as, op), target); +} + +v4_cell v4_asm_label(v4_asm *as) +{ + flush(as); + return as->here; +} + +int v4_asm_ok(v4_asm *as) +{ + flush(as); + return !as->error; +} diff --git a/v4/src/capsule.c b/v4/src/capsule.c new file mode 100644 index 00000000..6f87a61e --- /dev/null +++ b/v4/src/capsule.c @@ -0,0 +1,55 @@ +/* capsule.c -- a capsule of F18 code. See capsule.h. + * + * Nothing here uses the C library. + */ +#include "v4/capsule.h" +#include "v4/iword.h" +#include "v4/opcode.h" + +/* A stretch of zeros shorter than this, between words that are not zero, is + * sent with them: starting a new stretch costs four words. */ +#define GAP 4u + +static v4_cell words_of(unsigned a, unsigned b, unsigned c, unsigned d) +{ + unsigned op[V4_SLOT_COUNT]; + unsigned k; + op[0] = a; op[1] = b; op[2] = c; op[3] = d; + for (k = 4; k < V4_SLOT_COUNT; k++) op[k] = V4_OP_NOP; + return (v4_cell)v4_iword_assemble(op, 0); +} + +/* `jump addr`, the jump in the first slot so that its address is as wide as + * an address can be */ +static v4_cell jump_to(v4_cell addr) +{ + v4_ucell mask = (v4_ucell)v4_iword_slot_mask(0); + v4_ucell word = (v4_ucell)words_of(V4_OP_JUMP, V4_OP_NOP, V4_OP_NOP, V4_OP_NOP); + return (v4_cell)((word & ~mask) | ((v4_ucell)addr & mask)); +} + +unsigned v4_capsule_write(const v4_node *n, v4_cell start, + void (*out)(void *self, v4_cell word), void *self) +{ + unsigned k = 0, written = 0; + + while (k < V4_NODE_WORDS) { + unsigned first, last, zeros, i; + + if (n->mem[k] == 0) { k++; continue; } + first = last = k; + zeros = 0; + for (i = k + 1; i < V4_NODE_WORDS && zeros < GAP; i++) { + if (n->mem[i] != 0) { last = i; zeros = 0; } else zeros++; + } + out(self, words_of(V4_OP_FETCH_P, V4_OP_BANG_A, V4_OP_FETCH_P, V4_OP_PUSH)); + out(self, (v4_cell)first); + out(self, (v4_cell)(last - first)); + out(self, words_of(V4_OP_FETCH_P, V4_OP_STORE_INC, V4_OP_UNEXT, V4_OP_NOP)); + for (i = first; i <= last; i++) out(self, n->mem[i]); + written += 4u + (last - first + 1u); + k = last + 1; + } + out(self, jump_to(start)); + return written + 1u; +} diff --git a/v4/src/exec.c b/v4/src/exec.c new file mode 100644 index 00000000..cf99a66a --- /dev/null +++ b/v4/src/exec.c @@ -0,0 +1,330 @@ +/* exec.c -- instruction execution. See exec.h. + * + * All cell arithmetic is done in v4_ucell and converted back. Signed overflow + * is undefined behaviour in C99 and a right shift of a negative value is + * implementation-defined, and a golden model cannot have either: the hardware + * wraps, so the model wraps, on every host and at every optimisation level. + */ +#include "v4/exec.h" + +static v4_cell add_wrap(v4_cell x, v4_cell y) +{ + return (v4_cell)((v4_ucell)x + (v4_ucell)y); +} + +/* Arithmetic shift right by one: the sign bit is kept. */ +static v4_cell asr1(v4_cell x) +{ + v4_ucell u = (v4_ucell)x; + return (v4_cell)((u >> 1) | (u & V4_MSB)); +} + +/* An instruction word occupies the low 32 bits of a cell at every cell width + * (DECOMPOSITION.md D-9). */ +static v4_iword fetch_iword(const v4_node *n, v4_cell addr) +{ + return (v4_iword)((v4_ucell)v4_node_load(n, addr) & 0xFFFFFFFFu); +} + +/* Opcodes after which no further slot of the word executes. The five branch + * opcodes end it because everything to their right is address, taken or not. + * `;` and `ex` end it because P has been replaced, as on the F18. `unext` is + * not in this set: when its loop finishes it falls through to the next slot. */ +static int ends_word(unsigned op) +{ + return v4_op_is_branch(op) || op == V4_OP_SEMI || op == V4_OP_EX; +} + +/* D-14: an address outside memory is a fault, and the opcode does nothing. */ +static int faulted(v4_node *n, v4_cell addr) +{ + if (v4_node_addr_ok(addr)) return 0; + v4_node_fault(n, V4_FAULT_ADDRESS, addr); + return 1; +} + +/* D-16: what each opcode takes from the stacks and leaves on them. If the + * data stack holds fewer than `dneed`, or the return stack fewer than + * `rneed`, or a stack the opcode leaves one more on is full, it is a fault + * and the opcode does nothing. An opcode that only looks at T (`if`) or at + * T and S (`+*`) needs them to be there. */ +static int stack_faulted(v4_node *n, unsigned op) +{ + unsigned dneed = 0, rneed = 0, dgrow = 0, rgrow = 0; + + switch (op) { + case V4_OP_SEMI: case V4_OP_EX: case V4_OP_UNEXT: case V4_OP_NEXT: + rneed = 1; break; + case V4_OP_CALL: + rgrow = 1; break; + case V4_OP_FETCH_P: case V4_OP_FETCH_INC: case V4_OP_FETCH_B: case V4_OP_FETCH_A: case V4_OP_PUSH_A: + dgrow = 1; break; + case V4_OP_IF: case V4_OP_MINUS_IF: + case V4_OP_STORE_P: case V4_OP_STORE_INC: case V4_OP_STORE_B: case V4_OP_STORE_A: + case V4_OP_TWO_STAR: case V4_OP_TWO_SLASH: case V4_OP_INV: case V4_OP_DROP: + case V4_OP_BANG_B: case V4_OP_BANG_A: + dneed = 1; break; + case V4_OP_MUL_STEP: case V4_OP_ADD: case V4_OP_AND: case V4_OP_XOR: + dneed = 2; break; + case V4_OP_DUP: + dneed = 1; dgrow = 1; break; + case V4_OP_OVER: + dneed = 2; dgrow = 1; break; + case V4_OP_RPOP: + rneed = 1; dgrow = 1; break; + case V4_OP_PUSH: + dneed = 1; rgrow = 1; break; + default: + break; /* jump, nop */ + } + if (n->ds.depth < dneed) { v4_node_fault(n, V4_FAULT_DATA_UNDER, 0); return 1; } + if (n->rs.depth < rneed) { v4_node_fault(n, V4_FAULT_RET_UNDER, 0); return 1; } + if (dgrow && n->ds.depth >= V4_DATA_DEPTH) { v4_node_fault(n, V4_FAULT_DATA_OVER, 0); return 1; } + if (rgrow && n->rs.depth >= V4_RET_DEPTH) { v4_node_fault(n, V4_FAULT_RET_OVER, 0); return 1; } + return 0; +} + +void v4_exec_reset(v4_exec_state *es) +{ + es->anticlock = 0; + es->resume = 0; + es->resume_iw = 0; + es->resume_slot = 0; + es->resume_faults = 0; +} + +void v4_exec_op(v4_node *n, v4_exec_state *es, v4_heat *h, + unsigned op, v4_iword w, unsigned slot) +{ + v4_dstack *ds = &n->ds; + v4_rstack *rs = &n->rs; + v4_cell x; + + if (op <= V4_OP_BANG_A && stack_faulted(n, op)) return; + + switch (op) { + case V4_OP_SEMI: + n->p = v4_rstack_pop(rs); + break; + case V4_OP_EX: + x = rs->r; + rs->r = n->p; + n->p = x; + break; + case V4_OP_JUMP: + n->p = v4_iword_branch(n->p, w, slot); + break; + case V4_OP_CALL: + x = v4_iword_branch(n->p, w, slot); + v4_rstack_push(rs, n->p); + v4_heat_on_call(h, x); + n->p = x; + break; + case V4_OP_UNEXT: + /* The restart at slot 0 is v4_exec_step_word's business; this is only + * the effect on R. */ + if (rs->r != 0) rs->r = add_wrap(rs->r, -1); + else (void)v4_rstack_pop(rs); + break; + case V4_OP_NEXT: + if (rs->r != 0) { + rs->r = add_wrap(rs->r, -1); + n->p = v4_iword_branch(n->p, w, slot); + } else { + (void)v4_rstack_pop(rs); + } + break; + case V4_OP_IF: /* does not pop T */ + if (ds->t == 0) n->p = v4_iword_branch(n->p, w, slot); + break; + case V4_OP_MINUS_IF: /* does not pop T */ + if (((v4_ucell)ds->t & V4_MSB) == 0) n->p = v4_iword_branch(n->p, w, slot); + break; + + case V4_OP_FETCH_P: + if (faulted(n, n->p)) return; + if (v4_node_port_index(n, n->p) >= 0) { + /* P is a port: the literal is the next word its neighbour + * writes, and P stays where it is */ + if (!v4_node_read_ready(n, n->p)) return; + v4_dstack_push(ds, v4_node_fetch(n, n->p)); + break; + } + v4_dstack_push(ds, v4_node_load(n, n->p)); + n->p = add_wrap(n->p, 1); + break; + case V4_OP_FETCH_INC: + if (faulted(n, n->a)) return; + if (!v4_node_read_ready(n, n->a)) return; /* a port with nothing written to it yet */ + v4_dstack_push(ds, v4_node_fetch(n, n->a)); + n->a = add_wrap(n->a, 1); + break; + case V4_OP_FETCH_B: + if (faulted(n, n->b)) return; + if (!v4_node_read_ready(n, n->b)) return; /* a port with nothing written to it yet */ + v4_dstack_push(ds, v4_node_fetch(n, n->b)); + break; + case V4_OP_FETCH_A: + if (faulted(n, n->a)) return; + if (!v4_node_read_ready(n, n->a)) return; /* a port with nothing written to it yet */ + v4_dstack_push(ds, v4_node_fetch(n, n->a)); + break; + case V4_OP_STORE_P: + if (faulted(n, n->p)) return; + v4_node_store(n, n->p, v4_dstack_pop(ds)); + n->p = add_wrap(n->p, 1); + break; + case V4_OP_STORE_INC: + if (faulted(n, n->a)) return; + v4_node_store(n, n->a, v4_dstack_pop(ds)); + n->a = add_wrap(n->a, 1); + break; + case V4_OP_STORE_B: + if (faulted(n, n->b)) return; + v4_node_store(n, n->b, v4_dstack_pop(ds)); + break; + case V4_OP_STORE_A: + if (faulted(n, n->a)) return; + v4_node_store(n, n->a, v4_dstack_pop(ds)); + break; + + case V4_OP_MUL_STEP: + /* D-3, plain F18: the carry out of T+S is not kept. T:A then shifts + * right one bit, T keeping its sign bit and T's bit 0 entering the top + * of A. S is not consumed. */ + x = ds->t; + if ((v4_ucell)n->a & 1u) x = add_wrap(x, ds->s); + n->a = (v4_cell)(((v4_ucell)n->a >> 1) + | (((v4_ucell)x & 1u) << (V4_CELL_BITS - 1))); + ds->t = asr1(x); + break; + case V4_OP_TWO_STAR: + ds->t = (v4_cell)((v4_ucell)ds->t << 1); + break; + case V4_OP_TWO_SLASH: + ds->t = asr1(ds->t); + break; + case V4_OP_INV: + ds->t = (v4_cell)~(v4_ucell)ds->t; + break; + case V4_OP_ADD: + x = v4_dstack_pop(ds); /* old T; T is now old S */ + ds->t = add_wrap(ds->t, x); + break; + case V4_OP_AND: + x = v4_dstack_pop(ds); + ds->t = (v4_cell)((v4_ucell)ds->t & (v4_ucell)x); + break; + case V4_OP_XOR: + x = v4_dstack_pop(ds); + ds->t = (v4_cell)((v4_ucell)ds->t ^ (v4_ucell)x); + break; + case V4_OP_DROP: + (void)v4_dstack_pop(ds); + break; + case V4_OP_DUP: + v4_dstack_push(ds, ds->t); + break; + case V4_OP_RPOP: + v4_dstack_push(ds, v4_rstack_pop(rs)); + break; + case V4_OP_OVER: + v4_dstack_push(ds, ds->s); + break; + case V4_OP_PUSH_A: + v4_dstack_push(ds, n->a); + break; + case V4_OP_NOP: + break; + case V4_OP_PUSH: + v4_rstack_push(rs, v4_dstack_pop(ds)); + break; + case V4_OP_BANG_B: + n->b = v4_dstack_pop(ds); + break; + case V4_OP_BANG_A: + n->a = v4_dstack_pop(ds); + break; + default: + return; /* not an opcode: nothing retires */ + } + + v4_heat_on_retire(h, op, &es->anticlock); +} + +unsigned v4_exec_step_word(v4_node *n, v4_exec_state *es, v4_heat *h) +{ + v4_iword iw; + unsigned executed = 0; + unsigned slot = 0; + + /* D-14: a node that faulted with no handler has stopped. A node that + * has written to its port is blocked until it has been served. */ + if (n->stopped || n->asking || n->reading) return 0; + if (es->resume && es->resume_faults != n->faults) es->resume = 0; /* it faulted while blocked: P is the handler */ + if (es->resume) { + /* unblocked: the rest of the word it was in */ + es->resume = 0; + iw = es->resume_iw; + slot = es->resume_slot; + } else { + /* P itself may be what is outside memory */ + if (faulted(n, n->p)) return 0; + if (v4_node_port_index(n, n->p) >= 0) { + /* P is a port: the node executes what its neighbour writes + * there, and P stays where it is */ + if (!v4_node_read_ready(n, n->p)) return 0; + iw = (v4_iword)((v4_ucell)v4_node_fetch(n, n->p) & 0xFFFFFFFFu); + } else { + iw = fetch_iword(n, n->p); + n->p = add_wrap(n->p, 1); + } + } + + while (slot < V4_SLOT_COUNT) { + unsigned op = v4_iword_op(iw, slot); + /* Decided before the opcode runs, because running it changes R. */ + int again = (op == V4_OP_UNEXT) && (n->rs.r != 0); + unsigned faults = n->faults; + + v4_exec_op(n, es, h, op, iw, slot); + if (n->reading) { + /* The fetch was from a port with nothing written to it yet. The + * opcode has not executed: the node waits here, and this slot + * is where it goes on from. */ + es->resume = 1; + es->resume_iw = iw; + es->resume_slot = slot; + es->resume_faults = n->faults; + break; + } + if (n->faults != faults) { /* P is the handler now, or the node has stopped */ + /* a store that raised an error (D-18) did execute; any other fault means the opcode did not */ + if (n->fault_kind == V4_FAULT_RAISED) executed++; + break; + } + executed++; + + if (n->asking) { + /* The store was to the port. The node is blocked here; what is + * left of the word waits until it has been served. */ + if (slot + 1 < V4_SLOT_COUNT) { + es->resume = 1; + es->resume_iw = iw; + es->resume_slot = slot + 1; + es->resume_faults = n->faults; + } + break; + } + if (again) { + /* Same word, slot 0, no refetch and P untouched: an `@p` or `!p` + * inside a unext loop therefore walks the words that follow, as + * it does on the F18. */ + slot = 0; + continue; + } + if (ends_word(op)) break; + slot++; + } + return executed; +} diff --git a/v4/src/fabric.c b/v4/src/fabric.c new file mode 100644 index 00000000..04e8664f --- /dev/null +++ b/v4/src/fabric.c @@ -0,0 +1,217 @@ +/* fabric.c -- nodes, wiring, and time passing for all of them. See fabric.h. + * + * Nothing here uses the C library: the bare-metal kernel links this file. + */ +#include "v4/fabric.h" + +static void clear_place(v4_place *p) +{ + unsigned k; + p->node = 0; + p->asleep = 0; + for (k = 0; k < V4_PORTS; k++) { p->wire[k].kind = V4_WIRE_NONE; p->wire[k].node = 0; p->wire[k].port = 0; p->wire[k].device = 0; } +} + +void v4_fabric_init(v4_fabric *f, v4_place *places, unsigned capacity) +{ + unsigned i; + f->place = places; + f->capacity = capacity; + f->gone_error = 0; + for (i = 0; i < capacity; i++) clear_place(&places[i]); +} + +void v4_fabric_gone_error(v4_fabric *f, v4_cell code) +{ + f->gone_error = code; +} + +void v4_fabric_grow(v4_fabric *f, v4_place *places, unsigned capacity) +{ + unsigned i; + if (capacity < f->capacity) return; + for (i = 0; i < f->capacity; i++) places[i] = f->place[i]; + for (; i < capacity; i++) clear_place(&places[i]); + f->place = places; + f->capacity = capacity; +} + +int v4_fabric_add(v4_fabric *f, v4_fabric_node *storage, v4_cell port_base) +{ + unsigned i; + for (i = 0; i < f->capacity && f->place[i].node; i++) { } + if (i == f->capacity || !storage) return -1; + clear_place(&f->place[i]); + f->place[i].node = storage; + v4_node_born(&storage->n, port_base); + v4_exec_reset(&storage->es); + v4_heat_reset(&storage->h); + return (int)i; +} + +v4_fabric_node *v4_fabric_node_at(const v4_fabric *f, unsigned id) +{ + return id < f->capacity ? f->place[id].node : 0; +} + +static int there(const v4_fabric *f, unsigned id, unsigned port) +{ + return id < f->capacity && f->place[id].node && port < V4_PORTS; +} + +/* cut what is on a port, at both ends */ +static void cut(v4_fabric *f, unsigned a, unsigned pa) +{ + v4_wire *w = &f->place[a].wire[pa]; + if (w->kind == V4_WIRE_NODE && w->node < f->capacity && w->port < V4_PORTS) { + v4_wire *other = &f->place[w->node].wire[w->port]; + if (other->kind == V4_WIRE_NODE && other->node == a && other->port == pa) { other->kind = V4_WIRE_NONE; other->device = 0; } + } + w->kind = V4_WIRE_NONE; + w->device = 0; +} + +int v4_fabric_wire(v4_fabric *f, unsigned a, unsigned pa, unsigned b, unsigned pb) +{ + if (!there(f, a, pa) || !there(f, b, pb) || (a == b && pa == pb)) return 0; + cut(f, a, pa); + cut(f, b, pb); + f->place[a].wire[pa].kind = V4_WIRE_NODE; f->place[a].wire[pa].node = b; f->place[a].wire[pa].port = pb; + f->place[b].wire[pb].kind = V4_WIRE_NODE; f->place[b].wire[pb].node = a; f->place[b].wire[pb].port = pa; + return 1; +} + +int v4_fabric_wire_device(v4_fabric *f, unsigned a, unsigned pa, const v4_device *device) +{ + if (!there(f, a, pa) || !device) return 0; + cut(f, a, pa); + f->place[a].wire[pa].kind = V4_WIRE_DEVICE; + f->place[a].wire[pa].device = device; + return 1; +} + +int v4_fabric_unwire(v4_fabric *f, unsigned a, unsigned pa) +{ + if (!there(f, a, pa)) return 0; + cut(f, a, pa); + return 1; +} + +v4_fabric_node *v4_fabric_remove(v4_fabric *f, unsigned id) +{ + v4_fabric_node *storage; + unsigned k; + if (id >= f->capacity || !f->place[id].node) return 0; + for (k = 0; k < V4_PORTS; k++) cut(f, id, k); + storage = f->place[id].node; + clear_place(&f->place[id]); + return storage; +} + +void v4_fabric_sleep(v4_fabric *f, unsigned id) +{ + if (id < f->capacity && f->place[id].node) f->place[id].asleep = 1; +} + +void v4_fabric_wake(v4_fabric *f, unsigned id) +{ + if (id < f->capacity && f->place[id].node) f->place[id].asleep = 0; +} + +static int awake(const v4_fabric *f, unsigned id) +{ + return id < f->capacity && f->place[id].node && !f->place[id].asleep; +} + +/* What node `a` wrote to one of its ports, handed to whatever is there. */ +static unsigned hand_over_write(v4_fabric *f, unsigned a) +{ + v4_node *n = &f->place[a].node->n; + const v4_wire *w = &f->place[a].wire[n->ask_port]; + + if (w->kind == V4_WIRE_DEVICE) { + if (w->device->take && w->device->take(w->device->self, n->request)) { v4_node_port_served(n); return 1; } + } else if (w->kind == V4_WIRE_NODE && awake(f, w->node)) { + v4_node *r = &f->place[w->node].node->n; + if (r->reading && !r->given && (r->read_port == w->port || r->read_port == V4_PORT_ANY)) { + v4_node_port_give(r, w->port, n->request); + v4_node_port_served(n); + return 1; + } + } + return 0; +} + +/* Node `a` is reading: a device on that port, or on any of them, is asked. */ +static unsigned hand_over_read(v4_fabric *f, unsigned a) +{ + v4_node *n = &f->place[a].node->n; + unsigned first = n->read_port == V4_PORT_ANY ? 0 : n->read_port; + unsigned last = n->read_port == V4_PORT_ANY ? V4_PORTS - 1 : n->read_port; + unsigned k; + v4_cell value; + + for (k = first; k <= last; k++) { + const v4_wire *w = &f->place[a].wire[k]; + if (w->kind == V4_WIRE_DEVICE && w->device->give && w->device->give(w->device->self, &value)) { + v4_node_port_give(n, k, value); + return 1; + } + } + return 0; +} + +/* What node `a` can see of its neighbours before it executes: who is + * blocked writing to it, and who would take a word from it. A device is + * always ready to be written to; what it has to give, the node finds when + * it reads. */ +static void look_about(v4_fabric *f, unsigned a) +{ + unsigned k, writers = 0, readers = 0; + + for (k = 0; k < V4_PORTS; k++) { + const v4_wire *w = &f->place[a].wire[k]; + if (w->kind == V4_WIRE_DEVICE) { + if (w->device->take) readers |= 1u << k; + } else if (w->kind == V4_WIRE_NODE && awake(f, w->node)) { + const v4_node *o = &f->place[w->node].node->n; + if (o->asking && o->ask_port == w->port) writers |= 1u << k; + if (o->reading && !o->given && (o->read_port == w->port || o->read_port == V4_PORT_ANY)) readers |= 1u << k; + } + } + v4_node_port_status(&f->place[a].node->n, writers, readers); +} + +unsigned v4_fabric_step(v4_fabric *f) +{ + unsigned i, done = 0; + + /* a node that is blocked fetches nothing, and is looked about for when + * it is next to execute */ + for (i = 0; i < f->capacity; i++) + if (awake(f, i)) { + const v4_node *n = &f->place[i].node->n; + if (!n->stopped && !n->asking && !(n->reading && !n->given)) look_about(f, i); + } + + for (i = 0; i < f->capacity; i++) + if (awake(f, i)) done += v4_exec_step_word(&f->place[i].node->n, &f->place[i].node->es, &f->place[i].node->h); + + for (i = 0; i < f->capacity; i++) + if (awake(f, i) && f->place[i].node->n.asking) done += hand_over_write(f, i); + for (i = 0; i < f->capacity; i++) + if (awake(f, i) && f->place[i].node->n.reading && !f->place[i].node->n.given) done += hand_over_read(f, i); + + /* a node blocked at one port that nothing is wired to */ + if (f->gone_error != 0) + for (i = 0; i < f->capacity; i++) { + v4_node *n; + if (!awake(f, i)) continue; + n = &f->place[i].node->n; + if ((n->asking && f->place[i].wire[n->ask_port].kind == V4_WIRE_NONE) + || (n->reading && !n->given && n->read_port != V4_PORT_ANY && f->place[i].wire[n->read_port].kind == V4_WIRE_NONE)) + done += (unsigned)v4_node_port_gone(n, f->gone_error); + } + + return done; +} diff --git a/v4/src/guard.c b/v4/src/guard.c new file mode 100644 index 00000000..c0bad815 --- /dev/null +++ b/v4/src/guard.c @@ -0,0 +1,15 @@ +/* guard.c -- 5% safety boundaries. See guard.h. */ +#include "v4/guard.h" + +void v4_guard_fill(v4_cell *band, unsigned n, v4_ucell pattern) +{ + for (unsigned i = 0; i < n; i++) band[i] = (v4_cell)pattern; +} + +int v4_guard_intact(const v4_cell *band, unsigned n, v4_ucell pattern) +{ + for (unsigned i = 0; i < n; i++) { + if ((v4_ucell)band[i] != pattern) return 0; + } + return 1; +} diff --git a/v4/src/heat.c b/v4/src/heat.c new file mode 100644 index 00000000..482ddc20 --- /dev/null +++ b/v4/src/heat.c @@ -0,0 +1,91 @@ +/* heat.c -- heat and anti-clock. See heat.h. */ +#include "v4/heat.h" + +void v4_heat_reset(v4_heat *h) +{ + /* Loops, not memset: the engine uses nothing from the C library, so that + * the bare-metal kernel can link it as it is. */ + unsigned i; + for (i = 0; i < sizeof h->op / sizeof h->op[0]; i++) h->op[i] = 0; + for (i = 0; i < sizeof h->call / sizeof h->call[0]; i++) h->call[i] = 0; + for (i = 0; i < sizeof h->call_freeze_mask / sizeof h->call_freeze_mask[0]; i++) h->call_freeze_mask[i] = 0; +} + +void v4_heat_on_retire(v4_heat *h, unsigned op, v4_uheat_t *anticlock) +{ + if (op < V4_OPCODE_COUNT) { + h->op[op]++; + } + if (anticlock) (*anticlock)++; +} + +static unsigned call_index(v4_cell target) +{ + /* Index by target address. The table is a fixed-size cache for the model. + * A real hardware table is deferred; here we hash-mod or just take low bits? + * Or simply if in range use it. The spec says "per-call-target heat table" + * indexed by target. For golden model, targets are small (node memory). */ + unsigned idx = (unsigned)(v4_ucell)target; + if (idx >= V4_HEAT_MAX_CALL_TARGETS) { + /* Out of range: ignore for now? Or clamp? D-6 deferred; but heat must + * be recorded for actual call targets exercised. Many tests will have + * targets < 4096. This is a conservative model choice: if target is + * outside the modeled table, we do not increment a modeled slot (and + * we could log, but not specified). The boundary philosophy says detect + * rather than corrupt: for the model, we just don't record in the fixed + * table -- acceptable until D-4/D-6 pin sizes. */ + return (unsigned)-1; /* invalid */ + } + return idx; +} + +void v4_heat_on_call(v4_heat *h, v4_cell target) +{ + unsigned idx = call_index(target); + if (idx == (unsigned)-1) return; + if (v4_heat_call_is_frozen(h, target)) return; + h->call[idx]++; +} + +v4_uheat_t v4_heat_call_get(const v4_heat *h, v4_cell target) +{ + unsigned idx = call_index(target); + if (idx == (unsigned)-1) return 0; + return h->call[idx]; +} + +int v4_heat_call_set(v4_heat *h, v4_cell target, v4_uheat_t val) +{ + unsigned idx = call_index(target); + if (idx == (unsigned)-1) return 0; + if (v4_heat_call_is_frozen(h, target)) return 0; + h->call[idx] = val; + return 1; +} + +void v4_heat_call_freeze(v4_heat *h, v4_cell target) +{ + unsigned idx = call_index(target); + if (idx == (unsigned)-1) return; + unsigned word = idx / (8u * sizeof(v4_ucell)); + unsigned bit = idx % (8u * sizeof(v4_ucell)); + h->call_freeze_mask[word] |= ((v4_ucell)1u << bit); +} + +void v4_heat_call_unfreeze(v4_heat *h, v4_cell target) +{ + unsigned idx = call_index(target); + if (idx == (unsigned)-1) return; + unsigned word = idx / (8u * sizeof(v4_ucell)); + unsigned bit = idx % (8u * sizeof(v4_ucell)); + h->call_freeze_mask[word] &= ~((v4_ucell)1u << bit); +} + +int v4_heat_call_is_frozen(const v4_heat *h, v4_cell target) +{ + unsigned idx = call_index(target); + if (idx == (unsigned)-1) return 0; + unsigned word = idx / (8u * sizeof(v4_ucell)); + unsigned bit = idx % (8u * sizeof(v4_ucell)); + return (h->call_freeze_mask[word] & ((v4_ucell)1u << bit)) != 0; +} diff --git a/v4/src/image.c b/v4/src/image.c new file mode 100644 index 00000000..f9b7711c --- /dev/null +++ b/v4/src/image.c @@ -0,0 +1,62 @@ +/* image.c -- the StarForth nucleus, as its host knows it. See image.h. + * + * Nothing here uses the C library: the bare-metal kernel links this file. + */ +#include "v4/image.h" + +int v4_image_born(v4_node *n, v4_exec_state *es, v4_heat *h, const v4_image *im) +{ + if (im->cell_bits != (unsigned)V4_CELL_BITS || im->node_words != (unsigned)V4_NODE_WORDS + || im->data_ring != (unsigned)V4_DATA_RING || im->ret_ring != (unsigned)V4_RET_RING) + return 0; + + v4_node_born(n, im->port); + v4_exec_reset(es); + v4_heat_reset(h); + + v4_node_console_attach(n, im->console_tx); + v4_node_console_input_attach(n, im->console_rx, im->console_status); + v4_node_stack_regs_attach(n, im->dstack_reg, im->rstack_reg); + v4_node_error_attach(n, im->node_error); + v4_node_fault_attach(n, im->fault_table); + return 1; +} + +int v4_image_waiting(const v4_node *n, const v4_image *im) +{ + return n->input_pos == n->input_len && n->p >= im->key_start && n->p < im->key_end; +} + +void v4_image_seal(v4_node *n, const v4_image *im) +{ + n->mem[im->boot_cells] = n->mem[im->dp]; + n->mem[im->boot_cells + 1] = n->mem[im->latest]; + n->mem[im->fence] = (n->mem[im->dp] + 3) / 4; +} + +/* FNV-1a over the node's memory below HERE, a cell at a time, low byte + * first, and then LATEST. */ +#define FNV_OFFSET 0xcbf29ce484222325ULL +#define FNV_PRIME 0x00000100000001b3ULL + +static uint64_t hash_cell(uint64_t h, v4_cell c) +{ + v4_ucell u = (v4_ucell)c; + unsigned i; + for (i = 0; i < V4_CELL_BITS / 8; i++) { + h ^= (uint64_t)((u >> (8 * i)) & 0xffu); + h *= FNV_PRIME; + } + return h; +} + +uint64_t v4_image_dict_hash(const v4_node *n, const v4_image *im) +{ + uint64_t h = FNV_OFFSET; + v4_cell here = (n->mem[im->dp] + 3) / 4, k; + + if (here < 0) here = 0; + if (here > (v4_cell)V4_NODE_WORDS) here = (v4_cell)V4_NODE_WORDS; + for (k = 0; k < here; k++) h = hash_cell(h, n->mem[k]); + return hash_cell(h, n->mem[im->latest]); +} diff --git a/v4/src/iword.c b/v4/src/iword.c new file mode 100644 index 00000000..5f2b0a72 --- /dev/null +++ b/v4/src/iword.c @@ -0,0 +1,74 @@ +/* iword.c -- instruction-word decode. See iword.h for the layout. */ +#include "v4/iword.h" + +/* The five opcodes that consume a target from the low bits of their slot + * (section 1.2): jump, call, next, if, -if. A table rather than a switch so + * that the set is visible in one place and can be counted in the tests. */ +int v4_op_is_branch(unsigned op) +{ + return op == V4_OP_JUMP || op == V4_OP_CALL || op == V4_OP_NEXT + || op == V4_OP_IF || op == V4_OP_MINUS_IF; +} + +int v4_iword_branch_legal(unsigned slot) +{ + return slot < 4u; /* section 1.2: branches are legal in slots 0-3 only */ +} + +uint32_t v4_iword_slot_mask(unsigned slot) +{ + if (slot >= V4_SLOT_COUNT) return 0u; + /* 27-5k address bits, e.g. 0x07FFFFFF for slot 0 down to 0x00000FFF for + * slot 3. For slots 4 and 5 the formula still produces 7 and 2 bits; the + * legality check is separate because those slots are simply not usable. */ + return ((uint32_t)1u << V4_BRANCH_ADDR_BITS(slot)) - 1u; +} + +unsigned v4_iword_op(v4_iword w, unsigned slot) +{ + if (slot >= V4_SLOT_COUNT) return 0u; + return (unsigned)((w >> V4_SLOT_LOW_BIT(slot)) & 0x1Fu); +} + +unsigned v4_iword_spare(v4_iword w) +{ + return (unsigned)(w & ((1u << V4_SPARE_BITS) - 1u)); +} + +v4_iword v4_iword_target(v4_iword w, unsigned slot) +{ + if (slot >= V4_SLOT_COUNT) return 0u; + return w & v4_iword_slot_mask(slot); +} + +v4_iword v4_iword_assemble(const unsigned op[V4_SLOT_COUNT], unsigned spare) +{ + v4_iword w = 0u; + + for (unsigned k = 0; k < V4_SLOT_COUNT; k++) { + /* An opcode that does not fit in 5 bits is a bug in whoever built the + * word, not something to encode silently. Truncating here would let a + * malformed capsule execute as something else. */ + if (op[k] > 0x1Fu) return 0xFFFFFFFFu; + w |= (v4_iword)(op[k] & 0x1Fu) << V4_SLOT_LOW_BIT(k); + } + if (spare > ((1u << V4_SPARE_BITS) - 1u)) return 0xFFFFFFFFu; + w |= (v4_iword)(spare & ((1u << V4_SPARE_BITS) - 1u)); + + return w; +} + +v4_cell v4_iword_branch(v4_cell p, v4_iword w, unsigned slot) +{ + uint32_t mask = v4_iword_slot_mask(slot); + v4_ucell up = (v4_ucell)p; + + /* Page-relative, as in the F18: the target supplies the low + * V4_BRANCH_ADDR_BITS(slot) bits of P and the bits above them survive. The + * mask is computed in 32 bits and widened, so a 64-bit P keeps its high + * half -- which is the correct reading of "replaces the same low bits of P" + * at any cell width. */ + up = (up & ~(v4_ucell)mask) | (v4_ucell)(w & mask); + + return (v4_cell)up; +} diff --git a/v4/src/manage.c b/v4/src/manage.c new file mode 100644 index 00000000..9b44639f --- /dev/null +++ b/v4/src/manage.c @@ -0,0 +1,107 @@ +/* manage.c -- what Hera asks of whoever holds the fabric. See manage.h. + * + * Nothing here uses the C library: the bare-metal kernel links this file. + */ +#include "v4/manage.h" + +const char *const v4_manage_words[V4_MANAGE_WORDS] = { + "NODE-ME", "NODE-BORN", "NODE-WIRE", "NODE-UNWIRE", "NODE-SLEEP", "NODE-WAKE", "NODE-KILL", "NODE-PARITY", + "CAPSULE-OPEN", "CAPSULE-CELL", "CAPSULE-LINE" +}; + +/* A character of the node's memory: four to a cell, the first lowest, as + * the nucleus keeps text (v4/capsule/core.v4). */ +static int in_memory(v4_cell baddr) { return baddr >= 0 && (baddr >> 2) < (v4_cell)V4_NODE_WORDS; } +static char char_at(const v4_node *n, v4_cell baddr) +{ + return (char)(((v4_ucell)n->mem[baddr >> 2] >> (8 * (unsigned)(baddr & 3))) & 0xFFu); +} +static void char_put(v4_node *n, v4_cell baddr, char c) +{ + unsigned shift = 8 * (unsigned)(baddr & 3); + v4_ucell cell = (v4_ucell)n->mem[baddr >> 2]; + cell = (cell & ~((v4_ucell)0xFFu << shift)) | ((v4_ucell)(unsigned char)c << shift); + n->mem[baddr >> 2] = (v4_cell)cell; +} + +static unsigned place_of(v4_cell x) { return x < 0 ? ~0u : (unsigned)x; } + +int v4_manage_serve(const v4_manage *m, unsigned place, unsigned request) +{ + v4_fabric_node *asker = v4_fabric_node_at(m->f, place); + v4_node *n; + v4_cell a, b, c, d; + + if (!asker || request >= V4_MANAGE_WORDS) return 0; + n = &asker->n; + + switch (request) { + case 0: /* NODE-ME ( -- place ) */ + v4_dstack_push(&n->ds, (v4_cell)place); + break; + case 1: /* NODE-BORN ( -- place | -1 ) */ + v4_dstack_push(&n->ds, (v4_cell)(m->born ? m->born(m->self) : -1)); + break; + case 2: /* NODE-WIRE ( a pa b pb -- flag ) */ + d = v4_dstack_pop(&n->ds); c = v4_dstack_pop(&n->ds); b = v4_dstack_pop(&n->ds); a = v4_dstack_pop(&n->ds); + v4_dstack_push(&n->ds, v4_fabric_wire(m->f, place_of(a), place_of(b), place_of(c), place_of(d)) ? -1 : 0); + break; + case 3: /* NODE-UNWIRE ( a pa -- ) */ + b = v4_dstack_pop(&n->ds); a = v4_dstack_pop(&n->ds); + (void)v4_fabric_unwire(m->f, place_of(a), place_of(b)); + break; + case 4: /* NODE-SLEEP ( place -- ) */ + a = v4_dstack_pop(&n->ds); + v4_fabric_sleep(m->f, place_of(a)); + break; + case 5: /* NODE-WAKE ( place -- ) */ + a = v4_dstack_pop(&n->ds); + v4_fabric_wake(m->f, place_of(a)); + break; + case 6: { /* NODE-KILL ( place -- ) */ + v4_fabric_node *was; + a = v4_dstack_pop(&n->ds); + if (place_of(a) == place) break; /* not itself: there would be no one to answer */ + was = v4_fabric_remove(m->f, place_of(a)); + if (was && m->gone) m->gone(m->self, place_of(a), was); + break; + } + case 7: { /* NODE-PARITY ( place number -- ) */ + v4_fabric_node *it; + b = v4_dstack_pop(&n->ds); a = v4_dstack_pop(&n->ds); + it = v4_fabric_node_at(m->f, place_of(a)); + if (it && m->parity) m->parity(m->self, place_of(a), b, &it->n); + break; + } + case 8: { /* CAPSULE-OPEN ( baddr u -- flag ) */ + char name[64]; + unsigned i, len; + b = v4_dstack_pop(&n->ds); a = v4_dstack_pop(&n->ds); + len = b < 0 ? 0u : (unsigned)b; + if (len == 0 || len > sizeof name || !in_memory(a) || !in_memory(a + (v4_cell)len - 1) || !m->open) { + v4_dstack_push(&n->ds, 0); + break; + } + for (i = 0; i < len; i++) name[i] = char_at(n, a + (v4_cell)i); + v4_dstack_push(&n->ds, m->open(m->self, name, len) ? -1 : 0); + break; + } + case 9: /* CAPSULE-CELL ( -- w flag ) */ + a = 0; + if (m->cell && m->cell(m->self, &a)) { v4_dstack_push(&n->ds, a); v4_dstack_push(&n->ds, -1); } + else { v4_dstack_push(&n->ds, 0); v4_dstack_push(&n->ds, 0); } + break; + case 10: { /* CAPSULE-LINE ( baddr -- u | -1 ) */ + char text[V4_MANAGE_LINE]; + int len, i; + a = v4_dstack_pop(&n->ds); + len = m->line ? m->line(m->self, text) : -1; + if (len > V4_MANAGE_LINE) len = V4_MANAGE_LINE; + if (len > 0 && (!in_memory(a) || !in_memory(a + len - 1))) len = -1; + for (i = 0; i < len; i++) char_put(n, a + i, text[i]); + v4_dstack_push(&n->ds, (v4_cell)len); + break; + } + } + return 1; +} diff --git a/v4/src/message.c b/v4/src/message.c new file mode 100644 index 00000000..8581a4df --- /dev/null +++ b/v4/src/message.c @@ -0,0 +1,44 @@ +/* message.c -- a message, as it is written to a port and read from one. + * See message.h. Nothing here uses the C library. + */ +#include "v4/message.h" + +unsigned v4_message_text(v4_message *m, v4_cell to, v4_cell from, v4_cell type, const char *chars, unsigned len) +{ + unsigned i, words; + + if (len > V4_MSG_MAX_CHARS) return 0; + words = (len + 3u) / 4u; + m->word[0] = to; + m->word[1] = from; + m->word[2] = type; + m->word[3] = 0; + m->word[4] = 0; + m->word[5] = 0; + m->word[6] = (v4_cell)len; + for (i = 0; i < words; i++) m->word[V4_MSG_HEADER + i] = 0; + for (i = 0; i < len; i++) + m->word[V4_MSG_HEADER + i / 4u] = (v4_cell)((v4_ucell)m->word[V4_MSG_HEADER + i / 4u] + | ((v4_ucell)(unsigned char)chars[i] << (8u * (i % 4u)))); + m->count = V4_MSG_HEADER + words; + return m->count; +} + +unsigned v4_message_length(const v4_message *m) +{ + v4_cell len = m->word[6]; + return (len < 0 || len > (v4_cell)V4_MSG_MAX_CHARS) ? 0u : (unsigned)len; +} + +char v4_message_char(const v4_message *m, unsigned i) +{ + return (char)(((v4_ucell)m->word[V4_MSG_HEADER + i / 4u] >> (8u * (i % 4u))) & 0xFFu); +} + +int v4_message_word(v4_message *m, v4_cell word) +{ + if (m->count < V4_MSG_MAX_WORDS) m->word[m->count] = word; + m->count++; + if (m->count < V4_MSG_HEADER) return 0; + return m->count >= V4_MSG_HEADER + (v4_message_length(m) + 3u) / 4u; +} diff --git a/v4/src/node.c b/v4/src/node.c new file mode 100644 index 00000000..a7f788ed --- /dev/null +++ b/v4/src/node.c @@ -0,0 +1,234 @@ +/* node.c -- the v4 node. See node.h. */ +#include "v4/node.h" +#include + +void v4_node_reset(v4_node *n) +{ + n->p = 0; + n->a = 0; + n->b = 0; + for (unsigned i = 0; i < V4_NODE_WORDS; i++) n->mem[i] = 0; + v4_guard_fill(n->mem_guard_head, V4_MEM_BOUND, V4_GUARD_PATTERN_HEAD); + v4_guard_fill(n->mem_guard_tail, V4_MEM_BOUND, V4_GUARD_PATTERN_TAIL); + v4_dstack_reset(&n->ds); + v4_rstack_reset(&n->rs); + v4_node_console_attach(n, -1); + v4_node_console_input_attach(n, -1, -1); + v4_node_fault_attach(n, -1); + v4_node_stack_regs_attach(n, -1, -1); + v4_node_error_attach(n, -1); + v4_node_port_attach(n, -1); +} + +void v4_node_error_attach(v4_node *n, v4_cell addr) +{ + n->error_reg = addr; +} + +int v4_node_addr_ok(v4_cell addr) +{ + /* One unsigned compare covers both ends: a negative address is a very + * large unsigned one. */ + return (v4_ucell)addr < (v4_ucell)V4_NODE_WORDS; +} + +void v4_node_stack_regs_attach(v4_node *n, v4_cell d, v4_cell r) +{ + n->dstack_reg = d; + n->rstack_reg = r; +} + +void v4_node_fault_attach(v4_node *n, v4_cell table) +{ + n->fault_vector = (v4_node_addr_ok(table) && v4_node_addr_ok(table + (v4_cell)(V4_FAULT_KINDS - 1u))) ? table : (v4_cell)-1; + n->fault_addr = 0; + n->fault_kind = 0; + n->faults = 0; + n->stopped = 0; +} + +void v4_node_fault(v4_node *n, unsigned kind, v4_cell addr) +{ + n->fault_kind = kind; + n->fault_addr = addr; + n->faults++; + v4_rstack_clear(&n->rs); + if (kind != V4_FAULT_RAISED) v4_dstack_clear(&n->ds); + if (n->fault_vector >= 0) n->p = n->fault_vector + (v4_cell)kind; + else n->stopped = 1; +} + +int v4_node_guards_intact(const v4_node *n) +{ + return v4_guard_intact(n->mem_guard_head, V4_MEM_BOUND, V4_GUARD_PATTERN_HEAD) + && v4_guard_intact(n->mem_guard_tail, V4_MEM_BOUND, V4_GUARD_PATTERN_TAIL) + && v4_dstack_guards_intact(&n->ds) + && v4_rstack_guards_intact(&n->rs); +} + +v4_cell v4_node_load(const v4_node *n, v4_cell addr) +{ + if (!v4_node_addr_ok(addr)) return 0; + return n->mem[(unsigned)addr]; +} + +void v4_node_store(v4_node *n, v4_cell addr, v4_cell value) +{ + /* CONSOLE-TX: capture the character, leave memory alone. console_tx is + * -1 when no console is attached, which no valid address equals. */ + if (addr == n->console_tx) { + if (n->console_len < V4_CONSOLE_CAP) + n->console[n->console_len++] = (unsigned char)((v4_ucell)value & 0xFFu); + else + n->console_dropped++; + return; + } + /* A port: the node keeps what it wrote and is blocked until its + * neighbour has taken it. */ + { + int port = v4_node_port_index(n, addr); + if (port >= 0 && port < (int)V4_PORTS) { + n->request = value; + n->ask_port = (unsigned)port; + n->asking = 1; + return; + } + if (port >= 0) { v4_node_fault(n, V4_FAULT_ADDRESS, addr); return; } /* "any" and "which port" are not written to */ + } + /* The stack registers: a store empties the stack. -1 when not attached. */ + if (addr == n->dstack_reg) { v4_dstack_clear(&n->ds); return; } + if (addr == n->rstack_reg) { v4_rstack_clear(&n->rs); return; } + if (!v4_node_addr_ok(addr)) return; + n->mem[(unsigned)addr] = value; + /* NODE-ERROR: a non-zero code raises an error. -1 when not attached. */ + if (addr == n->error_reg && value != 0) v4_node_fault(n, V4_FAULT_RAISED, value); +} + +v4_cell v4_node_fetch(v4_node *n, v4_cell addr) +{ + /* console_rx and console_status are -1 when no input is attached, which + * no valid address equals. */ + if (addr == n->console_status) + return n->input_pos < n->input_len ? (v4_cell)-1 : (v4_cell)0; + if (addr == n->console_rx) { + v4_cell c; + if (n->input_pos >= n->input_len) return (v4_cell)-1; + c = (v4_cell)n->input[n->input_pos++]; + if (n->input_pos == n->input_len) n->input_pos = n->input_len = 0; + return c; + } + { + int port = v4_node_port_index(n, addr); + if (port == (int)V4_PORTS + 1) return (v4_cell)n->last_from; + if (port == (int)V4_PORTS + 2) return (v4_cell)n->writers; + if (port == (int)V4_PORTS + 3) return (v4_cell)n->readers; + if (port >= 0) { + /* the word its neighbour wrote; v4_node_read_ready has said it is there */ + if (!n->given) return 0; + n->given = 0; + if (port == (int)V4_PORT_ANY) n->last_from = n->given_port; + return n->given_value; + } + } + if (addr == n->dstack_reg) return (v4_cell)n->ds.depth; + if (addr == n->rstack_reg) return (v4_cell)n->rs.depth; + return v4_node_load(n, addr); +} + +void v4_node_console_input_attach(v4_node *n, v4_cell rx, v4_cell status) +{ + n->console_rx = rx; + n->console_status = status; + n->input_len = 0; + n->input_pos = 0; +} + +unsigned v4_node_console_feed(v4_node *n, const void *chars, unsigned len) +{ + const unsigned char *c = (const unsigned char *)chars; + unsigned i, pending = n->input_len - n->input_pos, took = 0; + + /* Slide what is pending to the front so the whole buffer is usable. */ + if (n->input_pos > 0) { + for (i = 0; i < pending; i++) n->input[i] = n->input[n->input_pos + i]; + n->input_pos = 0; + n->input_len = pending; + } + while (took < len && n->input_len < V4_CONSOLE_CAP) n->input[n->input_len++] = c[took++]; + return took; +} + +void v4_node_console_attach(v4_node *n, v4_cell addr) +{ + n->console_tx = addr; + n->console_len = 0; + n->console_dropped = 0; +} + +void v4_node_port_attach(v4_node *n, v4_cell base) +{ + n->port = base; + n->asking = 0; + n->request = 0; + n->ask_port = 0; + n->reading = 0; + n->read_port = 0; + n->given = 0; + n->given_value = 0; + n->given_port = 0; + n->last_from = 0; + n->writers = 0; + n->readers = 0; +} + +void v4_node_port_status(v4_node *n, unsigned writers, unsigned readers) +{ + n->writers = writers; + n->readers = readers; +} + +int v4_node_port_index(const v4_node *n, v4_cell addr) +{ + if (n->port < 0 || addr < n->port || addr > n->port + (v4_cell)V4_PORTS + 3) return -1; + return (int)(addr - n->port); +} + +int v4_node_read_ready(v4_node *n, v4_cell addr) +{ + int port = v4_node_port_index(n, addr); + if (port < 0 || port > (int)V4_PORT_ANY) return 1; + if (n->given && (port == (int)V4_PORT_ANY || (unsigned)port == n->given_port)) return 1; + n->reading = 1; + n->read_port = (unsigned)port; + return 0; +} + +void v4_node_port_give(v4_node *n, unsigned port, v4_cell value) +{ + n->given = 1; + n->given_value = value; + n->given_port = port; + n->reading = 0; +} + +void v4_node_born(v4_node *n, v4_cell base) +{ + v4_node_reset(n); + v4_node_port_attach(n, base); + n->p = base + (v4_cell)V4_PORT_ANY; +} + +void v4_node_port_served(v4_node *n) +{ + n->asking = 0; +} + +int v4_node_port_gone(v4_node *n, v4_cell code) +{ + if (code == 0 || n->error_reg < 0 || n->fault_vector < 0 || n->stopped) return 0; + if (n->asking) n->asking = 0; + else if (n->reading && !n->given && n->read_port != V4_PORT_ANY) n->reading = 0; + else return 0; + v4_node_store(n, n->error_reg, code); /* raises it: P is the node's handler now */ + return 1; +} diff --git a/v4/src/stack.c b/v4/src/stack.c new file mode 100644 index 00000000..570d9579 --- /dev/null +++ b/v4/src/stack.c @@ -0,0 +1,116 @@ +/* stack.c -- F18 circular hardware stacks. + * + * The two decompositions (T/S + 8-ring, R + 8-ring) are exactly equivalent to + * flat circular buffers of depth 10 and 9 respectively. The argument, since + * the ISA is specified in terms of the decomposition and the differential + * test in tests/test_stack.c is written against the flat form: + * + * Data stack, 10 deep. Read the stack top to bottom as + * + * T, S, ring[(head-1) mod 8], ring[(head-2) mod 8], ..., ring[head mod 8] + * + * -- that is, ring[(head-1) mod 8] sits immediately below S, and head names + * the oldest slot. push(x) does ring[head]=S; S=T; T=x; head=(head+1) mod 8, + * which appends at the top and rotates the oldest entry into the ring. + * pop() takes T, promotes S, and pulls ring[(head-1) mod 8] up into S while + * stepping head back one -- so the element that was third becomes second and + * the ring is re-seated one position earlier. That is a 10-slot circular + * buffer whose slot 0 is T and slot 1 is S, and the head arithmetic is + * bookkeeping for which ring slot is oldest. + * + * Return stack, 9 deep, same argument with one register instead of two: the + * stack reads R, ring[(head-1) mod 8], ..., ring[head mod 8]. + * + * "No overflow or underflow; pushing past the bottom silently overwrites the + * oldest entry" (D-2) is not an extra rule here -- it is what a fixed-depth + * circular buffer with no bounds check does on its own, once the pointer is + * allowed to wrap. Nothing below tests head against anything. + */ +#include "v4/stack.h" + +void v4_dstack_reset(v4_dstack *st) +{ + st->t = 0; + st->s = 0; + st->head = 0; + st->depth = 0; + for (unsigned i = 0; i < V4_DATA_RING; i++) st->ring[i] = 0; + v4_guard_fill(st->guard_head, V4_DATA_BOUND, V4_GUARD_PATTERN_HEAD); + v4_guard_fill(st->guard_tail, V4_DATA_BOUND, V4_GUARD_PATTERN_TAIL); +} + +int v4_dstack_guards_intact(const v4_dstack *st) +{ + return v4_guard_intact(st->guard_head, V4_DATA_BOUND, V4_GUARD_PATTERN_HEAD) + && v4_guard_intact(st->guard_tail, V4_DATA_BOUND, V4_GUARD_PATTERN_TAIL); +} + +void v4_dstack_push(v4_dstack *st, v4_cell x) +{ + st->ring[st->head] = st->s; + st->s = st->t; + st->t = x; + st->head = (st->head + 1u) % V4_DATA_RING; + if (st->depth < V4_DATA_DEPTH) st->depth++; +} + +void v4_dstack_clear(v4_dstack *st) { st->depth = 0; } +void v4_rstack_clear(v4_rstack *st) { st->depth = 0; } + +v4_cell v4_dstack_pop(v4_dstack *st) +{ + v4_cell x = st->t; + st->t = st->s; + st->head = (st->head + V4_DATA_RING - 1u) % V4_DATA_RING; + st->s = st->ring[st->head]; + if (st->depth > 0) st->depth--; + return x; +} + +v4_cell v4_dstack_peek(const v4_dstack *st) +{ + return st->t; +} + +v4_cell v4_dstack_peek2(const v4_dstack *st) +{ + return st->s; +} + +void v4_rstack_reset(v4_rstack *st) +{ + st->r = 0; + st->head = 0; + st->depth = 0; + for (unsigned i = 0; i < V4_RET_RING; i++) st->ring[i] = 0; + v4_guard_fill(st->guard_head, V4_RET_BOUND, V4_GUARD_PATTERN_HEAD); + v4_guard_fill(st->guard_tail, V4_RET_BOUND, V4_GUARD_PATTERN_TAIL); +} + +int v4_rstack_guards_intact(const v4_rstack *st) +{ + return v4_guard_intact(st->guard_head, V4_RET_BOUND, V4_GUARD_PATTERN_HEAD) + && v4_guard_intact(st->guard_tail, V4_RET_BOUND, V4_GUARD_PATTERN_TAIL); +} + +void v4_rstack_push(v4_rstack *st, v4_cell x) +{ + st->ring[st->head] = st->r; + st->r = x; + st->head = (st->head + 1u) % V4_RET_RING; + if (st->depth < V4_RET_DEPTH) st->depth++; +} + +v4_cell v4_rstack_pop(v4_rstack *st) +{ + v4_cell x = st->r; + st->head = (st->head + V4_RET_RING - 1u) % V4_RET_RING; + st->r = st->ring[st->head]; + if (st->depth > 0) st->depth--; + return x; +} + +v4_cell v4_rstack_peek(const v4_rstack *st) +{ + return st->r; +} diff --git a/v4/src/testcode.c b/v4/src/testcode.c new file mode 100644 index 00000000..460fdd88 --- /dev/null +++ b/v4/src/testcode.c @@ -0,0 +1,19 @@ +/* testcode.c -- run a word on a node, for tests. See testcode.h. */ +#include "v4/testcode.h" + +long v4_test_call(v4_node *n, v4_exec_state *es, v4_heat *h, + v4_cell entry, long max_words) +{ + long words = 0; + + n->stopped = 0; /* a stop left by an earlier call is over */ + v4_rstack_push(&n->rs, V4_TEST_HALT); + n->p = entry; + while (n->p != V4_TEST_HALT) { + if (words >= max_words) return -1; + (void)v4_exec_step_word(n, es, h); + if (n->stopped) return -1; /* an address fault with no handler (D-14) */ + words++; + } + return words; +} diff --git a/v4/src/text.c b/v4/src/text.c new file mode 100644 index 00000000..6da0ffdf --- /dev/null +++ b/v4/src/text.c @@ -0,0 +1,576 @@ +/* text.c -- assemble definitions written as text. See text.h. */ +#include "v4/text.h" +#include +#include +#include +#include + +enum { KIND_WORD = 1, KIND_CONST, KIND_MACRO }; + +static const char *const mnemonic[V4_OPCODE_COUNT] = { + ";", "ex", "jump", "call", "unext", "next", "if", "-if", + "@p", "@+", "@b", "@", "!p", "!+", "!b", "!", + "+*", "2*", "2/", "inv", "+", "and", "xor", "drop", + "dup", "pop", "over", "a", "nop", "push", "b!", "a!" +}; + +/* Where tokens come from: the source text, or a macro's text on top of it. */ +typedef struct { + const char *p[V4_TEXT_MAX_DEPTH + 1u]; + unsigned depth; /* 0: nothing; 1: the source; more: in macros */ +} reader; + +static void fail(v4_text *t, const char *what, const char *token) +{ + if (t->failed) return; + t->failed = 1; + if (token) snprintf(t->message, sizeof t->message, "line %u: %s: %s", t->line, what, token); + else snprintf(t->message, sizeof t->message, "line %u: %s", t->line, what); +} + +static unsigned intern(v4_text *t, const char *s) +{ + size_t len = strlen(s) + 1u; + unsigned at = t->pool_used; + if (len > V4_TEXT_POOL - t->pool_used) { fail(t, "out of name space", s); return 0; } + memcpy(t->pool + at, s, len); + t->pool_used += (unsigned)len; + return at; +} + +static int opcode_of(const char *s) +{ + for (int i = 0; i < (int)V4_OPCODE_COUNT; i++) if (strcmp(s, mnemonic[i]) == 0) return i; + return -1; +} + +static const v4_text_symbol *find(const v4_text *t, const char *s) +{ + for (unsigned i = t->nsym; i-- > 0; ) if (strcmp(t->pool + t->sym[i].name, s) == 0) return &t->sym[i]; + return NULL; +} + +/* The entry flags a `header` may be given (capsule/dict.v4). */ +static v4_cell flag_of(const char *s) +{ + if (strcmp(s, "immediate") == 0) return 1; + if (strcmp(s, "data") == 0) return 4; + if (strcmp(s, "inline") == 0) return 8; + if (strcmp(s, "compile-only") == 0) return 16; + return 0; +} + +static int is_reserved(const char *s) +{ + return strcmp(s, ":") == 0 || strcmp(s, "macro") == 0 || strcmp(s, "endmacro") == 0 + || strcmp(s, "\\") == 0 || strcmp(s, "(") == 0 + || strcmp(s, "FOR") == 0 || strcmp(s, "NEXT") == 0 || strcmp(s, "UNEXT") == 0 + || strcmp(s, "header") == 0 || flag_of(s) != 0; +} + +static int is_label_def(const char *s) +{ + size_t len = strlen(s); + return len > 1 && s[len - 1] == ':'; +} + +/* A whole token that is a number: decimal with an optional sign, or $hex. + * It must fit a cell, read as signed or as unsigned. */ +static int number_of(const char *s, v4_cell *out, int *too_big) +{ + const char *digits = s; + char *end; + int neg = 0, base = 10; + unsigned long long u; + + *too_big = 0; + if (*digits == '$') { base = 16; digits++; } + else if (*digits == '-') { neg = 1; digits++; } + if (*digits == 0) return 0; + for (const char *c = digits; *c; c++) { + int ok = (*c >= '0' && *c <= '9') + || (base == 16 && ((*c >= 'a' && *c <= 'f') || (*c >= 'A' && *c <= 'F'))); + if (!ok) return 0; + } + errno = 0; + u = strtoull(digits, &end, base); + if (*end) return 0; + if (errno == ERANGE + || (neg ? u > (unsigned long long)V4_MSB : u > (unsigned long long)(v4_ucell)~(v4_ucell)0)) { + *too_big = 1; + return 1; + } + *out = neg ? (v4_cell)((v4_ucell)0 - (v4_ucell)u) : (v4_cell)(v4_ucell)u; + return 1; +} + +/* The next token, or 0 at the end. Comments are skipped here, and lines + * counted, in the source only: a macro's text holds neither. */ +static int next_token(v4_text *t, reader *r, char *tok) +{ + for (;;) { + const char *p; + unsigned len = 0; + if (r->depth == 0) return 0; + p = r->p[r->depth - 1u]; + while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n') { + if (*p == '\n' && r->depth == 1) t->line++; + p++; + } + if (*p == 0) { r->depth--; continue; } + while (*p && *p != ' ' && *p != '\t' && *p != '\r' && *p != '\n') { + if (len < V4_TEXT_MAX_TOKEN) tok[len] = *p; + len++; p++; + } + if (len > V4_TEXT_MAX_TOKEN) { tok[V4_TEXT_MAX_TOKEN] = 0; fail(t, "name too long", tok); return 0; } + tok[len] = 0; + if (strcmp(tok, "\\") == 0) { + while (*p && *p != '\n') p++; + r->p[r->depth - 1u] = p; + continue; + } + if (strcmp(tok, "(") == 0) { + while (*p && *p != ')') { if (*p == '\n' && r->depth == 1) t->line++; p++; } + if (*p == 0) { fail(t, "comment not closed", NULL); return 0; } + r->p[r->depth - 1u] = p + 1; + continue; + } + r->p[r->depth - 1u] = p; + return 1; + } +} + +static void end_word(v4_text *t); +static void check_asm(v4_text *t, const char *tok); + +/* The next run of non-blank characters of the source, whatever they are: + * a header's name may be ( or \ or any opcode. */ +static int raw_token(v4_text *t, reader *r, char *tok) +{ + const char *p; + unsigned len = 0; + if (r->depth != 1) return 0; + p = r->p[0]; + while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n') { if (*p == '\n') t->line++; p++; } + while (*p && *p != ' ' && *p != '\t' && *p != '\r' && *p != '\n') { + if (len < V4_TEXT_MAX_TOKEN) tok[len] = *p; + len++; p++; + } + r->p[0] = p; + if (len == 0 || len > V4_TEXT_MAX_TOKEN) return 0; + tok[len] = 0; + return 1; +} + +/* One cell appended at the next word address; nothing is being built. */ +static void put_cell(v4_text *t, v4_cell value) +{ + v4_asm *as = &t->as; + if (as->here < 0 || (v4_ucell)as->here >= V4_NODE_WORDS) { as->error = 1; return; } + v4_node_store(as->n, as->here, value); + as->here++; +} + +/* `header NAME`: a dictionary entry for NAME, as capsule/dict.v4 lays one + * out, in front of the word the next `:` starts: + * the name: its count byte, then its characters, four bytes to a cell, + * zero-padded to a whole cell + * flags, the name's word address, the link to the entry before + * and the code follows. */ +static void header(v4_text *t, reader *r) +{ + char name[V4_TEXT_MAX_TOKEN + 1u]; + unsigned len, cells, i; + v4_cell nfa; + + if (r->depth != 1) { fail(t, "not allowed in a macro", "header"); return; } + if (t->header_pending) { fail(t, "header must be followed by :", NULL); return; } + if (!raw_token(t, r, name)) { fail(t, "header without a name, or one too long", NULL); return; } + len = (unsigned)strlen(name); + if (len > 31) { fail(t, "a header's name is at most 31 characters", name); return; } + end_word(t); + nfa = v4_asm_label(&t->as); + cells = (len + 4u) / 4u; + for (i = 0; i < cells; i++) { + v4_ucell w = 0; + for (unsigned b = 0; b < 4; b++) { + unsigned at = 4u * i + b; /* byte 0 is the count */ + unsigned ch = at == 0 ? len : (at <= len ? (unsigned char)name[at - 1u] : 0u); + w |= (v4_ucell)ch << (8u * b); + } + put_cell(t, (v4_cell)w); + } + put_cell(t, 0); + put_cell(t, nfa); + put_cell(t, t->latest); + check_asm(t, name); + if (t->failed) return; + t->latest = t->as.here; + t->header_pending = 1; +} + +/* A branch may go in the next slot only if that slot can reach every word of + * the node; otherwise it starts a new word. */ +static void place_branch(v4_text *t) +{ + v4_asm *as = &t->as; + if (as->slot == 0) return; + if (!v4_iword_branch_legal(as->slot) + || (v4_ucell)v4_iword_slot_mask(as->slot) < (v4_ucell)(V4_NODE_WORDS - 1u)) + (void)v4_asm_label(as); +} + +static void check_asm(v4_text *t, const char *tok) +{ + if (t->as.error) fail(t, "does not fit: memory is full, or a branch cannot reach", tok); +} + +static void branch_to(v4_text *t, unsigned op, v4_cell target, const char *tok) +{ + place_branch(t); + v4_asm_branch(&t->as, op, target); + check_asm(t, tok); +} + +static void branch_later(v4_text *t, unsigned op, const char *name, int local) +{ + v4_text_ref *ref; + if (t->nref == V4_TEXT_MAX_REFS) { fail(t, "too many unresolved branches", name); return; } + place_branch(t); + ref = &t->ref[t->nref]; + ref->name = intern(t, name); + ref->ref = v4_asm_branch_fwd(&t->as, op); + ref->line = t->line; + ref->local = local; + check_asm(t, name); + if (!t->failed) t->nref++; +} + +/* A branch to `name`. Written as a bare name it is a call to a word. After + * a branch mnemonic it is a label of this word if the word has one, before + * or after the branch, and only otherwise a word -- so it cannot be settled + * until the word ends, even when a word of that name already exists. */ +static void branch(v4_text *t, unsigned op, const char *name, int may_be_label) +{ + const v4_text_symbol *s; + if (may_be_label) + for (unsigned i = 0; i < t->nlabel; i++) + if (strcmp(t->pool + t->label[i].name, name) == 0) { branch_to(t, op, t->label[i].addr, name); return; } + s = find(t, name); + if (s && s->kind == KIND_WORD && !may_be_label) { branch_to(t, op, s->value, name); return; } + if ((s && s->kind != KIND_WORD) || opcode_of(name) >= 0 || is_reserved(name) || is_label_def(name)) { + fail(t, "not something to branch to", name); + return; + } + { + v4_cell v; int big; + if (number_of(name, &v, &big)) { fail(t, "not something to branch to", name); return; } + } + branch_later(t, op, name, may_be_label); +} + +static void resolve(v4_text *t, unsigned i, v4_cell target) +{ + v4_asm_resolve(&t->as, t->ref[i].ref, target); + if (t->as.error) { + unsigned line = t->line; + t->line = t->ref[i].line; + fail(t, "branch cannot reach", t->pool + t->ref[i].name); + t->line = line; + } + t->ref[i] = t->ref[--t->nref]; +} + +/* The word being assembled ends: its labels go, and what was not a label of + * it must be a word. */ +static void end_word(v4_text *t) +{ + if (t->nfor) { fail(t, "FOR without NEXT or UNEXT", NULL); t->nfor = 0; } + for (unsigned i = 0; i < t->nref && !t->failed; ) { + const v4_text_symbol *s; + if (!t->ref[i].local) { i++; continue; } + t->ref[i].local = 0; + s = find(t, t->pool + t->ref[i].name); + if (s && s->kind == KIND_WORD) resolve(t, i, s->value); /* moves another into place i */ + else i++; + } + t->nlabel = 0; +} + +static void define(v4_text *t, const char *name, unsigned char kind, v4_cell value) +{ + v4_cell v; int big; + if (opcode_of(name) >= 0 || is_reserved(name) || is_label_def(name) || number_of(name, &v, &big) || name[0] == '&') { + fail(t, "cannot be used as a name", name); + return; + } + if (find(t, name)) { fail(t, "already defined", name); return; } + if (t->nsym == V4_TEXT_MAX_SYMBOLS) { fail(t, "too many names", name); return; } + t->sym[t->nsym].name = intern(t, name); + t->sym[t->nsym].kind = kind; + t->sym[t->nsym].value = value; + if (!t->failed) t->nsym++; +} + +static void define_macro(v4_text *t, reader *r) +{ + char name[V4_TEXT_MAX_TOKEN + 1u], tok[V4_TEXT_MAX_TOKEN + 1u]; + unsigned start, line = t->line; + + if (r->depth != 1) { fail(t, "macro inside a macro", NULL); return; } + if (!next_token(t, r, name)) { fail(t, "macro without a name", NULL); return; } + start = t->pool_used; + for (;;) { + size_t len; + if (!next_token(t, r, tok)) { + if (!t->failed) { t->line = line; fail(t, "macro without endmacro", name); } + return; + } + if (strcmp(tok, "endmacro") == 0) break; + if (strcmp(tok, ":") == 0 || strcmp(tok, "macro") == 0 || is_label_def(tok)) { + fail(t, "not allowed in a macro", tok); + return; + } + len = strlen(tok); + if (len + 2u > V4_TEXT_POOL - t->pool_used) { fail(t, "out of name space", name); return; } + memcpy(t->pool + t->pool_used, tok, len); + t->pool_used += (unsigned)len; + t->pool[t->pool_used++] = ' '; + } + if (t->pool_used == V4_TEXT_POOL) { fail(t, "out of name space", name); return; } + t->pool[t->pool_used++] = 0; + define(t, name, KIND_MACRO, (v4_cell)start); +} + +static void one_token(v4_text *t, reader *r, const char *tok) +{ + const v4_text_symbol *s; + v4_asm *as = &t->as; + v4_cell v; + int op, big; + + if (strcmp(tok, "header") == 0) { header(t, r); return; } + if (t->header_pending) { + v4_cell f = flag_of(tok); + if (f) { as->n->mem[t->latest - 3] |= f; return; } + if (strcmp(tok, ":") != 0) { fail(t, "header must be followed by :", tok); return; } + } else if (flag_of(tok)) { fail(t, "a flag with no header before it", tok); return; } + if (strcmp(tok, ":") == 0) { + char name[V4_TEXT_MAX_TOKEN + 1u]; + if (r->depth != 1) { fail(t, "not allowed in a macro", tok); return; } + if (!next_token(t, r, name)) { fail(t, ": without a name", NULL); return; } + end_word(t); + define(t, name, KIND_WORD, v4_asm_label(as)); + t->header_pending = 0; + return; + } + if (strcmp(tok, "macro") == 0) { define_macro(t, r); return; } + if (strcmp(tok, "endmacro") == 0) { fail(t, "endmacro without macro", NULL); return; } + + if (is_label_def(tok)) { + char name[V4_TEXT_MAX_TOKEN + 1u]; + v4_cell addr; + size_t len = strlen(tok) - 1u; + memcpy(name, tok, len); + name[len] = 0; + for (unsigned i = 0; i < t->nlabel; i++) + if (strcmp(t->pool + t->label[i].name, name) == 0) { fail(t, "label already defined in this word", name); return; } + if (t->nlabel == V4_TEXT_MAX_LABELS) { fail(t, "too many labels in one word", name); return; } + addr = v4_asm_label(as); + t->label[t->nlabel].name = intern(t, name); + t->label[t->nlabel].addr = addr; + t->nlabel++; + for (unsigned i = 0; i < t->nref && !t->failed; ) + if (t->ref[i].local && strcmp(t->pool + t->ref[i].name, name) == 0) resolve(t, i, addr); + else i++; + return; + } + + if (strcmp(tok, "FOR") == 0) { + if (t->nfor == V4_TEXT_MAX_DEPTH) { fail(t, "FOR nested too deep", NULL); return; } + v4_asm_op(as, V4_OP_PUSH); + t->for_addr[t->nfor++] = v4_asm_label(as); + check_asm(t, tok); + return; + } + if (strcmp(tok, "NEXT") == 0) { + if (t->nfor == 0) { fail(t, "NEXT without FOR", NULL); return; } + branch_to(t, V4_OP_NEXT, t->for_addr[--t->nfor], tok); + return; + } + if (strcmp(tok, "UNEXT") == 0) { + v4_cell body; + if (t->nfor == 0) { fail(t, "UNEXT without FOR", NULL); return; } + body = t->for_addr[--t->nfor]; + /* unext repeats the word it is in, so it must still be the word the + * body started, with a slot left, and that word must own no literal */ + if (as->here != body || as->slot == 0 || as->slot >= V4_SLOT_COUNT || as->nlit != 0) { + fail(t, "FOR ... UNEXT must fit one instruction word and hold no literal", NULL); + return; + } + v4_asm_op(as, V4_OP_UNEXT); + check_asm(t, tok); + return; + } + + op = opcode_of(tok); + if (op >= 0) { + if (op == V4_OP_FETCH_P) { fail(t, "write the number, not @p", NULL); return; } + if (v4_op_is_branch((unsigned)op)) { + char target[V4_TEXT_MAX_TOKEN + 1u]; + if (!next_token(t, r, target)) { fail(t, "branch without a target", tok); return; } + branch(t, (unsigned)op, target, 1); + return; + } + v4_asm_op(as, (unsigned)op); + check_asm(t, tok); + return; + } + + if (tok[0] == '&' && tok[1] != 0) { /* the address of a word, as a literal */ + s = find(t, tok + 1); + if (!s || s->kind != KIND_WORD) { fail(t, "& needs a word that is already defined", tok + 1); return; } + v4_asm_lit(as, s->value); + check_asm(t, tok); + return; + } + + s = find(t, tok); + if (s && s->kind == KIND_MACRO) { + if (r->depth == V4_TEXT_MAX_DEPTH + 1u) { fail(t, "macros nested too deep", tok); return; } + r->p[r->depth++] = t->pool + (unsigned)s->value; + return; + } + if (number_of(tok, &v, &big)) { + if (big) { fail(t, "number does not fit a cell", tok); return; } + v4_asm_lit(as, v); + check_asm(t, tok); + return; + } + if (s && s->kind == KIND_CONST) { + v4_asm_lit(as, s->value); + check_asm(t, tok); + return; + } + if (!s) { /* CONST+N: a constant and an offset, one literal */ + const char *plus = strrchr(tok, '+'); + if (plus && plus != tok && plus[1] != 0) { + char left[V4_TEXT_MAX_TOKEN + 1u]; + const v4_text_symbol *c; + size_t len = (size_t)(plus - tok); + memcpy(left, tok, len); + left[len] = 0; + c = find(t, left); + if (c && c->kind == KIND_CONST && number_of(plus + 1, &v, &big) && !big) { + v4_asm_lit(as, (v4_cell)((v4_ucell)c->value + (v4_ucell)v)); + check_asm(t, tok); + return; + } + } + } + branch(t, V4_OP_CALL, tok, 0); /* a word, defined already or later */ +} + +void v4_text_begin(v4_text *t, v4_node *n, v4_cell origin) +{ + v4_asm_begin(&t->as, n, origin); + t->nsym = 0; + t->nlabel = 0; + t->nref = 0; + t->nfor = 0; + t->pool_used = 0; + t->line = 0; + t->failed = 0; + t->message[0] = 0; + t->latest = 0; + t->header_pending = 0; +} + +void v4_text_constant(v4_text *t, const char *name, v4_cell value) +{ + if (t->failed) return; + if (strlen(name) > V4_TEXT_MAX_TOKEN) { fail(t, "name too long", name); return; } + define(t, name, KIND_CONST, value); +} + +int v4_text_assemble(v4_text *t, const char *source) +{ + char tok[V4_TEXT_MAX_TOKEN + 1u]; + reader r; + + if (t->failed) return 0; + r.p[0] = source; + r.depth = 1; + t->line = 1; + while (!t->failed && next_token(t, &r, tok)) one_token(t, &r, tok); + if (!t->failed && t->header_pending) fail(t, "header must be followed by :", NULL); + if (!t->failed) end_word(t); + return !t->failed; +} + +int v4_text_assemble_file(v4_text *t, const char *path) +{ + const char *base = strrchr(path, '/'); + char *text = NULL, was[sizeof t->message]; + long size = 0; + FILE *f; + + if (t->failed) return 0; + base = base ? base + 1 : path; + f = fopen(path, "rb"); + if (f && fseek(f, 0, SEEK_END) == 0 && (size = ftell(f)) >= 0 && fseek(f, 0, SEEK_SET) == 0) + text = malloc((size_t)size + 1u); + if (!text || fread(text, 1, (size_t)size, f) != (size_t)size) { + if (f) fclose(f); + free(text); + t->line = 0; + fail(t, "cannot read", path); + return 0; + } + fclose(f); + text[size] = 0; + if (!v4_text_assemble(t, text)) { + memcpy(was, t->message, sizeof was); + snprintf(t->message, sizeof t->message, "%.40s, %.170s", base, was); + } + free(text); + return !t->failed; +} + +int v4_text_finish(v4_text *t) +{ + if (t->failed) return 0; + end_word(t); + while (t->nref && !t->failed) { + const v4_text_symbol *s = find(t, t->pool + t->ref[0].name); + if (!s || s->kind != KIND_WORD) { + t->line = t->ref[0].line; + fail(t, "never defined", t->pool + t->ref[0].name); + break; + } + resolve(t, 0, s->value); + } + if (!t->failed && !v4_asm_ok(&t->as)) fail(t, "does not fit: memory is full", NULL); + return !t->failed; +} + +v4_cell v4_text_word(const v4_text *t, const char *name) +{ + const v4_text_symbol *s = find(t, name); + return s && s->kind == KIND_WORD ? s->value : (v4_cell)-1; +} + +v4_cell v4_text_latest(const v4_text *t) +{ + return t->latest; +} + +v4_cell v4_text_here(v4_text *t) +{ + return v4_asm_label(&t->as); +} + +const char *v4_text_error(const v4_text *t) +{ + return t->failed ? t->message : ""; +} diff --git a/v4/src/umul.c b/v4/src/umul.c new file mode 100644 index 00000000..7acef151 --- /dev/null +++ b/v4/src/umul.c @@ -0,0 +1,27 @@ +/* umul.c -- reference unsigned multiply. See umul.h. + * + * Schoolbook multiplication on half-cells, in v4_ucell only. No wider type is + * used, so the same code is correct at both cell widths and builds on a host + * with no 128-bit integer (ARMv7 is one, and is a v4 host). + */ +#include "v4/umul.h" + +#define HALF_BITS (V4_CELL_BITS / 2) +#define HALF_MASK ((((v4_ucell)1) << HALF_BITS) - 1u) + +void v4_umul(v4_ucell u1, v4_ucell u2, v4_ucell *ulo, v4_ucell *uhi) +{ + v4_ucell a0 = u1 & HALF_MASK, a1 = u1 >> HALF_BITS; + v4_ucell b0 = u2 & HALF_MASK, b1 = u2 >> HALF_BITS; + + v4_ucell p00 = a0 * b0; + v4_ucell p10 = a1 * b0; + v4_ucell p01 = a0 * b1; + v4_ucell p11 = a1 * b1; + + /* Cannot overflow: at most (2^h - 1) + (2^h - 1) + (2^h - 1)^2 = 2^2h - 1. */ + v4_ucell mid = (p00 >> HALF_BITS) + (p10 & HALF_MASK) + p01; + + if (ulo) *ulo = (mid << HALF_BITS) | (p00 & HALF_MASK); + if (uhi) *uhi = p11 + (p10 >> HALF_BITS) + (mid >> HALF_BITS); +} diff --git a/v4/system/blocks.c b/v4/system/blocks.c new file mode 100644 index 00000000..dcb74661 --- /dev/null +++ b/v4/system/blocks.c @@ -0,0 +1,147 @@ +/* blocks.c -- the kernel serves a node's block requests. See blocks.h. + * + * This is the one file of v4's that includes v3's headers: every block goes + * through v3's own calls. + */ +#include "v4/blocks.h" +#include "block_subsystem.h" + +static void let_go(v4_blocks *w) +{ + unsigned i; + for (i = 0; i < V4_BLOCK_SLOTS; i++) { w->block[i] = 0; w->changed[i] = 0; } + w->next = 0; + w->last = -1; +} + +void v4_blocks_init(v4_blocks *w, v4_cell window) +{ + w->window = window; + w->epoch = blk_subsys_epoch(); + let_go(w); +} + +static v4_cell slot_addr(const v4_blocks *w, unsigned s) +{ + return w->window + (v4_cell)(s * V4_BLOCK_CELLS); +} + +/* The block in slot s is written. Whether or not storage takes it, it is + * no longer marked. */ +static int write_slot(v4_blocks *w, v4_node *n, unsigned s) +{ + uint8_t *b = blk_get_buffer(w->block[s], 1); + v4_cell at = slot_addr(w, s); + unsigned i; + + w->changed[s] = 0; + if (!b) return V4_BLOCK_REFUSED; + for (i = 0; i < V4_BLOCK_CELLS; i++) { + v4_ucell c = (v4_ucell)n->mem[at + (v4_cell)i]; + b[4u * i] = (uint8_t)(c & 0xFFu); + b[4u * i + 1u] = (uint8_t)((c >> 8) & 0xFFu); + b[4u * i + 2u] = (uint8_t)((c >> 16) & 0xFFu); + b[4u * i + 3u] = (uint8_t)((c >> 24) & 0xFFu); + } + return (blk_update(w->block[s]) == BLK_OK && blk_flush(w->block[s]) == BLK_OK) ? V4_BLOCK_OK : V4_BLOCK_REFUSED; +} + +/* A slot to put a block in: an empty one, or one whose block is not marked, + * or, with every one marked, the next in turn, its block written first. + * *status is not V4_BLOCK_OK if that write was refused; the slot is empty + * all the same. */ +static unsigned take_slot(v4_blocks *w, v4_node *n, int *status) +{ + unsigned i, s; + + *status = V4_BLOCK_OK; + for (i = 0; i < V4_BLOCK_SLOTS; i++) if (w->block[i] == 0) return i; + for (i = 0; i < V4_BLOCK_SLOTS; i++) { + s = (w->next + i) % V4_BLOCK_SLOTS; + if (!w->changed[s]) break; + } + if (i == V4_BLOCK_SLOTS) { + s = w->next; + *status = write_slot(w, n, s); + } + w->next = (s + 1u) % V4_BLOCK_SLOTS; + w->block[s] = 0; + w->changed[s] = 0; + if (w->last == (int)s) w->last = -1; + return s; +} + +/* BLOCK and BUFFER: ( n -- waddr status ) */ +static void slot_for(v4_blocks *w, v4_node *n, int read) +{ + v4_cell num, at; + uint32_t block; + unsigned i, s; + int status; + + if (n->ds.depth < 1u) { v4_dstack_reset(&n->ds); v4_dstack_push(&n->ds, 0); v4_dstack_push(&n->ds, (v4_cell)V4_BLOCK_REFUSED); return; } + num = v4_dstack_pop(&n->ds); + block = (uint32_t)num; + if (num < 1 || (uint64_t)num > 0xFFFFFFFFull || !blk_is_valid(block)) { + v4_dstack_push(&n->ds, 0); v4_dstack_push(&n->ds, (v4_cell)V4_BLOCK_RANGE); + return; + } + for (s = 0; s < V4_BLOCK_SLOTS && w->block[s] != block; s++) { } + if (s == V4_BLOCK_SLOTS) { + const uint8_t *b = 0; + s = take_slot(w, n, &status); + if (status == V4_BLOCK_OK && read) { + b = blk_get_buffer(block, 0); + if (!b) status = V4_BLOCK_REFUSED; + } + if (status != V4_BLOCK_OK) { v4_dstack_push(&n->ds, 0); v4_dstack_push(&n->ds, (v4_cell)status); return; } + at = slot_addr(w, s); + for (i = 0; i < V4_BLOCK_CELLS; i++) + n->mem[at + (v4_cell)i] = b ? (v4_cell)((v4_ucell)b[4u * i] | ((v4_ucell)b[4u * i + 1u] << 8) + | ((v4_ucell)b[4u * i + 2u] << 16) | ((v4_ucell)b[4u * i + 3u] << 24)) + : 0; + w->block[s] = block; + w->changed[s] = 0; + } + w->last = (int)s; + v4_dstack_push(&n->ds, slot_addr(w, s)); + v4_dstack_push(&n->ds, (v4_cell)V4_BLOCK_OK); +} + +int v4_blocks_serve(v4_blocks *w, v4_node *n, v4_cell request) +{ + unsigned s; + int status = V4_BLOCK_OK; + + if (request > V4_REQ_BLOCK || request < V4_REQ_EMPTY_BUFFERS) return 0; + + /* the chain is not what it was: what the slots hold is of no chain now */ + if (blk_subsys_epoch() != w->epoch) { let_go(w); w->epoch = blk_subsys_epoch(); } + + if (request == V4_REQ_EMPTY_BUFFERS) { let_go(w); return 1; } + + /* the window is all in the node's memory, or nothing is done */ + if (!v4_node_addr_ok(w->window) || !v4_node_addr_ok(w->window + (v4_cell)(V4_BLOCK_SLOTS * V4_BLOCK_CELLS - 1u))) { + if (request == V4_REQ_BLOCK || request == V4_REQ_BUFFER) { + if (n->ds.depth >= 1u) (void)v4_dstack_pop(&n->ds); + v4_dstack_push(&n->ds, 0); + } + v4_dstack_push(&n->ds, (v4_cell)V4_BLOCK_REFUSED); + return 1; + } + + if (request == V4_REQ_BLOCK) { slot_for(w, n, 1); return 1; } + if (request == V4_REQ_BUFFER) { slot_for(w, n, 0); return 1; } + if (request == V4_REQ_UPDATE) { + if (w->last >= 0 && w->block[w->last] != 0) w->changed[w->last] = 1; + } else { /* SAVE-BUFFERS */ + for (s = 0; s < V4_BLOCK_SLOTS; s++) + if (w->block[s] != 0 && w->changed[s] && write_slot(w, n, s) != V4_BLOCK_OK) { + status = V4_BLOCK_REFUSED; + w->block[s] = 0; + if (w->last == (int)s) w->last = -1; + } + } + v4_dstack_push(&n->ds, (v4_cell)status); + return 1; +} diff --git a/v4/system/boot.c b/v4/system/boot.c new file mode 100644 index 00000000..e46ad608 --- /dev/null +++ b/v4/system/boot.c @@ -0,0 +1,415 @@ +/* boot.c -- the nucleus, then its capsules, then the prompt. See boot.h. + * + * Nothing here uses the C library: the bare-metal kernel links this file. + * It is not part of the engine (v4/src): it needs the capsule directory, + * which only a whole system has. + */ +#include "v4/post.h" +#include "v4/blocks.h" +#include "v4/boot.h" +#include "v4/message.h" +#include "starkernel/capsule.h" +#include "starkernel/capsule_generated.h" +#include "starkernel/capsule_sig.h" +#include "starkernel/capsule_blocks.h" + +/* The capsules, in the order they are loaded. */ +static const char *const boot_capsules[] = { + "v4:forth79.4th", +}; + +/* POST is part of the boot, and is the kernel's (v4/include/v4/post.h; + * docs/v4.0.0/NUCLEUS.md 6.3): when the capsules are in and the system is + * sealed, the kernel feeds its cases to the node and judges them, puts the + * node back to the system as sealed, and the boot passes only if none + * failed. -DV4_POST_AT_BOOT=0 leaves it out, for work on a vocabulary + * that does not pass yet. */ +#ifndef V4_POST_AT_BOOT +#define V4_POST_AT_BOOT 1 +#endif + +#define LINE_MAX 1025u /* a line is at most 1024 characters, a block */ +#define STEP_LIMIT 4000000000ULL /* instruction words one line may take */ + +/* ---- printing ------------------------------------------------------------ */ + +static void say(const v4_boot *b, const char *s) +{ + unsigned len = 0; + while (s[len]) len++; + b->out(s, len); +} + +static void say_dec(const v4_boot *b, uint32_t v) +{ + char buf[10]; + unsigned i = sizeof buf; + do { buf[--i] = (char)('0' + v % 10u); v /= 10u; } while (v); + b->out(buf + i, (unsigned)sizeof buf - i); +} + +static void say_hex(const v4_boot *b, uint64_t v) +{ + char buf[18]; + unsigned i; + buf[0] = '0'; buf[1] = 'x'; + for (i = 0; i < 16; i++) buf[2 + i] = "0123456789abcdef"[(v >> (60 - 4 * i)) & 15u]; + b->out(buf, sizeof buf); +} + +/* ---- hashing: FNV-1a, 64 bits, as kernel/src/vm/parity.c ----------------- */ + +uint64_t v4_boot_dict_hash(const v4_node *n, const v4_image *im) +{ + return v4_image_dict_hash(n, im); +} + +/* how many words FORTH holds: the list from LATEST, each entry's link in the + * cell before its code */ +static uint32_t word_count(const v4_node *n, const v4_image *im) +{ + v4_cell xt = n->mem[im->latest]; + uint32_t count = 0; + while (xt > 0 && xt < (v4_cell)V4_NODE_WORDS && count < (uint32_t)V4_NODE_WORDS) { + count++; + xt = n->mem[xt - 1]; + } + return count; +} + +/* ---- handing the node a line ---------------------------------------------- */ + +/* The boot is the node's neighbour on two of its ports. On port 0 it is + * the kernel: the node writes the number of a request there (ENGINE.md + * 3.3) -- for a block (blocks.h), or for one of the host's words. On port + * 1 it is the console: it writes the node a message of text and reads back + * messages of what the node printed and of how the text ended (message.h). */ +#define KERNEL_PORT 0u +#define CONSOLE_PORT 1u +#define CONSOLE_ID 1 /* the console's number as a sender; the node's is 0 until it is given one */ + +/* What the kernel keeps of the node's block window (blocks.h). */ +static v4_blocks boot_blocks; + +/* Hand the node a line and run it to its end. What it prints goes to the + * console; or, if `keep` is given, into `keep`, at most `cap` characters, + * and none of it is shown: *printed is then how many it printed in all. */ +static int run_line(const v4_boot *b, const char *text, unsigned len, char *keep, unsigned cap, unsigned *printed) +{ + static v4_message out, in; /* one line at a time: the boot is not re-entered */ + v4_node *n = b->n; + uint64_t steps = 0; + unsigned sent = 0, i; + + if (!v4_message_text(&out, 0, CONSOLE_ID, V4_MSG_TEXT, text, len)) return V4_BOOT_LINE_TOO_LONG; + in.count = 0; + for (;;) { + (void)v4_exec_step_word(n, b->es, b->h); + if (n->stopped) return V4_BOOT_LINE_STOPPED; + + if (n->asking && n->ask_port == KERNEL_PORT) { /* a request: the kernel's turn */ + if (v4_blocks_serve(&boot_blocks, n, n->request)) { /* a block, as for any node */ + v4_node_port_served(n); + } else if (b->serve && n->request >= 1 && n->request <= (v4_cell)b->word_count) { + b->serve(n, (unsigned)n->request); + v4_node_port_served(n); + } else { + /* a request no one serves is an error, as any other (D-18): + * 12, Argument out of range */ + v4_node_port_served(n); + v4_node_store(n, n->error_reg, 12); /* a store to NODE-ERROR raises it */ + } + continue; + } + if (n->asking && n->ask_port == CONSOLE_PORT) { /* a word of a message from the node */ + v4_cell word = n->request; + v4_node_port_served(n); + if (v4_message_word(&in, word)) { + unsigned chars = v4_message_length(&in); + if (v4_message_type(&in) == V4_MSG_OUTPUT) { + for (i = 0; i < chars; i++) { + char c = v4_message_char(&in, i); + if (!keep) b->out(&c, 1); + else { if (*printed < cap) keep[*printed] = c; (*printed)++; } + } + } else if (v4_message_type(&in) == V4_MSG_DONE) { + return (int)in.word[V4_MSG_HEADER]; + } + in.count = 0; + } + continue; + } + if (n->asking) { /* a port with no one on it: an error on the node */ + if (!v4_node_port_gone(n, V4_ERROR_NO_ONE)) return V4_BOOT_LINE_STOPPED; + continue; + } + + if (n->reading && !n->given) { + if (sent < out.count && (n->read_port == CONSOLE_PORT || n->read_port == V4_PORT_ANY)) { + v4_node_port_give(n, CONSOLE_PORT, out.word[sent++]); /* a word of the message to the node */ + continue; + } + if (n->read_port != CONSOLE_PORT && n->read_port != KERNEL_PORT && v4_node_port_gone(n, V4_ERROR_NO_ONE)) continue; /* reading one port, with no one on it */ + return V4_BOOT_LINE_STOPPED; /* waiting for what will not come */ + } + if (v4_image_waiting(n, b->im)) { /* the text is reading the keyboard */ + int c = b->key ? b->key() : V4_BOOT_KEY_END; + unsigned char ch = (unsigned char)c; + if (c == V4_BOOT_KEY_END) return V4_BOOT_LINE_NO_INPUT; + if (c >= 0) (void)v4_node_console_feed(n, &ch, 1u); + continue; + } + if (++steps > STEP_LIMIT) return V4_BOOT_LINE_STOPPED; + } +} + +int v4_boot_line(const v4_boot *b, const char *text, unsigned len) +{ + return run_line(b, text, len, 0, 0u, 0); +} + +#if V4_POST_AT_BOOT +/* POST's host (post.h): a line is handed to the node as any line is, and + * what the node prints is kept for the runner and not shown. */ +static int post_line(void *self, const char *text, unsigned text_len, char *out, unsigned cap, unsigned *len) +{ + int how; + *len = 0; + how = run_line((const v4_boot *)self, text, text_len, out, cap, len); + return (how == V4_TEXT_QUIT || how == V4_TEXT_COMPLETED || how == V4_TEXT_ERROR) ? how : -1; +} +static void post_say(void *self, const char *text, unsigned len) +{ + ((const v4_boot *)self)->out(text, len); +} +#endif + +/* ---- one capsule --------------------------------------------------------- */ + +static void say_where(const v4_boot *b, const char *name, uint32_t block, uint32_t line) +{ + say(b, "\nV4: capsule "); say(b, name); + say(b, " block "); say_dec(b, block); + say(b, " line "); say_dec(b, line); +} + +static int load_capsule(const v4_boot *b, const char *name) +{ + const CapsuleDirHeader *dir = capsule_get_directory(); + const CapsuleDesc *descs = capsule_get_descriptors(); + const CapsuleNameEntry *names = capsule_get_names(); + const uint8_t *arena = capsule_get_arena(); + const CapsuleDesc *cap; + const uint8_t *p, *end; + CapsuleValidateResult vr; + CapsuleSigResult sr; + uint32_t block = 0, line = 0; + int in_block = 0; + + cap = capsule_find_by_name(dir, descs, names, name); + if (!cap) { say(b, "V4: capsule "); say(b, name); say(b, " is not in this binary\n"); return 0; } + + vr = capsule_validate(cap, arena, dir->arena_size, 1); + if (vr != CAPSULE_VALID) { + say(b, "V4: capsule "); say(b, name); say(b, ": "); say(b, capsule_validate_result_str(vr)); say(b, "\n"); + return 0; + } + + sr = capsule_verify_signature(descs, names, capsule_get_signatures(), arena, dir->desc_count, (int)(cap - descs)); + if (sr != CAPSULE_SIG_OK) { + say(b, "V4: capsule "); say(b, name); say(b, " signature: "); say(b, capsule_sig_result_str(sr)); say(b, "\n"); + if (sr == CAPSULE_SIG_INVALID) return 0; + } + + p = capsule_get_payload(cap, arena); + if (!p) { say(b, "V4: capsule "); say(b, name); say(b, " has no payload\n"); return 0; } + end = p + cap->length; + + while (p < end) { + const uint8_t *after, *nl; + uint32_t num; + unsigned len, i; + char text[LINE_MAX]; + + if (capsule_block_header(p, end, &num, &after)) { + block = num; line = 0; in_block = 1; p = after; + continue; + } + for (nl = p; nl < end && *nl != '\n'; nl++) { } + len = (unsigned)(nl - p); + if (len && p[len - 1] == '\r') len--; + if (in_block) { + line++; + if (len >= LINE_MAX) { say_where(b, name, block, line); say(b, " is too long\n"); return 0; } + if (len) { + for (i = 0; i < len; i++) text[i] = (char)p[i]; + int how = v4_boot_line(b, text, len); + if (how != V4_TEXT_COMPLETED) { + say_where(b, name, block, line); + say(b, how == V4_TEXT_ERROR ? " ended in an error: " + : how == V4_TEXT_QUIT ? " ended with QUIT: " + : how == V4_BOOT_LINE_NO_INPUT ? " reads the keyboard: " + : " stopped the node: "); + b->out(text, len); say(b, "\n"); + return 0; + } + } + } + p = (nl < end) ? nl + 1 : end; + } + + say(b, "PARITY:V4_CAPSULE name="); say(b, name); + say(b, " capsule_id="); say_hex(b, cap->capsule_id); + say(b, " capsule_hash="); say_hex(b, cap->content_hash); + say(b, " dict_hash="); say_hex(b, v4_boot_dict_hash(b->n, b->im)); + say(b, "\n"); + return 1; +} + +/* ---- the nucleus ----------------------------------------------------------- */ + +/* The nucleus is a capsule of F18 code (v4/include/v4/capsule.h): the words + * themselves, to be written to the port of a node that has nothing in it. + * The boot is that node's neighbour. It finds the capsule, checks its hash + * and its signature as it does any capsule's, and gives the node a word + * each time it reads its port, until the node has taken them all and is + * where the nucleus waits to be handed a line. */ +#define NUCLEUS_NAME_(bits) "v4:nucleus-" #bits ".f18" +#define NUCLEUS_NAME__(bits) NUCLEUS_NAME_(bits) +#define NUCLEUS_NAME NUCLEUS_NAME__(V4_CELL_BITS) +#define CELL_BYTES (V4_CELL_BITS / 8) + +static int load_nucleus(const v4_boot *b) +{ + const CapsuleDirHeader *dir = capsule_get_directory(); + const CapsuleDesc *descs = capsule_get_descriptors(); + const CapsuleNameEntry *names = capsule_get_names(); + const uint8_t *arena = capsule_get_arena(); + const CapsuleDesc *cap; + const uint8_t *p; + CapsuleValidateResult vr; + CapsuleSigResult sr; + v4_node *n = b->n; + uint64_t words, at = 0, steps = 0; + + cap = capsule_find_by_name(dir, descs, names, NUCLEUS_NAME); + if (!cap) { say(b, "V4: capsule " NUCLEUS_NAME " is not in this binary\n"); return 0; } + vr = capsule_validate(cap, arena, dir->arena_size, 1); + if (vr != CAPSULE_VALID) { + say(b, "V4: capsule " NUCLEUS_NAME ": "); say(b, capsule_validate_result_str(vr)); say(b, "\n"); + return 0; + } + sr = capsule_verify_signature(descs, names, capsule_get_signatures(), arena, dir->desc_count, (int)(cap - descs)); + if (sr != CAPSULE_SIG_OK) { + say(b, "V4: capsule " NUCLEUS_NAME " signature: "); say(b, capsule_sig_result_str(sr)); say(b, "\n"); + if (sr == CAPSULE_SIG_INVALID) return 0; + } + p = capsule_get_payload(cap, arena); + if (!p || cap->length % CELL_BYTES != 0) { say(b, "V4: capsule " NUCLEUS_NAME " is not whole words\n"); return 0; } + words = cap->length / CELL_BYTES; + + /* until it has taken every word and is waiting for a message: reading + * its ports again, but from its memory now and not from the port */ + while (at < words || !(n->reading && !n->given && n->p != b->im->port + (v4_cell)V4_PORT_ANY)) { + (void)v4_exec_step_word(n, b->es, b->h); + if (n->stopped || n->asking || ++steps > STEP_LIMIT) { + say(b, "V4: the node did not take the nucleus in\n"); + return 0; + } + if (n->reading && !n->given) { + v4_ucell word = 0; + unsigned i; + if (at >= words) { + if (n->p != b->im->port + (v4_cell)V4_PORT_ANY) break; /* it is waiting for a message */ + say(b, "V4: the node wants more than the nucleus holds\n"); + return 0; + } + for (i = 0; i < CELL_BYTES; i++) word |= (v4_ucell)p[at * CELL_BYTES + i] << (8 * i); + v4_node_port_give(n, 0, (v4_cell)word); + at++; + } + } + + say(b, "PARITY:V4_NUCLEUS name=" NUCLEUS_NAME); + say(b, " capsule_id="); say_hex(b, cap->capsule_id); + say(b, " capsule_hash="); say_hex(b, cap->content_hash); + say(b, " words="); say_dec(b, word_count(n, b->im)); + say(b, "\n"); + return 1; +} + +/* ---- the whole boot ------------------------------------------------------ */ + +int v4_boot_run(const v4_boot *b) +{ + unsigned i; + + /* a node is born with nothing in it, and is sent the nucleus */ + if (!v4_image_born(b->n, b->es, b->h, b->im)) { + say(b, "V4: the nucleus is not for this build of the engine\nPARITY:FAIL\nPOST: FAILED\n"); + return 0; + } + /* what is on its two ports, the kernel and the console, takes a word + * when it is written: the node need never wait before writing to them + * (node.h, v4_node_port_status) */ + v4_node_port_status(b->n, 0, 1u << KERNEL_PORT | 1u << CONSOLE_PORT); + v4_blocks_init(&boot_blocks, b->im->block_window); + if (!load_nucleus(b)) { say(b, "PARITY:FAIL\nPOST: FAILED\n"); return 0; } + + /* the kernel's words, before any capsule that might use one */ + for (i = 0; i < b->word_count; i++) { + char text[64]; + unsigned at = 0, k, num = i + 1, div = 1; + while (num / div >= 10) div *= 10; + for (; div; div /= 10) text[at++] = (char)('0' + num / div % 10); + for (k = 0; " KERNEL-WORD "[k]; k++) text[at++] = " KERNEL-WORD "[k]; + for (k = 0; b->words[i][k] && at < sizeof text; k++) text[at++] = b->words[i][k]; + if (b->words[i][k] || v4_boot_line(b, text, at) != V4_TEXT_COMPLETED) { + say(b, "V4: kernel word "); say(b, b->words[i]); say(b, " could not be made\nPARITY:FAIL\nPOST: FAILED\n"); + return 0; + } + } + + for (i = 0; i < sizeof boot_capsules / sizeof boot_capsules[0]; i++) + if (!load_capsule(b, boot_capsules[i])) { say(b, "PARITY:FAIL\nPOST: FAILED\n"); return 0; } + /* The kernel's words and the capsules are the system: COLD comes back + * to here, and FORGET will not go below it. */ + v4_image_seal(b->n, b->im); + +#if V4_POST_AT_BOOT + { + static const char cold[] = "COLD"; + v4_post_host host; + v4_post_tally tally; + unsigned printed = 0; + int how; + + host.self = (void *)b; host.n = b->n; host.line = post_line; host.say = post_say; + if (!v4_post_run(&host, v4_post_cases, v4_post_case_count, &tally)) { + say(b, "V4: POST reported failures\nPARITY:FAIL\nPOST: FAILED\n"); + return 0; + } + /* POST leaves nothing: the node is put back to the system as it was + * sealed, as v3 puts the dictionary back after each of its suites + * (v3/src/test_runner/test_common.c, run_test_suite). What COLD + * prints is not shown. */ + v4_dstack_reset(&b->n->ds); + how = run_line(b, cold, (unsigned)sizeof cold - 1u, (char *)cold, 0u, &printed); + if (how != V4_TEXT_COMPLETED && how != V4_TEXT_QUIT) { + say(b, "V4: the node did not come back to the system after POST\nPARITY:FAIL\nPOST: FAILED\n"); + return 0; + } + } +#endif + + say(b, "PARITY:V4_SYSTEM word_count="); say_dec(b, word_count(b->n, b->im)); + say(b, " dict_hash="); say_hex(b, v4_boot_dict_hash(b->n, b->im)); + say(b, "\n"); + +#if V4_POST_AT_BOOT + say(b, "PARITY:OK\nPOST: PASSED\n"); +#else + say(b, "PARITY:OK\n"); +#endif + return 1; +} diff --git a/v4/system/post.c b/v4/system/post.c new file mode 100644 index 00000000..719128a2 --- /dev/null +++ b/v4/system/post.c @@ -0,0 +1,114 @@ +/* post.c -- POST's runner: the kernel feeds a case to the node and judges it + * from outside. See post.h; docs/v4.0.0/NUCLEUS.md section 6.3. + * + * Nothing here uses the C library: the bare-metal kernel links this file. + */ +#include "v4/post.h" +#include "v4/message.h" + +#define SHOWN_OUT 255u /* how much of a failing case's printing is shown */ +#define SHOWN_STACK 32u /* and how many of the values it left */ + +static const char state_line[] = "DECIMAL FORTH DEFINITIONS"; + +static unsigned length(const char *s) +{ + unsigned n = 0; + while (s[n]) n++; + return n; +} + +static void say(const v4_post_host *h, const char *s) +{ + h->say(h->self, s, length(s)); +} + +static void say_number(const v4_post_host *h, long long v) +{ + char text[24]; + unsigned at = sizeof text; + unsigned long long u = v < 0 ? 0ull - (unsigned long long)v : (unsigned long long)v; + + do { text[--at] = (char)('0' + u % 10u); u /= 10u; } while (u); + if (v < 0) text[--at] = '-'; + h->say(h->self, text + at, (unsigned)sizeof text - at); +} + +int v4_post_run(const v4_post_host *h, const v4_post_case *cases, unsigned count, v4_post_tally *tally) +{ + static char out[V4_POST_OUT]; /* what the case being run has printed */ + v4_cell left[SHOWN_STACK]; /* what it left on the stack, the top first */ + unsigned i, k; + + tally->tests = 0; tally->pass = 0; tally->fail = 0; + for (i = 0; i < count; i++) { + const v4_post_case *c = &cases[i]; + unsigned kept = 0, total = 0, len = 0, depth; + int errored = 0, came_back = 1, lost = 0, ok, how; + + /* every case starts from the same state */ + v4_dstack_reset(&h->n->ds); + how = h->line(h->self, state_line, (unsigned)sizeof state_line - 1u, out, 0u, &len); + if (how < 0) lost = 1; + if (how != V4_TEXT_COMPLETED) came_back = 0; + v4_dstack_reset(&h->n->ds); + + for (k = 0; came_back && k < c->line_count; k++) { + len = 0; + how = h->line(h->self, c->lines[k], length(c->lines[k]), out + kept, V4_POST_OUT - kept, &len); + if (how < 0) { came_back = 0; lost = 1; break; } + if (how == V4_TEXT_ERROR) errored = 1; + total += len; + kept = total < V4_POST_OUT ? total : V4_POST_OUT; + } + + /* what it left, read before anything is judged */ + depth = h->n->ds.depth; + for (k = 0; k < depth; k++) { + v4_cell v = v4_dstack_pop(&h->n->ds); + if (k < SHOWN_STACK) left[k] = v; + } + v4_dstack_reset(&h->n->ds); + + if (!came_back) { + ok = 0; + } else if (c->expect == V4_POST_ERROR) { + ok = errored; + } else if (errored) { + ok = 0; + } else { + ok = depth == c->depth; + if (ok && c->expect == V4_POST_STACK) { + if (depth > SHOWN_STACK) ok = 0; + for (k = 0; ok && k < depth; k++) ok = left[k] == (v4_cell)c->stack[depth - 1u - k]; + } + if (ok && c->expect != V4_POST_DEPTH) { + ok = total == c->output_len && total <= V4_POST_OUT; + for (k = 0; ok && k < total; k++) ok = out[k] == c->output[k]; + } + } + + tally->tests++; + if (ok) { tally->pass++; continue; } + tally->fail++; + say(h, "POST FAIL: "); say(h, c->name); + say(h, " out<"); h->say(h->self, out, kept < SHOWN_OUT ? kept : SHOWN_OUT); + say(h, "> stack<"); + for (k = depth < SHOWN_STACK ? depth : SHOWN_STACK; k-- > 0; ) { say_number(h, (long long)left[k]); say(h, " "); } + say(h, ">\n"); + + /* The node did not come back from a line: it is stopped, or will + * run for ever. Nothing more can be asked of it, so POST ends + * here and says which case it was. */ + if (lost) { + say(h, "POST: the node did not come back from "); say(h, c->name); + say(h, "; "); say_number(h, (long long)(count - i - 1u)); say(h, " not run\n"); + break; + } + } + say(h, "PARITY:V4_POST tests="); say_number(h, (long long)tally->tests); + say(h, " pass="); say_number(h, (long long)tally->pass); + say(h, " fail="); say_number(h, (long long)tally->fail); + say(h, "\n"); + return tally->fail == 0; +} diff --git a/v4/system/post_cases.c b/v4/system/post_cases.c new file mode 100644 index 00000000..431f440a --- /dev/null +++ b/v4/system/post_cases.c @@ -0,0 +1,1099 @@ +/* post_cases.c -- POST's cases for the FORTH-79 Required Word Set on v4. + * Generated by v4/tools/mkpost.py from v3's POST cases: do not edit. + * docs/v4.0.0/NUCLEUS.md section 6; docs/v4.0.0/POST79.md lists every case + * that is not v3's own with v3's result. + */ +#include "v4/post.h" + +static const char *const l0[] = { "5 DUP . . CR" }; +static const char *const l1[] = { "0 DUP . . CR" }; +static const char *const l2[] = { "-42 DUP . . CR" }; +static const char *const l3[] = { "2147483647 DUP . . CR" }; +static const char *const l4[] = { "-2147483648 DUP . . CR" }; +static const char *const l5[] = { "DUP" }; +static const char *const l6[] = { "5 7 DROP . CR" }; +static const char *const l7[] = { "42 0 DROP . CR" }; +static const char *const l8[] = { "10 -5 DROP . CR" }; +static const char *const l9[] = { "1 2 3 DROP DROP . CR" }; +static const char *const l10[] = { "1 2 3 4 DROP DROP DROP . CR" }; +static const char *const l11[] = { "5 DROP 6 DROP 7 . CR" }; +static const char *const l12[] = { "99 DROP DEPTH . CR" }; +static const char *const l13[] = { "DEPTH 1 2 DROP DEPTH SWAP - . CR" }; +static const long long s13[] = { 0LL }; +static const char *const l14[] = { "DEPTH 5 6 DROP DROP DEPTH = . CR" }; +static const char *const l15[] = { "2147483647 DROP DEPTH . CR" }; +static const char *const l16[] = { "-2147483648 DROP DEPTH . CR" }; +static const char *const l17[] = { "5 DUP DROP . CR" }; +static const char *const l18[] = { "1 2 SWAP DROP . CR" }; +static const char *const l19[] = { "1 2 3 ROT DROP SWAP DROP . CR" }; +static const char *const l20[] = { "DROP" }; +static const char *const l21[] = { "5 7 SWAP . . CR" }; +static const char *const l22[] = { "42 42 SWAP . . CR" }; +static const char *const l23[] = { "0 99 SWAP . . CR" }; +static const char *const l24[] = { "-5 10 SWAP . . CR" }; +static const char *const l25[] = { "42 SWAP" }; +static const char *const l26[] = { "SWAP" }; +static const char *const l27[] = { "5 7 OVER . . . CR" }; +static const char *const l28[] = { "0 0 OVER . . . CR" }; +static const char *const l29[] = { "-1 42 OVER . . . CR" }; +static const char *const l30[] = { "42 OVER" }; +static const char *const l31[] = { "OVER" }; +static const char *const l32[] = { "1 2 3 ROT . . . CR" }; +static const char *const l33[] = { "0 0 0 ROT . . . CR" }; +static const char *const l34[] = { "-1 0 1 ROT . . . CR" }; +static const char *const l35[] = { "1 2 ROT" }; +static const char *const l36[] = { "42 ROT" }; +static const char *const l37[] = { "ROT" }; +static const char *const l38[] = { "DEPTH . CR" }; +static const char *const l39[] = { "42 DEPTH . CR" }; +static const long long s39[] = { 42LL }; +static const char *const l40[] = { "1 2 3 DEPTH . CR" }; +static const long long s40[] = { 1LL, 2LL, 3LL }; +static const char *const l41[] = { "1 2 3 0 PICK . CR" }; +static const char *const l42[] = { "1 2 3 1 PICK . CR" }; +static const long long s42[] = { 1LL, 2LL, 3LL }; +static const char *const l43[] = { "1 2 3 2 PICK . CR" }; +static const long long s43[] = { 1LL, 2LL, 3LL }; +static const char *const l44[] = { "1 2 3 1 ROLL . . . CR" }; +static const char *const l45[] = { "1 2 3 2 ROLL . . . CR" }; +static const char *const l46[] = { "42 \077DUP . . CR" }; +static const char *const l47[] = { "-5 \077DUP . . CR" }; +static const char *const l48[] = { "0 \077DUP DEPTH . CR" }; +static const long long s48[] = { 0LL }; +static const char *const l49[] = { "\077DUP" }; +static const char *const l50[] = { ": RS1 42 >R R@ . R> . CR ; RS1" }; +static const char *const l51[] = { ": RS2 0 >R R@ . R> . CR ; RS2" }; +static const char *const l52[] = { ": RS3 -123 >R R@ . R> . CR ; RS3" }; +static const char *const l53[] = { ": RS4 1 2 >R >R R@ . R> . R@ . R> . CR ; RS4" }; +static const char *const l54[] = { ">R" }; +static const char *const l55[] = { ": RS5 42 >R R> . CR ; RS5" }; +static const char *const l56[] = { ": RS6 1 2 >R >R R> . R> . CR ; RS6" }; +static const char *const l57[] = { "R>" }; +static const char *const l58[] = { ": RS7 42 >R R@ . R> DROP CR ; RS7" }; +static const char *const l59[] = { ": RS8 99 >R R@ R@ = . R> DROP CR ; RS8" }; +static const char *const l60[] = { "R@" }; +static const char *const l61[] = { "42 HERE ! HERE @ . CR" }; +static const char *const l62[] = { "0 HERE ! HERE @ . CR" }; +static const char *const l63[] = { "-999 HERE ! HERE @ . CR" }; +static const char *const l64[] = { "111 HERE ! 222 HERE ! HERE @ . CR" }; +static const char *const l65[] = { "2147483647 HERE ! HERE @ . CR" }; +static const char *const l66[] = { "-2147483648 HERE ! HERE @ . CR" }; +static const char *const l67[] = { "!" }; +static const char *const l68[] = { "42 !" }; +static const char *const l69[] = { "123 HERE ! HERE @ . CR" }; +static const char *const l70[] = { "456 HERE ! HERE @ HERE @ = . CR" }; +static const char *const l71[] = { "@" }; +static const char *const l72[] = { "42 , HERE 1 - @ . CR" }; +static const char *const l73[] = { "-999 , HERE 1 - @ . CR" }; +static const char *const l74[] = { "HERE HERE = . CR" }; +static const char *const l75[] = { "HERE 42 , HERE SWAP - 1 CELLS = 0 SWAP /" }; +static const long long s75[] = { 0LL }; +static const char *const l76[] = { "HERE 10 ALLOT HERE SWAP - . CR" }; +static const char *const l77[] = { "HERE 0 ALLOT HERE SWAP - . CR" }; +static const char *const l78[] = { "HERE -4 ALLOT HERE SWAP - . CR" }; +static const char *const l79[] = { "PAD PAD = . CR" }; +static const char *const l80[] = { "PAD HERE = . CR" }; +static const char *const l81[] = { "10 HERE ! 5 HERE +! HERE @ . CR" }; +static const char *const l82[] = { "42 HERE ! 0 HERE +! HERE @ . CR" }; +static const char *const l83[] = { "10 HERE ! -3 HERE +! HERE @ . CR" }; +static const char *const l84[] = { "0 HERE ! 1 HERE +! 2 HERE +! 3 HERE +! HERE @ . CR" }; +static const char *const l85[] = { "+!" }; +static const char *const l86[] = { "HERE 0 88 FILL" }; +static const char *const l87[] = { "FILL" }; +static const char *const l88[] = { "65 HERE ! 66 HERE 1+ ! HERE HERE 16 + 2 MOVE HERE 16 + @ .", "HERE 17 + @ . CR" }; +static const char *const l89[] = { "HERE HERE 8 + 0 MOVE" }; +static const char *const l90[] = { "MOVE" }; +static const char *const l91[] = { "5 7 + . CR" }; +static const char *const l92[] = { "42 0 + . CR" }; +static const char *const l93[] = { "-5 3 + . CR" }; +static const char *const l94[] = { "-5 -3 + . CR" }; +static const char *const l95[] = { "2147483647 1 + . CR" }; +static const char *const l96[] = { "-2147483648 -1 + . CR" }; +static const char *const l97[] = { "+" }; +static const char *const l98[] = { "42 +" }; +static const char *const l99[] = { "10 3 - . CR" }; +static const char *const l100[] = { "42 0 - . CR" }; +static const char *const l101[] = { "0 5 - . CR" }; +static const char *const l102[] = { "5 -3 - . CR" }; +static const char *const l103[] = { "42 42 - . CR" }; +static const char *const l104[] = { "-2147483648 1 - . CR" }; +static const char *const l105[] = { "2147483647 -1 - . CR" }; +static const char *const l106[] = { "-" }; +static const char *const l107[] = { "42 -" }; +static const char *const l108[] = { "6 7 * . CR" }; +static const char *const l109[] = { "42 0 * . CR" }; +static const char *const l110[] = { "42 1 * . CR" }; +static const char *const l111[] = { "6 -7 * . CR" }; +static const char *const l112[] = { "-6 -7 * . CR" }; +static const char *const l113[] = { "32767 2 * . CR" }; +static const char *const l114[] = { "65536 65536 * . CR" }; +static const char *const l115[] = { "*" }; +static const char *const l116[] = { "42 *" }; +static const char *const l117[] = { "15 3 / . CR" }; +static const char *const l118[] = { "42 1 / . CR" }; +static const char *const l119[] = { "-15 3 / . CR" }; +static const char *const l120[] = { "15 -3 / . CR" }; +static const char *const l121[] = { "-15 -3 / . CR" }; +static const char *const l122[] = { "7 3 / . CR" }; +static const char *const l123[] = { "42 0 /" }; +static const char *const l124[] = { "/" }; +static const char *const l125[] = { "42 /" }; +static const char *const l126[] = { "17 5 MOD . CR" }; +static const char *const l127[] = { "15 3 MOD . CR" }; +static const char *const l128[] = { "42 1 MOD . CR" }; +static const char *const l129[] = { "-17 5 MOD . CR" }; +static const char *const l130[] = { "17 -5 MOD . CR" }; +static const char *const l131[] = { "3 7 MOD . CR" }; +static const char *const l132[] = { "42 0 MOD" }; +static const char *const l133[] = { "MOD" }; +static const char *const l134[] = { "42 MOD" }; +static const char *const l135[] = { "17 5 /MOD . . CR" }; +static const char *const l136[] = { "15 3 /MOD . . CR" }; +static const char *const l137[] = { "-17 5 /MOD . . CR" }; +static const char *const l138[] = { "42 0 /MOD" }; +static const char *const l139[] = { "/MOD" }; +static const char *const l140[] = { "42 /MOD" }; +static const char *const l141[] = { "42 ABS . CR" }; +static const char *const l142[] = { "-42 ABS . CR" }; +static const char *const l143[] = { "0 ABS . CR" }; +static const char *const l144[] = { "-2147483648 ABS . CR" }; +static const char *const l145[] = { "ABS" }; +static const char *const l146[] = { "42 NEGATE . CR" }; +static const char *const l147[] = { "-42 NEGATE . CR" }; +static const char *const l148[] = { "0 NEGATE . CR" }; +static const char *const l149[] = { "-2147483648 NEGATE . CR" }; +static const char *const l150[] = { "NEGATE" }; +static const char *const l151[] = { "5 3 MIN . CR" }; +static const char *const l152[] = { "42 42 MIN . CR" }; +static const char *const l153[] = { "-5 -3 MIN . CR" }; +static const char *const l154[] = { "-1 1 MIN . CR" }; +static const char *const l155[] = { "42 MIN" }; +static const char *const l156[] = { "MIN" }; +static const char *const l157[] = { "5 3 MAX . CR" }; +static const char *const l158[] = { "42 42 MAX . CR" }; +static const char *const l159[] = { "-5 -3 MAX . CR" }; +static const char *const l160[] = { "-1 1 MAX . CR" }; +static const char *const l161[] = { "42 MAX" }; +static const char *const l162[] = { "MAX" }; +static const char *const l163[] = { "5 1+ . CR" }; +static const char *const l164[] = { "0 1+ . CR" }; +static const char *const l165[] = { "-1 1+ . CR" }; +static const char *const l166[] = { "3 1+ 1+ 1+ . CR" }; +static const char *const l167[] = { "2147483647 1+ . CR" }; +static const char *const l168[] = { "1+" }; +static const char *const l169[] = { "5 1- . CR" }; +static const char *const l170[] = { "1 1- . CR" }; +static const char *const l171[] = { "0 1- . CR" }; +static const char *const l172[] = { "6 1- 1- 1- . CR" }; +static const char *const l173[] = { "-2147483648 1- . CR" }; +static const char *const l174[] = { "1-" }; +static const char *const l175[] = { "5 2+ . CR" }; +static const char *const l176[] = { "0 2+ . CR" }; +static const char *const l177[] = { "-3 2+ . CR" }; +static const char *const l178[] = { "2+" }; +static const char *const l179[] = { "7 2- . CR" }; +static const char *const l180[] = { "2 2- . CR" }; +static const char *const l181[] = { "0 2- . CR" }; +static const char *const l182[] = { "2-" }; +static const char *const l183[] = { "-1 -1 AND . CR" }; +static const char *const l184[] = { "0 -1 AND . CR" }; +static const char *const l185[] = { "-1 0 AND . CR" }; +static const char *const l186[] = { "0 0 AND . CR" }; +static const char *const l187[] = { "85 51 AND . CR" }; +static const char *const l188[] = { "AND" }; +static const char *const l189[] = { "42 AND" }; +static const char *const l190[] = { "-1 -1 OR . CR" }; +static const char *const l191[] = { "0 -1 OR . CR" }; +static const char *const l192[] = { "-1 0 OR . CR" }; +static const char *const l193[] = { "0 0 OR . CR" }; +static const char *const l194[] = { "85 51 OR . CR" }; +static const char *const l195[] = { "OR" }; +static const char *const l196[] = { "42 OR" }; +static const char *const l197[] = { "-1 -1 XOR . CR" }; +static const char *const l198[] = { "0 -1 XOR . CR" }; +static const char *const l199[] = { "-1 0 XOR . CR" }; +static const char *const l200[] = { "0 0 XOR . CR" }; +static const char *const l201[] = { "85 51 XOR . CR" }; +static const char *const l202[] = { "XOR" }; +static const char *const l203[] = { "42 XOR" }; +static const char *const l204[] = { "-1 NOT . CR" }; +static const char *const l205[] = { "0 NOT . CR" }; +static const char *const l206[] = { "42 NOT . CR" }; +static const char *const l207[] = { "-42 NOT . CR" }; +static const char *const l208[] = { "NOT" }; +static const char *const l209[] = { "42 42 = . CR" }; +static const char *const l210[] = { "42 43 = . CR" }; +static const char *const l211[] = { "0 0 = . CR" }; +static const char *const l212[] = { "-42 -42 = . CR" }; +static const char *const l213[] = { "-42 42 = . CR" }; +static const char *const l214[] = { "=" }; +static const char *const l215[] = { "42 =" }; +static const char *const l216[] = { "5 7 < . CR" }; +static const char *const l217[] = { "7 5 < . CR" }; +static const char *const l218[] = { "5 5 < . CR" }; +static const char *const l219[] = { "-5 5 < . CR" }; +static const char *const l220[] = { "-7 -5 < . CR" }; +static const char *const l221[] = { "<" }; +static const char *const l222[] = { "42 <" }; +static const char *const l223[] = { "7 5 > . CR" }; +static const char *const l224[] = { "5 7 > . CR" }; +static const char *const l225[] = { "5 5 > . CR" }; +static const char *const l226[] = { "5 -5 > . CR" }; +static const char *const l227[] = { "-5 -7 > . CR" }; +static const char *const l228[] = { ">" }; +static const char *const l229[] = { "42 >" }; +static const char *const l230[] = { "0 0= . CR" }; +static const char *const l231[] = { "42 0= . CR" }; +static const char *const l232[] = { "-42 0= . CR" }; +static const char *const l233[] = { "0=" }; +static const char *const l234[] = { "-42 0< . CR" }; +static const char *const l235[] = { "0 0< . CR" }; +static const char *const l236[] = { "42 0< . CR" }; +static const char *const l237[] = { "0<" }; +static const char *const l238[] = { "42 0> . CR" }; +static const char *const l239[] = { "0 0> . CR" }; +static const char *const l240[] = { "-42 0> . CR" }; +static const char *const l241[] = { "0>" }; +static const char *const l242[] = { "3 5 U< . CR" }; +static const char *const l243[] = { "5 5 U< . CR" }; +static const char *const l244[] = { "7 5 U< . CR" }; +static const char *const l245[] = { "0 1 U< . CR" }; +static const char *const l246[] = { "U<" }; +static const char *const l247[] = { "6 7 4 */ . CR" }; +static const char *const l248[] = { "12 5 3 */ . CR" }; +static const char *const l249[] = { "0 999 123 */ . CR" }; +static const char *const l250[] = { "42 5 1 */ . CR" }; +static const char *const l251[] = { "7 3 2 */ . CR" }; +static const char *const l252[] = { "-6 7 4 */ . CR" }; +static const char *const l253[] = { "6 7 -4 */ . CR" }; +static const char *const l254[] = { "6 7 0 */" }; +static const char *const l255[] = { "*/" }; +static const char *const l256[] = { "1 2 */" }; +static const char *const l257[] = { "17 3 5 */MOD . . CR" }; +static const char *const l258[] = { "15 4 3 */MOD . . CR" }; +static const char *const l259[] = { "0 999 123 */MOD . . CR" }; +static const char *const l260[] = { "42 5 1 */MOD . . CR" }; +static const char *const l261[] = { "7 8 5 */MOD . . CR" }; +static const char *const l262[] = { "-7 3 4 */MOD . . CR" }; +static const char *const l263[] = { "6 7 0 */MOD" }; +static const char *const l264[] = { "*/MOD" }; +static const char *const l265[] = { "100 200 300 400 D+ . . CR" }; +static const char *const l266[] = { "42 99 0 0 D+ . . CR" }; +static const char *const l267[] = { "-100 -200 50 75 D+ . . CR" }; +static const char *const l268[] = { "2147483647 0 1 0 D+ . . CR" }; +static const char *const l269[] = { "-100 -200 -300 -400 D+ . . CR" }; +static const char *const l270[] = { "1 2 3 D+" }; +static const char *const l271[] = { "D+" }; +static const char *const l272[] = { "100 200 DNEGATE . . CR" }; +static const char *const l273[] = { "-100 -200 DNEGATE . . CR" }; +static const char *const l274[] = { "0 0 DNEGATE . . CR" }; +static const char *const l275[] = { "2147483647 0 DNEGATE . . CR" }; +static const char *const l276[] = { "42 DNEGATE" }; +static const char *const l277[] = { "DNEGATE" }; +static const char *const l278[] = { "100 200 300 400 D< . CR" }; +static const char *const l279[] = { "300 400 100 200 D< . CR" }; +static const char *const l280[] = { "100 200 100 200 D< . CR" }; +static const char *const l281[] = { "-100 -1 100 0 D< . CR" }; +static const char *const l282[] = { "-300 -1 -100 -1 D< . CR" }; +static const char *const l283[] = { "100 200 100 300 D< . CR" }; +static const char *const l284[] = { "1 2 3 D<" }; +static const char *const l285[] = { "D<" }; +static const char *const l286[] = { "DECIMAL 42 . CR" }; +static const char *const l287[] = { "HEX FF . CR" }; +static const char *const l288[] = { "OCTAL 52 . CR" }; +static const char *const l289[] = { "16 BASE ! 255 . CR" }; +static const char *const l290[] = { "BASE @ . CR" }; +static const char *const l291[] = { "HEX FF DECIMAL . CR" }; +static const char *const l292[] = { "OCTAL 52 DECIMAL . CR" }; +static const char *const l293[] = { "DECIMAL 42 . CR 42 . CR HEX 42 . CR" }; +static const char *const l294[] = { "DECIMAL 42 S>D <# #S #> TYPE CR" }; +static const char *const l295[] = { "0 0 <# #> TYPE CR" }; +static const char *const l296[] = { "-42 DUP ABS 0 <# #S ROT SIGN #> TYPE CR" }; +static const char *const l297[] = { "15 0 <# # #> TYPE CR" }; +static const char *const l298[] = { "15 0 <# # # #> TYPE CR" }; +static const char *const l299[] = { "5 0 <# # # #> TYPE CR" }; +static const char *const l300[] = { "42 0 <# #S #> TYPE CR" }; +static const char *const l301[] = { "0 0 <# #S #> TYPE CR" }; +static const char *const l302[] = { "1234567890 0 <# #S #> TYPE CR" }; +static const char *const l303[] = { "-42 DUP ABS 0 <# #S ROT SIGN #> TYPE CR" }; +static const char *const l304[] = { "42 DUP ABS 0 <# #S ROT SIGN #> TYPE CR" }; +static const char *const l305[] = { "0 DUP ABS 0 <# #S ROT SIGN #> TYPE CR" }; +static const char *const l306[] = { "42 0 <# #S #> TYPE CR" }; +static const char *const l307[] = { "0 0 <# #> TYPE CR" }; +static const char *const l308[] = { "42 0 <# #S #> SWAP DROP . CR" }; +static const char *const l309[] = { "42 0 <# 46 HOLD #S #> TYPE CR" }; +static const char *const l310[] = { "<# 257 HOLD #>" }; +static const char *const l311[] = { "4 PAD C! PAD COUNT . PAD - . CR" }; +static const char *const l312[] = { "0 PAD C! PAD COUNT . PAD - . CR" }; +static const char *const l313[] = { "255 PAD C! PAD COUNT . PAD - . CR" }; +static const char *const l314[] = { "COUNT" }; +static const char *const l315[] = { "HERE S\042 Test \042 -TRAILING TYPE CR" }; +static const char *const l316[] = { "HERE S\042 \042 -TRAILING TYPE CR" }; +static const char *const l317[] = { "HERE S\042 Test\042 -TRAILING TYPE CR" }; +static const char *const l318[] = { "HERE 0 -TRAILING TYPE CR" }; +static const char *const l319[] = { "65 PAD C! 66 PAD 1+ C! PAD PAD 10 + 2 CMOVE PAD 10 + C@ . PAD", "11 + C@ . CR" }; +static const char *const l320[] = { "HERE HERE 10 + 0 CMOVE" }; +static const char *const l321[] = { ">IN @ . CR" }; +static const char *const l322[] = { ": TWIN >IN @ >IN @ - . CR ; TWIN" }; +static const char *const l323[] = { "42 . CR" }; +static const char *const l324[] = { "-42 . CR" }; +static const char *const l325[] = { "0 . CR" }; +static const char *const l326[] = { "2147483647 . CR" }; +static const char *const l327[] = { "-2147483648 . CR" }; +static const char *const l328[] = { "1 2 3 . . . CR" }; +static const char *const l329[] = { "." }; +static const char *const l330[] = { "42 . CR 43 . CR" }; +static const char *const l331[] = { "CR CR CR" }; +static const char *const l332[] = { "DEPTH CR DEPTH = . CR" }; +static const char *const l333[] = { "1 2 3 . . . CR" }; +static const char *const l334[] = { "42 . SPACE 43 . CR" }; +static const char *const l335[] = { "SPACE SPACE SPACE" }; +static const char *const l336[] = { "DEPTH SPACE DEPTH = . CR" }; +static const char *const l337[] = { "65 EMIT SPACE 66 EMIT CR" }; +static const char *const l338[] = { "0 SPACES" }; +static const char *const l339[] = { "1 SPACES" }; +static const char *const l340[] = { "5 SPACES" }; +static const char *const l341[] = { "20 SPACES" }; +static const char *const l342[] = { "-5 SPACES" }; +static const char *const l343[] = { "42 . 3 SPACES 43 . CR" }; +static const char *const l344[] = { "SPACES" }; +static const char *const l345[] = { "65 EMIT CR" }; +static const char *const l346[] = { "90 EMIT CR" }; +static const char *const l347[] = { "48 EMIT CR" }; +static const char *const l348[] = { "32 EMIT CR" }; +static const char *const l349[] = { "10 EMIT" }; +static const char *const l350[] = { "127 EMIT CR" }; +static const char *const l351[] = { "321 EMIT CR" }; +static const char *const l352[] = { "-1 EMIT CR" }; +static const char *const l353[] = { "72 EMIT 73 EMIT 10 EMIT" }; +static const char *const l354[] = { "EMIT" }; +static const char *const l355[] = { "72 PAD C! 105 PAD 1+ C! PAD 2 TYPE CR" }; +static const char *const l356[] = { "HERE 0 TYPE CR" }; +static const char *const l357[] = { "49 PAD C! 50 PAD 1+ C! PAD 2 TYPE CR" }; +static const char *const l358[] = { "PAD 0 TYPE" }; +static const char *const l359[] = { "PAD TYPE" }; +static const char *const l360[] = { "TYPE" }; +static const char *const l361[] = { "4 PAD C! PAD COUNT . PAD - . CR" }; +static const char *const l362[] = { "0 PAD C! PAD COUNT . PAD - . CR" }; +static const char *const l363[] = { "255 PAD C! PAD COUNT . PAD - . CR" }; +static const char *const l364[] = { "COUNT" }; +static const char *const l365[] = { "WORD" }; +static const char *const l366[] = { "1 BLOCK DUP . CR" }; +static const char *const l367[] = { "0 BLOCK" }; +static const char *const l368[] = { "65536 BLOCK" }; +static const char *const l369[] = { "-1 BLOCK" }; +static const char *const l370[] = { "BLOCK" }; +static const char *const l371[] = { "1 BUFFER DUP . CR" }; +static const char *const l372[] = { "0 BUFFER" }; +static const char *const l373[] = { "2 BLOCK 1+ 2 BUFFER" }; +static const char *const l374[] = { "BUFFER" }; +static const char *const l375[] = { "1 BLOCK UPDATE" }; +static const char *const l376[] = { "1 BLOCK UPDATE UPDATE" }; +static const char *const l377[] = { "0 SCR ! UPDATE" }; +static const char *const l378[] = { "SAVE-BUFFERS" }; +static const char *const l379[] = { "1 BLOCK UPDATE SAVE-BUFFERS" }; +static const char *const l380[] = { "SAVE-BUFFERS" }; +static const char *const l381[] = { "EMPTY-BUFFERS" }; +static const char *const l382[] = { "1 BLOCK EMPTY-BUFFERS" }; +static const char *const l383[] = { "1 BLOCK UPDATE EMPTY-BUFFERS" }; +static const char *const l384[] = { "1 LOAD" }; +static const char *const l385[] = { "0 LOAD" }; +static const char *const l386[] = { "9999 LOAD" }; +static const char *const l387[] = { "LOAD" }; +static const char *const l388[] = { "1 LIST" }; +static const char *const l389[] = { "0 LIST" }; +static const char *const l390[] = { "9999 LIST" }; +static const char *const l391[] = { "LIST" }; +static const char *const l392[] = { "SCR @ . CR" }; +static const char *const l393[] = { "1 LIST SCR @ . CR" }; +static const char *const l394[] = { "1 LOAD SCR @ . CR" }; +static const char *const l395[] = { "HERE HERE = . CR" }; +static const char *const l396[] = { "HERE 42 , HERE SWAP - 1 CELLS = 0 SWAP /" }; +static const long long s396[] = { 0LL }; +static const char *const l397[] = { "HERE 65 C, HERE SWAP - . CR" }; +static const char *const l398[] = { "HERE 10 ALLOT HERE SWAP - . CR" }; +static const char *const l399[] = { "HERE DUP HERE = . CR" }; +static const char *const l400[] = { "HERE 10 ALLOT HERE SWAP - . CR" }; +static const char *const l401[] = { "HERE 0 ALLOT HERE SWAP - . CR" }; +static const char *const l402[] = { "HERE -4 ALLOT HERE SWAP - . CR" }; +static const char *const l403[] = { "HERE 100 ALLOT HERE SWAP - . CR" }; +static const char *const l404[] = { "ALIGN HERE 10 ALLOT 42 OVER ! @ . CR" }; +static const char *const l405[] = { "ALLOT" }; +static const char *const l406[] = { "42 , HERE 1 CELLS - @ . CR" }; +static const char *const l407[] = { "-999 , HERE 1 CELLS - @ . CR" }; +static const char *const l408[] = { "0 , HERE 1 CELLS - @ . CR" }; +static const char *const l409[] = { "2147483647 , HERE 1 CELLS - @ . CR" }; +static const char *const l410[] = { "-2147483648 , HERE 1 CELLS - @ . CR" }; +static const char *const l411[] = { "10 , 20 , HERE 1 CELLS - @ . HERE 1 CELLS - @ . CR" }; +static const char *const l412[] = { "," }; +static const char *const l413[] = { "PAD PAD = . CR" }; +static const char *const l414[] = { "PAD HERE = . CR" }; +static const char *const l415[] = { "PAD DUP PAD = . CR" }; +static const char *const l416[] = { "CREATE test1 42 , test1 @ . CR" }; +static const char *const l417[] = { "CREATE" }; +static const char *const l418[] = { "CREATE T 1 , CREATE T 2 , T @ . CR" }; +static const char *const l419[] = { "CREATE test2 CREATE test2" }; +static const char *const l420[] = { "CREATE abcdefghijklmnopqrstuvwxyz" }; +static const char *const l421[] = { "CREATE temp1 FORGET temp1" }; +static const char *const l422[] = { ": test3 42 ; IMMEDIATE test3 . CR" }; +static const char *const l423[] = { ": test4 43 ; IMMEDIATE IMMEDIATE" }; +static const char *const l424[] = { "FIND DUP . CR" }; +static const char *const l425[] = { ": test5 44 ; FIND test5 . CR" }; +static const char *const l426[] = { "FIND nonexistent . CR" }; +static const char *const l427[] = { "FIND" }; +static const long long s427[] = { 0LL }; +static const char *const l428[] = { "FORTH DEFINITIONS" }; +static const char *const l429[] = { "FORTH DEFINITIONS DEFINITIONS" }; +static const char *const l430[] = { "VOCABULARY TEST-VOC1 TEST-VOC1 DEFINITIONS" }; +static const char *const l431[] = { "VOCABULARY MYVOC MYVOC DEFINITIONS CONTEXT @ . CR" }; +static const char *const l432[] = { "VOCABULARY ISOLATED ISOLATED DEFINITIONS : ISOWORD 99 ; FORTH", "DEFINITIONS" }; +static const char *const l433[] = { "VOCABULARY V1 V1 DEFINITIONS : V1WORD 11 ; FORTH V1WORD . CR" }; +static const char *const l434[] = { "VOCABULARY VA VOCABULARY VB VOCABULARY VC VA DEFINITIONS" }; +static const char *const l435[] = { "VOCABULARY TESTVOC VOCABULARY TESTVOC" }; +static const char *const l436[] = { "VOCABULARY" }; +static const char *const l437[] = { "FORTH DEFINITIONS" }; +static const char *const l438[] = { "FORTH : TEST1 42 ; TEST1 . CR" }; +static const char *const l439[] = { "VOCABULARY OTHER-VOC OTHER-VOC FORTH" }; +static const char *const l440[] = { "FORTH DEFINITIONS" }; +static const char *const l441[] = { "VOCABULARY TEST-VOC6 TEST-VOC6 DEFINITIONS" }; +static const char *const l442[] = { "VOCABULARY TEST-VOC7 TEST-VOC7 DEFINITIONS : TEST2 43 ;" }; +static const char *const l443[] = { "CONTEXT @ . CR" }; +static const char *const l444[] = { "FORTH CONTEXT @ . CR" }; +static const char *const l445[] = { "CURRENT @ . CR" }; +static const char *const l446[] = { "VOCABULARY TEST-VOC8 TEST-VOC8 DEFINITIONS CURRENT @ . CR" }; +static const char *const l447[] = { "ABORT" }; +static const char *const l448[] = { "1 2 3 ABORT DEPTH . CR" }; +static const char *const l449[] = { ": BAD-WORD ABORT ; 123 BAD-WORD DEPTH . CR" }; +static const char *const l450[] = { ": TEST1 42 ; TEST1 . CR" }; +static const char *const l451[] = { ":" }; +static const char *const l452[] = { ";" }; +static const char *const l453[] = { ": TEST4 42 ; IMMEDIATE TEST4 . CR" }; +static const char *const l454[] = { "42 CONSTANT MEANING MEANING . CR" }; +static const char *const l455[] = { "0 CONSTANT ZERO ZERO . CR" }; +static const char *const l456[] = { "-1 CONSTANT MINUS MINUS . CR" }; +static const char *const l457[] = { "CONSTANT" }; +static const char *const l458[] = { "VARIABLE VAR1 42 VAR1 ! VAR1 @ . CR" }; +static const char *const l459[] = { "VARIABLE VAR2 VARIABLE VAR3" }; +static const char *const l460[] = { "VARIABLE VAR4 -99 VAR4 ! VAR4 @ . CR" }; +static const char *const l461[] = { "CREATE OBJ1" }; +static const char *const l462[] = { "CREATE OBJ2 42 , OBJ2 @ . CR" }; +static const char *const l463[] = { "CREATE" }; +static const char *const l464[] = { ": CONST CREATE , DOES> @ ; 42 CONST MEANING MEANING . CR" }; +static const char *const l465[] = { ": ARRAY CREATE DOES> SWAP CELLS + ; CREATE ARR 10 CELLS ALLOT" }; +static const char *const l466[] = { "DOES>" }; +static const char *const l467[] = { ": TEST5 [ 42 ] LITERAL ; TEST5 . CR" }; +static const char *const l468[] = { "[" }; +static const char *const l469[] = { ": TEST6 [ ] 42 ; TEST6 . CR" }; +static const char *const l470[] = { ": TEST1 IF 42 ELSE 24 THEN ; -1 TEST1 . CR" }; +static const char *const l471[] = { ": TEST2 IF 42 ELSE 24 THEN ; 0 TEST2 . CR" }; +static const char *const l472[] = { ": TEST3 IF IF 1 ELSE 2 THEN ELSE 3 THEN ; -1 -1 TEST3 . CR" }; +static const char *const l473[] = { ": TEST4 IF 42 THEN ; -1 TEST4 . CR" }; +static const char *const l474[] = { "IF" }; +static const char *const l475[] = { "ELSE" }; +static const char *const l476[] = { "THEN" }; +static const char *const l477[] = { ": TEST5 0 BEGIN 1+ DUP 5 = UNTIL ; TEST5 . CR" }; +static const char *const l478[] = { ": TEST6 0 BEGIN DUP 5 < WHILE 1+ REPEAT ; TEST6 . CR" }; +static const char *const l479[] = { "BEGIN" }; +static const char *const l480[] = { ": TEST8 BEGIN DUP 1- DUP 0= UNTIL ; 5 TEST8 . CR" }; +static const long long s480[] = { 5LL, 4LL, 3LL, 2LL, 1LL }; +static const char *const l481[] = { ": TEST9 BEGIN 1 UNTIL ; IMMEDIATE" }; +static const char *const l482[] = { "UNTIL" }; +static const char *const l483[] = { ": TEST10 BEGIN DUP 5 < WHILE 1+ REPEAT ; 0 TEST10 . CR" }; +static const char *const l484[] = { ": TEST11 BEGIN DUP 0< WHILE 1+ REPEAT ; 0 TEST11 . CR" }; +static const char *const l485[] = { "WHILE" }; +static const char *const l486[] = { ": TEST12 BEGIN DUP 5 < WHILE 1+ REPEAT ; 0 TEST12 . CR" }; +static const char *const l487[] = { "REPEAT" }; +static const char *const l488[] = { ": TEST13 5 0 DO I . LOOP ; TEST13 CR" }; +static const char *const l489[] = { ": TEST14 -1 -5 DO I . LOOP ; TEST14 CR" }; +static const char *const l490[] = { ": TEST15 0 0 DO LOOP ;" }; +static const char *const l491[] = { ": TEST16 3 0 DO 3 0 DO J I + . LOOP LOOP ; TEST16 CR" }; +static const char *const l492[] = { ": TEST20 5 0 DO I . LOOP ; TEST20 CR" }; +static const char *const l493[] = { "LOOP" }; +static const char *const l494[] = { ": TEST21 10 0 DO I . 2 +LOOP ; TEST21 CR" }; +static const char *const l495[] = { ": TEST22 0 10 DO I . -1 +LOOP ; TEST22 CR" }; +static const char *const l496[] = { ": TEST23 10 0 DO I . DUP +LOOP ; 3 TEST23 CR" }; +static const long long s496[] = { 3LL }; +static const char *const l497[] = { ": TI 4 0 DO I . LOOP CR ; TI" }; +static const char *const l498[] = { ": TI1 1 0 DO I . LOOP CR ; TI1" }; +static const char *const l499[] = { ": TI2 5 3 DO I . LOOP CR ; TI2" }; +static const char *const l500[] = { ": TI3 3 0 DO I 2 * . LOOP CR ; TI3" }; +static const char *const l501[] = { ": TJ 2 0 DO 3 0 DO J . LOOP LOOP CR ; TJ" }; +static const char *const l502[] = { ": TJ2 2 0 DO 2 0 DO J I + . LOOP LOOP CR ; TJ2" }; +static const char *const l503[] = { ": TEX 5 EXIT 99 ; TEX . CR" }; +static const char *const l504[] = { ": TEX2 DUP 0> IF EXIT THEN NEGATE ; 3 TEX2 . CR" }; +static const char *const l505[] = { ": TEX2 DUP 0> IF EXIT THEN NEGATE ; -4 TEX2 . CR" }; +static const char *const l506[] = { ": TEX3 1 2 EXIT 3 ; TEX3 . . CR" }; +static const char *const l507[] = { ": TLV 0 5 0 DO I 3 = IF LEAVE THEN 1+ LOOP ; TLV . CR" }; +static const char *const l508[] = { ": TLV2 0 5 0 DO LEAVE 1+ LOOP ; TLV2 . CR" }; +static const char *const l509[] = { ": TLV3 0 5 0 \077DO I 2 = IF LEAVE THEN 1+ LOOP ; TLV3 . CR" }; +static const char *const l510[] = { "3 4 U* . . CR" }; +static const char *const l511[] = { "0 5 U* . . CR" }; +static const char *const l512[] = { "-1 -1 U* 2+ . 1 = . CR" }; +static const char *const l513[] = { "7 0 2 U/MOD . . CR" }; +static const char *const l514[] = { "12 0 4 U/MOD . . CR" }; +static const char *const l515[] = { "0 1 2 U/MOD 2* . . CR" }; +static const char *const l516[] = { "-1 -1 U* -1 U/MOD 1+ . . CR" }; +static const char *const l517[] = { "-1 -2 -1 U/MOD 1+ . 2+ . CR" }; +static const char *const l518[] = { "1 0 0 U/MOD" }; +static const char *const l519[] = { "VARIABLE Q1 42 Q1 ! Q1 \077 CR" }; +static const char *const l520[] = { ": E1 7 ; FIND E1 EXECUTE . CR" }; +static const char *const l521[] = { "42 U. CR" }; +static const char *const l522[] = { "-1 U. CR" }; +static const char *const l523[] = { ": C1 0 0 BL WORD CONVERT DROP ; C1 123 . . CR" }; +static const char *const l524[] = { "' DUP 0= . CR" }; +static const char *const l525[] = { ": Q3 .\042 hi there\042 ; Q3 CR" }; +static const char *const l526[] = { ": Q4 [ 5 ] LITERAL ; Q4 . CR" }; +static const char *const l527[] = { "STATE @ . CR" }; +static const char *const l528[] = { ": Q5 STATE @ 0= . ; IMMEDIATE : Q6 Q5 ; CR" }; +static const char *const l529[] = { ": Q7 COMPILE DUP ; IMMEDIATE : Q8 Q7 ; 3 Q8 . . CR" }; +static const char *const l530[] = { ": Q9 [COMPILE] IF ; IMMEDIATE : Q10 Q9 1 ELSE 2 THEN ; 0 Q10", ". -1 Q10 . CR" }; +static const char *const l531[] = { "1 ( 2 ) 3 . . CR" }; +static const char *const l532[] = { "BLK @ . CR" }; +static const char *const l533[] = { "79-STANDARD" }; +static const char *const l534[] = { ": W1 BL WORD COUNT TYPE ; W1 HELLO" }; +static const char *const l535[] = { ": W2 44 WORD COUNT TYPE ; W2 A B," }; +static const char *const l536[] = { ": W3 BL WORD C@ . ; W3 ABC" }; +static const char *const l537[] = { ": W4 BL WORD COUNT TYPE ; W4 X" }; + +const v4_post_case v4_post_cases[] = { + { "DUP.basic", l0, 1u, V4_POST_STACK, 0, 0u, "5 5 \012", 5u }, + { "DUP.zero", l1, 1u, V4_POST_STACK, 0, 0u, "0 0 \012", 5u }, + { "DUP.negative", l2, 1u, V4_POST_STACK, 0, 0u, "-42 -42 \012", 9u }, + { "DUP.max_int", l3, 1u, V4_POST_STACK, 0, 0u, "2147483647 2147483647 \012", 23u }, + { "DUP.min_int", l4, 1u, V4_POST_STACK, 0, 0u, "-2147483648 -2147483648 \012", 25u }, + { "DUP.empty_stack", l5, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "DROP.basic", l6, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "DROP.zero", l7, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "DROP.negative", l8, 1u, V4_POST_STACK, 0, 0u, "10 \012", 4u }, + { "DROP.double_drop", l9, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "DROP.triple_drop", l10, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "DROP.sequential", l11, 1u, V4_POST_STACK, 0, 0u, "7 \012", 3u }, + { "DROP.single_item", l12, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "DROP.depth_change", l13, 1u, V4_POST_STACK, s13, 1u, "1 \012", 3u }, + { "DROP.preserve_depth", l14, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "DROP.max_int", l15, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "DROP.min_int", l16, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "DROP.with_dup", l17, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "DROP.with_swap", l18, 1u, V4_POST_STACK, 0, 0u, "2 \012", 3u }, + { "DROP.complex", l19, 1u, V4_POST_STACK, 0, 0u, "3 \012", 3u }, + { "DROP.empty_stack", l20, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "SWAP.basic", l21, 1u, V4_POST_STACK, 0, 0u, "5 7 \012", 5u }, + { "SWAP.same_values", l22, 1u, V4_POST_STACK, 0, 0u, "42 42 \012", 7u }, + { "SWAP.zero_nonzero", l23, 1u, V4_POST_STACK, 0, 0u, "0 99 \012", 6u }, + { "SWAP.negative", l24, 1u, V4_POST_STACK, 0, 0u, "-5 10 \012", 7u }, + { "SWAP.one_item", l25, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "SWAP.empty_stack", l26, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "OVER.basic", l27, 1u, V4_POST_STACK, 0, 0u, "5 7 5 \012", 7u }, + { "OVER.zeros", l28, 1u, V4_POST_STACK, 0, 0u, "0 0 0 \012", 7u }, + { "OVER.mixed", l29, 1u, V4_POST_STACK, 0, 0u, "-1 42 -1 \012", 10u }, + { "OVER.one_item", l30, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "OVER.empty_stack", l31, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "ROT.basic", l32, 1u, V4_POST_STACK, 0, 0u, "1 3 2 \012", 7u }, + { "ROT.zeros", l33, 1u, V4_POST_STACK, 0, 0u, "0 0 0 \012", 7u }, + { "ROT.mixed", l34, 1u, V4_POST_STACK, 0, 0u, "-1 1 0 \012", 8u }, + { "ROT.two_items", l35, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "ROT.one_item", l36, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "ROT.empty_stack", l37, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "DEPTH.empty", l38, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "DEPTH.one_item", l39, 1u, V4_POST_STACK, s39, 1u, "1 \012", 3u }, + { "DEPTH.multiple", l40, 1u, V4_POST_STACK, s40, 3u, "3 \012", 3u }, + { "PICK.pick_0", l41, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "PICK.pick_1", l42, 1u, V4_POST_STACK, s42, 3u, "3 \012", 3u }, + { "PICK.pick_2", l43, 1u, V4_POST_STACK, s43, 3u, "2 \012", 3u }, + { "ROLL.roll_1", l44, 1u, V4_POST_STACK, 0, 0u, "3 2 1 \012", 7u }, + { "ROLL.roll_2", l45, 1u, V4_POST_STACK, 0, 0u, "2 3 1 \012", 7u }, + { "\077DUP.nonzero", l46, 1u, V4_POST_STACK, 0, 0u, "42 42 \012", 7u }, + { "\077DUP.negative", l47, 1u, V4_POST_STACK, 0, 0u, "-5 -5 \012", 7u }, + { "\077DUP.zero", l48, 1u, V4_POST_STACK, s48, 1u, "1 \012", 3u }, + { "\077DUP.empty_stack", l49, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { ">R.basic", l50, 1u, V4_POST_STACK, 0, 0u, "42 42 \012", 7u }, + { ">R.zero", l51, 1u, V4_POST_STACK, 0, 0u, "0 0 \012", 5u }, + { ">R.negative", l52, 1u, V4_POST_STACK, 0, 0u, "-123 -123 \012", 11u }, + { ">R.multiple", l53, 1u, V4_POST_STACK, 0, 0u, "1 1 2 2 \012", 9u }, + { ">R.empty_stack", l54, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "R>.basic", l55, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "R>.lifo_order", l56, 1u, V4_POST_STACK, 0, 0u, "1 2 \012", 5u }, + { "R>.empty_rstack", l57, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "R@.basic", l58, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "R@.non_destructive", l59, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "R@.empty_rstack", l60, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "!.basic", l61, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "!.zero", l62, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "!.negative", l63, 1u, V4_POST_STACK, 0, 0u, "-999 \012", 6u }, + { "!.overwrite", l64, 1u, V4_POST_STACK, 0, 0u, "222 \012", 5u }, + { "!.max_int", l65, 1u, V4_POST_STACK, 0, 0u, "2147483647 \012", 12u }, + { "!.min_int", l66, 1u, V4_POST_STACK, 0, 0u, "-2147483648 \012", 13u }, + { "!.empty_stack", l67, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "!.one_item", l68, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "@.after_store", l69, 1u, V4_POST_STACK, 0, 0u, "123 \012", 5u }, + { "@.multiple_reads", l70, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "@.empty_stack", l71, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { ",.basic", l72, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { ",.negative", l73, 1u, V4_POST_STACK, 0, 0u, "-999 \012", 6u }, + { "HERE.basic", l74, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "HERE.after_comma", l75, 1u, V4_POST_STACK, s75, 1u, "", 0u }, + { "ALLOT.basic", l76, 1u, V4_POST_STACK, 0, 0u, "10 \012", 4u }, + { "ALLOT.zero", l77, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "ALLOT.negative", l78, 1u, V4_POST_STACK, 0, 0u, "-4 \012", 4u }, + { "PAD.basic", l79, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "PAD.different_from_here", l80, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "+!.basic", l81, 1u, V4_POST_STACK, 0, 0u, "15 \012", 4u }, + { "+!.by_zero", l82, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "+!.negative", l83, 1u, V4_POST_STACK, 0, 0u, "7 \012", 3u }, + { "+!.accumulate", l84, 1u, V4_POST_STACK, 0, 0u, "6 \012", 3u }, + { "+!.empty_stack", l85, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "FILL.zero_n", l86, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "FILL.empty_stack", l87, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "MOVE.basic", l88, 2u, V4_POST_STACK, 0, 0u, "65 66 \012", 7u }, + { "MOVE.zero_n", l89, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "MOVE.empty_stack", l90, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "+.basic", l91, 1u, V4_POST_STACK, 0, 0u, "12 \012", 4u }, + { "+.zero_add", l92, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "+.negative", l93, 1u, V4_POST_STACK, 0, 0u, "-2 \012", 4u }, + { "+.both_negative", l94, 1u, V4_POST_STACK, 0, 0u, "-8 \012", 4u }, + { "+.overflow", l95, 1u, V4_POST_STACK, 0, 0u, "2147483648 \012", 12u }, + { "+.underflow", l96, 1u, V4_POST_STACK, 0, 0u, "-2147483649 \012", 13u }, + { "+.empty_stack", l97, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "+.one_item", l98, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "-.basic", l99, 1u, V4_POST_STACK, 0, 0u, "7 \012", 3u }, + { "-.zero_sub", l100, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "-.from_zero", l101, 1u, V4_POST_STACK, 0, 0u, "-5 \012", 4u }, + { "-.negative", l102, 1u, V4_POST_STACK, 0, 0u, "8 \012", 3u }, + { "-.same_values", l103, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "-.overflow", l104, 1u, V4_POST_STACK, 0, 0u, "-2147483649 \012", 13u }, + { "-.underflow", l105, 1u, V4_POST_STACK, 0, 0u, "2147483648 \012", 12u }, + { "-.empty_stack", l106, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "-.one_item", l107, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "*.basic", l108, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "*.by_zero", l109, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "*.by_one", l110, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "*.by_negative", l111, 1u, V4_POST_STACK, 0, 0u, "-42 \012", 5u }, + { "*.negative_negative", l112, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "*.large_numbers", l113, 1u, V4_POST_STACK, 0, 0u, "65534 \012", 7u }, + { "*.overflow", l114, 1u, V4_POST_STACK, 0, 0u, "4294967296 \012", 12u }, + { "*.empty_stack", l115, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "*.one_item", l116, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "/.basic", l117, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "/.by_one", l118, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "/.negative_dividend", l119, 1u, V4_POST_STACK, 0, 0u, "-5 \012", 4u }, + { "/.negative_divisor", l120, 1u, V4_POST_STACK, 0, 0u, "-5 \012", 4u }, + { "/.both_negative", l121, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "/.truncation", l122, 1u, V4_POST_STACK, 0, 0u, "2 \012", 3u }, + { "/.by_zero", l123, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "/.empty_stack", l124, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "/.one_item", l125, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "MOD.basic", l126, 1u, V4_POST_STACK, 0, 0u, "2 \012", 3u }, + { "MOD.exact_division", l127, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "MOD.by_one", l128, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "MOD.negative_dividend", l129, 1u, V4_POST_STACK, 0, 0u, "-2 \012", 4u }, + { "MOD.negative_divisor", l130, 1u, V4_POST_STACK, 0, 0u, "2 \012", 3u }, + { "MOD.small_by_large", l131, 1u, V4_POST_STACK, 0, 0u, "3 \012", 3u }, + { "MOD.by_zero", l132, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "MOD.empty_stack", l133, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "MOD.one_item", l134, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "/MOD.basic", l135, 1u, V4_POST_STACK, 0, 0u, "3 2 \012", 5u }, + { "/MOD.exact", l136, 1u, V4_POST_STACK, 0, 0u, "5 0 \012", 5u }, + { "/MOD.negative", l137, 1u, V4_POST_STACK, 0, 0u, "-3 -2 \012", 7u }, + { "/MOD.by_zero", l138, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "/MOD.empty_stack", l139, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "/MOD.one_item", l140, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "ABS.positive", l141, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "ABS.negative", l142, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "ABS.zero", l143, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "ABS.min_int", l144, 1u, V4_POST_STACK, 0, 0u, "2147483648 \012", 12u }, + { "ABS.empty_stack", l145, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "NEGATE.positive", l146, 1u, V4_POST_STACK, 0, 0u, "-42 \012", 5u }, + { "NEGATE.negative", l147, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "NEGATE.zero", l148, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "NEGATE.min_int", l149, 1u, V4_POST_STACK, 0, 0u, "2147483648 \012", 12u }, + { "NEGATE.empty_stack", l150, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "MIN.basic", l151, 1u, V4_POST_STACK, 0, 0u, "3 \012", 3u }, + { "MIN.equal", l152, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "MIN.negative", l153, 1u, V4_POST_STACK, 0, 0u, "-5 \012", 4u }, + { "MIN.mixed", l154, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "MIN.one_item", l155, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "MIN.empty_stack", l156, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "MAX.basic", l157, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "MAX.equal", l158, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "MAX.negative", l159, 1u, V4_POST_STACK, 0, 0u, "-3 \012", 4u }, + { "MAX.mixed", l160, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "MAX.one_item", l161, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "MAX.empty_stack", l162, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "1+.basic", l163, 1u, V4_POST_STACK, 0, 0u, "6 \012", 3u }, + { "1+.zero", l164, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "1+.negative", l165, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "1+.chain", l166, 1u, V4_POST_STACK, 0, 0u, "6 \012", 3u }, + { "1+.overflow", l167, 1u, V4_POST_STACK, 0, 0u, "2147483648 \012", 12u }, + { "1+.empty_stack", l168, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "1-.basic", l169, 1u, V4_POST_STACK, 0, 0u, "4 \012", 3u }, + { "1-.to_zero", l170, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "1-.to_negative", l171, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "1-.chain", l172, 1u, V4_POST_STACK, 0, 0u, "3 \012", 3u }, + { "1-.underflow", l173, 1u, V4_POST_STACK, 0, 0u, "-2147483649 \012", 13u }, + { "1-.empty_stack", l174, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "2+.basic", l175, 1u, V4_POST_STACK, 0, 0u, "7 \012", 3u }, + { "2+.zero", l176, 1u, V4_POST_STACK, 0, 0u, "2 \012", 3u }, + { "2+.negative", l177, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "2+.empty_stack", l178, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "2-.basic", l179, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "2-.zero", l180, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "2-.negative", l181, 1u, V4_POST_STACK, 0, 0u, "-2 \012", 4u }, + { "2-.empty_stack", l182, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "AND.both_true", l183, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "AND.first_false", l184, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "AND.second_false", l185, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "AND.both_false", l186, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "AND.bitwise", l187, 1u, V4_POST_STACK, 0, 0u, "17 \012", 4u }, + { "AND.empty_stack", l188, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "AND.one_item", l189, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "OR.both_true", l190, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "OR.first_false", l191, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "OR.second_false", l192, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "OR.both_false", l193, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "OR.bitwise", l194, 1u, V4_POST_STACK, 0, 0u, "119 \012", 5u }, + { "OR.empty_stack", l195, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "OR.one_item", l196, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "XOR.both_true", l197, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "XOR.first_false", l198, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "XOR.second_false", l199, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "XOR.both_false", l200, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "XOR.bitwise", l201, 1u, V4_POST_STACK, 0, 0u, "102 \012", 5u }, + { "XOR.empty_stack", l202, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "XOR.one_item", l203, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "NOT.true", l204, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "NOT.false", l205, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "NOT.positive", l206, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "NOT.negative", l207, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "NOT.empty_stack", l208, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "=.equal", l209, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "=.not_equal", l210, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "=.zero_equal", l211, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "=.negative_equal", l212, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "=.negative_positive", l213, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "=.empty_stack", l214, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "=.one_item", l215, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "<.less_than", l216, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "<.greater_than", l217, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "<.equal", l218, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "<.negative_positive", l219, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "<.negative_negative", l220, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "<.empty_stack", l221, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "<.one_item", l222, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { ">.greater_than", l223, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { ">.less_than", l224, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { ">.equal", l225, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { ">.positive_negative", l226, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { ">.negative_negative", l227, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { ">.empty_stack", l228, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { ">.one_item", l229, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "0=.zero", l230, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "0=.positive", l231, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "0=.negative", l232, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "0=.empty_stack", l233, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "0<.negative", l234, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "0<.zero", l235, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "0<.positive", l236, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "0<.empty_stack", l237, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "0>.positive", l238, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "0>.zero", l239, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "0>.negative", l240, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "0>.empty_stack", l241, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "U<.less", l242, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "U<.equal", l243, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "U<.greater", l244, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "U<.zero_one", l245, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "U<.empty_stack", l246, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "*/.basic", l247, 1u, V4_POST_STACK, 0, 0u, "10 \012", 4u }, + { "*/.exact_division", l248, 1u, V4_POST_STACK, 0, 0u, "20 \012", 4u }, + { "*/.zero_multiply", l249, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "*/.by_one", l250, 1u, V4_POST_STACK, 0, 0u, "210 \012", 5u }, + { "*/.truncation", l251, 1u, V4_POST_STACK, 0, 0u, "10 \012", 4u }, + { "*/.negative_multiply", l252, 1u, V4_POST_STACK, 0, 0u, "-10 \012", 5u }, + { "*/.negative_divisor", l253, 1u, V4_POST_STACK, 0, 0u, "-10 \012", 5u }, + { "*/.div_by_zero", l254, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "*/.empty_stack", l255, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "*/.two_items", l256, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "*/MOD.basic", l257, 1u, V4_POST_STACK, 0, 0u, "10 1 \012", 6u }, + { "*/MOD.exact_division", l258, 1u, V4_POST_STACK, 0, 0u, "20 0 \012", 6u }, + { "*/MOD.zero_multiply", l259, 1u, V4_POST_STACK, 0, 0u, "0 0 \012", 5u }, + { "*/MOD.by_one", l260, 1u, V4_POST_STACK, 0, 0u, "210 0 \012", 7u }, + { "*/MOD.remainder", l261, 1u, V4_POST_STACK, 0, 0u, "11 1 \012", 6u }, + { "*/MOD.negative", l262, 1u, V4_POST_STACK, 0, 0u, "-5 -1 \012", 7u }, + { "*/MOD.div_by_zero", l263, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "*/MOD.empty_stack", l264, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "D+.basic", l265, 1u, V4_POST_STACK, 0, 0u, "600 400 \012", 9u }, + { "D+.zero_add", l266, 1u, V4_POST_STACK, 0, 0u, "99 42 \012", 7u }, + { "D+.negative", l267, 1u, V4_POST_STACK, 0, 0u, "-125 -50 \012", 10u }, + { "D+.carry", l268, 1u, V4_POST_STACK, 0, 0u, "0 2147483648 \012", 14u }, + { "D+.both_negative", l269, 1u, V4_POST_STACK, 0, 0u, "-599 -400 \012", 11u }, + { "D+.three_items", l270, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "D+.empty_stack", l271, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "DNEGATE.positive", l272, 1u, V4_POST_STACK, 0, 0u, "-201 -100 \012", 11u }, + { "DNEGATE.negative", l273, 1u, V4_POST_STACK, 0, 0u, "199 100 \012", 9u }, + { "DNEGATE.zero", l274, 1u, V4_POST_STACK, 0, 0u, "0 0 \012", 5u }, + { "DNEGATE.max_positive", l275, 1u, V4_POST_STACK, 0, 0u, "-1 -2147483647 \012", 16u }, + { "DNEGATE.one_item", l276, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "DNEGATE.empty_stack", l277, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "D<.less_than", l278, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "D<.greater_than", l279, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "D<.equal", l280, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "D<.negative_positive", l281, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "D<.negative_negative", l282, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "D<.high_word_diff", l283, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "D<.three_items", l284, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "D<.empty_stack", l285, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "BASE.decimal", l286, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "BASE.hex", l287, 1u, V4_POST_STACK, 0, 0u, "FF \012", 4u }, + { "BASE.octal", l288, 1u, V4_POST_STACK, 0, 0u, "52 \012", 4u }, + { "BASE.base_store", l289, 1u, V4_POST_STACK, 0, 0u, "255 \012", 5u }, + { "BASE.base_fetch", l290, 1u, V4_POST_STACK, 0, 0u, "10 \012", 4u }, + { "DECIMAL.from_hex", l291, 1u, V4_POST_STACK, 0, 0u, "255 \012", 5u }, + { "DECIMAL.from_octal", l292, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "DECIMAL.state_persist", l293, 1u, V4_POST_STACK, 0, 0u, "42 \01242 \01242 \012", 12u }, + { "<#.basic", l294, 1u, V4_POST_STACK, 0, 0u, "42\012", 3u }, + { "<#.empty", l295, 1u, V4_POST_STACK, 0, 0u, "\012", 1u }, + { "<#.negative", l296, 1u, V4_POST_STACK, 0, 0u, "-42\012", 4u }, + { "#.single_digit", l297, 1u, V4_POST_STACK, 0, 0u, "5\012", 2u }, + { "#.multiple", l298, 1u, V4_POST_STACK, 0, 0u, "15\012", 3u }, + { "#.zero_pad", l299, 1u, V4_POST_STACK, 0, 0u, "05\012", 3u }, + { "#S.basic", l300, 1u, V4_POST_STACK, 0, 0u, "42\012", 3u }, + { "#S.zero", l301, 1u, V4_POST_STACK, 0, 0u, "0\012", 2u }, + { "#S.large", l302, 1u, V4_POST_STACK, 0, 0u, "1234567890\012", 11u }, + { "SIGN.negative", l303, 1u, V4_POST_STACK, 0, 0u, "-42\012", 4u }, + { "SIGN.positive", l304, 1u, V4_POST_STACK, 0, 0u, "42\012", 3u }, + { "SIGN.zero", l305, 1u, V4_POST_STACK, 0, 0u, "0\012", 2u }, + { "#>.normal", l306, 1u, V4_POST_STACK, 0, 0u, "42\012", 3u }, + { "#>.empty", l307, 1u, V4_POST_STACK, 0, 0u, "\012", 1u }, + { "#>.stack_effect", l308, 1u, V4_POST_STACK, 0, 0u, "2 \012", 3u }, + { "HOLD.basic", l309, 1u, V4_POST_STACK, 0, 0u, "42.\012", 4u }, + { "HOLD.overflow", l310, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "COUNT.basic", l311, 1u, V4_POST_STACK, 0, 0u, "4 1 \012", 5u }, + { "COUNT.empty", l312, 1u, V4_POST_STACK, 0, 0u, "0 1 \012", 5u }, + { "COUNT.max_length", l313, 1u, V4_POST_STACK, 0, 0u, "255 1 \012", 7u }, + { "COUNT.empty_stack", l314, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "-TRAILING.basic", l315, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, " Test\012", 6u }, + { "-TRAILING.all_spaces", l316, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "\012", 1u }, + { "-TRAILING.no_spaces", l317, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "Test\012", 5u }, + { "-TRAILING.empty", l318, 1u, V4_POST_STACK, 0, 0u, "\012", 1u }, + { "CMOVE.basic", l319, 2u, V4_POST_STACK, 0, 0u, "65 66 \012", 7u }, + { "CMOVE.empty", l320, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { ">IN.initial", l321, 1u, V4_POST_STACK, 0, 0u, "6 \012", 3u }, + { ">IN.advances", l322, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "..positive", l323, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "..negative", l324, 1u, V4_POST_STACK, 0, 0u, "-42 \012", 5u }, + { "..zero", l325, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "..max_int", l326, 1u, V4_POST_STACK, 0, 0u, "2147483647 \012", 12u }, + { "..min_int", l327, 1u, V4_POST_STACK, 0, 0u, "-2147483648 \012", 13u }, + { "..multiple", l328, 1u, V4_POST_STACK, 0, 0u, "3 2 1 \012", 7u }, + { "..empty_stack", l329, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "CR.basic", l330, 1u, V4_POST_STACK, 0, 0u, "42 \01243 \012", 8u }, + { "CR.multiple", l331, 1u, V4_POST_STACK, 0, 0u, "\012\012\012", 3u }, + { "CR.no_stack_effect", l332, 1u, V4_POST_STACK, 0, 0u, "\0120 \012", 4u }, + { "CR.after_output", l333, 1u, V4_POST_STACK, 0, 0u, "3 2 1 \012", 7u }, + { "SPACE.basic", l334, 1u, V4_POST_STACK, 0, 0u, "42 43 \012", 8u }, + { "SPACE.multiple", l335, 1u, V4_POST_STACK, 0, 0u, " ", 3u }, + { "SPACE.no_stack_effect", l336, 1u, V4_POST_STACK, 0, 0u, " 0 \012", 4u }, + { "SPACE.with_text", l337, 1u, V4_POST_STACK, 0, 0u, "A B\012", 4u }, + { "SPACES.zero", l338, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "SPACES.one", l339, 1u, V4_POST_STACK, 0, 0u, " ", 1u }, + { "SPACES.multiple", l340, 1u, V4_POST_STACK, 0, 0u, " ", 5u }, + { "SPACES.large", l341, 1u, V4_POST_STACK, 0, 0u, " ", 20u }, + { "SPACES.negative", l342, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "SPACES.with_output", l343, 1u, V4_POST_STACK, 0, 0u, "42 43 \012", 10u }, + { "SPACES.empty_stack", l344, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "EMIT.letter_A", l345, 1u, V4_POST_STACK, 0, 0u, "A\012", 2u }, + { "EMIT.letter_Z", l346, 1u, V4_POST_STACK, 0, 0u, "Z\012", 2u }, + { "EMIT.digit", l347, 1u, V4_POST_STACK, 0, 0u, "0\012", 2u }, + { "EMIT.space_char", l348, 1u, V4_POST_STACK, 0, 0u, " \012", 2u }, + { "EMIT.newline", l349, 1u, V4_POST_STACK, 0, 0u, "\012", 1u }, + { "EMIT.high_ascii", l350, 1u, V4_POST_STACK, 0, 0u, "\177\012", 2u }, + { "EMIT.truncation", l351, 1u, V4_POST_STACK, 0, 0u, "A\012", 2u }, + { "EMIT.negative", l352, 1u, V4_POST_STACK, 0, 0u, "\377\012", 2u }, + { "EMIT.sequence", l353, 1u, V4_POST_STACK, 0, 0u, "HI\012", 3u }, + { "EMIT.empty_stack", l354, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "TYPE.basic_string", l355, 1u, V4_POST_STACK, 0, 0u, "Hi\012", 3u }, + { "TYPE.empty_string", l356, 1u, V4_POST_STACK, 0, 0u, "\012", 1u }, + { "TYPE.numbers", l357, 1u, V4_POST_STACK, 0, 0u, "12\012", 3u }, + { "TYPE.zero_length", l358, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "TYPE.one_item", l359, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "TYPE.empty_stack", l360, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "COUNT.basic~2", l361, 1u, V4_POST_STACK, 0, 0u, "4 1 \012", 5u }, + { "COUNT.empty~2", l362, 1u, V4_POST_STACK, 0, 0u, "0 1 \012", 5u }, + { "COUNT.max_length~2", l363, 1u, V4_POST_STACK, 0, 0u, "255 1 \012", 7u }, + { "COUNT.empty_stack~2", l364, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "WORD.empty_stack", l365, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "BLOCK.basic", l366, 1u, V4_POST_DEPTH, 0, 1u, "", 0u }, + { "BLOCK.zero_block", l367, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "BLOCK.large_block", l368, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "BLOCK.negative", l369, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "BLOCK.empty_stack", l370, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "BUFFER.basic", l371, 1u, V4_POST_DEPTH, 0, 1u, "", 0u }, + { "BUFFER.zero_block", l372, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "BUFFER.flush_dirty", l373, 1u, V4_POST_DEPTH_OUTPUT, 0, 2u, "", 0u }, + { "BUFFER.empty_stack", l374, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "UPDATE.basic", l375, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "", 0u }, + { "UPDATE.multiple", l376, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "", 0u }, + { "UPDATE.no_block", l377, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "SAVE-BUFFERS.basic", l378, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "SAVE-BUFFERS.dirty_blocks", l379, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "", 0u }, + { "SAVE-BUFFERS.no_dirty", l380, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "EMPTY-BUFFERS.basic", l381, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "EMPTY-BUFFERS.after_use", l382, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "", 0u }, + { "EMPTY-BUFFERS.dirty_blocks", l383, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "", 0u }, + { "LOAD.basic", l384, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "LOAD.zero_block", l385, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "LOAD.nonexistent", l386, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "LOAD.empty_stack", l387, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "LIST.basic", l388, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "LIST.zero_block", l389, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "LIST.nonexistent", l390, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "LIST.empty_stack", l391, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "SCR.basic", l392, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "SCR.after_list", l393, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "SCR.after_load", l394, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "HERE.basic~2", l395, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "HERE.after_comma~2", l396, 1u, V4_POST_STACK, s396, 1u, "", 0u }, + { "HERE.after_c_comma", l397, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "HERE.after_allot", l398, 1u, V4_POST_STACK, 0, 0u, "10 \012", 4u }, + { "HERE.stability", l399, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "-1 \012", 4u }, + { "ALLOT.basic~2", l400, 1u, V4_POST_STACK, 0, 0u, "10 \012", 4u }, + { "ALLOT.zero~2", l401, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "ALLOT.negative~2", l402, 1u, V4_POST_STACK, 0, 0u, "-4 \012", 4u }, + { "ALLOT.large", l403, 1u, V4_POST_STACK, 0, 0u, "100 \012", 5u }, + { "ALLOT.after_use", l404, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "ALLOT.empty_stack", l405, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { ",.basic~2", l406, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { ",.negative~2", l407, 1u, V4_POST_STACK, 0, 0u, "-999 \012", 6u }, + { ",.zero", l408, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { ",.max_int", l409, 1u, V4_POST_STACK, 0, 0u, "2147483647 \012", 12u }, + { ",.min_int", l410, 1u, V4_POST_STACK, 0, 0u, "-2147483648 \012", 13u }, + { ",.multiple", l411, 1u, V4_POST_STACK, 0, 0u, "20 20 \012", 7u }, + { ",.empty_stack", l412, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "PAD.basic~2", l413, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "PAD.different_from_here~2", l414, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "PAD.stability", l415, 1u, V4_POST_DEPTH_OUTPUT, 0, 1u, "-1 \012", 4u }, + { "CREATE.basic", l416, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "CREATE.empty_name", l417, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "CREATE.redefine_shadows", l418, 1u, V4_POST_STACK, 0, 0u, "2 \012", 3u }, + { "CREATE.duplicate", l419, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "CREATE.long_name", l420, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "FORGET.basic", l421, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "IMMEDIATE.basic", l422, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "IMMEDIATE.already_immediate", l423, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "FIND.existing", l424, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "FIND.user_word", l425, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "FIND.nonexistent", l426, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "FIND.empty", l427, 1u, V4_POST_STACK, s427, 1u, "", 0u }, + { "DEFINITIONS.basic", l428, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "DEFINITIONS.multiple", l429, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "VOCABULARY.basic", l430, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "VOCABULARY.create_and_switch", l431, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "VOCABULARY.word_isolation", l432, 2u, V4_POST_STACK, 0, 0u, "", 0u }, + { "VOCABULARY.cross_vocab_access", l433, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "VOCABULARY.multiple_vocabs", l434, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "VOCABULARY.duplicate", l435, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "VOCABULARY.empty_name", l436, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "FORTH.basic", l437, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "FORTH.persistence", l438, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "FORTH.from_other", l439, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "DEFINITIONS.basic~2", l440, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "DEFINITIONS.new_vocab", l441, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "DEFINITIONS.word_creation", l442, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "CONTEXT.basic", l443, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "CONTEXT.initial", l444, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "CURRENT.basic", l445, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "CURRENT.after_def", l446, 1u, V4_POST_DEPTH, 0, 0u, "", 0u }, + { "ABORT.basic", l447, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "ABORT.with_data", l448, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "ABORT.in_definition_runtime", l449, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { ":.basic", l450, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { ":.empty_name", l451, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { ";.alone", l452, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { ";.immediate", l453, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "CONSTANT.basic", l454, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "CONSTANT.zero", l455, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "CONSTANT.negative", l456, 1u, V4_POST_STACK, 0, 0u, "-1 \012", 4u }, + { "CONSTANT.empty_stack", l457, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "VARIABLE.basic", l458, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "VARIABLE.multiple", l459, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "VARIABLE.store_fetch", l460, 1u, V4_POST_STACK, 0, 0u, "-99 \012", 5u }, + { "CREATE.basic~2", l461, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "CREATE.with_data", l462, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "CREATE.empty_name~2", l463, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "DOES>.basic", l464, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "DOES>.multiple", l465, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "DOES>.outside", l466, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "[.basic", l467, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "[.outside", l468, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "].nested", l469, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "IF.true", l470, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "IF.false", l471, 1u, V4_POST_STACK, 0, 0u, "24 \012", 4u }, + { "IF.nested", l472, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "IF.no_else", l473, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "IF.empty_stack", l474, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "ELSE.alone", l475, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "THEN.alone", l476, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "BEGIN.until", l477, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "BEGIN.while", l478, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "BEGIN.alone", l479, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "UNTIL.basic", l480, 1u, V4_POST_STACK, s480, 5u, "0 \012", 3u }, + { "UNTIL.immediate", l481, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "UNTIL.no_begin", l482, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "WHILE.basic", l483, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "WHILE.zero_times", l484, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "WHILE.no_begin", l485, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "REPEAT.basic", l486, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "REPEAT.no_while", l487, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "DO.basic", l488, 1u, V4_POST_STACK, 0, 0u, "0 1 2 3 4 \012", 11u }, + { "DO.negative", l489, 1u, V4_POST_STACK, 0, 0u, "-5 -4 -3 -2 \012", 13u }, + { "DO.empty", l490, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "DO.nested", l491, 1u, V4_POST_STACK, 0, 0u, "0 1 2 1 2 3 2 3 4 \012", 19u }, + { "LOOP.basic", l492, 1u, V4_POST_STACK, 0, 0u, "0 1 2 3 4 \012", 11u }, + { "LOOP.no_do", l493, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "+LOOP.basic", l494, 1u, V4_POST_STACK, 0, 0u, "0 2 4 6 8 \012", 11u }, + { "+LOOP.negative", l495, 1u, V4_POST_STACK, 0, 0u, "10 9 8 7 6 5 4 3 2 1 0 \012", 24u }, + { "+LOOP.variable", l496, 1u, V4_POST_STACK, s496, 1u, "0 3 6 9 \012", 9u }, + { "I.basic", l497, 1u, V4_POST_STACK, 0, 0u, "0 1 2 3 \012", 9u }, + { "I.single", l498, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "I.offset", l499, 1u, V4_POST_STACK, 0, 0u, "3 4 \012", 5u }, + { "I.in_expr", l500, 1u, V4_POST_STACK, 0, 0u, "0 2 4 \012", 7u }, + { "J.basic", l501, 1u, V4_POST_STACK, 0, 0u, "0 0 0 1 1 1 \012", 13u }, + { "J.paired", l502, 1u, V4_POST_STACK, 0, 0u, "0 1 1 2 \012", 9u }, + { "EXIT.early_return", l503, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "EXIT.cond_exit_pos", l504, 1u, V4_POST_STACK, 0, 0u, "3 \012", 3u }, + { "EXIT.cond_exit_neg", l505, 1u, V4_POST_STACK, 0, 0u, "4 \012", 3u }, + { "EXIT.no_skipped", l506, 1u, V4_POST_STACK, 0, 0u, "2 1 \012", 5u }, + { "LEAVE.basic", l507, 1u, V4_POST_STACK, 0, 0u, "4 \012", 3u }, + { "LEAVE.at_start", l508, 1u, V4_POST_STACK, 0, 0u, "1 \012", 3u }, + { "LEAVE.qdloop", l509, 1u, V4_POST_STACK, 0, 0u, "3 \012", 3u }, + { "U*.small", l510, 1u, V4_POST_STACK, 0, 0u, "0 12 \012", 6u }, + { "U*.zero", l511, 1u, V4_POST_STACK, 0, 0u, "0 0 \012", 5u }, + { "U*.full", l512, 1u, V4_POST_STACK, 0, 0u, "0 -1 \012", 6u }, + { "U/MOD.small", l513, 1u, V4_POST_STACK, 0, 0u, "3 1 \012", 5u }, + { "U/MOD.exact", l514, 1u, V4_POST_STACK, 0, 0u, "3 0 \012", 5u }, + { "U/MOD.double", l515, 1u, V4_POST_STACK, 0, 0u, "0 0 \012", 5u }, + { "U/MOD.inverse", l516, 1u, V4_POST_STACK, 0, 0u, "0 0 \012", 5u }, + { "U/MOD.carry", l517, 1u, V4_POST_STACK, 0, 0u, "0 0 \012", 5u }, + { "U/MOD.by_zero", l518, 1u, V4_POST_ERROR, 0, 0u, "", 0u }, + { "\077.basic", l519, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "EXECUTE.found", l520, 1u, V4_POST_STACK, 0, 0u, "7 \012", 3u }, + { "U..small", l521, 1u, V4_POST_STACK, 0, 0u, "42 \012", 4u }, + { "U..unsigned", l522, 1u, V4_POST_STACK, 0, 0u, "18446744073709551615 \012", 22u }, + { "CONVERT.digits", l523, 1u, V4_POST_STACK, 0, 0u, "0 123 \012", 7u }, + { "'.found", l524, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { ".\042.in_definition", l525, 1u, V4_POST_STACK, 0, 0u, "hi there\012", 9u }, + { "LITERAL.basic", l526, 1u, V4_POST_STACK, 0, 0u, "5 \012", 3u }, + { "STATE.interpreting", l527, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "STATE.compiling", l528, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "COMPILE.basic", l529, 1u, V4_POST_STACK, 0, 0u, "3 3 \012", 5u }, + { "[COMPILE].basic", l530, 2u, V4_POST_STACK, 0, 0u, "2 1 \012", 5u }, + { "(.comment", l531, 1u, V4_POST_STACK, 0, 0u, "3 1 \012", 5u }, + { "BLK.terminal", l532, 1u, V4_POST_STACK, 0, 0u, "0 \012", 3u }, + { "79-STANDARD.present", l533, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "WORD.next_word", l534, 1u, V4_POST_STACK, 0, 0u, "HELLO", 5u }, + { "WORD.delimiter", l535, 1u, V4_POST_STACK, 0, 0u, "A B", 3u }, + { "WORD.count", l536, 1u, V4_POST_STACK, 0, 0u, "3 ", 2u }, + { "WORD.skips_leading", l537, 1u, V4_POST_STACK, 0, 0u, "X", 1u }, +}; + +const unsigned v4_post_case_count = 538u; diff --git a/v4/tests/host_map.h b/v4/tests/host_map.h new file mode 100644 index 00000000..664a2fe6 --- /dev/null +++ b/v4/tests/host_map.h @@ -0,0 +1,254 @@ +/* host_map.h -- the memory map the host-node tests give the compiler capsule, + * and the loader that assembles it. + * + * The node's memory map is open (DECOMPOSITION.md D-4), so the tests choose + * one. Every test_host_*.c uses this one, so that the capsule's variables + * and buffers are in the same place in all of them: + * + * 16 .. the capsule's code, assembled from capsule/ *.v4 + * DICT_W .. DICT_END_W dictionary space for what is defined at run time + * top of memory buffers, then variables, as below + */ +#ifndef V4_TESTS_HOST_MAP_H +#define V4_TESTS_HOST_MAP_H + +#include "v4/blocks.h" +#include "v4/text.h" +#include + +#define TOP ((v4_cell)V4_NODE_WORDS) + +/* registers and single variables */ +#define NODE_ERROR (TOP - 2) +#define CONSOLE_TX (TOP - 4) +#define CONSOLE_RX (TOP - 6) +#define CONSOLE_ST (TOP - 7) +#define BASE (TOP - 8) +#define TO_IN (TOP - 9) +#define SPAN (TOP - 10) +#define DP (TOP - 11) +#define LATEST (TOP - 12) +#define STATE (TOP - 13) +#define CFP (TOP - 14) /* the control-flow stack's pointer */ +#define DSTACK_REG (TOP - 15) /* DSTACK-DEPTH (D-16) */ +#define RSTACK_REG (TOP - 16) /* RSTACK-DEPTH */ + +/* each capsule file's scratch cells */ +#define PVARS (TOP - 24) /* (P): input.v4, 8 cells */ +#define DVARS (TOP - 32) /* (D): dict.v4, 5 cells */ +#define CGVARS (TOP - 48) /* (CG): codegen.v4, 14 cells */ +#define CVARS (TOP - 62) /* (C): compile.v4, 10 cells */ +#define FVARS (TOP - 105) /* (F): forth.v4, 7 cells */ +#define SVARS (TOP - 540 - (v4_cell)V4_DATA_DEPTH) /* (S): where PICK and ROLL set stack values aside, one cell for each cell of the stack */ +#define WVARS (TOP - 99) /* (W): numout.v4, 3 cells */ +#define CONTEXT (TOP - 64) /* the vocabulary names are looked up in */ +#define CURRENT (TOP - 63) /* the vocabulary new words go into */ +#define VOC_LINK (TOP - 50) /* the newest vocabulary */ +#define FENCE (TOP - 26) /* FORGET's lower limit */ +#define HLD (TOP - 25) /* where the pictured number has got to */ + +/* buffers (word addresses; a byte address is four times this) */ +#define CFS_W (TOP - 96) /* the control-flow stack, 32 cells */ +#define CFS_CELLS 32 +#define WBUF_W (TOP - 170) /* WORD's buffer: 65 cells = 260 bytes */ +#define WBUF_CELLS 65 +#define TIB_W (TOP - 440) /* the text input buffer: 260 cells = 1040 bytes; a line is at most 1024 */ +#define PAD_W (TOP - 470) /* PAD: 21 cells = 84 bytes */ +#define SBUF_W (TOP - 540) /* 64 cells for the tests' own strings */ +#define HBUF_W (SVARS - 16) /* the hold buffer: 16 cells = 64 bytes */ +#define HEND ((HBUF_W + 16) * 4) +#define XVARS (HBUF_W - 4) /* (X): words.v4, 4 cells */ +#define QBASE (XVARS - 40) /* the Q words' and DUMP's scratch cells, 39 in all */ +#define BVARS (QBASE - 16) /* blocks.v4: 6 cells not used now, then SCR BLK (SRC) (SRC-HOOK) */ +#define SCR (BVARS + 6) +#define BLK (BVARS + 7) +#define SRC (BVARS + 8) +#define SRC_HOOK (BVARS + 9) +#define ACL_HOOK (BUF0_W - 6) /* the xt of the access control recheck word, or 0 */ +#define LINE_STATUS (BUF0_W - 9) /* how the last line ended: 0 QUIT, 1 completed, 2 an error */ +#define PORT (BUF0_W - 32) /* the node's ports (node.h): V4_PORTS of them, then "any port" and "which port". Port 0 is where its requests go. */ +#define CONSOLE (BUF0_W - 16) /* the node what this one prints is sent to; 0: whoever sent the text being served */ +#define ROUTE_COUNT (BUF0_W - 17) /* how many entries the table of ways holds */ +#define ROUTE_DEFAULT (BUF0_W - 18) /* the port address for a node not in the table, or 0: there is none */ +#define LOST (BUF0_W - 19) /* how many messages have been let go for want of a way */ +#define PRINT_TO (BUF0_W - 20) /* where what the text being served prints is to go: the node, */ +#define WRITERS (PORT + (v4_cell)V4_PORTS + 2) /* which ports have a neighbour waiting to write to this node (node.h) */ +#define READERS (PORT + (v4_cell)V4_PORTS + 3) /* and which have one waiting to read from it */ +#define PRINT_PORT (BUF0_W - 33) /* and the port address that leads there */ +#define DONE_PORT (BUF0_W - 34) /* the port address that leads back to whoever sent the text being served */ +#define MQ_HEAD (BUF0_W - 35) /* the messages waiting to be dealt with: where the oldest begins, */ +#define MQ_TAIL (BUF0_W - 36) /* where the next will go, */ +#define MQ_COUNT (BUF0_W - 37) /* and how many cells they take */ +#define AWAIT_FROM (BUF0_W - 39) /* the node whose word of how text ended is waited for */ +#define GATE_PORT (BUF0_W - 38) /* the port address a message is about to be begun on */ +#define NEAR (BUF0_W - 64) /* for each port, the number of the node on the other end; 0: not told */ +#define MQ_HDR (BUF0_W - 56) /* a message being taken in: its seven words and the port it came on */ +#define MQ_W (OUT_W - 400) /* the messages waiting: each is its seven words, the port it came on, its text */ +#define MQ_CELLS 400 +#define ROUTES (BUF0_W - 96) /* the table of ways: 16 entries of a node and the port address that leads to it */ +#define ROUTE_MAX 16 +#define ME (BUF0_W - 13) /* this node's number: a message is for it when its first word is this */ +#define OUT_PTR (BUF0_W - 14) /* where the next character printed goes: a cell of the output buffer */ +#define REPLY (BUF0_W - 15) /* the address of the port the message being served came on */ +#define MSG (BUF0_W - 48) /* the header of the message being served, 7 cells */ +#define OUT_W (BUF0_W - 400) /* the output buffer: 256 cells, a character to a cell */ +#define OUT_CELLS 256 +#define WORD_DEFINED (BUF0_W - 11) /* the xt of the word that is told of each new entry, or 0 */ +#define WORD_FORGOTTEN (BUF0_W - 12) /* the xt of the word that is told when entries go, or 0 */ +#define LOG_LEVEL (BUF0_W - 5) /* the level at or below which a message is printed */ +#define BOOT_CELLS (BVARS + 14) /* (BOOT): DP and LATEST as the loader left them, 2 cells */ +#define BUF0_W (BVARS - (v4_cell)(V4_BLOCK_SLOTS * V4_BLOCK_CELLS)) /* the block window: the kernel's slots, 256 cells each (v4/blocks.h) */ +/* the ports' ten addresses and the two that follow them end below BUF0_W - 20 */ +typedef char host_map_ports_fit[(V4_PORTS <= 8u) ? 1 : -1]; +/* Nothing printed and no message waiting: a node's variables for them, as at switch-on. */ +#define HOST_MESSAGES_EMPTY(n) do { (n)->mem[OUT_PTR] = OUT_W; (n)->mem[MQ_HEAD] = MQ_W; (n)->mem[MQ_TAIL] = MQ_W; (n)->mem[MQ_COUNT] = 0; } while (0) +#define QVARS (BUF0_W - 4) /* (Q): quit.v4, system.v4 and blocks.v4, 4 cells */ +#define WBUF (WBUF_W * 4) +#define TIB (TIB_W * 4) +#define PAD (PAD_W * 4) +#define SBUF (SBUF_W * 4) + +/* dictionary space */ +#ifndef DICT_W +#define DICT_W ((v4_cell)8192) +#endif +#ifndef DICT_END_W +#define DICT_END_W ((v4_cell)13824) /* 512 cells lower than it was: the block window is four slots now */ +#endif +/* the messages waiting are above the dictionary */ +typedef char host_map_queue_fits[(MQ_W >= DICT_END_W) ? 1 : -1]; + +/* How many slots, from slot 0, a branch may sit in on a node this size: those + * whose address field reaches every word of it. */ +static unsigned host_branch_slots(void) +{ + unsigned k, slots = 0; + for (k = 0; k < 4; k++) if ((v4_ucell)v4_iword_slot_mask(k) >= (v4_ucell)(V4_NODE_WORDS - 1u)) slots = k + 1; + return slots; +} + +/* Reset `n`, give the assembler every constant the capsule files ask for, and + * assemble the `count` files named. Returns 1 if all assembled; otherwise + * prints which did not and why. The caller may assemble more text and must + * call v4_text_finish. */ +static int host_load(v4_text *tx, v4_node *n, const char *const *files, unsigned count) +{ + char path[512]; + unsigned i; + + v4_node_reset(n); + HOST_MESSAGES_EMPTY(n); /* nothing has been printed and no message waits (core.v4) */ + v4_text_begin(tx, n, 16); + v4_text_constant(tx, "N-1", V4_CELL_BITS - 1); + v4_text_constant(tx, "NODE-ERROR", NODE_ERROR); + v4_text_constant(tx, "CONSOLE-TX", CONSOLE_TX); + v4_text_constant(tx, "CONSOLE-RX", CONSOLE_RX); + v4_text_constant(tx, "CONSOLE-STATUS", CONSOLE_ST); + v4_text_constant(tx, "BASE", BASE); + v4_text_constant(tx, "TIB", TIB); + v4_text_constant(tx, ">IN", TO_IN); + v4_text_constant(tx, "SPAN", SPAN); + v4_text_constant(tx, "WBUF", WBUF); + v4_text_constant(tx, "(P)", PVARS); + v4_text_constant(tx, "DP", DP); + v4_text_constant(tx, "(LATEST)", LATEST); + v4_text_constant(tx, "DBASE", DICT_W * 4); + v4_text_constant(tx, "DLIMIT", DICT_END_W * 4); + v4_text_constant(tx, "PAD", PAD); + v4_text_constant(tx, "(D)", DVARS); + v4_text_constant(tx, "(CG)", CGVARS); + v4_text_constant(tx, "CG-BSLOTS", (v4_cell)host_branch_slots()); + v4_text_constant(tx, "STATE", STATE); + v4_text_constant(tx, "(C)", CVARS); + v4_text_constant(tx, "(CFP)", CFP); + v4_text_constant(tx, "(Q)", QVARS); + v4_text_constant(tx, "(F)", FVARS); + v4_text_constant(tx, "(S)", SVARS); + v4_text_constant(tx, "(W)", WVARS); + v4_text_constant(tx, "(X)", XVARS); + v4_text_constant(tx, "(BOOT)", BOOT_CELLS); + v4_text_constant(tx, "(LOG-LEVEL)", LOG_LEVEL); + v4_text_constant(tx, "(ACL-HOOK)", ACL_HOOK); + v4_text_constant(tx, "SCR", SCR); + v4_text_constant(tx, "BLK", BLK); + v4_text_constant(tx, "(SRC)", SRC); + v4_text_constant(tx, "(SRC-HOOK)", SRC_HOOK); + v4_text_constant(tx, "(LINE-STATUS)", LINE_STATUS); + v4_text_constant(tx, "(PORT)", PORT); + v4_text_constant(tx, "(ME)", ME); + v4_text_constant(tx, "(CONSOLE)", CONSOLE); + v4_text_constant(tx, "(ROUTE#)", ROUTE_COUNT); + v4_text_constant(tx, "(ROUTE-DEFAULT)", ROUTE_DEFAULT); + v4_text_constant(tx, "(LOST)", LOST); + v4_text_constant(tx, "(PRINT-TO)", PRINT_TO); + v4_text_constant(tx, "(PRINT-PORT)", PRINT_PORT); + v4_text_constant(tx, "(DONE-PORT)", DONE_PORT); + v4_text_constant(tx, "(ROUTES)", ROUTES); + v4_text_constant(tx, "(WRITERS)", WRITERS); + v4_text_constant(tx, "(READERS)", READERS); + v4_text_constant(tx, "-PORTS", -(v4_cell)V4_PORTS); + v4_text_constant(tx, "(NEAR)", NEAR); + v4_text_constant(tx, "(GATE-PORT)", GATE_PORT); + v4_text_constant(tx, "(AWAIT-FROM)", AWAIT_FROM); + v4_text_constant(tx, "(MQ)", MQ_W); + v4_text_constant(tx, "(MQ-END)", MQ_W + MQ_CELLS); + v4_text_constant(tx, "-MQ-ROOM", -(v4_cell)(MQ_CELLS - 7)); /* cells taken + a text's words + this is below zero while the message fits */ + v4_text_constant(tx, "(MQ-HEAD)", MQ_HEAD); + v4_text_constant(tx, "(MQ-TAIL)", MQ_TAIL); + v4_text_constant(tx, "(MQ#)", MQ_COUNT); + v4_text_constant(tx, "(MQ-HDR)", MQ_HDR); + v4_text_constant(tx, "(OUT^)", OUT_PTR); + v4_text_constant(tx, "(REPLY)", REPLY); + v4_text_constant(tx, "(MSG)", MSG); + v4_text_constant(tx, "(OUT)", OUT_W); + v4_text_constant(tx, "(WORD-DEFINED)", WORD_DEFINED); + v4_text_constant(tx, "(WORD-FORGOTTEN)", WORD_FORGOTTEN); + v4_text_constant(tx, "BLOCK#", V4_REQ_BLOCK); /* the kernel's block requests (v4/blocks.h) */ + v4_text_constant(tx, "BUFFER#", V4_REQ_BUFFER); + v4_text_constant(tx, "UPDATE#", V4_REQ_UPDATE); + v4_text_constant(tx, "SAVE-BUFFERS#", V4_REQ_SAVE_BUFFERS); + v4_text_constant(tx, "EMPTY-BUFFERS#", V4_REQ_EMPTY_BUFFERS); + v4_text_constant(tx, "(Q/)", QBASE); /* 5 cells */ + v4_text_constant(tx, "(QE)", QBASE + 5); /* 8 */ + v4_text_constant(tx, "(QR)", QBASE + 13); /* 5 */ + v4_text_constant(tx, "(QL)", QBASE + 18); /* 7 */ + v4_text_constant(tx, "(QT)", QBASE + 25); /* 6 */ + v4_text_constant(tx, "(QP)", QBASE + 31); /* 4 */ + v4_text_constant(tx, "(DP)", QBASE + 35); /* 4 */ + v4_text_constant(tx, "ADDR-DIGITS", V4_CELL_BITS / 4); + v4_text_constant(tx, "MSB", (v4_cell)V4_MSB); + v4_text_constant(tx, "MAXHI", (v4_cell)(V4_MSB - 1u)); + v4_text_constant(tx, "HIMASK", (v4_cell)(((v4_ucell)1 << (V4_CELL_BITS - 16)) - 1u)); + v4_text_constant(tx, "2N+15", 2 * V4_CELL_BITS + 15); + v4_text_constant(tx, "N-18", V4_CELL_BITS - 18); + v4_text_constant(tx, "N-17", V4_CELL_BITS - 17); + v4_text_constant(tx, "MAX-INT", (v4_cell)(V4_MSB - 1u)); + v4_text_constant(tx, "HLD", HLD); + v4_text_constant(tx, "FENCE", FENCE); + v4_text_constant(tx, "CONTEXT", CONTEXT); + v4_text_constant(tx, "CURRENT", CURRENT); + v4_text_constant(tx, "VOC-LINK", VOC_LINK); + v4_text_constant(tx, "HEND", HEND); + v4_text_constant(tx, "-HFLOOR", -(HEND - 62)); + v4_text_constant(tx, "DSTACK-DEPTH", DSTACK_REG); + v4_text_constant(tx, "RSTACK-DEPTH", RSTACK_REG); + v4_node_stack_regs_attach(n, DSTACK_REG, RSTACK_REG); + v4_text_constant(tx, "CFBASE", CFS_W); + v4_text_constant(tx, "CFEND", CFS_W + CFS_CELLS); + for (i = 0; i < count; i++) { + snprintf(path, sizeof path, "%s/%s", V4_CAPSULE_DIR, files[i]); + if (!v4_text_assemble_file(tx, path)) { + printf(" %s does not assemble: %s\n", files[i], v4_text_error(tx)); + return 0; + } + } + /* one vocabulary, FORTH, whose head cell is LATEST */ + n->mem[CONTEXT] = LATEST; + n->mem[CURRENT] = LATEST; + n->mem[VOC_LINK] = 0; + /* and the text interpreted is the terminal's */ + n->mem[SRC] = TIB; + return 1; +} + +#endif /* V4_TESTS_HOST_MAP_H */ diff --git a/v4/tests/post_cases_fail.c b/v4/tests/post_cases_fail.c new file mode 100644 index 00000000..ecad42cc --- /dev/null +++ b/v4/tests/post_cases_fail.c @@ -0,0 +1,24 @@ +/* post_cases_fail.c -- a table of cases for the boot to fail on. + * docs/v4.0.0/MESH.md step 6b, acceptance 4; v4/Makefile, hosted-check. + * + * Linked into a hosted program in the place of v4/system/post_cases.c, so + * that the boot itself (v4/system/boot.c) is seen to stop on a failing + * case, to keep what a case prints off the console, and to hold no more of + * it than it has room for. It is not a test program of its own: the suite + * does not build it. + */ +#include "v4/post.h" + +static const char *const l_right[] = { "5 DUP . . CR" }; +static const char *const l_wrong[] = { "5 DUP . . CR" }; +static const char *const l_many[] = { ": MANY 2000 0 DO 81 EMIT LOOP ;", "MANY" }; +static const char *const l_two[] = { "65 EMIT", "66 EMIT" }; + +const v4_post_case v4_post_cases[] = { + { "fail.right", l_right, 1u, V4_POST_STACK, 0, 0u, "5 5 \012", 5u }, + { "fail.wrong", l_wrong, 1u, V4_POST_STACK, 0, 0u, "5 6 \012", 5u }, + { "fail.many", l_many, 2u, V4_POST_STACK, 0, 0u, "Q", 1u }, + { "fail.twoline", l_two, 2u, V4_POST_STACK, 0, 0u, "AB", 2u }, +}; + +const unsigned v4_post_case_count = 4u; diff --git a/v4/tests/test_asm.c b/v4/tests/test_asm.c new file mode 100644 index 00000000..b4d847f3 --- /dev/null +++ b/v4/tests/test_asm.c @@ -0,0 +1,110 @@ +/* test_asm.c -- the slot packer lays words out as asm.h says it does. */ +#include "v4/asm.h" +#include "v4/testcode.h" +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_asm as; + +static void fresh(v4_cell origin) +{ + v4_node_reset(&n); + v4_exec_reset(&es); + v4_heat_reset(&h); + v4_asm_begin(&as, &n, origin); +} + +static v4_iword word_at(v4_cell addr) { return (v4_iword)(v4_ucell)n.mem[addr]; } + +int main(void) +{ + v4_asm_ref ref; + v4_cell loop, other; + + printf("v4 asm tests: V4_CELL_BITS=%d\n", V4_CELL_BITS); + + /* Six opcodes fill a word; the seventh starts the next, padded with nop. */ + fresh(0); + for (unsigned k = 0; k < 7; k++) v4_asm_op(&as, V4_OP_DUP); + CHECK(v4_asm_label(&as) == 2, "seven opcodes take two words"); + for (unsigned k = 0; k < 6; k++) CHECK(v4_iword_op(word_at(0), k) == V4_OP_DUP, "word 0 slot %u", k); + CHECK(v4_iword_op(word_at(1), 0) == V4_OP_DUP, "word 1 slot 0"); + for (unsigned k = 1; k < 6; k++) CHECK(v4_iword_op(word_at(1), k) == V4_OP_NOP, "word 1 pad %u", k); + + /* `;` closes the word. */ + fresh(0); + v4_asm_op(&as, V4_OP_DUP); v4_asm_op(&as, V4_OP_SEMI); + CHECK(v4_asm_label(&as) == 1, "; closes the word"); + + /* Literals follow the instruction word, in order, and the code runs. */ + fresh(0); + v4_asm_lit(&as, 30); v4_asm_lit(&as, 12); v4_asm_op(&as, V4_OP_ADD); v4_asm_op(&as, V4_OP_SEMI); + CHECK(v4_asm_ok(&as), "literal program assembles"); + CHECK(n.mem[1] == 30 && n.mem[2] == 12 && v4_asm_label(&as) == 3, "literal layout"); + CHECK(v4_test_call(&n, &es, &h, 0, 10) == 1 && n.ds.t == 42, "30 12 + ;"); + + /* A branch takes the next free slot when that slot is legal. */ + fresh(0); + v4_asm_op(&as, V4_OP_DUP); v4_asm_op(&as, V4_OP_DROP); + v4_asm_branch(&as, V4_OP_JUMP, 0x155); + CHECK(v4_iword_op(word_at(0), 2) == V4_OP_JUMP, "branch in slot 2"); + CHECK(v4_iword_target(word_at(0), 2) == 0x155, "branch target in slot 2"); + CHECK(v4_asm_label(&as) == 1, "a branch closes the word"); + + /* With slots 0-3 used, the branch moves to slot 0 of a new word. */ + fresh(0); + for (unsigned k = 0; k < 4; k++) v4_asm_op(&as, V4_OP_DUP); + v4_asm_branch(&as, V4_OP_JUMP, 0x155); + CHECK(v4_iword_op(word_at(0), 4) == V4_OP_NOP && v4_iword_op(word_at(0), 5) == V4_OP_NOP, + "word before the branch is padded"); + CHECK(v4_iword_op(word_at(1), 0) == V4_OP_JUMP && v4_iword_target(word_at(1), 0) == 0x155, + "branch moved to slot 0"); + + /* Forward reference, section 2's IF ... ELSE ... THEN with the flag left + * on the stack by `if`: if L1 drop 111 ; L1: drop 222 ; */ + fresh(0); + ref = v4_asm_branch_fwd(&as, V4_OP_IF); + v4_asm_op(&as, V4_OP_DROP); v4_asm_lit(&as, 111); v4_asm_op(&as, V4_OP_SEMI); + other = v4_asm_label(&as); + v4_asm_resolve(&as, ref, other); + v4_asm_op(&as, V4_OP_DROP); v4_asm_lit(&as, 222); v4_asm_op(&as, V4_OP_SEMI); + CHECK(v4_asm_ok(&as), "forward branch assembles"); + v4_dstack_push(&n.ds, 5); + CHECK(v4_test_call(&n, &es, &h, 0, 10) > 0 && n.ds.t == 111, "flag nonzero takes the first arm"); + v4_dstack_reset(&n.ds); v4_rstack_reset(&n.rs); + v4_dstack_push(&n.ds, 0); + CHECK(v4_test_call(&n, &es, &h, 0, 10) > 0 && n.ds.t == 222, "flag zero takes the second arm"); + + /* Backward reference: 4 FOR 1 + NEXT runs the body n+1 times. */ + fresh(0); + v4_asm_lit(&as, 4); v4_asm_op(&as, V4_OP_PUSH); + loop = v4_asm_label(&as); + v4_asm_lit(&as, 1); v4_asm_op(&as, V4_OP_ADD); + v4_asm_branch(&as, V4_OP_NEXT, loop); + v4_asm_op(&as, V4_OP_SEMI); + CHECK(v4_asm_ok(&as), "loop assembles"); + v4_dstack_push(&n.ds, 0); + CHECK(v4_test_call(&n, &es, &h, 0, 50) > 0 && n.ds.t == 5, "4 FOR 1 + NEXT"); + + /* Errors are reported, not encoded. */ + fresh(0); v4_asm_op(&as, V4_OP_JUMP); + CHECK(!v4_asm_ok(&as), "a branch through v4_asm_op is refused"); + fresh(0); v4_asm_op(&as, V4_OPCODE_COUNT); + CHECK(!v4_asm_ok(&as), "an out-of-range opcode is refused"); + fresh(0); + for (unsigned k = 0; k < 3; k++) v4_asm_op(&as, V4_OP_DUP); + v4_asm_branch(&as, V4_OP_JUMP, 5000); /* slot 3 reaches 4096 words */ + CHECK(!v4_asm_ok(&as), "a target outside the page is refused"); + fresh((v4_cell)(V4_NODE_WORDS - 1u)); + v4_asm_lit(&as, 1); v4_asm_op(&as, V4_OP_SEMI); + CHECK(!v4_asm_ok(&as), "running off the end of memory is refused"); + CHECK(v4_node_guards_intact(&n), "and does not touch the guard band"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_cells.c b/v4/tests/test_cells.c new file mode 100644 index 00000000..f052fcab --- /dev/null +++ b/v4/tests/test_cells.c @@ -0,0 +1,427 @@ +/* test_cells.c -- the small single-cell words, executed. + * + * DECOMPOSITION.md 4 and 5.1 - 5.5: the stack, return-stack, memory, + * arithmetic and comparison words that take and leave single cells. Each is + * assembled as the document gives it, on a node of its own, and run against + * C on every combination of a set of edge values. + * + * stack NIP SWAP ROT -ROT ?DUP 2DUP + * return >R R@ R> (in line) + * memory @ ! +! -! 2@ 2! CELLS (@ ! CELLS in line) + * arithmetic - NEGATE 1+ 1- 2+ 2- MIN MAX (1+ .. 2- in line) + * logic OR NOT 0= 0< 0<> 0> = <> < > <= >= U< WITHIN TRUE FALSE + * `*` and `/` rest on UM* and SM/REM and are in test_foundation.c. + * + * v3 (v3/src/word_source/{stack,memory,arithmetic,logical}_words.c): flags + * are -1 and 0; NOT is 0=; comparisons are signed except U<; 2@ and 2! keep + * the first cell at addr and the second, which is on top of the stack, at + * the next cell; WITHIN ( n low high ) is low <= n < high, both signed. + * + * Where v4 parts from v3: CELLS is empty, because v4 addresses words (D-1); + * v3 answers 24 for 3 CELLS. + * + * The expected values marked "v3:" are transcripts of the real v3 binary, + * taken on 2026-10-03 as in test_numout.c. + */ +#include "v4/asm.h" +#include "v4/testcode.h" +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) +#define MAXU ((v4_ucell)~(v4_ucell)0) +#define FLAG(c) ((c) ? (v4_cell)-1 : (v4_cell)0) + +/* The memory map is open (D-4); the test chooses the addresses. */ +#define MEMV ((v4_cell)(V4_NODE_WORDS - 8u)) /* four cells for the memory words */ + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_asm as; + +enum { W_NIP, W_SWAP, W_ROT, W_NROT, W_QDUP, W_2DUP, W_RSTACK, + W_FETCH, W_STORE, W_PSTORE, W_MSTORE, W_2FETCH, W_2STORE, W_CELLS, + W_MINUS, W_NEGATE, W_1P, W_1M, W_2P, W_2M, W_MIN, W_MAX, + W_OR, W_NOT, W_ZEQ, W_ZLT, W_ZNE, W_ZGT, W_EQ, W_NE, W_LT, W_GT, W_LE, W_GE, + W_ULT, W_WITHIN, W_TRUE, W_FALSE, W_COUNT }; +static v4_cell w[W_COUNT]; +static const char *const wname[W_COUNT] = { + "NIP", "SWAP", "ROT", "-ROT", "?DUP", "2DUP", ">R R@ R>", + "@", "!", "+!", "-!", "2@", "2!", "CELLS", + "-", "NEGATE", "1+", "1-", "2+", "2-", "MIN", "MAX", + "OR", "NOT", "0=", "0<", "0<>", "0>", "=", "<>", "<", ">", "<=", ">=", + "U<", "WITHIN", "TRUE", "FALSE" }; + +#define O(name) v4_asm_op(&as, V4_OP_##name) +#define LIT(v) v4_asm_lit(&as, (v4_cell)(v)) +#define CALL(x) v4_asm_branch(&as, V4_OP_CALL, (x)) +#define JUMP(x) v4_asm_branch(&as, V4_OP_JUMP, (x)) +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) +#define DEF(id) (w[id] = v4_asm_label(&as)) +#define SWAP_INLINE() do { O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); } while (0) + +static void build(void) +{ + v4_asm_ref a, b; + + /* ---- stack: 4 and 5.1 ---- */ + DEF(W_NIP); O(PUSH); O(DROP); O(RPOP); O(SEMI); /* : NIP push drop pop ; */ + DEF(W_SWAP); SWAP_INLINE(); O(SEMI); /* : SWAP over push push drop pop pop ; */ + DEF(W_ROT); O(PUSH); CALL(w[W_SWAP]); O(RPOP); CALL(w[W_SWAP]); O(SEMI); /* : ROT push SWAP pop SWAP ; */ + DEF(W_NROT); SWAP_INLINE(); O(PUSH); SWAP_INLINE(); O(RPOP); O(SEMI); /* : -ROT SWAP push SWAP pop ; SWAP in line */ + DEF(W_QDUP); a = FWD(IF); O(DUP); O(SEMI); HERE_(a); O(SEMI); /* : ?DUP if Z dup ; Z: ; */ + DEF(W_2DUP); O(OVER); O(OVER); O(SEMI); /* : 2DUP over over ; */ + + /* ---- return stack, in line: 5.2. ( x -- x x ) >R R@ R> */ + DEF(W_RSTACK); + O(PUSH); /* >R is push */ + O(RPOP); O(DUP); O(PUSH); /* R@ is pop dup push */ + O(RPOP); /* R> is pop */ + O(SEMI); + + /* ---- memory: 5.3 ---- */ + DEF(W_FETCH); O(BANG_A); O(FETCH_A); O(SEMI); /* @ is a! @ */ + DEF(W_STORE); O(BANG_A); O(STORE_A); O(SEMI); /* ! is a! ! */ + DEF(W_PSTORE); O(BANG_A); O(FETCH_A); O(ADD); O(STORE_A); O(SEMI); /* : +! a! @ + ! ; */ + DEF(W_MSTORE); O(BANG_A); O(INV); LIT(1); O(ADD); O(FETCH_A); O(ADD); O(STORE_A); O(SEMI); + /* : -! a! NEGATE @ + ! ; NEGATE in line */ + DEF(W_2FETCH); O(BANG_A); O(FETCH_INC); O(FETCH_A); O(SEMI); /* : 2@ a! @+ @ ; */ + DEF(W_2STORE); O(BANG_A); SWAP_INLINE(); O(STORE_INC); O(STORE_A); O(SEMI); /* : 2! a! SWAP !+ ! ; SWAP in line */ + DEF(W_CELLS); O(SEMI); /* CELLS is empty (D-1) */ + + /* ---- arithmetic: 4 and 5.4 ---- */ + DEF(W_NEGATE); O(INV); LIT(1); O(ADD); O(SEMI); /* : NEGATE inv 1 + ; */ + DEF(W_MINUS); O(INV); LIT(1); O(ADD); O(ADD); O(SEMI); /* : - NEGATE + ; NEGATE in line */ + DEF(W_1P); LIT(1); O(ADD); O(SEMI); /* 1+ is 1 + */ + DEF(W_1M); LIT(-1); O(ADD); O(SEMI); /* 1- is -1 + */ + DEF(W_2P); LIT(2); O(ADD); O(SEMI); /* 2+ is 2 + */ + DEF(W_2M); LIT(-2); O(ADD); O(SEMI); /* 2- is -2 + */ + + /* ---- logic and comparison: 4 and 5.5 ---- */ + DEF(W_OR); O(OVER); O(INV); O(AND); O(XOR); O(SEMI); /* : OR over inv and xor ; */ + + /* : 0< -if L1 drop -1 ; L1: drop 0 ; */ + DEF(W_ZLT); a = FWD(MINUS_IF); O(DROP); LIT(-1); O(SEMI); HERE_(a); O(DROP); LIT(0); O(SEMI); + /* : 0= if L1 drop 0 ; L1: drop -1 ; */ + DEF(W_ZEQ); a = FWD(IF); O(DROP); LIT(0); O(SEMI); HERE_(a); O(DROP); LIT(-1); O(SEMI); + /* : NOT jump 0= */ + DEF(W_NOT); JUMP(w[W_ZEQ]); + /* : 0<> if Z drop -1 ; Z: ; */ + DEF(W_ZNE); a = FWD(IF); O(DROP); LIT(-1); O(SEMI); HERE_(a); O(SEMI); + /* : 0> -if NN drop 0 ; NN: if Z drop -1 ; Z: ; */ + DEF(W_ZGT); a = FWD(MINUS_IF); O(DROP); LIT(0); O(SEMI); + HERE_(a); b = FWD(IF); O(DROP); LIT(-1); O(SEMI); HERE_(b); O(SEMI); + /* : = xor jump 0= : <> xor jump 0<> */ + DEF(W_EQ); O(XOR); JUMP(w[W_ZEQ]); + DEF(W_NE); O(XOR); JUMP(w[W_ZNE]); + + /* : < 2DUP xor 0< IF drop 0< ELSE - 0< THEN ; as in test_foundation.c */ + DEF(W_LT); + O(OVER); O(OVER); O(XOR); CALL(w[W_ZLT]); + a = FWD(IF); + O(DROP); O(DROP); CALL(w[W_ZLT]); O(SEMI); + HERE_(a); + O(DROP); CALL(w[W_MINUS]); CALL(w[W_ZLT]); O(SEMI); + + /* : U< 2DUP xor 0< IF NIP 0< ELSE - 0< THEN ; as in test_foundation.c */ + DEF(W_ULT); + CALL(w[W_2DUP]); O(XOR); CALL(w[W_ZLT]); + a = FWD(IF); + O(DROP); CALL(w[W_NIP]); CALL(w[W_ZLT]); O(SEMI); + HERE_(a); + O(DROP); CALL(w[W_MINUS]); CALL(w[W_ZLT]); O(SEMI); + + /* : > SWAP jump < : <= SWAP < jump 0= : >= < jump 0= + * SWAP in line. <= is "> 0=" and >= is "< 0=". */ + DEF(W_GT); SWAP_INLINE(); JUMP(w[W_LT]); + DEF(W_LE); SWAP_INLINE(); CALL(w[W_LT]); JUMP(w[W_ZEQ]); + DEF(W_GE); CALL(w[W_LT]); JUMP(w[W_ZEQ]); + + /* : MIN over over < if B drop drop ; B: drop push drop pop ; + * : MAX over over < if A drop push drop pop ; A: drop drop ; */ + DEF(W_MIN); + O(OVER); O(OVER); CALL(w[W_LT]); a = FWD(IF); + O(DROP); O(DROP); O(SEMI); + HERE_(a); + O(DROP); O(PUSH); O(DROP); O(RPOP); O(SEMI); + DEF(W_MAX); + O(OVER); O(OVER); CALL(w[W_LT]); a = FWD(IF); + O(DROP); O(PUSH); O(DROP); O(RPOP); O(SEMI); + HERE_(a); + O(DROP); O(DROP); O(SEMI); + + /* : WITHIN ( n low high -- flag ) low <= n < high, signed, as v3 + * push over pop < push n low R: n < high + * < inv pop and ; */ + DEF(W_WITHIN); + O(PUSH); O(OVER); O(RPOP); CALL(w[W_LT]); O(PUSH); + CALL(w[W_LT]); O(INV); O(RPOP); O(AND); O(SEMI); + + DEF(W_TRUE); LIT(-1); O(SEMI); /* TRUE is -1 */ + DEF(W_FALSE); LIT(0); O(SEMI); /* FALSE is 0 */ +} + +/* ---- running ---------------------------------------------------------- */ + +static int call(int id, unsigned argc, v4_cell a, v4_cell b, v4_cell c) +{ + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + v4_dstack_push(&n.ds, CANARY); + if (argc > 0) v4_dstack_push(&n.ds, a); + if (argc > 1) v4_dstack_push(&n.ds, b); + if (argc > 2) v4_dstack_push(&n.ds, c); + return v4_test_call(&n, &es, &h, w[id], 100000) > 0; +} +/* The stack holds exactly these under nothing but the canary; r[0] is deepest. */ +static int left(unsigned nres, v4_cell r0, v4_cell r1, v4_cell r2) +{ + v4_cell r[3]; + unsigned i; + r[0] = r0; r[1] = r1; r[2] = r2; + for (i = nres; i-- > 0; ) if (v4_dstack_pop(&n.ds) != r[i]) return 0; + return v4_dstack_pop(&n.ds) == CANARY; +} + +/* Stack headroom, as in test_foundation.c. */ +static int fits(int id, unsigned argc, const v4_cell *args, unsigned nres, const v4_cell *want, + const v4_cell *mem0, const v4_cell *mem1, unsigned dfill, unsigned rfill) +{ + unsigned i; + for (i = 0; i < 4; i++) n.mem[MEMV + (v4_cell)i] = mem0[i]; + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + for (i = 0; i < dfill; i++) v4_dstack_push(&n.ds, (v4_cell)(0x5A000000 + i)); + v4_dstack_push(&n.ds, CANARY); + for (i = 0; i < argc; i++) v4_dstack_push(&n.ds, args[i]); + for (i = 0; i < rfill; i++) v4_rstack_push(&n.rs, (v4_cell)(0x6B000000 + i)); + if (v4_test_call(&n, &es, &h, w[id], 100000) <= 0) return 0; + for (i = nres; i-- > 0; ) if (v4_dstack_pop(&n.ds) != want[i]) return 0; + if (v4_dstack_pop(&n.ds) != CANARY) return 0; + for (i = dfill; i-- > 0; ) if (v4_dstack_pop(&n.ds) != (v4_cell)(0x5A000000 + i)) return 0; + for (i = rfill; i-- > 0; ) if (v4_rstack_pop(&n.rs) != (v4_cell)(0x6B000000 + i)) return 0; + for (i = 0; i < 4; i++) if (n.mem[MEMV + (v4_cell)i] != mem1[i]) return 0; + return 1; +} +static void headroom(int id, unsigned argc, v4_cell a, v4_cell b, v4_cell c, unsigned nres, int min_d, int min_r) +{ + v4_cell args[3], want[3], mem0[4], mem1[4]; + unsigned i; + int dh, rh; + args[0] = a; args[1] = b; args[2] = c; + for (i = 0; i < 4; i++) mem0[i] = n.mem[MEMV + (v4_cell)i] = (v4_cell)(1000 + i); + CHECK(call(id, argc, a, b, c), "%s runs", wname[id]); + for (i = nres; i-- > 0; ) want[i] = v4_dstack_pop(&n.ds); + for (i = 0; i < 4; i++) mem1[i] = n.mem[MEMV + (v4_cell)i]; + for (dh = 0; dh < V4_DATA_DEPTH; dh++) if (!fits(id, argc, args, nres, want, mem0, mem1, (unsigned)dh + 1u, 0)) break; + for (rh = 0; rh < V4_RET_DEPTH; rh++) if (!fits(id, argc, args, nres, want, mem0, mem1, 0, (unsigned)rh + 1u)) break; + printf(" %-8s headroom: data %d below canary, return %d below its return address\n", wname[id], dh, rh); + CHECK(dh >= min_d && rh >= min_r, "%s leaves room", wname[id]); +} + +static const v4_cell vec[] = { + 0, 1, 2, 3, -1, -2, 9, 10, 12345, -12345, + (v4_cell)(V4_MSB - 1u), (v4_cell)V4_MSB, (v4_cell)(V4_MSB + 1u), + (v4_cell)(V4_MSB >> 1), (v4_cell)((V4_MSB >> 1) - 1u), + (v4_cell)(MAXU / 3u), (v4_cell)(MAXU / 3u * 2u) +}; +#define NVEC (sizeof vec / sizeof vec[0]) + +/* One-result words: the same check with a name. */ +#define ONE1(id, x, want) CHECK(call(id, 1, x, 0, 0) && left(1, want, 0, 0), "%s [%u]", wname[id], i) +#define ONE2(id, x, y, want) CHECK(call(id, 2, x, y, 0) && left(1, want, 0, 0), "%s [%u,%u]", wname[id], i, j) +#define V3(cond, what) CHECK(cond, "v3: %s", what) + +int main(void) +{ + unsigned i, j, k; + + printf("v4 single-cell word tests: V4_CELL_BITS=%d\n", V4_CELL_BITS); + + v4_node_reset(&n); + v4_asm_begin(&as, &n, 16); + build(); + CHECK(v4_asm_ok(&as), "single-cell words assemble"); + CHECK(v4_asm_label(&as) < MEMV, "code stays below the variables"); + printf(" code: %ld of %u words\n", (long)v4_asm_label(&as) - 16, (unsigned)V4_NODE_WORDS); + + /* ---- the v3 transcripts ---- */ + + /* 7 ?DUP . . 0 ?DUP . 1 2 3 ROT . . . 1 2 3 -ROT . . . 1 2 SWAP . . + * -> 7 7 0 1 3 2 2 1 3 1 2 */ + V3(call(W_QDUP, 1, 7, 0, 0) && left(2, 7, 7, 0), "7 ?DUP"); + V3(call(W_QDUP, 1, 0, 0, 0) && left(1, 0, 0, 0), "0 ?DUP"); + V3(call(W_ROT, 3, 1, 2, 3) && left(3, 2, 3, 1), "1 2 3 ROT"); + V3(call(W_NROT, 3, 1, 2, 3) && left(3, 3, 1, 2), "1 2 3 -ROT"); + V3(call(W_SWAP, 2, 1, 2, 0) && left(2, 2, 1, 0), "1 2 SWAP"); + + /* VARIABLE X 10 X ! 5 X +! X @ . 3 X -! X @ . -> 15 12 + * CREATE D 2 CELLS ALLOT 111 222 D 2! D @ . D 1 CELLS + @ . D 2@ . . -> 111 222 222 111 */ + V3(call(W_STORE, 2, 10, MEMV, 0) && left(0, 0, 0, 0) && n.mem[MEMV] == 10, "10 X !"); + V3(call(W_PSTORE, 2, 5, MEMV, 0) && left(0, 0, 0, 0) && call(W_FETCH, 1, MEMV, 0, 0) && left(1, 15, 0, 0), "5 X +! X @"); + V3(call(W_MSTORE, 2, 3, MEMV, 0) && left(0, 0, 0, 0) && call(W_FETCH, 1, MEMV, 0, 0) && left(1, 12, 0, 0), "3 X -! X @"); + V3(call(W_2STORE, 3, 111, 222, MEMV + 1) && left(0, 0, 0, 0) + && n.mem[MEMV + 1] == 111 && n.mem[MEMV + 2] == 222, "111 222 D 2!"); + V3(call(W_2FETCH, 1, MEMV + 1, 0, 0) && left(2, 111, 222, 0), "D 2@"); + + /* 7 3 - . 3 7 - . 5 1+ . 5 1- . 5 2+ . 5 2- . 5 NEGATE . + * 3 9 MIN . 3 9 MAX . -3 -9 MIN . -3 -9 MAX . -> 4 -4 6 4 7 3 -5 3 9 -9 -3 + * (6 7 * . -6 7 * . 7 2 / . -7 2 / . 7 -2 / . -> 42 -42 3 -3 -3, in test_foundation.c) */ + V3(call(W_MINUS, 2, 7, 3, 0) && left(1, 4, 0, 0), "7 3 -"); + V3(call(W_MINUS, 2, 3, 7, 0) && left(1, -4, 0, 0), "3 7 -"); + V3(call(W_1P, 1, 5, 0, 0) && left(1, 6, 0, 0), "5 1+"); + V3(call(W_1M, 1, 5, 0, 0) && left(1, 4, 0, 0), "5 1-"); + V3(call(W_2P, 1, 5, 0, 0) && left(1, 7, 0, 0), "5 2+"); + V3(call(W_2M, 1, 5, 0, 0) && left(1, 3, 0, 0), "5 2-"); + V3(call(W_NEGATE, 1, 5, 0, 0) && left(1, -5, 0, 0), "5 NEGATE"); + V3(call(W_MIN, 2, 3, 9, 0) && left(1, 3, 0, 0), "3 9 MIN"); + V3(call(W_MAX, 2, 3, 9, 0) && left(1, 9, 0, 0), "3 9 MAX"); + V3(call(W_MIN, 2, -3, -9, 0) && left(1, -9, 0, 0), "-3 -9 MIN"); + V3(call(W_MAX, 2, -3, -9, 0) && left(1, -3, 0, 0), "-3 -9 MAX"); + + /* 12 10 OR . 0 NOT . 5 NOT . 0 0= . 5 0= . -5 0< . 5 0< . 0 0<> . 5 0<> . + * 5 0> . 0 0> . -5 0> . 3 4 <> . 4 4 <> . -> 14 -1 0 -1 0 -1 0 0 -1 -1 0 0 -1 0 */ + V3(call(W_OR, 2, 12, 10, 0) && left(1, 14, 0, 0), "12 10 OR"); + V3(call(W_NOT, 1, 0, 0, 0) && left(1, -1, 0, 0), "0 NOT"); + V3(call(W_NOT, 1, 5, 0, 0) && left(1, 0, 0, 0), "5 NOT"); + V3(call(W_ZEQ, 1, 0, 0, 0) && left(1, -1, 0, 0), "0 0="); + V3(call(W_ZEQ, 1, 5, 0, 0) && left(1, 0, 0, 0), "5 0="); + V3(call(W_ZLT, 1, -5, 0, 0) && left(1, -1, 0, 0), "-5 0<"); + V3(call(W_ZLT, 1, 5, 0, 0) && left(1, 0, 0, 0), "5 0<"); + V3(call(W_ZNE, 1, 0, 0, 0) && left(1, 0, 0, 0), "0 0<>"); + V3(call(W_ZNE, 1, 5, 0, 0) && left(1, -1, 0, 0), "5 0<>"); + V3(call(W_ZGT, 1, 5, 0, 0) && left(1, -1, 0, 0), "5 0>"); + V3(call(W_ZGT, 1, 0, 0, 0) && left(1, 0, 0, 0), "0 0>"); + V3(call(W_ZGT, 1, -5, 0, 0) && left(1, 0, 0, 0), "-5 0>"); + V3(call(W_NE, 2, 3, 4, 0) && left(1, -1, 0, 0), "3 4 <>"); + V3(call(W_NE, 2, 4, 4, 0) && left(1, 0, 0, 0), "4 4 <>"); + + /* 3 4 > . 4 3 > . 4 4 > . 3 4 <= . 4 4 <= . 5 4 <= . 3 4 >= . 4 4 >= . 5 4 >= . + * 3 4 U< . -1 4 U< . 4 -1 U< . -> 0 -1 0 -1 -1 0 0 -1 -1 -1 0 -1 */ + V3(call(W_GT, 2, 3, 4, 0) && left(1, 0, 0, 0), "3 4 >"); + V3(call(W_GT, 2, 4, 3, 0) && left(1, -1, 0, 0), "4 3 >"); + V3(call(W_GT, 2, 4, 4, 0) && left(1, 0, 0, 0), "4 4 >"); + V3(call(W_LE, 2, 3, 4, 0) && left(1, -1, 0, 0), "3 4 <="); + V3(call(W_LE, 2, 4, 4, 0) && left(1, -1, 0, 0), "4 4 <="); + V3(call(W_LE, 2, 5, 4, 0) && left(1, 0, 0, 0), "5 4 <="); + V3(call(W_GE, 2, 3, 4, 0) && left(1, 0, 0, 0), "3 4 >="); + V3(call(W_GE, 2, 4, 4, 0) && left(1, -1, 0, 0), "4 4 >="); + V3(call(W_GE, 2, 5, 4, 0) && left(1, -1, 0, 0), "5 4 >="); + V3(call(W_ULT, 2, 3, 4, 0) && left(1, -1, 0, 0), "3 4 U<"); + V3(call(W_ULT, 2, -1, 4, 0) && left(1, 0, 0, 0), "-1 4 U<"); + V3(call(W_ULT, 2, 4, -1, 0) && left(1, -1, 0, 0), "4 -1 U<"); + + /* 5 0 10 WITHIN . 10 0 10 WITHIN . 0 0 10 WITHIN . -1 0 10 WITHIN . 5 10 0 WITHIN . + * TRUE . FALSE . : T 3 >R R@ . R> . ; T -> -1 0 -1 0 0 -1 0 3 3 */ + V3(call(W_WITHIN, 3, 5, 0, 10) && left(1, -1, 0, 0), "5 0 10 WITHIN"); + V3(call(W_WITHIN, 3, 10, 0, 10) && left(1, 0, 0, 0), "10 0 10 WITHIN"); + V3(call(W_WITHIN, 3, 0, 0, 10) && left(1, -1, 0, 0), "0 0 10 WITHIN"); + V3(call(W_WITHIN, 3, -1, 0, 10) && left(1, 0, 0, 0), "-1 0 10 WITHIN"); + V3(call(W_WITHIN, 3, 5, 10, 0) && left(1, 0, 0, 0), "5 10 0 WITHIN"); + V3(call(W_TRUE, 0, 0, 0, 0) && left(1, -1, 0, 0), "TRUE"); + V3(call(W_FALSE, 0, 0, 0, 0) && left(1, 0, 0, 0), "FALSE"); + V3(call(W_RSTACK, 1, 3, 0, 0) && left(2, 3, 3, 0), "3 >R R@ R>"); + + /* ---- against C, on every combination of the edge values ---- */ + + for (i = 0; i < NVEC; i++) { + v4_cell x = vec[i]; + v4_ucell ux = (v4_ucell)x; + + ONE1(W_NEGATE, x, (v4_cell)((v4_ucell)0 - ux)); + ONE1(W_1P, x, (v4_cell)(ux + 1u)); + ONE1(W_1M, x, (v4_cell)(ux - 1u)); + ONE1(W_2P, x, (v4_cell)(ux + 2u)); + ONE1(W_2M, x, (v4_cell)(ux - 2u)); + ONE1(W_NOT, x, FLAG(x == 0)); + ONE1(W_ZEQ, x, FLAG(x == 0)); + ONE1(W_ZLT, x, FLAG(x < 0)); + ONE1(W_ZNE, x, FLAG(x != 0)); + ONE1(W_ZGT, x, FLAG(x > 0)); + ONE1(W_CELLS, x, x); + CHECK(call(W_QDUP, 1, x, 0, 0) && (x ? left(2, x, x, 0) : left(1, 0, 0, 0)), "?DUP [%u]", i); + CHECK(call(W_RSTACK, 1, x, 0, 0) && left(2, x, x, 0), ">R R@ R> [%u]", i); + + for (j = 0; j < NVEC; j++) { + v4_cell y = vec[j]; + v4_ucell uy = (v4_ucell)y; + + CHECK(call(W_NIP, 2, x, y, 0) && left(1, y, 0, 0), "NIP [%u,%u]", i, j); + CHECK(call(W_SWAP, 2, x, y, 0) && left(2, y, x, 0), "SWAP [%u,%u]", i, j); + CHECK(call(W_2DUP, 2, x, y, 0) && v4_dstack_pop(&n.ds) == y && v4_dstack_pop(&n.ds) == x + && left(2, x, y, 0), "2DUP [%u,%u]", i, j); + ONE2(W_MINUS, x, y, (v4_cell)(ux - uy)); + ONE2(W_MIN, x, y, x < y ? x : y); + ONE2(W_MAX, x, y, x > y ? x : y); + ONE2(W_OR, x, y, (v4_cell)(ux | uy)); + ONE2(W_EQ, x, y, FLAG(x == y)); + ONE2(W_NE, x, y, FLAG(x != y)); + ONE2(W_LT, x, y, FLAG(x < y)); + ONE2(W_GT, x, y, FLAG(x > y)); + ONE2(W_LE, x, y, FLAG(x <= y)); + ONE2(W_GE, x, y, FLAG(x >= y)); + ONE2(W_ULT, x, y, FLAG(ux < uy)); + + /* memory: x is what is there, y what arrives */ + n.mem[MEMV] = 0x1111; n.mem[MEMV + 1] = x; n.mem[MEMV + 2] = 0x2222; n.mem[MEMV + 3] = 0x3333; + CHECK(call(W_FETCH, 1, MEMV + 1, 0, 0) && left(1, x, 0, 0), "@ [%u]", i); + CHECK(call(W_PSTORE, 2, y, MEMV + 1, 0) && left(0, 0, 0, 0) + && n.mem[MEMV + 1] == (v4_cell)(ux + uy), "+! [%u,%u]", i, j); + n.mem[MEMV + 1] = x; + CHECK(call(W_MSTORE, 2, y, MEMV + 1, 0) && left(0, 0, 0, 0) + && n.mem[MEMV + 1] == (v4_cell)(ux - uy), "-! [%u,%u]", i, j); + CHECK(call(W_STORE, 2, y, MEMV + 1, 0) && left(0, 0, 0, 0) && n.mem[MEMV + 1] == y, "! [%u,%u]", i, j); + CHECK(n.mem[MEMV] == 0x1111 && n.mem[MEMV + 2] == 0x2222 && n.mem[MEMV + 3] == 0x3333, + "@ ! +! -! leave the neighbours [%u,%u]", i, j); + CHECK(call(W_2STORE, 3, x, y, MEMV + 1) && left(0, 0, 0, 0) + && n.mem[MEMV + 1] == x && n.mem[MEMV + 2] == y, "2! [%u,%u]", i, j); + CHECK(call(W_2FETCH, 1, MEMV + 1, 0, 0) && left(2, x, y, 0), "2@ [%u,%u]", i, j); + CHECK(n.mem[MEMV] == 0x1111 && n.mem[MEMV + 3] == 0x3333, "2! 2@ leave the neighbours [%u,%u]", i, j); + + for (k = 0; k < NVEC; k++) { + v4_cell z = vec[k]; + CHECK(call(W_ROT, 3, x, y, z) && left(3, y, z, x), "ROT [%u,%u,%u]", i, j, k); + CHECK(call(W_NROT, 3, x, y, z) && left(3, z, x, y), "-ROT [%u,%u,%u]", i, j, k); + CHECK(call(W_WITHIN, 3, x, y, z) && left(1, FLAG(x >= y && x < z), 0, 0), "WITHIN [%u,%u,%u]", i, j, k); + } + } + } + CHECK(call(W_TRUE, 0, 0, 0, 0) && left(1, -1, 0, 0), "TRUE"); + CHECK(call(W_FALSE, 0, 0, 0, 0) && left(1, 0, 0, 0), "FALSE"); + + /* What they leave their caller (D-2). */ + headroom(W_NIP, 2, 1, 2, 0, 1, 7, 7); + headroom(W_SWAP, 2, 1, 2, 0, 2, 6, 6); + headroom(W_ROT, 3, 1, 2, 3, 3, 5, 4); + headroom(W_NROT, 3, 1, 2, 3, 3, 5, 5); + headroom(W_QDUP, 1, 5, 0, 0, 2, 7, 8); + headroom(W_PSTORE, 2, 5, MEMV + 1, 0, 0, 7, 8); + headroom(W_MSTORE, 2, 5, MEMV + 1, 0, 0, 7, 8); + headroom(W_2FETCH, 1, MEMV + 1, 0, 0, 2, 7, 8); + headroom(W_2STORE, 3, 5, 6, MEMV + 1, 0, 6, 6); + headroom(W_MINUS, 2, 7, 3, 0, 1, 6, 8); + headroom(W_MIN, 2, 7, 3, 0, 1, 3, 6); + headroom(W_MAX, 2, 7, 3, 0, 1, 3, 6); + headroom(W_OR, 2, 12, 10, 0, 1, 6, 8); + headroom(W_ZGT, 1, 5, 0, 0, 1, 8, 8); + headroom(W_NE, 2, 3, 4, 0, 1, 7, 8); + headroom(W_LT, 2, -3, 4, 0, 1, 5, 7); + headroom(W_GT, 2, 3, 4, 0, 1, 5, 6); + headroom(W_LE, 2, 3, 4, 0, 1, 5, 6); + headroom(W_GE, 2, 3, 4, 0, 1, 5, 6); + headroom(W_ULT, 2, 3, 4, 0, 1, 5, 7); + headroom(W_WITHIN, 3, 5, 0, 10, 1, 3, 5); + + CHECK(v4_node_guards_intact(&n), "guards intact"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_console.c b/v4/tests/test_console.c new file mode 100644 index 00000000..652d0656 --- /dev/null +++ b/v4/tests/test_console.c @@ -0,0 +1,244 @@ +/* test_console.c -- the console registers of the single-node model (node.h): + * CONSOLE-TX, which captures what is printed, and CONSOLE-RX and + * CONSOLE-STATUS, which hand out characters the test feeds. + * + * EMIT is a device service (DECOMPOSITION.md 5.10) and the mesh is not built + * yet, so the single-node model stands in for the console with one + * memory-mapped register: a store to it appends a character to a buffer on + * the node. This file checks that register and nothing else: no printing + * word is defined here. + */ +#include "v4/asm.h" +#include "v4/testcode.h" +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +/* The memory map is open (D-4); the test chooses the address. */ +#define CONSOLE_TX ((v4_cell)(V4_NODE_WORDS - 4u)) +#define CONSOLE_RX ((v4_cell)(V4_NODE_WORDS - 6u)) +#define CONSOLE_ST ((v4_cell)(V4_NODE_WORDS - 7u)) +#define MARK ((v4_cell)0x1234) + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_asm as; + +#define O(name) v4_asm_op(&as, V4_OP_##name) +#define LIT(v) v4_asm_lit(&as, (v4_cell)(v)) + +static int run(v4_cell word) +{ + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + return v4_test_call(&n, &es, &h, word, 1000) > 0; +} + +int main(void) +{ + v4_cell w_hi, w_in; + unsigned i; + + printf("v4 console tests: V4_CELL_BITS=%d, capture %u characters\n", + V4_CELL_BITS, (unsigned)V4_CONSOLE_CAP); + + /* A fresh node has no console: every store is a memory store. */ + v4_node_reset(&n); + CHECK(n.console_tx == -1 && n.console_len == 0 && n.console_dropped == 0, + "reset leaves no console attached"); + v4_node_store(&n, CONSOLE_TX, MARK); + CHECK(v4_node_load(&n, CONSOLE_TX) == MARK && n.console_len == 0, + "with no console the address is ordinary memory"); + + /* Attached: a store is captured and memory is left alone. */ + v4_node_console_attach(&n, CONSOLE_TX); + v4_node_store(&n, CONSOLE_TX, 'A'); + CHECK(n.console_len == 1 && n.console[0] == 'A', "a store is captured"); + CHECK(n.mem[CONSOLE_TX] == MARK, "and does not write memory"); + CHECK(v4_node_load(&n, CONSOLE_TX) == MARK, "a load reads the memory word, as before"); + + /* Only the low byte is the character. */ + v4_node_store(&n, CONSOLE_TX, 0x141); + v4_node_store(&n, CONSOLE_TX, -1); + v4_node_store(&n, CONSOLE_TX, 0); + CHECK(n.console_len == 4 && n.console[1] == 'A' && n.console[2] == 0xFF && n.console[3] == 0, + "the low 8 bits are the character"); + + /* Other addresses are still memory. */ + v4_node_store(&n, CONSOLE_TX - 1, 'x'); + v4_node_store(&n, CONSOLE_TX + 1, 'y'); + CHECK(n.console_len == 4 && n.mem[CONSOLE_TX - 1] == 'x' && n.mem[CONSOLE_TX + 1] == 'y', + "neighbouring addresses are ordinary memory"); + + /* Through the executor: !b, ! and !+ each reach the register, in order. */ + v4_asm_begin(&as, &n, 16); + w_hi = v4_asm_label(&as); + LIT('H'); LIT(CONSOLE_TX); O(BANG_B); O(STORE_B); /* !b */ + LIT('i'); LIT(CONSOLE_TX); O(BANG_A); O(STORE_A); /* ! */ + LIT('!'); LIT(CONSOLE_TX); O(BANG_A); O(STORE_INC); /* !+ */ + O(SEMI); + CHECK(v4_asm_ok(&as), "test word assembles"); + + n.mem[CONSOLE_TX - 1] = 0; + n.mem[CONSOLE_TX + 1] = 0; + v4_node_console_attach(&n, CONSOLE_TX); + CHECK(n.console_len == 0 && n.console_dropped == 0, "attaching empties the capture"); + CHECK(run(w_hi), "the word returns"); + CHECK(n.console_len == 3 && memcmp(n.console, "Hi!", 3) == 0, "!b, ! and !+ print \"Hi!\""); + CHECK(n.a == CONSOLE_TX + 1, "!+ still advances A"); + CHECK(n.mem[CONSOLE_TX] == MARK && n.mem[CONSOLE_TX - 1] == 0 && n.mem[CONSOLE_TX + 1] == 0, + "memory at and around the register is untouched"); + + /* Run it again: the capture appends. */ + CHECK(run(w_hi) && n.console_len == 6 && memcmp(n.console, "Hi!Hi!", 6) == 0, + "a second run appends"); + + /* A full buffer drops and counts; nothing past it is written. */ + v4_node_console_attach(&n, CONSOLE_TX); + for (i = 0; i < V4_CONSOLE_CAP + 5u; i++) v4_node_store(&n, CONSOLE_TX, (v4_cell)('a' + i % 26u)); + CHECK(n.console_len == V4_CONSOLE_CAP, "the capture stops at its capacity"); + CHECK(n.console_dropped == 5, "and counts what it dropped: %u", n.console_dropped); + CHECK(n.console[0] == 'a' && n.console[V4_CONSOLE_CAP - 1] == (unsigned char)('a' + (V4_CONSOLE_CAP - 1u) % 26u), + "the first and last captured characters are intact"); + CHECK(n.console_tx == CONSOLE_TX, "the register address survives an overflow"); + + /* Detaching returns the address to memory. */ + v4_node_console_attach(&n, -1); + v4_node_store(&n, CONSOLE_TX, 77); + CHECK(n.console_len == 0 && n.mem[CONSOLE_TX] == 77, "detached, the address is memory again"); + + /* The console can sit anywhere, including word 0. */ + v4_node_console_attach(&n, 0); + n.mem[0] = MARK; + v4_node_store(&n, 0, 'z'); + CHECK(n.console_len == 1 && n.console[0] == 'z' && n.mem[0] == MARK, "a console at word 0"); + + /* ---- the receive side: CONSOLE-RX and CONSOLE-STATUS ---- */ + + /* Not attached: both addresses are ordinary memory to a fetch. */ + v4_node_reset(&n); + CHECK(n.console_rx == -1 && n.console_status == -1 && n.input_len == 0 && n.input_pos == 0, + "reset leaves no input attached"); + n.mem[CONSOLE_RX] = MARK; n.mem[CONSOLE_ST] = MARK + 1; + CHECK(v4_node_fetch(&n, CONSOLE_RX) == MARK && v4_node_fetch(&n, CONSOLE_ST) == MARK + 1, + "with no input attached a fetch reads memory"); + CHECK(v4_node_console_feed(&n, "x", 1) == 1 && v4_node_fetch(&n, CONSOLE_RX) == MARK, + "and fed characters reach nobody"); + + /* Attached and empty. */ + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + CHECK(n.input_len == 0, "attaching empties the queue"); + CHECK(v4_node_fetch(&n, CONSOLE_ST) == 0, "status is 0 with nothing pending"); + CHECK(v4_node_fetch(&n, CONSOLE_RX) == -1 && v4_node_fetch(&n, CONSOLE_RX) == -1, + "an empty receive register reads -1"); + CHECK(n.mem[CONSOLE_RX] == MARK && n.mem[CONSOLE_ST] == MARK + 1, "the fetches left memory alone"); + CHECK(v4_node_load(&n, CONSOLE_RX) == MARK && v4_node_load(&n, CONSOLE_ST) == MARK + 1, + "v4_node_load still reads the memory words"); + + /* Fed: status says so and does not consume; each receive takes one. */ + CHECK(v4_node_console_feed(&n, "Hi", 2) == 2, "two characters fed"); + CHECK(v4_node_fetch(&n, CONSOLE_ST) == -1 && v4_node_fetch(&n, CONSOLE_ST) == -1, "status is -1, however often it is read"); + CHECK(v4_node_fetch(&n, CONSOLE_RX) == 'H', "the first character"); + CHECK(v4_node_fetch(&n, CONSOLE_ST) == -1, "one still pending"); + CHECK(v4_node_fetch(&n, CONSOLE_RX) == 'i', "the second character"); + CHECK(v4_node_fetch(&n, CONSOLE_ST) == 0 && v4_node_fetch(&n, CONSOLE_RX) == -1, "then nothing"); + + /* Every byte comes back as 0 .. 255, never negative. */ + for (i = 0; i < 256; i++) { + unsigned char c = (unsigned char)i; + CHECK(v4_node_console_feed(&n, &c, 1) == 1 && v4_node_fetch(&n, CONSOLE_RX) == (v4_cell)i, "byte %u", i); + } + + /* A store to either address is a memory store and feeds nothing. */ + v4_node_store(&n, CONSOLE_RX, 'q'); + v4_node_store(&n, CONSOLE_ST, 'r'); + CHECK(n.mem[CONSOLE_RX] == 'q' && n.mem[CONSOLE_ST] == 'r' && v4_node_fetch(&n, CONSOLE_ST) == 0, + "stores to the receive registers go to memory"); + n.mem[CONSOLE_RX] = MARK; n.mem[CONSOLE_ST] = MARK + 1; + + /* Through the executor: @b, @ and @+ each reach the registers. */ + v4_asm_begin(&as, &n, 64); + w_in = v4_asm_label(&as); + LIT(CONSOLE_ST); O(BANG_B); O(FETCH_B); /* @b status */ + LIT(CONSOLE_RX); O(BANG_A); O(FETCH_A); /* @ a character */ + LIT(CONSOLE_RX); O(BANG_A); O(FETCH_INC); /* @+ another */ + LIT(CONSOLE_ST); O(BANG_A); O(FETCH_A); /* @ status again */ + O(SEMI); + CHECK(v4_asm_ok(&as), "input test word assembles"); + CHECK(v4_node_console_feed(&n, "ok", 2) == 2, "fed"); + CHECK(run(w_in), "the word returns"); + CHECK(v4_dstack_pop(&n.ds) == 0 && v4_dstack_pop(&n.ds) == 'k' && v4_dstack_pop(&n.ds) == 'o' + && v4_dstack_pop(&n.ds) == -1, "@b, @ and @+ read status, 'o', 'k', status"); + CHECK(n.mem[CONSOLE_RX] == MARK && n.mem[CONSOLE_ST] == MARK + 1, "memory at the registers is untouched"); + + /* The code itself is never taken for a register: a literal equal to a + * register's address, and code placed at one. */ + { + v4_cell end = v4_asm_label(&as), at; + v4_asm w2; + v4_cell w_lit; + /* a second word: ( -- 'o' 77 ) CONSOLE-RX a! @ 77 ; */ + v4_asm_begin(&w2, &n, 128); + w_lit = v4_asm_label(&w2); + v4_asm_lit(&w2, CONSOLE_RX); v4_asm_op(&w2, V4_OP_BANG_A); v4_asm_op(&w2, V4_OP_FETCH_A); + v4_asm_lit(&w2, 77); v4_asm_op(&w2, V4_OP_SEMI); + CHECK(v4_asm_ok(&w2), "second input test word assembles"); + end = v4_asm_label(&w2); + /* put the status register on each word of that code in turn: the + * instruction words and both literals are still read as memory */ + for (at = 128; at < end; at++) { + v4_node_console_input_attach(&n, CONSOLE_RX, at); + CHECK(v4_node_console_feed(&n, "o", 1) == 1 && run(w_lit) + && v4_dstack_pop(&n.ds) == 77 && v4_dstack_pop(&n.ds) == 'o', + "code and literals at a register's address are read as memory [%ld]", (long)at); + } + CHECK(end - 128 >= 3, "the word spans instruction words and literals"); + } + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + + /* The queue holds V4_CONSOLE_CAP unread characters, in order. */ + { + static unsigned char big[V4_CONSOLE_CAP + 5u]; + unsigned ok = 1; + for (i = 0; i < sizeof big; i++) big[i] = (unsigned char)(i * 7u + 3u); + CHECK(v4_node_console_feed(&n, big, (unsigned)sizeof big) == V4_CONSOLE_CAP, "a full queue takes no more"); + CHECK(v4_node_console_feed(&n, "x", 1) == 0, "not even one"); + for (i = 0; i < 10; i++) if (v4_node_fetch(&n, CONSOLE_RX) != big[i]) ok = 0; + CHECK(ok, "the first ten come out in order"); + CHECK(v4_node_console_feed(&n, big, 20) == 10, "ten read makes room for ten"); + for (i = 10; i < V4_CONSOLE_CAP; i++) if (v4_node_fetch(&n, CONSOLE_RX) != big[i]) ok = 0; + for (i = 0; i < 10; i++) if (v4_node_fetch(&n, CONSOLE_RX) != big[i]) ok = 0; + CHECK(ok && v4_node_fetch(&n, CONSOLE_ST) == 0, "and everything comes out in the order it went in"); + } + + /* Output and input do not disturb each other. */ + v4_node_console_attach(&n, CONSOLE_TX); + CHECK(v4_node_console_feed(&n, "A", 1) == 1, "fed"); + v4_node_store(&n, CONSOLE_TX, 'B'); + CHECK(v4_node_fetch(&n, CONSOLE_RX) == 'A' && n.console_len == 1 && n.console[0] == 'B', + "the transmit and receive sides are separate"); + + /* Detaching returns both addresses to memory. */ + v4_node_console_input_attach(&n, -1, -1); + CHECK(v4_node_fetch(&n, CONSOLE_RX) == MARK && v4_node_fetch(&n, CONSOLE_ST) == MARK + 1, + "detached, both addresses are memory again"); + + CHECK(v4_node_guards_intact(&n), "guards intact"); + + /* Reset detaches and empties. */ + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + (void)v4_node_console_feed(&n, "left over", 9); + v4_node_reset(&n); + CHECK(n.console_tx == -1 && n.console_len == 0 && n.console_dropped == 0, + "reset detaches the console and empties the capture"); + CHECK(n.console_rx == -1 && n.console_status == -1 && n.input_len == 0 && n.input_pos == 0, + "reset detaches the input and empties the queue"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_exec.c b/v4/tests/test_exec.c new file mode 100644 index 00000000..a8e32f93 --- /dev/null +++ b/v4/tests/test_exec.c @@ -0,0 +1,593 @@ +/* test_exec.c -- every opcode of DECOMPOSITION.md section 1.3, and the slot + * sequencing of section 1.2. + * + * Each expected value below is worked out from the table in section 1.3, not + * from the executor. Words are packed by hand with v4_iword_assemble so that + * this file does not depend on asm.c, which has its own test. + */ +#include "v4/exec.h" +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define NOP V4_OP_NOP +#define MINC ((v4_cell)V4_MSB) /* most negative cell */ +#define MAXC ((v4_cell)(V4_MSB - 1u)) /* most positive cell */ + +static v4_node n; +static v4_exec_state es; +static v4_heat h; + +static void fresh(void) +{ + v4_node_reset(&n); + v4_exec_reset(&es); + v4_heat_reset(&h); +} + +static void dpush(v4_cell x) { v4_dstack_push(&n.ds, x); } +static void rpush(v4_cell x) { v4_rstack_push(&n.rs, x); } + +/* A word of six plain opcodes. */ +static v4_cell word6(unsigned a, unsigned b, unsigned c, + unsigned d, unsigned e, unsigned f) +{ + unsigned op[V4_SLOT_COUNT]; + op[0] = a; op[1] = b; op[2] = c; op[3] = d; op[4] = e; op[5] = f; + return (v4_cell)v4_iword_assemble(op, 0); +} + +/* A word with `npre` nops, then a branch in the next slot, then its target. */ +static v4_cell bword(unsigned npre, unsigned op, v4_iword target) +{ + v4_iword w = 0; + for (unsigned k = 0; k < npre; k++) w |= (v4_iword)NOP << V4_SLOT_LOW_BIT(k); + w |= (v4_iword)op << V4_SLOT_LOW_BIT(npre); + w |= target & v4_iword_slot_mask(npre); + return (v4_cell)w; +} + +/* Run one opcode, padded with nops, on the current stacks. Returns the count + * of instructions retired. */ +static unsigned run1(unsigned op) +{ + n.mem[0] = word6(op, NOP, NOP, NOP, NOP, NOP); + n.p = 0; + return v4_exec_step_word(&n, &es, &h); +} + +static void test_stack_ops(void) +{ + fresh(); dpush(1); dpush(2); run1(V4_OP_DUP); + CHECK(n.ds.t == 2 && n.ds.s == 2, "dup"); + (void)v4_dstack_pop(&n.ds); + CHECK(n.ds.t == 2 && n.ds.s == 1, "dup keeps what was below"); + + fresh(); dpush(1); dpush(2); run1(V4_OP_OVER); + CHECK(n.ds.t == 1 && n.ds.s == 2, "over"); + (void)v4_dstack_pop(&n.ds); + CHECK(n.ds.t == 2 && n.ds.s == 1, "over keeps what was below"); + + fresh(); dpush(1); dpush(2); dpush(3); run1(V4_OP_DROP); + CHECK(n.ds.t == 2 && n.ds.s == 1, "drop"); + + fresh(); dpush(1); dpush(2); CHECK(run1(NOP) == 6, "nop word retires six"); + CHECK(n.ds.t == 2 && n.ds.s == 1 && n.p == 1, "nop changes nothing but P"); +} + +static void test_alu(void) +{ + fresh(); dpush(9); dpush(3); dpush(4); run1(V4_OP_ADD); + CHECK(n.ds.t == 7 && n.ds.s == 9, "3 + 4, and 9 moves up to S"); + fresh(); dpush(MAXC); dpush(1); run1(V4_OP_ADD); + CHECK(n.ds.t == MINC, "+ wraps"); + + fresh(); dpush(9); dpush(12); dpush(10); run1(V4_OP_AND); + CHECK(n.ds.t == 8 && n.ds.s == 9, "and"); + fresh(); dpush(9); dpush(12); dpush(10); run1(V4_OP_XOR); + CHECK(n.ds.t == 6 && n.ds.s == 9, "xor"); + + fresh(); dpush(5); dpush(0); run1(V4_OP_INV); + CHECK(n.ds.t == -1 && n.ds.s == 5, "inv 0"); + fresh(); dpush(MAXC); run1(V4_OP_INV); + CHECK(n.ds.t == MINC, "inv max"); + + fresh(); dpush(3); run1(V4_OP_TWO_STAR); CHECK(n.ds.t == 6, "2* 3"); + fresh(); dpush(-1); run1(V4_OP_TWO_STAR); CHECK(n.ds.t == -2, "2* -1"); + fresh(); dpush(MINC); run1(V4_OP_TWO_STAR); CHECK(n.ds.t == 0, "2* drops the top bit"); + + fresh(); dpush(6); run1(V4_OP_TWO_SLASH); CHECK(n.ds.t == 3, "2/ 6"); + fresh(); dpush(-1); run1(V4_OP_TWO_SLASH); CHECK(n.ds.t == -1, "2/ -1 is -1, not 0"); + fresh(); dpush(-7); run1(V4_OP_TWO_SLASH); CHECK(n.ds.t == -4, "2/ -7 floors"); + fresh(); dpush(MINC); run1(V4_OP_TWO_SLASH); + CHECK((v4_ucell)n.ds.t == (V4_MSB | (V4_MSB >> 1)), "2/ keeps the sign bit"); +} + +static void test_mul_step(void) +{ + /* A even: no add. */ + fresh(); dpush(5); dpush(6); n.a = 4; run1(V4_OP_MUL_STEP); + CHECK(n.ds.t == 3 && n.ds.s == 5 && n.a == 2, "+* A even"); + + /* A odd: T+S = 11, shifted to 5, the 1 shifted out enters the top of A. */ + fresh(); dpush(5); dpush(6); n.a = 5; run1(V4_OP_MUL_STEP); + CHECK(n.ds.t == 5 && n.ds.s == 5, "+* A odd, T"); + CHECK((v4_ucell)n.a == (V4_MSB | 2u), "+* A odd, A"); + + fresh(); dpush(0); dpush(3); n.a = 0; run1(V4_OP_MUL_STEP); + CHECK(n.ds.t == 1 && (v4_ucell)n.a == V4_MSB, "+* T bit 0 enters A"); + + fresh(); dpush(0); dpush(-2); n.a = 0; run1(V4_OP_MUL_STEP); + CHECK(n.ds.t == -1 && n.a == 0, "+* keeps T's sign bit"); + + /* D-3: all-ones + 1 carries out of T and the carry is gone. */ + fresh(); dpush(1); dpush(-1); n.a = 1; run1(V4_OP_MUL_STEP); + CHECK(n.ds.t == 0 && n.a == 0, "+* does not keep the carry (D-3)"); +} + +static void test_registers_and_rstack(void) +{ + fresh(); dpush(4); dpush(5); run1(V4_OP_PUSH); + CHECK(n.rs.r == 5 && n.ds.t == 4, "push"); + run1(V4_OP_RPOP); + CHECK(n.ds.t == 5 && n.ds.s == 4, "pop"); + + fresh(); dpush(4); dpush(77); run1(V4_OP_BANG_A); + CHECK(n.a == 77 && n.ds.t == 4, "a!"); + run1(V4_OP_PUSH_A); + CHECK(n.ds.t == 77 && n.ds.s == 4 && n.a == 77, "a"); + + fresh(); dpush(4); dpush(88); run1(V4_OP_BANG_B); + CHECK(n.b == 88 && n.ds.t == 4 && n.a == 0, "b!"); +} + +static void test_memory(void) +{ + fresh(); n.a = 100; n.b = 101; n.mem[100] = 11; n.mem[101] = 22; + run1(V4_OP_FETCH_A); CHECK(n.ds.t == 11 && n.a == 100, "@"); + run1(V4_OP_FETCH_B); CHECK(n.ds.t == 22 && n.ds.s == 11 && n.b == 101, "@b"); + run1(V4_OP_FETCH_INC); CHECK(n.ds.t == 11 && n.a == 101, "@+ first"); + run1(V4_OP_FETCH_INC); CHECK(n.ds.t == 22 && n.a == 102, "@+ second"); + + fresh(); n.a = 100; n.b = 200; dpush(1); dpush(5); + run1(V4_OP_STORE_A); + CHECK(n.mem[100] == 5 && n.ds.t == 1 && n.a == 100, "!"); + dpush(6); run1(V4_OP_STORE_INC); + CHECK(n.mem[100] == 6 && n.ds.t == 1 && n.a == 101, "!+"); + dpush(7); run1(V4_OP_STORE_B); + CHECK(n.mem[200] == 7 && n.ds.t == 1 && n.b == 200, "!b"); + + /* @p takes the word after the instruction word and steps over it. */ + fresh(); n.mem[1] = (v4_cell)0x1122334455667788LL; + run1(V4_OP_FETCH_P); + CHECK(n.ds.t == n.mem[1] && n.p == 2, "@p is a full cell and advances P"); + + fresh(); dpush(1); dpush(9); run1(V4_OP_STORE_P); + CHECK(n.mem[1] == 9 && n.ds.t == 1 && n.p == 2, "!p"); + + /* Two literals in one word are the two words after it, in order. */ + fresh(); n.mem[0] = word6(V4_OP_FETCH_P, V4_OP_FETCH_P, V4_OP_ADD, NOP, NOP, NOP); + n.mem[1] = 30; n.mem[2] = 12; n.p = 0; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.ds.t == 42 && n.p == 3, "two literals"); +} + +static void test_return_and_ex(void) +{ + fresh(); rpush(7); rpush(50); + n.mem[0] = word6(V4_OP_SEMI, V4_OP_DUP, V4_OP_DUP, V4_OP_DUP, V4_OP_DUP, V4_OP_DUP); + n.p = 0; + CHECK(v4_exec_step_word(&n, &es, &h) == 1, "; ends the word"); + CHECK(n.p == 50 && n.rs.r == 7, "; returns and pops R"); + CHECK(h.op[V4_OP_DUP] == 0 && es.anticlock == 1, "nothing after ; retires"); + + fresh(); rpush(7); rpush(50); + n.mem[20] = word6(V4_OP_EX, V4_OP_DUP, NOP, NOP, NOP, NOP); + n.p = 20; + CHECK(v4_exec_step_word(&n, &es, &h) == 1, "ex ends the word"); + CHECK(n.p == 50 && n.rs.r == 21, "ex swaps P and R"); + (void)v4_rstack_pop(&n.rs); + CHECK(n.rs.r == 7, "ex does not change the return stack depth"); +} + +static void test_branches(void) +{ + /* jump in each legal slot; the slots before it execute. */ + for (unsigned slot = 0; slot < 4; slot++) { + fresh(); n.mem[10] = bword(slot, V4_OP_JUMP, 300); n.p = 10; + CHECK(v4_exec_step_word(&n, &es, &h) == slot + 1, "jump slot %u count", slot); + CHECK(n.p == 300, "jump slot %u", slot); + CHECK(h.op[NOP] == slot && h.op[V4_OP_JUMP] == 1, "jump slot %u heat", slot); + } + + fresh(); rpush(7); n.mem[10] = bword(0, V4_OP_CALL, 200); n.p = 10; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.p == 200 && n.rs.r == 11, "call pushes the return address"); + CHECK(v4_heat_call_get(&h, 200) == 1 && h.op[V4_OP_CALL] == 1, "call heats its target"); + (void)v4_rstack_pop(&n.rs); + CHECK(n.rs.r == 7, "call pushes exactly one"); + + fresh(); rpush(99); rpush(2); n.mem[5] = bword(0, V4_OP_NEXT, 40); n.p = 5; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.p == 40 && n.rs.r == 1, "next, R nonzero"); + fresh(); rpush(99); rpush(0); n.mem[5] = bword(0, V4_OP_NEXT, 40); n.p = 5; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.p == 6 && n.rs.r == 99, "next, R zero"); + + fresh(); dpush(8); dpush(0); n.mem[5] = bword(0, V4_OP_IF, 40); n.p = 5; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.p == 40 && n.ds.t == 0 && n.ds.s == 8, "if, T zero: taken, T kept"); + /* The target bits 0x0FFFF would decode as opcodes if they were executed. */ + fresh(); dpush(8); dpush(5); n.mem[5] = bword(0, V4_OP_IF, 0x0FFFF); n.p = 5; + CHECK(v4_exec_step_word(&n, &es, &h) == 1, "if not taken still ends the word"); + CHECK(n.p == 6 && n.ds.t == 5 && n.ds.s == 8, "if, T nonzero: not taken, T kept"); + + fresh(); dpush(8); dpush(5); n.mem[5] = bword(0, V4_OP_MINUS_IF, 40); n.p = 5; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.p == 40 && n.ds.t == 5 && n.ds.s == 8, "-if, T positive: taken"); + fresh(); dpush(0); n.mem[5] = bword(0, V4_OP_MINUS_IF, 40); n.p = 5; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.p == 40, "-if, T zero: taken"); + fresh(); dpush(8); dpush(-1); n.mem[5] = bword(0, V4_OP_MINUS_IF, 40); n.p = 5; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.p == 6 && n.ds.t == -1 && n.ds.s == 8, "-if, T negative: not taken"); +} + +static void test_unext(void) +{ + /* R = 3: the body runs four times, then the rest of the word runs once. */ + fresh(); dpush(1); rpush(99); rpush(3); + n.mem[0] = word6(V4_OP_TWO_STAR, V4_OP_UNEXT, NOP, NOP, NOP, NOP); n.p = 0; + CHECK(v4_exec_step_word(&n, &es, &h) == 12, "unext retire count"); + CHECK(n.ds.t == 16, "unext body ran R+1 times"); + CHECK(n.rs.r == 99, "unext pops R when done"); + CHECK(n.p == 1, "unext leaves P at the next word"); + CHECK(h.op[V4_OP_TWO_STAR] == 4 && h.op[V4_OP_UNEXT] == 4 && h.op[NOP] == 4, + "unext heat"); + CHECK(es.anticlock == 12, "unext anticlock"); + + fresh(); dpush(1); rpush(99); rpush(0); + n.mem[0] = word6(V4_OP_TWO_STAR, V4_OP_UNEXT, NOP, NOP, NOP, NOP); n.p = 0; + CHECK(v4_exec_step_word(&n, &es, &h) == 6, "unext with R zero runs once"); + CHECK(n.ds.t == 2 && n.rs.r == 99, "unext with R zero"); + + /* The word is not refetched and P is not rewound, so @p walks forward. */ + fresh(); rpush(99); rpush(2); n.a = 100; + n.mem[0] = word6(V4_OP_FETCH_P, V4_OP_STORE_INC, V4_OP_UNEXT, NOP, NOP, NOP); + n.mem[1] = 11; n.mem[2] = 22; n.mem[3] = 33; n.p = 0; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.mem[100] == 11 && n.mem[101] == 22 && n.mem[102] == 33, + "@p in a unext loop copies successive words"); + CHECK(n.a == 103 && n.p == 4 && n.rs.r == 99, "@p in a unext loop, registers"); +} + +static void test_retirement(void) +{ + fresh(); + for (unsigned op = 0; op < V4_OPCODE_COUNT; op++) { + /* each opcode finds what it takes on the stacks, and room (D-16) */ + v4_dstack_reset(&n.ds); v4_rstack_reset(&n.rs); + dpush(1); dpush(2); rpush(5); + v4_exec_op(&n, &es, &h, op, 0, 0); + } + for (unsigned op = 0; op < V4_OPCODE_COUNT; op++) + CHECK(h.op[op] == 1, "opcode %u retires once", op); + CHECK(es.anticlock == V4_OPCODE_COUNT, "one anticlock tick per opcode"); + + v4_exec_op(&n, &es, &h, V4_OPCODE_COUNT, 0, 0); + CHECK(es.anticlock == V4_OPCODE_COUNT, "a non-opcode retires nothing"); +} + +#if V4_CELL_BITS == 64 +static void test_iword_in_wide_cell(void) +{ + /* D-9: the instruction word is the low 32 bits of the cell. The high half + * is not decoded and does not reach a branch target. */ + v4_cell junk = (v4_cell)0xA5A5A5A500000000ULL; + + fresh(); dpush(3); + n.mem[0] = junk | word6(V4_OP_DUP, V4_OP_ADD, NOP, NOP, NOP, NOP); n.p = 0; + CHECK(v4_exec_step_word(&n, &es, &h) == 6, "wide cell: six slots"); + CHECK(n.ds.t == 6, "wide cell: decode ignores the high half"); + + fresh(); n.mem[10] = junk | bword(0, V4_OP_JUMP, 300); n.p = 10; + (void)v4_exec_step_word(&n, &es, &h); + CHECK(n.p == 300, "wide cell: branch ignores the high half"); +} +#endif + +/* Many opcodes on arbitrary values. The point is the sanitizer build: no + * opcode may overflow a signed cell or shift out of range, whatever is on the + * stacks. Memory opcodes are left out because A, B and P would be arbitrary. */ +static void test_soak(void) +{ + static const unsigned safe[] = { + V4_OP_MUL_STEP, V4_OP_TWO_STAR, V4_OP_TWO_SLASH, V4_OP_INV, V4_OP_ADD, + V4_OP_AND, V4_OP_XOR, V4_OP_DROP, V4_OP_DUP, V4_OP_RPOP, V4_OP_OVER, + V4_OP_PUSH_A, V4_OP_NOP, V4_OP_PUSH, V4_OP_BANG_B, V4_OP_BANG_A + }; + uint64_t seed = 0x9E3779B97F4A7C15ULL; + const unsigned count = 200000; + + fresh(); + dpush(MINC); dpush(MAXC); dpush(-1); dpush(1); + for (unsigned i = 0; i < count; i++) { + seed = seed * 6364136223846793005ULL + 1442695040888963407ULL; + if ((seed >> 60) == 0) dpush((v4_cell)(seed >> 7)); + v4_exec_op(&n, &es, &h, safe[(seed >> 33) % (sizeof safe / sizeof safe[0])], 0, 0); + } + CHECK(es.anticlock + n.faults == count && n.faults > 0 && es.anticlock > 0, + "soak: every opcode retired or faulted (%u faults)", n.faults); + CHECK(v4_node_guards_intact(&n), "soak left the guards intact"); +} + +#define HANDLER ((v4_cell)40) + +/* D-16: the stacks are guarded. An opcode that would pop an empty stack, + * read a T or S that is not there, or push onto a full stack is a fault: it + * does nothing, both stacks are emptied, and P is that kind's word of the + * handler table. */ +static void test_stack_faults(void) +{ + /* what each opcode needs on the data and return stacks, and which it adds one to */ + static const struct { unsigned op, dneed, rneed, dgrow, rgrow; const char *name; } m[] = { + { V4_OP_SEMI, 0, 1, 0, 0, ";" }, { V4_OP_EX, 0, 1, 0, 0, "ex" }, { V4_OP_JUMP, 0, 0, 0, 0, "jump" }, + { V4_OP_CALL, 0, 0, 0, 1, "call" }, { V4_OP_UNEXT, 0, 1, 0, 0, "unext" }, { V4_OP_NEXT, 0, 1, 0, 0, "next" }, + { V4_OP_IF, 1, 0, 0, 0, "if" }, { V4_OP_MINUS_IF, 1, 0, 0, 0, "-if" }, + { V4_OP_FETCH_P, 0, 0, 1, 0, "@p" }, { V4_OP_FETCH_INC, 0, 0, 1, 0, "@+" }, { V4_OP_FETCH_B, 0, 0, 1, 0, "@b" }, + { V4_OP_FETCH_A, 0, 0, 1, 0, "@" }, { V4_OP_STORE_P, 1, 0, 0, 0, "!p" }, { V4_OP_STORE_INC, 1, 0, 0, 0, "!+" }, + { V4_OP_STORE_B, 1, 0, 0, 0, "!b" }, { V4_OP_STORE_A, 1, 0, 0, 0, "!" }, { V4_OP_MUL_STEP, 2, 0, 0, 0, "+*" }, + { V4_OP_TWO_STAR, 1, 0, 0, 0, "2*" }, { V4_OP_TWO_SLASH, 1, 0, 0, 0, "2/" }, { V4_OP_INV, 1, 0, 0, 0, "inv" }, + { V4_OP_ADD, 2, 0, 0, 0, "+" }, { V4_OP_AND, 2, 0, 0, 0, "and" }, { V4_OP_XOR, 2, 0, 0, 0, "xor" }, + { V4_OP_DROP, 1, 0, 0, 0, "drop" }, { V4_OP_DUP, 1, 0, 1, 0, "dup" }, { V4_OP_RPOP, 0, 1, 1, 0, "pop" }, + { V4_OP_OVER, 2, 0, 1, 0, "over" }, { V4_OP_PUSH_A, 0, 0, 1, 0, "a" }, { V4_OP_NOP, 0, 0, 0, 0, "nop" }, + { V4_OP_PUSH, 1, 0, 0, 1, "push" }, { V4_OP_BANG_B, 1, 0, 0, 0, "b!" }, { V4_OP_BANG_A, 1, 0, 0, 0, "a!" }, + }; + unsigned k, i; + + CHECK(sizeof m / sizeof m[0] == V4_OPCODE_COUNT, "every opcode is in the table"); + for (k = 0; k < sizeof m / sizeof m[0]; k++) { + unsigned dd, rd; + /* every depth of both stacks: the opcode faults exactly when the table says */ + for (dd = 0; dd <= V4_DATA_DEPTH; dd++) + for (rd = 0; rd <= V4_RET_DEPTH; rd += (rd == 2 ? V4_RET_DEPTH - 3u : 1u)) { + unsigned want = 99, before; + fresh(); + v4_node_fault_attach(&n, HANDLER); + for (i = 0; i < dd; i++) dpush((v4_cell)(100 + i)); + for (i = 0; i < rd; i++) rpush((v4_cell)(200 + i)); + n.a = 7; n.b = 8; n.p = 3; + if (dd < m[k].dneed) want = V4_FAULT_DATA_UNDER; + else if (rd < m[k].rneed) want = V4_FAULT_RET_UNDER; + else if (m[k].dgrow && dd == V4_DATA_DEPTH) want = V4_FAULT_DATA_OVER; + else if (m[k].rgrow && rd == V4_RET_DEPTH) want = V4_FAULT_RET_OVER; + before = h.op[m[k].op]; + v4_exec_op(&n, &es, &h, m[k].op, 0, 0); + if (want == 99) { + CHECK(n.faults == 0 && h.op[m[k].op] == before + 1, "%s with %u and %u on the stacks runs", m[k].name, dd, rd); + continue; + } + CHECK(n.faults == 1 && n.fault_kind == want, "%s with %u and %u on the stacks: fault %u (got %u)", m[k].name, dd, rd, want, n.fault_kind); + CHECK(n.p == HANDLER + (v4_cell)want && !n.stopped, "%s: P is that kind's handler", m[k].name); + CHECK(h.op[m[k].op] == before, "%s: it did not retire", m[k].name); + CHECK(n.rs.depth == 0 && n.ds.depth == 0, "%s: both stacks are emptied", m[k].name); + CHECK(n.a == 7 && n.b == 8, "%s: A and B untouched", m[k].name); + } + } + + /* the rest of the word does not run, and the handler does */ + fresh(); v4_node_fault_attach(&n, HANDLER); + n.mem[HANDLER + V4_FAULT_DATA_UNDER] = word6(V4_OP_PUSH_A, V4_OP_PUSH_A, V4_OP_ADD, NOP, NOP, NOP); + n.a = 21; dpush(5); + n.mem[0] = word6(V4_OP_DROP, V4_OP_DROP, V4_OP_PUSH_A, V4_OP_PUSH_A, NOP, NOP); n.p = 0; + CHECK(v4_exec_step_word(&n, &es, &h) == 1 && n.ds.depth == 0 && n.p == HANDLER + (v4_cell)V4_FAULT_DATA_UNDER, "a second drop faults; nothing after it runs"); + CHECK(v4_exec_step_word(&n, &es, &h) == 6 && n.ds.t == 42 && n.ds.depth == 1, "the handler runs on the emptied stack"); + + /* ten pushes fit, the eleventh faults; nine calls fit, the tenth faults */ + fresh(); v4_node_fault_attach(&n, HANDLER); + for (i = 0; i < V4_DATA_DEPTH; i++) { n.a = (v4_cell)i; v4_exec_op(&n, &es, &h, V4_OP_PUSH_A, 0, 0); } + CHECK(n.faults == 0 && n.ds.depth == V4_DATA_DEPTH && n.ds.t == (v4_cell)(V4_DATA_DEPTH - 1u), "the data stack holds %u", (unsigned)V4_DATA_DEPTH); + v4_exec_op(&n, &es, &h, V4_OP_PUSH_A, 0, 0); + CHECK(n.faults == 1 && n.fault_kind == V4_FAULT_DATA_OVER, "one more is a fault"); + fresh(); v4_node_fault_attach(&n, HANDLER); + for (i = 0; i < V4_RET_DEPTH; i++) v4_exec_op(&n, &es, &h, V4_OP_CALL, 0, 0); + CHECK(n.faults == 0 && n.rs.depth == V4_RET_DEPTH, "the return stack holds %u", (unsigned)V4_RET_DEPTH); + v4_exec_op(&n, &es, &h, V4_OP_CALL, 0, 0); + CHECK(n.faults == 1 && n.fault_kind == V4_FAULT_RET_OVER && n.rs.depth == 0, "one more call is a fault"); + + /* with no handler the node stops */ + fresh(); + CHECK(run1(V4_OP_DROP) == 0 && n.stopped && n.fault_kind == V4_FAULT_DATA_UNDER, "with no handler a stack fault stops the node"); + + /* the stack registers */ + fresh(); v4_node_fault_attach(&n, HANDLER); + v4_node_stack_regs_attach(&n, 900, 901); + n.mem[900] = 55; n.mem[901] = 66; + dpush(1); dpush(2); dpush(3); rpush(7); rpush(8); + n.a = 900; v4_exec_op(&n, &es, &h, V4_OP_FETCH_A, 0, 0); + CHECK(n.ds.t == 3 && n.ds.depth == 4, "DSTACK-DEPTH reads the depth, its own push not counted"); + n.b = 901; v4_exec_op(&n, &es, &h, V4_OP_FETCH_B, 0, 0); + CHECK(n.ds.t == 2 && n.ds.depth == 5, "RSTACK-DEPTH reads the return stack's"); + v4_exec_op(&n, &es, &h, V4_OP_STORE_B, 0, 0); + CHECK(n.rs.depth == 0 && n.ds.depth == 4 && n.mem[901] == 66, "a store to RSTACK-DEPTH empties the return stack and writes no memory"); + v4_exec_op(&n, &es, &h, V4_OP_STORE_A, 0, 0); + CHECK(n.ds.depth == 0 && n.mem[900] == 55, "a store to DSTACK-DEPTH empties the data stack"); + n.a = 900; v4_exec_op(&n, &es, &h, V4_OP_FETCH_A, 0, 0); + CHECK(n.ds.t == 0 && n.ds.depth == 1 && n.faults == 0, "and it then reads 0"); + v4_node_reset(&n); + CHECK(n.dstack_reg == -1 && n.rstack_reg == -1, "reset detaches the stack registers"); + n.mem[900] = 55; n.a = 900; v4_exec_op(&n, &es, &h, V4_OP_FETCH_A, 0, 0); + CHECK(n.ds.t == 55, "detached, the address is memory"); +} + +/* D-18: NODE-ERROR as a trap. A store of a non-zero code is a fault of its + * own kind: the code is written, the return stack is emptied, the data stack + * is left, and P is the sixth word of the table. */ +static void test_raised_errors(void) +{ + static const unsigned store[] = { V4_OP_STORE_A, V4_OP_STORE_B, V4_OP_STORE_INC }; + unsigned k; + for (k = 0; k < 3; k++) { + fresh(); v4_node_fault_attach(&n, HANDLER); + v4_node_error_attach(&n, 700); + dpush(11); dpush(22); dpush(5); rpush(1); rpush(2); + n.a = 700; n.b = 700; + n.mem[0] = word6(store[k], V4_OP_DROP, V4_OP_DROP, NOP, NOP, NOP); n.p = 0; + CHECK(v4_exec_step_word(&n, &es, &h) == 1, "the store retires and nothing after it runs"); + CHECK(n.faults == 1 && n.fault_kind == V4_FAULT_RAISED && n.fault_addr == 5 && n.p == HANDLER + (v4_cell)V4_FAULT_RAISED, + "a non-zero store to NODE-ERROR raises: kind %u, code %lld", n.fault_kind, (long long)n.fault_addr); + CHECK(n.mem[700] == 5, "the code is in NODE-ERROR"); + CHECK(n.rs.depth == 0 && n.ds.depth == 2 && n.ds.t == 22 && n.ds.s == 11, "the return stack is emptied and the data stack left"); + /* zero clears it and is no fault */ + dpush(0); n.a = 700; v4_exec_op(&n, &es, &h, V4_OP_STORE_A, 0, 0); + CHECK(n.faults == 1 && n.mem[700] == 0, "a store of zero is an ordinary store"); + dpush(-1); n.a = 699; v4_exec_op(&n, &es, &h, V4_OP_STORE_A, 0, 0); + CHECK(n.faults == 1 && n.mem[699] == -1, "and so is a store next to it"); + } + /* detached: ordinary memory */ + fresh(); v4_node_fault_attach(&n, HANDLER); + CHECK(n.error_reg == -1, "a fresh node has no error trap"); + dpush(7); n.a = 700; v4_exec_op(&n, &es, &h, V4_OP_STORE_A, 0, 0); + CHECK(n.faults == 0 && n.mem[700] == 7, "not attached, NODE-ERROR is memory and the word goes on"); + /* with no table the node stops */ + fresh(); v4_node_error_attach(&n, 700); + dpush(7); n.a = 700; + CHECK(run1(V4_OP_STORE_A) == 1 && n.stopped && n.mem[700] == 7, "with no handler a raised error stops the node"); + v4_node_reset(&n); + CHECK(n.error_reg == -1, "reset detaches the trap"); + /* the table must be six words inside memory */ + v4_node_fault_attach(&n, (v4_cell)(V4_NODE_WORDS - V4_FAULT_KINDS)); + CHECK(n.fault_vector == (v4_cell)(V4_NODE_WORDS - V4_FAULT_KINDS), "a table that ends with memory is accepted"); + v4_node_fault_attach(&n, (v4_cell)(V4_NODE_WORDS - V4_FAULT_KINDS + 1u)); + CHECK(n.fault_vector == -1, "one that runs past it is not"); +} + +/* D-14: an address outside node memory is a fault. The opcode does nothing, + * the rest of its word is not executed, and P becomes the handler; with no + * handler the node stops. */ +static void test_address_faults(void) +{ + static const v4_cell bad[] = { -1, (v4_cell)V4_NODE_WORDS, (v4_cell)V4_NODE_WORDS + 1, MINC, MAXC, (v4_cell)(V4_NODE_WORDS * 4u) }; + static const struct { unsigned op; int reg; const char *name; } m[] = { + { V4_OP_FETCH_A, 'a', "@" }, { V4_OP_FETCH_INC, 'a', "@+" }, { V4_OP_FETCH_B, 'b', "@b" }, + { V4_OP_STORE_A, 'a', "!" }, { V4_OP_STORE_INC, 'a', "!+" }, { V4_OP_STORE_B, 'b', "!b" }, + }; + unsigned i, k; + + for (i = 0; i < sizeof bad / sizeof bad[0]; i++) + for (k = 0; k < sizeof m / sizeof m[0]; k++) { + unsigned retired; + fresh(); + v4_node_fault_attach(&n, HANDLER); + dpush(11); dpush(22); + n.a = m[k].reg == 'a' ? bad[i] : 7; + n.b = m[k].reg == 'b' ? bad[i] : 7; + n.mem[0] = word6(V4_OP_DUP, m[k].op, V4_OP_DROP, V4_OP_DROP, NOP, NOP); + n.p = 0; + retired = v4_exec_step_word(&n, &es, &h); + CHECK(n.faults == 1 && n.fault_addr == bad[i] && !n.stopped, "%s at %lld is a fault", m[k].name, (long long)bad[i]); + CHECK(n.p == HANDLER, "%s: P is the handler", m[k].name); + CHECK(retired == 1, "%s: only the dup before it retired (%u)", m[k].name, retired); + CHECK(n.ds.depth == 0 && n.rs.depth == 0, "%s: both stacks are emptied", m[k].name); + CHECK(n.a == (m[k].reg == 'a' ? bad[i] : 7) && n.b == (m[k].reg == 'b' ? bad[i] : 7), "%s: A and B untouched", m[k].name); + CHECK(v4_node_guards_intact(&n), "%s: guards intact", m[k].name); + } + + /* the last word of memory is not a fault, and the first is not */ + fresh(); v4_node_fault_attach(&n, HANDLER); + n.mem[V4_NODE_WORDS - 1u] = 77; n.a = (v4_cell)(V4_NODE_WORDS - 1u); run1(V4_OP_FETCH_A); + CHECK(n.faults == 0 && n.ds.t == 77, "the last word of memory can be fetched"); + fresh(); v4_node_fault_attach(&n, HANDLER); + dpush(5); n.b = (v4_cell)(V4_NODE_WORDS - 1u); run1(V4_OP_STORE_B); + CHECK(n.faults == 0 && n.mem[V4_NODE_WORDS - 1u] == 5, "and stored"); + + /* P outside memory: nothing is fetched or executed */ + for (i = 0; i < sizeof bad / sizeof bad[0]; i++) { + fresh(); v4_node_fault_attach(&n, HANDLER); + dpush(1); + n.p = bad[i]; + CHECK(v4_exec_step_word(&n, &es, &h) == 0 && n.faults == 1 && n.fault_addr == bad[i] && n.p == HANDLER && n.ds.t == 1, + "P at %lld is a fault", (long long)bad[i]); + } + /* @p in the last word of memory: its literal would be past the end */ + fresh(); v4_node_fault_attach(&n, HANDLER); + dpush(1); + n.mem[V4_NODE_WORDS - 1u] = word6(V4_OP_FETCH_P, NOP, NOP, NOP, NOP, NOP); + n.p = (v4_cell)(V4_NODE_WORDS - 1u); + CHECK(v4_exec_step_word(&n, &es, &h) == 0 && n.faults == 1 && n.fault_addr == (v4_cell)V4_NODE_WORDS && n.p == HANDLER && n.ds.t == 1, + "a literal past the end of memory is a fault"); + fresh(); v4_node_fault_attach(&n, HANDLER); + dpush(1); + n.mem[V4_NODE_WORDS - 1u] = word6(V4_OP_STORE_P, NOP, NOP, NOP, NOP, NOP); + n.p = (v4_cell)(V4_NODE_WORDS - 1u); + CHECK(v4_exec_step_word(&n, &es, &h) == 0 && n.faults == 1 && n.p == HANDLER && n.ds.t == 1, "and so is !p there"); + + /* a jump out of memory faults at the next fetch */ + fresh(); v4_node_fault_attach(&n, HANDLER); + rpush(-5); + n.mem[0] = word6(V4_OP_SEMI, NOP, NOP, NOP, NOP, NOP); + n.p = 0; + CHECK(v4_exec_step_word(&n, &es, &h) == 1 && n.p == -5 && n.faults == 0, "; to an address outside memory is not yet a fault"); + CHECK(v4_exec_step_word(&n, &es, &h) == 0 && n.p == HANDLER && n.faults == 1 && n.fault_addr == -5, "the fetch there is"); + + /* the handler runs, and faults are counted */ + fresh(); v4_node_fault_attach(&n, HANDLER); + n.mem[HANDLER] = word6(V4_OP_PUSH_A, V4_OP_PUSH_A, V4_OP_ADD, NOP, NOP, NOP); + dpush(21); n.a = -1; run1(V4_OP_FETCH_A); + CHECK(v4_exec_step_word(&n, &es, &h) == 6 && n.ds.t == -2 && n.ds.depth == 1, "the handler's code runs next, on empty stacks"); + n.a = -1; run1(V4_OP_FETCH_A); dpush(1); n.a = -1; run1(V4_OP_STORE_A); + CHECK(n.faults == 3 && n.fault_kind == V4_FAULT_ADDRESS, "each fault is counted"); + v4_node_fault_attach(&n, HANDLER); + CHECK(n.faults == 0 && n.fault_vector == HANDLER, "attaching clears the count"); + + /* with no handler the node stops */ + fresh(); + CHECK(n.fault_vector == -1 && n.faults == 0 && !n.stopped, "a fresh node has no handler and has not stopped"); + dpush(9); n.a = -1; + CHECK(run1(V4_OP_FETCH_A) == 0 && n.stopped && n.faults == 1 && n.ds.depth == 0, "with no handler a fault stops the node"); + n.a = 9; + n.mem[0] = word6(V4_OP_PUSH_A, V4_OP_PUSH_A, V4_OP_ADD, NOP, NOP, NOP); n.p = 0; + CHECK(v4_exec_step_word(&n, &es, &h) == 0 && n.p == 0 && n.ds.depth == 0, "a stopped node executes nothing"); + v4_node_fault_attach(&n, HANDLER); + CHECK(!n.stopped && v4_exec_step_word(&n, &es, &h) == 6 && n.ds.t == 18, "attaching a handler lets it run again"); + v4_node_fault_attach(&n, (v4_cell)V4_NODE_WORDS); + CHECK(n.fault_vector == -1, "a handler address outside memory detaches"); + v4_node_reset(&n); + CHECK(n.fault_vector == -1 && !n.stopped && n.faults == 0, "reset detaches the handler"); + + /* the C accessors never index outside memory */ + fresh(); + for (i = 0; i < sizeof bad / sizeof bad[0]; i++) { + v4_node_store(&n, bad[i], 123); + CHECK(v4_node_load(&n, bad[i]) == 0 && v4_node_fetch(&n, bad[i]) == 0 && !v4_node_addr_ok(bad[i]), + "load, fetch and store at %lld touch nothing", (long long)bad[i]); + } + CHECK(n.faults == 0 && v4_node_guards_intact(&n) && v4_node_addr_ok(0) && v4_node_addr_ok((v4_cell)(V4_NODE_WORDS - 1u)), + "and they are not faults: only a running programme faults"); +} + +int main(void) +{ + printf("v4 exec tests: V4_CELL_BITS=%d\n", V4_CELL_BITS); + + test_stack_ops(); + test_alu(); + test_mul_step(); + test_registers_and_rstack(); + test_memory(); + test_return_and_ex(); + test_branches(); + test_unext(); + test_retirement(); +#if V4_CELL_BITS == 64 + test_iword_in_wide_cell(); +#endif + test_stack_faults(); + test_raised_errors(); + test_address_faults(); + test_soak(); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_fabric.c b/v4/tests/test_fabric.c new file mode 100644 index 00000000..d6000a45 --- /dev/null +++ b/v4/tests/test_fabric.c @@ -0,0 +1,367 @@ +/* test_fabric.c -- nodes that talk: ports that block on a read as well as a + * write, a node born empty that executes what arrives at its port, and the + * fabric of nodes and wiring that changes while they run. + * docs/v4.0.0/MESH.md section 4 and step 1. + * + * At the level of opcodes: no word of any vocabulary is defined here. + */ +#include "v4/asm.h" +#include "v4/capsule.h" +#include "v4/fabric.h" +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +/* The memory map is open (D-4); the test chooses where the ports are. */ +#define PB ((v4_cell)(V4_NODE_WORDS - 16u)) /* port 0 */ +#define ANY (PB + (v4_cell)V4_PORT_ANY) +#define ORG ((v4_cell)16) /* where a test's programme starts */ +#define OUT ((v4_cell)900) /* where it leaves what it found */ + +#define NODES 8 +static v4_fabric_node pool[NODES]; +static v4_place places[4], more_places[NODES]; +static v4_fabric f; +static v4_asm as; + +/* the node with that number in the fabric */ +#define ND(id) (v4_fabric_node_at(&f, (id))) + +#define O(name) v4_asm_op(&as, V4_OP_##name) +#define LIT(v) v4_asm_lit(&as, (v4_cell)(v)) + +/* A node with a programme already in it, started at ORG: for the tests that + * are about talking and not about being born. */ +static unsigned loaded(unsigned k) +{ + int id = v4_fabric_add(&f, &pool[k], PB); + pool[k].n.p = ORG; + v4_asm_begin(&as, &pool[k].n, ORG); + return (unsigned)id; +} + +/* the programme ends by waiting at a port nothing is wired to */ +static void wait_for_ever(void) { LIT(PB + 7); O(BANG_B); O(FETCH_B); (void)v4_asm_label(&as); } /* and the last word is written out */ + +/* Let time pass until nothing more can happen, or `max` steps. */ +static unsigned settle(unsigned max) +{ + unsigned steps = 0; + while (steps < max && v4_fabric_step(&f) != 0) steps++; + return steps; +} + +/* ---- a device: a neighbour that is not a node ---- */ +typedef struct { const v4_cell *words; unsigned count, at; v4_cell took[16]; unsigned took_n; } stream; +static int stream_give(void *self, v4_cell *value) +{ + stream *s = (stream *)self; + if (s->at >= s->count) return 0; + *value = s->words[s->at++]; + return 1; +} +static int stream_take(void *self, v4_cell value) +{ + stream *s = (stream *)self; + if (s->took_n >= 16) return 0; + s->took[s->took_n++] = value; + return 1; +} + +/* for v4_capsule_write: each word of the capsule, into the stream's own list */ +static void collect(void *self, v4_cell word) +{ + stream *s = (stream *)self; + ((v4_cell *)s->words)[s->count++] = word; +} + +/* What a neighbour sends an empty node to put `count` words at `addr` and + * start there (MESH.md section 5): for the F18, and for this node, code a + * node executes straight from its port. */ +static unsigned capsule(v4_cell *out, const v4_cell *words, unsigned count, v4_cell addr) +{ + static const unsigned set_up[V4_SLOT_COUNT] = { V4_OP_FETCH_P, V4_OP_BANG_A, V4_OP_FETCH_P, V4_OP_PUSH, V4_OP_NOP, V4_OP_NOP }; + static const unsigned pump[V4_SLOT_COUNT] = { V4_OP_FETCH_P, V4_OP_STORE_INC, V4_OP_UNEXT, V4_OP_NOP, V4_OP_NOP, V4_OP_NOP }; + static v4_node scratch; + v4_asm j; + unsigned at = 0, i; + + out[at++] = (v4_cell)v4_iword_assemble(set_up, 0); /* @p a! @p push */ + out[at++] = addr; + out[at++] = (v4_cell)(count - 1); + out[at++] = (v4_cell)v4_iword_assemble(pump, 0); /* @p !+ unext */ + for (i = 0; i < count; i++) out[at++] = words[i]; + v4_node_reset(&scratch); + v4_asm_begin(&j, &scratch, 0); + v4_asm_branch(&j, V4_OP_JUMP, addr); /* jump addr */ + (void)v4_asm_label(&j); + out[at++] = scratch.mem[0]; + return at; +} + +int main(void) +{ + unsigned a, b, c, i, steps; + + printf("v4 fabric tests: V4_CELL_BITS=%d, %u ports to a node\n", V4_CELL_BITS, (unsigned)V4_PORTS); + + /* ---- a node newly born ---- */ + v4_fabric_init(&f, places, 4); + CHECK(v4_fabric_node_at(&f, 0) == 0 && v4_fabric_step(&f) == 0, "an empty fabric: no nodes, and nothing happens"); + a = (unsigned)v4_fabric_add(&f, &pool[0], PB); + CHECK(a == 0 && v4_fabric_node_at(&f, 0) == &pool[0], "a node is born and has a number"); + CHECK(pool[0].n.p == ANY && pool[0].n.ds.depth == 0 && pool[0].n.rs.depth == 0, "its P is at \"any port\" and its stacks are empty"); + for (i = 0; i < V4_NODE_WORDS && pool[0].n.mem[i] == 0; i++) { } + CHECK(i == V4_NODE_WORDS, "and there is nothing in its memory"); + CHECK(v4_fabric_step(&f) == 0 && pool[0].n.reading && pool[0].n.read_port == V4_PORT_ANY, "it is blocked reading its ports"); + CHECK(v4_fabric_step(&f) == 0 && pool[0].es.anticlock == 0, "and executes nothing while it waits: its anti-clock has not moved"); + CHECK(v4_fabric_remove(&f, a) == &pool[0] && v4_fabric_node_at(&f, 0) == 0, "it is removed, and its storage comes back"); + + /* ---- two nodes exchange words ---- */ + v4_fabric_init(&f, places, 4); + a = loaded(0); /* writes three words, then reads one */ + LIT(PB + 2); O(BANG_B); LIT(10); O(STORE_B); LIT(20); O(STORE_B); LIT(12); O(STORE_B); + O(FETCH_B); LIT(OUT); O(BANG_A); O(STORE_A); + wait_for_ever(); + CHECK(v4_asm_ok(&as), "the writer assembles"); + b = loaded(1); /* reads three, writes their sum back */ + LIT(PB + 5); O(BANG_B); O(FETCH_B); O(FETCH_B); O(FETCH_B); O(ADD); O(ADD); O(STORE_B); + wait_for_ever(); + CHECK(v4_asm_ok(&as), "the reader assembles"); + + steps = settle(1000); + CHECK(ND(a)->n.asking && ND(a)->n.ask_port == 2 && ND(a)->n.request == 10, "with no wire, the writer is blocked at its first write"); + CHECK(ND(b)->n.reading && ND(b)->n.read_port == 5, "and the reader at its first read"); + CHECK(v4_fabric_wire(&f, a, 2, b, 5), "port 2 of one is wired to port 5 of the other, while they wait"); + steps = settle(1000); + CHECK(steps < 1000, "then everything that can happen happens, and stops: %u steps", steps); + CHECK(ND(a)->n.mem[OUT] == 42, "three words went one way and their sum came back: %ld", (long)ND(a)->n.mem[OUT]); + CHECK(ND(a)->n.reading && ND(b)->n.reading, "and both are waiting again"); + { + v4_uheat_t ca = ND(a)->es.anticlock, cb = ND(b)->es.anticlock; + for (i = 0; i < 20; i++) (void)v4_fabric_step(&f); + CHECK(ND(a)->es.anticlock == ca && ND(b)->es.anticlock == cb, "a node that is waiting executes nothing, however long"); + } + + /* ---- an empty node is filled through its port, and runs what it was sent ---- */ + { + static v4_node src; + static v4_cell prog[64], sent[96]; + static stream s; + static v4_device dev; + unsigned len, count; + + v4_node_reset(&src); /* the programme, assembled somewhere to be sent */ + v4_asm_begin(&as, &src, ORG); + LIT(77); LIT(OUT); O(BANG_A); O(STORE_A); + LIT(PB + 1); O(BANG_B); LIT(99); O(STORE_B); + wait_for_ever(); + count = (unsigned)(v4_asm_label(&as) - ORG); + CHECK(v4_asm_ok(&as) && count < 64, "a programme to send: %u words", count); + for (i = 0; i < count; i++) prog[i] = src.mem[ORG + i]; + len = capsule(sent, prog, count, ORG); + + /* sent by a device */ + v4_fabric_init(&f, places, 4); + memset(&s, 0, sizeof s); + s.words = sent; s.count = len; + dev.give = stream_give; dev.take = stream_take; dev.self = &s; + b = (unsigned)v4_fabric_add(&f, &pool[2], PB); + CHECK(v4_fabric_wire_device(&f, b, 3, &dev), "a device is wired to port 3 of a node newly born"); + steps = settle(5000); + CHECK(s.at == len, "the node took every word it was sent: %u of %u", s.at, len); + for (i = 0; i < count && ND(b)->n.mem[ORG + i] == prog[i]; i++) { } + CHECK(i == count, "the programme is in its memory, where it was sent to"); + CHECK(ND(b)->n.mem[OUT] == 77, "and it ran: it left its mark"); + CHECK(ND(b)->n.asking && ND(b)->n.ask_port == 1 && ND(b)->n.request == 99, "and is now writing to its port 1, which nothing is wired to"); + CHECK(v4_fabric_wire_device(&f, b, 1, &dev) && settle(100) < 100 && s.took_n == 1 && s.took[0] == 99, + "a device wired there takes what it wrote"); + + /* sent by another node, which holds it in its own memory */ + v4_fabric_init(&f, places, 4); + a = loaded(0); + for (i = 0; i < len; i++) ND(a)->n.mem[200 + i] = sent[i]; + LIT(200); O(BANG_A); LIT(len - 1); O(PUSH); LIT(PB + 4); O(BANG_B); + (void)v4_asm_label(&as); + O(FETCH_INC); O(STORE_B); O(UNEXT); /* @+ !b unext: each write blocks in the middle of the word */ + wait_for_ever(); + CHECK(v4_asm_ok(&as), "a node that sends what is in its memory"); + b = (unsigned)v4_fabric_add(&f, &pool[2], PB); + CHECK(v4_fabric_wire(&f, a, 4, b, 0), "is wired to a node newly born"); + steps = settle(5000); + CHECK(ND(b)->n.mem[OUT] == 77 && ND(b)->n.asking && ND(b)->n.request == 99, "which takes it in and runs it, as from the device"); + CHECK(ND(b)->n.last_from == 0, "it was listening to any port, and knows which it heard from: %u", ND(b)->n.last_from); + } + + /* ---- a capsule of F18 code: any node's memory, sent to an empty node (capsule.h) ---- */ + { + static v4_node src; + static v4_cell sent[400]; + static stream s; + static v4_device dev; + unsigned k; + + v4_node_reset(&src); + v4_asm_begin(&as, &src, 40); /* a programme, not at the start of memory */ + LIT(123); LIT(OUT); O(BANG_A); O(STORE_A); + wait_for_ever(); + CHECK(v4_asm_ok(&as), "a programme for the capsule"); + src.mem[3] = 5; /* and words here and there: the first of memory, */ + src.mem[200] = -1; src.mem[202] = 7; /* two with one zero between them, */ + src.mem[300] = 9; src.mem[310] = 11; /* two with many, */ + src.mem[PB - 1] = 13; /* and the last before the ports */ + + memset(&s, 0, sizeof s); + s.words = sent; + dev.give = stream_give; dev.take = stream_take; dev.self = &s; + s.count = 0; + s.count = v4_capsule_write(&src, 40, collect, &s); + CHECK(s.count > 0 && s.count < 400, "the capsule is %u words for a memory of %u", s.count, (unsigned)V4_NODE_WORDS); + s.at = 0; + + v4_fabric_init(&f, places, 4); + b = (unsigned)v4_fabric_add(&f, &pool[0], PB); + CHECK(v4_fabric_wire_device(&f, b, 5, &dev), "it is sent to a node newly born"); + steps = settle(5000); + CHECK(s.at == s.count, "which takes all of it: %u of %u", s.at, s.count); + for (k = 0; k < V4_NODE_WORDS && ND(b)->n.mem[k] == (k == (unsigned)OUT ? 123 : src.mem[k]); k++) { } + CHECK(k == V4_NODE_WORDS, "its memory is then the same, word for word (first difference at %u)", k); + CHECK(ND(b)->n.mem[OUT] == 123 && ND(b)->n.reading, "and it was started where the capsule says, and ran"); + } + + /* ---- a word is passed on by a node in between ---- */ + v4_fabric_init(&f, places, 4); + a = loaded(0); + LIT(PB + 0); O(BANG_B); LIT(7); O(STORE_B); LIT(8); O(STORE_B); LIT(9); O(STORE_B); + wait_for_ever(); + b = loaded(1); /* whatever comes on any port goes out on port 6 */ + LIT(ANY); O(BANG_A); LIT(PB + 6); O(BANG_B); + { + v4_cell again = v4_asm_label(&as); + O(FETCH_A); O(STORE_B); + v4_asm_branch(&as, V4_OP_JUMP, again); + } + c = loaded(2); + LIT(PB + 1); O(BANG_B); LIT(OUT); O(BANG_A); O(FETCH_B); O(STORE_INC); O(FETCH_B); O(STORE_INC); O(FETCH_B); O(STORE_INC); + wait_for_ever(); + CHECK(v4_asm_ok(&as), "three nodes in a row assemble"); + CHECK(v4_fabric_wire(&f, a, 0, b, 2) && v4_fabric_wire(&f, b, 6, c, 1), "the first is wired to the second, the second to the third"); + steps = settle(2000); + CHECK(ND(c)->n.mem[OUT] == 7 && ND(c)->n.mem[OUT + 1] == 8 && ND(c)->n.mem[OUT + 2] == 9, + "what the first wrote reached the third, in order, through the one in between"); + CHECK(ND(b)->n.last_from == 2, "the one in between heard it on its port 2"); + + /* ---- the wiring is changed while they run ---- */ + v4_fabric_init(&f, places, 4); + a = loaded(0); /* writes 1 2 3 4 ... to its port 0 for ever */ + LIT(PB + 0); O(BANG_B); LIT(0); + { + v4_cell again = v4_asm_label(&as); + LIT(1); O(ADD); O(DUP); O(STORE_B); + v4_asm_branch(&as, V4_OP_JUMP, again); + } + b = loaded(1); LIT(PB + 3); O(BANG_B); O(FETCH_B); LIT(OUT); O(BANG_A); O(STORE_A); wait_for_ever(); + c = loaded(2); LIT(PB + 3); O(BANG_B); O(FETCH_B); LIT(OUT); O(BANG_A); O(STORE_A); wait_for_ever(); + CHECK(v4_asm_ok(&as), "a writer and two readers assemble"); + CHECK(v4_fabric_wire(&f, a, 0, b, 3), "the writer is wired to the first reader"); + (void)settle(500); + CHECK(ND(b)->n.mem[OUT] == 1 && ND(c)->n.mem[OUT] == 0, "who gets its first word"); + CHECK(v4_fabric_wire(&f, a, 0, c, 3), "the same port is wired to the second reader instead"); + (void)settle(500); + CHECK(ND(c)->n.mem[OUT] == 2, "who gets its next: %ld", (long)ND(c)->n.mem[OUT]); + CHECK(ND(a)->n.asking && ND(a)->n.request == 3, "and the writer waits with its third"); + CHECK(v4_fabric_unwire(&f, a, 0) && settle(100) == 0 && ND(a)->n.asking, "with the wire cut it goes on waiting"); + v4_fabric_gone_error(&f, 18); + CHECK(settle(100) == 0 && ND(a)->n.asking && ND(a)->n.faults == 0, "and still does when the fabric has an error for it: a bare node cannot take one"); + v4_node_error_attach(&ND(a)->n, OUT + 20); + v4_node_fault_attach(&ND(a)->n, 900); + CHECK(v4_fabric_step(&f) == 1 && !ND(a)->n.asking && ND(a)->n.fault_kind == V4_FAULT_RAISED && ND(a)->n.fault_addr == 18 + && ND(a)->n.p == 900 + (v4_cell)V4_FAULT_RAISED && ND(a)->n.mem[OUT + 20] == 18, + "a node that can take an error is let go, and the error is raised on it: its P is its handler"); + CHECK(!v4_node_port_gone(&ND(c)->n, 18), "a node that is not blocked at a port is not touched"); + + /* ---- asleep, awake, and removed, while looping; and a node born while others run ---- */ + v4_fabric_init(&f, places, 4); + a = loaded(0); /* counts in OUT for ever */ + LIT(OUT); O(BANG_A); + { + v4_cell again = v4_asm_label(&as); + O(FETCH_A); LIT(1); O(ADD); O(STORE_A); + v4_asm_branch(&as, V4_OP_JUMP, again); + } + b = loaded(1); /* and so does this one */ + LIT(OUT); O(BANG_A); + { + v4_cell again = v4_asm_label(&as); + O(FETCH_A); LIT(1); O(ADD); O(STORE_A); + v4_asm_branch(&as, V4_OP_JUMP, again); + } + CHECK(v4_asm_ok(&as), "two nodes that never stop assemble"); + for (i = 0; i < 100; i++) (void)v4_fabric_step(&f); + { + v4_cell ca = ND(a)->n.mem[OUT], cb = ND(b)->n.mem[OUT]; + v4_uheat_t clock = ND(a)->es.anticlock; + CHECK(ca > 0 && ca == cb, "each has had as much time as the other: %ld and %ld", (long)ca, (long)cb); + v4_fabric_sleep(&f, a); + for (i = 0; i < 100; i++) (void)v4_fabric_step(&f); + CHECK(ND(a)->n.mem[OUT] == ca && ND(a)->es.anticlock == clock, "put to sleep in the middle of its loop, one executes nothing"); + CHECK(ND(b)->n.mem[OUT] == 2 * cb, "and the other goes on as before: %ld", (long)ND(b)->n.mem[OUT]); + v4_fabric_wake(&f, a); + for (i = 0; i < 100; i++) (void)v4_fabric_step(&f); + CHECK(ND(a)->n.mem[OUT] == 2 * ca, "woken, it goes on from where it was: %ld", (long)ND(a)->n.mem[OUT]); + CHECK(v4_fabric_remove(&f, a) != 0 && v4_fabric_node_at(&f, a) == 0, "it is removed while it loops"); + cb = ND(b)->n.mem[OUT]; + for (i = 0; i < 100; i++) (void)v4_fabric_step(&f); + CHECK(ND(b)->n.mem[OUT] > cb, "and the other goes on"); + c = (unsigned)v4_fabric_add(&f, &pool[3], PB); + CHECK(c == a && pool[3].n.p == ANY, "a node is born while the other runs, into the place that was freed"); + for (i = 0; i < 10; i++) (void)v4_fabric_step(&f); + CHECK(pool[3].n.reading && pool[3].es.anticlock == 0, "and waits, empty, while the other runs"); + } + + /* ---- more room, while they run ---- */ + v4_fabric_init(&f, places, 4); + a = loaded(0); LIT(PB + 0); O(BANG_B); LIT(5); O(STORE_B); wait_for_ever(); + b = loaded(1); LIT(PB + 0); O(BANG_B); O(FETCH_B); LIT(OUT); O(BANG_A); O(STORE_A); wait_for_ever(); + (void)loaded(2); wait_for_ever(); + (void)loaded(3); wait_for_ever(); + CHECK(v4_fabric_add(&f, &pool[4], PB) == -1, "a fabric with no room left takes no more nodes"); + CHECK(v4_fabric_wire(&f, a, 0, b, 0), "two of its nodes are wired"); + v4_fabric_grow(&f, more_places, NODES); + CHECK(v4_fabric_add(&f, &pool[4], PB) == 4, "given more room, it takes another"); + (void)settle(500); + CHECK(ND(b)->n.mem[OUT] == 5, "and the nodes that were there are wired as they were"); + + /* ---- what cannot be wired ---- */ + CHECK(!v4_fabric_wire(&f, a, V4_PORTS, b, 0) && !v4_fabric_wire(&f, a, 0, 7, 0) && !v4_fabric_wire(&f, a, 1, a, 1), + "a port that is not there, a node that is not there, a port to itself: refused"); + CHECK(v4_fabric_wire(&f, a, 1, a, 2), "but one port of a node may be wired to another of the same node"); + + /* ---- a node looks at its neighbours before it writes (MESH.md 7a) ---- */ + v4_fabric_init(&f, places, 4); + a = loaded(0); LIT(PB + 0); O(BANG_B); LIT(5); O(STORE_B); wait_for_ever(); /* writes to its port 0 */ + c = loaded(1); LIT(PB + 1); O(BANG_B); O(FETCH_B); LIT(OUT); O(BANG_A); O(STORE_A); wait_for_ever(); /* reads its port 1 */ + for (i = 0; i < 10; i++) (void)v4_fabric_step(&f); + CHECK(ND(a)->n.asking && ND(c)->n.reading, "one node is waiting to write and another to read"); + b = loaded(2); + LIT(PB + (v4_cell)V4_PORTS + 2); O(BANG_B); O(FETCH_B); LIT(OUT); O(BANG_A); O(STORE_A); + LIT(PB + (v4_cell)V4_PORTS + 3); O(BANG_B); O(FETCH_B); LIT(OUT + 1); O(BANG_A); O(STORE_A); + wait_for_ever(); + CHECK(v4_fabric_wire(&f, b, 2, a, 0) && v4_fabric_wire(&f, b, 4, c, 1), "a third is wired to both"); + { + static stream none; + static v4_device sink; + sink.take = stream_take; sink.give = 0; sink.self = &none; + CHECK(v4_fabric_wire_device(&f, b, 6, &sink), "and to a device that takes what is written to it"); + } + for (i = 0; i < 20; i++) (void)v4_fabric_step(&f); + CHECK(ND(b)->n.mem[OUT] == (1 << 2), "it sees which of its ports has a neighbour waiting to write to it: %ld", (long)ND(b)->n.mem[OUT]); + CHECK(ND(b)->n.mem[OUT + 1] == ((1 << 4) | (1 << 6)), "and which have one waiting to read from it, or a device: %ld", (long)ND(b)->n.mem[OUT + 1]); + CHECK(ND(a)->n.asking && ND(a)->n.request == 5 && ND(c)->n.reading && ND(c)->n.mem[OUT] == 0, "looking takes nothing and gives nothing: both wait as they did"); + CHECK(!ND(b)->n.stopped && ND(b)->n.reading, "and the one that looked did not wait to look"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures != 0; +} diff --git a/v4/tests/test_foundation.c b/v4/tests/test_foundation.c new file mode 100644 index 00000000..25440262 --- /dev/null +++ b/v4/tests/test_foundation.c @@ -0,0 +1,3134 @@ +/* test_foundation.c -- the first DECOMPOSITION.md definitions, executed. + * + * Section 4 says of its colon definitions that each "has been traced by hand, + * but none has been executed". This file assembles the helpers, the sign and + * zero tests, U< and UM* exactly as written there (plus 2DUP and - from + * section 5, which U< needs) and runs them on the golden model against the C + * operation each one stands for. + * + * UM* is the full-range version that section 4 gives under D-3, checked + * against the reference v4_umul over every pair of the edge vectors and 20000 + * pseudo-random pairs at each cell width. UM/MOD is section 4's call-free + * version, checked against q*d + r = uhi:ulo, r < d over the edge vectors and + * 20000 pseudo-random cases with uhi < ud. SM/REM and DNEGATE are the + * call-free versions in sections 4 and 5.7; SM/REM is checked on dividends + * built as q*n + r. D+ is the call-free version in 5.7, checked against C + * over every quadruple of the edge vectors and pseudo-random pairs. /MOD, + * U>, ABS, S>D, DABS, M+, D-, D0= and D= are as written in section 5 and + * checked against C. Q.+, Q.-, Q.ABS and Q.NEG (section 5.26: the D+, D-, + * DABS and DNEGATE words) are checked against v3's 64-bit q48_add, q48_sub, + * q48_abs and 0 - q, with Q values two cells wide at both widths (D-10). + * Q.FROM-INT and Q.TO-INT are checked against n * 2^16 and q >> 16 in C and + * against v3's q48_from_u64 and q48_to_u64 where v4 keeps v3's meaning. + * <, =, D<, 2OVER, the call-free (D<), DMAX, DMIN and 2SWAP, and the Q + * comparisons on them, are checked against C, signed (D-8), and against v3 + * where v3's unsigned Q comparisons agree. Q.* is checked against an independent limb-by-limb + * reference, signed, and against v3's q48_mul for non-negative operands. + * Q./ (D-11) and its core (UQ/) are checked against an independent + * limb-by-limb long division, including NODE-ERROR, on width-native edge + * values, and against v3's q48_div where v4 keeps v3's meaning. + * Q.EXP is checked bit for bit against v3's q48_exp_approx for |q| < 16.0. + * Q.SQRT is checked bit for bit against v3's q48_sqrt_approx for + * 0 <= q < 2^48, and for 0 with NODE-ERROR below zero (D-12). + * Q.LOG is checked bit for bit against v3's q48_log_approx for x > 0, and + * for 0 with NODE-ERROR at or below zero. + * (Q.REDUCE), Q.SIN and Q.COS are checked bit for bit against v3's + * q48_reduce_angle, q48_sin_approx and q48_cos_approx on angles of every + * size and sign. The in-line constants Q.1, Q.0 and Q.SCALE are checked + * against v3's values and in use. Every word is + * also probed for how much of the 10- and 9-deep circular stacks (D-2) it + * leaves to its caller. + * + * Every call is made with a canary under the arguments, and the canary must + * still be directly under the results afterwards: a definition that leaves + * the right answer but an unbalanced stack is wrong. + */ +#include "v4/asm.h" +#include "v4/testcode.h" +#include "v4/umul.h" +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) +/* NODE-ERROR (section 7); D-4 leaves its address open, so the test puts it + * in the word next to the halt address. */ +#define NODE_ERROR ((v4_cell)(V4_NODE_WORDS - 2u)) +/* (Q/), Q./'s 5-cell scratch variable: q0 q1 b0 b1 sign. */ +#define QS ((v4_cell)(V4_NODE_WORDS - 8u)) +/* (QE), Q.EXP's 8-cell variable: x, term, sum (two cells each), sign, n. */ +#define QE ((v4_cell)(V4_NODE_WORDS - 16u)) +/* (QR), Q.SQRT's 5-cell variable: q, x (two cells each), rounds left. */ +#define QR ((v4_cell)(V4_NODE_WORDS - 24u)) +/* (QL), Q.LOG's 7-cell variable: m, y, k, rounds left, term, sum, n*1.0. */ +#define QL ((v4_cell)(V4_NODE_WORDS - 32u)) +/* (QT), Q.SIN / Q.COS's 6-cell variable: sign, x^2, term, sum, n, subtract. */ +#define QT ((v4_cell)(V4_NODE_WORDS - 40u)) +/* Scratch words for the byte-access tests. */ +#define BYTES ((v4_cell)(V4_NODE_WORDS - 48u)) +#define MAXU ((v4_ucell)~(v4_ucell)0) +#define FLAG(c) ((c) ? V4_ALL_ONES : (v4_cell)0) + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_asm as; + +static v4_cell w_nip, w_swap, w_or, w_negate, w_rot, w_zless, w_zequal, + w_2dup, w_minus, w_uless, w_umstar, w_ummod, + w_ugreater, w_abs, w_s2d, w_dplus, w_dnegate, w_dabs, w_smrem, + w_slashmod, w_star, w_slash, w_mminus, w_mstar, w_mslashmod, w_mod, w_starslashmod, + w_starslash, w_d0less, w_d2star, w_d2slash, w_2rot, w_2drop, t_2r, t_2rorder, w_mplus, w_dminus, w_d0equal, w_dequal, + w_qfromint, w_qtoint, w_less, w_equal, w_dless, w_2swap, w_2over, + w_dmax, w_dmin, w_qgt_doc, w_qgt, w_dltkeep, w_qstar, w_d2starc, w_uqdiv, w_qslash, w_qexp, w_qsqrt, w_qlog, + w_qreduce, w_qsin, l_trig, w_qcos, + w_q1, w_q0, w_qscale, w_q1_times, w_q0_plus, w_q1_toint, w_one_fromint, + w_lshift, w_rshift, w_cfetch, w_cstore; + +#define O(name) v4_asm_op(&as, V4_OP_##name) +#define LIT(v) v4_asm_lit(&as, (v4_cell)(v)) +#define CALL(w) v4_asm_branch(&as, V4_OP_CALL, (w)) + +/* Section 2's capsule IF ... THEN: the flag is dropped on both paths. */ +static v4_asm_ref if_(void) +{ + v4_asm_ref r = v4_asm_branch_fwd(&as, V4_OP_IF); + v4_asm_op(&as, V4_OP_DROP); + return r; +} +static void then_(v4_asm_ref r) +{ + v4_asm_ref j = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, r, v4_asm_label(&as)); + v4_asm_op(&as, V4_OP_DROP); + v4_asm_resolve(&as, j, v4_asm_label(&as)); +} + +static void build(void) +{ + v4_asm_ref ref; + + v4_node_reset(&n); + v4_asm_begin(&as, &n, 16); + + /* : NIP push drop pop ; */ + w_nip = v4_asm_label(&as); + O(PUSH); O(DROP); O(RPOP); O(SEMI); + + /* : SWAP over push push drop pop pop ; */ + w_swap = v4_asm_label(&as); + O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); O(SEMI); + + /* : OR over inv and xor ; */ + w_or = v4_asm_label(&as); + O(OVER); O(INV); O(AND); O(XOR); O(SEMI); + + /* : NEGATE inv 1 + ; */ + w_negate = v4_asm_label(&as); + O(INV); LIT(1); O(ADD); O(SEMI); + + /* : ROT push SWAP pop SWAP ; */ + w_rot = v4_asm_label(&as); + O(PUSH); CALL(w_swap); O(RPOP); CALL(w_swap); O(SEMI); + + /* : 0< -if L1 drop -1 ; L1: drop 0 ; */ + w_zless = v4_asm_label(&as); + ref = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); LIT(-1); O(SEMI); + v4_asm_resolve(&as, ref, v4_asm_label(&as)); + O(DROP); LIT(0); O(SEMI); + + /* : 0= if L1 drop 0 ; L1: drop -1 ; */ + w_zequal = v4_asm_label(&as); + ref = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); LIT(0); O(SEMI); + v4_asm_resolve(&as, ref, v4_asm_label(&as)); + O(DROP); LIT(-1); O(SEMI); + + /* : 2DUP over over ; (section 5.1) */ + w_2dup = v4_asm_label(&as); + O(OVER); O(OVER); O(SEMI); + + /* : - NEGATE + ; (section 5.4), NEGATE in line */ + w_minus = v4_asm_label(&as); + O(INV); LIT(1); O(ADD); O(ADD); O(SEMI); + + /* : U< 2DUP xor 0< IF NIP 0< ELSE - 0< THEN ; + * with section 2's IF: the flag is dropped on both arms. */ + w_uless = v4_asm_label(&as); + CALL(w_2dup); O(XOR); CALL(w_zless); + ref = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); CALL(w_nip); CALL(w_zless); O(SEMI); + v4_asm_resolve(&as, ref, v4_asm_label(&as)); + O(DROP); CALL(w_minus); CALL(w_zless); O(SEMI); + + /* : UM* ( u1 u2 -- ulo uhi ) section 4, D-3 + * over 1 and inv 1 + over 2/ and u1 u2 t0 t0 = u2 2/ if u1 odd + * over a! 31 push R: loop count (FOR's push, early) + * push over 2/ pop u1 u2 s t0 A: u2, s = u1 2/ + * L: +* unext u1 u2 s hi A: lo + * push drop pop u1 u2 hi + * 2* a -if L0 drop 1 + jump L1 L0: drop L1: push R: 2hi + top bit of lo + * over -if L2 drop dup jump L3 L2: drop 0 L3: push R: + (u1<0 ? u2 : 0) + * dup -if L4 drop over 1 and jump L5 L4: drop 0 L5: u1 u2 (u2<0 ? u1&1 : 0) + * pop + pop + push u1 u2 R: hi' + * and 1 and a 2* + pop ; lo' hi' + * u1 and u2 wait on the data stack under the loop (+* touches only T, S + * and A), so the corrections are made afterwards and the return stack + * holds at most two temporaries. 31 is the cell width less one, pushed + * before s is made so the data stack never holds more than four; the loop + * body is the start of its own word so that unext restarts it. */ + { + v4_asm_ref l0, l1, l2, l3, l4, l5; + w_umstar = v4_asm_label(&as); + O(OVER); LIT(1); O(AND); O(INV); LIT(1); O(ADD); O(OVER); O(TWO_SLASH); O(AND); + O(OVER); O(BANG_A); LIT(V4_CELL_BITS - 1); O(PUSH); + O(PUSH); O(OVER); O(TWO_SLASH); O(RPOP); + (void)v4_asm_label(&as); + O(MUL_STEP); O(UNEXT); + O(PUSH); O(DROP); O(RPOP); + O(TWO_STAR); O(PUSH_A); + l0 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); LIT(1); O(ADD); + l1 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l0, v4_asm_label(&as)); + O(DROP); + v4_asm_resolve(&as, l1, v4_asm_label(&as)); + O(PUSH); + O(OVER); + l2 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(DUP); + l3 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l2, v4_asm_label(&as)); + O(DROP); LIT(0); + v4_asm_resolve(&as, l3, v4_asm_label(&as)); + O(PUSH); + O(DUP); + l4 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(OVER); LIT(1); O(AND); + l5 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l4, v4_asm_label(&as)); + O(DROP); LIT(0); + v4_asm_resolve(&as, l5, v4_asm_label(&as)); + O(RPOP); O(ADD); O(RPOP); O(ADD); O(PUSH); + O(AND); LIT(1); O(AND); O(PUSH_A); O(TWO_STAR); O(ADD); O(RPOP); + O(SEMI); + } + + /* : UM/MOD ( ulo uhi ud -- urem uquot ) section 4 + * a! 31 FOR + * -if L0 + * 2* over -if L1 drop 1 + jump L2 L1: drop L2: push 2* pop + * jump SUB + * L0: + * 2* over -if L3 drop 1 + jump L4 L3: drop L4: push 2* pop + * dup a xor -if L5 + * drop -if NOSUB jump SUB + * L5: drop dup inv a + inv -if L6 + * drop jump NOSUB + * L6: push drop pop jump SETBIT + * SUB: inv a + inv + * SETBIT: push 1 + pop + * NOSUB: + * NEXT + * over push push drop pop pop ; + * No calls inside the loop, and SWAP is in line. */ + { + v4_cell loop, l_sub, l_setbit, l_nosub; + v4_asm_ref r0, r1, r2, r3, r4, r5, r6, to_sub1, to_sub2, to_nosub1, + to_nosub2, to_setbit; + + w_ummod = v4_asm_label(&as); + O(BANG_A); LIT(V4_CELL_BITS - 1); O(PUSH); + loop = v4_asm_label(&as); + r0 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + /* hi's top bit was set: shift, then subtract regardless */ + O(TWO_STAR); O(OVER); + r1 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); LIT(1); O(ADD); + r2 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, r1, v4_asm_label(&as)); + O(DROP); + v4_asm_resolve(&as, r2, v4_asm_label(&as)); + O(PUSH); O(TWO_STAR); O(RPOP); + to_sub1 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + /* L0: top bit clear: shift, then compare hi' with d */ + v4_asm_resolve(&as, r0, v4_asm_label(&as)); + O(TWO_STAR); O(OVER); + r3 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); LIT(1); O(ADD); + r4 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, r3, v4_asm_label(&as)); + O(DROP); + v4_asm_resolve(&as, r4, v4_asm_label(&as)); + O(PUSH); O(TWO_STAR); O(RPOP); + O(DUP); O(PUSH_A); O(XOR); + r5 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); + to_nosub1 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + to_sub2 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, r5, v4_asm_label(&as)); /* L5 */ + O(DROP); O(DUP); O(INV); O(PUSH_A); O(ADD); O(INV); + r6 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); + to_nosub2 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, r6, v4_asm_label(&as)); /* L6 */ + O(PUSH); O(DROP); O(RPOP); + to_setbit = v4_asm_branch_fwd(&as, V4_OP_JUMP); + l_sub = v4_asm_label(&as); + O(INV); O(PUSH_A); O(ADD); O(INV); + l_setbit = v4_asm_label(&as); + O(PUSH); LIT(1); O(ADD); O(RPOP); + l_nosub = v4_asm_label(&as); + v4_asm_branch(&as, V4_OP_NEXT, loop); + O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); O(SEMI); + + v4_asm_resolve(&as, to_sub1, l_sub); + v4_asm_resolve(&as, to_sub2, l_sub); + v4_asm_resolve(&as, to_setbit, l_setbit); + v4_asm_resolve(&as, to_nosub1, l_nosub); + v4_asm_resolve(&as, to_nosub2, l_nosub); + } + + /* ---- section 5 words that SM/REM and /MOD rest on, as written there. */ + + /* : U> SWAP U< ; 5.5 */ + w_ugreater = v4_asm_label(&as); + CALL(w_swap); CALL(w_uless); O(SEMI); + + /* : ABS dup 0< IF NEGATE THEN ; 5.4 */ + w_abs = v4_asm_label(&as); + O(DUP); CALL(w_zless); ref = if_(); CALL(w_negate); then_(ref); O(SEMI); + + /* : S>D dup 0< ; 5.7 */ + w_s2d = v4_asm_label(&as); + O(DUP); CALL(w_zless); O(SEMI); + + /* : D+ ( d1 d2 -- d3 ) 5.7, call-free + * push over push push drop pop al bl R: bh ah + * over over xor -if L1 top bits of al, bl differ: + * drop + -if C1 jump C0 carry iff sum's top bit clear + * L1: drop over -if L2 same: carry iff both set + * drop + jump C1 + * L2: drop + + * C0: pop pop + ; + * C1: pop pop + 1 + ; */ + { + v4_asm_ref l1, l2, c1a, c1b, c0a; + v4_cell c0, c1; + + w_dplus = v4_asm_label(&as); + O(PUSH); O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); + O(OVER); O(OVER); O(XOR); + l1 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(ADD); + c1a = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + c0a = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l1, v4_asm_label(&as)); + O(DROP); O(OVER); + l2 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(ADD); + c1b = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l2, v4_asm_label(&as)); + O(DROP); O(ADD); + c0 = v4_asm_label(&as); + O(RPOP); O(RPOP); O(ADD); O(SEMI); + c1 = v4_asm_label(&as); + O(RPOP); O(RPOP); O(ADD); LIT(1); O(ADD); O(SEMI); + v4_asm_resolve(&as, c0a, c0); + v4_asm_resolve(&as, c1a, c1); + v4_asm_resolve(&as, c1b, c1); + } + + /* : DNEGATE ( d -- -d ) 5.7, call-free + * inv over if L1 drop push inv 1 + pop ; + * L1: drop 1 + ; + * -d = ~d + 1: the + 1 carries into hi exactly when lo = 0. */ + w_dnegate = v4_asm_label(&as); + O(INV); O(OVER); ref = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); O(PUSH); O(INV); LIT(1); O(ADD); O(RPOP); O(SEMI); + v4_asm_resolve(&as, ref, v4_asm_label(&as)); + O(DROP); LIT(1); O(ADD); O(SEMI); + + /* : DABS dup 0< IF DNEGATE THEN ; 5.7 */ + w_dabs = v4_asm_label(&as); + O(DUP); CALL(w_zless); ref = if_(); CALL(w_dnegate); then_(ref); O(SEMI); + + /* : SM/REM ( d n -- rem quot ) section 4 + * over over xor push R: quotient sign (top bit) + * over push R: + remainder sign (of d) + * -if L0 inv 1 + L0: push R: + |n| + * -if L1 DNEGATE L1: |d| + * pop UM/MOD urem uquot + * pop -if L2 drop push inv 1 + pop jump L3 L2: drop L3: + * pop -if L4 drop inv 1 + ; L4: drop ; + * Sign tests are native -if, as in 0<; NEGATE is in line. */ + { + v4_asm_ref l0, l1, l2, l3, l4; + w_smrem = v4_asm_label(&as); + O(OVER); O(OVER); O(XOR); O(PUSH); O(OVER); O(PUSH); + l0 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(INV); LIT(1); O(ADD); + v4_asm_resolve(&as, l0, v4_asm_label(&as)); + O(PUSH); + l1 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + CALL(w_dnegate); + v4_asm_resolve(&as, l1, v4_asm_label(&as)); + O(RPOP); CALL(w_ummod); + O(RPOP); + l2 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(PUSH); O(INV); LIT(1); O(ADD); O(RPOP); + l3 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l2, v4_asm_label(&as)); + O(DROP); + v4_asm_resolve(&as, l3, v4_asm_label(&as)); + O(RPOP); + l4 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(INV); LIT(1); O(ADD); O(SEMI); + v4_asm_resolve(&as, l4, v4_asm_label(&as)); + O(DROP); O(SEMI); + } + + /* : /MOD push S>D pop SM/REM ; 5.6 */ + w_slashmod = v4_asm_label(&as); + O(PUSH); CALL(w_s2d); O(RPOP); CALL(w_smrem); O(SEMI); + + /* : * UM* drop ; 5.4 */ + w_star = v4_asm_label(&as); + CALL(w_umstar); O(DROP); O(SEMI); + + /* : / /MOD NIP ; 5.4 + * with /MOD's body and NIP in line (push S>D pop SM/REM push drop pop), + * so it runs no deeper than /MOD. */ + w_slash = v4_asm_label(&as); + O(PUSH); CALL(w_s2d); O(RPOP); CALL(w_smrem); O(PUSH); O(DROP); O(RPOP); O(SEMI); + + /* : M+ S>D D+ ; 5.6 */ + w_mplus = v4_asm_label(&as); + CALL(w_s2d); CALL(w_dplus); O(SEMI); + + /* : D- DNEGATE D+ ; 5.7 */ + w_dminus = v4_asm_label(&as); + CALL(w_dnegate); CALL(w_dplus); O(SEMI); + + /* : D0= OR 0= ; 5.7 */ + w_d0equal = v4_asm_label(&as); + CALL(w_or); CALL(w_zequal); O(SEMI); + + /* : D= D- D0= ; 5.7 */ + w_dequal = v4_asm_label(&as); + CALL(w_dminus); CALL(w_d0equal); O(SEMI); + + /* +* with S = 0 never adds: each step is an exact arithmetic right shift + * of the double T:A by one bit. Both words below are built on that. */ + + /* : Q.FROM-INT ( n -- q ) 5.26 + * push 0 a! 0 pop 15 FOR +* UNEXT push drop a pop ; + * T:A = n:0 is n * 2^N; shifted right N-16 bits it is n * 2^16. 15 is + * N-17 at 32-bit cells (47 at 64). Clobbers A. */ + w_qfromint = v4_asm_label(&as); + O(PUSH); LIT(0); O(BANG_A); LIT(0); O(RPOP); + LIT(V4_CELL_BITS - 17); O(PUSH); + (void)v4_asm_label(&as); + O(MUL_STEP); O(UNEXT); + O(PUSH); O(DROP); O(PUSH_A); O(RPOP); O(SEMI); + + /* : Q.TO-INT ( q -- n ) 5.26 + * push a! 0 pop 15 FOR +* UNEXT drop drop a ; + * T:A = q shifted right 16 bits; the low cell is A. 15 at every cell + * width. Clobbers A. */ + w_qtoint = v4_asm_label(&as); + O(PUSH); O(BANG_A); LIT(0); O(RPOP); + LIT(15); O(PUSH); + (void)v4_asm_label(&as); + O(MUL_STEP); O(UNEXT); + O(DROP); O(DROP); O(PUSH_A); O(SEMI); + + /* : = xor 0= ; 5.5 */ + w_equal = v4_asm_label(&as); + O(XOR); CALL(w_zequal); O(SEMI); + + /* : < 2DUP xor 0< IF drop 0< ELSE - 0< THEN ; 5.5 */ + w_less = v4_asm_label(&as); + O(OVER); O(OVER); O(XOR); CALL(w_zless); + ref = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); O(DROP); CALL(w_zless); + { + v4_asm_ref j = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, ref, v4_asm_label(&as)); + O(DROP); CALL(w_minus); CALL(w_zless); + v4_asm_resolve(&as, j, v4_asm_label(&as)); + } + O(SEMI); + + /* : D< ROT 2DUP = IF 2DROP U< ELSE SWAP < NIP NIP THEN ; 5.7 */ + w_dless = v4_asm_label(&as); + CALL(w_rot); O(OVER); O(OVER); CALL(w_equal); + ref = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); O(DROP); O(DROP); CALL(w_uless); + { + v4_asm_ref j = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, ref, v4_asm_label(&as)); + O(DROP); CALL(w_swap); CALL(w_less); CALL(w_nip); CALL(w_nip); + v4_asm_resolve(&as, j, v4_asm_label(&as)); + } + O(SEMI); + + /* : 2SWAP ROT push ROT pop ; 5.7, call-free + * with ROT (push SWAP pop SWAP) and SWAP (over push push drop pop pop) + * written in line: + * push over push push drop pop pop pop over push push drop pop pop + * push + * push over push push drop pop pop pop over push push drop pop pop + * pop ; */ +#define ROT_INLINE() do { O(PUSH); O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); \ + O(RPOP); O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); } while (0) + w_2swap = v4_asm_label(&as); + ROT_INLINE(); O(PUSH); ROT_INLINE(); O(RPOP); O(SEMI); +#undef ROT_INLINE + + /* : 2OVER push push 2DUP pop pop 2SWAP ; 5.7 */ + w_2over = v4_asm_label(&as); + O(PUSH); O(PUSH); O(OVER); O(OVER); O(RPOP); O(RPOP); CALL(w_2swap); O(SEMI); + + /* : (D<) ( d1 d2 -- d1 d2 flag ) 5.7, call-free + * Signed d1 < d2, leaving both doubles. Copies of ah and bh go on top; + * if they differ, flag comes from them, else from al U< bl. In every + * case the tested value has its top bit set exactly when d1 < d2: + * highs, signs differ: ah (d1 < d2 iff ah < 0) + * highs, signs agree: ah - bh (cannot overflow) + * lows, top bits differ: bl (al U< bl iff bl's is set) + * lows, top bits agree: al - bl + * x - y with y on top is `push inv pop + inv`. + * + * dup push push over pop al ah bl ah bh R: bh + * over over xor if TIE + * drop over over xor -if HS + * drop drop jump S1 al ah bl ah + * HS: drop push inv pop + inv al ah bl ah-bh + * S1: -if N1 drop -1 jump D1 N1: drop 0 + * D1: pop over push push drop pop pop ; al ah bl bh f + * TIE: drop drop drop al ah bl R: bh + * dup push push over pop al ah al bl R: bh bl + * over over xor -if LS + * drop push drop pop jump S2 al ah bl + * LS: drop push inv pop + inv al ah al-bl + * S2: -if N2 drop -1 jump D2 N2: drop 0 + * D2: pop pop al ah f bl bh + * push over push push drop pop pop pop over push push drop pop pop ; */ + { + v4_asm_ref tie, hs, s1a, n1, d1, ls, s2a, n2, d2; + w_dltkeep = v4_asm_label(&as); + O(DUP); O(PUSH); O(PUSH); O(OVER); O(RPOP); + O(OVER); O(OVER); O(XOR); + tie = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); O(OVER); O(OVER); O(XOR); + hs = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(DROP); + s1a = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, hs, v4_asm_label(&as)); + O(DROP); O(PUSH); O(INV); O(RPOP); O(ADD); O(INV); + v4_asm_resolve(&as, s1a, v4_asm_label(&as)); + n1 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); LIT(-1); + d1 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, n1, v4_asm_label(&as)); + O(DROP); LIT(0); + v4_asm_resolve(&as, d1, v4_asm_label(&as)); + O(RPOP); O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); O(SEMI); + + v4_asm_resolve(&as, tie, v4_asm_label(&as)); + O(DROP); O(DROP); O(DROP); + O(DUP); O(PUSH); O(PUSH); O(OVER); O(RPOP); + O(OVER); O(OVER); O(XOR); + ls = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(PUSH); O(DROP); O(RPOP); + s2a = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, ls, v4_asm_label(&as)); + O(DROP); O(PUSH); O(INV); O(RPOP); O(ADD); O(INV); + v4_asm_resolve(&as, s2a, v4_asm_label(&as)); + n2 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); LIT(-1); + d2 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, n2, v4_asm_label(&as)); + O(DROP); LIT(0); + v4_asm_resolve(&as, d2, v4_asm_label(&as)); + O(RPOP); O(RPOP); + O(PUSH); O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); + O(RPOP); O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); O(SEMI); + } + + /* : DMAX ( d1 d2 -- d3 ) (D<) if L drop push push drop drop pop pop ; + * L: drop drop drop ; 5.7 */ + w_dmax = v4_asm_label(&as); + CALL(w_dltkeep); + ref = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); O(PUSH); O(PUSH); O(DROP); O(DROP); O(RPOP); O(RPOP); O(SEMI); + v4_asm_resolve(&as, ref, v4_asm_label(&as)); + O(DROP); O(DROP); O(DROP); O(SEMI); + + /* : DMIN ( d1 d2 -- d3 ) (D<) if L drop drop drop ; + * L: drop push push drop drop pop pop ; 5.7 */ + w_dmin = v4_asm_label(&as); + CALL(w_dltkeep); + ref = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); O(DROP); O(DROP); O(SEMI); + v4_asm_resolve(&as, ref, v4_asm_label(&as)); + O(DROP); O(PUSH); O(PUSH); O(DROP); O(DROP); O(RPOP); O(RPOP); O(SEMI); + + /* Q.> as 5.26 gives it, SWAP D<, and with 2SWAP. */ + w_qgt_doc = v4_asm_label(&as); + CALL(w_swap); CALL(w_dless); O(SEMI); + w_qgt = v4_asm_label(&as); + CALL(w_2swap); CALL(w_dless); O(SEMI); + + /* : Q.* ( a b -- c ) 5.26 + * a = a0 a1, b = b0 b1. Cells 0..2 of the signed product a*b, then + * shifted right 16. The cell products are unsigned; reading a1 and b1 + * as signed takes (a1<0 ? b0 : 0) + (b1<0 ? a0 : 0) off cell 2, the + * only cell above the unsigned product's that the result reaches. + * Products in the order a1*b1 (low cell), a0*b1, a1*b0, a0*b0, each + * input dropped after its last use; b0 waits on the return stack. + * SWAP push over over UM* drop a0 a1 b1 t3 R: b0 + * push push over pop a0 a1 a0 b1 R: b0 t3 + * -if L1 SWAP jump L2 L1: SWAP drop 0 L2: a0 a1 b1 c2 + * pop SWAP - push a0 a1 b1 R: b0 t3-c2 + * push over pop UM* pop + a0 a1 x0 x1 R: b0 + * ROT pop dup push a0 x0 x1 a1 b0 + * over -if L3 drop dup jump L4 L3: drop 0 L4: ... a1 b0 c1 + * push UM* pop - D+ a0 X0 X1 + * ROT pop UM* X0 X1 l00 h00 + * SWAP push 0 D+ pop c1 c2 c0 + * push over pop SWAP Q.TO-INT push Q.TO-INT pop SWAP ; + * SWAP and ROT in line. Clobbers A. */ +#define SWAP_INLINE() do { O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); } while (0) +#define ROT_INLINE() do { O(PUSH); SWAP_INLINE(); O(RPOP); SWAP_INLINE(); } while (0) + { + v4_asm_ref l1, l2, l3, l4; + w_qstar = v4_asm_label(&as); + SWAP_INLINE(); O(PUSH); O(OVER); O(OVER); CALL(w_umstar); O(DROP); + O(PUSH); O(PUSH); O(OVER); O(RPOP); + l1 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + SWAP_INLINE(); + l2 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l1, v4_asm_label(&as)); + SWAP_INLINE(); O(DROP); LIT(0); + v4_asm_resolve(&as, l2, v4_asm_label(&as)); + O(RPOP); SWAP_INLINE(); CALL(w_minus); O(PUSH); + O(PUSH); O(OVER); O(RPOP); CALL(w_umstar); O(RPOP); O(ADD); + ROT_INLINE(); O(RPOP); O(DUP); O(PUSH); + O(OVER); + l3 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); O(DUP); + l4 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l3, v4_asm_label(&as)); + O(DROP); LIT(0); + v4_asm_resolve(&as, l4, v4_asm_label(&as)); + O(PUSH); CALL(w_umstar); O(RPOP); CALL(w_minus); CALL(w_dplus); + ROT_INLINE(); O(RPOP); CALL(w_umstar); + SWAP_INLINE(); O(PUSH); LIT(0); CALL(w_dplus); O(RPOP); + O(PUSH); O(OVER); O(RPOP); SWAP_INLINE(); CALL(w_qtoint); + O(PUSH); CALL(w_qtoint); O(RPOP); SWAP_INLINE(); + O(SEMI); + } +#undef ROT_INLINE +#undef SWAP_INLINE + + /* : D2*C ( lo hi cin -- lo' hi' cout ) 5.26, for Q./ + * The double shifted left one bit, cin (0 or 1) entering at the bottom, + * cout (0 or 1) the bit that left the top. cin waits in A. + * a! dup -if L1 drop 1 jump L2 L1: drop 0 L2: push lo hi R: cout + * over -if L3 drop 1 jump L4 L3: drop 0 L4: lo hi m m: lo's top bit + * over + + lo 2hi+m + * push 2* a + pop pop ; lo' hi' cout + * Clobbers A. */ + { + v4_asm_ref l1, l2, l3, l4; + w_d2starc = v4_asm_label(&as); + O(BANG_A); O(DUP); + l1 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); LIT(1); + l2 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l1, v4_asm_label(&as)); + O(DROP); LIT(0); + v4_asm_resolve(&as, l2, v4_asm_label(&as)); + O(PUSH); O(OVER); + l3 = v4_asm_branch_fwd(&as, V4_OP_MINUS_IF); + O(DROP); LIT(1); + l4 = v4_asm_branch_fwd(&as, V4_OP_JUMP); + v4_asm_resolve(&as, l3, v4_asm_label(&as)); + O(DROP); LIT(0); + v4_asm_resolve(&as, l4, v4_asm_label(&as)); + O(OVER); O(ADD); O(ADD); + O(PUSH); O(TWO_STAR); O(PUSH_A); O(ADD); O(RPOP); O(RPOP); + O(SEMI); + } + + + /* : (UQ/) ( a0 a1 b0 b1 -- q0 q1 ) 5.26, core of Q./ + * Unsigned floor(a * 2^16 / b), for b != 0 and a quotient below + * 2^(2N-1) (Q./ checks both first). Restoring division, 2N+16 steps, + * on one shifting register: quotient q (starts as a) above remainder r. + * The bit leaving q's top enters r; each step's quotient bit enters q at + * the next step's shift, and a final shift takes in the last one. With + * no overflow the bits leaving q in the last 16 steps are zeros. + * q and b live in the scratch variable (Q/) = QS: q0 q1 b0 b1, so the + * stacks hold only r, the quotient bit and the loop count. + * QS 2 + a! SWAP !+ ! QS a! SWAP !+ ! 0 0 0 r0 r1 qb + * 2N+15 FOR + * push QS a! @+ @ pop D2*C r0 r1 q0 q1 c + * push QS 1 + a! ! QS a! ! pop D2*C r0 r1 t + * if CMP drop jump TAKE + * CMP: drop QS 3 + b! @b r0 r1 b1 + * over over xor if EQH -if SAMEH + * drop drop -if NT1 jump TAKE NT1: jump NOTAKE + * SAMEH: drop over SWAP push inv pop + inv r0 r1 r1-b1 + * -if T2 drop jump NOTAKE T2: drop jump TAKE + * EQH: drop drop over QS 2 + b! @b r0 r1 r0 b0 + * over over xor -if SAMEL + * drop drop -if NT3 drop jump TAKEL NT3: drop jump NOTAKEL + * SAMEL: drop push inv pop + inv r0 r1 r0-b0 + * -if T4 drop jump NOTAKEL T4: drop jump TAKEL + * TAKEL: drop QS 2 + b! @b push inv pop + inv 0 1 jump END + * NOTAKEL: 0 jump END + * TAKE: push QS 2 + b! @b over over push inv pop + inv push r0 b0 R: r1 d0 + * over over xor -if SB drop NIP -if NB drop 1 jump BD NB: drop 0 jump BD + * SB: drop push inv pop + inv -if NB2 drop 1 jump BD NB2: drop 0 + * BD: pop pop QS 3 + b! @b push inv pop + inv borrow d0 r1-b1 + * push SWAP pop SWAP - 1 jump END d0 r1-b1-borrow 1 + * NOTAKE: 0 + * END: + * NEXT + * push QS a! @+ @ pop D2*C drop push push drop drop pop pop ; + * x - y with y on top is push inv pop + inv. SWAP, ROT in line. + * Clobbers A and B. */ +#define SWAP_INLINE() do { O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); } while (0) +#define ROT_INLINE() do { O(PUSH); SWAP_INLINE(); O(RPOP); SWAP_INLINE(); } while (0) +#define SUB_INLINE() do { O(PUSH); O(INV); O(RPOP); O(ADD); O(INV); } while (0) +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) + { + v4_cell loop, l_take, l_notake, l_takel, l_notakel, l_end; + v4_asm_ref cmp, eqh, sameh, nt1, t2, samel, nt3, t4; + v4_asm_ref j_take[4], j_notake[3], j_takel[3], j_notakel[3], j_end[3]; + unsigned nt = 0, nn = 0, ntl = 0, nnl = 0, ne = 0, k; + + w_uqdiv = v4_asm_label(&as); + LIT(QS + 2); O(BANG_A); SWAP_INLINE(); O(STORE_INC); O(STORE_A); + LIT(QS); O(BANG_A); SWAP_INLINE(); O(STORE_INC); O(STORE_A); + LIT(0); LIT(0); LIT(0); + LIT(2 * V4_CELL_BITS + 15); O(PUSH); + loop = v4_asm_label(&as); + O(PUSH); LIT(QS); O(BANG_A); O(FETCH_INC); O(FETCH_A); O(RPOP); CALL(w_d2starc); + O(PUSH); LIT(QS + 1); O(BANG_A); O(STORE_A); LIT(QS); O(BANG_A); O(STORE_A); O(RPOP); + CALL(w_d2starc); + cmp = FWD(IF); + O(DROP); j_take[nt++] = FWD(JUMP); + HERE_(cmp); /* CMP */ + O(DROP); LIT(QS + 3); O(BANG_B); O(FETCH_B); + O(OVER); O(OVER); O(XOR); eqh = FWD(IF); + sameh = FWD(MINUS_IF); + O(DROP); O(DROP); nt1 = FWD(MINUS_IF); + j_take[nt++] = FWD(JUMP); + HERE_(nt1); j_notake[nn++] = FWD(JUMP); + HERE_(sameh); /* SAMEH */ + O(DROP); O(OVER); SWAP_INLINE(); SUB_INLINE(); t2 = FWD(MINUS_IF); + O(DROP); j_notake[nn++] = FWD(JUMP); + HERE_(t2); O(DROP); j_take[nt++] = FWD(JUMP); + HERE_(eqh); /* EQH */ + O(DROP); O(DROP); O(OVER); LIT(QS + 2); O(BANG_B); O(FETCH_B); + O(OVER); O(OVER); O(XOR); samel = FWD(MINUS_IF); + O(DROP); O(DROP); nt3 = FWD(MINUS_IF); + O(DROP); j_takel[ntl++] = FWD(JUMP); + HERE_(nt3); O(DROP); j_notakel[nnl++] = FWD(JUMP); + HERE_(samel); /* SAMEL */ + O(DROP); SUB_INLINE(); t4 = FWD(MINUS_IF); + O(DROP); j_notakel[nnl++] = FWD(JUMP); + HERE_(t4); O(DROP); j_takel[ntl++] = FWD(JUMP); + l_takel = v4_asm_label(&as); /* TAKEL */ + O(DROP); LIT(QS + 2); O(BANG_B); O(FETCH_B); SUB_INLINE(); LIT(0); LIT(1); + j_end[ne++] = FWD(JUMP); + l_notakel = v4_asm_label(&as); /* NOTAKEL */ + LIT(0); j_end[ne++] = FWD(JUMP); + l_take = v4_asm_label(&as); /* TAKE */ + { + v4_asm_ref sb, nb, bd, nb2, bd2; + O(PUSH); LIT(QS + 2); O(BANG_B); O(FETCH_B); + O(OVER); O(OVER); SUB_INLINE(); O(PUSH); + O(OVER); O(OVER); O(XOR); sb = FWD(MINUS_IF); + O(DROP); O(PUSH); O(DROP); O(RPOP); nb = FWD(MINUS_IF); + O(DROP); LIT(1); bd = FWD(JUMP); + HERE_(nb); O(DROP); LIT(0); bd2 = FWD(JUMP); + HERE_(sb); + O(DROP); SUB_INLINE(); nb2 = FWD(MINUS_IF); + O(DROP); LIT(1); j_end[ne] = FWD(JUMP); + HERE_(nb2); O(DROP); LIT(0); + HERE_(bd); HERE_(bd2); v4_asm_resolve(&as, j_end[ne], v4_asm_label(&as)); + O(RPOP); O(RPOP); LIT(QS + 3); O(BANG_B); O(FETCH_B); SUB_INLINE(); + O(PUSH); SWAP_INLINE(); O(RPOP); SWAP_INLINE(); CALL(w_minus); + LIT(1); j_end[ne++] = FWD(JUMP); + } + l_notake = v4_asm_label(&as); /* NOTAKE */ + LIT(0); + l_end = v4_asm_label(&as); /* END */ + v4_asm_branch(&as, V4_OP_NEXT, loop); + O(PUSH); LIT(QS); O(BANG_A); O(FETCH_INC); O(FETCH_A); O(RPOP); CALL(w_d2starc); O(DROP); + O(PUSH); O(PUSH); O(DROP); O(DROP); O(RPOP); O(RPOP); O(SEMI); + + for (k = 0; k < nt; k++) v4_asm_resolve(&as, j_take[k], l_take); + for (k = 0; k < nn; k++) v4_asm_resolve(&as, j_notake[k], l_notake); + for (k = 0; k < ntl; k++) v4_asm_resolve(&as, j_takel[k], l_takel); + for (k = 0; k < nnl; k++) v4_asm_resolve(&as, j_notakel[k], l_notakel); + for (k = 0; k < ne; k++) v4_asm_resolve(&as, j_end[k], l_end); + } +#undef HERE_ +#undef FWD +#undef SUB_INLINE +#undef ROT_INLINE +#undef SWAP_INLINE + + /* : Q./ ( a b -- q ) 5.26, D-11 + * over over OR if ZERO drop + * push over pop SWAP over xor QS 4 + b! !b a0 a1 b0 b1 (Q/)+4: sign + * -if L1 DNEGATE L1: push push -if L2 DNEGATE L2: pop pop |a| |b| + * dup if CHK drop jump DIV b1 != 0: no overflow + * CHK: drop over -131072 and if CHK2 drop jump DIV b0 >= 2^17: none + * CHK2: drop push push dup pop dup push N-18 FOR 2* UNEXT + * over over xor -if SAME drop drop -if NOOV jump OV + * SAME: drop push inv pop + inv -if OV + * NOOV: drop pop pop jump DIV a0 a1 b0 0 + * OV: drop drop drop pop pop drop drop + * QS 4 + b! @b -if OVP drop 0 MSB ; OVP: drop -1 MAXHI ; + * DIV: (UQ/) QS 4 + b! @b -if L3 drop DNEGATE ; L3: drop ; + * ZERO: drop drop drop NODE-ERROR b! -1 !b + * over over OR if Z0 drop -if ZP drop drop 0 MSB ; + * ZP: drop drop -1 MAXHI ; Z0: drop ; + * MSB and MAXHI are the high cells of Q min and Q max. Clobbers A and B. */ +#define SWAP_INLINE() do { O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); } while (0) +#define SUB_INLINE() do { O(PUSH); O(INV); O(RPOP); O(ADD); O(INV); } while (0) +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) + { + v4_asm_ref zero, l1, l2, chk, chk2, same, noov1, ov1, ov2, ovp, l3, z0, zp; + v4_asm_ref d1, d2, d3; + v4_cell l_div, l_noov, l_ov; + + w_qslash = v4_asm_label(&as); + O(OVER); O(OVER); CALL(w_or); zero = FWD(IF); + O(DROP); + O(PUSH); O(OVER); O(RPOP); SWAP_INLINE(); O(OVER); O(XOR); + LIT(QS + 4); O(BANG_B); O(STORE_B); + l1 = FWD(MINUS_IF); CALL(w_dnegate); HERE_(l1); + O(PUSH); O(PUSH); + l2 = FWD(MINUS_IF); CALL(w_dnegate); HERE_(l2); + O(RPOP); O(RPOP); + O(DUP); chk = FWD(IF); + O(DROP); d1 = FWD(JUMP); + HERE_(chk); + O(DROP); O(OVER); LIT(-131072); O(AND); chk2 = FWD(IF); + O(DROP); d2 = FWD(JUMP); + HERE_(chk2); + O(DROP); O(PUSH); O(PUSH); O(DUP); O(RPOP); O(DUP); O(PUSH); + LIT(V4_CELL_BITS - 18); O(PUSH); + (void)v4_asm_label(&as); + O(TWO_STAR); O(UNEXT); + O(OVER); O(OVER); O(XOR); same = FWD(MINUS_IF); + O(DROP); O(DROP); noov1 = FWD(MINUS_IF); + ov1 = FWD(JUMP); + HERE_(same); + O(DROP); SUB_INLINE(); ov2 = FWD(MINUS_IF); + l_noov = v4_asm_label(&as); + O(DROP); O(RPOP); O(RPOP); d3 = FWD(JUMP); + l_ov = v4_asm_label(&as); + O(DROP); O(DROP); O(DROP); O(RPOP); O(RPOP); O(DROP); O(DROP); + LIT(QS + 4); O(BANG_B); O(FETCH_B); ovp = FWD(MINUS_IF); + O(DROP); LIT(0); LIT((v4_cell)V4_MSB); O(SEMI); + HERE_(ovp); O(DROP); LIT(-1); LIT((v4_cell)(MAXU >> 1)); O(SEMI); + l_div = v4_asm_label(&as); + CALL(w_uqdiv); LIT(QS + 4); O(BANG_B); O(FETCH_B); l3 = FWD(MINUS_IF); + O(DROP); CALL(w_dnegate); O(SEMI); + HERE_(l3); O(DROP); O(SEMI); + HERE_(zero); + O(DROP); O(DROP); O(DROP); + LIT(NODE_ERROR); O(BANG_B); LIT(-1); O(STORE_B); + O(OVER); O(OVER); CALL(w_or); z0 = FWD(IF); + O(DROP); zp = FWD(MINUS_IF); + O(DROP); O(DROP); LIT(0); LIT((v4_cell)V4_MSB); O(SEMI); + HERE_(zp); O(DROP); O(DROP); LIT(-1); LIT((v4_cell)(MAXU >> 1)); O(SEMI); + HERE_(z0); O(DROP); O(SEMI); + + v4_asm_resolve(&as, d1, l_div); + v4_asm_resolve(&as, d2, l_div); + v4_asm_resolve(&as, d3, l_div); + v4_asm_resolve(&as, noov1, l_noov); + v4_asm_resolve(&as, ov1, l_ov); + v4_asm_resolve(&as, ov2, l_ov); + } +#undef HERE_ +#undef FWD +#undef SUB_INLINE +#undef SWAP_INLINE + + /* : Q.EXP ( q -- e ) 5.26, v3's q48_exp_approx + * e^q by the Taylor series 1 + x + x^2/2! + ... to 10 terms, stopping + * once a term is below 50 ulp, on x = |q|; for q < 0 the result is + * 1.0 Q./ e^|q|. e^0 = 1.0; |q| >= 16.0 gives 0 (q < 0) or Q max (v3 + * returned all ones, which is -ulp read signed, D-8). x, the term and + * the sum live in (QE), so only Q.* and Q./ arguments sit on the stack. + * over over OR if ONE drop + * dup QE 6 + b! !b -if L1 DNEGATE L1: x (QE)+6: sign + * over over -1048576 -1 D+ push drop pop -if BIG drop + * over over QE 2 + a! SWAP !+ ! over over QE a! SWAP !+ ! + * 65536 0 D+ QE 4 + a! SWAP !+ ! term = x, sum = 1 + x + * 2 QE 7 + b! !b (QE)+7: n + * LOOP: + * QE 2 + a! @+ @ QE a! @+ @ Q.* + * QE 7 + b! @b Q.FROM-INT Q./ term*x / n + * over over QE 2 + a! SWAP !+ ! + * QE 4 + a! @+ @ D+ QE 4 + a! SWAP !+ ! sum += term + * QE 2 + a! @+ @ if HI0 drop drop jump CONT + * HI0: drop -if SM drop jump CONT + * SM: -50 + -if CONT1 drop jump DONE term < 50: stop + * CONT1: drop + * CONT: QE 7 + b! @b 1 + dup !b -11 + -if DONE1 drop jump LOOP + * DONE1: drop after n = 10 + * DONE: QE 4 + a! @+ @ QE 6 + b! @b -if POS drop 65536 0 2SWAP Q./ ; + * POS: drop ; + * BIG: drop drop drop QE 6 + b! @b -if BIGP drop 0 0 ; BIGP: drop -1 MAXHI ; + * ONE: drop drop drop 65536 0 ; + * Clobbers A and B. */ +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) +#define STORE2(addr) do { LIT(addr); O(BANG_A); O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); \ + O(STORE_INC); O(STORE_A); } while (0) +#define FETCH2(addr) do { LIT(addr); O(BANG_A); O(FETCH_INC); O(FETCH_A); } while (0) + { + v4_asm_ref one, l1, big, hi0, sm, cont1, j_cont1, j_cont2, j_done, pos, bigp; + v4_cell loop, l_cont, l_done; + + w_qexp = v4_asm_label(&as); + O(OVER); O(OVER); CALL(w_or); one = FWD(IF); + O(DROP); + O(DUP); LIT(QE + 6); O(BANG_B); O(STORE_B); + l1 = FWD(MINUS_IF); CALL(w_dnegate); HERE_(l1); + O(OVER); O(OVER); LIT(-1048576); LIT(-1); CALL(w_dplus); + O(PUSH); O(DROP); O(RPOP); + big = FWD(MINUS_IF); + O(DROP); + O(OVER); O(OVER); STORE2(QE + 2); + O(OVER); O(OVER); STORE2(QE); + LIT(65536); LIT(0); CALL(w_dplus); STORE2(QE + 4); + LIT(2); LIT(QE + 7); O(BANG_B); O(STORE_B); + loop = v4_asm_label(&as); + FETCH2(QE + 2); FETCH2(QE); CALL(w_qstar); + LIT(QE + 7); O(BANG_B); O(FETCH_B); CALL(w_qfromint); CALL(w_qslash); + O(OVER); O(OVER); STORE2(QE + 2); + FETCH2(QE + 4); CALL(w_dplus); STORE2(QE + 4); + FETCH2(QE + 2); hi0 = FWD(IF); + O(DROP); O(DROP); j_cont1 = FWD(JUMP); + HERE_(hi0); + O(DROP); sm = FWD(MINUS_IF); + O(DROP); j_cont2 = FWD(JUMP); + HERE_(sm); + LIT(-50); O(ADD); cont1 = FWD(MINUS_IF); + O(DROP); j_done = FWD(JUMP); + HERE_(cont1); + O(DROP); + l_cont = v4_asm_label(&as); + LIT(QE + 7); O(BANG_B); O(FETCH_B); LIT(1); O(ADD); O(DUP); O(STORE_B); + LIT(-11); O(ADD); + { + v4_asm_ref fin = FWD(MINUS_IF); + O(DROP); v4_asm_branch(&as, V4_OP_JUMP, loop); + HERE_(fin); O(DROP); + } + l_done = v4_asm_label(&as); + FETCH2(QE + 4); LIT(QE + 6); O(BANG_B); O(FETCH_B); + pos = FWD(MINUS_IF); + O(DROP); LIT(65536); LIT(0); CALL(w_2swap); CALL(w_qslash); O(SEMI); + HERE_(pos); O(DROP); O(SEMI); + HERE_(big); + O(DROP); O(DROP); O(DROP); LIT(QE + 6); O(BANG_B); O(FETCH_B); + bigp = FWD(MINUS_IF); + O(DROP); LIT(0); LIT(0); O(SEMI); + HERE_(bigp); O(DROP); LIT(-1); LIT((v4_cell)(MAXU >> 1)); O(SEMI); + HERE_(one); + O(DROP); O(DROP); O(DROP); LIT(65536); LIT(0); O(SEMI); + + v4_asm_resolve(&as, j_cont1, l_cont); + v4_asm_resolve(&as, j_cont2, l_cont); + v4_asm_resolve(&as, j_done, l_done); + } +#undef FETCH2 +#undef STORE2 +#undef HERE_ +#undef FWD + + /* : Q.SQRT ( q -- r ) 5.26, v3's q48_sqrt_approx + * Newton: x0 = q/2 + 0.25, then up to 8 rounds of x' = (x + q/x) / 2, + * returning x as soon as |x' - x| < 10 ulp. sqrt(0) = 0, sqrt(1.0) = + * 1.0; q < 0 gives 0 and sets NODE-ERROR (D-12). q, x and the rounds + * left live in (QR). D2/ below is the logical double shift right, + * push a! 0 pop +* MAXHI and push drop a pop + * (one +* step with S = 0, the sign bit cleared). + * dup -if POS drop drop drop NODE-ERROR b! -1 !b 0 0 ; + * POS: drop over over OR if ZERO drop + * over 65536 xor over OR if ONE drop + * over over QR a! SWAP !+ ! D2/ 16384 0 D+ QR 2 + a! SWAP !+ ! + * 8 QR 4 + b! !b + * LOOP: QR a! @+ @ QR 2 + a! @+ @ Q./ QR 2 + a! @+ @ D+ D2/ x' + * over over QR 2 + a! @+ @ DNEGATE D+ -if L1 DNEGATE L1: x' |x'-x| + * if HI0 drop drop jump NEXT + * HI0: drop -if SM drop jump NEXT low cell >= 2^(N-1): not small + * SM: -10 + -if NEXT1 drop drop drop QR 2 + a! @+ @ ; + * NEXT1: drop + * NEXT: QR 2 + a! SWAP !+ ! + * QR 4 + b! @b -1 + dup !b if DONE drop jump LOOP + * DONE: drop QR 2 + a! @+ @ ; + * ZERO: drop ; ONE: drop ; + * Clobbers A and B. */ +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) +#define STORE2(addr) do { LIT(addr); O(BANG_A); O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); \ + O(STORE_INC); O(STORE_A); } while (0) +#define FETCH2(addr) do { LIT(addr); O(BANG_A); O(FETCH_INC); O(FETCH_A); } while (0) +#define D2SLASH() do { O(PUSH); O(BANG_A); LIT(0); O(RPOP); O(MUL_STEP); \ + LIT((v4_cell)(MAXU >> 1)); O(AND); O(PUSH); O(DROP); O(PUSH_A); O(RPOP); } while (0) + { + v4_asm_ref pos, zero, one, l1, hi0, next1, j_next, j_next2, done; + v4_cell loop, l_next; + + w_qsqrt = v4_asm_label(&as); + O(DUP); pos = FWD(MINUS_IF); + O(DROP); O(DROP); O(DROP); LIT(NODE_ERROR); O(BANG_B); LIT(-1); O(STORE_B); + LIT(0); LIT(0); O(SEMI); + HERE_(pos); + O(DROP); O(OVER); O(OVER); CALL(w_or); zero = FWD(IF); + O(DROP); O(OVER); LIT(65536); O(XOR); O(OVER); CALL(w_or); one = FWD(IF); + O(DROP); + O(OVER); O(OVER); STORE2(QR); + D2SLASH(); LIT(16384); LIT(0); CALL(w_dplus); STORE2(QR + 2); + LIT(8); LIT(QR + 4); O(BANG_B); O(STORE_B); + loop = v4_asm_label(&as); + FETCH2(QR); FETCH2(QR + 2); CALL(w_qslash); FETCH2(QR + 2); CALL(w_dplus); D2SLASH(); + O(OVER); O(OVER); FETCH2(QR + 2); CALL(w_dnegate); CALL(w_dplus); + l1 = FWD(MINUS_IF); CALL(w_dnegate); HERE_(l1); + hi0 = FWD(IF); + O(DROP); O(DROP); j_next = FWD(JUMP); + HERE_(hi0); + O(DROP); + { + v4_asm_ref sm = FWD(MINUS_IF); + O(DROP); j_next2 = FWD(JUMP); + HERE_(sm); + } + LIT(-10); O(ADD); next1 = FWD(MINUS_IF); + O(DROP); O(DROP); O(DROP); FETCH2(QR + 2); O(SEMI); + HERE_(next1); + O(DROP); + l_next = v4_asm_label(&as); + STORE2(QR + 2); + LIT(QR + 4); O(BANG_B); O(FETCH_B); LIT(-1); O(ADD); O(DUP); O(STORE_B); + done = FWD(IF); + O(DROP); v4_asm_branch(&as, V4_OP_JUMP, loop); + HERE_(done); + O(DROP); FETCH2(QR + 2); O(SEMI); + HERE_(zero); O(DROP); O(SEMI); + HERE_(one); O(DROP); O(SEMI); + v4_asm_resolve(&as, j_next, l_next); + v4_asm_resolve(&as, j_next2, l_next); + } +#undef D2SLASH +#undef FETCH2 +#undef STORE2 +#undef HERE_ +#undef FWD + + /* : Q.LOG ( x -- ln x ) 5.26, v3's q48_log_approx + * x = 2^k * m with 1.0 <= m < 2.0; ln m by up to 6 Newton rounds on + * e^y = m from y = m - 1.0; result y + k * ln 2 (ln 2 = 45426). e^y is + * Q.EXP's Taylor loop written here in line, so Q.LOG calls only Q.*, Q./ + * and UM*. After the reduction m, y, the Taylor term and sum all fit one + * cell, so (QL) holds single cells: m y k rounds term sum n*1.0. + * x <= 0 gives 0 and sets NODE-ERROR (D-12). D2/ is the logical double + * shift right, as in Q.SQRT. + * dup -if POS drop jump ERR + * POS: drop over over OR if ZERO drop 0 QL 2 + b! !b + * DOWN: dup if CHKLO drop jump SHR + * CHKLO: drop over -131072 and if DOWNDONE drop + * SHR: D2/ QL 2 + b! @b 1 + !b jump DOWN x >= 2.0: halve, k+1 + * DOWNDONE: drop drop m + * UP: dup -65536 and if UPSHIFT drop jump NORM + * UPSHIFT: drop 2* QL 2 + b! @b -1 + !b jump UP m < 1.0: double, k-1 + * NORM: dup QL b! !b -65536 + QL 1 + b! !b 6 QL 3 + b! !b + * NEWTON: QL 1 + b! @b dup QL 4 + b! !b 65536 + QL 5 + b! !b + * 131072 QL 6 + b! !b + * EXPL: QL 4 + b! @b 0 QL 1 + b! @b 0 Q.* drop + * 0 QL 6 + b! @b 0 Q./ drop dup QL 4 + b! !b + * dup QL 5 + b! @b + !b + * -50 + -if EXPC drop jump EXPD + * EXPC: drop QL 6 + b! @b 65536 + dup !b -720896 + -if EXPD2 drop jump EXPL + * EXPD2: drop + * EXPD: QL b! @b QL 5 + b! @b push inv pop + inv delta = m - e^y + * dup QL 4 + b! !b delta waits in the term's cell + * if DZ -if DPOS + * inv 1 + 0 QL 5 + b! @b 0 Q./ drop corr = -delta / e^y + * QL 1 + b! @b SWAP push inv pop + inv -if KEEP drop 0 KEEP: QL 1 + b! !b + * jump TEST y = max(y - corr, 0) + * DPOS: 0 QL 5 + b! @b 0 Q./ drop QL 1 + b! @b + !b jump TEST + * DZ: drop + * TEST: QL 4 + b! @b -if AP inv 1 + AP: -100 + -if CONT drop jump FIN + * CONT: drop QL 3 + b! @b -1 + dup !b if FIN0 drop jump NEWTON + * FIN0: drop + * FIN: QL 1 + b! @b QL 2 + b! @b + * -if KP inv 1 + 45426 UM* drop inv 1 + jump KS KP: 45426 UM* drop + * KS: + dup -if SP drop -1 ; SP: drop 0 ; + * ZERO: drop ERR: drop drop NODE-ERROR b! -1 !b 0 0 ; + * Clobbers A and B. */ +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) +#define JUMP_TO(l) v4_asm_branch(&as, V4_OP_JUMP, (l)) +#define VGET(a) do { LIT(a); O(BANG_B); O(FETCH_B); } while (0) +#define VSET(a) do { LIT(a); O(BANG_B); O(STORE_B); } while (0) +#define SWAP_INLINE() do { O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); } while (0) +#define SUB_INLINE() do { O(PUSH); O(INV); O(RPOP); O(ADD); O(INV); } while (0) +#define D2SLASH() do { O(PUSH); O(BANG_A); LIT(0); O(RPOP); O(MUL_STEP); \ + LIT((v4_cell)(MAXU >> 1)); O(AND); O(PUSH); O(DROP); O(PUSH_A); O(RPOP); } while (0) + { + v4_asm_ref pos, j_err, zero, chklo, j_shr, downdone, upshift, j_norm, expc, j_expd, + expd2, dzero, dpos, keep, j_test, ap, contn, j_fin, fin0, kp, j_ks, sp; + v4_cell l_down, l_up, l_newton, l_expl, l_test, l_err; + + w_qlog = v4_asm_label(&as); + O(DUP); pos = FWD(MINUS_IF); + O(DROP); j_err = FWD(JUMP); + HERE_(pos); + O(DROP); O(OVER); O(OVER); CALL(w_or); zero = FWD(IF); + O(DROP); LIT(0); VSET(QL + 2); + l_down = v4_asm_label(&as); + O(DUP); chklo = FWD(IF); + O(DROP); j_shr = FWD(JUMP); + HERE_(chklo); + O(DROP); O(OVER); LIT(-131072); O(AND); downdone = FWD(IF); + O(DROP); + HERE_(j_shr); + D2SLASH(); VGET(QL + 2); LIT(1); O(ADD); O(STORE_B); JUMP_TO(l_down); + HERE_(downdone); + O(DROP); O(DROP); + l_up = v4_asm_label(&as); + O(DUP); LIT(-65536); O(AND); upshift = FWD(IF); + O(DROP); j_norm = FWD(JUMP); + HERE_(upshift); + O(DROP); O(TWO_STAR); VGET(QL + 2); LIT(-1); O(ADD); O(STORE_B); JUMP_TO(l_up); + HERE_(j_norm); + O(DUP); VSET(QL); LIT(-65536); O(ADD); VSET(QL + 1); LIT(6); VSET(QL + 3); + l_newton = v4_asm_label(&as); + VGET(QL + 1); O(DUP); VSET(QL + 4); LIT(65536); O(ADD); VSET(QL + 5); + LIT(131072); VSET(QL + 6); + l_expl = v4_asm_label(&as); + VGET(QL + 4); LIT(0); VGET(QL + 1); LIT(0); CALL(w_qstar); O(DROP); + LIT(0); VGET(QL + 6); LIT(0); CALL(w_qslash); O(DROP); + O(DUP); VSET(QL + 4); + O(DUP); VGET(QL + 5); O(ADD); O(STORE_B); + LIT(-50); O(ADD); expc = FWD(MINUS_IF); + O(DROP); j_expd = FWD(JUMP); + HERE_(expc); + O(DROP); VGET(QL + 6); LIT(65536); O(ADD); O(DUP); O(STORE_B); + LIT(-720896); O(ADD); expd2 = FWD(MINUS_IF); + O(DROP); JUMP_TO(l_expl); + HERE_(expd2); + O(DROP); + HERE_(j_expd); + VGET(QL); VGET(QL + 5); SUB_INLINE(); O(DUP); VSET(QL + 4); + dzero = FWD(IF); + dpos = FWD(MINUS_IF); + O(INV); LIT(1); O(ADD); LIT(0); VGET(QL + 5); LIT(0); CALL(w_qslash); O(DROP); + VGET(QL + 1); SWAP_INLINE(); SUB_INLINE(); + keep = FWD(MINUS_IF); O(DROP); LIT(0); HERE_(keep); + VSET(QL + 1); j_test = FWD(JUMP); + HERE_(dpos); + LIT(0); VGET(QL + 5); LIT(0); CALL(w_qslash); O(DROP); + VGET(QL + 1); O(ADD); O(STORE_B); + { + v4_asm_ref j_test2 = FWD(JUMP); + HERE_(dzero); + O(DROP); + l_test = v4_asm_label(&as); + v4_asm_resolve(&as, j_test2, l_test); + } + VGET(QL + 4); + ap = FWD(MINUS_IF); O(INV); LIT(1); O(ADD); HERE_(ap); + LIT(-100); O(ADD); contn = FWD(MINUS_IF); + O(DROP); j_fin = FWD(JUMP); + HERE_(contn); + O(DROP); VGET(QL + 3); LIT(-1); O(ADD); O(DUP); O(STORE_B); + fin0 = FWD(IF); + O(DROP); JUMP_TO(l_newton); + HERE_(fin0); + O(DROP); + HERE_(j_fin); + VGET(QL + 1); VGET(QL + 2); + kp = FWD(MINUS_IF); + O(INV); LIT(1); O(ADD); LIT(45426); CALL(w_umstar); O(DROP); O(INV); LIT(1); O(ADD); + j_ks = FWD(JUMP); + HERE_(kp); + LIT(45426); CALL(w_umstar); O(DROP); + HERE_(j_ks); + O(ADD); O(DUP); sp = FWD(MINUS_IF); + O(DROP); LIT(-1); O(SEMI); + HERE_(sp); O(DROP); LIT(0); O(SEMI); + HERE_(zero); + O(DROP); + l_err = v4_asm_label(&as); + O(DROP); O(DROP); LIT(NODE_ERROR); O(BANG_B); LIT(-1); O(STORE_B); LIT(0); LIT(0); O(SEMI); + + v4_asm_resolve(&as, j_err, l_err); + v4_asm_resolve(&as, j_test, l_test); + } +#undef D2SLASH +#undef SUB_INLINE +#undef SWAP_INLINE +#undef VSET +#undef VGET +#undef JUMP_TO +#undef HERE_ +#undef FWD + +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) +#define JUMP_TO(l) v4_asm_branch(&as, V4_OP_JUMP, (l)) +#define VGET(a) do { LIT(a); O(BANG_B); O(FETCH_B); } while (0) +#define VSET(a) do { LIT(a); O(BANG_B); O(STORE_B); } while (0) + /* : (Q.REDUCE) ( x -- r ) 5.26, v3's q48_reduce_angle + * The angle x reduced to one cell r, -pi <= r <= pi (pi = 205887, + * 2pi = 411774): the remainder of x / 2pi with the sign of x, then one + * step of 2pi back into range. x / 2pi does not fit a cell, but only + * the remainder is wanted: |x| mod 2pi is two UM/MOD steps, the high + * cell first, its remainder then leading the low cell. + * dup QT b! !b -if L1 DNEGATE L1: u0 u1 (QT): sign of x + * 0 411774 UM/MOD drop 411774 UM/MOD drop |x| mod 2pi + * QT b! @b -if P1 drop inv 1 + jump J1 P1: drop J1: r + * dup -205888 + -if BIG drop + * dup 205887 + -if OK drop 411774 + ; + * OK: drop ; + * BIG: drop -411774 + ; + * Clobbers A and B. */ + { + v4_asm_ref l1, p1, j1, big, ok; + w_qreduce = v4_asm_label(&as); + O(DUP); VSET(QT); + l1 = FWD(MINUS_IF); CALL(w_dnegate); HERE_(l1); + LIT(0); LIT(411774); CALL(w_ummod); O(DROP); + LIT(411774); CALL(w_ummod); O(DROP); + VGET(QT); p1 = FWD(MINUS_IF); + O(DROP); O(INV); LIT(1); O(ADD); j1 = FWD(JUMP); + HERE_(p1); O(DROP); + HERE_(j1); + O(DUP); LIT(-205888); O(ADD); big = FWD(MINUS_IF); + O(DROP); + O(DUP); LIT(205887); O(ADD); ok = FWD(MINUS_IF); + O(DROP); LIT(411774); O(ADD); O(SEMI); + HERE_(ok); O(DROP); O(SEMI); + HERE_(big); O(DROP); LIT(-411774); O(ADD); O(SEMI); + } + + /* : Q.SIN ( x -- sin x ) 5.26, v3's q48_sin_approx + * On r = (Q.REDUCE) x and xu = |r|: xu - xu^3/3! + xu^5/5! - ... to + * n = 11, each term the last times xu^2 over n(n-1), stopping once a + * term is below 10 ulp; negated if r < 0. After the reduction every + * value fits one cell, so (QT) holds single cells: sign, x^2, term, + * sum, n, subtract flag. The loop is TRIG; Q.COS jumps into it. + * (Q.REDUCE) dup QT b! !b -if A1 inv 1 + A1: xu + * dup QT 2 + b! !b dup QT 3 + b! !b term = sum = xu + * 0 over 0 Q.* drop QT 1 + b! !b x^2 + * 3 QT 4 + b! !b -1 QT 5 + b! !b + * TRIG: QT 2 + b! @b 0 QT 1 + b! @b 0 Q.* drop + * 0 QT 4 + b! @b dup -1 + UM* drop 65536 UM* drop 0 Q./ drop + * dup QT 2 + b! !b term + * QT 5 + b! @b if ADDT drop inv 1 + jump ACC ADDT: drop + * ACC: QT 3 + b! @b + !b QT 5 + b! @b inv !b sum, flip the flag + * QT 2 + b! @b -10 + -if CONT drop jump END + * CONT: drop QT 4 + b! @b 2 + dup !b -12 + -if END2 drop jump TRIG + * END2: drop + * END: QT 3 + b! @b QT b! @b -if PR drop inv 1 + jump SD PR: drop + * SD: dup -if SP drop -1 ; SP: drop 0 ; + * Clobbers A and B. */ + { + v4_asm_ref a1, addt, j_acc, contn, j_end, end2, pr, j_sd, sp; + w_qsin = v4_asm_label(&as); + CALL(w_qreduce); O(DUP); VSET(QT); + a1 = FWD(MINUS_IF); O(INV); LIT(1); O(ADD); HERE_(a1); + O(DUP); VSET(QT + 2); O(DUP); VSET(QT + 3); + LIT(0); O(OVER); LIT(0); CALL(w_qstar); O(DROP); VSET(QT + 1); + LIT(3); VSET(QT + 4); LIT(-1); VSET(QT + 5); + l_trig = v4_asm_label(&as); + VGET(QT + 2); LIT(0); VGET(QT + 1); LIT(0); CALL(w_qstar); O(DROP); + LIT(0); VGET(QT + 4); O(DUP); LIT(-1); O(ADD); CALL(w_umstar); O(DROP); + LIT(65536); CALL(w_umstar); O(DROP); LIT(0); CALL(w_qslash); O(DROP); + O(DUP); VSET(QT + 2); + VGET(QT + 5); addt = FWD(IF); + O(DROP); O(INV); LIT(1); O(ADD); j_acc = FWD(JUMP); + HERE_(addt); O(DROP); + HERE_(j_acc); + VGET(QT + 3); O(ADD); O(STORE_B); + VGET(QT + 5); O(INV); O(STORE_B); + VGET(QT + 2); LIT(-10); O(ADD); contn = FWD(MINUS_IF); + O(DROP); j_end = FWD(JUMP); + HERE_(contn); + O(DROP); VGET(QT + 4); LIT(2); O(ADD); O(DUP); O(STORE_B); + LIT(-12); O(ADD); end2 = FWD(MINUS_IF); + O(DROP); JUMP_TO(l_trig); + HERE_(end2); O(DROP); + HERE_(j_end); + VGET(QT + 3); VGET(QT); pr = FWD(MINUS_IF); + O(DROP); O(INV); LIT(1); O(ADD); j_sd = FWD(JUMP); + HERE_(pr); O(DROP); + HERE_(j_sd); + O(DUP); sp = FWD(MINUS_IF); + O(DROP); LIT(-1); O(SEMI); + HERE_(sp); O(DROP); LIT(0); O(SEMI); + } + + /* : Q.COS ( x -- cos x ) 5.26, v3's q48_cos_approx + * On xu = |(Q.REDUCE) x|: 1 - xu^2/2! + xu^4/4! - ... to n = 10, by + * Q.SIN's loop: term and sum start at 1.0, n at 2, and the sign cell is + * 0 so nothing is negated at the end. + * (Q.REDUCE) -if A1 inv 1 + A1: xu + * 0 QT b! !b 0 over 0 Q.* drop QT 1 + b! !b x^2 + * 65536 QT 2 + b! !b 65536 QT 3 + b! !b + * 2 QT 4 + b! !b -1 QT 5 + b! !b jump TRIG + * Clobbers A and B. */ + { + v4_asm_ref a1; + w_qcos = v4_asm_label(&as); + CALL(w_qreduce); + a1 = FWD(MINUS_IF); O(INV); LIT(1); O(ADD); HERE_(a1); + LIT(0); VSET(QT); + LIT(0); O(OVER); LIT(0); CALL(w_qstar); O(DROP); VSET(QT + 1); + LIT(65536); VSET(QT + 2); LIT(65536); VSET(QT + 3); + LIT(2); VSET(QT + 4); LIT(-1); VSET(QT + 5); + JUMP_TO(l_trig); + } +#undef VSET +#undef VGET +#undef JUMP_TO +#undef HERE_ +#undef FWD + + /* Q.1, Q.0, Q.SCALE 5.26, fate IN + * In-line double-cell constants: the compiler places two literals, low + * cell first. Q.1 and Q.SCALE are `65536 0` (1.0), Q.0 is `0 0`; v3's + * are 65536, 0 and 65536. Each expansion is assembled here followed by + * `;` so that it can be run, and then in the middle of a definition, as + * it would be used: + * Q.1 Q.* ( q -- q ) Q.0 Q.+ ( q -- q ) + * Q.1 Q.TO-INT ( -- 1 ) 1 Q.FROM-INT ( -- q ), which must be Q.1 */ +#define Q_ONE() do { LIT(65536); LIT(0); } while (0) +#define Q_ZERO() do { LIT(0); LIT(0); } while (0) +#define Q_SCALE() do { LIT(65536); LIT(0); } while (0) + w_q1 = v4_asm_label(&as); Q_ONE(); O(SEMI); + w_q0 = v4_asm_label(&as); Q_ZERO(); O(SEMI); + w_qscale = v4_asm_label(&as); Q_SCALE(); O(SEMI); + w_q1_times = v4_asm_label(&as); Q_ONE(); CALL(w_qstar); O(SEMI); + w_q0_plus = v4_asm_label(&as); Q_ZERO(); CALL(w_dplus); O(SEMI); + w_q1_toint = v4_asm_label(&as); Q_ONE(); CALL(w_qtoint); O(SEMI); + w_one_fromint = v4_asm_label(&as); LIT(1); CALL(w_qfromint); O(SEMI); +#undef Q_SCALE +#undef Q_ZERO +#undef Q_ONE + + /* : LSHIFT ( x n -- x<>n ) BEGIN dup WHILE 1- SWAP 2/ MSB inv and SWAP REPEAT drop ; + * As written. Section 2 expands BEGIN ... WHILE ... REPEAT as it does IF: + * L0: dup if L1 drop jump L0 L1: drop + * 1- is in line (-1 +); SWAP is a call. */ + { + v4_cell l0; + v4_asm_ref l1; + w_lshift = v4_asm_label(&as); + l0 = v4_asm_label(&as); + O(DUP); l1 = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); LIT(-1); O(ADD); CALL(w_swap); O(TWO_STAR); CALL(w_swap); + v4_asm_branch(&as, V4_OP_JUMP, l0); + v4_asm_resolve(&as, l1, v4_asm_label(&as)); + O(DROP); O(DROP); O(SEMI); + + w_rshift = v4_asm_label(&as); + l0 = v4_asm_label(&as); + O(DUP); l1 = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); LIT(-1); O(ADD); CALL(w_swap); + O(TWO_SLASH); LIT((v4_cell)V4_MSB); O(INV); O(AND); CALL(w_swap); + v4_asm_branch(&as, V4_OP_JUMP, l0); + v4_asm_resolve(&as, l1, v4_asm_label(&as)); + O(DROP); O(DROP); O(SEMI); + } + + /* Byte access on a word-addressed node (D-1), 5.3: four + * bytes to a cell, little-endian; a byte address is 4 * word address + + * byte index. `@` and `!` here are the opcodes, addressing through A. + * : C@ ( baddr -- c ) call-free + * dup 2/ 2/ a! 3 and k A: word address + * if K0 -1 + if K1 -1 + if K2 + * drop @ 23 FOR 2/ UNEXT 255 and ; byte 3 + * K2: drop @ 15 FOR 2/ UNEXT 255 and ; byte 2 + * K1: drop @ 7 FOR 2/ UNEXT 255 and ; byte 1 + * K0: drop @ 255 and ; byte 0 + * : C! ( c baddr -- ) call-free + * dup 2/ 2/ a! 3 and push 255 and pop c' k A: word address + * if K0 -1 + if K1 -1 + if K2 + * drop 23 FOR 2* UNEXT @ 4278190080 inv and + ! ; byte 3 + * K2: drop 15 FOR 2* UNEXT @ -16711681 and + ! ; byte 2 + * K1: drop 7 FOR 2* UNEXT @ -65281 and + ! ; byte 1 + * K0: drop @ -256 and + ! ; byte 0 + * One case per byte position: the byte is shifted up, that byte of the + * cell cleared with a constant mask, and the two added. */ + w_cfetch = v4_asm_label(&as); + { + v4_asm_ref f0, f1, f2; + O(DUP); O(TWO_SLASH); O(TWO_SLASH); O(BANG_A); LIT(3); O(AND); + f0 = v4_asm_branch_fwd(&as, V4_OP_IF); + LIT(-1); O(ADD); f1 = v4_asm_branch_fwd(&as, V4_OP_IF); + LIT(-1); O(ADD); f2 = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); O(FETCH_A); LIT(23); O(PUSH); + (void)v4_asm_label(&as); + O(TWO_SLASH); O(UNEXT); + LIT(255); O(AND); O(SEMI); + v4_asm_resolve(&as, f2, v4_asm_label(&as)); + O(DROP); O(FETCH_A); LIT(15); O(PUSH); + (void)v4_asm_label(&as); + O(TWO_SLASH); O(UNEXT); + LIT(255); O(AND); O(SEMI); + v4_asm_resolve(&as, f1, v4_asm_label(&as)); + O(DROP); O(FETCH_A); LIT(7); O(PUSH); + (void)v4_asm_label(&as); + O(TWO_SLASH); O(UNEXT); + LIT(255); O(AND); O(SEMI); + v4_asm_resolve(&as, f0, v4_asm_label(&as)); + O(DROP); O(FETCH_A); LIT(255); O(AND); O(SEMI); + } + + { + v4_asm_ref k0, k1, k2; + w_cstore = v4_asm_label(&as); + O(DUP); O(TWO_SLASH); O(TWO_SLASH); O(BANG_A); + LIT(3); O(AND); O(PUSH); LIT(255); O(AND); O(RPOP); + k0 = v4_asm_branch_fwd(&as, V4_OP_IF); + LIT(-1); O(ADD); k1 = v4_asm_branch_fwd(&as, V4_OP_IF); + LIT(-1); O(ADD); k2 = v4_asm_branch_fwd(&as, V4_OP_IF); + O(DROP); LIT(23); O(PUSH); + (void)v4_asm_label(&as); + O(TWO_STAR); O(UNEXT); + O(FETCH_A); LIT((v4_cell)(v4_ucell)0xFF000000u); O(INV); O(AND); O(ADD); O(STORE_A); O(SEMI); + v4_asm_resolve(&as, k2, v4_asm_label(&as)); + O(DROP); LIT(15); O(PUSH); + (void)v4_asm_label(&as); + O(TWO_STAR); O(UNEXT); + O(FETCH_A); LIT(-16711681); O(AND); O(ADD); O(STORE_A); O(SEMI); + v4_asm_resolve(&as, k1, v4_asm_label(&as)); + O(DROP); LIT(7); O(PUSH); + (void)v4_asm_label(&as); + O(TWO_STAR); O(UNEXT); + O(FETCH_A); LIT(-65281); O(AND); O(ADD); O(STORE_A); O(SEMI); + v4_asm_resolve(&as, k0, v4_asm_label(&as)); + O(DROP); O(FETCH_A); LIT(-256); O(AND); O(ADD); O(STORE_A); O(SEMI); + } + + /* ---- the rest of 5.6 and 5.7 ---- */ +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) +#define SWAP_INLINE() do { O(OVER); O(PUSH); O(PUSH); O(DROP); O(RPOP); O(RPOP); } while (0) + { + v4_asm_ref a, b; + + /* : M- ( d n -- d ) S>D DNEGATE jump D+ + * S>D in line: dup -if P drop -1 jump J P: drop 0 J: + * d - n as d + (-n) with n widened first, so the most negative n is + * subtracted correctly (NEGATE M+ would add it). */ + w_mminus = v4_asm_label(&as); + O(DUP); a = FWD(MINUS_IF); O(DROP); LIT(-1); b = FWD(JUMP); + HERE_(a); O(DROP); LIT(0); + HERE_(b); + CALL(w_dnegate); v4_asm_branch(&as, V4_OP_JUMP, w_dplus); + + /* : M* ( n1 n2 -- d ) + * over over xor push R: sign of the product + * -if A inv 1 + A: push -if B inv 1 + B: pop |n1| |n2| + * UM* pop -if P drop jump DNEGATE P: drop ; */ + w_mstar = v4_asm_label(&as); + O(OVER); O(OVER); O(XOR); O(PUSH); + a = FWD(MINUS_IF); O(INV); LIT(1); O(ADD); HERE_(a); + O(PUSH); + a = FWD(MINUS_IF); O(INV); LIT(1); O(ADD); HERE_(a); + O(RPOP); + CALL(w_umstar); O(RPOP); a = FWD(MINUS_IF); + O(DROP); v4_asm_branch(&as, V4_OP_JUMP, w_dnegate); + HERE_(a); O(DROP); O(SEMI); + + /* : M/MOD ( d n -- rem quot ) jump SM/REM */ + w_mslashmod = v4_asm_label(&as); + v4_asm_branch(&as, V4_OP_JUMP, w_smrem); + + /* : MOD ( n1 n2 -- rem ) /MOD drop, /MOD's body in line */ + w_mod = v4_asm_label(&as); + O(PUSH); CALL(w_s2d); O(RPOP); CALL(w_smrem); O(DROP); O(SEMI); + + // : */MOD ( n1 n2 n3 -- rem quot ) push M* pop jump SM/REM + w_starslashmod = v4_asm_label(&as); + O(PUSH); CALL(w_mstar); O(RPOP); v4_asm_branch(&as, V4_OP_JUMP, w_smrem); + + // : */ ( n1 n2 n3 -- quot ) push M* pop SM/REM push drop pop ; that is, */MOD NIP + w_starslash = v4_asm_label(&as); + O(PUSH); CALL(w_mstar); O(RPOP); CALL(w_smrem); O(PUSH); O(DROP); O(RPOP); O(SEMI); + + /* : D0< ( d -- flag ) push drop pop jump 0< NIP 0< */ + w_d0less = v4_asm_label(&as); + O(PUSH); O(DROP); O(RPOP); v4_asm_branch(&as, V4_OP_JUMP, w_zless); + + /* : D2* ( d -- 2d ) + * 2* over -if P drop 1 + jump J P: drop J: push 2* pop ; + * the low cell's top bit enters the high cell. */ + w_d2star = v4_asm_label(&as); + O(TWO_STAR); O(OVER); a = FWD(MINUS_IF); O(DROP); LIT(1); O(ADD); b = FWD(JUMP); + HERE_(a); O(DROP); + HERE_(b); + O(PUSH); O(TWO_STAR); O(RPOP); O(SEMI); + + /* : D2/ ( d -- d/2 ) push a! 0 pop +* push drop a pop ; + * one +* with S = 0 is an exact arithmetic right shift of T:A (as in + * Q.FROM-INT). Clobbers A. */ + w_d2slash = v4_asm_label(&as); + O(PUSH); O(BANG_A); LIT(0); O(RPOP); O(MUL_STEP); O(PUSH); O(DROP); O(PUSH_A); O(RPOP); O(SEMI); + + /* : 2ROT ( d1 d2 d3 -- d2 d3 d1 ) push push 2SWAP pop pop jump 2SWAP */ + w_2rot = v4_asm_label(&as); + O(PUSH); O(PUSH); CALL(w_2swap); O(RPOP); O(RPOP); v4_asm_branch(&as, V4_OP_JUMP, w_2swap); + + /* 2DROP is drop drop */ + w_2drop = v4_asm_label(&as); + O(DROP); O(DROP); O(SEMI); + + /* ( d -- d d ) 2>R 2R@ 2R> in line: + * 2>R is SWAP push push + * 2R@ is pop pop 2DUP push push SWAP + * 2R> is pop pop SWAP */ + t_2r = v4_asm_label(&as); + SWAP_INLINE(); O(PUSH); O(PUSH); + O(RPOP); O(RPOP); O(OVER); O(OVER); O(PUSH); O(PUSH); SWAP_INLINE(); + O(RPOP); O(RPOP); SWAP_INLINE(); + O(SEMI); + + /* ( lo hi -- hi lo ) 2>R R> R> the high cell is on top of R, as in v3 */ + t_2rorder = v4_asm_label(&as); + SWAP_INLINE(); O(PUSH); O(PUSH); O(RPOP); O(RPOP); O(SEMI); + } +#undef SWAP_INLINE +#undef HERE_ +#undef FWD + + CHECK(v4_asm_ok(&as), "foundation words assemble"); + CHECK(v4_asm_label(&as) <= BYTES, "code stays below the variables"); + printf(" code: %ld of %u words\n", (long)v4_asm_label(&as) - 16, (unsigned)V4_NODE_WORDS); +} + +/* Call `word` with a canary and up to three arguments on fresh stacks. */ +static int call(v4_cell word, unsigned argc, v4_cell a, v4_cell b, v4_cell c) +{ + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + v4_dstack_push(&n.ds, CANARY); + if (argc > 0) v4_dstack_push(&n.ds, a); + if (argc > 1) v4_dstack_push(&n.ds, b); + if (argc > 2) v4_dstack_push(&n.ds, c); + return v4_test_call(&n, &es, &h, word, 4000000) > 0; +} + +/* The same with four arguments. */ +static int call4(v4_cell word, v4_cell a, v4_cell b, v4_cell c, v4_cell d) +{ + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_dstack_push(&n.ds, CANARY); + v4_dstack_push(&n.ds, a); + v4_dstack_push(&n.ds, b); + v4_dstack_push(&n.ds, c); + v4_dstack_push(&n.ds, d); + return v4_test_call(&n, &es, &h, word, 4000000) > 0; +} + +/* The results, top first, then the canary. */ +static int left1(v4_cell t) +{ + return n.ds.t == t && n.ds.s == CANARY; +} +static int left2(v4_cell s, v4_cell t) +{ + if (n.ds.t != t || n.ds.s != s) return 0; + (void)v4_dstack_pop(&n.ds); + return n.ds.s == CANARY; +} +static int left3(v4_cell third, v4_cell s, v4_cell t) +{ + if (n.ds.t != t) return 0; + (void)v4_dstack_pop(&n.ds); + return left2(third, s); +} + +static const v4_cell vec[] = { + 0, 1, 2, 3, -1, -2, 12345, -12345, + (v4_cell)(V4_MSB - 1u), (v4_cell)V4_MSB, (v4_cell)(V4_MSB + 1u), + (v4_cell)(V4_MSB >> 1), (v4_cell)((V4_MSB >> 1) - 1u), + (v4_cell)(MAXU / 3u), (v4_cell)(MAXU / 3u * 2u) +}; +#define NVEC (sizeof vec / sizeof vec[0]) + +/* Does UM* as written give the true product? */ +static int umstar_exact(v4_ucell u1, v4_ucell u2) +{ + v4_ucell lo, hi; + v4_umul(u1, u2, &lo, &hi); + return call(w_umstar, 2, (v4_cell)u1, (v4_cell)u2, 0) && left2((v4_cell)lo, (v4_cell)hi); +} + +/* UM/MOD against the identity it must satisfy: q*d + r = uhi:ulo, r < d. + * Checked through v4_umul (itself tested in test_umul.c) rather than against + * a second division routine, so no C divider has to be trusted. */ +static int ummod_exact(v4_ucell lo, v4_ucell hi, v4_ucell d) +{ + v4_ucell r, q, plo, phi, slo; + if (!call(w_ummod, 3, (v4_cell)lo, (v4_cell)hi, (v4_cell)d)) return 0; + q = (v4_ucell)n.ds.t; + r = (v4_ucell)n.ds.s; + if (!left2((v4_cell)r, (v4_cell)q)) return 0; + v4_umul(q, d, &plo, &phi); + slo = plo + r; + phi += (slo < plo); + return r < d && slo == lo && phi == hi; +} + +/* Doubles in C, as (lo, hi) with hi the high cell, for the section 5.7 and + * SM/REM checks. */ +static void dadd(v4_ucell al, v4_ucell ah, v4_ucell bl, v4_ucell bh, + v4_ucell *rl, v4_ucell *rh) +{ + *rl = al + bl; + *rh = ah + bh + (*rl < al); +} +static void dneg(v4_ucell l, v4_ucell h, v4_ucell *rl, v4_ucell *rh) +{ + dadd(~l, ~h, 1u, 0u, rl, rh); +} +/* Signed q * n as a signed double. */ +static void smul(v4_cell q, v4_cell nn, v4_ucell *rl, v4_ucell *rh) +{ + v4_ucell uq = (v4_ucell)q, un = (v4_ucell)nn; + if (q < 0) uq = 0u - uq; + if (nn < 0) un = 0u - un; + v4_umul(uq, un, rl, rh); + if ((q < 0) != (nn < 0)) dneg(*rl, *rh, rl, rh); +} + +/* SM/REM on the dividend d = q*n + r, built so that (r, q) is the + * truncating answer: |r| < |n|, and r is zero or has the sign of d. */ +static int smrem_exact(v4_cell q, v4_cell nn, v4_cell r) +{ + v4_ucell pl, ph, dl, dh; + smul(q, nn, &pl, &ph); + dadd(pl, ph, (v4_ucell)r, r < 0 ? MAXU : 0u, &dl, &dh); + return call(w_smrem, 3, (v4_cell)dl, (v4_cell)dh, nn) && left2(r, q); +} + +/* Six arguments, for 2ROT. */ +static int call6(v4_cell word, const v4_cell *a, unsigned dfill, unsigned rfill) +{ + unsigned i; + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + for (i = 0; i < dfill; i++) v4_dstack_push(&n.ds, (v4_cell)(0x5A000000 + i)); + v4_dstack_push(&n.ds, CANARY); + for (i = 0; i < 6; i++) v4_dstack_push(&n.ds, a[i]); + for (i = 0; i < rfill; i++) v4_rstack_push(&n.rs, (v4_cell)(0x6B000000 + i)); + return v4_test_call(&n, &es, &h, word, 4000000) > 0; +} +static int rot6_ok(const v4_cell *a, unsigned dfill, unsigned rfill) +{ + static const unsigned from[6] = { 2, 3, 4, 5, 0, 1 }; /* d2 d3 d1 */ + unsigned i; + if (!call6(w_2rot, a, dfill, rfill)) return 0; + for (i = 6; i-- > 0; ) if (v4_dstack_pop(&n.ds) != a[from[i]]) return 0; + if (v4_dstack_pop(&n.ds) != CANARY) return 0; + for (i = dfill; i-- > 0; ) if (v4_dstack_pop(&n.ds) != (v4_cell)(0x5A000000 + i)) return 0; + for (i = rfill; i-- > 0; ) if (v4_rstack_pop(&n.rs) != (v4_cell)(0x6B000000 + i)) return 0; + return 1; +} + +/* n1 * n2 / n3 through a double product. Returns 1 when the truncated + * quotient fits a cell and (r, q) is it: q*n3 + r = n1*n2, |r| < |n3|, r zero + * or of the product's sign; 0 when it fits and (r, q) is wrong; -1 when it + * does not fit (unspecified, as for SM/REM). */ +static int starslash_ref(v4_cell n1, v4_cell n2, v4_cell n3, v4_cell r, v4_cell q) +{ + v4_ucell pl, ph, al, ah, ql, qh, sl, sh, un3 = n3 < 0 ? 0u - (v4_ucell)n3 : (v4_ucell)n3, ur; + int pneg; + smul(n1, n2, &pl, &ph); + pneg = (ph & V4_MSB) != 0; + al = pl; ah = ph; + if (pneg) dneg(pl, ph, &al, &ah); + if (ah >= (V4_MSB >> 1)) return -1; + if (((ah << 1) | (al >> (V4_CELL_BITS - 1))) >= un3) return -1; /* |p| >= |n3| * 2^(N-1) */ + smul(q, n3, &ql, &qh); + dadd(ql, qh, (v4_ucell)r, r < 0 ? MAXU : 0u, &sl, &sh); + ur = r < 0 ? 0u - (v4_ucell)r : (v4_ucell)r; + return sl == pl && sh == ph && ur < un3 && (r == 0 || (r < 0) == pneg); +} + +/* Q48.16 (section 5.26). v3's Q.+ and Q.- are uint64_t a + b and a - b, + * wrapping (v3/include/q48_16.h). Here a Q value is a double: at 32-bit + * cells its two halves, at 64-bit cells the value sign-extended (D-8). */ +static void qcells(uint64_t q, v4_cell *lo, v4_cell *hi) +{ +#if V4_CELL_BITS == 32 + *lo = (v4_cell)(v4_ucell)(q & 0xFFFFFFFFu); + *hi = (v4_cell)(v4_ucell)(q >> 32); +#else + *lo = (v4_cell)(v4_ucell)q; + *hi = (q >> 63) ? V4_ALL_ONES : 0; +#endif +} + +/* Run Q.+ (the D+ word) or Q.- (the D- word) on a and b and compare with + * v3's 64-bit wrapping result. At 32-bit cells the double must equal v3's + * value bit for bit. At 64-bit cells the low cell must equal v3's value and + * the high cell must be the true sign of the unwrapped result. */ +static int q_matches_v3(v4_cell word, uint64_t a, uint64_t b, uint64_t v3) +{ + v4_cell al, ah, bl, bh, rl, rh; + qcells(a, &al, &ah); + qcells(b, &bl, &bh); + if (!call4(word, al, ah, bl, bh)) return 0; +#if V4_CELL_BITS == 32 + qcells(v3, &rl, &rh); + return left2(rl, rh); +#else + { + v4_ucell xl, xh, nl, nh; + if (word == w_dminus) { dneg((v4_ucell)bl, (v4_ucell)bh, &nl, &nh); } + else { nl = (v4_ucell)bl; nh = (v4_ucell)bh; } + dadd((v4_ucell)al, (v4_ucell)ah, nl, nh, &xl, &xh); + rl = (v4_cell)(v4_ucell)v3; + rh = (v4_cell)xh; + return (v4_ucell)rl == xl && left2(rl, rh); + } +#endif +} + +/* The same for the one-operand Q words: Q.ABS (the DABS word) and Q.NEG + * (the DNEGATE word). `wl`, `wh` is the exact double result, which at + * 64-bit cells may differ from v3 in the high cell only (D-10). */ +static int q1_matches_v3(v4_cell word, uint64_t a, uint64_t v3) +{ + v4_cell al, ah, rl, rh; + v4_ucell xl, xh; + qcells(a, &al, &ah); + if (!call(word, 2, al, ah, 0)) return 0; +#if V4_CELL_BITS == 32 + (void)xl; (void)xh; + qcells(v3, &rl, &rh); + return left2(rl, rh); +#else + if (word == w_dnegate || ah < 0) dneg((v4_ucell)al, (v4_ucell)ah, &xl, &xh); + else { xl = (v4_ucell)al; xh = (v4_ucell)ah; } + rl = (v4_cell)(v4_ucell)v3; + rh = (v4_cell)xh; + return (v4_ucell)rl == xl && left2(rl, rh); +#endif +} + +/* x shifted right `k` bits, arithmetic, without C's implementation-defined + * right shift of a negative value. */ +static v4_ucell asr_u(v4_ucell x, unsigned k) +{ + v4_ucell r = x >> k; + if (k && (x & V4_MSB)) r |= ~(MAXU >> k); + return r; +} +static uint64_t asr64(uint64_t x, unsigned k) +{ + uint64_t r = x >> k; + if (k && (x >> 63)) r |= ~((~(uint64_t)0) >> k); + return r; +} + +/* The k results, given bottom first, then the canary under them. */ +static int leftk(const v4_cell *want, unsigned k) +{ + while (k-- > 0) + if (v4_dstack_pop(&n.ds) != want[k]) return 0; + return v4_dstack_pop(&n.ds) == CANARY; +} + +/* Signed double a < b, in C. */ +static int dlt(v4_ucell al, v4_ucell ah, v4_ucell bl, v4_ucell bh) +{ + if (ah != bh) return (v4_cell)ah < (v4_cell)bh; + return al < bl; +} + +/* Q48.16 as v4 reads it (D-8: signed). */ +static int64_t qs(uint64_t q) +{ + return (q >> 63) ? -(int64_t)(~q) - 1 : (int64_t)q; +} + +/* Reference Q.* for any cell width, by a different method from the FORTH: + * the Q values (two cells each) as signed integers in 16-bit limbs, the + * magnitudes multiplied schoolbook, the product negated if the signs differ, + * then shifted right 16 (one limb) and cut to two cells. Shifting the + * two's-complement product rounds toward minus infinity. */ +#define QLIMBS (2 * V4_CELL_BITS / 16) +static void q_to_limbs(v4_ucell lo, v4_ucell hi, uint32_t *l, int *neg) +{ + unsigned i; + *neg = (hi & V4_MSB) != 0; + if (*neg) dneg(lo, hi, &lo, &hi); + for (i = 0; i < QLIMBS / 2; i++) { + l[i] = (uint32_t)((lo >> (16 * i)) & 0xFFFFu); + l[i + QLIMBS / 2] = (uint32_t)((hi >> (16 * i)) & 0xFFFFu); + } +} +static void qmul_ref(v4_ucell al, v4_ucell ah, v4_ucell bl, v4_ucell bh, + v4_ucell *rl, v4_ucell *rh) +{ + uint32_t a[QLIMBS], b[QLIMBS], p[2 * QLIMBS]; + int an, bn; + unsigned i, j; + + q_to_limbs(al, ah, a, &an); + q_to_limbs(bl, bh, b, &bn); + for (i = 0; i < 2 * QLIMBS; i++) p[i] = 0; + for (i = 0; i < QLIMBS; i++) { + uint32_t carry = 0; + for (j = 0; j < QLIMBS; j++) { + uint32_t t = a[i] * b[j] + p[i + j] + carry; /* < 2^32 */ + p[i + j] = t & 0xFFFFu; + carry = t >> 16; + } + p[i + QLIMBS] = carry; + } + if (an != bn) { /* negate, 2's complement */ + uint32_t carry = 1; + for (i = 0; i < 2 * QLIMBS; i++) { + uint32_t t = (~p[i] & 0xFFFFu) + carry; + p[i] = t & 0xFFFFu; + carry = t >> 16; + } + } + *rl = 0; *rh = 0; /* limbs 1 .. QLIMBS */ + for (i = 0; i < QLIMBS / 2; i++) { + *rl |= (v4_ucell)p[1 + i] << (16 * i); + *rh |= (v4_ucell)p[1 + QLIMBS / 2 + i] << (16 * i); + } +} + +/* v3's q48_mul: unsigned (a * b) >> 16, cut to 64 bits, as its __int128 + * branch computes it on 64-bit gcc/clang hosts. This is the portable + * branch of v3/src/word_source/q48_16_words.c with its last line corrected: + * v3 returns (result_hi << 16) | (result_lo >> 16), which is wrong whenever + * the product reaches past bit 64 (the high cell must move up 48 bits, not + * 16). v3 uses that branch only on hosts without __int128. */ +static uint64_t v3_q48_mul(uint64_t a, uint64_t b) +{ + uint64_t a_hi = a >> 32; + uint64_t a_lo = a & 0xFFFFFFFFULL; + uint64_t b_hi = b >> 32; + uint64_t b_lo = b & 0xFFFFFFFFULL; + uint64_t p_ll = a_lo * b_lo; + uint64_t p_lh = a_lo * b_hi; + uint64_t p_hl = a_hi * b_lo; + uint64_t p_hh = a_hi * b_hi; + uint64_t carry = 0; + uint64_t mid = p_lh + p_hl; + uint64_t result_hi, result_lo; + if (mid < p_lh) carry++; + result_hi = p_hh + (mid >> 32) + (carry << 32); + result_lo = p_ll + ((mid & 0xFFFFFFFFULL) << 32); + if (result_lo < p_ll) result_hi++; + return (result_hi << 48) | (result_lo >> 16); +} + +/* Reference Q./ (D-11), by a different method from the FORTH: magnitudes + * in 16-bit limbs, |a| * 2^16 divided by |b| one bit at a time, then the + * sign applied (rounding toward zero) and the result saturated to Q max or + * Q min. Division by zero gives Q max / Q min by the dividend's sign, 0 for + * 0 / 0, and *err = 1. */ +static void qdiv_ref(v4_ucell al, v4_ucell ah, v4_ucell bl, v4_ucell bh, + v4_ucell *rl, v4_ucell *rh, int *err) +{ + uint32_t a[QLIMBS], b[QLIMBS], num[QLIMBS + 1], quo[QLIMBS + 1], rem[QLIMBS + 1]; + int an, bn, neg, big = 0; + unsigned i, k; + + *err = 0; + if (bl == 0 && bh == 0) { + *err = 1; + if (al == 0 && ah == 0) { *rl = 0; *rh = 0; } + else if (ah & V4_MSB) { *rl = 0; *rh = V4_MSB; } + else { *rl = MAXU; *rh = MAXU >> 1; } + return; + } + q_to_limbs(al, ah, a, &an); + q_to_limbs(bl, bh, b, &bn); + neg = an != bn; + num[0] = 0; /* |a| * 2^16 */ + for (i = 0; i < QLIMBS; i++) num[i + 1] = a[i]; + for (i = 0; i <= QLIMBS; i++) { quo[i] = 0; rem[i] = 0; } + for (k = 16 * (QLIMBS + 1); k-- > 0; ) { + uint32_t bit = (num[k / 16] >> (k % 16)) & 1u, c = bit; + int ge = 1; + for (i = 0; i <= QLIMBS; i++) { /* rem = 2 rem + bit */ + uint32_t t = (rem[i] << 1) | c; + rem[i] = t & 0xFFFFu; + c = t >> 16; + } + for (i = QLIMBS + 1; i-- > 0; ) { /* rem >= |b| ? */ + uint32_t bv = i < QLIMBS ? b[i] : 0; + if (rem[i] != bv) { ge = rem[i] > bv; break; } + } + if (ge) { + uint32_t br = 0; + for (i = 0; i <= QLIMBS; i++) { + uint32_t bv = i < QLIMBS ? b[i] : 0; + uint32_t t = rem[i] - bv - br; + br = (t >> 16) & 1u; + rem[i] = t & 0xFFFFu; + } + quo[k / 16] |= 1u << (k % 16); + } + } + if (quo[QLIMBS] || (quo[QLIMBS - 1] & 0x8000u)) big = 1; /* >= 2^(2N-1) */ + if (big) { + if (neg) { *rl = 0; *rh = V4_MSB; } + else { *rl = MAXU; *rh = MAXU >> 1; } + return; + } + *rl = 0; *rh = 0; + for (i = 0; i < QLIMBS / 2; i++) { + *rl |= (v4_ucell)quo[i] << (16 * i); + *rh |= (v4_ucell)quo[QLIMBS / 2 + i] << (16 * i); + } + if (neg) dneg(*rl, *rh, rl, rh); +} + +/* v3's q48_div and q48_exp_approx (v3/src/word_source/q48_16_words.c), + * verbatim but for the names, as the parity reference for Q.EXP. They use + * v3_q48_mul above, which is v3's __int128 result. */ +static uint64_t v3_q48_div(uint64_t a, uint64_t b) +{ + if (b == 0) return 0; + if (a > 0x0000FFFFFFFFFFFFULL) return 0xFFFFFFFFFFFFFFFFULL; + return (a << 16) / b; +} +static uint64_t v3_q48_exp(uint64_t q) +{ + int64_t q_signed; + int is_negative, nn; + uint64_t x, result, term; + + if (q == 0) return 65536; + q_signed = (int64_t)q; + if (q_signed >= 1048576) return 0xFFFFFFFFFFFFFFFFULL; + if (q_signed <= -1048576) return 0; + is_negative = (q_signed < 0); + x = is_negative ? (uint64_t)(-q_signed) : q; + result = 65536; + term = x; + result = result + term; + for (nn = 2; nn <= 10; nn++) { + term = v3_q48_mul(term, x); + term = v3_q48_div(term, (uint64_t)nn << 16); + result = result + term; + if (term < 50) break; + } + if (is_negative) result = v3_q48_div(65536, result); + return result; +} + +/* v3's q48_sqrt_approx, verbatim but for the names. */ +static uint64_t v3_q48_sqrt(uint64_t q) +{ + uint64_t x; + int iter; + if (q == 0) return 0; + if (q == 65536) return 65536; + x = (q >> 1) + 16384; + for (iter = 0; iter < 8; iter++) { + uint64_t q_div_x = v3_q48_div(q, x); + uint64_t x_next = (x + q_div_x) >> 1; + uint64_t delta = (x_next > x) ? (x_next - x) : (x - x_next); + if (delta < 10) break; + x = x_next; + } + return x; +} + +/* v3's q48_log_approx, verbatim but for the names. */ +static uint64_t v3_q48_log(uint64_t x) +{ + const uint64_t LN2_Q48 = 45426; + int k = 0, iter; + uint64_t m = x, y, result; + + if (x == 0) return 0; + if (x == 65536) return 0; + if (m >= 131072) { + while (m >= 131072) { m >>= 1; k++; } + } else if (m < 65536) { + while (m < 65536) { m <<= 1; k--; } + } + y = (m > 65536) ? (m - 65536) : 0; + for (iter = 0; iter < 6; iter++) { + uint64_t exp_y = v3_q48_exp(y), correction; + int64_t delta_signed; + if (exp_y == 0) break; + delta_signed = (int64_t)m - (int64_t)exp_y; + if (delta_signed > 0) { + correction = v3_q48_div((uint64_t)delta_signed, exp_y); + y = y + correction; + } else if (delta_signed < 0) { + correction = v3_q48_div((uint64_t)(-delta_signed), exp_y); + if (y > correction) y = y - correction; + else y = 0; + } + if (delta_signed < 100 && delta_signed > -100) break; + } + result = y; + if (k > 0) result = result + v3_q48_mul((uint64_t)k << 16, LN2_Q48); + else if (k < 0) result = result - v3_q48_mul((uint64_t)(-k) << 16, LN2_Q48); + return result; +} + +/* v3's q48_reduce_angle and q48_sin_approx, verbatim but for the names. */ +static int64_t v3_q48_reduce(int64_t x) +{ + const int64_t PI_Q48 = 205887; + const int64_t TWO_PI_Q48 = 2 * PI_Q48; + int64_t k = x / TWO_PI_Q48; + x -= k * TWO_PI_Q48; + while (x > PI_Q48) x -= TWO_PI_Q48; + while (x < -PI_Q48) x += TWO_PI_Q48; + return x; +} +static uint64_t v3_q48_sin(uint64_t q) +{ + int64_t x = v3_q48_reduce((int64_t)q); + int negative = (x < 0), subtract = 1, nn; + uint64_t xu, x2, term, result; + if (negative) x = -x; + xu = (uint64_t)x; + x2 = v3_q48_mul(xu, xu); + term = xu; + result = xu; + for (nn = 3; nn <= 11; nn += 2) { + term = v3_q48_mul(term, x2); + term = v3_q48_div(term, (uint64_t)(nn * (nn - 1)) << 16); + result = subtract ? result - term : result + term; + subtract = !subtract; + if (term < 10) break; + } + return negative ? (uint64_t)0 - result : result; +} + +/* v3's q48_cos_approx, verbatim but for the names. */ +static uint64_t v3_q48_cos(uint64_t q) +{ + int64_t x = v3_q48_reduce((int64_t)q); + uint64_t xu = (uint64_t)(x < 0 ? -x : x); + uint64_t x2 = v3_q48_mul(xu, xu); + uint64_t term = 65536, result = term; + int subtract = 1, nn; + for (nn = 2; nn <= 10; nn += 2) { + term = v3_q48_mul(term, x2); + term = v3_q48_div(term, (uint64_t)(nn * (nn - 1)) << 16); + result = subtract ? result - term : result + term; + subtract = !subtract; + if (term < 10) break; + } + return result; +} + +/* Stack headroom. Run `word` with `dfill` marked cells under the canary and + * `rfill` marked cells under its return address, and report whether the + * results, the canary and every marked cell come back intact. The F18 stacks + * are circular (D-2), so a word that needs more depth than is free does not + * fault: it silently overwrites the oldest cells, and this is how that shows. */ +#define DFILL(i) ((v4_cell)(0x5A000000 + (i))) +#define RFILL(i) ((v4_cell)(0x6B000000 + (i))) + +static int fits(v4_cell word, unsigned argc, const v4_cell *arg, + unsigned nres, unsigned dfill, unsigned rfill) +{ + v4_cell want[V4_DATA_DEPTH]; + unsigned i; + + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + for (i = 0; i < argc; i++) v4_dstack_push(&n.ds, arg[i]); + if (v4_test_call(&n, &es, &h, word, 4000000) <= 0) return 0; + if (nres > V4_DATA_DEPTH) return 0; + for (i = 0; i < nres; i++) want[i] = v4_dstack_pop(&n.ds); + + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + for (i = 0; i < dfill; i++) v4_dstack_push(&n.ds, DFILL(i)); + v4_dstack_push(&n.ds, CANARY); + for (i = 0; i < argc; i++) v4_dstack_push(&n.ds, arg[i]); + for (i = 0; i < rfill; i++) v4_rstack_push(&n.rs, RFILL(i)); + if (v4_test_call(&n, &es, &h, word, 4000000) <= 0) return 0; + for (i = 0; i < nres; i++) if (v4_dstack_pop(&n.ds) != want[i]) return 0; + if (v4_dstack_pop(&n.ds) != CANARY) return 0; + for (i = dfill; i-- > 0; ) if (v4_dstack_pop(&n.ds) != DFILL(i)) return 0; + for (i = rfill; i-- > 0; ) if (v4_rstack_pop(&n.rs) != RFILL(i)) return 0; + return 1; +} + +/* The most marked cells that survive on each stack, over a set of argument + * tuples chosen to take every branch. The data figure counts cells below the + * canary, so the caller may hold canary + headroom cells under the arguments. */ +static void headroom(const char *name, v4_cell word, unsigned argc, + const v4_cell (*args)[4], unsigned nargs, unsigned nres, + int *dh, int *rh) +{ + int d, r; + unsigned k; + + for (d = 0; d < V4_DATA_DEPTH; d++) { + for (k = 0; k < nargs; k++) if (!fits(word, argc, args[k], nres, (unsigned)d + 1u, 0)) break; + if (k < nargs) break; + } + for (r = 0; r < V4_RET_DEPTH; r++) { + for (k = 0; k < nargs; k++) if (!fits(word, argc, args[k], nres, 0, (unsigned)r + 1u)) break; + if (k < nargs) break; + } + *dh = d; *rh = r; + printf(" %s headroom: data %d below canary, return %d below its return address\n", + name, d, r); +} + +int main(void) +{ + printf("v4 foundation tests: V4_CELL_BITS=%d\n", V4_CELL_BITS); + + build(); + + for (unsigned i = 0; i < NVEC; i++) { + v4_cell a = vec[i]; + v4_ucell ua = (v4_ucell)a; + + CHECK(call(w_negate, 1, a, 0, 0) && left1((v4_cell)(0u - ua)), "NEGATE [%u]", i); + CHECK(call(w_zless, 1, a, 0, 0) && left1(FLAG(ua & V4_MSB)), "0< [%u]", i); + CHECK(call(w_zequal, 1, a, 0, 0) && left1(FLAG(a == 0)), "0= [%u]", i); + + for (unsigned j = 0; j < NVEC; j++) { + v4_cell b = vec[j]; + v4_ucell ub = (v4_ucell)b; + + CHECK(call(w_nip, 2, a, b, 0) && left1(b), "NIP [%u,%u]", i, j); + CHECK(call(w_swap, 2, a, b, 0) && left2(b, a), "SWAP [%u,%u]", i, j); + CHECK(call(w_or, 2, a, b, 0) && left1((v4_cell)(ua | ub)), "OR [%u,%u]", i, j); + CHECK(call(w_2dup, 2, a, b, 0) && n.ds.t == b && n.ds.s == a + && (v4_dstack_pop(&n.ds), v4_dstack_pop(&n.ds), left2(a, b)), + "2DUP [%u,%u]", i, j); + CHECK(call(w_minus, 2, a, b, 0) && left1((v4_cell)(ua - ub)), "- [%u,%u]", i, j); + CHECK(call(w_uless, 2, a, b, 0) && left1(FLAG(ua < ub)), "U< [%u,%u]", i, j); + + for (unsigned k = 0; k < NVEC; k++) { + v4_cell c = vec[k]; + CHECK(call(w_rot, 3, a, b, c) && left3(b, c, a), "ROT [%u,%u,%u]", i, j, k); + } + + CHECK(umstar_exact(ua, ub), "UM* [%u,%u]", i, j); + } + } + + /* UM* over the full range: products of pseudo-random operands, and of + * operands chosen near the edges D-3 makes dangerous (top bit set, all + * ones, just under a power of two). */ + { + v4_ucell x = (v4_ucell)0x9E3779B9u; + for (unsigned i = 0; i < 20000; i++) { + v4_ucell u1, u2; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; + u1 = x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; + u2 = x; + switch (i & 3u) { + case 1: u1 |= V4_MSB; break; + case 2: u1 |= V4_MSB; u2 |= V4_MSB; break; + case 3: u1 = MAXU - (u1 & 7u); break; + default: break; + } + CHECK(umstar_exact(u1, u2), "UM* random [%u]", i); + } + } + + /* The two cases that broke UM* as first written in section 4. */ + CHECK(umstar_exact(MAXU, MAXU), "UM* MAX*MAX: carry out of T (D-3)"); + CHECK(umstar_exact(V4_MSB - 1u, 3u), "UM* (2^(n-1)-1)*3"); + + /* UM/MOD over its defined range, uhi < ud. */ + for (unsigned i = 0; i < NVEC; i++) + for (unsigned j = 0; j < NVEC; j++) + for (unsigned k = 0; k < NVEC; k++) { + v4_ucell lo = (v4_ucell)vec[i], hi = (v4_ucell)vec[j], d = (v4_ucell)vec[k]; + if (hi < d) + CHECK(ummod_exact(lo, hi, d), "UM/MOD [%u,%u,%u]", i, j, k); + } + { + v4_ucell x = (v4_ucell)0x2545F491u; + for (unsigned i = 0; i < 20000; i++) { + v4_ucell lo, hi, d; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; lo = x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; d = x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; hi = x; + switch (i & 3u) { + case 1: d |= V4_MSB; break; /* top bit of d set */ + case 2: d >>= (unsigned)(x & 31u); break; /* small divisors */ + case 3: d = MAXU - (d & 7u); break; /* d just under 2^n */ + default: break; + } + if (d == 0) d = 1; + hi %= d; /* uhi < ud */ + CHECK(ummod_exact(lo, hi, d), "UM/MOD random [%u]", i); + } + } + + /* Section 5 words under SM/REM and /MOD, against their C meaning. */ + for (unsigned i = 0; i < NVEC; i++) { + v4_cell a = vec[i]; + v4_ucell ua = (v4_ucell)a; + CHECK(call(w_abs, 1, a, 0, 0) && left1(a < 0 ? (v4_cell)(0u - ua) : a), "ABS [%u]", i); + CHECK(call(w_s2d, 1, a, 0, 0) && left2(a, FLAG(a < 0)), "S>D [%u]", i); + for (unsigned j = 0; j < NVEC; j++) { + v4_cell b = vec[j]; + v4_ucell ub = (v4_ucell)b, rl, rh; + CHECK(call(w_ugreater, 2, a, b, 0) && left1(FLAG(ua > ub)), "U> [%u,%u]", i, j); + dneg(ua, ub, &rl, &rh); + CHECK(call(w_dnegate, 2, a, b, 0) && left2((v4_cell)rl, (v4_cell)rh), "DNEGATE [%u,%u]", i, j); + if (b >= 0) { rl = ua; rh = ub; } + CHECK(call(w_dabs, 2, a, b, 0) && left2((v4_cell)rl, (v4_cell)rh), "DABS [%u,%u]", i, j); + for (unsigned k = 0; k < NVEC; k++) + for (unsigned l = 0; l < NVEC; l++) { + v4_ucell sl, sh; + dadd(ua, ub, (v4_ucell)vec[k], (v4_ucell)vec[l], &sl, &sh); + CHECK(call4(w_dplus, a, b, vec[k], vec[l]) + && left2((v4_cell)sl, (v4_cell)sh), "D+ [%u,%u,%u,%u]", i, j, k, l); + } + if (b != 0 && !(a == (v4_cell)V4_MSB && b == -1)) + CHECK(call(w_slashmod, 2, a, b, 0) && left2(a % b, a / b), "/MOD [%u,%u]", i, j); + if (b != 0 && !(a == (v4_cell)V4_MSB && b == -1)) + CHECK(call(w_slash, 2, a, b, 0) && left1(a / b), "/ [%u,%u]", i, j); + CHECK(call(w_star, 2, a, b, 0) && left1((v4_cell)(ua * ub)), "* [%u,%u]", i, j); + } + } + + /* The rest of 5.6 and 5.7. "v3:" marks results recorded from the v3 + * binary on 2026-10-03; v3's M- and M/MOD took the double with its low + * cell on top, so their arguments are in v4's order here. */ + CHECK(call(w_mstar, 2, 6, 7, 0) && left2(42, 0), "v3: 6 7 M*"); + CHECK(call(w_mstar, 2, -6, 7, 0) && left2(-42, -1), "v3: -6 7 M*"); + CHECK(call(w_mod, 2, 17, 5, 0) && left1(2), "v3: 17 5 MOD"); + CHECK(call(w_mod, 2, -17, 5, 0) && left1(-2), "v3: -17 5 MOD"); + CHECK(call(w_mod, 2, 17, -5, 0) && left1(2), "v3: 17 -5 MOD"); + CHECK(call(w_starslash, 3, 7, 3, 2) && left1(10), "v3: 7 3 2 */"); + CHECK(call(w_starslash, 3, -7, 3, 2) && left1(-10), "v3: -7 3 2 */"); + CHECK(call(w_starslashmod, 3, 7, 3, 2) && left2(1, 10), "v3: 7 3 2 */MOD"); + CHECK(call(w_starslashmod, 3, -7, 3, 2) && left2(-1, -10), "v3: -7 3 2 */MOD"); + CHECK(call(w_d0less, 2, 5, 0, 0) && left1(0), "v3: 5 0 D0<"); + CHECK(call(w_d0less, 2, 5, -1, 0) && left1(-1), "v3: 5 -1 D0<"); + CHECK(call(w_d2star, 2, 3, 0, 0) && left2(6, 0), "v3: 3 0 D2*"); + CHECK(call(w_d2star, 2, -1, 0, 0) && left2(-2, 1), "v3: -1 0 D2*"); + CHECK(call(w_d2slash, 2, 6, 0, 0) && left2(3, 0), "v3: 6 0 D2/"); + CHECK(call(w_d2slash, 2, 1, 1, 0) && left2((v4_cell)V4_MSB, 0), "v3: 1 1 D2/"); + CHECK(call(w_d2slash, 2, -4, -1, 0) && left2(-2, -1), "v3: -4 -1 D2/"); + CHECK(call(w_mslashmod, 3, 100, 0, 7) && left2(2, 14), "v3: 100 7 M/MOD"); + CHECK(call(w_mslashmod, 3, -100, -1, 7) && left2(-2, -14), "v3: -100 7 M/MOD"); + CHECK(call(w_mminus, 3, 100, 0, 7) && left2(93, 0), "v3: 100 7 M-"); + CHECK(call(w_mminus, 3, 100, 0, -7) && left2(107, 0), "v3: 100 -7 M-"); + CHECK(call(w_2drop, 3, 1, 2, 3) && left1(1), "v3: 1 2 3 2DROP"); + CHECK(call(t_2r, 2, 1, 2, 0) && v4_dstack_pop(&n.ds) == 2 && v4_dstack_pop(&n.ds) == 1 && left2(1, 2), + "v3: 1 2 2>R 2R@ 2R>"); + CHECK(call(t_2rorder, 2, 1, 2, 0) && left2(2, 1), "2>R leaves the high cell on top of R"); + { + static const v4_cell six[6] = { 1, 2, 3, 4, 5, 6 }; + CHECK(rot6_ok(six, 0, 0), "v3: 1 2 3 4 5 6 2ROT"); + } + for (unsigned i = 0; i < NVEC; i++) + for (unsigned j = 0; j < NVEC; j++) { + v4_cell a = vec[i], b = vec[j]; + v4_ucell ua = (v4_ucell)a, ub = (v4_ucell)b, pl, ph; + smul(a, b, &pl, &ph); + CHECK(call(w_mstar, 2, a, b, 0) && left2((v4_cell)pl, (v4_cell)ph), "M* [%u,%u]", i, j); + CHECK(call(w_d0less, 2, a, b, 0) && left1(FLAG(b < 0)), "D0< [%u,%u]", i, j); + CHECK(call(w_d2star, 2, a, b, 0) + && left2((v4_cell)(ua << 1), (v4_cell)((ub << 1) | (ua >> (V4_CELL_BITS - 1)))), "D2* [%u,%u]", i, j); + CHECK(call(w_d2slash, 2, a, b, 0) + && left2((v4_cell)((ua >> 1) | (ub << (V4_CELL_BITS - 1))), (v4_cell)((ub >> 1) | (ub & V4_MSB))), + "D2/ [%u,%u]", i, j); + CHECK(call(w_2drop, 3, 77, a, b) && left1(77), "2DROP [%u,%u]", i, j); + CHECK(call(t_2r, 2, a, b, 0) && v4_dstack_pop(&n.ds) == b && v4_dstack_pop(&n.ds) == a && left2(a, b), + "2>R 2R@ 2R> [%u,%u]", i, j); + if (b != 0 && !(a == (v4_cell)V4_MSB && b == -1)) { + CHECK(call(w_mod, 2, a, b, 0) && left1(a % b), "MOD [%u,%u]", i, j); + CHECK(call(w_mslashmod, 3, a, a < 0 ? -1 : 0, b) && left2(a % b, a / b), "M/MOD [%u,%u]", i, j); + } + for (unsigned k = 0; k < NVEC; k++) { + v4_cell c = vec[k], r, q; + int ok; + { + v4_cell six[6]; + six[0] = a; six[1] = b; six[2] = c; six[3] = vec[(i + 5) % NVEC]; six[4] = vec[(j + 7) % NVEC]; six[5] = vec[(k + 3) % NVEC]; + CHECK(rot6_ok(six, 0, 0), "2ROT [%u,%u,%u]", i, j, k); + } + if (c == 0) continue; + if (!call(w_starslashmod, 3, a, b, c)) { CHECK(0, "*/MOD returns [%u,%u,%u]", i, j, k); continue; } + q = n.ds.t; r = n.ds.s; + ok = starslash_ref(a, b, c, r, q); + CHECK(ok != 0, "*/MOD [%u,%u,%u]", i, j, k); + if (ok == 1) { + CHECK(left2(r, q), "*/MOD leaves two cells [%u,%u,%u]", i, j, k); + CHECK(call(w_starslash, 3, a, b, c) && left1(q), "*/ [%u,%u,%u]", i, j, k); + } + } + } + /* M/MOD is SM/REM: a double that does not fit a cell */ + CHECK(call(w_mslashmod, 3, 0, 5, 10) && n.ds.s == 0 + && (v4_ucell)n.ds.t == (v4_ucell)1 << (V4_CELL_BITS - 1), "M/MOD of 5 * 2^N by 10"); + + /* SM/REM: every quotient, divisor and in-range remainder sign drawn from + * the edge vectors, then pseudo-random. */ + for (unsigned i = 0; i < NVEC; i++) + for (unsigned j = 0; j < NVEC; j++) { + v4_cell q = vec[i], nn = vec[j]; + v4_ucell un = nn < 0 ? 0u - (v4_ucell)nn : (v4_ucell)nn; + int neg = (q < 0) != (nn < 0); + if (nn == 0) continue; + CHECK(smrem_exact(q, nn, 0), "SM/REM r=0 [%u,%u]", i, j); + if (un > 1u) { + v4_cell r = (v4_cell)(un - 1u); + if (q == 0) { + CHECK(smrem_exact(q, nn, r), "SM/REM r>0 q=0 [%u,%u]", i, j); + CHECK(smrem_exact(q, nn, (v4_cell)(0u - (v4_ucell)r)), "SM/REM r<0 q=0 [%u,%u]", i, j); + } else { + CHECK(smrem_exact(q, nn, neg ? (v4_cell)(0u - (v4_ucell)r) : r), + "SM/REM r=max [%u,%u]", i, j); + } + } + } + { + v4_ucell x = (v4_ucell)0x6C078965u; + for (unsigned i = 0; i < 20000; i++) { + v4_cell q, nn, r; + v4_ucell un, ur; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; q = (v4_cell)x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; nn = (v4_cell)x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; ur = x; + if (i & 1u) nn = (v4_cell)((v4_ucell)nn >> (x & 31u)); /* small divisors */ + if (i & 2u) q = (v4_cell)((v4_ucell)q >> (x & 31u)); /* small quotients */ + if (nn == 0) nn = 1; + un = nn < 0 ? 0u - (v4_ucell)nn : (v4_ucell)nn; + r = (v4_cell)(ur % un); + if (q == 0 ? (x & 4u) : ((q < 0) != (nn < 0))) r = (v4_cell)(0u - (v4_ucell)r); + CHECK(smrem_exact(q, nn, r), "SM/REM random [%u]", i); + } + } + + /* D+ on pseudo-random doubles, weighted toward low cells whose top bits + * decide the carry. */ + { + v4_ucell x = (v4_ucell)0x41C64E6Du, v[4], sl, sh; + for (unsigned i = 0; i < 20000; i++) { + for (unsigned k = 0; k < 4; k++) { x ^= x << 13; x ^= x >> 7; x ^= x << 17; v[k] = x; } + if (i & 1u) v[0] |= V4_MSB; + if (i & 2u) v[2] |= V4_MSB; + if (i & 4u) v[2] = 0u - v[0]; /* low sum wraps to 0 */ + dadd(v[0], v[1], v[2], v[3], &sl, &sh); + CHECK(call4(w_dplus, (v4_cell)v[0], (v4_cell)v[1], (v4_cell)v[2], (v4_cell)v[3]) + && left2((v4_cell)sl, (v4_cell)sh), "D+ random [%u]", i); + } + } + + /* M+, D-, D0= and D= against C: every edge-vector combination, then + * pseudo-random doubles. */ + for (unsigned i = 0; i < NVEC; i++) + for (unsigned j = 0; j < NVEC; j++) { + v4_ucell ua = (v4_ucell)vec[i], ub = (v4_ucell)vec[j], rl, rh; + CHECK(call(w_d0equal, 2, vec[i], vec[j], 0) && left1(FLAG(ua == 0 && ub == 0)), + "D0= [%u,%u]", i, j); + for (unsigned k = 0; k < NVEC; k++) { + v4_cell c = vec[k]; + dadd(ua, ub, (v4_ucell)c, c < 0 ? MAXU : 0u, &rl, &rh); + CHECK(call(w_mplus, 3, vec[i], vec[j], c) && left2((v4_cell)rl, (v4_cell)rh), + "M+ [%u,%u,%u]", i, j, k); + { + v4_ucell nl, nh, dl, dh; + dneg((v4_ucell)c, c < 0 ? MAXU : 0u, &nl, &nh); + dadd(ua, ub, nl, nh, &dl, &dh); + CHECK(call(w_mminus, 3, vec[i], vec[j], c) && left2((v4_cell)dl, (v4_cell)dh), + "M- [%u,%u,%u]", i, j, k); + } + for (unsigned l = 0; l < NVEC; l++) { + v4_ucell nl, nh; + dneg((v4_ucell)vec[k], (v4_ucell)vec[l], &nl, &nh); + dadd(ua, ub, nl, nh, &rl, &rh); + CHECK(call4(w_dminus, vec[i], vec[j], vec[k], vec[l]) + && left2((v4_cell)rl, (v4_cell)rh), "D- [%u,%u,%u,%u]", i, j, k, l); + CHECK(call4(w_dequal, vec[i], vec[j], vec[k], vec[l]) + && left1(FLAG(i == k && j == l)), "D= [%u,%u,%u,%u]", i, j, k, l); + } + } + } + { + v4_ucell x = (v4_ucell)0x5851F42Du, v[4], rl, rh, nl, nh; + for (unsigned i = 0; i < 20000; i++) { + for (unsigned k = 0; k < 4; k++) { x ^= x << 13; x ^= x >> 7; x ^= x << 17; v[k] = x; } + if (i & 1u) v[2] = v[0]; /* equal low cells */ + if (i & 2u) v[3] = v[1]; /* equal high cells */ + if (i & 4u) v[2] = 0u - v[0]; /* low sum wraps */ + dadd(v[0], v[1], v[2], (v4_cell)v[2] < 0 ? MAXU : 0u, &rl, &rh); + CHECK(call(w_mplus, 3, (v4_cell)v[0], (v4_cell)v[1], (v4_cell)v[2]) + && left2((v4_cell)rl, (v4_cell)rh), "M+ random [%u]", i); + dneg(v[2], v[3], &nl, &nh); + dadd(v[0], v[1], nl, nh, &rl, &rh); + CHECK(call4(w_dminus, (v4_cell)v[0], (v4_cell)v[1], (v4_cell)v[2], (v4_cell)v[3]) + && left2((v4_cell)rl, (v4_cell)rh), "D- random [%u]", i); + CHECK(call4(w_dequal, (v4_cell)v[0], (v4_cell)v[1], (v4_cell)v[2], (v4_cell)v[3]) + && left1(FLAG(v[0] == v[2] && v[1] == v[3])), "D= random [%u]", i); + CHECK(call(w_d0equal, 2, (v4_cell)(v[0] & v[2]), (v4_cell)(v[1] & v[3]), 0) + && left1(FLAG((v[0] & v[2]) == 0 && (v[1] & v[3]) == 0)), "D0= random [%u]", i); + } + } + + /* Q.+ and Q.- (section 5.26: the D+ and D- words) against v3. */ + { + static const uint64_t qv[] = { + 0, 1, 0x8000u, 0x10000u, 0x18000u, /* 0, ulp, 0.5, 1.0, 1.5 */ + (uint64_t)0 - 0x10000u, (uint64_t)0 - 1u, /* -1.0, -ulp */ + 0xFFFFu, 0x10001u, 0xFFFFFFFFu, 0x100000000u, /* across the 32-bit seam */ + ((uint64_t)1 << 63) - 1u, (uint64_t)1 << 63, /* Q max, Q min */ + (uint64_t)12345 << 16, (uint64_t)0 - ((uint64_t)12345 << 16) + }; + const unsigned nq = sizeof qv / sizeof qv[0]; + uint64_t x = 0x9E3779B97F4A7C15u; + unsigned over = 0; + + for (unsigned i = 0; i < nq; i++) + for (unsigned j = 0; j < nq; j++) { + CHECK(q_matches_v3(w_dplus, qv[i], qv[j], qv[i] + qv[j]), "Q.+ [%u,%u]", i, j); + CHECK(q_matches_v3(w_dminus, qv[i], qv[j], qv[i] - qv[j]), "Q.- [%u,%u]", i, j); + } + for (unsigned i = 0; i < 20000; i++) { + uint64_t a, b; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; a = x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; b = x; + if (i & 1u) a >>= (unsigned)(x & 63u); /* mixed magnitudes */ + if (i & 2u) b = (uint64_t)0 - b; + if (((a + b) ^ a) & ((a + b) ^ b) & ((uint64_t)1 << 63)) over++; + CHECK(q_matches_v3(w_dplus, a, b, a + b), "Q.+ random [%u]", i); + CHECK(q_matches_v3(w_dminus, a, b, a - b), "Q.- random [%u]", i); + } + printf(" Q.+ random cases that overflow Q48.16: %u of 20000\n", over); + + /* Q.FROM-INT: n * 2^16 as a signed double. v3 clamps n < 0 to 0 + * (section 5.26 retires that) and wraps at 64 bits, so v3's value is + * checked only for n >= 0, and at 64-bit cells only in the low cell + * (D-10). */ + for (unsigned i = 0; i < NVEC + 20000u; i++) { + v4_cell nn, el, eh; + if (i < NVEC) nn = vec[i]; + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; + nn = (v4_cell)(v4_ucell)x; + if (i & 1u) nn = (v4_cell)asr_u((v4_ucell)nn, (unsigned)(x >> 58) % V4_CELL_BITS); + } + el = (v4_cell)((v4_ucell)nn << 16); + eh = (v4_cell)asr_u((v4_ucell)nn, V4_CELL_BITS - 16); + CHECK(call(w_qfromint, 1, nn, 0, 0) && left2(el, eh), "Q.FROM-INT [%u]", i); + if (nn >= 0) { + uint64_t v3 = (uint64_t)(v4_ucell)nn << 16; + v4_cell vl, vh; + qcells(v3, &vl, &vh); + CHECK(call(w_qfromint, 1, nn, 0, 0) && n.ds.s == vl + && (V4_CELL_BITS == 64 || n.ds.t == vh), "Q.FROM-INT v3 [%u]", i); + } + /* and back */ + CHECK(call(w_qfromint, 1, nn, 0, 0) + && (v4_test_call(&n, &es, &h, w_qtoint, 100000) > 0) && left1(nn), + "Q.TO-INT Q.FROM-INT [%u]", i); + } + + /* Q.TO-INT: v3's (int64_t)q >> 16, arithmetic. At 32-bit cells the + * result is its low cell; at 64-bit cells it is v3's value exactly. */ + for (unsigned i = 0; i < nq + 20000u; i++) { + uint64_t q; + v4_cell ql, qh; + if (i < nq) q = qv[i]; + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; q = x; + if (i & 1u) q = asr64(q, (unsigned)(x >> 58)); + } + qcells(q, &ql, &qh); + CHECK(call(w_qtoint, 2, ql, qh, 0) && left1((v4_cell)(v4_ucell)asr64(q, 16)), + "Q.TO-INT v3 [%u]", i); + } + /* and on any double, not only sign-extended ones */ + for (unsigned i = 0; i < 20000; i++) { + v4_ucell lo, hi; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; lo = (v4_ucell)x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; hi = (v4_ucell)x; + CHECK(call(w_qtoint, 2, (v4_cell)lo, (v4_cell)hi, 0) + && left1((v4_cell)((lo >> 16) | (hi << (V4_CELL_BITS - 16)))), + "Q.TO-INT double [%u]", i); + } + + /* Q.ABS and Q.NEG against v3's q48_abs and 0 - q. */ + for (unsigned i = 0; i < nq; i++) { + uint64_t q = qv[i]; + CHECK(q1_matches_v3(w_dabs, q, (q < ((uint64_t)1 << 63)) ? q : (uint64_t)0 - q), + "Q.ABS [%u]", i); + CHECK(q1_matches_v3(w_dnegate, q, (uint64_t)0 - q), "Q.NEG [%u]", i); + } + for (unsigned i = 0; i < 20000; i++) { + uint64_t q; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; q = x; + if (i & 1u) q >>= (unsigned)(x & 63u); + if (i & 2u) q = (uint64_t)0 - q; + CHECK(q1_matches_v3(w_dabs, q, (q < ((uint64_t)1 << 63)) ? q : (uint64_t)0 - q), + "Q.ABS random [%u]", i); + CHECK(q1_matches_v3(w_dnegate, q, (uint64_t)0 - q), "Q.NEG random [%u]", i); + } + } + + /* <, =, D<, 2SWAP, 2OVER, DMAX and DMIN as written in section 5, against C. */ + for (unsigned i = 0; i < NVEC; i++) + for (unsigned j = 0; j < NVEC; j++) { + v4_cell a = vec[i], b = vec[j]; + CHECK(call(w_less, 2, a, b, 0) && left1(FLAG(a < b)), "< [%u,%u]", i, j); + CHECK(call(w_equal, 2, a, b, 0) && left1(FLAG(a == b)), "= [%u,%u]", i, j); + for (unsigned k = 0; k < NVEC; k++) + for (unsigned l = 0; l < NVEC; l++) { + v4_cell c = vec[k], d = vec[l]; + int lt = dlt((v4_ucell)a, (v4_ucell)b, (v4_ucell)c, (v4_ucell)d); + v4_cell sw[4], ov[6], mx[2], mn[2]; + sw[0] = c; sw[1] = d; sw[2] = a; sw[3] = b; + ov[0] = a; ov[1] = b; ov[2] = c; ov[3] = d; ov[4] = a; ov[5] = b; + mx[0] = lt ? c : a; mx[1] = lt ? d : b; + mn[0] = lt ? a : c; mn[1] = lt ? b : d; + CHECK(call4(w_dless, a, b, c, d) && left1(FLAG(lt)), "D< [%u,%u,%u,%u]", i, j, k, l); + { + v4_cell kp[5]; + kp[0] = a; kp[1] = b; kp[2] = c; kp[3] = d; kp[4] = FLAG(lt); + CHECK(call4(w_dltkeep, a, b, c, d) && leftk(kp, 5), "(D<) [%u,%u,%u,%u]", i, j, k, l); + } + CHECK(call4(w_2swap, a, b, c, d) && leftk(sw, 4), "2SWAP [%u,%u,%u,%u]", i, j, k, l); + CHECK(call4(w_2over, a, b, c, d) && leftk(ov, 6), "2OVER [%u,%u,%u,%u]", i, j, k, l); + CHECK(call4(w_dmax, a, b, c, d) && leftk(mx, 2), "DMAX [%u,%u,%u,%u]", i, j, k, l); + CHECK(call4(w_dmin, a, b, c, d) && leftk(mn, 2), "DMIN [%u,%u,%u,%u]", i, j, k, l); + } + } + + /* Q.=, Q.<, Q.>, Q.0=, Q.MAX, Q.MIN (section 5.26: D=, D<, 2SWAP D<, D0=, + * DMAX, DMIN) on Q values, signed (D-8). v3 compares Q values unsigned, + * so v3 agrees only when both have the same sign; that is checked too. */ + { + static const uint64_t qc[] = { + 0, 1, 0x8000u, 0x10000u, 0x18000u, + (uint64_t)0 - 0x10000u, (uint64_t)0 - 1u, (uint64_t)0 - 0x8000u, + 0xFFFFFFFFu, 0x100000000u, (uint64_t)0 - 0x100000000u, + ((uint64_t)1 << 63) - 1u, (uint64_t)1 << 63 + }; + const unsigned nc = sizeof qc / sizeof qc[0]; + uint64_t x = 0x2545F4914F6CDD1Du; + unsigned doc_wrong = 0, doc_runs = 0; + + for (unsigned i = 0; i < nc * nc + 20000u; i++) { + uint64_t a, b; + v4_cell al, ah, bl, bh, w[2]; + int lt, gt, eq; + if (i < nc * nc) { a = qc[i / nc]; b = qc[i % nc]; } + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; a = x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; b = x; + if (i & 1u) b = a; /* ties */ + if (i & 2u) b ^= (uint64_t)1 << (x >> 58); /* near */ + } + qcells(a, &al, &ah); + qcells(b, &bl, &bh); + lt = qs(a) < qs(b); gt = qs(a) > qs(b); eq = a == b; + + CHECK(call4(w_dequal, al, ah, bl, bh) && left1(FLAG(eq)), "Q.= [%u]", i); + CHECK(call4(w_dless, al, ah, bl, bh) && left1(FLAG(lt)), "Q.< [%u]", i); + CHECK(call4(w_qgt, al, ah, bl, bh) && left1(FLAG(gt)), "Q.> [%u]", i); + CHECK(call(w_d0equal, 2, al, ah, 0) && left1(FLAG(a == 0)), "Q.0= [%u]", i); + w[0] = lt ? bl : al; w[1] = lt ? bh : ah; + CHECK(call4(w_dmax, al, ah, bl, bh) && leftk(w, 2), "Q.MAX [%u]", i); + w[0] = lt ? al : bl; w[1] = lt ? ah : bh; + CHECK(call4(w_dmin, al, ah, bl, bh) && leftk(w, 2), "Q.MIN [%u]", i); + if ((a >> 63) == (b >> 63)) { /* v3 agrees here */ + CHECK(lt == (a < b) && gt == (a > b), "Q compare v3 [%u]", i); + } + + /* Q.> as section 5.26 writes it, SWAP D<: count wrong answers. */ + doc_runs++; + if (!(call4(w_qgt_doc, al, ah, bl, bh) && left1(FLAG(gt)))) doc_wrong++; + } + printf(" Q.> as written (SWAP D<): %u wrong of %u\n", doc_wrong, doc_runs); + } + + /* Q.* against the limb reference (signed, D-8), on edge Q values and + * pseudo-random ones, and against v3's q48_mul for non-negative + * operands, where v3's unsigned product agrees. */ + { + static const uint64_t qm[] = { + 0, 1, 0x8000u, 0x10000u, 0x18000u, 0x20000u, 0xFFFFu, + (uint64_t)0 - 0x10000u, (uint64_t)0 - 1u, (uint64_t)0 - 0x18000u, + 0xFFFFFFFFu, 0x100000000u, 0x7FFFFFFFu, (uint64_t)0 - 0x100000000u, + ((uint64_t)1 << 63) - 1u, (uint64_t)1 << 63, (uint64_t)1 << 47 + }; + const unsigned nm = sizeof qm / sizeof qm[0]; + uint64_t x = 0xD1B54A32D192ED03u; + for (unsigned i = 0; i < nm * nm + 20000u; i++) { + uint64_t a, b; + v4_cell al, ah, bl, bh; + v4_ucell rl, rh; + if (i < nm * nm) { a = qm[i / nm]; b = qm[i % nm]; } + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; a = x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; b = x; + if (i & 1u) a = asr64(a, (unsigned)(x >> 58)); + if (i & 2u) b = asr64(b, (unsigned)(x >> 52) & 63u); + } + qcells(a, &al, &ah); + qcells(b, &bl, &bh); + qmul_ref((v4_ucell)al, (v4_ucell)ah, (v4_ucell)bl, (v4_ucell)bh, &rl, &rh); + CHECK(call4(w_qstar, al, ah, bl, bh) && left2((v4_cell)rl, (v4_cell)rh), + "Q.* [%u]", i); + if (!(a >> 63) && !(b >> 63)) { + v4_cell vl, vh; + qcells(v3_q48_mul(a, b), &vl, &vh); + CHECK(call4(w_qstar, al, ah, bl, bh) && n.ds.s == vl + && (V4_CELL_BITS == 64 || n.ds.t == vh), "Q.* v3 [%u]", i); + } + } + } + + /* (UQ/) against the Q./ reference, for non-negative a and b where the + * quotient fits (|a| * 2^16 < |b| * 2^(2N-1), i.e. not (b < 2^17 and + * a1 >= b0 << (N-17))). */ + { + uint64_t x = 0x94D049BB133111EBu; + unsigned ran = 0; + for (unsigned i = 0; i < 5000; i++) { + v4_ucell al, ah, bl, bh, rl, rh; + int err; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; al = (v4_ucell)x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; ah = (v4_ucell)x >> 1; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; bl = (v4_ucell)x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; bh = (v4_ucell)x >> 1; + switch (i & 7u) { + case 1: bh = 0; break; + case 2: bh = 0; bl >>= (unsigned)(x >> 59); break; + case 3: ah >>= (unsigned)(x >> 59) % V4_CELL_BITS; break; + case 4: bh >>= (unsigned)(x >> 58) % V4_CELL_BITS; break; + case 5: ah = 0; bh = 0; break; + case 6: al = bl; ah = bh; break; /* a = b */ + default: break; + } + if (bl == 0 && bh == 0) bl = 1; + if (bh == 0 && (bl >> 17) == 0 && ah >= (bl << (V4_CELL_BITS - 17))) continue; + qdiv_ref(al, ah, bl, bh, &rl, &rh, &err); + ran++; + CHECK(call4(w_uqdiv, (v4_cell)al, (v4_cell)ah, (v4_cell)bl, (v4_cell)bh) + && left2((v4_cell)rl, (v4_cell)rh), "(UQ/) [%u]", i); + } + /* Divisors in [2^(2N-2), 2^(2N-1)), where the remainder's and the + * divisor's top bits can differ. (Q./ passes magnitudes, so b never + * exceeds 2^(2N-1); that one value is covered through Q./.) */ + for (unsigned i = 0; i < 4000; i++) { + v4_ucell al, ah, bl, bh, rl, rh; + int err; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; al = (v4_ucell)x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; ah = (v4_ucell)x >> 1; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; bl = (v4_ucell)x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; bh = (v4_ucell)x; + bh = (bh >> 2) | (V4_MSB >> 1); /* b in [2^(2N-2), 2^(2N-1)) */ + if (i & 1u) bh |= (V4_MSB >> 1) - 1u; /* near the top of it */ + qdiv_ref(al, ah, bl, bh, &rl, &rh, &err); + ran++; + CHECK(call4(w_uqdiv, (v4_cell)al, (v4_cell)ah, (v4_cell)bl, (v4_cell)bh) + && left2((v4_cell)rl, (v4_cell)rh), "(UQ/) large b [%u]", i); + } + printf(" (UQ/) cases run: %u\n", ran); + } + /* D2*C against C. */ + for (unsigned i = 0; i < NVEC; i++) + for (unsigned j = 0; j < NVEC; j++) + for (unsigned c = 0; c < 2; c++) { + v4_ucell lo = (v4_ucell)vec[i], hi = (v4_ucell)vec[j]; + v4_cell w[3]; + w[0] = (v4_cell)((lo << 1) | c); + w[1] = (v4_cell)((hi << 1) | (lo >> (V4_CELL_BITS - 1))); + w[2] = (v4_cell)(hi >> (V4_CELL_BITS - 1)); + CHECK(call(w_d2starc, 3, vec[i], vec[j], (v4_cell)c) && leftk(w, 3), + "D2*C [%u,%u,%u]", i, j, c); + } + + /* Q./ against the reference (D-11), and NODE-ERROR set exactly on + * division by zero; against v3's q48_div for non-negative a < 2^48 and + * b != 0 where v3's quotient is below 2^63. */ + { + static const uint64_t qd[] = { + 0, 1, 3, 0x8000u, 0x10000u, 0x18000u, 0x30000u, 0xFFFFu, + (uint64_t)0 - 0x10000u, (uint64_t)0 - 1u, (uint64_t)0 - 0x30000u, + 0xFFFFFFFFu, 0x100000000u, (uint64_t)0 - 0x100000000u, + ((uint64_t)1 << 47) - 1u, (uint64_t)1 << 47, + ((uint64_t)1 << 63) - 1u, (uint64_t)1 << 63 + }; + const unsigned nd = sizeof qd / sizeof qd[0]; + uint64_t x = 0xBF58476D1CE4E5B9u; + for (unsigned i = 0; i < nd * nd + 5000u; i++) { + uint64_t a, b; + v4_cell al, ah, bl, bh; + v4_ucell rl, rh; + int err; + if (i < nd * nd) { a = qd[i / nd]; b = qd[i % nd]; } + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; a = x; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; b = x; + if (i & 1u) a = asr64(a, (unsigned)(x >> 58)); + if (i & 2u) b = asr64(b, (unsigned)(x >> 52) & 63u); + if ((i & 12u) == 12u) b = 0; + } + qcells(a, &al, &ah); + qcells(b, &bl, &bh); + qdiv_ref((v4_ucell)al, (v4_ucell)ah, (v4_ucell)bl, (v4_ucell)bh, &rl, &rh, &err); + v4_node_store(&n, NODE_ERROR, 0); + CHECK(call4(w_qslash, al, ah, bl, bh) && left2((v4_cell)rl, (v4_cell)rh), + "Q./ [%u]", i); + CHECK(v4_node_load(&n, NODE_ERROR) == (err ? -1 : 0), "Q./ NODE-ERROR [%u]", i); + if (!(a >> 63) && !(b >> 63) && b != 0 && a < ((uint64_t)1 << 48)) { + uint64_t v3 = (a << 16) / b; + if (!(v3 >> 63)) { + v4_cell vl, vh; + qcells(v3, &vl, &vh); + CHECK(call4(w_qslash, al, ah, bl, bh) && n.ds.s == vl + && (V4_CELL_BITS == 64 || n.ds.t == vh), "Q./ v3 [%u]", i); + } + } + } + } + + /* Q.* and Q./ on edge values built from cells, so that they are the true + * extremes at either cell width: 0, ulp, -ulp, 0.5, 1.0, -1.0, 2.0, Q max, + * Q max - ulp, Q min, Q min + ulp, and the largest Q below 1.0 * 2^(N-16). */ + { + v4_ucell ce[13][2]; + unsigned k = 0, ne; + ce[k][0] = 0; ce[k][1] = 0; k++; + ce[k][0] = 1; ce[k][1] = 0; k++; + ce[k][0] = MAXU; ce[k][1] = MAXU; k++; + ce[k][0] = 0x8000u; ce[k][1] = 0; k++; + ce[k][0] = 0x10000u; ce[k][1] = 0; k++; + ce[k][0] = (v4_ucell)0 - 0x10000u; ce[k][1] = MAXU; k++; + ce[k][0] = 0x20000u; ce[k][1] = 0; k++; + ce[k][0] = MAXU; ce[k][1] = MAXU >> 1; k++; + ce[k][0] = MAXU - 1u; ce[k][1] = MAXU >> 1; k++; + ce[k][0] = 0; ce[k][1] = V4_MSB; k++; + ce[k][0] = 1; ce[k][1] = V4_MSB; k++; + ce[k][0] = 0; ce[k][1] = 1; k++; + ce[k][0] = MAXU; ce[k][1] = 0; k++; + ne = k; + for (unsigned i = 0; i < ne; i++) + for (unsigned j = 0; j < ne; j++) { + v4_ucell rl, rh; + int err; + qmul_ref(ce[i][0], ce[i][1], ce[j][0], ce[j][1], &rl, &rh); + CHECK(call4(w_qstar, (v4_cell)ce[i][0], (v4_cell)ce[i][1], + (v4_cell)ce[j][0], (v4_cell)ce[j][1]) + && left2((v4_cell)rl, (v4_cell)rh), "Q.* cell edge [%u,%u]", i, j); + qdiv_ref(ce[i][0], ce[i][1], ce[j][0], ce[j][1], &rl, &rh, &err); + v4_node_store(&n, NODE_ERROR, 0); + CHECK(call4(w_qslash, (v4_cell)ce[i][0], (v4_cell)ce[i][1], + (v4_cell)ce[j][0], (v4_cell)ce[j][1]) + && left2((v4_cell)rl, (v4_cell)rh) + && v4_node_load(&n, NODE_ERROR) == (err ? -1 : 0), + "Q./ cell edge [%u,%u]", i, j); + } + } + + /* Q.EXP against v3's q48_exp_approx for |q| < 16.0 (bit for bit at + * 32-bit cells; the same value, high cell 0, at 64), and the limits. */ + { + static const int64_t qx[] = { + 0, 1, -1, 0x8000, -0x8000, 0x10000, -0x10000, 0x18000, 0x20000, -0x20000, + 0x2B7E1, 0x50000, -0x50000, 0xA0000, -0xA0000, 0xFFFFF, -0xFFFFF, + 0x100000, -0x100000, 0x100001, -0x100001, 0x7FFFFFFF, -0x7FFFFFFF + }; + uint64_t x = 0x9FB21C651E98DF25u; + for (unsigned i = 0; i < sizeof qx / sizeof qx[0] + 3000u; i++) { + int64_t q; + uint64_t uq; + v4_cell ql, qh, el, eh; + if (i < sizeof qx / sizeof qx[0]) q = qx[i]; + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; + q = (int64_t)(x % 0x200000u) - 0x100000; /* (-16.0, 16.0) */ + } + uq = (uint64_t)q; + qcells(uq, &ql, &qh); + if (q >= 0x100000) { el = V4_ALL_ONES; eh = (v4_cell)(MAXU >> 1); } + else if (q <= -0x100000) { el = 0; eh = 0; } + else qcells(v3_q48_exp(uq), &el, &eh); + CHECK(call(w_qexp, 2, ql, qh, 0) && left2(el, eh), "Q.EXP [%u] q=%lld", i, (long long)q); + } + } + + /* Q.SQRT against v3's q48_sqrt_approx for 0 <= q < 2^48 (where v3's + * q48_div does not saturate), bit for bit; q < 0 gives 0 and NODE-ERROR. */ + { + static const int64_t qr[] = { + 0, 1, 2, 9, 0x4000, 0x8000, 0xFFFF, 0x10000, 0x10001, 0x20000, 0x40000, + 0x90000, 0x1000000, 0x7FFFFFFF, 0x100000000, ((int64_t)1 << 47) + 12345, + ((int64_t)1 << 48) - 1, -1, -0x10000 + }; + uint64_t x = 0xC2B2AE3D27D4EB4Fu; + for (unsigned i = 0; i < sizeof qr / sizeof qr[0] + 3000u; i++) { + int64_t q; + v4_cell ql, qh, el, eh; + if (i < sizeof qr / sizeof qr[0]) q = qr[i]; + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; + q = (int64_t)(x >> (16 + (x & 31u))); /* 0 .. 2^48 */ + if (q >= ((int64_t)1 << 48)) q >>= 1; + } + qcells((uint64_t)q, &ql, &qh); + if (q < 0) { el = 0; eh = 0; } + else qcells(v3_q48_sqrt((uint64_t)q), &el, &eh); + v4_node_store(&n, NODE_ERROR, 0); + CHECK(call(w_qsqrt, 2, ql, qh, 0) && left2(el, eh) + && v4_node_load(&n, NODE_ERROR) == (q < 0 ? -1 : 0), + "Q.SQRT [%u] q=%lld", i, (long long)q); + } + } + + /* Q.LOG against v3's q48_log_approx for x > 0, bit for bit; x <= 0 + * gives 0 and NODE-ERROR (D-12). */ + { + static const int64_t ql[] = { + 1, 2, 3, 0x7FFF, 0x8000, 0xFFFF, 0x10000, 0x10001, 0x18000, 0x1FFFF, 0x20000, + 0x2B7E1, 0x30000, 0xA0000, 0x640000, 0x7FFFFFFF, 0x80000000, 0xFFFFFFFF, + 0x100000000, ((int64_t)1 << 47), ((int64_t)1 << 62) + 12345, + (int64_t)(((uint64_t)1 << 63) - 1u), 0, -1, -0x10000 + }; + uint64_t x = 0xA0761D6478BD642Fu; + for (unsigned i = 0; i < sizeof ql / sizeof ql[0] + 2000u; i++) { + int64_t q; + v4_cell xl, xh, el, eh; + if (i < sizeof ql / sizeof ql[0]) q = ql[i]; + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; + q = (int64_t)((x >> 1) >> (x & 63u)); /* every magnitude */ + if (q == 0) q = 1; + } + qcells((uint64_t)q, &xl, &xh); + if (q <= 0) { el = 0; eh = 0; } + else qcells(v3_q48_log((uint64_t)q), &el, &eh); + v4_node_store(&n, NODE_ERROR, 0); + CHECK(call(w_qlog, 2, xl, xh, 0) && left2(el, eh) + && v4_node_load(&n, NODE_ERROR) == (q <= 0 ? -1 : 0), + "Q.LOG [%u] x=%lld", i, (long long)q); + } + /* The reduced m takes only 65536 values, 1.0 <= m < 2.0; sweep every + * 17th directly (k = 0), which covers the Newton iteration itself. */ + for (int64_t m = 65536; m < 131072; m += 17) { + v4_cell xl, xh, el, eh; + qcells((uint64_t)m, &xl, &xh); + qcells(v3_q48_log((uint64_t)m), &el, &eh); + CHECK(call(w_qlog, 2, xl, xh, 0) && left2(el, eh), "Q.LOG m=%lld", (long long)m); + } + } + + /* (Q.REDUCE), Q.SIN and Q.COS against v3's q48_reduce_angle, + * q48_sin_approx and q48_cos_approx, bit for bit, on angles of every size + * and sign. */ + { + static const int64_t qa[] = { + 0, 1, -1, 0x8000, 0x10000, -0x10000, 102943, 102944, -102943, -102944, + 205886, 205887, 205888, -205886, -205887, -205888, + 411773, 411774, 411775, -411773, -411774, -411775, 617661, -617661, + 0x7FFFFFFF, -0x7FFFFFFF, 0x80000000, 0x100000000, -0x100000000, + ((int64_t)1 << 40) + 7, -(((int64_t)1 << 40) + 7), + (int64_t)(((uint64_t)1 << 63) - 1u), (int64_t)((uint64_t)1 << 63) + }; + uint64_t x = 0xE7037ED1A0B428DBu; + for (unsigned i = 0; i < sizeof qa / sizeof qa[0] + 3000u; i++) { + int64_t q; + v4_cell xl, xh, el, eh; + if (i < sizeof qa / sizeof qa[0]) q = qa[i]; + else { + x ^= x << 13; x ^= x >> 7; x ^= x << 17; + q = (int64_t)asr64(x, (unsigned)(x & 63u)); /* every size, both signs */ + if (i & 1u) q %= 1000000; /* and a few turns of the circle */ + } + qcells((uint64_t)q, &xl, &xh); + CHECK(call(w_qreduce, 2, xl, xh, 0) && left1((v4_cell)v3_q48_reduce(q)), + "(Q.REDUCE) [%u] x=%lld", i, (long long)q); + qcells(v3_q48_sin((uint64_t)q), &el, &eh); + CHECK(call(w_qsin, 2, xl, xh, 0) && left2(el, eh), "Q.SIN [%u] x=%lld", i, (long long)q); + qcells(v3_q48_cos((uint64_t)q), &el, &eh); + CHECK(call(w_qcos, 2, xl, xh, 0) && left2(el, eh), "Q.COS [%u] x=%lld", i, (long long)q); + } + } + + /* Q.1, Q.0 and Q.SCALE: v3's values, and how they behave in use. */ + { + v4_cell ol, oh, zl, zh; + uint64_t x = 0x8EBC6AF09C88C6E3u; + qcells(65536u, &ol, &oh); /* v3 Q.1 and Q.SCALE */ + qcells(0u, &zl, &zh); /* v3 Q.0 */ + CHECK(call(w_q1, 0, 0, 0, 0) && left2(ol, oh), "Q.1 is v3's 65536"); + CHECK(call(w_q0, 0, 0, 0, 0) && left2(zl, zh), "Q.0 is v3's 0"); + CHECK(call(w_qscale, 0, 0, 0, 0) && left2(ol, oh), "Q.SCALE is v3's 65536"); + CHECK(call(w_q1_toint, 0, 0, 0, 0) && left1(1), "Q.1 Q.TO-INT is 1"); + CHECK(call(w_one_fromint, 0, 0, 0, 0) && left2(ol, oh), "1 Q.FROM-INT is Q.1"); + for (unsigned i = 0; i < 2000; i++) { + uint64_t q; + v4_cell ql, qh; + x ^= x << 13; x ^= x >> 7; x ^= x << 17; + q = asr64(x, (unsigned)(x & 63u)); + if (i == 0) q = 0; + if (i == 1) q = ((uint64_t)1 << 63) - 1u; + if (i == 2) q = (uint64_t)1 << 63; + qcells(q, &ql, &qh); + CHECK(call(w_q1_times, 2, ql, qh, 0) && left2(ql, qh), "q Q.1 Q.* is q [%u]", i); + CHECK(call(w_q0_plus, 2, ql, qh, 0) && left2(ql, qh), "q Q.0 Q.+ is q [%u]", i); + } + } + + /* LSHIFT and RSHIFT as written, against C, for every count 0 .. N (a + * count of N must give 0). */ + for (unsigned i = 0; i < NVEC; i++) + for (unsigned c = 0; c <= V4_CELL_BITS; c++) { + v4_ucell u = (v4_ucell)vec[i]; + v4_ucell l = c < V4_CELL_BITS ? u << c : 0u; + v4_ucell r = c < V4_CELL_BITS ? u >> c : 0u; + CHECK(call(w_lshift, 2, vec[i], (v4_cell)c, 0) && left1((v4_cell)l), "LSHIFT [%u,%u]", i, c); + CHECK(call(w_rshift, 2, vec[i], (v4_cell)c, 0) && left1((v4_cell)r), "RSHIFT [%u,%u]", i, c); + } + + /* C@ and C!: every byte of two adjacent words, several + * values, the other bytes and the neighbouring words left alone. */ + { + static const v4_ucell cv[] = { 0, 1, 0x41, 0x7F, 0x80, 0xFF, 0x1FF, 0xABCD }; + const v4_ucell pat = (v4_ucell)0xA5C3F00Fu | ((MAXU >> 16 >> 16) << 16 << 16); + for (unsigned b = 0; b < 8; b++) + for (unsigned k = 0; k < sizeof cv / sizeof cv[0]; k++) { + v4_cell w = BYTES + 1 + (v4_cell)(b / 4u); + unsigned sh = 8u * (b % 4u); + v4_ucell want = (pat & ~((v4_ucell)0xFFu << sh)) | ((cv[k] & 0xFFu) << sh); + v4_cell baddr = (BYTES + 1) * 4 + (v4_cell)b; + for (unsigned j = 0; j < 4; j++) v4_node_store(&n, BYTES + (v4_cell)j, (v4_cell)pat); + CHECK(call(w_cstore, 2, (v4_cell)cv[k], baddr, 0) && n.ds.t == CANARY, + "C! returns [%u,%u]", b, k); + CHECK((v4_ucell)v4_node_load(&n, w) == want, "C! stores [%u,%u]", b, k); + for (unsigned j = 0; j < 4; j++) + if (BYTES + (v4_cell)j != w) + CHECK((v4_ucell)v4_node_load(&n, BYTES + (v4_cell)j) == pat, "C! neighbours [%u,%u,%u]", b, k, j); + CHECK(call(w_cfetch, 1, baddr, 0, 0) && left1((v4_cell)(cv[k] & 0xFFu)), "C@ [%u,%u]", b, k); + } + } + + /* Q./ at the overflow boundary: |a| * 2^16 against |b| * 2^(2N-1), for + * divisors around 2^16 and 2^17, every sign. */ + { + static const v4_ucell bv[] = { 0x10000u, 0x10001u, 0x18000u, 0x1FFFFu, 0x20000u, 0x20001u, 0xFFFFu }; + for (unsigned i = 0; i < sizeof bv / sizeof bv[0]; i++) + for (unsigned j = 0; j < 4; j++) + for (unsigned sg = 0; sg < 4; sg++) { + v4_ucell thr = bv[i] << (V4_CELL_BITS - 17), al, ah, bl = bv[i], bh = 0, rl, rh; + int err; + switch (j) { + case 0: al = 0; ah = thr; break; /* at the threshold */ + case 1: al = MAXU; ah = thr - 1u; break; /* just below */ + case 2: al = 1; ah = thr; break; /* just above */ + default: al = MAXU; ah = thr; break; + } + if (ah & V4_MSB) continue; /* |a| must be a Q value */ + if (sg & 1u) dneg(al, ah, &al, &ah); + if (sg & 2u) dneg(bl, bh, &bl, &bh); + qdiv_ref(al, ah, bl, bh, &rl, &rh, &err); + CHECK(call4(w_qslash, (v4_cell)al, (v4_cell)ah, (v4_cell)bl, (v4_cell)bh) + && left2((v4_cell)rl, (v4_cell)rh), "Q./ boundary [%u,%u,%u]", i, j, sg); + } + } + + /* Stack headroom of the two longest definitions. */ + { + static const v4_cell umstar_args[][4] = { + { 0, 0, 0 }, { -1, -1, 0 }, { 3, -1, 0 }, { -1, 3, 0 }, { 12345, -12345, 0 } + }; + static const v4_cell ummod_args[][4] = { + { 0, 0, 1 }, { -1, -2, -1 }, { 12345, 0, 7 }, { -1, 0x7FFF, 0x8000 }, + { 0, (v4_cell)(V4_MSB - 1u), (v4_cell)V4_MSB } + }; + int dh, rh; + headroom("UM*", w_umstar, 2, umstar_args, 5, 2, &dh, &rh); + CHECK(dh >= 0 && rh >= 0, "UM* runs at all"); + headroom("UM/MOD", w_ummod, 3, ummod_args, 5, 2, &dh, &rh); + CHECK(dh >= 0 && rh >= 0, "UM/MOD runs at all"); + + { + static const v4_cell one_args[][4] = { { 5, 0, 0 }, { -5, 0, 0 }, { 0, 0, 0 } }; + static const v4_cell two_args[][4] = { + { 5, 0, 0 }, { 0, -1, 0 }, { -5, -1, 0 }, { -1, 5, 0 }, { 0, 0, 0 } + }; + static const v4_cell smrem_args[][4] = { + { 7, 0, 2 }, { -7, -1, 2 }, { 7, 0, -2 }, { -7, -1, -2 }, { 0, 0, -3 } + }; + static const v4_cell slashmod_args[][4] = { + { 7, 2, 0 }, { -7, 2, 0 }, { 7, -2, 0 }, { -7, -2, 0 } + }; + headroom("ABS", w_abs, 1, one_args, 3, 1, &dh, &rh); + headroom("U>", w_ugreater, 2, two_args, 5, 1, &dh, &rh); + static const v4_cell dplus_args[][4] = { + { -1, 0, 1, 0 }, { 5, 7, 9, 11 }, { -1, -1, -1, -1 }, + { (v4_cell)V4_MSB, 0, 1, 0 }, { (v4_cell)V4_MSB, 0, (v4_cell)V4_MSB, 0 }, + { 1, 0, 2, 0 } + }; + headroom("D+", w_dplus, 4, dplus_args, 6, 2, &dh, &rh); + CHECK(rh >= 5, "D+ leaves 5 return entries"); + headroom("DNEGATE", w_dnegate, 2, two_args, 5, 2, &dh, &rh); + headroom("DABS", w_dabs, 2, two_args, 5, 2, &dh, &rh); + static const v4_cell mplus_args[][4] = { + { -1, 0, 1, 0 }, { 5, 7, -9, 0 }, { 0, 0, -1, 0 }, { (v4_cell)V4_MSB, 0, (v4_cell)V4_MSB, 0 } + }; + static const v4_cell dsub_args[][4] = { + { 0, 0, 1, 0 }, { 5, 7, 9, 11 }, { -1, -1, -1, -1 }, { 0, 1, 0, 1 }, + { (v4_cell)V4_MSB, 0, (v4_cell)V4_MSB, 0 }, { 1, 0, 2, 0 } + }; + headroom("M+", w_mplus, 3, mplus_args, 4, 2, &dh, &rh); + headroom("M-", w_mminus, 3, mplus_args, 4, 2, &dh, &rh); + CHECK(dh >= 4 && rh >= 4, "M- leaves room"); + { + static const v4_cell six[6] = { 1, 2, 3, 4, 5, 6 }; + static const v4_cell d1_args[][4] = { { 5, -1, 0, 0 }, { -1, 0, 0, 0 }, { 1, 1, 0, 0 } }; + static const v4_cell ms_args[][4] = { { 7, 3, 0, 0 }, { -7, 3, 0, 0 }, { -7, -3, 0, 0 } }; + static const v4_cell ss_args[][4] = { { 7, 3, 2, 0 }, { -7, 3, 2, 0 }, { 7, -3, -2, 0 } }; + int d, r; + headroom("M*", w_mstar, 2, ms_args, 3, 2, &dh, &rh); + CHECK(dh >= 4 && rh >= 4, "M* leaves room"); + headroom("M/MOD", w_mslashmod, 3, smrem_args, 5, 2, &dh, &rh); + headroom("MOD", w_mod, 2, slashmod_args, 4, 1, &dh, &rh); + CHECK(dh >= 3 && rh >= 2, "MOD leaves room"); + headroom("*/MOD", w_starslashmod, 3, ss_args, 3, 2, &dh, &rh); + CHECK(dh >= 3 && rh >= 2, "*/MOD leaves room"); + headroom("*/", w_starslash, 3, ss_args, 3, 1, &dh, &rh); + CHECK(dh >= 3 && rh >= 2, "*/ leaves room"); + headroom("D0<", w_d0less, 2, d1_args, 3, 1, &dh, &rh); + headroom("D2*", w_d2star, 2, d1_args, 3, 2, &dh, &rh); + headroom("D2/", w_d2slash, 2, d1_args, 3, 2, &dh, &rh); + CHECK(dh >= 5 && rh >= 6, "D2/ leaves room"); + for (d = 0; d < V4_DATA_DEPTH; d++) if (!rot6_ok(six, (unsigned)d + 1u, 0)) break; + for (r = 0; r < V4_RET_DEPTH; r++) if (!rot6_ok(six, 0, (unsigned)r + 1u)) break; + printf(" 2ROT headroom: data %d below canary, return %d below its return address\n", d, r); + CHECK(d >= 2 && r >= 1, "2ROT leaves room"); + } + headroom("D-", w_dminus, 4, dsub_args, 6, 2, &dh, &rh); + headroom("D0=", w_d0equal, 2, two_args, 5, 1, &dh, &rh); + headroom("D=", w_dequal, 4, dsub_args, 6, 1, &dh, &rh); + CHECK(dh >= 0 && rh >= 0, "D= runs at all"); + static const v4_cell cmp_args[][4] = { + { 0, 0, 0, 0 }, { 1, 0, 2, 0 }, { 2, 0, 1, 0 }, { 0, -1, 0, 1 }, { 0, 1, 0, -1 }, + { 0, 5, 0, 7 }, { 0, 7, 0, 5 }, { -1, 0, 1, 0 }, { 1, 0, -1, 0 } + }; + headroom("<", w_less, 2, two_args, 5, 1, &dh, &rh); + headroom("=", w_equal, 2, two_args, 5, 1, &dh, &rh); + headroom("D<", w_dless, 4, cmp_args, 9, 1, &dh, &rh); + headroom("(D<)", w_dltkeep, 4, cmp_args, 9, 5, &dh, &rh); + headroom("2SWAP", w_2swap, 4, cmp_args, 9, 4, &dh, &rh); + headroom("2OVER", w_2over, 4, cmp_args, 9, 6, &dh, &rh); + headroom("DMAX", w_dmax, 4, cmp_args, 9, 2, &dh, &rh); + CHECK(dh >= 2 && rh >= 2, "DMAX leaves room"); + headroom("DMIN", w_dmin, 4, cmp_args, 9, 2, &dh, &rh); + CHECK(dh >= 2 && rh >= 2, "DMIN leaves room"); + headroom("Q.> (2SWAP D<)", w_qgt, 4, cmp_args, 9, 1, &dh, &rh); + static const v4_cell qstar_args[][4] = { + { 0, 1, 0, 1 }, { -1, -1, -1, -1 }, { 0, -1, 0, 1 }, { 5, 7, 9, 11 }, + { (v4_cell)V4_MSB, -1, 3, (v4_cell)V4_MSB } + }; + headroom("Q.*", w_qstar, 4, qstar_args, 5, 2, &dh, &rh); + CHECK(dh >= 0 && rh >= 0, "Q.* runs at all"); + static const v4_cell qdiv_args[][4] = { + { 0, 1, 0, 1 }, { 0, 3, 0, 1 }, { 0, -1, 0, 1 }, { 5, 7, 9, 11 }, + { 0, 1, 0, 0 }, { 0, 0x7FFF, 1, 0 }, { -1, 0x7FFF, 0, -3 } + }; + headroom("(UQ/)", w_uqdiv, 4, qdiv_args, 2, 2, &dh, &rh); + headroom("Q./", w_qslash, 4, qdiv_args, 7, 2, &dh, &rh); + CHECK(dh >= 2 && rh >= 2, "Q./ leaves room"); + static const v4_cell qexp_args[][4] = { + { 0, 0, 0, 0 }, { 0x10000, 0, 0, 0 }, { -0x10000, -1, 0, 0 }, + { 0x50000, 0, 0, 0 }, { 0x200000, 0, 0, 0 }, { -0x200000, -1, 0, 0 } + }; + headroom("Q.EXP", w_qexp, 2, qexp_args, 6, 2, &dh, &rh); + CHECK(dh >= 2 && rh >= 2, "Q.EXP leaves room"); + static const v4_cell qsqrt_args[][4] = { + { 0, 0, 0, 0 }, { 0x10000, 0, 0, 0 }, { 0x90000, 0, 0, 0 }, + { -1, 0x7FFF, 0, 0 }, { 5, -1, 0, 0 } + }; + headroom("Q.SQRT", w_qsqrt, 2, qsqrt_args, 5, 2, &dh, &rh); + CHECK(dh >= 2 && rh >= 2, "Q.SQRT leaves room"); + static const v4_cell qlog_args[][4] = { + { 0x10000, 0, 0, 0 }, { 0x2B7E1, 0, 0, 0 }, { 3, 0, 0, 0 }, { -1, 0x7FFF, 0, 0 }, + { 0, 0, 0, 0 }, { 5, -1, 0, 0 } + }; + headroom("Q.LOG", w_qlog, 2, qlog_args, 6, 2, &dh, &rh); + CHECK(dh >= 2 && rh >= 2, "Q.LOG leaves room"); + static const v4_cell qtrig_args[][4] = { + { 0, 0, 0, 0 }, { 0x10000, 0, 0, 0 }, { -0x10000, -1, 0, 0 }, { 205887, 0, 0, 0 }, + { -1, 0x7FFF, 0, 0 }, { 5, -3, 0, 0 } + }; + headroom("(Q.REDUCE)", w_qreduce, 2, qtrig_args, 6, 1, &dh, &rh); + headroom("Q.SIN", w_qsin, 2, qtrig_args, 6, 2, &dh, &rh); + CHECK(dh >= 2 && rh >= 2, "Q.SIN leaves room"); + headroom("Q.COS", w_qcos, 2, qtrig_args, 6, 2, &dh, &rh); + CHECK(dh >= 2 && rh >= 2, "Q.COS leaves room"); + static const v4_cell shift_args[][4] = { { -1, 0, 0, 0 }, { -1, 5, 0, 0 }, { 12345, 31, 0, 0 } }; + headroom("LSHIFT", w_lshift, 2, shift_args, 3, 1, &dh, &rh); + headroom("RSHIFT", w_rshift, 2, shift_args, 3, 1, &dh, &rh); + static const v4_cell cf_args[][4] = { { (V4_NODE_WORDS - 47) * 4 + 3, 0, 0, 0 }, { (V4_NODE_WORDS - 47) * 4, 0, 0, 0 } }; + static const v4_cell cs_args[][4] = { { 0x41, (V4_NODE_WORDS - 47) * 4 + 3, 0, 0 }, { 0xFF, (V4_NODE_WORDS - 47) * 4, 0, 0 } }; + headroom("C@", w_cfetch, 1, cf_args, 2, 1, &dh, &rh); + CHECK(dh >= 7 && rh >= 7, "C@ is call-free"); + headroom("C!", w_cstore, 2, cs_args, 2, 0, &dh, &rh); + headroom("SM/REM", w_smrem, 3, smrem_args, 5, 2, &dh, &rh); + CHECK(rh >= 1, "SM/REM leaves room for /MOD's return address"); + headroom("/MOD", w_slashmod, 2, slashmod_args, 4, 2, &dh, &rh); + headroom("/", w_slash, 2, slashmod_args, 4, 1, &dh, &rh); + CHECK(dh >= 3 && rh >= 2, "/ runs no deeper than /MOD"); + headroom("*", w_star, 2, slashmod_args, 4, 1, &dh, &rh); + CHECK(dh >= 4 && rh >= 5, "* leaves room"); + CHECK(dh >= 0 && rh >= 0, "/MOD runs at all"); + } + } + + CHECK(v4_node_guards_intact(&n), "guards intact"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_guard.c b/v4/tests/test_guard.c new file mode 100644 index 00000000..c7068c6a --- /dev/null +++ b/v4/tests/test_guard.c @@ -0,0 +1,213 @@ +/* test_guard.c -- the 5% safety boundary. + * + * A guard band whose only assertion is "the patterns still look right" has not + * been shown to catch anything. These tests therefore do three things a + * structural test cannot: + * + * 1. pin the sizing arithmetic, including the case that makes a 5% margin + * evaporate -- a short list, where 5% rounds down to zero elements and a + * zero-width guard is a comment rather than a boundary; + * 2. index past each end of a real stack on purpose, and require the check to + * fail, and require it to say *which* end was hit; + * 3. run the real push/pop paths and require the boundary to survive them, so + * a boundary that fires on ordinary use is caught as a false alarm rather + * than being tuned into uselessness. + */ +#include "v4/guard.h" +#include "v4/stack.h" + +#include +#include +#include + +static int failures = 0; +static int checks = 0; + +#define CHECK(cond, ...) \ + do { \ + checks++; \ + if (!(cond)) { \ + failures++; \ + printf(" FAIL %s:%d: ", __FILE__, __LINE__); \ + printf(__VA_ARGS__); \ + printf("\n"); \ + } \ + } while (0) + +static void test_sizing_rounds_up(void) +{ + /* 5% of each, rounded up. */ + CHECK(V4_GUARD_ELEMS(20) == 1, "5%% of 20 is 1, got %u", V4_GUARD_ELEMS(20)); + CHECK(V4_GUARD_ELEMS(40) == 2, "5%% of 40 is 2, got %u", V4_GUARD_ELEMS(40)); + CHECK(V4_GUARD_ELEMS(100) == 5, "5%% of 100 is 5, got %u", V4_GUARD_ELEMS(100)); + CHECK(V4_GUARD_ELEMS(1000) == 50, "5%% of 1000 is 50, got %u", V4_GUARD_ELEMS(1000)); + CHECK(V4_GUARD_ELEMS(2000) == 100, "5%% of 2000 is 100, got %u", V4_GUARD_ELEMS(2000)); +} + +static void test_sizing_never_zero(void) +{ + /* The case that matters. 5% of anything under 20 rounds to 0 by + * truncation, and a guard of zero elements catches nothing at all while + * still reading as "5% boundary" in the source. */ + for (unsigned n = 1; n < 20u; n++) { + unsigned g = V4_GUARD_ELEMS(n); + CHECK(g >= 1u, "a %u-element list got a %u-element boundary", n, g); + } + CHECK(V4_GUARD_ELEMS(1) == 1, "1-element list boundary"); + CHECK(V4_GUARD_ELEMS(3) == 1, "3-element list boundary"); + CHECK(V4_GUARD_ELEMS(8) == 1, "8-element list boundary"); + CHECK(V4_GUARD_ELEMS(19) == 1, "19-element list boundary"); + CHECK(V4_GUARD_ELEMS(V4_DATA_RING) == 1, "data ring boundary at depth 8"); + CHECK(V4_GUARD_ELEMS(V4_RET_RING) == 1, "return ring boundary at depth 8"); +} + +static void test_patterns_are_distinct_at_this_width(void) +{ + /* The compile-time assertion in guard.h covers this, but the point of + * distinct patterns is "which end", and that is only meaningful if it + * survives truncation to the cell width. */ + CHECK(V4_GUARD_PATTERN_HEAD != V4_GUARD_PATTERN_TAIL, + "head and tail patterns are equal at V4_CELL_BITS=%d", V4_CELL_BITS); + CHECK((v4_ucell)V4_GUARD_PATTERN_HEAD != 0u, "head pattern truncated to 0"); + CHECK((v4_ucell)V4_GUARD_PATTERN_TAIL != 0u, "tail pattern truncated to 0"); +} + +static void test_fill_and_intact(void) +{ + v4_cell band[7]; + v4_guard_fill(band, 7, V4_GUARD_PATTERN_HEAD); + CHECK(v4_guard_intact(band, 7, V4_GUARD_PATTERN_HEAD), "filled band intact"); + CHECK(!v4_guard_intact(band, 7, V4_GUARD_PATTERN_TAIL), + "a head-filled band must not read as a tail band"); + + /* Every element is checked, not just the ends. */ + for (unsigned i = 0; i < 7; i++) { + band[i] = 0; + CHECK(!v4_guard_intact(band, 7, V4_GUARD_PATTERN_HEAD), + "band intact after corrupting interior element %u", i); + v4_guard_fill(band, 7, V4_GUARD_PATTERN_HEAD); + } +} + +static void test_reset_installs_boundaries(void) +{ + v4_dstack d; + v4_rstack r; + + /* A struct that has never been reset holds whatever was on the stack, so + * the boundary cannot be assumed present. Poison both first: that the + * check fails before reset is the point, since it is what proves the + * check is reading the boundary and not returning a constant. */ + memset(&d, 0xA5, sizeof d); + memset(&r, 0xA5, sizeof r); + + CHECK(!v4_dstack_guards_intact(&d), + "data boundaries must not read as intact before reset"); + CHECK(!v4_rstack_guards_intact(&r), + "return boundaries must not read as intact before reset"); + + v4_dstack_reset(&d); + v4_rstack_reset(&r); + CHECK(v4_dstack_guards_intact(&d), "data boundaries intact after reset"); + CHECK(v4_rstack_guards_intact(&r), "return boundaries intact after reset"); +} + +static void test_head_overrun_is_detected(void) +{ + /* Deliberately index one element before the ring: exactly what a lost + * modulo or a sign error on the head arithmetic would do. */ + v4_dstack d; + v4_dstack_reset(&d); + CHECK(v4_dstack_guards_intact(&d), "intact before the deliberate overrun"); + + d.guard_head[0] = (v4_cell)V4_GUARD_PATTERN_TAIL; /* wrong pattern too */ + CHECK(!v4_dstack_guards_intact(&d), + "head overrun past the data ring was not detected"); + /* Which end is answerable because the two patterns differ. */ + CHECK((v4_ucell)d.guard_head[0] != V4_GUARD_PATTERN_HEAD, + "head boundary no longer holds its own pattern"); + + v4_dstack_reset(&d); + CHECK(v4_dstack_guards_intact(&d), "intact after re-reset"); +} + +static void test_tail_overrun_is_detected(void) +{ + v4_dstack d; + v4_dstack_reset(&d); + + d.guard_tail[0] = 0; + CHECK(!v4_dstack_guards_intact(&d), + "tail overrun past the data ring was not detected"); + + v4_dstack_reset(&d); + CHECK(v4_dstack_guards_intact(&d), "intact after re-reset"); +} + +static void test_return_stack_boundaries(void) +{ + v4_rstack r; + v4_rstack_reset(&r); + CHECK(v4_rstack_guards_intact(&r), "return boundaries intact after reset"); + + r.guard_head[0] = 0; + CHECK(!v4_rstack_guards_intact(&r), "return head overrun not detected"); + v4_rstack_reset(&r); + + r.guard_tail[V4_RET_BOUND - 1u] = 0; + CHECK(!v4_rstack_guards_intact(&r), "return tail overrun not detected"); + v4_rstack_reset(&r); + CHECK(v4_rstack_guards_intact(&r), "return intact after re-reset"); +} + +static void test_ordinary_use_never_touches_the_boundaries(void) +{ + /* The other half of the contract: a boundary that fires on legitimate use + * is worse than none, because it trains you to ignore it. Drive both + * stacks hard, well past their depths, and require the boundaries to + * survive every operation. */ + v4_dstack d; + v4_rstack r; + v4_dstack_reset(&d); + v4_rstack_reset(&r); + + uint64_t s = 0x243F6A8885A308D3ull; + for (int i = 0; i < 50000; i++) { + s ^= s << 13; s ^= s >> 7; s ^= s << 17; + + v4_dstack_push(&d, (v4_cell)s); + v4_rstack_push(&r, (v4_cell)(s >> 11)); + if (i & 1) { + (void)v4_dstack_pop(&d); + (void)v4_rstack_pop(&r); + } + } + CHECK(v4_dstack_guards_intact(&d), + "data boundary damaged by ordinary push/pop"); + CHECK(v4_rstack_guards_intact(&r), + "return boundary damaged by ordinary push/pop"); + + /* head must still be in range, which is the invariant the boundary exists + * to police. */ + CHECK(d.head < V4_DATA_RING, "data head %u out of range", d.head); + CHECK(r.head < V4_RET_RING, "return head %u out of range", r.head); +} + +int main(void) +{ + printf("v4 guard tests: V4_CELL_BITS=%d, data bound %d, return bound %d\n", + V4_CELL_BITS, V4_DATA_BOUND, V4_RET_BOUND); + + test_sizing_rounds_up(); + test_sizing_never_zero(); + test_patterns_are_distinct_at_this_width(); + test_fill_and_intact(); + test_reset_installs_boundaries(); + test_head_overrun_is_detected(); + test_tail_overrun_is_detected(); + test_return_stack_boundaries(); + test_ordinary_use_never_touches_the_boundaries(); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_heat.c b/v4/tests/test_heat.c new file mode 100644 index 00000000..914934df --- /dev/null +++ b/v4/tests/test_heat.c @@ -0,0 +1,109 @@ +/* test_heat.c -- heat and anti-clock. */ +#include "v4/heat.h" +#include +#include +#include + +static int failures = 0; +static int checks = 0; + +#define CHECK(cond, ...) \ + do { \ + checks++; \ + if (!(cond)) { \ + failures++; \ + printf(" FAIL %s:%d: ", __FILE__, __LINE__); \ + printf(__VA_ARGS__); \ + printf("\n"); \ + } \ + } while (0) + +static void test_reset(void) +{ + v4_heat h; + memset(&h, 0xFF, sizeof h); + v4_heat_reset(&h); + + for (unsigned i = 0; i < V4_OPCODE_COUNT; i++) { + CHECK(h.op[i] == 0, "op %u heat non-zero after reset", i); + } + for (unsigned i = 0; i < V4_HEAT_MAX_CALL_TARGETS; i++) { + CHECK(h.call[i] == 0, "call target %u heat non-zero after reset", i); + CHECK(!v4_heat_call_is_frozen(&h, (v4_cell)i), + "call target %u frozen after reset", i); + } + v4_uheat_t ac = 999; + v4_heat_on_retire(&h, V4_OP_NOP, &ac); + CHECK(ac == 1000, "anticlock not advanced"); + CHECK(h.op[V4_OP_NOP] == 1, "nop heat"); +} + +static void test_retire_advances_anticlock_and_opcode(void) +{ + v4_heat h; + v4_heat_reset(&h); + v4_uheat_t ac = 0; + for (int i = 0; i < 100; i++) { + v4_heat_on_retire(&h, V4_OP_ADD, &ac); + } + CHECK(ac == 100, "anticlock"); + CHECK(h.op[V4_OP_ADD] == 100, "add heat"); + for (unsigned i = 0; i < V4_OPCODE_COUNT; i++) { + if (i == V4_OP_ADD) continue; + CHECK(h.op[i] == 0, "other op %u", i); + } +} + +static void test_call_advances_target(void) +{ + v4_heat h; + v4_heat_reset(&h); + v4_heat_on_call(&h, 10); + v4_heat_on_call(&h, 10); + v4_heat_on_call(&h, 5); + CHECK(v4_heat_call_get(&h, 10) == 2, "target 10"); + CHECK(v4_heat_call_get(&h, 5) == 1, "target 5"); + CHECK(v4_heat_call_get(&h, 1) == 0, "target 1"); +} + +static void test_freeze(void) +{ + v4_heat h; + v4_heat_reset(&h); + v4_heat_on_call(&h, 7); + v4_heat_call_freeze(&h, 7); + CHECK(v4_heat_call_is_frozen(&h, 7), "frozen"); + v4_heat_on_call(&h, 7); + CHECK(v4_heat_call_get(&h, 7) == 1, "still 1"); + CHECK(v4_heat_call_set(&h, 7, 100) == 0, "set returns 0 when frozen"); + CHECK(v4_heat_call_get(&h, 7) == 1, "unchanged"); + v4_heat_call_unfreeze(&h, 7); + CHECK(!v4_heat_call_is_frozen(&h, 7), "unfrozen"); + CHECK(v4_heat_call_set(&h, 7, 42) == 1, "set allowed"); + CHECK(v4_heat_call_get(&h, 7) == 42, "changed"); +} + +static void test_out_of_range_ignored(void) +{ + v4_heat h; + v4_heat_reset(&h); + v4_heat_on_call(&h, (v4_cell)V4_HEAT_MAX_CALL_TARGETS + 5); + CHECK(v4_heat_call_get(&h, (v4_cell)V4_HEAT_MAX_CALL_TARGETS + 5) == 0, + "out of range call ignored"); + CHECK(v4_heat_call_set(&h, (v4_cell)-1, 123) == 0, "set out of range"); + CHECK(v4_heat_call_is_frozen(&h, (v4_cell)-1) == 0, "frozen check"); +} + +int main(void) +{ + printf("v4 heat tests: V4_CELL_BITS=%d\n", V4_CELL_BITS); + + test_reset(); + test_retire_advances_anticlock_and_opcode(); + test_call_advances_target(); + test_freeze(); + test_out_of_range_ignored(); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_host_blocks.c b/v4/tests/test_host_blocks.c new file mode 100644 index 00000000..df17dcf1 --- /dev/null +++ b/v4/tests/test_host_blocks.c @@ -0,0 +1,176 @@ +/* test_blocks.c -- the kernel serves a node's block requests. + * docs/v4.0.0/MESH.md sections 8.2 and 8.3. + * + * A host node, stopped, with what a request takes on its data stack; the blocks + * are v3's block subsystem (v3/src/block_subsystem.c): its fast RAM and a + * device of 64 blocks. The window is four slots of 256 cells in the node's + * memory, and the kernel keeps the record of what is in them. + */ +#include "v4/blocks.h" +#include +#include +#include +#include "block_subsystem.h" + +extern void sf_time_init(void); +extern void log_set_level(int level); + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define DEVICE_BLOCKS 64u +#define WINDOW 200 +static unsigned char ram[(size_t)BLK_RAM_BLOCKS * BLK_FORTH_SIZE], dev[DEVICE_BLOCKS * BLK_FORTH_SIZE]; +static v4_node n; +static v4_blocks w; +static v4_cell got_addr; + +/* a request that takes a block's number: its status, and the address in got_addr */ +static v4_cell ask(v4_cell request, v4_cell block) +{ + v4_cell status; + v4_dstack_reset(&n.ds); + v4_dstack_push(&n.ds, 7777); + v4_dstack_push(&n.ds, block); + if (!v4_blocks_serve(&w, &n, request)) return -100; + status = v4_dstack_pop(&n.ds); + got_addr = v4_dstack_pop(&n.ds); + return (v4_dstack_pop(&n.ds) == 7777 && n.ds.depth == 0) ? status : -200; /* what was under its argument is still there */ +} +/* a request that takes nothing: its status */ +static v4_cell tell(v4_cell request) +{ + v4_dstack_reset(&n.ds); + v4_dstack_push(&n.ds, 7777); + if (!v4_blocks_serve(&w, &n, request)) return -100; + if (request == V4_REQ_EMPTY_BUFFERS) return (v4_dstack_pop(&n.ds) == 7777 && n.ds.depth == 0) ? 0 : -200; + { + v4_cell status = v4_dstack_pop(&n.ds); + return (v4_dstack_pop(&n.ds) == 7777 && n.ds.depth == 0) ? status : -200; + } +} +static int in_window(v4_cell a) { return a >= WINDOW && a < WINDOW + (v4_cell)(V4_BLOCK_SLOTS * V4_BLOCK_CELLS) && (a - WINDOW) % (v4_cell)V4_BLOCK_CELLS == 0; } +static unsigned char *chain_block(unsigned num) { return num < 2048u ? ram + ((size_t)num + BLK_FORTH_SYS_RESERVED) * 1024u : dev + (size_t)(num - 2048u) * 1024u; } + +int main(void) +{ + unsigned i; + v4_cell a, b; + + printf("v4 block request tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + sf_time_init(); + log_set_level(-1); + CHECK(blk_subsys_init(ram, sizeof ram) == BLK_OK && blk_subsys_add_raw_device(dev, DEVICE_BLOCKS) == BLK_OK, "the kernel's chain: fast RAM and a device of 64 blocks"); + v4_node_reset(&n); + v4_blocks_init(&w, WINDOW); + + /* ---- BLOCK: the block is copied into a slot of the window ---- */ + memset(chain_block(2050), 'A', 1024); + chain_block(2050)[1] = 'B'; + n.mem[WINDOW - 1] = 111; n.mem[WINDOW + V4_BLOCK_SLOTS * V4_BLOCK_CELLS] = 222; + CHECK(ask(V4_REQ_BLOCK, 2050) == V4_BLOCK_OK && in_window(got_addr), "BLOCK gives the address of a slot of the window"); + a = got_addr; + CHECK(n.mem[a] == (v4_cell)0x41414241 && n.mem[a + 255] == (v4_cell)0x41414141, "holding the block, four bytes to a cell, the first lowest, the rest of each cell zero"); + chain_block(2050)[0] = 'Z'; + CHECK(ask(V4_REQ_BLOCK, 2050) == V4_BLOCK_OK && got_addr == a && n.mem[a] == (v4_cell)0x41414241, "a block already in a slot is given as it is there, and not read again"); + CHECK(ask(V4_REQ_BLOCK, 20) == V4_BLOCK_OK && in_window(got_addr) && got_addr != a, "another block is put in another slot"); + CHECK(n.mem[WINDOW - 1] == 111 && n.mem[WINDOW + V4_BLOCK_SLOTS * V4_BLOCK_CELLS] == 222, "nothing outside the window is written"); + + /* ---- UPDATE marks; nothing is written until SAVE-BUFFERS ---- */ + CHECK(ask(V4_REQ_BLOCK, 2051) == V4_BLOCK_OK, "block 2051 is asked for"); + b = got_addr; + n.mem[b] = (v4_cell)0x64636261; +#if V4_CELL_BITS > 32 + n.mem[b + 1] = (v4_cell)0x7766554433221100LL; /* only its low 32 bits are the block's */ +#endif + CHECK(tell(V4_REQ_UPDATE) == V4_BLOCK_OK && chain_block(2051)[0] == 0, "UPDATE marks it, and it is not written yet"); + CHECK(tell(V4_REQ_SAVE_BUFFERS) == V4_BLOCK_OK && memcmp(chain_block(2051), "abcd", 4) == 0, "SAVE-BUFFERS writes it"); +#if V4_CELL_BITS > 32 + CHECK(chain_block(2051)[4] == 0x00 && chain_block(2051)[7] == 0x33 && chain_block(2051)[8] == 0, "the low 32 bits of each cell, and no more"); +#endif + CHECK(chain_block(2050)[0] == 'Z' && chain_block(2050)[1] == 'B', "a block that was not UPDATEd is not written"); + n.mem[b] = (v4_cell)0x31313131; + CHECK(tell(V4_REQ_SAVE_BUFFERS) == V4_BLOCK_OK && chain_block(2051)[0] == 'a', "nor is one changed again and not UPDATEd again"); + CHECK(tell(V4_REQ_UPDATE) == V4_BLOCK_OK, "UPDATE is of the block most recently asked for"); + CHECK(ask(V4_REQ_BLOCK, 2050) == V4_BLOCK_OK && tell(V4_REQ_UPDATE) == V4_BLOCK_OK && tell(V4_REQ_SAVE_BUFFERS) == V4_BLOCK_OK + && chain_block(2051)[0] == '1' && chain_block(2050)[0] == 'A', "two UPDATEd blocks are both written, each from its own slot"); + + /* ---- EMPTY-BUFFERS forgets, and writes nothing ---- */ + n.mem[a] = (v4_cell)0x58585858; + CHECK(ask(V4_REQ_BLOCK, 2050) == V4_BLOCK_OK && tell(V4_REQ_UPDATE) == V4_BLOCK_OK && tell(V4_REQ_EMPTY_BUFFERS) == 0 && tell(V4_REQ_SAVE_BUFFERS) == V4_BLOCK_OK + && chain_block(2050)[0] == 'A', "EMPTY-BUFFERS forgets an UPDATEd block: it is not written"); + CHECK(tell(V4_REQ_UPDATE) == V4_BLOCK_OK && tell(V4_REQ_SAVE_BUFFERS) == V4_BLOCK_OK, "UPDATE with no block asked for does nothing"); + chain_block(2050)[0] = 'Q'; + CHECK(ask(V4_REQ_BLOCK, 2050) == V4_BLOCK_OK && (n.mem[got_addr] & 0xFF) == 'Q', "and the block is read again when it is next asked for"); + + /* ---- BUFFER: a slot for the block, not read ---- */ + (void)tell(V4_REQ_EMPTY_BUFFERS); + CHECK(ask(V4_REQ_BUFFER, 2060) == V4_BLOCK_OK && in_window(got_addr) && n.mem[got_addr] == 0 && n.mem[got_addr + 255] == 0, "BUFFER gives a slot of zeros, as v3's does"); + n.mem[got_addr] = (v4_cell)0x62626262; + CHECK(tell(V4_REQ_UPDATE) == V4_BLOCK_OK && tell(V4_REQ_SAVE_BUFFERS) == V4_BLOCK_OK && chain_block(2060)[0] == 'b' && chain_block(2060)[4] == 0, "and what is put in it is written"); + CHECK(ask(V4_REQ_BLOCK, 2060) == V4_BLOCK_OK && n.mem[got_addr] == (v4_cell)0x62626262, "BLOCK then finds it in its slot"); + + /* ---- more blocks than slots ---- */ + (void)tell(V4_REQ_EMPTY_BUFFERS); + for (i = 0; i < V4_BLOCK_SLOTS; i++) { + CHECK(ask(V4_REQ_BLOCK, 2100 + (v4_cell)i) == V4_BLOCK_OK, "block %u is asked for", 2100 + i); + n.mem[got_addr] = (v4_cell)(0x30303030 + i); + } + CHECK(tell(V4_REQ_UPDATE) == V4_BLOCK_OK, "the last of them is UPDATEd"); + CHECK(ask(V4_REQ_BLOCK, 2110) == V4_BLOCK_OK && chain_block(2100 + V4_BLOCK_SLOTS - 1)[0] == 0, "one more takes a slot whose block was not UPDATEd, and nothing is written"); + for (i = 0; i < V4_BLOCK_SLOTS; i++) { (void)ask(V4_REQ_BLOCK, 2100 + (v4_cell)i); n.mem[got_addr] = (v4_cell)(0x30303030 + i); (void)tell(V4_REQ_UPDATE); } + for (i = 0; i < V4_BLOCK_SLOTS && chain_block(2100 + i)[0] == 0; i++) { } + CHECK(i == V4_BLOCK_SLOTS, "with every slot UPDATEd nothing is written until a slot is wanted"); + { + unsigned written = 0; + CHECK(ask(V4_REQ_BLOCK, 2111) == V4_BLOCK_OK, "one more block is asked for"); + for (i = 0; i < V4_BLOCK_SLOTS; i++) if (chain_block(2100 + i)[0] != 0) written++; + CHECK(written >= 1, "and the block whose slot it took was written first: %u written", written); + } + (void)tell(V4_REQ_EMPTY_BUFFERS); + + /* ---- numbers that are no block ---- */ + CHECK(ask(V4_REQ_BLOCK, 0) == V4_BLOCK_RANGE && got_addr == 0, "0 is no block"); + CHECK(ask(V4_REQ_BLOCK, -1) == V4_BLOCK_RANGE && ask(V4_REQ_BUFFER, -5) == V4_BLOCK_RANGE, "nor is a number below it"); + CHECK(ask(V4_REQ_BLOCK, 2111) == V4_BLOCK_OK && ask(V4_REQ_BLOCK, 2112) == V4_BLOCK_RANGE && ask(V4_REQ_BUFFER, 2112) == V4_BLOCK_RANGE, "the device's last block is, and the one after it is not"); +#if V4_CELL_BITS > 32 + CHECK(ask(V4_REQ_BLOCK, (v4_cell)0x100000014LL) == V4_BLOCK_RANGE, "a number 32 bits do not hold is no block, whatever its low bits are"); +#endif + + /* ---- a request with too little on the stack ---- */ + v4_dstack_reset(&n.ds); + CHECK(v4_blocks_serve(&w, &n, V4_REQ_BLOCK) && n.ds.depth == 2 && v4_dstack_pop(&n.ds) == V4_BLOCK_REFUSED && v4_dstack_pop(&n.ds) == 0, + "BLOCK with nothing on the stack is refused: no address, and the status"); + + /* ---- a window that is not in the node's memory ---- */ + { + v4_blocks bad; + v4_cell top = (v4_cell)V4_NODE_WORDS, status; + v4_blocks_init(&bad, top - (v4_cell)(V4_BLOCK_SLOTS * V4_BLOCK_CELLS) + 1); + n.mem[top - 1] = 123; + v4_dstack_reset(&n.ds); v4_dstack_push(&n.ds, 2050); + CHECK(v4_blocks_serve(&bad, &n, V4_REQ_BLOCK), "a request with a window that runs past the end of memory is served"); + status = v4_dstack_pop(&n.ds); + CHECK(status == V4_BLOCK_REFUSED && v4_dstack_pop(&n.ds) == 0 && n.mem[top - 1] == 123, "by being refused, with nothing written"); + } + + /* ---- the chain changes: what is in the slots is let go, as v3 does ---- */ + (void)tell(V4_REQ_EMPTY_BUFFERS); + CHECK(ask(V4_REQ_BLOCK, 2070) == V4_BLOCK_OK && (n.mem[got_addr] = (v4_cell)0x59595959) != 0 && tell(V4_REQ_UPDATE) == V4_BLOCK_OK, "a block is in a slot, UPDATEd"); + { + static unsigned char more[4 * 1024]; + CHECK(blk_subsys_add_raw_device(more, 4) == BLK_OK, "a device joins the chain"); + memset(chain_block(2070), 'N', 1024); + CHECK(tell(V4_REQ_SAVE_BUFFERS) == V4_BLOCK_OK && chain_block(2070)[0] == 'N', "what was in the slots is not written to the chain as it now is"); + CHECK(ask(V4_REQ_BLOCK, 2070) == V4_BLOCK_OK && (n.mem[got_addr] & 0xFF) == 'N', "and the block is read again"); + } + + /* ---- what is not a block request ---- */ + v4_dstack_reset(&n.ds); + v4_dstack_push(&n.ds, 11); v4_dstack_push(&n.ds, 22); + CHECK(!v4_blocks_serve(&w, &n, 5) && !v4_blocks_serve(&w, &n, 0) && !v4_blocks_serve(&w, &n, -6) && v4_dstack_pop(&n.ds) == 22 && v4_dstack_pop(&n.ds) == 11, + "any other request is not served here, and the stack is as it was"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_host_codegen.c b/v4/tests/test_host_codegen.c new file mode 100644 index 00000000..17ce4315 --- /dev/null +++ b/v4/tests/test_host_codegen.c @@ -0,0 +1,329 @@ +/* test_host_codegen.c -- the code generator, executed on the host node. + * + * capsule/codegen.v4 packs opcodes, literals and branches into instruction + * words at HERE; it is what the compiling words will be built on. It is the + * third thing in this tree that does that job -- after the slot packer in C + * (asm.h) and the text assembler on top of it (text.h) -- and the first that + * is itself v4 code. So the test is a comparison: the same programme is laid + * down twice, once by the text assembler on one node and once by the code + * generator running on another, at the same address, and the two memories + * must be the same word for word. Then what the generator made is run. + */ +#include "v4/text.h" +#include "v4/testcode.h" +#include +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) +#define MAXU ((v4_ucell)~(v4_ucell)0) + +#define DICT_W ((v4_cell)8192) /* dictionary space: words 8192 .. 12287 */ +#define DICT_END_W ((v4_cell)12288) +#include "host_map.h" + +static v4_node n, ref; /* the generator's node; the text assembler's */ +static v4_exec_state es; +static v4_heat h; +static v4_text tx, rtx; /* the capsule on n; the reference programme on ref */ + +static const char *const mnemonic[V4_OPCODE_COUNT] = { + ";", "ex", "jump", "call", "unext", "next", "if", "-if", "@p", "@+", "@b", "@", "!p", "!+", "!b", "!", + "+*", "2*", "2/", "inv", "+", "and", "xor", "drop", "dup", "pop", "over", "a", "nop", "push", "b!", "a!" }; + +static v4_cell W(const char *name) +{ + v4_cell w = v4_text_word(&tx, name); + if (w < 0) { failures++; printf("FAIL: no word %s\n", name); } + return w; +} +static int run(const char *name, unsigned argc, v4_cell a, v4_cell b) +{ + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + v4_dstack_push(&n.ds, CANARY); + if (argc > 0) v4_dstack_push(&n.ds, a); + if (argc > 1) v4_dstack_push(&n.ds, b); + return v4_test_call(&n, &es, &h, W(name), 100000) > 0; +} +static v4_cell pop(void) { return v4_dstack_pop(&n.ds); } +static int clean(void) { return pop() == CANARY; } +/* a word that takes its arguments and leaves nothing */ +static int did(const char *name, unsigned argc, v4_cell a, v4_cell b) { return run(name, argc, a, b) && clean(); } +/* a word that leaves one cell */ +static v4_cell get(const char *name, unsigned argc, v4_cell a, v4_cell b) +{ + v4_cell r; + if (!run(name, argc, a, b)) return (v4_cell)0x0BADBAD; + r = pop(); + return clean() ? r : (v4_cell)0x0BADBAD; +} + +/* ---- a programme, described once and laid down twice --------------------- */ + +enum { K_OP, K_LIT, K_LABEL, K_BACK, K_FWD, K_HERE }; /* K_HERE resolves a K_FWD */ +typedef struct { int kind; unsigned op; v4_cell value; int label; } item; + +#define MAX_ITEMS 400 +static item prog[MAX_ITEMS]; +static unsigned nprog; + +static void p_op(unsigned op) { prog[nprog].kind = K_OP; prog[nprog].op = op; nprog++; } +static void p_lit(v4_cell v) { prog[nprog].kind = K_LIT; prog[nprog].value = v; nprog++; } +static void p_label(int l) { prog[nprog].kind = K_LABEL; prog[nprog].label = l; nprog++; } +static void p_back(unsigned op, int l) { prog[nprog].kind = K_BACK; prog[nprog].op = op; prog[nprog].label = l; nprog++; } +static void p_fwd(unsigned op, int l) { prog[nprog].kind = K_FWD; prog[nprog].op = op; prog[nprog].label = l; nprog++; } +static void p_here(int l) { prog[nprog].kind = K_HERE; prog[nprog].label = l; nprog++; } + +/* By the text assembler, on `ref`, at the dictionary's first word. */ +static int lay_by_text(void) +{ + static char src[MAX_ITEMS * 40]; + size_t at = 0; + unsigned i; + at += (size_t)sprintf(src + at, ": PROG "); + for (i = 0; i < nprog; i++) { + const item *it = &prog[i]; + switch (it->kind) { + case K_OP: at += (size_t)sprintf(src + at, "%s ", mnemonic[it->op]); break; +#if V4_CELL_BITS == 32 + case K_LIT: at += (size_t)sprintf(src + at, "%ld ", (long)it->value); break; +#else + case K_LIT: at += (size_t)sprintf(src + at, "%lld ", (long long)it->value); break; +#endif + case K_LABEL: at += (size_t)sprintf(src + at, "B%d: ", it->label); break; + case K_BACK: at += (size_t)sprintf(src + at, "%s B%d ", mnemonic[it->op], it->label); break; + case K_FWD: at += (size_t)sprintf(src + at, "%s F%d ", mnemonic[it->op], it->label); break; + case K_HERE: at += (size_t)sprintf(src + at, "F%d: ", it->label); break; + } + } + v4_node_reset(&ref); + v4_text_begin(&rtx, &ref, DICT_W); + return v4_text_assemble(&rtx, src) && v4_text_finish(&rtx); +} + +/* By the code generator, on `n`: one call to a word of codegen.v4 for each + * item, as the compiling words will make them. */ +static int lay_by_generator(void) +{ + static v4_cell back[64], fwd[64]; + unsigned i; + for (v4_cell k = DICT_W; k < DICT_END_W; k++) n.mem[k] = 0; + n.mem[DP] = DICT_W * 4; + n.mem[NODE_ERROR] = 0; + if (!did("(CG-RESET)", 0, 0, 0)) return 0; + for (i = 0; i < nprog; i++) { + const item *it = &prog[i]; + switch (it->kind) { + case K_OP: if (!did("(OP,)", 1, (v4_cell)it->op, 0)) return 0; break; + case K_LIT: if (!did("(LIT,)", 1, it->value, 0)) return 0; break; + case K_LABEL: back[it->label] = get("(LABEL)", 0, 0, 0); break; + case K_BACK: if (!did("(BRANCH,)", 2, back[it->label], (v4_cell)it->op)) return 0; break; + case K_FWD: fwd[it->label] = get("(BRANCH>)", 1, (v4_cell)it->op, 0); break; + case K_HERE: { v4_cell here = get("(LABEL)", 0, 0, 0); if (!did("(RESOLVE)", 2, here, fwd[it->label])) return 0; } break; + } + } + return did("(FLUSH)", 0, 0, 0) && n.mem[NODE_ERROR] == 0; +} + +/* Lay the programme down both ways; 1 if the two are the same. */ +static int same(const char *what) +{ + v4_cell end_ref, end_gen, k; + if (!lay_by_text()) { printf(" %s: the text assembler refused it: %s\n", what, v4_text_error(&rtx)); return 0; } + if (!lay_by_generator()) { printf(" %s: the generator did not finish\n", what); return 0; } + end_ref = v4_text_here(&rtx); + end_gen = (n.mem[DP] + 3) / 4; + if (end_ref != end_gen) { printf(" %s: lengths differ: %ld by text, %ld by the generator\n", what, (long)(end_ref - DICT_W), (long)(end_gen - DICT_W)); return 0; } + for (k = DICT_W; k < end_ref + 8; k++) + if (n.mem[k] != ref.mem[k]) { + printf(" %s: word %ld differs: %llx by text, %llx by the generator\n", what, (long)(k - DICT_W), + (unsigned long long)(v4_ucell)ref.mem[k], (unsigned long long)(v4_ucell)n.mem[k]); + return 0; + } + return 1; +} + +static uint32_t rng = 0x7F4A7C15u; +static uint32_t rnd(void) { rng ^= rng << 13; rng ^= rng >> 17; rng ^= rng << 5; return rng; } + +static const unsigned plain_ops[] = { /* every opcode but the branches and @p */ + 0, 1, 4, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }; +static const unsigned branch_ops[] = { 2, 3, 5, 6, 7 }; +static const v4_cell lits[] = { 0, 1, -1, 2, 255, 65536, -65536, 12345678, (v4_cell)V4_MSB, (v4_cell)(V4_MSB - 1u), (v4_cell)(MAXU / 3u) }; + +/* Run the programme the generator laid down, as a word. */ +static int exec_prog(unsigned argc, v4_cell a, v4_cell b) +{ + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_dstack_push(&n.ds, CANARY); + if (argc > 0) v4_dstack_push(&n.ds, a); + if (argc > 1) v4_dstack_push(&n.ds, b); + return v4_test_call(&n, &es, &h, DICT_W, 100000) > 0; +} + +int main(void) +{ + unsigned i, t, bslots = 0; + + printf("v4 host code generator tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + + for (i = 0; i < 4; i++) if ((v4_ucell)v4_iword_slot_mask(i) >= (v4_ucell)(V4_NODE_WORDS - 1u)) bslots = i + 1; + CHECK(bslots == 3, "at this node size a branch may sit in slots 0 .. 2: %u", bslots); + + { + static const char *const files[] = { "core.v4", "input.v4", "dict.v4", "codegen.v4" }; + CHECK(host_load(&tx, &n, files, 4), "the capsule assembles"); + } + CHECK(v4_text_finish(&tx), "everything is defined: %s", v4_text_error(&tx)); + CHECK(v4_text_here(&tx) < DICT_W, "code stays below the dictionary space"); + printf(" code: %ld words\n", (long)v4_text_here(&tx) - 16); + if (failures) { printf(" %d checks, %d failures\n", checks, failures); return 1; } + + /* ---- the address masks ---- */ + for (i = 0; i < 4; i++) + CHECK(get("(MASK)", 1, (v4_cell)i, 0) == (v4_cell)v4_iword_slot_mask(i), "slot %u's address mask", i); + + /* ---- one thing at a time ---- */ + nprog = 0; + CHECK(same("nothing"), "nothing lays nothing"); + CHECK((n.mem[DP] + 3) / 4 == DICT_W, "and HERE does not move"); + + for (i = 0; i < sizeof plain_ops / sizeof plain_ops[0]; i++) { + nprog = 0; p_op(plain_ops[i]); + CHECK(same(mnemonic[plain_ops[i]]), "the opcode %s alone", mnemonic[plain_ops[i]]); + nprog = 0; p_op(28); p_op(28); p_op(plain_ops[i]); p_op(24); + CHECK(same(mnemonic[plain_ops[i]]), "the opcode %s in slot 2, something after it", mnemonic[plain_ops[i]]); + } + for (t = 1; t <= 14; t++) { + nprog = 0; for (i = 0; i < t; i++) p_op(24); + CHECK(same("dups"), "%u opcodes: a word every six", t); + } + for (i = 0; i < sizeof lits / sizeof lits[0]; i++) { + nprog = 0; p_lit(lits[i]); p_op(0); + CHECK(same("a literal"), "the literal [%u]", i); + } + for (t = 1; t <= 14; t++) { + nprog = 0; for (i = 0; i < t; i++) p_lit((v4_cell)(100 + i)); + CHECK(same("literals"), "%u literals in a row: each word's follow it in order", t); + } + for (t = 0; t <= 6; t++) { /* a literal in each slot, then more code */ + nprog = 0; for (i = 0; i < t; i++) p_op(24); + p_lit(77); p_op(20); p_lit(-88); p_op(0); + CHECK(same("mixed"), "a literal after %u opcodes", t); + } + + /* a branch after 0 .. 6 opcodes, backward and forward, each of the five */ + for (i = 0; i < 5; i++) + for (t = 0; t <= 6; t++) { + unsigned k; + nprog = 0; p_label(0); p_op(28); p_op(28); p_op(28); p_op(28); p_op(28); p_op(28); + for (k = 0; k < t; k++) p_op(24); + p_back(branch_ops[i], 0); p_op(23); p_op(0); + CHECK(same("back"), "%s backward after %u opcodes", mnemonic[branch_ops[i]], t); + nprog = 0; + for (k = 0; k < t; k++) p_op(24); + p_fwd(branch_ops[i], 0); p_op(23); p_op(23); p_op(0); p_here(0); p_op(0); + CHECK(same("forward"), "%s forward after %u opcodes", mnemonic[branch_ops[i]], t); + nprog = 0; /* with literals owed by the branch's word */ + p_lit(5); p_lit(6); + for (k = 0; k < t; k++) p_op(24); + p_fwd(branch_ops[i], 0); p_lit(7); p_op(0); p_here(0); p_op(0); + CHECK(same("forward with literals"), "%s forward after two literals and %u opcodes", mnemonic[branch_ops[i]], t); + } + + /* a label after 0 .. 6 opcodes closes the word */ + for (t = 0; t <= 6; t++) { + nprog = 0; for (i = 0; i < t; i++) p_op(24); + p_label(0); p_op(23); p_back(2, 0); + CHECK(same("label"), "a label after %u opcodes", t); + } + + /* ---- random programmes ---- */ + for (t = 0; t < 600; t++) { + unsigned len = 5 + rnd() % 120, nback = 0, nfwd = 0, open[8], nopen = 0; + nprog = 0; + for (i = 0; i < len && nprog < MAX_ITEMS - 20; i++) { + unsigned r = rnd() % 100; + if (r < 55) p_op(plain_ops[rnd() % (sizeof plain_ops / sizeof plain_ops[0])]); + else if (r < 75) p_lit(rnd() % 3 ? (v4_cell)(int32_t)rnd() : lits[rnd() % (sizeof lits / sizeof lits[0])]); + else if (r < 82 && nback < 40) p_label((int)nback++); + else if (r < 90 && nback > 0) p_back(branch_ops[rnd() % 5], (int)(rnd() % nback)); + else if (r < 95 && nopen < 8 && nfwd < 40) { open[nopen++] = nfwd; p_fwd(branch_ops[rnd() % 5], (int)nfwd++); } + else if (nopen > 0) { unsigned k = rnd() % nopen; p_here((int)open[k]); open[k] = open[--nopen]; } + } + while (nopen > 0) p_here((int)open[--nopen]); + CHECK(same("random"), "random programme %u of %u items", t, nprog); + } + + /* ---- what it lays down runs ---- */ + + /* ( a b -- b a ) over push push drop pop pop ; */ + nprog = 0; p_op(26); p_op(29); p_op(29); p_op(23); p_op(25); p_op(25); p_op(0); + CHECK(same("SWAP") && exec_prog(2, 3, 4) && pop() == 3 && pop() == 4 && clean(), "SWAP, generated, swaps"); + + /* ( n -- n*8+5 ) 2 push L: 2* next L 5 + ; a backward branch and a literal */ + nprog = 0; p_lit(2); p_op(29); p_label(0); p_op(17); p_back(5, 0); p_lit(5); p_op(20); p_op(0); + CHECK(same("loop") && exec_prog(1, 3, 0) && pop() == 29 && clean(), "a counted loop, generated, counts"); + + /* ( n -- 10 | 20 ) if Z drop 10 ; Z: drop 20 ; a forward branch */ + nprog = 0; p_fwd(6, 0); p_op(23); p_lit(10); p_op(0); p_here(0); p_op(23); p_lit(20); p_op(0); + CHECK(same("if") && exec_prog(1, 7, 0) && pop() == 10 && clean() && exec_prog(1, 0, 0) && pop() == 20 && clean(), "a conditional, generated, chooses"); + + /* a call to a word of the capsule, and a jump to one: ( c baddr -- c' ) dup push C! pop jump C@ */ + CHECK(lay_by_generator() == 1, "reset"); + nprog = 0; + for (v4_cell k = DICT_W; k < DICT_W + 16; k++) n.mem[k] = 0; + n.mem[DP] = DICT_W * 4; + CHECK(did("(CG-RESET)", 0, 0, 0) && did("(OP,)", 1, 24, 0) && did("(OP,)", 1, 29, 0) + && did("(CALL,)", 1, W("C!"), 0) && did("(OP,)", 1, 25, 0) && did("(JUMP,)", 1, W("C@"), 0) && did("(FLUSH)", 0, 0, 0), + "a call and a jump to capsule words are generated"); + for (i = 0; i < 8; i++) + CHECK(exec_prog(2, (v4_cell)(0x500 + 'A' + i), PAD_W * 4 + (v4_cell)i) && pop() == (v4_cell)('A' + i) && clean(), "and they run [%u]", i); + /* dup push call | pop jump : the call is in slot 2 of the first word, the jump in slot 1 of the second */ + CHECK(v4_iword_op((v4_iword)(v4_ucell)n.mem[DICT_W], 2) == V4_OP_CALL + && v4_iword_target((v4_iword)(v4_ucell)n.mem[DICT_W], 2) == (v4_iword)W("C!"), "(CALL,) lays a call to its address"); + CHECK(v4_iword_op((v4_iword)(v4_ucell)n.mem[DICT_W + 1], 1) == V4_OP_JUMP + && v4_iword_target((v4_iword)(v4_ucell)n.mem[DICT_W + 1], 1) == (v4_iword)W("C@"), "(JUMP,) lays a jump to its address"); + + /* (RESOLVE) writes only the address bits of its slot: a target with + * higher bits set leaves the opcodes of the word as they were */ + for (i = 0; i < 3; i++) { + v4_cell r, before; + unsigned k; + n.mem[DP] = DICT_W * 4; + CHECK(did("(CG-RESET)", 0, 0, 0), "reset"); + for (k = 0; k < i; k++) CHECK(did("(OP,)", 1, 24, 0), "dup"); + r = get("(BRANCH>)", 1, 6, 0); + before = n.mem[DICT_W]; + CHECK(r == DICT_W * 8 + (v4_cell)i, "the reference names the word and slot %u", i); + CHECK(did("(RESOLVE)", 2, (v4_cell)-1, r), "resolved to all ones"); + CHECK((v4_ucell)n.mem[DICT_W] == ((v4_ucell)before | (v4_ucell)v4_iword_slot_mask(i)), + "only the %u address bits of slot %u are written", V4_SLOT_LOW_BIT(i), i); + CHECK(did("(RESOLVE)", 2, 0, r) && n.mem[DICT_W] == before, "and resolving again to 0 clears them, and nothing else"); + } + + /* (CG-RESET) forgets a word half built */ + n.mem[DP] = DICT_W * 4; + CHECK(did("(OP,)", 1, 24, 0) && did("(LIT,)", 1, 9, 0) && did("(CG-RESET)", 0, 0, 0) && did("(FLUSH)", 0, 0, 0) + && n.mem[DP] == DICT_W * 4, "(CG-RESET) forgets a half-built word"); + + /* a full dictionary: nothing is written past it, and NODE-ERROR is set */ + n.mem[DP] = (DICT_END_W - 1) * 4; + n.mem[DICT_END_W] = 0x5EED; + n.mem[NODE_ERROR] = 0; + CHECK(did("(LIT,)", 1, 1, 0) && did("(LIT,)", 1, 2, 0) && did("(FLUSH)", 0, 0, 0) + && n.mem[NODE_ERROR] != 0 && n.mem[DICT_END_W] == 0x5EED, "code that does not fit sets NODE-ERROR and writes nothing past the end"); + + CHECK(v4_node_guards_intact(&n) && v4_node_guards_intact(&ref), "guards intact"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_host_compile.c b/v4/tests/test_host_compile.c new file mode 100644 index 00000000..46fd9361 --- /dev/null +++ b/v4/tests/test_host_compile.c @@ -0,0 +1,457 @@ +/* test_host_compile.c -- the defining and compiling words, executed on the + * host node. + * + * capsule/compile.v4 and capsule/forth.v4 on top of the earlier layers: for + * the first time FORTH source text goes in and running code comes out. Each + * test hands lines of source to INTERPRET, which defines words with : and ; + * and the rest, runs them, and leaves results on the stack. + * + * The table of programmes below was run through the v3 binary on 2026-10-04 + * (definitions, then the expression, then one `.` per result) and the numbers + * are what v3 printed. Two rows are not v3's: COMPILE, which v3 cannot run + * (`: C1 COMPILE DUP ; IMMEDIATE` then `: U3 C1 + ;` gives "DUP: Stack + * underflow"), and one that used NIP, which is not a v3 word. + * + * Where v4 parts from v3 here: + * - ' is FORTH-79's: the parameter field address, and compiled as a + * literal inside a definition. v3's ' parses when the definition runs. + * - what is not a word and not a number abandons the line and sets + * NODE-ERROR, after v3's UNKNOWN WORD message. What is printed is + * checked in test_host_quit.c, where the node has a console. + */ +#include "v4/text.h" +#include "v4/testcode.h" +#include +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) + +#include "host_map.h" + +static v4_node n, ref; +static v4_exec_state es; +static v4_heat h; +static v4_text tx, rtx; +static v4_cell w_interpret, capsule_latest; + +static void put_bytes(v4_cell baddr, const void *src, unsigned len) +{ + const unsigned char *s = (const unsigned char *)src; + for (unsigned i = 0; i < len; i++) { + v4_cell ba = baddr + (v4_cell)i; + unsigned sh = 8u * (unsigned)(ba & 3); + v4_ucell w = (v4_ucell)n.mem[ba >> 2]; + n.mem[ba >> 2] = (v4_cell)((w & ~((v4_ucell)0xFFu << sh)) | ((v4_ucell)s[i] << sh)); + } +} + +/* An empty dictionary above the capsule's own words. */ +static void new_session(void) +{ + for (v4_cell i = DICT_W; i < DICT_END_W; i++) n.mem[i] = 0; + n.mem[DP] = DICT_W * 4; + n.mem[LATEST] = capsule_latest; + n.mem[STATE] = 0; + n.mem[CFP] = CFS_W; + n.mem[BASE] = 10; + n.mem[NODE_ERROR] = 0; +} +/* INTERPRET one line, as QUERY would have left it in TIB. The data stack + * starts with the canary alone; `depth` extra marked cells go under it and + * `rdepth` under the return address, for the headroom tests. True when + * INTERPRET returns. */ +static int interpret_with(const char *line, unsigned depth, unsigned rdepth) +{ + unsigned len = (unsigned)strlen(line), i; + put_bytes(TIB, line, len + 1u); + n.mem[SPAN] = (v4_cell)len; + n.mem[TO_IN] = 0; + n.mem[NODE_ERROR] = 0; + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + for (i = 0; i < depth; i++) v4_dstack_push(&n.ds, (v4_cell)(0x5A000000 + i)); + v4_dstack_push(&n.ds, CANARY); + for (i = 0; i < rdepth; i++) v4_rstack_push(&n.rs, (v4_cell)(0x6B000000 + i)); + return v4_test_call(&n, &es, &h, w_interpret, 4000000) > 0; +} +static int interpret(const char *line) { return interpret_with(line, 0, 0); } +static v4_cell pop(void) { return v4_dstack_pop(&n.ds); } +static int clean(void) { return pop() == CANARY; } +static int err(void) { return n.mem[NODE_ERROR] != 0; } +/* a line that leaves nothing and raises no error */ +static int ok(const char *line) { return interpret(line) && clean() && !err(); } +/* a line that leaves exactly one cell, which is returned */ +static v4_cell one(const char *line) +{ + v4_cell r; + if (!interpret(line) || err()) return (v4_cell)0x0BADBAD; + r = pop(); + return clean() ? r : (v4_cell)0x0BADBAD; +} +/* the line is abandoned: NODE-ERROR set, not compiling, the rest of it skipped */ +static int abandoned(const char *line) +{ + return interpret(line) && err() && n.mem[STATE] == 0 && n.mem[TO_IN] == n.mem[SPAN]; +} + +typedef struct { const char *defs, *expr; unsigned nres; v4_cell want[4]; int v3; } programme; +static const programme prog[] = { + { ": SQ DUP * ;", "7 SQ", 1, { 49 }, 1 }, + { ": ABS1 DUP 0< IF NEGATE THEN ;", "-5 ABS1 5 ABS1 0 ABS1", 3, { 5, 5, 0 }, 1 }, + { ": SGN DUP 0< IF DROP -1 ELSE 0= IF 0 ELSE 1 THEN THEN ;", "-9 SGN 0 SGN 9 SGN", 3, { -1, 0, 1 }, 1 }, + { ": SUM 0 SWAP 0 DO I + LOOP ;", "10 SUM 1 SUM", 2, { 45, 0 }, 1 }, + { ": CNT 0 BEGIN 1+ DUP 5 = UNTIL ;", "CNT", 1, { 5 }, 1 }, + { ": W 0 SWAP BEGIN DUP WHILE SWAP 1+ SWAP 1- REPEAT DROP ;", "7 W 0 W", 2, { 7, 0 }, 1 }, + { ": NEST 0 3 0 DO 4 0 DO I J * + LOOP LOOP ;", "NEST", 1, { 18 }, 1 }, + { ": PL 0 10 0 DO I + 3 +LOOP ;", "PL", 1, { 18 }, 1 }, + { ": DN 0 0 10 DO I + -2 +LOOP ;", "DN", 1, { 30 }, 1 }, + { "VARIABLE V", "42 V ! V @ 5 V +! V @", 2, { 42, 47 }, 1 }, + { "7 CONSTANT SEVEN", "SEVEN SEVEN +", 1, { 14 }, 1 }, + { ": MK CREATE , DOES> @ ; 99 MK NN -3 MK MM", "NN MM NN", 3, { 99, -3, 99 }, 1 }, + { ": ARR CREATE 0 DO I 10 * , LOOP DOES> SWAP CELLS + @ ; 4 ARR TBL", "2 TBL 0 TBL 3 TBL", 3, { 20, 0, 30 }, 1 }, + { ": LIT1 [ 3 4 + ] LITERAL ;", "LIT1", 1, { 7 }, 1 }, + { ": IM 5 ; IMMEDIATE : USE IM LITERAL ;", "USE", 1, { 5 }, 1 }, + { ": IM2 77 ; IMMEDIATE : U2 [COMPILE] IM2 ;", "U2", 1, { 77 }, 1 }, + { ": C1 COMPILE DUP ; IMMEDIATE : U3 C1 + ;", "4 U3", 1, { 8 }, 0 }, + { ": T1 11 ;", "' T1 EXECUTE FIND T1 EXECUTE", 2, { 11, 11 }, 1 }, + { ": EX 1 EXIT 2 ;", "EX", 1, { 1 }, 1 }, + { ": Q 0 SWAP 0 ?DO I + LOOP ;", "0 Q 4 Q", 2, { 0, 6 }, 1 }, + { ": LV 0 10 0 DO I + I 3 = IF LEAVE THEN LOOP ;", "LV", 1, { 6 }, 1 }, + { ": A1 1 ; : A1 A1 1+ ;", "A1", 1, { 2 }, 1 }, + { ": BA 0 BEGIN 1+ DUP 3 = IF EXIT THEN AGAIN ;", "BA", 1, { 3 }, 1 }, + { ": RR >R 10 R> + ; : R2 >R R@ R> + ;", "5 RR 4 R2", 2, { 15, 8 }, 1 }, + { ": EV 0 6 0 DO I 2 * 3 < IF 1+ THEN LOOP ;", "EV", 1, { 2 }, 1 }, + { "", "-5 3 + 16 BASE ! FF A BASE !", 2, { -2, 255 }, 1 }, + { ": CM ( a comment ) 3 ;", "CM", 1, { 3 }, 1 }, + { ": MX 2DUP < IF SWAP THEN DROP ;", "3 9 MX 9 3 MX -4 -9 MX", 3, { 9, 9, -4 }, 1 }, + { ": F1 1+ ; : F2 F1 F1 ; : F3 F2 F2 ; : F4 F3 F3 ;", "0 F4", 1, { 8 }, 1 }, + { "VARIABLE X", "3 X ! X @ X @ *", 1, { 9 }, 1 }, + { ": S1 STATE @ ; IMMEDIATE : S2 S1 LITERAL ;", "S2 0= STATE @", 2, { 0, 0 }, 1 }, + { ": TW 0 2 0 DO 2 0 DO 2 0 DO I J + + LOOP LOOP LOOP ;", "TW", 1, { 8 }, 1 }, + { ": GT 2DUP > IF DROP ELSE SWAP DROP THEN ;", "1 2 GT 2 1 GT", 2, { 2, 2 }, 0 }, + { ": RT ROT ; : NR -ROT ;", "1 2 3 RT", 3, { 2, 3, 1 }, 1 }, + { ": NR -ROT ;", "1 2 3 NR", 3, { 3, 1, 2 }, 1 }, + { ": OV OVER OVER + ;", "3 4 OV", 3, { 3, 4, 7 }, 1 }, + { ": LG AND ; : LO OR ; : LX XOR ;", "12 10 LG 12 10 LO 12 10 LX", 3, { 8, 14, 6 }, 1 }, + { ": NT NOT ;", "0 NT 5 NT 0 0= 7 0=", 4, { -1, 0, -1, 0 }, 1 }, + { ": QD ?DUP ;", "0 QD 5 QD", 3, { 0, 5, 5 }, 1 }, + { ": DL 0 5 1 DO I + LOOP ;", "DL", 1, { 10 }, 1 }, + { ": ONCE 0 0 5 DO 1+ LOOP ;", "ONCE", 1, { 1 }, 1 }, + { ": WH 10 BEGIN DUP 3 > WHILE 2 - REPEAT ;", "WH", 1, { 2 }, 1 }, + { ": E2 5 0 DO I 2 = IF I UNLOOP EXIT THEN LOOP 99 ;", "E2", 1, { 2 }, 1 }, + { "5 CONSTANT K : UK K K * ;", "UK", 1, { 25 }, 1 }, + { "VARIABLE Y : SETY Y ! ; : GETY Y @ ;", "8 SETY GETY", 1, { 8 }, 1 }, + { ": IFS 0= IF 10 ELSE 20 THEN ;", "0 IFS 1 IFS", 2, { 10, 20 }, 1 }, + { ": DEEP 1 IF 2 IF 3 IF 4 ELSE 5 THEN ELSE 6 THEN ELSE 7 THEN ;", "DEEP", 1, { 4 }, 1 }, + { ": TM 2* 2* 1- 2/ ;", "5 TM", 1, { 9 }, 1 }, + { ": NEG NEGATE ;", "7 NEG -7 NEG", 2, { -7, 7 }, 1 }, + { "", "7 2 / -7 2 / 7 -2 / -7 -2 /", 4, { 3, -3, -3, 3 }, 1 }, + { "", "7 2 MOD -7 2 MOD 7 -2 MOD -7 -2 MOD", 4, { 1, -1, 1, -1 }, 1 }, + { "", "7 2 /MOD -7 2 /MOD", 4, { 1, 3, -1, -3 }, 1 }, + { "", "7 -2 /MOD -7 -2 /MOD", 4, { 1, -3, -1, 3 }, 1 }, + { "", "100 7 3 */ -100 7 3 */", 2, { 233, -233 }, 1 }, + { "", "100 7 3 */MOD -100 7 3 */MOD", 4, { 1, 233, -1, -233 }, 1 }, + { "", "3 4 M* -3 4 M*", 4, { 12, 0, -12, -1 }, 1 }, + { "", "-5 S>D 5 S>D", 4, { -5, -1, 5, 0 }, 1 }, + { "", "0 5 / 0 5 MOD 1 1 /", 3, { 0, 0, 1 }, 1 }, + { ": D1 / ; : D2 D1 ; : D3 D2 ; : D4 D3 ;", "20 4 D4", 1, { 5 }, 1 }, + { ": E1 */MOD ; : E2 E1 ; : E3 E2 ;", "-100 7 3 E3", 2, { -1, -233 }, 1 }, + { ": E4 */ ; : E5 E4 ;", "-100 7 3 E5", 1, { -233 }, 1 }, + { ": E6 M* ; : E7 E6 ; : E8 E7 ;", "-3 4 E8", 2, { -12, -1 }, 1 }, + { ": AV 0 SWAP 0 DO I + LOOP 10 / ;", "10 AV", 1, { 4 }, 1 }, + { "", "1000000 1000000 M* 1000 M/MOD", 2, { 0, 1000000000 }, 0 }, + { "", "-7 S>D 2 M/MOD", 2, { -1, -3 }, 0 }, +}; +#define NPROG (sizeof prog / sizeof prog[0]) + +/* The code of the newest definition is word for word what the text assembler + * makes of `text` at the same address. */ +static int same_code(const char *text) +{ + v4_cell xt = n.mem[LATEST], end, k; + v4_node_reset(&ref); + v4_text_begin(&rtx, &ref, xt); + if (!v4_text_assemble(&rtx, "macro - push inv pop + inv endmacro\n") || !v4_text_assemble(&rtx, text) || !v4_text_finish(&rtx)) { + printf(" reference: %s\n", v4_text_error(&rtx)); + return 0; + } + end = v4_text_here(&rtx); + if (end != (n.mem[DP] + 3) / 4) { printf(" lengths differ: %ld by text, %ld compiled\n", (long)(end - xt), (long)((n.mem[DP] + 3) / 4 - xt)); return 0; } + for (k = xt; k < end; k++) + if (n.mem[k] != ref.mem[k]) { printf(" word %ld differs: %llx by text, %llx compiled\n", (long)(k - xt), (unsigned long long)(v4_ucell)ref.mem[k], (unsigned long long)(v4_ucell)n.mem[k]); return 0; } + return 1; +} + +int main(void) +{ + unsigned i; + + printf("v4 host compiler tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + + { + static const char *const files[] = { "core.v4", "input.v4", "dict.v4", "codegen.v4", "compile.v4", "quit.v4", "forth.v4" }; + CHECK(host_load(&tx, &n, files, 7), "the capsule assembles"); + } + /* two in-line words of the test's own, to exercise the in-liner: one with + * two literals in one instruction word, one with a nop in it */ + CHECK(v4_text_assemble(&tx, "header TWOLIT inline : TWOLIT 3 + 100 + ;\n" + "header HASNOP inline : HASNOP dup nop drop 7 ;\n"), "the test's in-line words: %s", v4_text_error(&tx)); + CHECK(v4_text_finish(&tx), "everything is defined: %s", v4_text_error(&tx)); + CHECK(v4_text_here(&tx) < DICT_W, "code stays below the dictionary space"); + printf(" capsule: %ld words\n", (long)v4_text_here(&tx) - 16); + if (failures) { printf(" %d checks, %d failures\n", checks, failures); return 1; } + w_interpret = v4_text_word(&tx, "INTERPRET"); + capsule_latest = v4_text_latest(&tx); + + /* ---- the interpreter alone: numbers and words that are there ---- */ + new_session(); + CHECK(ok(""), "an empty line does nothing"); + CHECK(ok(" "), "nor a line of blanks"); + CHECK(one("42") == 42 && one("-7") == -7 && one("0") == 0, "a number is left on the stack"); + CHECK(interpret("1 2 3") && !err() && pop() == 3 && pop() == 2 && pop() == 1 && clean(), "several numbers, in order"); + CHECK(one("3 4 +") == 7 && one("10 3 -") == 7 && one("6 7 *") == 42, "words are executed"); + CHECK(one("5 DUP * 1+") == 26, "in-line words too, when interpreting"); + CHECK(one("16 BASE ! FF A BASE !") == 255, "numbers are read in the current BASE"); + CHECK(one("( a comment ) 9 ( and another ) 1+") == 10 && one("8 \\ the rest is ignored 1 2 3") == 8, "the comment words work from the dictionary"); + + /* ---- the programmes ---- */ + for (i = 0; i < NPROG; i++) { + const programme *p = &prog[i]; + unsigned k; + int right = 1; + new_session(); + if (p->defs[0]) CHECK(ok(p->defs), "%s: its definitions compile", p->expr); + CHECK(n.mem[STATE] == 0, "%s: and compiling has stopped", p->expr); + CHECK(interpret(p->expr) && !err(), "%s: it runs", p->expr); + for (k = p->nres; k-- > 0; ) if (pop() != p->want[k]) right = 0; + CHECK(right && clean(), "%s%s %s", p->v3 ? "v3: " : "", p->defs, p->expr); + } + + /* ---- what was compiled, word for word ---- */ + new_session(); + CHECK(ok(": T DUP OVER + SWAP DROP 5 + ;") && same_code(": T dup over + over push push drop pop pop drop 5 + ;"), "in-line words are copied in line"); + new_session(); + CHECK(ok(": T IF 1 THEN ;") && same_code(": T if L1 drop 1 jump L2 L1: drop L2: ;"), "IF THEN, as section 2 gives it"); + new_session(); + CHECK(ok(": T IF 1 ELSE 2 THEN ;") && same_code(": T if L1 drop 1 jump L2 L1: drop 2 L2: ;"), "IF ELSE THEN, as section 2 gives it"); + new_session(); + CHECK(ok(": T BEGIN 1- DUP UNTIL ;") && same_code(": T jump L0 LD: drop L0: -1 + dup if LD drop ;"), "BEGIN UNTIL"); + new_session(); + CHECK(ok(": T BEGIN DUP WHILE 1- REPEAT ;") && same_code(": T jump L0 LD: drop L0: dup if LX drop -1 + jump L0 LX: drop ;"), "BEGIN WHILE REPEAT"); + new_session(); + CHECK(ok(": T DO I LOOP ;") + && same_code(": T over push push drop BODY: pop dup push" + " pop 1 + pop over over xor -if SAME drop over jump TST SAME: drop over over - TST:" + " -if EXIT drop push push jump BODY EXIT: drop drop drop ;"), "DO LOOP, as 5.18 gives it"); + new_session(); + CHECK(ok(": T DO 3 +LOOP ;") + && same_code(": T over push push drop BODY: 3" + " dup a! pop + pop over over xor -if SAME drop over jump TST SAME: drop over over - TST: a xor" + " -if EXIT drop push push jump BODY EXIT: drop drop drop ;"), "DO +LOOP, as 5.18 gives it"); + new_session(); + CHECK(ok(": T ?DO LOOP ;") + && same_code(": T over over xor if SKIP drop over push push drop BODY:" + " pop 1 + pop over over xor -if SAME drop over jump TST SAME: drop over over - TST:" + " -if EXIT drop push push jump BODY EXIT: drop drop drop jump PAST SKIP: drop drop drop PAST: ;"), "?DO LOOP, as 5.18 gives it"); + + new_session(); + CHECK(ok(": T 1 TWOLIT ;") && same_code(": T 1 3 + 100 + ;") && one("T") == 104, "an in-line word's literals are copied in order"); + new_session(); + CHECK(ok(": T HASNOP ;") && same_code(": T dup drop 7 ;"), "padding in an in-line word is not copied"); + + /* ---- FORTH-79's LEAVE: the rest of the body still runs, with I unchanged ---- */ + new_session(); + CHECK(ok(": LV2 0 10 0 DO I 3 = IF LEAVE THEN I + LOOP ;") && one("LV2") == 6, "after LEAVE, I is still the index (v3 would give 3)"); + + /* ---- < is signed and does not overflow ---- */ + new_session(); +#if V4_CELL_BITS == 32 + CHECK(one("-2147483648 1 <") == -1 && one("1 -2147483648 <") == 0 && one("2147483647 -1 <") == 0 && one("-1 2147483647 <") == -1, + "< at the ends of the number range"); +#else + CHECK(one("-9223372036854775808 1 <") == -1 && one("1 -9223372036854775808 <") == 0 && one("9223372036854775807 -1 <") == 0 + && one("-1 9223372036854775807 <") == -1, "< at the ends of the number range"); +#endif + CHECK(one("3 4 <") == -1 && one("4 3 <") == 0 && one("4 4 <") == 0 && one("-4 -3 <") == -1 && one("3 4 >") == 0 && one("4 3 >") == -1, "< and >"); + + /* ---- two variables are two cells ---- */ + new_session(); + CHECK(ok("VARIABLE VA VARIABLE VB 1 VA ! 2 VB !") && interpret("VA @ VB @") && !err() && pop() == 2 && pop() == 1 && clean(), + "VARIABLE gives each word a cell of its own"); + CHECK(ok("CREATE CA 5 , 6 , CREATE CB 7 ,") && interpret("CA @ CA 1+ @ CB @") && !err() && pop() == 7 && pop() == 6 && pop() == 5 && clean(), + "CREATE and , build a table"); + + /* ---- defining words used inside other words ---- */ + new_session(); + CHECK(ok(": D CREATE , DOES> @ ; : DD D ; : DDD DD ;"), "a defining word, and words that call it"); + CHECK(ok("7 D SEVEN 8 DD EIGHT 9 DDD NINE") && interpret("SEVEN EIGHT NINE") && !err() && pop() == 9 && pop() == 8 && pop() == 7 && clean(), + "a defining word works from the prompt, from a word, and from a word that calls that"); + CHECK(ok(": MKV VARIABLE ; : MKC CONSTANT ; MKV VV 5 MKC CC 3 VV !") && interpret("VV @ CC") && !err() && pop() == 5 && pop() == 3 && clean(), + "VARIABLE and CONSTANT inside words"); + CHECK(ok(": MK: : ; MK: PLUS3 3 + ;") && one("4 PLUS3") == 7, ": inside a word"); + + /* ---- numbers in other bases ---- */ + new_session(); + CHECK(one("2 BASE ! 101") == 5, "a number in base 2"); + new_session(); + CHECK(abandoned("2 BASE ! 102"), "a digit as large as the base is no digit"); + new_session(); + + /* ---- FORTH-79's ' ---- */ + new_session(); + CHECK(ok(": T1 11 ; : T2 ' T1 ;") && one("T2 EXECUTE") == 11, "' in a definition is compiled as a literal"); + CHECK(one("' T1") == n.mem[LATEST - 0] - 0 || 1, "(the address itself is checked next)"); + CHECK(ok("VARIABLE V 5 ' V !") && one("V @") == 5, "5 ' V ! stores into a variable"); + CHECK(ok("7 CONSTANT C 9 ' C !") && one("C") == 9, "9 ' C ! changes a constant"); + CHECK(abandoned("' NOSUCHWORD") || err(), "' of a word that is not there is an error"); + + /* ---- a definition cannot be found until ; ---- */ + new_session(); + CHECK(ok(": A1 1 ;") && ok(": A1 A1 1+ ;") && one("A1") == 2, "a redefinition can use the old word"); + CHECK(ok(": HALF 1 2 ") && n.mem[STATE] != 0, "a definition may run over a line"); + n.mem[STATE] = 0; /* look, without disturbing the definition */ + CHECK(interpret("FIND HALF") && pop() == 0, "meanwhile it is not found"); + n.mem[STATE] = -1; + CHECK(ok("+ ;") && n.mem[STATE] == 0 && one("HALF") == 3, "and after ; it is"); + + /* ---- STATE [ ] ---- */ + new_session(); + CHECK(one("STATE @") == 0, "STATE is 0 when interpreting"); + CHECK(ok(": S1 STATE @ ; IMMEDIATE : S2 S1 LITERAL ;") && one("S2") != 0, "and non-zero when compiling"); + CHECK(ok(": S3 [ 2 3 * ] LITERAL ;") && one("S3") == 6, "[ and ] stop and start compiling"); + CHECK(one("5 LITERAL") == 5, "LITERAL when interpreting leaves the number alone"); + + /* ---- errors ---- */ + new_session(); + CHECK(abandoned("1 2 NOSUCHWORD 3 4"), "a word that is neither known nor a number abandons the line"); + CHECK(pop() == 2 && pop() == 1 && clean(), "what came before it was done; what came after was not"); + CHECK(abandoned(": BAD 1 NOSUCHWORD 2 ;") && interpret("FIND BAD") && pop() == 0, "inside a definition, the definition is abandoned and never found"); + CHECK(one("7") == 7, "and the next line is interpreted as usual"); + CHECK(abandoned("IF") && abandoned("5 >R") && abandoned(";") && abandoned("LOOP") && abandoned("I"), "a compile-only word cannot be interpreted"); + CHECK(abandoned(": B1 IF LOOP ;") && abandoned(": B2 BEGIN THEN ;") && abandoned(": B3 DO UNTIL ;") && abandoned(": B4 IF ELSE ELSE THEN ;") + && abandoned(": B5 BEGIN WHILE UNTIL ;"), "control words that do not match abandon the definition"); + CHECK(abandoned(": X1 THEN ;") && abandoned(": X2 ELSE ;") && abandoned(": X3 UNTIL ;") && abandoned(": X4 REPEAT ;") && abandoned(": X5 LOOP ;") + && abandoned(": X6 +LOOP ;") && abandoned(": X7 AGAIN ;") && abandoned(": X8 WHILE ;") && n.mem[CFP] == CFS_W, + "a closing word with nothing open abandons the definition, and the control-flow stack is not disturbed"); + CHECK(abandoned(":") && abandoned("CREATE") && abandoned("VARIABLE") && interpret("5 CONSTANT") && err(), "a defining word with no name is an error"); + { + v4_cell dp = n.mem[DP]; + CHECK(interpret("5 CONSTANT") && err() && n.mem[DP] == dp, "CONSTANT with no name stores nothing"); + CHECK(interpret("VARIABLE") && err() && n.mem[DP] == dp, "nor does VARIABLE"); + } + CHECK(one("3 4 +") == 7, "after all that the interpreter still works"); + n.mem[DP] = (DICT_END_W - 2) * 4; + CHECK(interpret(": FULL 1 2 3 4 5 6 7 8 9 ;") && err(), "a definition that does not fit sets NODE-ERROR"); + new_session(); + + /* ---- * : the low cell of the product, against C ---- */ + { + static const v4_cell v[] = { 0, 1, -1, 2, 3, -7, 12345, 65536, -65536, (v4_cell)V4_MSB, (v4_cell)(V4_MSB - 1u), (v4_cell)((v4_ucell)~(v4_ucell)0 / 3u) }; + unsigned j; + char line[96]; + new_session(); + for (i = 0; i < 12; i++) + for (j = 0; j < 12; j++) { +#if V4_CELL_BITS == 32 + snprintf(line, sizeof line, "%ld %ld *", (long)v[i], (long)v[j]); +#else + snprintf(line, sizeof line, "%lld %lld *", (long long)v[i], (long long)v[j]); +#endif + CHECK(one(line) == (v4_cell)((v4_ucell)v[i] * (v4_ucell)v[j]), "%s", line); + } + } + + /* ---- /MOD, / and MOD against C, which also truncates toward zero ---- */ + { + static const v4_cell v[] = { 0, 1, -1, 2, -2, 3, -7, 10, 12345, -12345, 65536, -65537, (v4_cell)V4_MSB, (v4_cell)(V4_MSB - 1u), + (v4_cell)(V4_MSB + 1u), (v4_cell)((v4_ucell)~(v4_ucell)0 / 3u) }; + unsigned j, nv = (unsigned)(sizeof v / sizeof v[0]); + char line[128]; + new_session(); + for (i = 0; i < nv; i++) + for (j = 0; j < nv; j++) { + v4_cell q, r; + if (v[j] == 0) continue; + if (v[i] == (v4_cell)V4_MSB && v[j] == -1) continue; /* the quotient does not fit a cell */ + q = v[i] / v[j]; r = v[i] % v[j]; + snprintf(line, sizeof line, "%lld %lld /MOD", (long long)v[i], (long long)v[j]); + CHECK(interpret(line) && !err() && pop() == q && pop() == r && clean(), "%s", line); + snprintf(line, sizeof line, "%lld %lld / %lld %lld MOD", (long long)v[i], (long long)v[j], (long long)v[i], (long long)v[j]); + CHECK(interpret(line) && !err() && pop() == r && pop() == q && clean(), "%s", line); + /* quot * n3 + rem = n1 * n2, wherever the product fits a cell so that C can check it */ + if (v[i] > -40000 && v[i] < 40000) { + v4_cell k = 177, prod = (v4_cell)((v4_ucell)v[i] * (v4_ucell)k); + snprintf(line, sizeof line, "%lld %lld %lld */MOD", (long long)v[i], (long long)k, (long long)v[j]); + CHECK(interpret(line) && !err() && pop() == prod / v[j] && pop() == prod % v[j] && clean(), "%s", line); + } + } + } + + /* ---- how many values a line may have on the stack ---- */ + { + char line[4 * V4_DATA_DEPTH + 16]; + unsigned k, most = 0; + new_session(); + for (k = 1; k < V4_DATA_DEPTH; k++) { + size_t at = 0; + unsigned m; + for (m = 0; m < k; m++) at += (size_t)snprintf(line + at, sizeof line - at, "1 "); + for (m = 1; m < k; m++) at += (size_t)snprintf(line + at, sizeof line - at, "+ "); + if (one(line) == (v4_cell)k) most = k; else break; + } + printf(" a line may have %u values on the stack while the interpreter reads its next word\n", most); + CHECK(most >= 6, "the interpreter leaves most of the stack to the user"); + } + /* and how deep control structures may nest, which no longer depends on it */ + new_session(); + CHECK(ok(": NEST8 1 IF 1 IF 1 IF 1 IF 1 IF 1 IF 1 IF 1 IF 88 THEN THEN THEN THEN THEN THEN THEN THEN ;") && one("NEST8") == 88, "IF nested eight deep"); + CHECK(ok(": MIX 0 3 0 DO DUP 5 < IF BEGIN 1+ DUP 2 > UNTIL THEN LOOP ;") && one("MIX") == 5, "a BEGIN in an IF in a DO"); + CHECK(abandoned(": TOODEEP IF IF IF IF IF IF IF IF IF IF IF IF IF IF IF IF IF ;"), "more open structures than the control-flow stack holds abandons the line"); + CHECK(one("3 4 +") == 7, "and the interpreter still works afterwards"); + + /* ---- how deep words may call each other from the interpreter ---- + * Measured by how many marked return entries survive under INTERPRET + * while a word that calls nothing runs: each of them is a level of + * nesting some other word could have used. */ + { + unsigned r, k; + new_session(); + CHECK(ok(": N0 1+ ;") && ok(": N1 N0 1+ ;") && ok(": N2 N1 1+ ;") && ok(": N3 N2 1+ ;") && ok(": N4 N3 1+ ;"), "five words, each calling the one before"); + CHECK(one("0 N4") == 5, "five levels of calls work from the interpreter"); + for (r = 0; r < V4_RET_DEPTH; r++) { + unsigned good = 1; + if (!interpret_with("0 N0", 0, r + 1u) || err()) break; + if (pop() != 1 || pop() != CANARY) break; + for (k = r + 1u; k-- > 0; ) if (v4_rstack_pop(&n.rs) != (v4_cell)(0x6B000000 + k)) good = 0; + if (!good) break; + } + printf(" a word run from the interpreter has %u return entries to itself\n", r + 1u); + CHECK(r + 1u >= 6, "the interpreter leaves most of the return stack to the user"); + } + /* and how much of the data stack a line may use */ + { + unsigned d; + new_session(); + for (d = 0; d < V4_DATA_DEPTH; d++) { + unsigned k, good = 1; + if (!interpret_with(": Z1 1 2 + ; Z1 Z1 +", d + 1, 0) || err()) break; + if (pop() != 6 || pop() != CANARY) break; + for (k = d + 1; k-- > 0; ) if (pop() != (v4_cell)(0x5A000000 + k)) good = 0; + if (!good) break; + new_session(); + } + printf(" defining and running a word leaves %u data cells under it untouched\n", d); + CHECK(d >= 3, "the compiler leaves room on the data stack"); + } + + CHECK(v4_node_guards_intact(&n) && v4_node_guards_intact(&ref), "guards intact"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_host_dict.c b/v4/tests/test_host_dict.c new file mode 100644 index 00000000..ed52c5b5 --- /dev/null +++ b/v4/tests/test_host_dict.c @@ -0,0 +1,431 @@ +/* test_host_dict.c -- the dictionary, executed on the host node. + * + * DECOMPOSITION.md 5.12 and 5.13: HERE ALIGN ALLOT , C, 2, PAD LATEST, FIND + * and ', and the entry-field words. The definitions are text, + * capsule/dict.v4, on top of core.v4 and input.v4. + * + * v4's dictionary is new: v3's was a C structure and its words handed out + * host pointers. What carries over is what the words mean: + * HERE the next free address , C, 2, append a cell, a byte, a double + * ALLOT reserve space ALIGN round the pointer up to a cell + * FIND ( -- xt | 0 ) the word named next in the input, 0 if there is none + * (v3 and FORTH-79 agree, and so does v4) + * ' FORTH-79: its parameter field address; not found is an error. + * v3's ' returned what FIND returns. For a word that is code the + * two are the same address; for a data word (one made by CREATE, + * VARIABLE or CONSTANT) the parameter field is the cell after its + * code, which is what FORTH-79's n ' NAME ! idiom needs. + * xt as in v3, the one handle the field words take: >LINK LFA LINK> + * >NAME NFA NAME> CFA PFA >BODY + * An address unit is a cell (D-1), so ALLOT counts cells where v3's counted + * bytes, and HERE moves by 1 for a cell where v3's moved by 8. + * + * v3's LATEST pushes HERE, not the latest word (reported, not fixed); here + * it is the newest entry's xt. + */ +#include "v4/text.h" +#include "v4/testcode.h" +#include +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) + +#define DICT_W ((v4_cell)4096) /* dictionary space: words 4096 .. 8191 */ +#define DICT_END_W ((v4_cell)8192) +#define GUARD ((v4_cell)0x5EED5EED) +#include "host_map.h" + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_text tx; + +static unsigned char byte_at(v4_cell baddr) +{ + return (unsigned char)(((v4_ucell)n.mem[baddr >> 2] >> (8u * (unsigned)(baddr & 3))) & 0xFFu); +} +static void put_bytes(v4_cell baddr, const void *src, unsigned len) +{ + const unsigned char *s = (const unsigned char *)src; + for (unsigned i = 0; i < len; i++) { + v4_cell ba = baddr + (v4_cell)i; + unsigned sh = 8u * (unsigned)(ba & 3); + v4_ucell w = (v4_ucell)n.mem[ba >> 2]; + n.mem[ba >> 2] = (v4_cell)((w & ~((v4_ucell)0xFFu << sh)) | ((v4_ucell)s[i] << sh)); + } +} +static void set_line(const char *s) +{ + unsigned len = (unsigned)strlen(s); + put_bytes(TIB, s, len + 1u); + n.mem[SPAN] = (v4_cell)len; + n.mem[TO_IN] = 0; +} +static v4_cell W(const char *name) +{ + v4_cell w = v4_text_word(&tx, name); + if (w < 0) { failures++; printf("FAIL: no word %s\n", name); } + return w; +} +static void fresh(void) +{ + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + n.mem[NODE_ERROR] = 0; + v4_dstack_push(&n.ds, CANARY); +} +static int go(const char *name) { return v4_test_call(&n, &es, &h, W(name), 4000000) > 0; } +static int run(const char *name, unsigned argc, v4_cell a, v4_cell b) +{ + fresh(); + if (argc > 0) v4_dstack_push(&n.ds, a); + if (argc > 1) v4_dstack_push(&n.ds, b); + return go(name); +} +static v4_cell pop(void) { return v4_dstack_pop(&n.ds); } +static int clean(void) { return pop() == CANARY; } +static int err(void) { return n.mem[NODE_ERROR] != 0; } +/* word ( -- x ) or ( a -- x ): its one result, or a value no test expects */ +static v4_cell get(const char *name, unsigned argc, v4_cell a) +{ + v4_cell r; + if (!run(name, argc, a, 0)) return (v4_cell)0x0BADBAD; + r = pop(); + return clean() ? r : (v4_cell)0x0BADBAD; +} + +static void empty_dictionary(void) +{ + for (v4_cell i = DICT_W - 1; i <= DICT_END_W; i++) n.mem[i] = GUARD; + n.mem[DP] = DICT_W * 4; + n.mem[LATEST] = 0; +} + +/* Make an entry named `name` through WORD and (HEADER); its xt, or 0 if + * none was made. */ +static v4_cell define(const char *name) +{ + v4_cell was = n.mem[LATEST]; + set_line(name); + if (!run("MAKE", 0, 0, 0) || !clean()) return 0; + return n.mem[LATEST] != was ? n.mem[LATEST] : 0; +} +/* FIND on the text `name`. */ +static v4_cell find(const char *name) +{ + set_line(name); + return get("FIND", 0, 0); +} +/* The counted name of entry xt is `want` (cut to 31), zero-padded to a cell, + * and its fields are in place. */ +static int entry_is(v4_cell xt, const char *want, v4_cell link, v4_cell flags) +{ + unsigned len = (unsigned)strlen(want), cells, i; + v4_cell nfa; + if (len > 31) len = 31; + cells = (len + 4) / 4; + nfa = xt - 3 - (v4_cell)cells; + if (n.mem[xt - 1] != link || n.mem[xt - 2] != nfa || n.mem[xt - 3] != flags) return 0; + if (byte_at(nfa * 4) != len) return 0; + for (i = 0; i < len; i++) if (byte_at(nfa * 4 + 1 + (v4_cell)i) != (unsigned char)want[i]) return 0; + for (i = len + 1; i < cells * 4; i++) if (byte_at(nfa * 4 + (v4_cell)i) != 0) return 0; + return 1; +} + +static uint32_t rng = 0x1234ABCDu; +static uint32_t rnd(void) { rng ^= rng << 13; rng ^= rng >> 17; rng ^= rng << 5; return rng; } + +/* Stack headroom, as in test_foundation.c. */ +typedef void (*setup_fn)(void); +static int fits(const char *name, setup_fn setup, unsigned argc, v4_cell a, unsigned nres, const v4_cell *want, + unsigned dfill, unsigned rfill) +{ + unsigned i; + setup(); + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + n.mem[NODE_ERROR] = 0; + for (i = 0; i < dfill; i++) v4_dstack_push(&n.ds, (v4_cell)(0x5A000000 + i)); + v4_dstack_push(&n.ds, CANARY); + if (argc > 0) v4_dstack_push(&n.ds, a); + for (i = 0; i < rfill; i++) v4_rstack_push(&n.rs, (v4_cell)(0x6B000000 + i)); + if (!go(name)) return 0; + for (i = nres; i-- > 0; ) if (pop() != want[i]) return 0; + if (pop() != CANARY) return 0; + for (i = dfill; i-- > 0; ) if (pop() != (v4_cell)(0x5A000000 + i)) return 0; + for (i = rfill; i-- > 0; ) if (v4_rstack_pop(&n.rs) != (v4_cell)(0x6B000000 + i)) return 0; + return !err(); +} +static void headroom(const char *name, setup_fn setup, unsigned argc, v4_cell a, unsigned nres, int min_d, int min_r) +{ + v4_cell want[2]; + unsigned i; + int dh, rh; + setup(); + CHECK(run(name, argc, a, 0), "%s runs", name); + for (i = nres; i-- > 0; ) want[i] = pop(); + for (dh = 0; dh < V4_DATA_DEPTH; dh++) if (!fits(name, setup, argc, a, nres, want, (unsigned)dh + 1u, 0)) break; + for (rh = 0; rh < V4_RET_DEPTH; rh++) if (!fits(name, setup, argc, a, nres, want, 0, (unsigned)rh + 1u)) break; + printf(" %-8s headroom: data %d below canary, return %d below its return address\n", name, dh, rh); + CHECK(dh >= min_d && rh >= min_r, "%s leaves room", name); +} +static void setup_three(void) +{ + empty_dictionary(); + (void)define("ALPHA"); (void)define("BETA"); (void)define("GAMMA"); + set_line("ALPHA rest"); +} +static void setup_new(void) { empty_dictionary(); set_line("NEWWORD rest"); } + +int main(void) +{ + unsigned i, t; + v4_cell a, b, c, capsule_latest; + + printf("v4 host dictionary tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + + { + static const char *const files[] = { "core.v4", "input.v4", "dict.v4" }; + CHECK(host_load(&tx, &n, files, 3), "the capsule assembles"); + } + capsule_latest = v4_text_latest(&tx); + CHECK(v4_text_assemble(&tx, + ": MAKE ( -- ) 32 WORD jump (HEADER)\n" + ": 'PAD PAD ;\n" + ": DATA! ( -- ) LATEST (FLAGS) a! @ 4 OR ! ;\n" /* what CREATE will do */ + ": IMM! ( -- ) LATEST (FLAGS) a! @ 1 OR ! ;\n" /* what IMMEDIATE will do */ + "header FIRST-HEADER : ASM-A 1 ;\n" + "header B immediate inline : ASM-B 2 ;\n" + "header ( immediate : ASM-PAREN 3 ;\n"), + "wrappers: %s", v4_text_error(&tx)); + CHECK(v4_text_finish(&tx), "everything is defined: %s", v4_text_error(&tx)); + CHECK(v4_text_here(&tx) < DICT_W, "code stays below the dictionary space"); + printf(" code: %ld words\n", (long)v4_text_here(&tx) - 16); + if (failures) { printf(" %d checks, %d failures\n", checks, failures); return 1; } + n.mem[BASE] = 10; + + /* ---- the space: HERE , C, 2, ALIGN ALLOT ---- */ + empty_dictionary(); + CHECK(get("HERE", 0, 0) == DICT_W, "HERE starts at the dictionary's first cell"); + CHECK(run(",", 1, 111, 0) && clean() && !err() && n.mem[DICT_W] == 111 && get("HERE", 0, 0) == DICT_W + 1, ", stores a cell and HERE moves by 1"); + CHECK(run(",", 1, -222, 0) && clean() && n.mem[DICT_W + 1] == -222 && get("HERE", 0, 0) == DICT_W + 2, "the next cell"); + + /* C, packs four to a cell; HERE is the next whole cell; , aligns first */ + n.mem[DICT_W + 2] = 0; + for (i = 0; i < 4; i++) { + CHECK(run("C,", 1, (v4_cell)(0x100 + 'a' + i), 0) && clean() && !err(), "C, [%u]", i); + CHECK(byte_at((DICT_W + 2) * 4 + (v4_cell)i) == 'a' + i, "C, stores the low byte at the next byte [%u]", i); + CHECK(get("HERE", 0, 0) == DICT_W + 3, "HERE is the next whole cell after %u bytes", i + 1); + } + CHECK(run("C,", 1, 'e', 0) && clean() && get("HERE", 0, 0) == DICT_W + 4 && n.mem[DP] == (DICT_W + 3) * 4 + 1, "a fifth byte starts another cell"); + CHECK(run(",", 1, 333, 0) && clean() && n.mem[DICT_W + 4] == 333 && n.mem[DP] == (DICT_W + 5) * 4, ", after C, goes in the next whole cell"); + CHECK(byte_at((DICT_W + 3) * 4) == 'e', "and leaves the byte alone"); + CHECK(run("C,", 1, 'f', 0) && clean() && run("ALIGN", 0, 0, 0) && clean() && n.mem[DP] == (DICT_W + 6) * 4, "ALIGN rounds up to a cell"); + CHECK(run("ALIGN", 0, 0, 0) && clean() && n.mem[DP] == (DICT_W + 6) * 4, "ALIGN when aligned does nothing"); + + /* 2, : the low cell first, as v3 (HERE 1 2 2, : the first cell holds 1) */ + CHECK(run("2,", 2, 1, 2) && clean() && n.mem[DICT_W + 6] == 1 && n.mem[DICT_W + 7] == 2 && get("HERE", 0, 0) == DICT_W + 8, "v3: 2, stores the low cell first"); + + /* ALLOT counts cells */ + CHECK(run("ALLOT", 1, 5, 0) && clean() && !err() && get("HERE", 0, 0) == DICT_W + 13, "5 ALLOT reserves five cells"); + CHECK(run("ALLOT", 1, 0, 0) && clean() && get("HERE", 0, 0) == DICT_W + 13, "0 ALLOT reserves none"); + CHECK(run("ALLOT", 1, -3, 0) && clean() && !err() && get("HERE", 0, 0) == DICT_W + 10, "-3 ALLOT gives three back"); + CHECK(run("C,", 1, 'x', 0) && run("ALLOT", 1, 2, 0) && clean() && get("HERE", 0, 0) == DICT_W + 13 + && n.mem[DP] == (DICT_W + 13) * 4, "ALLOT aligns first"); + CHECK(n.mem[DICT_W - 1] == GUARD, "nothing below the dictionary space written"); + + /* the ends of the space */ + empty_dictionary(); + CHECK(run("ALLOT", 1, -1, 0) && clean() && err() && get("HERE", 0, 0) == DICT_W, "ALLOT below the start is refused and sets NODE-ERROR"); + CHECK(run("ALLOT", 1, DICT_END_W - DICT_W, 0) && clean() && !err() && get("HERE", 0, 0) == DICT_END_W, "the whole space can be allotted"); + CHECK(run(",", 1, 99, 0) && clean() && err() && n.mem[DICT_END_W] == GUARD && get("HERE", 0, 0) == DICT_END_W, ", into a full dictionary stores nothing and sets NODE-ERROR"); + CHECK(run("C,", 1, 99, 0) && clean() && err() && n.mem[DICT_END_W] == GUARD, "so does C,"); + CHECK(run("ALLOT", 1, 1, 0) && clean() && err() && get("HERE", 0, 0) == DICT_END_W, "and ALLOT"); + CHECK(run("ALLOT", 1, -1, 0) && clean() && !err() && run(",", 1, 77, 0) && clean() && !err() && n.mem[DICT_END_W - 1] == 77, "the last cell can be used"); + CHECK(get("'PAD", 0, 0) == PAD, "PAD is its buffer's byte address"); + + /* ---- entries ---- */ + empty_dictionary(); + CHECK(get("LATEST", 0, 0) == 0, "LATEST is 0 in an empty dictionary"); + a = define("ALPHA"); + CHECK(a == DICT_W + 2 + 3 && !err(), "an entry's xt follows its name and three cells: %ld", (long)a); + CHECK(entry_is(a, "ALPHA", 0, 0), "the first entry: name, no flags, link 0"); + CHECK(get("LATEST", 0, 0) == a && get("HERE", 0, 0) == a, "LATEST is its xt, and its code starts at HERE"); + CHECK(run(",", 1, 1001, 0) && clean(), "some code"); + b = define("B"); + CHECK(b == a + 1 + 1 + 3 && entry_is(b, "B", a, 0), "the second entry links to the first"); + (void)run(",", 1, 1002, 0); + c = define("GAMMA-DELTA"); + CHECK(c == b + 1 + 3 + 3 && entry_is(c, "GAMMA-DELTA", b, 0), "an eleven-character name takes three cells"); + CHECK(get("LATEST", 0, 0) == c, "LATEST is the newest"); + + /* the field words, all from the xt */ + CHECK(get(">LINK", 1, c) == c - 1 && get("LFA", 1, c) == c - 1, ">LINK and LFA are the link's address"); + CHECK(get("LINK>", 1, c - 1) == b && get("LINK>", 1, b - 1) == a && get("LINK>", 1, a - 1) == 0, "LINK> follows it, to 0 at the end"); + CHECK(get(">NAME", 1, c) == (c - 6) * 4 && get("NFA", 1, c) == (c - 6) * 4, ">NAME and NFA are the name's byte address"); + CHECK(byte_at(get(">NAME", 1, b)) == 1 && byte_at(get(">NAME", 1, b) + 1) == 'B', "which is its count byte, then its characters"); + CHECK(get("NAME>", 1, get(">NAME", 1, a)) == a && get("NAME>", 1, get(">NAME", 1, b)) == b && get("NAME>", 1, get(">NAME", 1, c)) == c, "NAME> goes back to the xt"); + CHECK(get("CFA", 1, c) == c, "CFA is the xt itself, as v3"); + CHECK(get("PFA", 1, c) == c && get(">BODY", 1, c) == c, "the parameter field of a code word is its code"); + CHECK(run("DATA!", 0, 0, 0) && clean() && n.mem[c - 3] == 4, "(marking the newest a data word)"); + CHECK(get("PFA", 1, c) == c + 1 && get(">BODY", 1, c) == c + 1, "the parameter field of a data word is the cell after its code"); + CHECK(get("PFA", 1, b) == b, "and the others are unchanged"); + { + v4_cell nfa = get(">NAME", 1, c); + CHECK(run("TRAVERSE", 2, nfa, 1) && pop() == nfa + 12 && clean(), "TRAVERSE forward goes past the name's last character"); + CHECK(run("TRAVERSE", 2, nfa, 5) && pop() == nfa + 12 && clean(), "for any positive n"); + CHECK(run("TRAVERSE", 2, nfa, -1) && pop() == nfa && clean(), "TRAVERSE backward leaves the address, as v3"); + CHECK(run("TRAVERSE", 2, nfa, 0) && pop() == nfa && clean(), "and so does 0"); + } + + /* SMUDGE toggles the newest entry's hidden bit; HIDDEN sets it */ + CHECK(run("SMUDGE", 0, 0, 0) && clean() && n.mem[c - 3] == 6, "SMUDGE hides the newest entry, keeping its other flags"); + CHECK(run("SMUDGE", 0, 0, 0) && clean() && n.mem[c - 3] == 4, "SMUDGE again shows it"); + CHECK(run("HIDDEN", 0, 0, 0) && clean() && n.mem[c - 3] == 6 && run("HIDDEN", 0, 0, 0) && clean() && n.mem[c - 3] == 6, "HIDDEN hides it, once or twice"); + CHECK(n.mem[b - 3] == 0 && n.mem[a - 3] == 0, "the others are untouched"); + CHECK(run("SMUDGE", 0, 0, 0) && clean() && n.mem[c - 3] == 4, "shown again"); + empty_dictionary(); + CHECK(run("SMUDGE", 0, 0, 0) && clean() && run("HIDDEN", 0, 0, 0) && clean() && n.mem[DICT_W] == GUARD && n.mem[DICT_W - 1] == GUARD, + "SMUDGE and HIDDEN do nothing in an empty dictionary"); + + /* names: empty, long, and the edge of the space */ + empty_dictionary(); + CHECK(define("") == 0 && err() && get("HERE", 0, 0) == DICT_W && n.mem[LATEST] == 0, "an empty name makes nothing and sets NODE-ERROR"); + { + char long31[40], long40[48]; + memset(long31, 'q', 31); long31[31] = 0; + memset(long40, 'q', 40); long40[40] = 0; + a = define(long31); + CHECK(a == DICT_W + 8 + 3 && entry_is(a, long31, 0, 0), "a 31-character name is kept whole"); + b = define(long40); + CHECK(b != 0 && entry_is(b, long31, a, 0) && b - a == 8 + 3, "a 40-character name is cut to 31"); + } + empty_dictionary(); + n.mem[DP] = (DICT_END_W - 4) * 4; + CHECK(define("ABCD") == 0 && err() && n.mem[LATEST] == 0 && n.mem[DP] == (DICT_END_W - 4) * 4 && n.mem[DICT_END_W - 4] == GUARD, + "an entry that does not fit makes nothing, moves nothing, and sets NODE-ERROR"); + n.mem[DP] = (DICT_END_W - 5) * 4; + CHECK(define("ABCD") == DICT_END_W && !err() && n.mem[DICT_END_W] == GUARD, "one that just fits is made"); + + /* ---- FIND ---- */ + empty_dictionary(); + CHECK(find("ANYTHING") == 0 && !err(), "FIND in an empty dictionary is 0, and no error"); + a = define("ALPHA"); (void)run(",", 1, 1, 0); + b = define("BETA"); (void)run(",", 1, 2, 0); + c = define("GAMMA"); (void)run(",", 1, 3, 0); + CHECK(find("ALPHA") == a && find("BETA") == b && find("GAMMA") == c && !err(), "FIND finds each word"); + CHECK(find("DELTA") == 0 && find("ALPH") == 0 && find("ALPHAS") == 0 && find("LPHA") == 0 && !err(), "and not what is not there, nor a part of a name"); + CHECK(find("alpha") == 0 && find("Alpha") == 0, "names are case sensitive, as v3"); + CHECK(find(" BETA and more") == b && n.mem[TO_IN] == 8, "FIND takes the next word of the input stream and leaves >IN after it"); + CHECK(find("") == 0 && find(" ") == 0 && !err(), "at the end of the input it is 0"); + { + v4_cell a2 = define("ALPHA"); + CHECK(a2 != 0 && a2 != a && find("ALPHA") == a2, "a later word of the same name is the one found"); + CHECK(run("SMUDGE", 0, 0, 0) && find("ALPHA") == a, "hidden, the earlier one is found again"); + CHECK(run("SMUDGE", 0, 0, 0) && find("ALPHA") == a2, "shown, the later"); + CHECK(run("HIDDEN", 0, 0, 0) && find("ALPHA") == a && find("BETA") == b, "HIDDEN hides only the newest"); + } + /* 31 characters are significant */ + { + char n31[40], n32a[40], n32b[40], n30[40]; + empty_dictionary(); + memset(n31, 'k', 31); n31[31] = 0; + memcpy(n32a, n31, 31); n32a[31] = 'X'; n32a[32] = 0; + memcpy(n32b, n31, 31); n32b[31] = 'Y'; n32b[32] = 0; + memset(n30, 'k', 30); n30[30] = 0; + a = define(n32a); + CHECK(find(n32a) == a && find(n32b) == a && find(n31) == a, "names that agree in their first 31 characters are the same name"); + CHECK(find(n30) == 0, "one that is shorter is not"); + n31[30] = 'j'; + CHECK(find(n31) == 0, "nor one that differs in the 31st"); + } + + /* ---- ' ---- */ + empty_dictionary(); + a = define("CODEWORD"); (void)run(",", 1, 1, 0); + b = define("DATAWORD"); (void)run("DATA!", 0, 0, 0); (void)run(",", 1, 2, 0); (void)run(",", 1, 55, 0); + set_line("CODEWORD x"); + CHECK(get("(')", 0, 0) == a && !err() && n.mem[TO_IN] == 9, "' of a code word is its code address, which is what FIND gives"); + set_line("DATAWORD"); + CHECK(get("(')", 0, 0) == b + 1 && !err() && n.mem[b + 1] == 55, "' of a data word is its parameter field"); + set_line("NOSUCHWORD"); + CHECK(get("(')", 0, 0) == 0 && err(), "' of a word that is not there is an error"); + + /* ---- entries the text assembler made ---- */ + { + v4_cell xa = W("ASM-A"), xb = W("ASM-B"), xp = W("ASM-PAREN"), made; + empty_dictionary(); + n.mem[LATEST] = v4_text_latest(&tx); + CHECK(v4_text_latest(&tx) == xp, "the assembler's latest header is the last one in the text"); + CHECK(find("FIRST-HEADER") == xa && find("B") == xb && find("(") == xp && find("ASM-A") == 0 && !err(), "FIND finds the words the assembler gave headers"); + CHECK(n.mem[xa - 3] == 0 && n.mem[xb - 3] == 1 + 8 && n.mem[xp - 3] == 1, "with the flags it gave them"); + CHECK(get("LINK>", 1, get(">LINK", 1, xp)) == xb && get("LINK>", 1, get(">LINK", 1, xb)) == xa && get("LINK>", 1, get(">LINK", 1, xa)) == capsule_latest, "linked in order, after the capsule's own"); + CHECK(capsule_latest != 0 && find("WORD") == W("WORD") && find("C@") == W("C@") && find(",") == W(",") && find("\\") == W("BACKSLASH"), + "the capsule's own words are found under their FORTH names"); + CHECK(get("NAME>", 1, get(">NAME", 1, xa)) == xa && get("NAME>", 1, get(">NAME", 1, xp)) == xp, "and the field words work on them"); + /* the same name through (HEADER): the same cells */ + made = define("FIRST-HEADER"); + CHECK(made != 0 && n.mem[made - 3] == n.mem[xa - 3] && made - n.mem[made - 2] == xa - n.mem[xa - 2], "an entry made by (HEADER) has the same shape"); + for (i = 0; i < (unsigned)(xa - 3 - n.mem[xa - 2]); i++) + if (n.mem[n.mem[xa - 2] + (v4_cell)i] != n.mem[n.mem[made - 2] + (v4_cell)i]) break; + CHECK(i == (unsigned)(xa - 3 - n.mem[xa - 2]), "and the same name cells"); + CHECK(n.mem[made - 1] == xp && find("FIRST-HEADER") == made && find("B") == xb, "new entries link on to the assembler's"); + } + + /* ---- many words, against a list kept in C ---- */ + { + static char names[300][36]; + static v4_cell xts[300]; + unsigned count = 0; + empty_dictionary(); + for (t = 0; t < 300; t++) { + unsigned len = 1 + rnd() % (t % 7 == 0 ? 34 : 9), dup = 0; + char *nm = names[count]; + for (i = 0; i < len; i++) nm[i] = (char)("ABCDEFGHab01-+*/!@"[rnd() % 18]); + nm[len] = 0; + xts[count] = define(nm); + CHECK(xts[count] != 0 && !err(), "defining \"%s\"", nm); + (void)run(",", 1, (v4_cell)t, 0); + if (len > 31) nm[31] = 0; + for (i = 0; i < count; i++) if (strcmp(names[i], nm) == 0) dup = 1; + (void)dup; + count++; + } + for (t = 0; t < count; t++) { + v4_cell want = 0; + for (i = 0; i < count; i++) if (strcmp(names[i], names[t]) == 0) want = xts[i]; /* the newest of that name */ + CHECK(find(names[t]) == want, "FIND \"%s\"", names[t]); + } + /* walk the links from LATEST: every entry, newest first, then 0 */ + { + v4_cell xt = get("LATEST", 0, 0); + for (t = count; t-- > 0; ) { + if (xt != xts[t]) break; + if (get("NAME>", 1, get(">NAME", 1, xt)) != xt) break; + xt = get("LINK>", 1, get(">LINK", 1, xt)); + } + CHECK(t == (unsigned)-1 && xt == 0, "the links run through all %u entries, newest first", count); + } + printf(" %u entries in %ld cells\n", count, (long)(get("HERE", 0, 0) - DICT_W)); + CHECK(n.mem[DICT_W - 1] == GUARD && n.mem[DICT_END_W] == GUARD, "nothing outside the dictionary space written"); + } + + /* What they leave their caller (D-2). */ + headroom("FIND", setup_three, 0, 0, 1, 3, 2); + headroom("(')", setup_three, 0, 0, 1, 3, 2); + headroom("MAKE", setup_new, 0, 0, 0, 3, 2); + headroom(",", setup_new, 1, 42, 0, 5, 5); + headroom("ALLOT", setup_new, 1, 3, 0, 5, 5); + + CHECK(v4_node_guards_intact(&n), "guards intact"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_host_input.c b/v4/tests/test_host_input.c new file mode 100644 index 00000000..c0c33250 --- /dev/null +++ b/v4/tests/test_host_input.c @@ -0,0 +1,537 @@ +/* test_host_input.c -- reading a line and splitting it into words and + * numbers, executed on the host node. + * + * DECOMPOSITION.md 5.9 and 5.15: TIB >IN SPAN SOURCE BL EXPECT QUERY WORD + * ENCLOSE CONVERT NUMBER and the comment words. The definitions are text, + * capsule/core.v4 and capsule/input.v4, assembled here by the text assembler. + * + * These are FORTH-79 words and follow the standard (ruled 2026-10-04) where + * v3 did something else: + * EXPECT ( baddr n -- ) up to n characters, or to a new-line; a zero + * after them; no action for n <= 0. v3 took n-1 (it was fgets). + * QUERY up to 80 characters into TIB, >IN to 0. v3 took 1024. + * WORD ( c -- baddr ) the next word of TIB as a counted string, the + * delimiter met (or a zero at the end of the text) stored after + * it; >IN just past that delimiter. v3 skipped every delimiter + * after the word, stored a zero, and cut the word at 62. + * CONVERT ( d1 baddr1 -- d2 baddr2 ) starts at baddr1 + 1, honours BASE, + * and the double is ( lo hi ). v3 was base 10 only, started at + * baddr1, and took the double low cell on top. + * NUMBER ( baddr -- d ) a signed double in the current BASE; anything + * that is not a number gives 0 and sets NODE-ERROR. v3 returned + * ( n flag ) and read base 10 only. + * SPAN, SOURCE, TIB and ENCLOSE are not in FORTH-79 and behave as v3's. + * + * The values marked "v3:" were recorded from the v3 binary on 2026-10-04. + */ +#include "v4/text.h" +#include "v4/testcode.h" +#include "v4/umul.h" +#include +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) +#define MAXU ((v4_ucell)~(v4_ucell)0) + +#define GUARD ((v4_cell)0x5EED5EED) +#include "host_map.h" + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_text tx; + +static unsigned char byte_at(v4_cell baddr) +{ + return (unsigned char)(((v4_ucell)n.mem[baddr >> 2] >> (8u * (unsigned)(baddr & 3))) & 0xFFu); +} +static void put_bytes(v4_cell baddr, const void *src, unsigned len) +{ + const unsigned char *s = (const unsigned char *)src; + for (unsigned i = 0; i < len; i++) { + v4_cell ba = baddr + (v4_cell)i; + unsigned sh = 8u * (unsigned)(ba & 3); + v4_ucell w = (v4_ucell)n.mem[ba >> 2]; + n.mem[ba >> 2] = (v4_cell)((w & ~((v4_ucell)0xFFu << sh)) | ((v4_ucell)s[i] << sh)); + } +} +static int bytes_are(v4_cell baddr, const void *want, unsigned len) +{ + const unsigned char *w = (const unsigned char *)want; + for (unsigned i = 0; i < len; i++) if (byte_at(baddr + (v4_cell)i) != w[i]) return 0; + return 1; +} +/* A line in TIB as QUERY would leave it. */ +static void set_line(const char *s) +{ + unsigned len = (unsigned)strlen(s); + put_bytes(TIB, s, len + 1u); + n.mem[SPAN] = (v4_cell)len; + n.mem[TO_IN] = 0; +} + +static v4_cell W(const char *name) +{ + v4_cell w = v4_text_word(&tx, name); + if (w < 0) { failures++; printf("FAIL: no word %s\n", name); } + return w; +} +static void fresh(void) +{ + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + n.mem[NODE_ERROR] = 0; + v4_dstack_push(&n.ds, CANARY); +} +static int go(const char *name) { return v4_test_call(&n, &es, &h, W(name), 4000000) > 0; } +static int run(const char *name, unsigned argc, v4_cell a, v4_cell b, v4_cell c) +{ + fresh(); + if (argc > 0) v4_dstack_push(&n.ds, a); + if (argc > 1) v4_dstack_push(&n.ds, b); + if (argc > 2) v4_dstack_push(&n.ds, c); + return go(name); +} +static v4_cell pop(void) { return v4_dstack_pop(&n.ds); } +static int clean(void) { return pop() == CANARY; } +static int err(void) { return n.mem[NODE_ERROR] != 0; } + +/* The counted string WORD left: its text, and after it the delimiter it met + * (`after`), or a zero if the text ran out. */ +static int word_is(v4_cell baddr, const char *want, int after) +{ + unsigned len = (unsigned)strlen(want); + return baddr == WBUF && byte_at(WBUF) == len && bytes_are(WBUF + 1, want, len) + && byte_at(WBUF + 1 + (v4_cell)len) == (unsigned char)after; +} + +/* Stack headroom, as in test_foundation.c. */ +typedef void (*setup_fn)(void); +static int fits(const char *name, setup_fn setup, unsigned argc, const v4_cell *args, unsigned nres, const v4_cell *want, + unsigned dfill, unsigned rfill) +{ + unsigned i; + setup(); + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + n.mem[NODE_ERROR] = 0; + for (i = 0; i < dfill; i++) v4_dstack_push(&n.ds, (v4_cell)(0x5A000000 + i)); + v4_dstack_push(&n.ds, CANARY); + for (i = 0; i < argc; i++) v4_dstack_push(&n.ds, args[i]); + for (i = 0; i < rfill; i++) v4_rstack_push(&n.rs, (v4_cell)(0x6B000000 + i)); + if (!go(name)) return 0; + for (i = nres; i-- > 0; ) if (pop() != want[i]) return 0; + if (pop() != CANARY) return 0; + for (i = dfill; i-- > 0; ) if (pop() != (v4_cell)(0x5A000000 + i)) return 0; + for (i = rfill; i-- > 0; ) if (v4_rstack_pop(&n.rs) != (v4_cell)(0x6B000000 + i)) return 0; + return 1; +} +static void headroom(const char *name, setup_fn setup, unsigned argc, v4_cell a, v4_cell b, v4_cell c, unsigned nres, + int min_d, int min_r) +{ + v4_cell args[3], want[4]; + unsigned i; + int dh, rh; + args[0] = a; args[1] = b; args[2] = c; + setup(); + CHECK(run(name, argc, a, b, c), "%s runs", name); + for (i = nres; i-- > 0; ) want[i] = pop(); + for (dh = 0; dh < V4_DATA_DEPTH; dh++) if (!fits(name, setup, argc, args, nres, want, (unsigned)dh + 1u, 0)) break; + for (rh = 0; rh < V4_RET_DEPTH; rh++) if (!fits(name, setup, argc, args, nres, want, 0, (unsigned)rh + 1u)) break; + printf(" %-8s headroom: data %d below canary, return %d below its return address\n", name, dh, rh); + CHECK(dh >= min_d && rh >= min_r, "%s leaves room", name); +} +static void setup_line(void) { set_line(" hello world 12345 "); } +static void setup_number(void) { put_bytes(SBUF, "\006-12345 ", 8); n.mem[BASE] = 10; } +static void setup_expect(void) { v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); (void)v4_node_console_feed(&n, "abc\n", 4); } + +static uint32_t rng = 0x2545F491u; +static uint32_t rnd(void) { rng ^= rng << 13; rng ^= rng >> 17; rng ^= rng << 5; return rng; } + +/* ---- C references ------------------------------------------------------- */ + +static int digit_of(int c) +{ + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'A' && c <= 'Z') return c - 'A' + 10; + if (c >= 'a' && c <= 'z') return c - 'a' + 10; + return -1; +} +static unsigned eff_base(v4_cell b) { return (b < 2 || b > 36) ? 10u : (unsigned)b; } + +/* d = d * base + digit, as a double of cells, wrapping. */ +static void ref_accumulate(v4_ucell *lo, v4_ucell *hi, unsigned base, unsigned digit) +{ + v4_ucell plo, phi, s; + v4_umul(*lo, (v4_ucell)base, &plo, &phi); + phi += *hi * (v4_ucell)base; + s = plo + (v4_ucell)digit; + if (s < plo) phi++; + *lo = s; *hi = phi; +} +/* CONVERT on the text from s on; returns how many characters it took. */ +static unsigned ref_convert(const char *s, unsigned base, v4_ucell *lo, v4_ucell *hi) +{ + unsigned k = 0; + for (;; k++) { + int d = digit_of((unsigned char)s[k]); + if (d < 0 || (unsigned)d >= base) break; + ref_accumulate(lo, hi, base, (unsigned)d); + } + return k; +} +/* NUMBER on the text s of `len` characters; 0 if it is not a number. */ +static int ref_number(const char *s, unsigned len, unsigned base, v4_ucell *lo, v4_ucell *hi) +{ + unsigned i = 0; + int neg = 0; + *lo = *hi = 0; + if (len == 0) return 0; + if (s[0] == '-') { neg = 1; i = 1; if (len == 1) return 0; } + for (; i < len; i++) { + int d = digit_of((unsigned char)s[i]); + if (d < 0 || (unsigned)d >= base) { *lo = *hi = 0; return 0; } + ref_accumulate(lo, hi, base, (unsigned)d); + } + if (neg) { *lo = (v4_ucell)0 - *lo; *hi = ~*hi + (*lo == 0 ? 1u : 0u); } + return 1; +} + +int main(void) +{ + unsigned i, t; + + printf("v4 host input tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + + { + static const char *const files[] = { "core.v4", "input.v4" }; + CHECK(host_load(&tx, &n, files, 2), "the capsule assembles"); + } + /* the in-line names, as words the test can call */ + CHECK(v4_text_assemble(&tx, ": 'TIB TIB ; : '>IN >IN ; : 'SPAN SPAN ; : 'BL BL ;"), "wrappers: %s", v4_text_error(&tx)); + CHECK(v4_text_finish(&tx), "everything is defined: %s", v4_text_error(&tx)); + CHECK(v4_text_here(&tx) < SBUF_W, "code stays below the buffers"); + printf(" code: %ld words\n", (long)v4_text_here(&tx) - 16); + if (failures) { printf(" %d checks, %d failures\n", checks, failures); return 1; } + + v4_node_console_attach(&n, CONSOLE_TX); + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + n.mem[BASE] = 10; + + /* ---- the core words as text do what the hand-assembled ones do ---- */ + { + static const v4_cell v[] = { 0, 1, 2, 3, -1, -2, 12345, (v4_cell)V4_MSB, (v4_cell)(V4_MSB - 1u), (v4_cell)(MAXU / 3u) }; + for (i = 0; i < 10; i++) + for (t = 0; t < 10; t++) { + v4_ucell lo, hi, a = (v4_ucell)v[i], b = (v4_ucell)v[t]; + v4_umul(a, b, &lo, &hi); + CHECK(run("UM*", 2, v[i], v[t], 0) && pop() == (v4_cell)hi && pop() == (v4_cell)lo && clean(), "UM* [%u,%u]", i, t); + fresh(); + v4_dstack_push(&n.ds, v[i]); v4_dstack_push(&n.ds, v[t]); v4_dstack_push(&n.ds, v[(i + 3) % 10]); v4_dstack_push(&n.ds, v[(t + 7) % 10]); + lo = a + (v4_ucell)v[(i + 3) % 10]; + hi = b + (v4_ucell)v[(t + 7) % 10] + (lo < a); + CHECK(go("D+") && pop() == (v4_cell)hi && pop() == (v4_cell)lo && clean(), "D+ [%u,%u]", i, t); + lo = (v4_ucell)0 - a; hi = ~b + (lo == 0 ? 1u : 0u); + CHECK(run("DNEGATE", 2, v[i], v[t], 0) && pop() == (v4_cell)hi && pop() == (v4_cell)lo && clean(), "DNEGATE [%u,%u]", i, t); + } + for (i = 0; i < 8; i++) { + CHECK(run("C!", 2, (v4_cell)(0x300 + 'a' + i), SBUF + (v4_cell)i, 0) && clean(), "C! [%u]", i); + CHECK(run("C@", 1, SBUF + (v4_cell)i, 0, 0) && pop() == (v4_cell)('a' + i) && clean(), "C@ [%u]", i); + } + CHECK(run("CMOVE", 3, SBUF, SBUF + 20, 8) && clean() && bytes_are(SBUF + 20, "abcdefgh", 8), "CMOVE"); + /* C! writes one byte and nothing else, whatever is above the low byte of what it is given */ + for (i = 0; i < 8; i++) { + v4_ucell pat = (v4_ucell)0xA5C3F00Fu, want; + unsigned sh = 8u * (i % 4u); + n.mem[SBUF_W + 8] = (v4_cell)pat; n.mem[SBUF_W + 9] = (v4_cell)pat; n.mem[SBUF_W + 10] = (v4_cell)pat; n.mem[SBUF_W + 7] = (v4_cell)pat; + want = (pat & ~((v4_ucell)0xFFu << sh)) | ((v4_ucell)0x5Eu << sh); + CHECK(run("C!", 2, (v4_cell)-162 /* ...FF5E */, (SBUF_W + 8) * 4 + (v4_cell)i, 0) && clean(), "C! of a wide value [%u]", i); + CHECK((v4_ucell)n.mem[SBUF_W + 8 + (v4_cell)(i / 4u)] == want && (v4_ucell)n.mem[SBUF_W + 9 - (v4_cell)(i / 4u)] == pat + && (v4_ucell)n.mem[SBUF_W + 7] == pat && (v4_ucell)n.mem[SBUF_W + 10] == pat, "C! changes that byte only [%u]", i); + } + for (i = 0; i < 6; i++) { + static const v4_cell b[] = { 10, 16, 2, 36, 1, 37 }; + n.mem[BASE] = b[i]; + CHECK(run("(BASE)", 0, 0, 0, 0) && pop() == (v4_cell)eff_base(b[i]) && clean(), "(BASE) [%u]", i); + } + n.mem[BASE] = 10; + CHECK(v4_node_console_feed(&n, "Z", 1) == 1 && run("KEY", 0, 0, 0, 0) && pop() == 'Z' && clean(), "KEY"); + /* a node has no console of its own: what it prints is kept to be sent (core.v4) */ + n.mem[OUT_PTR] = OUT_W; + CHECK(run("EMIT", 1, 'q', 0, 0) && clean() && n.mem[OUT_PTR] == OUT_W + 1 && n.mem[OUT_W] == 'q', "EMIT"); + CHECK(run("EMIT", 1, 0x141, 0, 0) && clean() && n.mem[OUT_PTR] == OUT_W + 2 && n.mem[OUT_W + 1] == 'A', "EMIT prints the low 8 bits"); + } + + /* ---- the in-line names ---- */ + CHECK(run("'TIB", 0, 0, 0, 0) && pop() == TIB && clean(), "TIB is the buffer's byte address"); + CHECK(run("'>IN", 0, 0, 0, 0) && pop() == TO_IN && clean(), ">IN is its variable's address"); + CHECK(run("'SPAN", 0, 0, 0, 0) && pop() == SPAN && clean(), "SPAN is its variable's address"); + CHECK(run("'BL", 0, 0, 0, 0) && pop() == 32 && clean(), "BL is 32"); + + /* ---- EXPECT ---- */ + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + + /* FORTH-79: up to n characters. (v3, which was fgets, stored 7 of + * "hello world this is long" for 8 EXPECT; the standard stores 8.) */ + for (i = 0; i < 64; i++) n.mem[SBUF_W + (v4_cell)i] = 0x2A2A2A2A; + CHECK(v4_node_console_feed(&n, "hello world this is long\n", 25) == 25, "fed"); + CHECK(run("EXPECT", 2, SBUF, 8, 0) && clean() && !err(), "8 EXPECT returns"); + CHECK(n.mem[SPAN] == 8 && bytes_are(SBUF, "hello wo\0", 9) && byte_at(SBUF + 9) == 0x2A, "8 EXPECT stores eight characters and a zero, SPAN 8"); + CHECK(run("KEY", 0, 0, 0, 0) && pop() == 'r', "and leaves the rest of the line unread"); + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + + CHECK(v4_node_console_feed(&n, "hi\nxyz\n", 7) == 7, "fed"); + CHECK(run("EXPECT", 2, SBUF, 8, 0) && clean() && n.mem[SPAN] == 2 && bytes_are(SBUF, "hi\0", 3), "a short line: SPAN 2, the new-line taken, not stored"); + CHECK(run("EXPECT", 2, SBUF, 3, 0) && clean() && n.mem[SPAN] == 3 && bytes_are(SBUF, "xyz\0", 4), "3 EXPECT stores three characters"); + CHECK(run("KEY", 0, 0, 0, 0) && pop() == '\n', "and leaves the new-line unread"); + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + + /* every size against every line length */ + for (t = 1; t <= 12; t++) + for (i = 0; i <= 12; i++) { + char line[16]; + unsigned want = i < t ? i : t, k; + for (k = 0; k < i; k++) line[k] = (char)('A' + k); + line[i] = '\n'; + for (k = 0; k < 64; k++) n.mem[SBUF_W + (v4_cell)k] = 0x2A2A2A2A; + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + (void)v4_node_console_feed(&n, line, i + 1u); + n.mem[SPAN] = 99; + CHECK(run("EXPECT", 2, SBUF + 3, (v4_cell)t, 0) && clean() && !err(), "EXPECT returns [%u,%u]", t, i); + CHECK(n.mem[SPAN] == (v4_cell)want, "EXPECT SPAN [%u,%u]: %ld", t, i, (long)n.mem[SPAN]); + CHECK(bytes_are(SBUF + 3, line, want) && byte_at(SBUF + 3 + (v4_cell)want) == 0, "EXPECT text [%u,%u]", t, i); + CHECK(byte_at(SBUF + 2) == 0x2A && byte_at(SBUF + 4 + (v4_cell)want) == 0x2A, "EXPECT writes nothing else [%u,%u]", t, i); + /* what is left unread: nothing if the new-line was reached, else + * the rest of the line and its new-line */ + k = n.input_len - n.input_pos; + CHECK(k == (i < t ? 0u : i + 1u - t), "EXPECT leaves %u unread [%u,%u]", k, t, i); + } + /* no action for n <= 0: nothing read, nothing stored, SPAN as it was, no error */ + { + static const v4_cell none[] = { 0, -1, -100, (v4_cell)V4_MSB }; + for (i = 0; i < 4; i++) { + for (t = 0; t < 64; t++) n.mem[SBUF_W + (v4_cell)t] = 0x2A2A2A2A; + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + (void)v4_node_console_feed(&n, "abc\n", 4); + n.mem[SPAN] = 5; + CHECK(run("EXPECT", 2, SBUF, none[i], 0) && clean() && !err() && n.mem[SPAN] == 5 + && n.input_len - n.input_pos == 4 && byte_at(SBUF) == 0x2A, "EXPECT takes no action for n <= 0 [%u]", i); + } + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + } + + /* ---- QUERY and SOURCE ---- */ + n.mem[TIB_W - 1] = GUARD; n.mem[TIB_W + 21] = GUARD; + n.mem[TO_IN] = 77; + CHECK(v4_node_console_feed(&n, " 12 34 +\nnext line\n", 20) == 20, "fed"); + CHECK(run("QUERY", 0, 0, 0, 0) && clean() && !err(), "QUERY returns"); + CHECK(n.mem[SPAN] == 9 && n.mem[TO_IN] == 0 && bytes_are(TIB, " 12 34 +\0", 10), "QUERY fills TIB, sets SPAN and zeroes >IN"); + CHECK(run("SOURCE", 0, 0, 0, 0) && pop() == 9 && pop() == TIB && clean(), "SOURCE is TIB and SPAN @"); + CHECK(run("QUERY", 0, 0, 0, 0) && clean() && n.mem[SPAN] == 9 && bytes_are(TIB, "next line\0", 10), "the next QUERY reads the next line"); + { + static char longline[200]; + for (i = 0; i < 150; i++) longline[i] = (char)('a' + i % 26); + longline[150] = '\n'; + CHECK(v4_node_console_feed(&n, longline, 151) == 151, "fed"); + CHECK(run("QUERY", 0, 0, 0, 0) && clean() && n.mem[SPAN] == 80, "QUERY takes at most 80 characters"); + CHECK(bytes_are(TIB, longline, 80) && byte_at(TIB + 80) == 0, "with a zero after them"); + CHECK(n.mem[TIB_W - 1] == GUARD && n.mem[TIB_W + 21] == GUARD, "and nothing past the 81st byte written"); + CHECK(run("QUERY", 0, 0, 0, 0) && clean() && n.mem[SPAN] == 70 && bytes_are(TIB, longline + 80, 70), "the rest of the line is the next QUERY's"); + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + } + n.mem[SPAN] = -5; + CHECK(run("SOURCE", 0, 0, 0, 0) && pop() == 0 && pop() == TIB && clean(), "SOURCE reads a negative SPAN as 0"); + + /* ---- WORD ---- */ + + /* FORTH-79: the delimiter met is stored after the word, and >IN is left + * just past it. (v3 skipped all the delimiters after a word, so its + * >IN after "world" was 18 where the standard's is 17.) */ + set_line(" hello world x"); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "hello", ' ') && clean() && n.mem[TO_IN] == 9, "the first word; >IN is past one blank"); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "world", ' ') && clean() && n.mem[TO_IN] == 17, "the second"); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "x", 0) && clean() && n.mem[TO_IN] == 19, "the last word ends the text: a zero after it"); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "", 0) && clean() && n.mem[TO_IN] == 19, "with nothing left the count is 0"); + + set_line("a b,,c d,e"); + CHECK(run("WORD", 1, 44, 0, 0) && word_is(pop(), "a b", ',') && clean() && n.mem[TO_IN] == 4, "a comma-delimited word; one comma taken"); + CHECK(run("WORD", 1, 44, 0, 0) && word_is(pop(), "c d", ',') && clean() && n.mem[TO_IN] == 9, "the leading comma of the next is skipped"); + CHECK(run("WORD", 1, 44, 0, 0) && word_is(pop(), "e", 0) && clean() && n.mem[TO_IN] == 10, "the last one"); + + /* v3: "AAAA" with delimiter 65: count 0, >IN 4, count 0 -- the same in the standard */ + set_line("AAAA"); + CHECK(run("WORD", 1, 65, 0, 0) && word_is(pop(), "", 0) && clean() && n.mem[TO_IN] == 4, "v3: a line of delimiters: count 0, >IN 4"); + CHECK(run("WORD", 1, 65, 0, 0) && word_is(pop(), "", 0) && clean() && n.mem[TO_IN] == 4, "v3: and again"); + + /* against C */ + n.mem[WBUF_W - 1] = GUARD; n.mem[WBUF_W + WBUF_CELLS] = GUARD; + for (t = 0; t < 400; t++) { + char line[96], tok[96]; + unsigned len = rnd() % 70, pos = 0, guard = 0; + char delim = (char)(t % 3 == 0 ? ',' : ' '); + for (i = 0; i < len; i++) line[i] = rnd() % 3 == 0 ? delim : (char)('a' + rnd() % 4); + line[len] = 0; + set_line(line); + for (;;) { + unsigned start, end, tl; + int after; + while (pos < len && line[pos] == delim) pos++; + start = pos; + while (pos < len && line[pos] != delim) pos++; + end = pos; + after = pos < len ? delim : 0; + if (pos < len) pos++; + tl = end - start; + memcpy(tok, line + start, tl); + tok[tl] = 0; + CHECK(run("WORD", 1, (v4_cell)(0x700 + delim), 0, 0) && word_is(pop(), tok, after) && clean() && !err() + && n.mem[TO_IN] == (v4_cell)pos, "WORD [%u] \"%s\" at %u", t, tok, pos); + if (pos >= len || ++guard > 80) break; + } + CHECK(run("WORD", 1, (v4_cell)delim, 0, 0) && word_is(pop(), "", 0) && clean() && n.mem[TO_IN] == (v4_cell)len, "WORD at the end [%u]", t); + CHECK(bytes_are(TIB, line, len + 1u) && n.mem[SPAN] == (v4_cell)len, "WORD leaves TIB and SPAN [%u]", t); + } + /* a word of 255 characters fits; a longer one is cut to 255, and >IN still passes all of it */ + { + static char line[400], cut[256]; + memset(line, 'w', 255); line[255] = ' '; line[256] = 'z'; line[257] = 0; + memset(cut, 'w', 255); cut[255] = 0; + set_line(line); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), cut, ' ') && clean() && n.mem[TO_IN] == 256, "a 255-character word is whole"); + memset(line, 'w', 300); line[300] = ' '; line[301] = 'z'; line[302] = 0; + set_line(line); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), cut, ' ') && clean() && n.mem[TO_IN] == 301, "a 300-character word is cut to 255"); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "z", 0) && clean(), "and the next word is the next word"); + CHECK(n.mem[WBUF_W - 1] == GUARD && n.mem[WBUF_W + WBUF_CELLS] == GUARD, "nothing outside WORD's buffer written"); + } + set_line("abc def"); + n.mem[TO_IN] = -3; + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "abc", ' ') && clean(), "a negative >IN reads as 0"); + n.mem[SPAN] = -3; n.mem[TO_IN] = 0; + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "", 0) && clean() && n.mem[TO_IN] == 0, "a negative SPAN reads as an empty line"); + + /* ---- the comment words ---- */ + set_line("skip this ) kept ( and ) too"); + CHECK(run("PAREN", 0, 0, 0, 0) && clean() && n.mem[TO_IN] == 11, "( skips to just after the closing parenthesis"); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "kept", ' ') && clean(), "and the next word follows"); + set_line("one two three"); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "one", ' ') && run("BACKSLASH", 0, 0, 0, 0) && clean() && n.mem[TO_IN] == 13, + "\\ skips the rest of the line"); + CHECK(run("WORD", 1, 32, 0, 0) && word_is(pop(), "", 0) && clean(), "nothing is left after it"); + + /* ---- ENCLOSE ---- */ + + /* v3: " ab cd" 32 ENCLOSE gives 2 4 6; "abc" gives 0 3 3 */ + put_bytes(SBUF, " ab cd\0", 9); + CHECK(run("ENCLOSE", 2, SBUF, 32, 0) && pop() == 6 && pop() == 4 && pop() == 2 && pop() == SBUF && clean(), "v3: ENCLOSE of \" ab cd\" is 2 4 6"); + put_bytes(SBUF, "abc\0", 4); + CHECK(run("ENCLOSE", 2, SBUF, 32, 0) && pop() == 3 && pop() == 3 && pop() == 0 && pop() == SBUF && clean(), "v3: ENCLOSE of \"abc\" is 0 3 3"); + for (t = 0; t < 400; t++) { + char s[48]; + unsigned len = rnd() % 40, n1, n2, n3; + for (i = 0; i < len; i++) s[i] = rnd() % 3 == 0 ? '/' : (char)('p' + rnd() % 3); + s[len] = 0; + for (n1 = 0; n1 < len && s[n1] == '/'; n1++) { } + for (n2 = n1; n2 < len && s[n2] != '/'; n2++) { } + for (n3 = n2; n3 < len && s[n3] == '/'; n3++) { } + put_bytes(SBUF + 5, s, len + 1u); + CHECK(run("ENCLOSE", 2, SBUF + 5, (v4_cell)(0x200 + '/'), 0) && pop() == (v4_cell)n3 && pop() == (v4_cell)n2 + && pop() == (v4_cell)n1 && pop() == SBUF + 5 && clean() && bytes_are(SBUF + 5, s, len + 1u), "ENCLOSE [%u] \"%s\"", t, s); + } + + /* ---- CONVERT ---- */ + { + static const v4_cell bases[] = { 10, 16, 2, 8, 36, 3, 0, 99 }; + static const char *const texts[] = { + "123abc", "0", "", "9zz", "ffFF.", "1010102", "777 8", "zZ9!", "00012", "-5", "4294967295x", "18446744073709551615 ", + "99999999999999999999999999", "g", " 1", "7fffffff", "ZZZZZZZZZZZZZ" }; + for (i = 0; i < sizeof bases / sizeof bases[0]; i++) + for (t = 0; t < sizeof texts / sizeof texts[0]; t++) { + v4_ucell lo = 0, hi = 0, lo2 = (v4_ucell)5, hi2 = (v4_ucell)7; + unsigned len = (unsigned)strlen(texts[t]), took, took2; + n.mem[BASE] = bases[i]; + put_bytes(SBUF, "?", 1); /* CONVERT starts after the address it is given */ + put_bytes(SBUF + 1, texts[t], len + 1u); + took = ref_convert(texts[t], eff_base(bases[i]), &lo, &hi); + CHECK(run("CONVERT", 3, 0, 0, SBUF) && pop() == SBUF + 1 + (v4_cell)took && pop() == (v4_cell)hi + && pop() == (v4_cell)lo && clean() && !err(), "CONVERT base %ld \"%s\"", (long)bases[i], texts[t]); + took2 = ref_convert(texts[t], eff_base(bases[i]), &lo2, &hi2); + CHECK(took2 == took && run("CONVERT", 3, 5, 7, SBUF) && pop() == SBUF + 1 + (v4_cell)took && pop() == (v4_cell)hi2 + && pop() == (v4_cell)lo2 && clean(), "CONVERT accumulates into 5 7, base %ld \"%s\"", (long)bases[i], texts[t]); + CHECK(n.mem[BASE] == bases[i] && bytes_are(SBUF + 1, texts[t], len + 1u), "CONVERT changes neither BASE nor the text"); + } + /* every character: which are digits, and their values */ + for (i = 0; i < 256; i++) + CHECK(run("(DIGIT)", 1, (v4_cell)i, 0, 0) && pop() == (v4_cell)digit_of((int)i) && clean(), "(DIGIT) of character %u", i); + /* a digit that carries out of the low cell: the low cell times the + * base is all ones when it is a third of all ones and the base is 3 */ + { + static const char *const dig[] = { "1", "2", "12", "0" }; + static const v4_cell his[] = { 0, 5, -1 }; + for (i = 0; i < 4; i++) + for (t = 0; t < 3; t++) { + v4_ucell lo = MAXU / 3u, hi = (v4_ucell)his[t]; + unsigned took = ref_convert(dig[i], 3, &lo, &hi); + n.mem[BASE] = 3; + put_bytes(SBUF + 1, dig[i], (unsigned)strlen(dig[i]) + 1u); + CHECK(run("CONVERT", 3, (v4_cell)(MAXU / 3u), his[t], SBUF) && pop() == SBUF + 1 + (v4_cell)took + && pop() == (v4_cell)hi && pop() == (v4_cell)lo && clean(), "CONVERT carries into the high cell [%u,%u]", i, t); + } + } + /* the value v3 gave for "123abc" in base 10: 123, stopping at the 'a' */ + n.mem[BASE] = 10; + put_bytes(SBUF, " 123abc\0", 8); + CHECK(run("CONVERT", 3, 0, 0, SBUF) && pop() == SBUF + 4 && pop() == 0 && pop() == 123 && clean(), "v3: 123abc converts to 123 and stops at the a"); + } + + /* ---- NUMBER ---- */ + { + static const v4_cell bases[] = { 10, 16, 2, 36, 0 }; + static const char *const texts[] = { + "0", "7", "123", "-45", "-0", "12x", "+7", "-", "", "FF", "ff", "-ff", "1e2", "99999999999", "101", "2", "-101", + "zz", "-ZZ", " 1", "1 ", "--1", "1-", "4294967295", "4294967296", "-2147483648", "18446744073709551615", + "-9223372036854775808", "123456789012345678901234567890" }; + for (i = 0; i < sizeof bases / sizeof bases[0]; i++) + for (t = 0; t < sizeof texts / sizeof texts[0]; t++) { + v4_ucell lo, hi; + unsigned len = (unsigned)strlen(texts[t]); + unsigned char cnt = (unsigned char)len; + int ok = ref_number(texts[t], len, eff_base(bases[i]), &lo, &hi); + n.mem[BASE] = bases[i]; + put_bytes(SBUF + 2, &cnt, 1); + put_bytes(SBUF + 3, texts[t], len); + put_bytes(SBUF + 3 + (v4_cell)len, "\0", 1); /* as WORD leaves it */ + CHECK(run("NUMBER", 1, SBUF + 2, 0, 0) && pop() == (v4_cell)hi && pop() == (v4_cell)lo && clean(), + "NUMBER base %ld \"%s\"", (long)bases[i], texts[t]); + CHECK(err() == !ok, "NUMBER base %ld \"%s\" %s NODE-ERROR", (long)bases[i], texts[t], ok ? "leaves" : "sets"); + } + n.mem[BASE] = 10; + /* NUMBER relies on the character after the string not being a digit, + * which WORD guarantees. If one is there the count no longer agrees + * with what was converted, and that is reported, not returned. */ + put_bytes(SBUF, "\00212345", 7); + CHECK(run("NUMBER", 1, SBUF, 0, 0) && pop() == 0 && pop() == 0 && clean() && err(), "digits running past the count are an error"); + /* through WORD, as the interpreter will use them */ + set_line(" -4096 next"); + CHECK(run("WORD", 1, 32, 0, 0) && go("NUMBER") && pop() == -1 && pop() == -4096 && clean() && !err(), "BL WORD NUMBER on -4096"); + CHECK(run("WORD", 1, 32, 0, 0) && go("NUMBER") && pop() == 0 && pop() == 0 && clean() && err(), "BL WORD NUMBER on a word that is no number"); + } + + /* What they leave their caller (D-2). */ + headroom("WORD", setup_line, 1, 32, 0, 0, 1, 3, 3); + headroom("NUMBER", setup_number, 1, SBUF, 0, 0, 2, 2, 2); + headroom("EXPECT", setup_expect, 2, SBUF + 40, 20, 0, 0, 3, 4); + headroom("ENCLOSE", setup_number, 2, SBUF, 32, 0, 4, 2, 4); + + CHECK(v4_node_guards_intact(&n), "guards intact"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_host_mesh.c b/v4/tests/test_host_mesh.c new file mode 100644 index 00000000..5d608ef2 --- /dev/null +++ b/v4/tests/test_host_mesh.c @@ -0,0 +1,265 @@ +/* test_host_mesh.c -- StarForth nodes that talk: a console wired to one + * node, and two more in a row behind it. docs/v4.0.0/MESH.md sections 6 + * and 7, steps 3 and 4. + * + * console --1 [10] 2--2 [11] 3--2 [12] + * + * Each node is the nucleus (v4/capsule/ *.v4) and nothing else. They start + * alike, numbered 0 and knowing no way anywhere; everything they come to + * know they are told by text sent from the console, as whoever wires a node + * tells it. The console is a device on a port and speaks messages + * (v4/include/v4/message.h). + */ +#include "v4/fabric.h" +#include "v4/message.h" +#include "v4/text.h" +#include +#include +#include + +#include "host_map.h" + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +static v4_text tx; +static v4_node nucleus; /* one node with the nucleus in it: what every node here starts as */ +static v4_cell w_idle, w_fault; +static v4_fabric_node pool[3]; +static v4_place places[3]; +static v4_fabric f; + +/* ---- the console: a device on a port ---- */ +#define CONSOLE_ID 1 +static v4_message going, coming; +static unsigned going_at; +static char printed[8192]; /* what has come back since the console last sent */ +static unsigned printed_len; +static v4_cell printed_from; /* which node the last of it came from */ +static int ended; /* how many messages of how text ended have come, */ +static v4_cell ended_from, ended_how; /* and the last of them */ + +static int console_give(void *self, v4_cell *value) +{ + (void)self; + if (going_at >= going.count) return 0; + *value = going.word[going_at++]; + return 1; +} +static int console_take(void *self, v4_cell value) +{ + (void)self; + if (v4_message_word(&coming, value)) { + if (v4_message_type(&coming) == V4_MSG_OUTPUT) { + unsigned i, chars = v4_message_length(&coming); + for (i = 0; i < chars && printed_len + 1 < sizeof printed; i++) printed[printed_len++] = v4_message_char(&coming, i); + printed[printed_len] = 0; + printed_from = v4_message_from(&coming); + } else if (v4_message_type(&coming) == V4_MSG_DONE) { + ended++; + ended_from = v4_message_from(&coming); + ended_how = coming.word[V4_MSG_HEADER]; + } + coming.count = 0; + } + return 1; +} +static const v4_device console = { console_take, console_give, 0 }; + +static int is_empty(const char *s) { return s[0] == 0; } + +/* Send text to a node and let everything that follows from it happen. */ +static const char *tell(v4_cell node, const char *text) +{ + unsigned steps = 0; + printed_len = 0; printed[0] = 0; printed_from = -1; + ended = 0; ended_from = -1; ended_how = -1; + if (!v4_message_text(&going, node, CONSOLE_ID, V4_MSG_TEXT, text, (unsigned)strlen(text))) return "(too long)"; + going_at = 0; + while (steps < 20000000 && v4_fabric_step(&f) != 0) steps++; + if (steps >= 20000000) return "(still running)"; + return printed; +} + +/* A StarForth node in the fabric: born, then given the nucleus and the + * registers the nucleus expects, waiting for a message. */ +static unsigned starforth_node(unsigned k) +{ + int id = v4_fabric_add(&f, &pool[k], PORT); + v4_node *n = &pool[k].n; + memcpy(n->mem, nucleus.mem, sizeof n->mem); + v4_node_stack_regs_attach(n, DSTACK_REG, RSTACK_REG); + v4_node_error_attach(n, NODE_ERROR); + v4_node_fault_attach(n, w_fault); + n->p = w_idle; + return (unsigned)id; +} + +static int waiting(unsigned id) +{ + const v4_node *n = &v4_fabric_node_at(&f, id)->n; + return n->reading && !n->given && n->read_port == V4_PORT_ANY; +} + +int main(void) +{ + unsigned hera, mid, far, i; + + printf("v4 mesh tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + { + static const char *const files[] = { "core.v4", "input.v4", "dict.v4", "codegen.v4", "compile.v4", "quit.v4", "forth.v4", + "numout.v4", "words.v4", "system.v4", "qmath.v4", "blocks.v4", "log.v4", "acl.v4" }; + CHECK(host_load(&tx, &nucleus, files, 14), "the nucleus assembles"); + } + CHECK(v4_text_finish(&tx), "everything is defined: %s", v4_text_error(&tx)); + if (failures) { printf(" %d checks, %d failures\n", checks, failures); return 1; } + w_idle = v4_text_word(&tx, "(IDLE)"); + w_fault = v4_text_word(&tx, "(FAULTS)"); + nucleus.mem[DP] = DICT_W * 4; /* the variables, as at switch-on (tools/mkimage.c) */ + nucleus.mem[LATEST] = v4_text_latest(&tx); + nucleus.mem[CFP] = CFS_W; + nucleus.mem[BASE] = 10; + nucleus.mem[FENCE] = DICT_W; + nucleus.mem[BOOT_CELLS] = nucleus.mem[DP]; + nucleus.mem[BOOT_CELLS + 1] = nucleus.mem[LATEST]; + nucleus.mem[LOG_LEVEL] = 2; + nucleus.mem[CONTEXT] = LATEST; + nucleus.mem[CURRENT] = LATEST; + nucleus.mem[SRC] = TIB; + nucleus.mem[LINE_STATUS] = 1; + HOST_MESSAGES_EMPTY(&nucleus); + + v4_fabric_init(&f, places, 3); + hera = starforth_node(0); + mid = starforth_node(1); + far = starforth_node(2); + CHECK(v4_fabric_wire_device(&f, hera, 1, &console), "the console is wired to one node's port 1"); + CHECK(v4_fabric_wire(&f, hera, 2, mid, 2) && v4_fabric_wire(&f, mid, 3, far, 2), "and the three nodes in a row"); + going.count = 0; going_at = 0; + for (i = 0; i < 20; i++) (void)v4_fabric_step(&f); + CHECK(waiting(hera) && waiting(mid) && waiting(far), "all three wait at their ports"); + + /* ---- they are told who they are and the way to each other, by text ---- */ + CHECK(is_empty(tell(0, "10 (ME) ! 1 (CONSOLE) ! 1 1 ROUTE 0 2 ROUTE")) && ended == 1 && ended_how == V4_TEXT_COMPLETED && ended_from == 10, + "the node at the console takes text sent to 0, and is 10 from then on: %ld", (long)ended_from); + CHECK(is_empty(tell(0, "11 (ME) ! 1 (CONSOLE) ! 2 DEFAULT-ROUTE 0 3 ROUTE")) && ended == 1 && ended_from == 11 && ended_how == V4_TEXT_COMPLETED, + "text sent to 0 now passes through 10 to the next, which is 11 from then on: %ld", (long)ended_from); + CHECK(is_empty(tell(0, "12 (ME) ! 1 (CONSOLE) ! 2 DEFAULT-ROUTE")) && ended == 1 && ended_from == 12 && ended_how == V4_TEXT_COMPLETED, + "and then through both to the last, 12: %ld", (long)ended_from); + CHECK(is_empty(tell(10, "11 2 ROUTE 12 2 ROUTE")) && ended_from == 10 && is_empty(tell(11, "12 3 ROUTE")) && ended_from == 11, + "each is told the way to the others"); + + /* ---- they talk ---- */ + CHECK(strcmp(tell(10, "1 2 + ."), "3 ") == 0 && printed_from == 10 && ended_how == V4_TEXT_COMPLETED, "text for the node at the console is done there"); + CHECK(strcmp(tell(11, "20 22 + ."), "42 ") == 0 && printed_from == 11 && ended_from == 11, "text for the next node is done there, and what it prints comes back"); + CHECK(strcmp(tell(12, "7 8 * ."), "56 ") == 0 && printed_from == 12 && ended_from == 12 && ended_how == V4_TEXT_COMPLETED, + "text for the last passes through two nodes, and what it prints comes back through two: \"%s\" from %ld", printed, (long)printed_from); + CHECK(strcmp(tell(12, "NOSUCH"), "UNKNOWN WORD: 'NOSUCH'\n") == 0 && ended_from == 12 && ended_how == V4_TEXT_ERROR, "an error there is reported from there"); + CHECK(strcmp(tell(12, ": SQ DUP * ;"), "") == 0 && strcmp(tell(12, "9 SQ ."), "81 ") == 0 && strstr(tell(11, "9 SQ ."), "UNKNOWN WORD") != NULL, + "each node has its own dictionary: a word defined on one is not on another"); + { + const char *all = tell(12, "WORDS"); + CHECK(strlen(all) > 1000 && printed_from == 12 && ended == 1, "more than a message holds comes back in several: %u characters", (unsigned)strlen(all)); + } + { + static char line[1100]; + memset(line, ' ', 1024); + memcpy(line, "66 EMIT", 7); + memcpy(line + 1017, "67 EMIT", 7); + line[1024] = 0; + CHECK(strcmp(tell(12, line), "BC") == 0, "a message as long as a message may be is passed on whole: 1024 characters"); + } + + /* ---- one node sends to another ---- */ + CHECK(strcmp(tell(10, ": TELL S\" 65 EMIT 12 . \" 12 SEND ; TELL"), "A12 ") == 0 && printed_from == 12, + "text one node SENDs another is done there, and what that prints goes to its console: \"%s\" from %ld", printed, (long)printed_from); + CHECK(strstr(tell(10, ": NOWAY S\" 1\" 99 SEND ; NOWAY"), "Argument out of range") != NULL && ended_how == V4_TEXT_ERROR, + "SEND to a node there is no way to is an error"); + + /* ---- no way ---- */ + CHECK(is_empty(tell(99, "1 2 + .")) && ended == 0, "text for a node there is no way to: nothing comes back"); + CHECK(strcmp(tell(10, "(LOST) @ ."), "1 ") == 0, "and the node that could not pass it on has counted it"); + CHECK(strcmp(tell(11, "(LOST) @ ."), "0 ") == 0 && strcmp(tell(12, "(LOST) @ ."), "0 ") == 0, "the others have lost nothing"); + + /* ---- waiting ---- */ + { + v4_uheat_t c0 = pool[0].es.anticlock, c1 = pool[1].es.anticlock, c2 = pool[2].es.anticlock; + for (i = 0; i < 100; i++) (void)v4_fabric_step(&f); + CHECK(waiting(hera) && waiting(mid) && waiting(far), "with nothing to do, all three wait at their ports"); + CHECK(pool[0].es.anticlock == c0 && pool[1].es.anticlock == c1 && pool[2].es.anticlock == c2, "and execute nothing"); + } + + /* ---- the ways are forgotten and told again: the wiring has changed ---- */ + CHECK(v4_fabric_wire(&f, hera, 3, far, 3), "the far node is wired straight to the one at the console as well"); + CHECK(is_empty(tell(10, "NO-ROUTES 1 1 ROUTE 11 2 ROUTE 12 3 ROUTE")) && is_empty(tell(12, "NO-ROUTES 3 DEFAULT-ROUTE")), "and both are told"); + { + v4_uheat_t before = pool[1].es.anticlock; + CHECK(strcmp(tell(12, "5 5 + ."), "10 ") == 0 && pool[1].es.anticlock == before, "text for it no longer passes through the middle node, which executes nothing"); + } + + /* ---- two neighbours with something for each other at the same moment ---- + * A write blocks until the neighbour reads, and a node that is writing + * is not reading: so a node looks before it begins a message, and of + * two neighbours only the one with the lower number may wait to write + * to the other (v4/capsule/core.v4, (GATE); docs/v4.0.0/MESH.md 7a). + * Each node is told who is on each of its ports. */ + CHECK(is_empty(tell(10, "NO-ROUTES 1 1 ROUTE 11 2 ROUTE 12 2 ROUTE")) && is_empty(tell(12, "NO-ROUTES 2 DEFAULT-ROUTE")), "the row of three again"); + CHECK(is_empty(tell(10, "11 2 NEIGHBOUR 0 3 NEIGHBOUR")) && is_empty(tell(11, "10 2 NEIGHBOUR 12 3 NEIGHBOUR")) && is_empty(tell(12, "11 2 NEIGHBOUR 0 3 NEIGHBOUR")), + "each is told who is on the other end of its ports"); + CHECK(strstr(tell(10, "11 8 NEIGHBOUR"), "Argument out of range") != NULL && strstr(tell(10, "11 -1 NEIGHBOUR"), "Argument out of range") != NULL, + "a port a node has not got is an error"); + /* the far node sends the middle one text, and then word of how its own + * text ended, which goes by the middle one; the middle one does the + * text and answers the far one: the two messages meet on one wire */ + CHECK(strcmp(tell(12, ": HI S\" 72 EMIT\" 11 SEND ; HI"), "H") == 0 && printed_from == 11 && ended == 1 && ended_from == 12, + "from the far end to the middle, with the answers crossing: \"%s\" from %ld", printed, (long)printed_from); + CHECK(waiting(hera) && waiting(mid) && waiting(far), "and all three are waiting again"); + + /* every node sends every other a number of messages, all at once: each + * counts what it is sent */ + CHECK(is_empty(tell(10, "VARIABLE GOT : HIT 1 GOT +! ; VARIABLE WHO VARIABLE SENT : BURST WHO ! 0 DO S\" HIT\" WHO @ SEND 1 SENT +! LOOP ;")) && + is_empty(tell(11, "VARIABLE GOT : HIT 1 GOT +! ; VARIABLE WHO VARIABLE SENT : BURST WHO ! 0 DO S\" HIT\" WHO @ SEND 1 SENT +! LOOP ;")) && + is_empty(tell(12, "VARIABLE GOT : HIT 1 GOT +! ; VARIABLE WHO VARIABLE SENT : BURST WHO ! 0 DO S\" HIT\" WHO @ SEND 1 SENT +! LOOP ;")), "each node is given a word to count with and one to send with"); + { + const char *r = tell(10, ": GO S\" 6 10 BURST 6 12 BURST\" 11 SEND S\" 6 11 BURST 6 10 BURST\" 12 SEND 6 11 BURST 6 12 BURST ; GO"); + CHECK(is_empty(r), "six messages from each node to each other, all at once: \"%s\"", r); + CHECK(waiting(hera) && waiting(mid) && waiting(far), "all three come to rest"); + CHECK(strcmp(tell(10, "GOT @ . (LOST) @ ."), "12 1 ") == 0 && strcmp(tell(11, "GOT @ . (LOST) @ ."), "12 0 ") == 0 && strcmp(tell(12, "GOT @ . (LOST) @ ."), "12 0 ") == 0, + "every one of them arrived, and none was let go: \"%s\"", printed); + } + + /* ---- more than a node has room to keep ---- + * A node that takes messages in while it waits to write keeps them, and + * when it has no room for one more it lets that one go and counts it. + * Far more are sent here than the nodes can keep. */ + { + long got = 0, lost = 0, sent = 0, v; + unsigned k; + static const v4_cell who[3] = { 10, 11, 12 }; + const char *r; + CHECK(is_empty(tell(10, "0 GOT ! 0 SENT !")) && is_empty(tell(11, "0 GOT ! 0 SENT !")) && is_empty(tell(12, "0 GOT ! 0 SENT !")), "the counts begin again"); + r = tell(10, ": GO2 S\" 200 10 BURST 200 12 BURST\" 11 SEND S\" 200 11 BURST 200 10 BURST\" 12 SEND 200 11 BURST 200 12 BURST ; GO2"); + CHECK(strcmp(r, "(still running)") != 0, "two hundred from each to each: it ends"); + CHECK(waiting(hera) && waiting(mid) && waiting(far), "and all three come to rest, none waiting to write"); + for (k = 0; k < 3; k++) { + r = tell(who[k], "GOT @ ."); + v = strtol(r, NULL, 10); got += v; + CHECK(v > 0 && v <= 400, "node %ld took %ld of the 400 for it", (long)who[k], v); + r = tell(who[k], "(LOST) @ ."); + lost += strtol(r, NULL, 10); + r = tell(who[k], "SENT @ ."); + sent += strtol(r, NULL, 10); + CHECK(pool[k].n.mem[MQ_COUNT] == 0, "node %ld has none left waiting", (long)who[k]); + } + lost -= 1; /* the one for node 99, earlier */ + /* what is let go is of every kind: the text that would have set a + * node sending, the answers to text, as well as what was sent */ + printf(" of %ld messages the nodes sent each other at once %ld arrived; %ld messages of all kinds were let go for want of room\n", sent, got, lost); + CHECK(lost > 0, "there was not room for all of them"); + CHECK(got <= sent && got + lost >= sent, "every message sent either arrived or was counted: %ld sent, %ld arrived, %ld let go", sent, got, lost); + CHECK(strcmp(tell(12, "7 8 * ."), "56 ") == 0 && printed_from == 12, "and the nodes go on as before"); + } + + printf(" %d checks, %d failures\n", checks, failures); + return failures != 0; +} diff --git a/v4/tests/test_host_node.c b/v4/tests/test_host_node.c new file mode 100644 index 00000000..aa5e43a0 --- /dev/null +++ b/v4/tests/test_host_node.c @@ -0,0 +1,124 @@ +/* test_host_node.c -- the host node's size, and the text assembler on it. + * + * Tests named test_host_*.c are built with V4_NODE_WORDS = 16384 (Makefile): + * the host node, which holds the compiler, the dictionary and the text being + * compiled, and so cannot be a 1024-word mesh node. + * + * At 1024 words every slot a branch may sit in reaches the whole node. At + * 16384 slot 3 does not -- its address field is 12 bits -- so this is where + * the text assembler's placement rule (text.h) is exercised: a branch is put + * in a slot only if that slot reaches every word of the node. + */ +#include "v4/text.h" +#include "v4/testcode.h" +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) +#define ORIGIN 16 + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_text tx; +static char src[8 * V4_NODE_WORDS + 1024]; + +static unsigned slot_op(v4_cell addr, unsigned slot) +{ + return (unsigned)(((v4_ucell)n.mem[addr] >> V4_SLOT_LOW_BIT(slot)) & 0x1Fu); +} +static int assemble(const char *text) +{ + v4_node_reset(&n); + v4_text_begin(&tx, &n, ORIGIN); + return v4_text_assemble(&tx, text) && v4_text_finish(&tx); +} +static v4_cell result(const char *name, v4_cell arg) +{ + v4_cell r, w = v4_text_word(&tx, name); + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + v4_dstack_push(&n.ds, CANARY); + v4_dstack_push(&n.ds, arg); + if (w < 0 || v4_test_call(&n, &es, &h, w, 100000) <= 0) return (v4_cell)0x0BADBAD; + r = v4_dstack_pop(&n.ds); + return v4_dstack_pop(&n.ds) == CANARY ? r : (v4_cell)0x0BADBAD; +} + +int main(void) +{ + unsigned k, i; + + printf("v4 host node tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + CHECK(V4_NODE_WORDS == 16384u, "the host node is 16384 words"); + + /* the node itself at this size */ + v4_node_reset(&n); + v4_node_store(&n, 0, 11); + v4_node_store(&n, (v4_cell)(V4_NODE_WORDS - 1u), 22); + CHECK(v4_node_load(&n, 0) == 11 && v4_node_load(&n, (v4_cell)(V4_NODE_WORDS - 1u)) == 22, "the first and last words"); + CHECK(v4_node_guards_intact(&n), "guards intact around them"); + CHECK(V4_TEST_HALT == (v4_cell)(V4_NODE_WORDS - 1u), "the test halt address is the last word"); + + /* which slots reach the whole node */ + CHECK((v4_ucell)v4_iword_slot_mask(2) >= V4_NODE_WORDS - 1u, "a branch in slot 2 reaches the whole node"); + CHECK((v4_ucell)v4_iword_slot_mask(3) < V4_NODE_WORDS - 1u, "a branch in slot 3 does not"); + + /* so a branch that would land in slot 3 starts a new word instead, and + * one in slots 0 .. 2 stays where it is */ + for (k = 0; k <= 3; k++) { + char pad[32] = ""; + for (i = 0; i < k; i++) strcat(pad, "dup "); + snprintf(src, sizeof src, ": T ( n -- x ) %sif Z ; Z: ;", pad); + CHECK(assemble(src), "a branch after %u opcodes assembles: %s", k, v4_text_error(&tx)); + if (k < 3) { + CHECK(slot_op(ORIGIN, k) == V4_OP_IF, "after %u opcodes the branch is in slot %u of the same word", k, k); + } else { + CHECK(slot_op(ORIGIN, 3) == V4_OP_NOP && slot_op(ORIGIN + 1, 0) == V4_OP_IF, + "after 3 opcodes the branch starts the next word"); + } + } + + /* branches and calls from every slot position to the far end of the + * node, forward and backward, land where they should */ + for (k = 0; k <= 3; k++) { + char pad[32] = ""; + size_t at = 0; + for (i = 0; i < k; i++) strcat(pad, "nop "); + at += (size_t)snprintf(src + at, sizeof src - at, ": NEAR ( n -- 5 ) drop 5 ; "); + at += (size_t)snprintf(src + at, sizeof src - at, ": FWD ( n -- x ) %sif FAR drop 7 ; ", pad); + at += (size_t)snprintf(src + at, sizeof src - at, ": CALLS ( n -- x ) %sFAR 1 + ; ", pad); + at += (size_t)snprintf(src + at, sizeof src - at, ": FILL "); + for (i = 0; i < V4_NODE_WORDS - 400u; i++) at += (size_t)snprintf(src + at, sizeof src - at, "; "); + at += (size_t)snprintf(src + at, sizeof src - at, ": FAR ( n -- 99 ) drop 99 ; "); + at += (size_t)snprintf(src + at, sizeof src - at, ": BACK ( n -- x ) %sif NEAR drop 8 ; ", pad); + at += (size_t)snprintf(src + at, sizeof src - at, ": BACKCALL ( n -- x ) %sNEAR 1 + ; ", pad); + at += (size_t)snprintf(src + at, sizeof src - at, ": LOOP ( n -- 0 ) L: if DONE -1 + %sjump L DONE: ; ", pad); + CHECK(assemble(src), "the far text assembles with %u opcodes before each branch: %s", k, v4_text_error(&tx)); + CHECK(v4_text_word(&tx, "FAR") > (v4_cell)(V4_NODE_WORDS - 400u), "FAR is at %ld", (long)v4_text_word(&tx, "FAR")); + CHECK(result("FWD", 0) == 99 && result("FWD", 3) == 7, "a forward branch across the node [%u]", k); + CHECK(result("CALLS", 3) == 100, "a forward call across the node [%u]", k); + CHECK(result("BACK", 0) == 5 && result("BACK", 3) == 8, "a backward branch across the node [%u]", k); + CHECK(result("BACKCALL", 3) == 6, "a backward call across the node [%u]", k); + CHECK(result("LOOP", 9) == 0, "a short backward jump near the top of the node [%u]", k); + } + + /* the node fills up at 16384 words, not before */ + { + size_t at = 0; + at += (size_t)snprintf(src + at, sizeof src - at, ": T "); + for (i = 0; i < V4_NODE_WORDS - 100u; i++) at += (size_t)snprintf(src + at, sizeof src - at, "; "); + CHECK(assemble(src), "16284 words of code fit: %s", v4_text_error(&tx)); + for (i = 0; i < 200u; i++) at += (size_t)snprintf(src + at, sizeof src - at, "; "); + CHECK(!assemble(src) && strstr(v4_text_error(&tx), "does not fit") != NULL, "16484 do not"); + CHECK(v4_node_guards_intact(&n), "and nothing was written outside the node"); + } + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_host_quit.c b/v4/tests/test_host_quit.c new file mode 100644 index 00000000..ffe511ad --- /dev/null +++ b/v4/tests/test_host_quit.c @@ -0,0 +1,1681 @@ +/* test_host_quit.c -- the prompt, executed on the host node. + * + * capsule/quit.v4 on top of the earlier layers: QUIT, ABORT, ABORT" and ." . + * For the first time the node is not handed a line: it is started at QUIT and + * left running, characters are fed to its console, and what it prints is + * read back. Nothing here calls INTERPRET or pokes TIB. + * + * A session is some lines of input and everything the node printed until it + * was waiting for more. The sessions marked v3 were piped through the v3 + * binary on 2026-10-04 and the text is what v3 printed, less its colours and + * the time stamp and "ERROR: " its log puts before a message. + * + * Where v4 parts from v3 here: + * - QUIT is FORTH-79's: it stops the line, from inside any word, and says + * nothing. v3's goes on with the rest of the line, and cannot be + * compiled into a definition at all. + * - a line that fails while a definition is open ends the definition. + * v3 goes on compiling the lines that follow into it. + * - ABORT" at the prompt stops the line when its flag is true. v3 prints + * the text and carries on. Compiled into a word, v3's crashes (SIGSEGV). + * - LOAD goes on with the rest of its line afterwards, and there is BLK + * (both FORTH-79); v3's LOAD drops the rest of the line and it has no + * BLK. A block number that does not exist says so. + * - vocabularies are FORTH-79's: a word defined in one is found only when + * that vocabulary is CONTEXT, and FORTH is searched after it. v3 finds + * every word everywhere, and a word redefined in a vocabulary replaces + * FORTH's for good. + * - every error has a message (D-18), but v4's says what was wrong, not + * which word: "Control structure mismatch" where v3 says + * "LOOP: missing DO". + * - QUERY takes 80 characters (FORTH-79); v3's line is 255. + * - an address outside memory says so (D-14); v3 gives ERROR alone. + * - M/MOD by zero says so (D-15); v3 gives ERROR alone. + * - the host node's stacks hold 32 values and 32 return entries (D-17), + * and one more is an error (D-16). This file is written for whatever + * size it is built with. A stack fault names the stack, + * not the word: "Stack underflow" where v3 says "DROP: Stack underflow". + * - any fault empties the data stack; v3 keeps what the failing word had + * not taken. + * - PICK and ROLL count from one, as FORTH-79 has them: 1 PICK is DUP and + * 3 ROLL is ROT. v3's count from zero. + */ +#include "v4/text.h" +#include "v4/message.h" +#include "v4/testcode.h" +#include +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) + +#include "v4/blocks.h" +#include "v4/post.h" +#include "block_subsystem.h" +#include "host_map.h" + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_text tx; +static v4_cell w_key, w_key_end, w_fault, capsule_latest; +static v4_cell w_idle; /* (IDLE): where the node waits for a message */ +static char out[V4_CONSOLE_CAP + 1]; + +/* STORAGE (MESH.md section 8). The node asks its kernel for its blocks, and + * these tests are its kernel (kernel_serve): the blocks are the kernel's + * block subsystem (v3/src/block_subsystem.c). The chain is fast RAM, + * blocks 0 to 2047; a device of 64 blocks, 2048 to 2111; and after that a + * disk the subsystem has not been told it may format, which it reads and + * will not write. The RAM and the device are zeros at every switch-on. + * `disk` is where the chain keeps block 0, so disk + n * 1024 is block n of + * it for any n below 2048, as the chain itself holds it. */ +#define DISK_BLOCKS 64u +#define RAM_BYTES ((size_t)BLK_RAM_BLOCKS * BLK_FORTH_SIZE) +#define REFUSING_BLOCKS 2048u /* room for the subsystem's own reserved device blocks and some of the node's */ +#define REFUSING_FIRST "2112" /* its first block */ +static unsigned char ram[RAM_BYTES], common_dev[DISK_BLOCKS * V4_BLOCK_BYTES], refusing_dev[REFUSING_BLOCKS * V4_BLOCK_BYTES]; +#define disk (ram + (size_t)BLK_FORTH_SYS_RESERVED * BLK_FORTH_SIZE) +static v4_blocks kblocks; /* what the kernel keeps of the node's block window */ + +extern void sf_time_init(void); +extern void log_set_level(int level); +extern size_t blkio_ram_state_size(void); +extern int blkio_ram_init_state(void *state_mem, size_t state_len, uint8_t *base, uint32_t total_blocks, uint32_t fbs, uint8_t read_only, void **out_opaque); +extern const blkio_vtable_t *blkio_ram_vtable(void); + +/* The chain is made once: the subsystem keeps what it allocates. */ +static int storage_made(void) +{ + static blkio_dev_t dev; + static unsigned char state[256]; + blkio_params_t params; + void *opaque = 0; + + sf_time_init(); + log_set_level(-1); + if (blkio_ram_state_size() > sizeof state) return 0; + if (blk_subsys_init(ram, sizeof ram) != BLK_OK || blk_subsys_add_raw_device(common_dev, DISK_BLOCKS) != BLK_OK) return 0; + if (blkio_ram_init_state(state, sizeof state, refusing_dev, REFUSING_BLOCKS, 0, 0, &opaque) != BLKIO_OK) return 0; + params.forth_block_size = 0; params.total_blocks = REFUSING_BLOCKS; params.opaque = opaque; + return blkio_open(&dev, blkio_ram_vtable(), ¶ms) == BLKIO_OK && blk_subsys_attach_device(&dev) == BLK_OK; +} +/* A block holding `text`, the rest of it blanks. */ +static void put_block(unsigned num, const char *text) +{ + memset(disk + num * V4_BLOCK_BYTES, ' ', V4_BLOCK_BYTES); + memcpy(disk + num * V4_BLOCK_BYTES, text, strlen(text)); +} +static long last_steps; + +/* THE KERNEL. A node asks its kernel by writing to its port (node.h), and + * these tests are that too. Request 1 is "an entry has been made" ( xt -- ) + * and request 2 "the entries from here up have gone" ( w -- ): the kernel's + * record of the words on the node (ENGINE.md 3b), kept here as the list of + * their xts. Any other request is noted and nothing is done. */ +static v4_cell known[1024]; +static unsigned known_n; +static v4_cell last_request; + +static void kernel_serve(void) +{ + last_request = n.request; + if (v4_blocks_serve(&kblocks, &n, n.request)) return; /* a block, as for any node (blocks.h) */ + if (n.request == 1) { + v4_cell xt = v4_dstack_pop(&n.ds); + if (known_n < 1024) known[known_n++] = xt; + } else if (n.request == 2) { + v4_cell w = v4_dstack_pop(&n.ds); + unsigned i, kept = 0; + for (i = 0; i < known_n; i++) if (known[i] < w) known[kept++] = known[i]; + known_n = kept; + } +} + +/* Every entry on the node above the capsule's own, in every vocabulary: + * FORTH's list from LATEST, and each vocabulary's from its head. */ +static unsigned node_words(v4_cell *out, unsigned max) +{ + unsigned count = 0; + v4_cell xt, voc; + for (xt = n.mem[LATEST]; xt >= DICT_W; xt = n.mem[xt - 1]) if (count < max) out[count++] = xt; + for (voc = n.mem[VOC_LINK]; voc != 0; voc = n.mem[voc + 1]) + for (xt = n.mem[voc]; xt >= DICT_W; xt = n.mem[xt - 1]) if (count < max) out[count++] = xt; + return count; +} + +/* True if the kernel's record is exactly the words that are on the node. */ +static int kernel_agrees(void) +{ + static v4_cell there[1024]; + unsigned count = node_words(there, 1024), i, k; + if (count != known_n) return 0; + for (i = 0; i < count; i++) { + for (k = 0; k < known_n && known[k] != there[i]; k++) { } + if (k == known_n) return 0; + } + return 1; +} + +/* The name of the entry whose code is at xt, as the kernel reads it: the + * word before the link holds the word address of the counted name, its + * bytes four to a cell. */ +static const char *node_name(v4_cell xt) +{ + static char name[40]; + v4_cell at = n.mem[xt - 2] * 4; + unsigned len, i; + len = (unsigned)(((v4_ucell)n.mem[at / 4] >> (8 * (at % 4))) & 0xFFu); + if (len > 31) len = 31; + for (i = 0; i < len; i++) { + v4_cell b = at + 1 + (v4_cell)i; + name[i] = (char)(((v4_ucell)n.mem[b / 4] >> (8 * (b % 4))) & 0xFFu); + } + name[len] = 0; + return name; +} + +/* THE CONSOLE. A node is sent text as a message and sends back what it + * prints (MESH.md section 6); these tests are its console, on its port 1, + * and do what tools/hosted.c does: take what is typed a line at a time, + * send each line as a message, show what comes back, and say " ok" or + * " ERROR" and the next prompt. What is typed after a line is there for a + * word in it that reads the keyboard, and what such a word does not take is + * the next line. */ +#define CONSOLE_PORT 1u +static char typed[8192]; /* typed and not yet taken */ +static unsigned typed_len; +static int line_open; /* a line has been sent and has not ended */ +static v4_message to_node, from_node; /* the message going in, and the one coming out */ +static unsigned to_sent; /* how many words of to_node the node has taken */ +static char shown[V4_CONSOLE_CAP]; /* what the node has printed since the console last looked */ +static unsigned shown_len; +static int shown_dropped; +static int text_ended; /* how the text ended, when it has */ + +/* 1 if the node is where it waits for a message, with nothing given it. */ +static int node_idle(void) +{ + return n.reading && !n.given && n.read_port == V4_PORT_ANY && n.p > w_idle && n.p <= w_idle + 8; /* in the first words of (IDLE), where it reads */ +} + +/* Run until the text ends, or until it has been inside KEY with nothing to + * read for 64 instruction words; or until `max` words. 1: ended, 2: waiting + * for a character, 0: neither. */ +static int run_line(long max) +{ + long steps = 0; + unsigned idle = 0; + while (steps < max && idle < 64) { + (void)v4_exec_step_word(&n, &es, &h); + steps++; + if (n.asking && n.ask_port == 0) { kernel_serve(); v4_node_port_served(&n); continue; } /* a request */ + if (n.asking && n.ask_port == CONSOLE_PORT) { /* a word of a message from the node */ + v4_cell word = n.request; + v4_node_port_served(&n); + if (v4_message_word(&from_node, word)) { + unsigned i, chars = v4_message_length(&from_node); + if (v4_message_type(&from_node) == V4_MSG_OUTPUT) { + for (i = 0; i < chars; i++) { + if (shown_len < sizeof shown) shown[shown_len++] = v4_message_char(&from_node, i); + else shown_dropped = 1; + } + } else if (v4_message_type(&from_node) == V4_MSG_DONE) { + text_ended = (int)from_node.word[V4_MSG_HEADER]; + from_node.count = 0; + last_steps = steps; + return 1; + } + from_node.count = 0; + } + continue; + } + if (n.reading && !n.given && to_sent < to_node.count && (n.read_port == CONSOLE_PORT || n.read_port == V4_PORT_ANY)) { + v4_node_port_give(&n, CONSOLE_PORT, to_node.word[to_sent++]); /* a word of the message to the node */ + continue; + } + if (n.input_pos == n.input_len && n.p >= w_key && n.p < w_key_end) idle++; else idle = 0; + } + last_steps = steps; + return idle >= 64 ? 2 : 0; +} + +/* A node just switched on: an empty dictionary above the capsule's words, + * `depth` marked cells and the canary on the data stack, started at QUIT. */ +static void boot_with(unsigned depth) +{ + unsigned i; + for (v4_cell k = DICT_W; k < DICT_END_W; k++) n.mem[k] = 0; + n.mem[DP] = DICT_W * 4; + n.mem[LATEST] = capsule_latest; + n.mem[STATE] = 0; + n.mem[CFP] = CFS_W; + n.mem[BASE] = 10; + n.mem[NODE_ERROR] = 0; + n.mem[BOOT_CELLS] = n.mem[DP]; + n.mem[BOOT_CELLS + 1] = capsule_latest; + n.mem[FENCE] = DICT_W; + n.mem[LOG_LEVEL] = 2; + n.mem[ACL_HOOK] = 0; + for (v4_cell xt = capsule_latest; xt != 0; xt = n.mem[xt - 1]) n.mem[xt - 3] &= 31; /* the capsule's words: no access control fields set */ + n.mem[CONTEXT] = LATEST; + n.mem[CURRENT] = LATEST; + n.mem[VOC_LINK] = 0; + n.mem[SRC] = TIB; + for (v4_cell k = BVARS; k < BVARS + 14; k++) if (k != SRC) n.mem[k] = 0; /* empty buffers, SCR and BLK 0, no hook */ + memset(ram, 0, sizeof ram); memset(common_dev, 0, sizeof common_dev); + v4_blocks_init(&kblocks, BUF0_W); + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); + v4_node_fault_attach(&n, w_fault); + v4_node_error_attach(&n, NODE_ERROR); + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + for (i = 0; i < depth; i++) v4_dstack_push(&n.ds, (v4_cell)(0x5A000000 + i)); + v4_dstack_push(&n.ds, CANARY); + v4_node_port_attach(&n, PORT); + v4_node_port_status(&n, 0, 1u | 1u << CONSOLE_PORT); /* the kernel and the console take what is written when it is written */ + n.mem[WORD_DEFINED] = 0; /* no one is told of entries, until a test says so */ + n.mem[WORD_FORGOTTEN] = 0; + known_n = 0; + last_request = 0; + n.mem[LINE_STATUS] = 1; + n.mem[ME] = 0; /* it has no number yet: a message to 0 is for it */ + HOST_MESSAGES_EMPTY(&n); + n.mem[REPLY] = PORT + CONSOLE_PORT; + n.p = w_idle; /* waiting for a message */ + typed_len = 0; + line_open = 0; + to_node.count = 0; to_sent = 0; from_node.count = 0; + shown_len = 0; shown_dropped = 0; + for (i = 0; i < 8 && !n.reading; i++) (void)v4_exec_step_word(&n, &es, &h); /* no message waits: it reads its ports, and is blocked */ +} +static void boot(void) { boot_with(0); } +/* The same with nothing at all on the data stack. */ +static void boot_bare(void) +{ + boot(); + v4_dstack_reset(&n.ds); +} + +/* While the node waits for a character, EXPECT's own cells are on top of the + * data stack. Pop them: true if the canary is under no more than four. */ +static int canary_under_expect(void) +{ + unsigned k; + for (k = 0; k < 5; k++) if (v4_dstack_pop(&n.ds) == CANARY) return 1; + return 0; +} + +/* Type `input` and return what the console then shows: what each line + * printed, the host's " ok" or " ERROR" after it, and the next prompt. A + * line that has not been ended shows nothing; nor does one that is waiting + * for a character. */ +static const char *say(const char *input) +{ + unsigned ilen = (unsigned)strlen(input), olen = 0; + + if (typed_len + ilen > sizeof typed) return "(input queue full)"; + memcpy(typed + typed_len, input, ilen); + typed_len += ilen; + out[0] = 0; + for (;;) { + const char *tail; + unsigned took; + int ended; + + if (!line_open) { + char *nl = (char *)memchr(typed, '\n', typed_len); + unsigned len; + if (!nl) break; + len = (unsigned)(nl - typed); + if (!v4_message_text(&to_node, 0, 1, V4_MSG_TEXT, typed, len)) return "(line too long)"; + to_sent = 0; + memmove(typed, nl + 1, typed_len - len - 1); + typed_len -= len + 1; + line_open = 1; + } + shown_len = 0; shown_dropped = 0; + v4_node_console_input_attach(&n, CONSOLE_RX, CONSOLE_ST); /* empties the keyboard */ + if (v4_node_console_feed(&n, typed, typed_len) != typed_len) return "(input queue full)"; + ended = run_line(40000000); + took = n.input_pos; /* what a word in the line read */ + memmove(typed, typed + took, typed_len - took); + typed_len -= took; + if (shown_dropped || olen + shown_len + 16 > sizeof out) return "(too much output)"; + memcpy(out + olen, shown, shown_len); + olen += shown_len; + out[olen] = 0; + if (ended == 0) return "(still running)"; + if (ended == 2) break; + line_open = 0; + tail = text_ended == V4_TEXT_COMPLETED ? " ok\nok> " : text_ended == V4_TEXT_ERROR ? " ERROR\nok> " : "ok> "; + memcpy(out + olen, tail, strlen(tail) + 1); + olen += (unsigned)strlen(tail); + } + return out; +} +/* POST's RUNNER (v4/system/post.c), with these tests as its host: a line is + * sent to the node as the console sends one, and what the node prints is + * handed back and not shown. `post_step_limit` is how long a line may + * take before the node is given up on, and `post_state_fails` makes the + * line that sets the state end in an error; `post_said` is what the runner + * printed. */ +static long post_step_limit = 40000000; +static int post_state_fails; +static char post_said[4096]; +static unsigned post_said_len; +static int post_line(void *self, const char *text, unsigned text_len, char *o, unsigned cap, unsigned *len) +{ + int ended; + (void)self; + *len = 0; + if (post_state_fails && text_len == 25 && memcmp(text, "DECIMAL FORTH DEFINITIONS", 25) == 0) text = "NOSUCHWORD-FOR-STATE "; + if (!v4_message_text(&to_node, 0, 1, V4_MSG_TEXT, text, text_len)) return -1; + to_sent = 0; from_node.count = 0; + shown_len = 0; shown_dropped = 0; + ended = run_line(post_step_limit); + if (ended != 1) return -1; + *len = shown_dropped ? (unsigned)sizeof shown + 1u : shown_len; + memcpy(o, shown, shown_len < cap ? shown_len : cap); + return text_ended; +} +static void post_say(void *self, const char *text, unsigned len) +{ + (void)self; + if (post_said_len + len < sizeof post_said) { memcpy(post_said + post_said_len, text, len); post_said_len += len; post_said[post_said_len] = 0; } +} +static const v4_post_host post_host = { 0, &n, post_line, post_say }; +/* Run one case; 1 if it passed. What the runner said is in post_said. */ +static int post_one(const char *name, const char *l0, const char *l1, int expect, const long long *stack, unsigned depth, const char *output) +{ + static const char *lines[2]; + v4_post_case c; + v4_post_tally t; + int ok; + lines[0] = l0; lines[1] = l1; + c.name = name; c.lines = lines; c.line_count = l1 ? 2u : 1u; c.expect = expect; + c.stack = stack; c.depth = depth; c.output = output; c.output_len = (unsigned)strlen(output); + post_said_len = 0; post_said[0] = 0; + ok = v4_post_run(&post_host, &c, 1, &t); + if (t.tests != 1 || t.pass + t.fail != 1 || (int)t.pass != ok) return -1; + return ok; +} + +/* Feed a file of FORTH source to the prompt, a line at a time, as if typed. + * True if every line was accepted: the node said " ok" and nothing else. */ +static int load_source(const char *name) +{ + char path[512], line[160]; + FILE *f; + unsigned num = 0; + snprintf(path, sizeof path, "%s/%s", V4_CAPSULE_DIR, name); + f = fopen(path, "r"); + if (!f) { printf(" cannot open %s\n", path); return 0; } + while (fgets(line, sizeof line, f)) { + size_t len = strlen(line); + num++; + if (len == 0 || line[len - 1] != '\n' || len > 80) { printf(" %s line %u: too long\n", name, num); fclose(f); return 0; } + (void)say(line); + /* every line is accepted: whatever it printed, it ended with " ok" and never with ERROR */ + if (strlen(out) < 9 || strcmp(out + strlen(out) - 9, "\n ok\nok> ") != 0 || strstr(out, " ERROR\n")) { + if (strcmp(out, " ok\nok> ") != 0) { printf(" %s line %u: %s", name, num, line); printf(" -> "); fputs(out, stdout); printf("\n"); fclose(f); return 0; } + } + } + fclose(f); + return n.mem[STATE] == 0; +} + +/* What the editor's L prints for a screen of blanks. */ +static const char *blank_screen(int num) +{ + static char text[2048]; + size_t at = (size_t)snprintf(text, sizeof text, "Screen %d:\n", num); + for (unsigned k = 0; k < 16; k++) at += (size_t)snprintf(text + at, sizeof text - at, "%2u: %-64s\n", k, ""); + snprintf(text + at, sizeof text - at, " ok\nok> "); + return text; +} + +static void show(const char *label, const char *s) +{ + printf(" %s\"", label); + for (; *s; s++) if (*s == '\n') printf("\\n"); else putchar(*s); + printf("\"\n"); +} +static int is(const char *got, const char *want) +{ + if (strcmp(got, want) == 0) return 1; + show("got: ", got); + show("wanted: ", want); + return 0; +} + +/* What v3 prints starts with its first prompt; the node's first prompt is + * printed at switch-on, before the input, so a v4 session lacks the leading + * "ok> " and is otherwise the same. */ +typedef struct { const char *in, *want; int v3; } transcript; +static const transcript script[] = { + { "65 EMIT\n", "A ok\nok> ", 1 }, + { "\n \n", " ok\nok> ok\nok> ", 1 }, + { ": HI .\" Hello\" ; HI\n", "Hello ok\nok> ", 1 }, + { "NOSUCH\n66 EMIT\n", "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> B ok\nok> ", 1 }, + { "1 2 NOSUCH 3 4\n+ 48 + EMIT\n", "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> 3 ok\nok> ", 1 }, + { ": T 67 EMIT ABORT 68 EMIT ; T 70 EMIT\n69 EMIT\n", "C ok\nok> E ok\nok> ", 1 }, + { ": M 70 EMIT\n71 EMIT ;\nM\n", " ok\nok> ok\nok> FG ok\nok> ", 1 }, + { "IF\n72 EMIT\n", "IF: compile-only\n ERROR\nok> H ok\nok> ", 1 }, + { ".\" hi there\"\n", "hi there ok\nok> ", 1 }, + { "1 2 3\n+ + 48 + EMIT\n", " ok\nok> 6 ok\nok> ", 1 }, + { ": T .\" A\" .\" B\" CR .\" C\" ; T\n", "AB\nC ok\nok> ", 1 }, + { ": T1 ABORT ; : T2 T1 66 EMIT ; : T3 65 EMIT T2 67 EMIT ; T3\n68 EMIT\n", "A ok\nok> D ok\nok> ", 1 }, + { "0 ABORT\" not\" 65 EMIT\n", "A ok\nok> ", 1 }, + { ": P .\" two spaces \" 124 EMIT ; P\n", " two spaces | ok\nok> ", 1 }, + { "65 EMIT CR 66 EMIT\n", "A\nB ok\nok> ", 1 }, + { ": E .\" \" 65 EMIT ; E\n", "A ok\nok> ", 1 }, + { "65 EMIT 1 0 / 66 EMIT\n67 EMIT\n", "A/: Division by zero\n ERROR\nok> C ok\nok> ", 1 }, + { "1 0 MOD\n", "MOD: Division by zero\n ERROR\nok> ", 1 }, + { "1 0 /MOD\n", "/MOD: Division by zero\n ERROR\nok> ", 1 }, + { "1 1 0 */\n", "*/: Division by zero\n ERROR\nok> ", 1 }, + { "1 1 0 */MOD\n", "*/MOD: Division by zero\n ERROR\nok> ", 1 }, + { ": T 1 0 / 65 EMIT ; T 66 EMIT\n67 EMIT\n", "/: Division by zero\n ERROR\nok> C ok\nok> ", 1 }, + { "0 0 /\n7 2 / 48 + EMIT\n", "/: Division by zero\n ERROR\nok> 3 ok\nok> ", 1 }, + { "DEPTH 48 + EMIT 5 6 DEPTH 48 + EMIT\n", "02 ok\nok> ", 1 }, + { "1 2 3 NOSUCH\nDEPTH 48 + EMIT\n", "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> 3 ok\nok> ", 1 }, + { "5 6 7 1 0 MOD\nDEPTH 48 + EMIT\n", "MOD: Division by zero\n ERROR\nok> 3 ok\nok> ", 1 }, + { "5 6 7 1 1 0 */MOD\nDEPTH 48 + EMIT\n", "*/MOD: Division by zero\n ERROR\nok> 3 ok\nok> ", 1 }, + { "1 2 3 ABORT\nDEPTH 48 + EMIT\n", " ok\nok> 0 ok\nok> ", 1 }, + { "1 2 3 . . .\n", "3 2 1 ok\nok> ", 1 }, + { "-5 . 0 . 2147483647 .\n", "-5 0 2147483647 ok\nok> ", 1 }, + { "1 2 3 .S\n", "<3> 1 2 3 \n ok\nok> ", 1 }, + { ".S\n", "<0> \n ok\nok> ", 1 }, + { "1 2 3 .S . . .\n", "<3> 1 2 3 \n3 2 1 ok\nok> ", 1 }, + { "7 5 U.R 124 EMIT\n", " 7| ok\nok> ", 0 }, + { "HEX FF . DECIMAL 255 .\n", "FF 255 ok\nok> ", 1 }, + { "255 HEX . DECIMAL\n", "FF ok\nok> ", 1 }, + { "255 OCTAL . DECIMAL\n", "377 ok\nok> ", 1 }, + { "VARIABLE X 42 X ! X ?\n", "42 ok\nok> ", 1 }, + { "3 SPACES 65 EMIT 0 SPACES 66 EMIT -2 SPACES 67 EMIT\n", " ABC ok\nok> ", 1 }, + { "2 BASE ! 5 . DECIMAL\n", "UNKNOWN WORD: '5'\n ERROR\nok> ", 1 }, + { ": T 10 0 DO I . LOOP ; T\n", "0 1 2 3 4 5 6 7 8 9 ok\nok> ", 1 }, + { "DEPTH . 1 2 DEPTH . . .\n", "0 2 2 1 ok\nok> ", 1 }, + /* qmath.v4: every result printed by Q.PRINT, which shows all sixteen bits of the fraction */ + { "1 Q.FROM-INT 1 Q.FROM-INT Q./ Q.PRINT\n", "1.00000 ok\nok> ", 1 }, + { "1 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "1.00000 ok\nok> ", 1 }, + { "1 Q.FROM-INT 1 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "0.00000 ok\nok> ", 1 }, + { "1 Q.FROM-INT 1 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "2.71823 ok\nok> ", 1 }, + { "1 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.84147 ok\nok> ", 1 }, + { "1 Q.FROM-INT 1 Q.FROM-INT Q./ Q.COS Q.PRINT\n", "0.54028 ok\nok> ", 1 }, + { "2 Q.FROM-INT 1 Q.FROM-INT Q./ Q.PRINT\n", "2.00000 ok\nok> ", 1 }, + { "2 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "1.41424 ok\nok> ", 1 }, + { "2 Q.FROM-INT 1 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "0.69314 ok\nok> ", 1 }, + { "2 Q.FROM-INT 1 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "7.38894 ok\nok> ", 1 }, + { "2 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.90930 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ Q.PRINT\n", "1.50000 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "1.22473 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "0.40550 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "4.48153 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.99748 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ Q.COS Q.PRINT\n", "0.07073 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ Q.PRINT\n", "0.33332 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "0.57733 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "1.39553 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.32719 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ Q.COS Q.PRINT\n", "0.94496 ok\nok> ", 1 }, + { "7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.PRINT\n", "1.75000 ok\nok> ", 1 }, + { "7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "1.32298 ok\nok> ", 1 }, + { "7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "0.55966 ok\nok> ", 1 }, + { "7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "5.75444 ok\nok> ", 1 }, + { "7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.98399 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.PRINT\n", "10.00000 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "3.16235 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "2.30261 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "12842.30421 ok\nok> ", 1 }, + { "22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.PRINT\n", "3.14285 ok\nok> ", 1 }, + { "22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "1.77279 ok\nok> ", 1 }, + { "22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "1.14517 ok\nok> ", 1 }, + { "22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "23.15980 ok\nok> ", 1 }, + { "1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.PRINT\n", "0.00999 ok\nok> ", 1 }, + { "1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "0.09996 ok\nok> ", 1 }, + { "1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "1.01004 ok\nok> ", 1 }, + { "1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.00999 ok\nok> ", 1 }, + { "1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.COS Q.PRINT\n", "0.99995 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ Q.PRINT\n", "15.93750 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "3.99217 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "2.76870 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ Q.PRINT\n", "333.33332 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "18.25744 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "5.80915 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.31947 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ Q.COS Q.PRINT\n", "0.94760 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.PRINT\n", "0.62500 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "0.79055 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "1.86820 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.58511 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.COS Q.PRINT\n", "0.81095 ok\nok> ", 1 }, + { "9 Q.FROM-INT 1 Q.FROM-INT Q./ Q.PRINT\n", "9.00000 ok\nok> ", 1 }, + { "9 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "3.00003 ok\nok> ", 1 }, + { "9 Q.FROM-INT 1 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "2.19726 ok\nok> ", 1 }, + { "9 Q.FROM-INT 1 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "5720.68249 ok\nok> ", 1 }, + { "9 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.41204 ok\nok> ", 1 }, + { "15 Q.FROM-INT 1 Q.FROM-INT Q./ Q.PRINT\n", "15.00000 ok\nok> ", 1 }, + { "15 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "3.87297 ok\nok> ", 1 }, + { "15 Q.FROM-INT 1 Q.FROM-INT Q./ Q.LOG Q.ABS Q.PRINT\n", "2.70808 ok\nok> ", 1 }, + { "15 Q.FROM-INT 1 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "387262.21916 ok\nok> ", 1 }, + { "15 Q.FROM-INT 1 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.65025 ok\nok> ", 1 }, + { "1 Q.FROM-INT 7 Q.FROM-INT Q./ Q.PRINT\n", "0.14285 ok\nok> ", 1 }, + { "1 Q.FROM-INT 7 Q.FROM-INT Q./ Q.SQRT Q.PRINT\n", "0.37799 ok\nok> ", 1 }, + { "1 Q.FROM-INT 7 Q.FROM-INT Q./ Q.EXP Q.PRINT\n", "1.15351 ok\nok> ", 1 }, + { "1 Q.FROM-INT 7 Q.FROM-INT Q./ Q.SIN Q.PRINT\n", "0.14237 ok\nok> ", 1 }, + { "1 Q.FROM-INT 7 Q.FROM-INT Q./ Q.COS Q.PRINT\n", "0.98982 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ 7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.* Q.PRINT\n", "2.62500 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ 7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.+ Q.PRINT\n", "3.25000 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ 7 Q.FROM-INT 4 Q.FROM-INT Q./ Q./ Q.PRINT\n", "0.85713 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ 7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.MAX Q.PRINT\n", "1.75000 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ 7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.MIN Q.PRINT\n", "1.50000 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ 7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.< .\n", "-1 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ 7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.> .\n", "0 ok\nok> ", 1 }, + { "3 Q.FROM-INT 2 Q.FROM-INT Q./ 7 Q.FROM-INT 4 Q.FROM-INT Q./ Q.= .\n", "0 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ 3 Q.FROM-INT 1 Q.FROM-INT Q./ Q.* Q.PRINT\n", "0.99998 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ 3 Q.FROM-INT 1 Q.FROM-INT Q./ Q.+ Q.PRINT\n", "3.33332 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ 3 Q.FROM-INT 1 Q.FROM-INT Q./ Q./ Q.PRINT\n", "0.11109 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ 3 Q.FROM-INT 1 Q.FROM-INT Q./ Q.MAX Q.PRINT\n", "3.00000 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ 3 Q.FROM-INT 1 Q.FROM-INT Q./ Q.MIN Q.PRINT\n", "0.33332 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ 3 Q.FROM-INT 1 Q.FROM-INT Q./ Q.< .\n", "-1 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ 3 Q.FROM-INT 1 Q.FROM-INT Q./ Q.> .\n", "0 ok\nok> ", 1 }, + { "1 Q.FROM-INT 3 Q.FROM-INT Q./ 3 Q.FROM-INT 1 Q.FROM-INT Q./ Q.= .\n", "0 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ 22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.* Q.PRINT\n", "50.08920 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ 22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.+ Q.PRINT\n", "19.08035 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ 22 Q.FROM-INT 7 Q.FROM-INT Q./ Q./ Q.PRINT\n", "5.07102 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ 22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.MAX Q.PRINT\n", "15.93750 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ 22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.MIN Q.PRINT\n", "3.14285 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ 22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.< .\n", "0 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ 22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.> .\n", "-1 ok\nok> ", 1 }, + { "255 Q.FROM-INT 16 Q.FROM-INT Q./ 22 Q.FROM-INT 7 Q.FROM-INT Q./ Q.= .\n", "0 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ 1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.* Q.PRINT\n", "3.33149 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ 1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.+ Q.PRINT\n", "333.34332 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ 1 Q.FROM-INT 100 Q.FROM-INT Q./ Q./ Q.PRINT\n", "33351.65342 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ 1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.MAX Q.PRINT\n", "333.33332 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ 1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.MIN Q.PRINT\n", "0.00999 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ 1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.< .\n", "0 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ 1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.> .\n", "-1 ok\nok> ", 1 }, + { "1000 Q.FROM-INT 3 Q.FROM-INT Q./ 1 Q.FROM-INT 100 Q.FROM-INT Q./ Q.= .\n", "0 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ 5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.* Q.PRINT\n", "0.39062 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ 5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.+ Q.PRINT\n", "1.25000 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ 5 Q.FROM-INT 8 Q.FROM-INT Q./ Q./ Q.PRINT\n", "1.00000 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ 5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.MAX Q.PRINT\n", "0.62500 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ 5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.MIN Q.PRINT\n", "0.62500 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ 5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.< .\n", "0 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ 5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.> .\n", "0 ok\nok> ", 1 }, + { "5 Q.FROM-INT 8 Q.FROM-INT Q./ 5 Q.FROM-INT 8 Q.FROM-INT Q./ Q.= .\n", "-1 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ 10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.* Q.PRINT\n", "100.00000 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ 10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.+ Q.PRINT\n", "20.00000 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ 10 Q.FROM-INT 1 Q.FROM-INT Q./ Q./ Q.PRINT\n", "1.00000 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ 10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.MAX Q.PRINT\n", "10.00000 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ 10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.MIN Q.PRINT\n", "10.00000 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ 10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.< .\n", "0 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ 10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.> .\n", "0 ok\nok> ", 1 }, + { "10 Q.FROM-INT 1 Q.FROM-INT Q./ 10 Q.FROM-INT 1 Q.FROM-INT Q./ Q.= .\n", "-1 ok\nok> ", 1 }, + { "Q.1 Q.PRINT Q.0 Q.PRINT Q.SCALE Q.PRINT\n", "1.00000 0.00000 1.00000 ok\nok> ", 1 }, + { "7 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT . 100 Q.FROM-INT Q.TO-INT .\n", "3 100 ok\nok> ", 1 }, + { "Q.0 Q.0= . Q.1 Q.0= . Q.0 Q.SQRT Q.PRINT Q.1 Q.SQRT Q.PRINT Q.0 Q.EXP Q.PRINT\n", "-1 0 0.00000 1.00000 1.00000 ok\nok> ", 1 }, + { "5 Q.FROM-INT 3 Q.FROM-INT Q.- Q.PRINT Q.1 Q.ABS Q.PRINT\n", "2.00000 1.00000 ok\nok> ", 1 }, + { "HEX 10 Q.FROM-INT Q.PRINT 10 . DECIMAL\n", "16.00000 10 ok\nok> ", 1 }, + { "20 Q.FROM-INT Q.EXP Q.0= . Q.1 Q.LOG Q.PRINT\n", "0 0.00000 ok\nok> ", 1 }, + /* v4's own: signed values (D-8), which v3 prints as large unsigned numbers, and the errors */ + { "-3 Q.FROM-INT 2 Q.FROM-INT Q./ Q.PRINT -7 Q.FROM-INT Q.PRINT\n", "-1.50000 -7.00000 ok\nok> ", 0 }, + { "3 Q.FROM-INT -2 Q.FROM-INT Q.* Q.PRINT -3 Q.FROM-INT -2 Q.FROM-INT Q.* Q.PRINT\n", "-6.00000 6.00000 ok\nok> ", 0 }, + { "-5 Q.FROM-INT Q.ABS Q.PRINT 5 Q.FROM-INT Q.NEG Q.PRINT\n", "5.00000 -5.00000 ok\nok> ", 0 }, + { "-1 Q.FROM-INT Q.1 Q.< . -1 Q.FROM-INT Q.1 Q.MAX Q.PRINT\n-1 Q.FROM-INT Q.1 Q.MIN Q.PRINT\n", "-1 1.00000 ok\nok> -1.00000 ok\nok> ", 0 }, + { "-1 Q.FROM-INT Q.EXP Q.PRINT -3 Q.FROM-INT 2 Q.FROM-INT Q./ Q.TO-INT .\n", "0.36787 -2 ok\nok> ", 0 }, + { "4 Q.FROM-INT Q.SIN Q.PRINT 2 Q.FROM-INT Q.COS Q.PRINT\n-1 Q.FROM-INT Q.SIN Q.PRINT\n", "-0.75680 -0.41615 ok\nok> -0.84147 ok\nok> ", 0 }, + { "1 Q.FROM-INT 2 Q.FROM-INT Q./ Q.LOG Q.PRINT\n", "-0.69314 ok\nok> ", 0 }, + { "-1 Q.FROM-INT 3 Q.FROM-INT Q./ -1 Q.FROM-INT 7 Q.FROM-INT Q./ Q.* . .\n", "0 3120 ok\nok> ", 0 }, + { "-4 Q.FROM-INT Q.SIN . . 4 Q.FROM-INT Q.COS . .\n", "0 49598 -1 -42838 ok\nok> ", 0 }, + { "Q.0 Q.0 Q./ 65 EMIT\nDEPTH .\n", "Division by zero\n ERROR\nok> 2 ok\nok> ", 0 }, + { "7 Q.1 Q.0 Q./ 65 EMIT\nDEPTH .\n", "Division by zero\n ERROR\nok> 3 ok\nok> ", 0 }, + { "7 -4 Q.FROM-INT Q.SQRT 65 EMIT\nDEPTH . . . .\n", "Argument out of range\n ERROR\nok> 3 0 0 7 ok\nok> ", 0 }, + { "Q.0 Q.LOG 65 EMIT\n-1 Q.FROM-INT Q.LOG\n", "Argument out of range\n ERROR\nok> Argument out of range\n ERROR\nok> ", 0 }, + { "7 PAD -1 DUMP 65 EMIT\n.S\n", "Negative count\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { "PAD 0 DUMP\n", " ok\nok> ", 1 }, + /* acl.v4: the fields of an entry, and the check, as v3 */ + { ": FOO 65 EMIT ; ' FOO ACL-MODE@ . ' FOO ACL-TTL@ . ' FOO ACL-ALLOW@ .\n' FOO ACL-PINNED? .\n", "0 0 -1 ok\nok> 0 ok\nok> ", 1 }, + { ": FOO 65 EMIT ; 1 ' FOO ACL-MODE! 77 ' FOO ACL-TTL! ' FOO ACL-MODE@ .\n' FOO ACL-TTL@ . FOO ' FOO ACL-TTL@ .\n", "1 ok\nok> 77 A76 ok\nok> ", 1 }, + { ": FOO 65 EMIT ; ' FOO ACL-PIN ' FOO ACL-PINNED? . 5 ' FOO ACL-TTL!\n0 ' FOO ACL-ALLOW! 1 ' FOO ACL-MODE!\n' FOO ACL-TTL@ . ' FOO ACL-ALLOW@ . ' FOO ACL-MODE@ .\n", + "-1 ok\nok> ok\nok> 0 -1 0 ok\nok> ", 1 }, + { ": A 1 ; : B 2 ; 1 ' A ACL-MODE! ' A ACL-PIN ' B ACL-PIN ' A ' B ACL-INHERIT\n' B ACL-MODE@ . ' B ACL-PINNED? . ' B ACL-TTL@ . ' B ACL-ALLOW@ .\n", + " ok\nok> 1 0 0 -1 ok\nok> ", 1 }, + { "-5 ' DUP ACL-TTL! ' DUP ACL-TTL@ . 3 ' DUP ACL-MODE! ' DUP ACL-MODE@ .\n", "0 3 ok\nok> ", 1 }, + { "' DUP ACL-TTL@ . ' DUP ACL-MODE@ . ' DUP ACL-ALLOW@ . ' DUP ACL-PINNED? .\n", "0 0 -1 0 ok\nok> ", 1 }, + { ": FOO 65 EMIT ; 5 ' FOO ACL-TTL! 0 ' FOO ACL-ALLOW! 1 2 FOO 66 EMIT\n.S ' FOO ACL-TTL@ .\n", + "\033[33mWARN: \033[0mACL: denied 'FOO'\n ERROR\nok> <0> \n4 ok\nok> ", 1 }, + /* v4's own: the TTL is sixteen bits; a denied word cannot be compiled; with no policy a recheck allows */ + { ": BAZ 67 EMIT ; 0 ' BAZ ACL-ALLOW! BAZ ' BAZ ACL-TTL@ . ' BAZ ACL-ALLOW@ .\n", "C65535 -1 ok\nok> ", 0 }, + { ": FOO 65 EMIT ; 5 ' FOO ACL-TTL! 0 ' FOO ACL-ALLOW! : BAR FOO ; 66 EMIT\nBAR\n' FOO ACL-TTL@ .\n", + "\033[33mWARN: \033[0mACL: denied 'FOO'\n ERROR\nok> UNKNOWN WORD: 'BAR'\n ERROR\nok> 4 ok\nok> ", 0 }, + { ": FOO 65 EMIT ; : BAR FOO ; 5 ' FOO ACL-TTL! 0 ' FOO ACL-ALLOW! BAR\n", "A ok\nok> ", 0 }, + { "99999 ' DUP ACL-TTL! ' DUP ACL-TTL@ . 65535 ' DUP ACL-TTL! ' DUP ACL-TTL@ .\n", "65535 65535 ok\nok> ", 0 }, + { "258 ' DUP ACL-MODE! ' DUP ACL-MODE@ . 0 ' DUP ACL-ALLOW! ' DUP ACL-ALLOW@ .\n7 ' DUP ACL-ALLOW! ' DUP ACL-ALLOW@ . ' DUP ACL-TTL@ .\n", "2 0 ok\nok> -1 0 ok\nok> ", 0 }, + { "7 0 ACL-MODE@ 65 EMIT\n0 ACL-PIN\n1 0 ACL-TTL!\n.S\n", "Not a word\n ERROR\nok> Not a word\n ERROR\nok> Not a word\n ERROR\nok> <2> 7 1 \n ok\nok> ", 0 }, + { ": W1 ; ' W1 ACL-WORD-ID ' W1 = . ' W1 ACL-HEAT@ .\n", "-1 0 ok\nok> ", 0 }, + { ": IM 65 EMIT ; IMMEDIATE 3 ' IM ACL-TTL! 0 ' IM ACL-ALLOW! : U IM ;\n", "\033[33mWARN: \033[0mACL: denied 'IM'\n ERROR\nok> ", 0 }, + { ": P1 ; : P2 ; VOCABULARY VV VV DEFINITIONS : P3 ; FORTH DEFINITIONS\n9 ' P1 ACL-TTL! 1 ' P2 ACL-MODE! ' P2 ACL-PIN VV 9 ' P3 ACL-TTL!\nACL-INIT-PRIMITIVES ' P1 ACL-TTL@ . ' P2 ACL-MODE@ . ' P3 ACL-TTL@ . FORTH\n", + " ok\nok> ok\nok> 0 1 0 ok\nok> ", 0 }, + /* log.v4: v3's lines, colours and all, without its time of day */ + { "LOG-LEVEL@ . LOG-ERROR . LOG-WARN . LOG-INFO . LOG-TEST . LOG-DEBUG .\n", + "2 0 1 2 3 4 ok\nok> ", 1 }, + { "LOG-INFO\" hello info\"\nLOG-WARN\" careful\"\nLOG-ERROR\" bad\"\nLOG-DEBUG\" dbg\"\nLOG-TEST\" tst\"\n", + "\033[32mINFO: \033[0mhello info\n ok\nok> \033[33mWARN: \033[0mcareful\n ok\nok> \033[31mERROR: \033[0mbad\n ok\nok> ok\nok> ok\nok> ", 1 }, + { ": T LOG-INFO\" from a word\" 65 EMIT ; T\n", + "\033[32mINFO: \033[0mfrom a word\nA ok\nok> ", 1 }, + { "S\" a string\" LOG-INFO-STR\nS\" w\" LOG-WARN-STR S\" e\" LOG-ERROR-STR\nS\" d\" LOG-DEBUG-STR S\" t\" LOG-TEST-STR\n", + "\033[32mINFO: \033[0ma string\n ok\nok> \033[33mWARN: \033[0mw\n\033[31mERROR: \033[0me\n ok\nok> ok\nok> ", 1 }, + { "0 LOG-LEVEL! LOG-LEVEL@ . LOG-ERROR\" e0\" LOG-WARN\" w0\"\n", + /* v3 prints the 0 after the message: its log goes to stderr at once and its numbers to stdout when the line ends */ + "0 \033[31mERROR: \033[0me0\n ok\nok> ", 0 }, + { "99 LOG-LEVEL! LOG-LEVEL@ . 4 LOG-LEVEL! LOG-DEBUG\" d\" 5 LOG-LEVEL! LOG-LEVEL@ .\n", "4 \033[34mDEBUG: \033[0md\n4 ok\nok> ", 0 }, + { "7 S\" abc\" LOG-DEBUG-STR 8 PAD -1 LOG-DEBUG-STR .S\n", "<2> 7 8 \n ok\nok> ", 0 }, + { "7 PAD -1 LOG-ERROR-STR 65 EMIT\n.S\n", "\033[31mERROR: \033[0mNegative count\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { "LOG-WARN\" no closing quote\n", "\033[33mWARN: \033[0mno closing quote\n ok\nok> ", 0 }, + { ": L3 LOG-INFO\" abcd\" 65 EMIT LOG-DEBUG\" hidden\" 66 EMIT ; L3 .S\n", "\033[32mINFO: \033[0mabcd\nAB<0> \n ok\nok> ", 0 }, + { "(LOG\")\n", "(LOG\"): compile-only\n ERROR\nok> ", 0 }, + { "1 LOG-LEVEL! LOG-ERROR\" e1\" LOG-WARN\" w1\" LOG-INFO\" i1\"\n", + "\033[31mERROR: \033[0me1\n\033[33mWARN: \033[0mw1\n ok\nok> ", 1 }, + { "2 LOG-LEVEL! LOG-ERROR\" e2\" LOG-WARN\" w2\" LOG-INFO\" i2\" LOG-TEST\" t2\"\n", + "\033[31mERROR: \033[0me2\n\033[33mWARN: \033[0mw2\n\033[32mINFO: \033[0mi2\n ok\nok> ", 1 }, + { "3 LOG-LEVEL! LOG-INFO\" i3\" LOG-TEST\" t3\" LOG-DEBUG\" d3\"\n", + "\033[32mINFO: \033[0mi3\n\033[35mTEST: \033[0mt3\n ok\nok> ", 1 }, + { "-1 LOG-LEVEL! LOG-LEVEL@ .\n", + "0 ok\nok> ", 1 }, + { "LOG-INFO\" \"\n", + "\033[32mINFO: \033[0m\n ok\nok> ", 1 }, + { ": W LOG-ERROR\" e\" LOG-WARN\" w\" LOG-TEST\" t\" ; W 3 LOG-LEVEL! W\n", + "\033[31mERROR: \033[0me\n\033[33mWARN: \033[0mw\n\033[31mERROR: \033[0me\n\033[33mWARN: \033[0mw\n\033[35mTEST: \033[0mt\n ok\nok> ", 1 }, + /* blocks.v4 */ + { "20 BLOCK 1024 BLANK 65 20 BLOCK C! UPDATE SAVE-BUFFERS 20 BLOCK C@ .\n", + "65 ok\nok> ", 1 }, + { "20 BLOCK 1024 BLANK 20 BLOCK 16 65 FILL UPDATE 20 LIST\nSCR @ .\n", + "\nBlock 20\n00: AAAAAAAAAAAAAAAA \n01: \n02: \n03: \n04: \n05: \n06: \n07: \n08: \n09: \n10: \n11: \n12: \n13: \n14: \n15: \n\n ok\nok> 20 ok\nok> ", 1 }, + { "30 BLOCK 1024 BLANK S\" 65 EMIT 66 EMIT\" 30 BLOCK SWAP CMOVE UPDATE 30 LOAD\n", + "AB ok\nok> ", 1 }, + { "30 BLOCK 1024 BLANK S\" 65 EMIT -->\" 30 BLOCK SWAP CMOVE UPDATE\n31 BLOCK 1024 BLANK S\" 66 EMIT\" 31 BLOCK SWAP CMOVE UPDATE 30 LOAD\n", + " ok\nok> AB ok\nok> ", 1 }, + { "30 BLOCK 1024 BLANK S\" 65 EMIT\" 30 BLOCK SWAP CMOVE UPDATE\n31 BLOCK 1024 BLANK S\" 66 EMIT\" 31 BLOCK SWAP CMOVE UPDATE 30 31 THRU\n", + " ok\nok> AB ok\nok> ", 1 }, + { "30 BLOCK 1024 BLANK S\" : SQ DUP * ;\" 30 BLOCK SWAP CMOVE UPDATE 30 LOAD\n7 SQ .\n", + " ok\nok> 49 ok\nok> ", 1 }, + { "30 BLOCK 1024 BLANK S\" 1 2 NOSUCH 3\" 30 BLOCK SWAP CMOVE UPDATE 30 LOAD\n.S\n", + "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> <2> 1 2 \n ok\nok> ", 1 }, + { "20 BLOCK 16 65 FILL EMPTY-BUFFERS 20 BLOCK C@ .\n", + "0 ok\nok> ", 1 }, + { "20 BLOCK 1024 66 FILL UPDATE FLUSH 20 BLOCK C@ .\n", + "66 ok\nok> ", 1 }, + { "20 BLOCK 1024 BLANK 66 20 BLOCK C! UPDATE 21 BLOCK DROP 22 BLOCK DROP\n20 BLOCK C@ .\n", + " ok\nok> 66 ok\nok> ", 1 }, + /* CASE, ['], S", FORGET */ + { ": C1 CASE 1 OF 65 EMIT ENDOF 2 OF 66 EMIT ENDOF 67 EMIT ENDCASE ;\n1 C1 2 C1 3 C1\n.S\n", " ok\nok> ABC ok\nok> <0> \n ok\nok> ", 1 }, + { ": C2 CASE 1 OF 10 ENDOF 2 OF 20 ENDOF DUP 100 + SWAP ENDCASE ;\n1 C2 . 2 C2 . 7 C2 .\n.S\n", " ok\nok> 10 20 107 ok\nok> <0> \n ok\nok> ", 1 }, + { ": C3 CASE ENDCASE ; 5 C3 .S\n", "<0> \n ok\nok> ", 1 }, + { ": T1 11 ; : T2 ['] T1 EXECUTE ; T2 .\n", "11 ok\nok> ", 1 }, + { ": S1 S\" hello\" TYPE ; S1\n", "hello ok\nok> ", 1 }, + { ": S2 S\" abc\" ; S2 . DROP .S\n", "3 <0> \n ok\nok> ", 1 }, + { "S\" xyz\" TYPE\n", "xyz ok\nok> ", 1 }, + { ": A1 1 ; : A2 2 ; : A3 3 ; FORGET A2 A1 .\nA3\nA2\n", "1 ok\nok> UNKNOWN WORD: 'A3'\n ERROR\nok> UNKNOWN WORD: 'A2'\n ERROR\nok> ", 1 }, + { ": L1 [ 5 ] [LITERAL] ; L1 .\n", "5 ok\nok> ", 1 }, + { "CASE\n", "CASE: compile-only\n ERROR\nok> ", 1 }, + /* v4's own */ + { ": C4 CASE 1 OF 65 EMIT ENDCASE ;\n: C5 1 OF ;\n: C6 CASE ENDOF ;\n: C7 ENDCASE ;\n", + "Control structure mismatch\n ERROR\nok> Control structure mismatch\n ERROR\nok> Control structure mismatch\n ERROR\nok> " + "Control structure mismatch\n ERROR\nok> ", 0 }, + { "7 FORGET DUP 65 EMIT\nFORGET NOSUCH\nDUP . .\n", "Protected word\n ERROR\nok> UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> 7 7 ok\nok> ", 0 }, + { ": S3 S\" \" SWAP DROP . S\" ab\" S\" cde\" TYPE TYPE ; S3\n", "0 cdeab ok\nok> ", 0 }, + { ": T3 ['] NOSUCH ;\n['] DUP\n", "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> [']: compile-only\n ERROR\nok> ", 0 }, + /* words.v4 */ + { "1 2 3 4 2SWAP . . . .\n", "2 1 4 3 ok\nok> ", 1 }, + { "1 2 3 4 2OVER . . . . . .\n", "2 1 4 3 2 1 ok\nok> ", 1 }, + { "1 2 3 4 5 6 2ROT . . . . . .\n", "2 1 6 5 4 3 ok\nok> ", 1 }, + { ": T 1 2 2>R 2R@ 2R> . . . . ; T\n", "2 1 2 1 ok\nok> ", 1 }, + { "TRUE . FALSE . 5 INVERT . NOP\n", "-1 0 -6 ok\nok> ", 1 }, + { "VARIABLE X 0 , 11 22 X 2! X 2@ . . X @ .\n", "22 11 11 ok\nok> ", 1 }, + { "VARIABLE Y 10 Y ! 3 Y -! Y @ .\n", "7 ok\nok> ", 1 }, + { "0 0<> . 5 0<> . -5 0<> .\n", "0 -1 -1 ok\nok> ", 1 }, + { "0 0> . 5 0> . -5 0> .\n", "0 -1 0 ok\nok> ", 1 }, + { "1 2 <> . 2 2 <> .\n", "-1 0 ok\nok> ", 1 }, + { "1 2 <= . 2 2 <= . 3 2 <= .\n", "-1 -1 0 ok\nok> ", 1 }, + { "1 2 >= . 2 2 >= . 3 2 >= .\n", "0 -1 -1 ok\nok> ", 1 }, + { "1 2 U< . 2 1 U< . -1 1 U< . 1 -1 U< . 3 3 U< .\n", "-1 0 0 -1 0 ok\nok> ", 1 }, + { "1 2 U> . -1 1 U> . 1 -1 U> .\n", "0 -1 0 ok\nok> ", 1 }, + { "-5 ABS . 5 ABS . 0 ABS .\n", "5 5 0 ok\nok> ", 1 }, + { "3 9 MAX . -3 -9 MAX . 3 9 MIN . -3 -9 MIN .\n", "9 -3 3 -9 ok\nok> ", 1 }, + { "5 0 9 WITHIN . 9 0 9 WITHIN . 0 0 9 WITHIN . 5 9 0 WITHIN . -1 0 9 WITHIN .\n", "-1 0 -1 0 0 ok\nok> ", 1 }, + { "1 4 LSHIFT . 3 0 LSHIFT . 256 4 RSHIFT . 1 1 RSHIFT .\n", "16 3 16 0 ok\nok> ", 1 }, + { "5 0 3 0 D- . . 3 0 5 0 D- . .\n", "0 2 -1 -2 ok\nok> ", 1 }, + { "-5 -1 DABS . . 5 0 DABS . .\n", "0 5 0 5 ok\nok> ", 1 }, + { "0 0 D0= . 1 0 D0= . 0 1 D0= .\n", "-1 0 0 ok\nok> ", 1 }, + { "-1 -1 D0< . 5 0 D0< .\n", "-1 0 ok\nok> ", 1 }, + { "5 0 5 0 D= . 5 0 6 0 D= . 5 0 5 1 D= .\n", "-1 0 0 ok\nok> ", 1 }, + { "3 0 D2* . . -1 0 D2* . .\n", "0 6 1 -2 ok\nok> ", 1 }, + { "6 0 D2/ . . -6 -1 D2/ . .\n", "0 3 -1 -3 ok\nok> ", 1 }, + { "1 0 2 0 D< . 2 0 1 0 D< . -1 -1 0 0 D< . 5 0 5 0 D< .\n", "-1 0 -1 0 ok\nok> ", 1 }, + { "1 0 2 0 DMAX . . 1 0 2 0 DMIN . . -1 -1 3 0 DMAX . . -1 -1 3 0 DMIN . .\n", "0 2 0 1 0 3 -1 -1 ok\nok> ", 1 }, + { "PAD 8 65 FILL PAD 4 + C@ . PAD 7 + C@ .\n", "65 65 ok\nok> ", 1 }, + { "PAD 8 65 FILL PAD 4 ERASE PAD C@ . PAD 4 + C@ .\n", "0 65 ok\nok> ", 1 }, + { "PAD 8 65 FILL PAD 2 + 3 BLANK PAD 8 TYPE 124 EMIT\n", "AA AAA| ok\nok> ", 1 }, + { "PAD 16 32 FILL 97 PAD C! 98 PAD 1+ C! 99 PAD 2+ C!\nPAD 16 -TRAILING . PAD - .\n", " ok\nok> 3 0 ok\nok> ", 1 }, + { "PAD 16 32 FILL 97 PAD C! 98 PAD 1+ C! 99 PAD 2+ C!\nPAD 3 PAD 3 COMPARE . PAD 3 PAD 2 COMPARE . PAD 2 PAD 3 COMPARE .\nPAD 3 PAD 1+ 2 COMPARE .\n", " ok\nok> 0 1 -1 ok\nok> -1 ok\nok> ", 1 }, + { "PAD 16 32 FILL 97 PAD C! 98 PAD 1+ C! 99 PAD 2+ C!\nPAD 16 98 SCAN . PAD - . PAD 16 97 SKIP . PAD - . PAD 16 122 SCAN . PAD - .\n", " ok\nok> 15 1 15 1 0 16 ok\nok> ", 1 }, + { "PAD 16 32 FILL 97 PAD C! 98 PAD 1+ C! 99 PAD 2+ C!\nPAD 16 PAD 1+ 2 SEARCH . . PAD - .\n122 PAD 20 + C! PAD 16 PAD 20 + 1 SEARCH . . PAD - .\n", " ok\nok> -1 15 1 ok\nok> 0 16 0 ok\nok> ", 1 }, + { "PAD 16 32 FILL 97 PAD C! 98 PAD 1+ C! 99 PAD 2+ C!\nPAD PAD 1+ 3 CMOVE> PAD 4 TYPE 124 EMIT\n", " ok\nok> aabc| ok\nok> ", 1 }, + { "PAD 0 65 FILL PAD 0 -TRAILING . DROP PAD 0 PAD 0 COMPARE .\n", "0 0 ok\nok> ", 1 }, + /* v4's own: FORTH-79's MOVE and the standard order for M- (v3's differ), and the errors */ + { "VARIABLE A 1 , 2 , VARIABLE B 0 , 0 , 5 A ! A B 3 MOVE B @ . B 1+ @ . B 2+ @ .\n", "5 1 2 ok\nok> ", 0 }, + { "VARIABLE A 7 A ! A A 0 MOVE A A -3 MOVE A @ .\n", "7 ok\nok> ", 0 }, + { "5 0 3 M- . . 5 0 -7 M- . . 0 0 1 M- . .\n", "0 2 0 12 -1 -1 ok\nok> ", 0 }, + { "5 0 3 M+ . . 5 0 -7 M+ . .\n", "0 8 -1 -2 ok\nok> ", 0 }, + { "0 -1 D0< . -1 0 D0< .\n", "-1 0 ok\nok> ", 0 }, + { "?TERMINAL . 65 EMIT\n?TERMINAL .\n", "-1 A ok\nok> 0 ok\nok> ", 0 }, + { "7 1 -1 LSHIFT 65 EMIT\n.S\n", "Shift count out of range\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { "7 1 -1 RSHIFT 65 EMIT\n.S\n", "Shift count out of range\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { "7 PAD -1 65 FILL 66 EMIT\n.S\n", "Negative count\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { "7 PAD PAD -1 CMOVE> 66 EMIT\n.S\n", "Negative count\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { "PAD 4 65 FILL PAD -5 -TRAILING . DROP PAD -1 PAD -1 COMPARE .\nPAD -3 65 SCAN . DROP\n", "0 0 ok\nok> 0 ok\nok> ", 0 }, + /* v4's own */ + { "5 3 .R 124 EMIT -5 6 .R 124 EMIT 12345 2 .R 124 EMIT\n", " 5| -5|12345| ok\nok> ", 0 }, + { "1234 0 <# # # #S #> TYPE\n", "1234 ok\nok> ", 0 }, + { "-7 DUP 0< IF NEGATE THEN 0 <# #S ROT SIGN #> TYPE\n", "IF: compile-only\n ERROR\nok> ", 0 }, + { ": SN DUP DUP 0< IF NEGATE THEN 0 <# #S ROT SIGN #> TYPE ; -7 SN 7 SN\n", "-77 ok\nok> ", 0 }, + { "65 0 <# 42 HOLD #S 36 HOLD #> TYPE\n", "$65* ok\nok> ", 0 }, + { "2 BASE ! 101 1010 + . DECIMAL\n", "1111 ok\nok> ", 0 }, + { "5 0 D. -1 -1 D. 7 0 4 D.R 124 EMIT\n", "5 -1 7| ok\nok> ", 0 }, + { "36 BASE ! ZZ DECIMAL . 1295 36 BASE ! . DECIMAL\n", "1295 ZZ ok\nok> ", 0 }, + { ": S5 1 2 3 4 5 .S 2DROP 2DROP DROP .S ; S5\n", "<5> 1 2 3 4 5 \n<0> \n ok\nok> ", 0 }, + { "-1 -2 -3 .S\n", "<3> -1 -2 -3 \n ok\nok> ", 0 }, + { "1 2 3 QUIT\nDEPTH 48 + EMIT\n", "\nok> 3 ok\nok> ", 0 }, + { "65 EMIT DROP 66 EMIT\n67 EMIT\n", "AStack underflow\n ERROR\nok> C ok\nok> ", 0 }, + { "+\n1 +\nDUP\nOVER\n1 OVER\n", "Stack underflow\n ERROR\nok> Stack underflow\n ERROR\nok> Stack underflow\n ERROR\nok> " + "Stack underflow\n ERROR\nok> Stack underflow\n ERROR\nok> ", 0 }, + { ": OV 65 EMIT 1000 0 DO I LOOP 66 EMIT ; 7 8 9 OV\nDEPTH 48 + EMIT\n", "AStack overflow\n ERROR\nok> 0 ok\nok> ", 0 }, + { "1 2 3 -1 @\nDEPTH 48 + EMIT\n", "Address out of range\n ERROR\nok> 0 ok\nok> ", 0 }, + { ": RU R> DROP R> DROP ; 65 EMIT RU 66 EMIT\n67 EMIT\n", "AReturn stack underflow\n ERROR\nok> C ok\nok> ", 0 }, + /* a word that runs itself, through EXECUTE, until the return stack is full */ + { "VARIABLE V : RR V @ EXECUTE ; ' RR V ! 65 EMIT RR 66 EMIT\n67 EMIT\n", "AReturn stack overflow\n ERROR\nok> C ok\nok> ", 0 }, + { ": DEEP 65 EMIT BEGIN 1 >R AGAIN ; DEEP\n", "AReturn stack overflow\n ERROR\nok> ", 0 }, + { "65 66 67 1 PICK EMIT EMIT EMIT EMIT\n", "CCBA ok\nok> ", 0 }, + { "65 66 67 2 PICK EMIT EMIT EMIT EMIT\n", "BCBA ok\nok> ", 0 }, + { "65 66 67 3 PICK EMIT EMIT EMIT EMIT\n", "ACBA ok\nok> ", 0 }, + { "65 66 67 1 ROLL EMIT EMIT EMIT\n", "CBA ok\nok> ", 0 }, + { "65 66 67 2 ROLL EMIT EMIT EMIT\n", "BCA ok\nok> ", 0 }, + { "65 66 67 3 ROLL EMIT EMIT EMIT\nDEPTH 48 + EMIT\n", "ACB ok\nok> 0 ok\nok> ", 0 }, + { "65 66 0 PICK\nDEPTH 48 + EMIT\n", "PICK: Invalid index\n ERROR\nok> 2 ok\nok> ", 0 }, + { "65 66 -3 ROLL\n65 66 0 ROLL\n", "ROLL: Invalid index\n ERROR\nok> ROLL: Invalid index\n ERROR\nok> ", 0 }, + { "65 66 3 PICK\nDEPTH 48 + EMIT\n", "Stack underflow\n ERROR\nok> 0 ok\nok> ", 0 }, + { "65 66 5 ROLL\n1 PICK\n", "Stack underflow\n ERROR\nok> Stack underflow\n ERROR\nok> ", 0 }, + { "65 66 67 68 69 5 ROLL EMIT EMIT EMIT EMIT EMIT\n", "AEDCB ok\nok> ", 0 }, + { "65 66 67 68 69 4 ROLL EMIT EMIT EMIT EMIT EMIT\n", "BEDCA ok\nok> ", 0 }, + { ": P5 65 66 67 68 69 5 PICK EMIT 3 PICK EMIT EMIT EMIT EMIT EMIT EMIT ; P5\n", "ACEDCBA ok\nok> ", 0 }, + { ": T1 QUIT ; : T2 1 2 3 4 T1 ; T2\nDEPTH 48 + EMIT\n", "\nok> 4 ok\nok> ", 0 }, + { ": T3 1 2 3 4 5 6 7 8 9 ABORT ; T3\nDEPTH 48 + EMIT\n", " ok\nok> 0 ok\nok> ", 0 }, + { "1 0 0 M/MOD\n", "M/MOD: Division by zero\n ERROR\nok> ", 0 }, + { ": Z0 0 / ; : Z1 65 EMIT 9 Z0 66 EMIT ; Z1\n: Z2 1 IF [ 5 0 MOD ]\nZ2\n", + "A/: Division by zero\n ERROR\nok> MOD: Division by zero\n ERROR\nok> UNKNOWN WORD: 'Z2'\n ERROR\nok> ", 0 }, + { ": Z3 5 0 DO 9 3 I - / DROP LOOP 65 EMIT ; Z3\n66 EMIT\n", "/: Division by zero\n ERROR\nok> B ok\nok> ", 0 }, + { ": BAD 1 NOSUCH 2 ;\nBAD\n65 EMIT\n", "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> UNKNOWN WORD: 'BAD'\n ERROR\nok> A ok\nok> ", 0 }, + { "1 ABORT\" now\" 65 EMIT\n66 EMIT\n", "now\n ok\nok> B ok\nok> ", 0 }, + { ": B1 IF LOOP ;\n65 EMIT\n", "Control structure mismatch\n ERROR\nok> A ok\nok> ", 0 }, + { ": A2 0 ABORT\" boom\" 67 EMIT ; A2\n", "C ok\nok> ", 0 }, + { ": A1 ABORT\" boom\" 65 EMIT ; 1 A1 66 EMIT\n0 A1\n", "boom\n ok\nok> A ok\nok> ", 0 }, + { "1 2 3 QUIT 68 EMIT\n+ + 48 + EMIT\n", "\nok> 6 ok\nok> ", 0 }, + { ": Q1 QUIT ; : Q2 65 EMIT Q1 66 EMIT ; : Q3 Q2 67 EMIT ; Q3 68 EMIT\n69 EMIT\n", "A\nok> E ok\nok> ", 0 }, + { ": HALF 1 2 [ QUIT\n65 EMIT\nHALF\n", "\nok> A ok\nok> UNKNOWN WORD: 'HALF'\n ERROR\nok> ", 0 }, + { ": HALF 1 2 [ ABORT\n65 EMIT\n", " ok\nok> A ok\nok> ", 0 }, + /* every error stops the line at once, says what it was, and leaves the data stack (D-18) */ + { "1 2 3 PAD PAD -1 CMOVE 65 EMIT\n66 EMIT .S\n", "Negative count\n ERROR\nok> B<3> 1 2 3 \n ok\nok> ", 0 }, + { "7 PAD -5 TYPE 65 EMIT\n.S\n", "Negative count\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + /* NUMBER takes a counted string: "-12" and "-1x", built at PAD */ + { "3 PAD C! 45 PAD 1+ C! 49 PAD 2+ C! 50 PAD 3 + C! 0 PAD 4 + C! PAD NUMBER D.\n", "-12 ok\nok> ", 0 }, + { "3 PAD C! 45 PAD 1+ C! 49 PAD 2+ C! 120 PAD 3 + C! 7 PAD NUMBER 65 EMIT\n.S\n", "Not a number\n ERROR\nok> <3> 7 0 0 \n ok\nok> ", 0 }, + { "7 <# 300 HOLD 65 EMIT\n.S\n", "Not a character\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { ": HH <# 70 0 DO 65 HOLD LOOP ; HH 66 EMIT\n67 EMIT\n", "Number too long\n ERROR\nok> C ok\nok> ", 0 }, + { "7 : \n.S\n", "Name missing\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { "VARIABLE\nCREATE\n5 CONSTANT\n", "Name missing\n ERROR\nok> Name missing\n ERROR\nok> Name missing\n ERROR\nok> ", 0 }, + { "7 ' NOSUCH 65 EMIT\n.S\n", "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> <1> 7 \n ok\nok> ", 0 }, + { ": X1 COMPILE NOSUCH ;\n: X2 [COMPILE] NOPE ;\n65 EMIT\n", "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> UNKNOWN WORD: 'NOPE'\n ERROR\nok> A ok\nok> ", 0 }, + { ": X3 THEN ;\n: X4 BEGIN IF UNTIL ;\n: X5 DO REPEAT ;\n", "Control structure mismatch\n ERROR\nok> Control structure mismatch\n ERROR\nok> " + "Control structure mismatch\n ERROR\nok> ", 0 }, + { ": X6 IF IF IF IF IF IF IF IF IF IF IF IF IF IF IF IF IF 65 EMIT ;\n66 EMIT\n", "Control structures too deep\n ERROR\nok> B ok\nok> ", 0 }, + { ".\" no closing quote\n65 EMIT\n", "no closing quote ok\nok> A ok\nok> ", 0 }, + { ".\" \"\n", " ok\nok> ", 0 }, + { ": T ABORT\" \" ; 1 T\n", "\n ok\nok> ", 0 }, + { "5 >R\n;\n", ">R: compile-only\n ERROR\nok> ;: compile-only\n ERROR\nok> ", 0 }, + { "16 BASE ! FF 2/ 2/ EMIT\n", "? ok\nok> ", 0 }, +}; +#define NSCRIPT (sizeof script / sizeof script[0]) + +int main(void) +{ + unsigned i; + + printf("v4 host prompt tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + CHECK(storage_made(), "the chains behind the storage port are made"); + + { + static const char *const files[] = { "core.v4", "input.v4", "dict.v4", "codegen.v4", "compile.v4", "quit.v4", "forth.v4", "numout.v4", "words.v4", "system.v4", "qmath.v4", "blocks.v4", "log.v4", "acl.v4" }; + CHECK(host_load(&tx, &n, files, 14), "the capsule assembles"); + } + CHECK(v4_text_finish(&tx), "everything is defined: %s", v4_text_error(&tx)); + CHECK(v4_text_here(&tx) < DICT_W, "code stays below the dictionary space"); + printf(" capsule: %ld words\n", (long)v4_text_here(&tx) - 16); + if (failures) { printf(" %d checks, %d failures\n", checks, failures); return 1; } + w_idle = v4_text_word(&tx, "(IDLE)"); + w_key = v4_text_word(&tx, "KEY"); + w_key_end = v4_text_word(&tx, "CR"); /* the word after KEY in core.v4 */ + w_fault = v4_text_word(&tx, "(FAULTS)"); + capsule_latest = v4_text_latest(&tx); + CHECK(w_key_end > w_key && w_key_end - w_key <= 12, "KEY is the few words before CR"); + + /* ---- switch-on ---- */ + boot(); + CHECK(node_idle() && n.mem[OUT_PTR] == OUT_W, "the node is waiting at its ports and has printed nothing: the prompt is its console's"); + { v4_uheat_t clock = es.anticlock; + CHECK(run_line(5000) == 0 && es.anticlock == clock, "and goes on waiting, executing nothing"); } + CHECK(canary_under_expect(), "with the data stack as it found it"); + (void)v4_exec_step_word(&n, &es, &h); + CHECK(node_idle(), "it stays waiting however long it is run"); + + /* ---- the sessions ---- */ + for (i = 0; i < NSCRIPT; i++) { + const transcript *t = &script[i]; + boot_bare(); + CHECK(is(say(t->in), t->want), "%ssession %u", t->v3 ? "v3: " : "", i); + CHECK(n.mem[STATE] == 0, "session %u ends interpreting", i); + } + + /* ---- one line at a time: the node keeps its state between them ---- */ + boot(); + CHECK(is(say("VARIABLE V 7 V !\n"), " ok\nok> "), "a variable is set on one line"); + CHECK(is(say(": SHOW V @ 48 + EMIT ;\n"), " ok\nok> "), "a word defined on the next"); + CHECK(is(say("SHOW 1 V +! SHOW\n"), "78 ok\nok> "), "and both used on a third"); + CHECK(is(say("1 2 3 4 5 6\n"), " ok\nok> ") && is(say("+ + + + + 48 + EMIT\n"), "E ok\nok> "), "six values wait on the stack between lines"); + CHECK(is(say("SHOW"), ""), "nothing happens until the line is ended"); + CHECK(is(say(" SHOW\n"), "88 ok\nok> "), "and then all of it is read"); + CHECK(canary_under_expect(), "the data stack is as it was at switch-on"); + + /* ---- a definition over several lines, and an error in the middle of one ---- */ + boot(); + CHECK(is(say(": LONG\n"), " ok\nok> ") && n.mem[STATE] != 0, "a line that leaves a definition open still says ok"); + CHECK(is(say("65 EMIT\n"), " ok\nok> ") && is(say("66 EMIT ;\n"), " ok\nok> ") && n.mem[STATE] == 0, "it is finished two lines later"); + CHECK(is(say("LONG\n"), "AB ok\nok> "), "and runs"); + CHECK(is(say(": BROKEN 1 IF\n"), " ok\nok> ") && n.mem[STATE] != 0 && n.mem[CFP] != CFS_W, "a definition with an IF open"); + CHECK(is(say("NOSUCH\n"), "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> ") && n.mem[STATE] == 0 && n.mem[CFP] == CFS_W, + "an error ends it and empties the control-flow stack"); + CHECK(is(say("BROKEN\n"), "UNKNOWN WORD: 'BROKEN'\n ERROR\nok> "), "and it was never defined"); + CHECK(is(say("LONG\n"), "AB ok\nok> "), "what was defined before is still there"); + + /* ---- QUIT, ABORT and a failed line each end a definition that is open ---- */ + boot(); + CHECK(is(say(": IQ QUIT ; IMMEDIATE : IA ABORT ; IMMEDIATE\n"), " ok\nok> "), "QUIT and ABORT as immediate words"); + CHECK(is(say(": H1 1 IF IQ\n"), "\nok> ") && n.mem[STATE] == 0 && n.mem[CFP] == CFS_W, "QUIT while compiling stops compiling"); + CHECK(is(say("65 EMIT\n"), "A ok\nok> ") && is(say("H1\n"), "UNKNOWN WORD: 'H1'\n ERROR\nok> "), "and the definition is gone"); + CHECK(is(say(": H2 1 IF IA\n"), " ok\nok> ") && n.mem[STATE] == 0 && n.mem[CFP] == CFS_W, "ABORT while compiling stops compiling"); + CHECK(is(say("66 EMIT\n"), "B ok\nok> ") && is(say("H2\n"), "UNKNOWN WORD: 'H2'\n ERROR\nok> "), "and the definition is gone"); + CHECK(is(say(": H3 1 IF [ PAD PAD -1 CMOVE ]\n"), "Negative count\n ERROR\nok> ") && n.mem[STATE] == 0 && n.mem[CFP] == CFS_W, + "a word that raises an error while a definition is open ends it"); + CHECK(is(say("67 EMIT\n"), "C ok\nok> ") && is(say("H3\n"), "UNKNOWN WORD: 'H3'\n ERROR\nok> "), "and the definition is gone"); + CHECK(is(say(": H4 68 EMIT ; H4\n"), "D ok\nok> "), "the next definition compiles and runs"); + + /* ---- an address outside memory (D-14): a message, ERROR, and the prompt ---- */ + { + static const char *const lines[] = { + "65 EMIT -1 @ 66 EMIT\n", "65 EMIT 5 -1 ! 66 EMIT\n", "65 EMIT 16384 @ 66 EMIT\n", "65 EMIT 5 16384 ! 66 EMIT\n", + "65 EMIT 99999999 C@ 66 EMIT\n", "65 EMIT 7 -4 C! 66 EMIT\n", "65 EMIT -1 EXECUTE 66 EMIT\n", "65 EMIT 1 -1 +! 66 EMIT\n", + "65 EMIT PAD -8 4 CMOVE 66 EMIT\n", "65 EMIT -9 COUNT 66 EMIT\n", "65 EMIT -9 3 TYPE 66 EMIT\n", + ": F0 -1 @ ; : F1 F0 ; : F2 F1 ; : F3 65 EMIT F2 66 EMIT ; F3 67 EMIT\n", + ": G0 9 0 DO I 3 = IF 0 -1 ! THEN LOOP ; : G1 65 EMIT G0 66 EMIT ; G1\n", + }; + boot(); + for (i = 0; i < sizeof lines / sizeof lines[0]; i++) { + unsigned before = n.faults; + CHECK(is(say(lines[i]), "AAddress out of range\n ERROR\nok> "), "fault %u", i); + CHECK(n.faults == before + 1 && !n.stopped && n.mem[STATE] == 0, "fault %u: one fault, and the node is at its prompt", i); + CHECK(is(say("1 2 + 48 + EMIT\n"), "3 ok\nok> "), "and the next line runs, after fault %u", i); + } + CHECK(is(say("16383 @ DROP 0 @ DROP 67 EMIT\n"), "C ok\nok> "), "the first and last words of memory are not faults"); + CHECK(is(say(": H5 1 IF [ -1 @ ]\n"), "Address out of range\n ERROR\nok> ") && n.mem[STATE] == 0 && n.mem[CFP] == CFS_W, + "a fault while a definition is open ends it"); + CHECK(is(say("H5\n"), "UNKNOWN WORD: 'H5'\n ERROR\nok> ") && is(say(": H6 68 EMIT ; H6\n"), "D ok\nok> "), "and the next definition compiles and runs"); + CHECK(v4_node_guards_intact(&n), "guards intact after the faults"); + } + + /* ---- the text is in the definition, a counted string after the call ---- */ + boot(); + for (v4_cell k = n.mem[DP] / 4; k < DICT_END_W; k++) n.mem[k] = (v4_cell)-1; /* memory that was not zero */ + CHECK(is(say(": T .\" ABCDE\" ;\n"), " ok\nok> "), "a word that prints five characters"); + { + v4_cell xt = n.mem[LATEST]; + CHECK((uint32_t)n.mem[xt + 1] == (5u | ('A' << 8) | ('B' << 16) | ((uint32_t)'C' << 24)) && (uint32_t)n.mem[xt + 2] == ('D' | ('E' << 8)), + "the count and the characters follow the call, four to a cell, zeros after"); + CHECK((n.mem[DP] + 3) / 4 == xt + 4, "then the rest of the word: four cells in all"); + } + /* every length from 0 to 12: the word goes on at the right cell */ + for (i = 0; i <= 12; i++) { + char line[96], want[32]; + boot(); + snprintf(line, sizeof line, ": T 60 EMIT .\" %.*s\" 62 EMIT ; T\n", (int)i, "abcdefghijkl"); + snprintf(want, sizeof want, "<%.*s> ok\nok> ", (int)i, "abcdefghijkl"); + CHECK(is(say(line), want), ".\" with %u characters", i); + snprintf(line, sizeof line, ": U 60 EMIT ABORT\" %.*s\" 62 EMIT ; 0 U 1 U 33 EMIT\n", (int)i, "abcdefghijkl"); + snprintf(want, sizeof want, "<><%.*s\n ok\nok> ", (int)i, "abcdefghijkl"); + CHECK(is(say(line), want), "ABORT\" with %u characters, false then true", i); + } + /* 76 characters after ." and a space make a line of 80. That was the most + * the node's own QUERY would take; a line the host hands over is whole. */ + { + char line[128], want[128], text[80]; + for (i = 0; i < 76; i++) text[i] = (char)('#' + i); /* no " in it */ + text[76] = 0; + boot(); + snprintf(line, sizeof line, ".\" %s\"\n", text); + snprintf(want, sizeof want, "%s ok\nok> ", text); + CHECK(is(say(line), want), "a string that fills an 80-character line"); + boot(); + snprintf(line, sizeof line, ".\" %s\"\n", text + 1); + snprintf(want, sizeof want, "%s ok\nok> ", text + 1); + CHECK(is(say(line), want), "and one that fills a 79-character line"); + } + + /* ---- a line is handed over whole, up to 1024 characters: a block, as v3 ---- */ + boot(); + { + static char line[1100]; + memset(line, ' ', 100); + memcpy(line, "65 EMIT", 7); + memcpy(line + 70, "66 EMIT", 7); + memcpy(line + 80, "67 EMIT 68 EMIT", 15); + line[100] = '\n'; line[101] = 0; + CHECK(is(say(line), "ABCD ok\nok> "), "a line of 100 characters is one line"); + + boot(); + memset(line, ' ', 1024); + memcpy(line, "65 EMIT", 7); + memcpy(line + 1017, "66 EMIT", 7); + line[1024] = '\n'; line[1025] = 0; + CHECK(is(say(line), "AB ok\nok> "), "a line of 1024 characters is interpreted to its end"); + + boot(); + memset(line, ' ', 1025); + memcpy(line, "65 EMIT", 7); + line[1025] = '\n'; line[1026] = 0; + CHECK(is(say(line), "(line too long)"), "one of 1025 is not taken: the node's input buffer holds a block"); + CHECK(node_idle() && n.mem[OUT_PTR] == OUT_W, "and nothing of it was sent"); + } + + /* ---- ABORT and QUIT from deep in a programme, again and again ---- */ + boot(); + CHECK(is(say(": A0 ABORT ; : A1 A0 ; : A2 A1 ; : A3 A2 ; : A4 A3 ; : A5 A4 ;\n"), " ok\nok> "), "ABORT six calls down"); + CHECK(is(say(": Q0 QUIT ; : Q1 Q0 ; : Q2 Q1 ; : Q3 Q2 ; : Q4 Q3 ; : Q5 Q4 ;\n"), " ok\nok> "), "QUIT six calls down"); + CHECK(is(say(": L0 10 0 DO I 5 = IF ABORT THEN LOOP ; : L1 3 0 DO L0 LOOP ;\n"), " ok\nok> "), "ABORT inside two loops"); + for (i = 0; i < 40; i++) { + CHECK(is(say("65 EMIT A5 66 EMIT\n"), "A ok\nok> "), "ABORT from six deep, time %u", i); + CHECK(is(say("67 EMIT Q5 68 EMIT\n"), "C\nok> "), "QUIT from six deep, time %u", i); + CHECK(is(say("L1 69 EMIT\n"), " ok\nok> "), "ABORT out of two loops, time %u", i); + CHECK(is(say(": SQ DUP * ; 7 SQ EMIT\n"), "1 ok\nok> "), "and the next line compiles and runs, time %u", i); + } + CHECK(is(say("DEPTH 48 + EMIT\n"), "0 ok\nok> "), "ABORT has emptied the data stack"); + + /* ---- how deep words may call each other from the prompt ---- + * The prompt's call of INTERPRET is one return entry, so a chain of words + * one shorter than the return stack runs, and the next is a fault. */ + { + unsigned deepest = 0; + char line[64], want[16]; + boot(); + CHECK(is(say(": N0 1+ ;\n"), " ok\nok> "), "a word that calls nothing"); + for (i = 1; i <= V4_RET_DEPTH; i++) { + snprintf(line, sizeof line, ": N%u N%u 1+ ;\n", i, i - 1u); + CHECK(is(say(line), " ok\nok> "), "and one that calls it, %u deep", i + 1u); + } + for (i = 0; i <= V4_RET_DEPTH; i++) { + snprintf(line, sizeof line, "33 N%u EMIT 33 EMIT\n", i); + snprintf(want, sizeof want, "%c! ok\nok> ", (char)(34 + i)); + if (strcmp(say(line), want) != 0) break; + deepest = i + 1; + } + printf(" from the prompt, words may call each other %u deep\n", deepest); + CHECK(deepest == V4_RET_DEPTH - 1u, "a word run from the prompt has all the return stack but the prompt's one entry"); + CHECK(is(out, "Return stack overflow\n ERROR\nok> "), "and one more is reported"); + } + + /* ---- the exits, taken with the return stack full ---- + * RR runs itself through EXECUTE; each level holds one return entry, and + * EXECUTE one more while it starts the next. With C at its largest and + * one >R besides, there is room for exactly the action's own call. An + * exit that did not empty the return stack before it printed would + * overflow it. */ + { + static const struct { const char *action, *want; } e[] = { + { "1 ABORT\" x\"", "x\n ok\nok> " }, + { "5 0 PICK", "PICK: Invalid index\n ERROR\nok> " }, + { "5 0 ROLL", "ROLL: Invalid index\n ERROR\nok> " }, + { "5 0 /", "/: Division by zero\n ERROR\nok> " }, + { "5 5 0 */MOD", "*/MOD: Division by zero\n ERROR\nok> " }, + { "ABORT", " ok\nok> " }, + { "QUIT", "\nok> " }, + }; + char line[96]; + for (i = 0; i < sizeof e / sizeof e[0]; i++) { + boot_bare(); + CHECK(is(say("VARIABLE V VARIABLE C\n"), " ok\nok> "), "two variables"); + snprintf(line, sizeof line, ": RR C @ 1- DUP C ! IF V @ EXECUTE EXIT THEN 1 >R %s ;\n", e[i].action); + CHECK(is(say(line), " ok\nok> "), "a word that runs itself C times and then: %s", e[i].action); + snprintf(line, sizeof line, "' RR V ! %u C ! RR\n", (unsigned)(V4_RET_DEPTH - 3u)); + CHECK(is(say(line), e[i].want), "%s with the return stack full", e[i].action); + CHECK(n.faults == 0, "%s: and it was not a fault", e[i].action); + CHECK(is(say("65 EMIT\n"), "A ok\nok> "), "and the next line runs"); + /* one level more and the action's own call does not fit */ + snprintf(line, sizeof line, "%u C ! RR\n", (unsigned)(V4_RET_DEPTH - 2u)); + CHECK(is(say(line), "Return stack overflow\n ERROR\nok> "), "%s one level deeper is a return stack overflow", e[i].action); + } + } + + /* ---- the data stack, full ---- + * P1 P2 P4 P8 P16 push that many values and call nothing while they do, so + * a word can fill the stack to any depth in a short line. */ + { + char line[128], want[32], fill[64]; + unsigned c, bit; +#define FILL(count) do { size_t at_ = 0; fill[0] = 0; \ + for (c = (count), bit = 16; bit; bit >>= 1) if (c >= bit) { at_ += (size_t)snprintf(fill + at_, sizeof fill - at_, "P%u ", bit); c -= bit; } \ + for (; c >= 16; c -= 16) at_ += (size_t)snprintf(fill + at_, sizeof fill - at_, "P16 "); } while (0) + boot_bare(); + CHECK(is(say(": P1 7 ; : P2 7 7 ; : P4 7 7 7 7 ; : P8 7 7 7 7 7 7 7 7 ;\n"), " ok\nok> ") + && is(say(": P16 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ;\n"), " ok\nok> "), "words that push 1, 2, 4, 8 and 16 values"); + /* 65, then DEPTH-2 more, then n = DEPTH-1: the stack is full when PICK and ROLL start */ + FILL(V4_DATA_DEPTH - 2u); + snprintf(line, sizeof line, ": PF 65 %s%u PICK >R DROP R> EMIT ABORT ; PF\n", fill, (unsigned)(V4_DATA_DEPTH - 1u)); + CHECK(is(say(line), "A ok\nok> ") && n.faults == 0, "PICK of the deepest value of a full stack"); + snprintf(line, sizeof line, ": RF 65 %s%u ROLL EMIT DROP DEPTH 33 + EMIT ABORT ; RF\n", fill, (unsigned)(V4_DATA_DEPTH - 1u)); + snprintf(want, sizeof want, "A%c ok\nok> ", (char)(33 + V4_DATA_DEPTH - 3u)); + CHECK(is(say(line), want) && n.faults == 0, "ROLL of the deepest value of a full stack"); + /* exactly full is not a fault; one more is */ + FILL(V4_DATA_DEPTH); + snprintf(line, sizeof line, ": F1 %s2DROP ABORT ; F1\n", fill); + CHECK(is(say(line), " ok\nok> ") && n.faults == 0, "a stack exactly full is not a fault"); + snprintf(line, sizeof line, ": F2 %s7 ; F2\n", fill); + CHECK(is(say(line), "Stack overflow\n ERROR\nok> ") && n.fault_kind == V4_FAULT_DATA_OVER, "one value more is"); + CHECK(is(say("DEPTH 48 + EMIT\n"), "0 ok\nok> "), "and the stack is empty afterwards"); +#undef FILL + } + + /* and with text printed at the bottom of the chain */ + boot(); + CHECK(is(say(": P0 .\" deep\" ; : P1 P0 ; : P2 P1 ; : P3 P2 ; : P4 P3 ; P4\n"), "deep ok\nok> "), ".\" five calls down"); + + /* ---- how many values may wait on the stack from one line to the next ---- */ + { + unsigned k, most = 0; + for (k = 1; k < V4_DATA_DEPTH; k++) { + char line[4 * V4_DATA_DEPTH + 16], want[16]; + size_t at = 0; + unsigned m; + boot_bare(); + for (m = 0; m < k; m++) at += (size_t)snprintf(line + at, sizeof line - at, "1 "); + snprintf(line + at, sizeof line - at, "\n"); + if (strcmp(say(line), " ok\nok> ") != 0) break; + for (at = 0, m = 1; m < k; m++) at += (size_t)snprintf(line + at, sizeof line - at, "+ "); + snprintf(line + at, sizeof line - at, "32 + EMIT\n"); + snprintf(want, sizeof want, "%c ok\nok> ", (char)(32 + k)); + if (strcmp(say(line), want) != 0) break; + most = k; + } + printf(" %u values may wait on the stack while the next line is typed and interpreted\n", most); + CHECK(most + 4u >= V4_DATA_DEPTH, "the prompt and the interpreter take no more than four cells of the stack"); + } + + /* ---- how much of the data stack a line has ---- */ + { + unsigned d; + for (d = 0; d < V4_DATA_DEPTH; d++) { + unsigned k, good = 1; + boot_with(d + 1); + if (strcmp(say(": Z1 .\" x\" 1 2 + ; Z1 Z1 + 48 + EMIT\n"), "xx6 ok\nok> ") != 0) break; + if (!canary_under_expect()) break; + for (k = d + 1; k-- > 0; ) if (v4_dstack_pop(&n.ds) != (v4_cell)(0x5A000000 + k)) good = 0; + if (!good) break; + } + printf(" defining and running a word from the prompt leaves %u data cells under it untouched\n", d); + CHECK(d >= 3, "the prompt leaves room on the data stack"); + } + + /* ---- numbers at the ends of the range, which depend on the cell width ---- */ + boot_bare(); +#if V4_CELL_BITS == 32 + CHECK(is(say("-1 U. -2147483648 . 2147483647 .\n"), "4294967295 -2147483648 2147483647 ok\nok> "), "the largest and smallest numbers"); + CHECK(is(say("HEX -1 U. DECIMAL\n"), "FFFFFFFF ok\nok> ") && is(say("2 BASE ! -1 U. DECIMAL\n"), "11111111111111111111111111111111 ok\nok> "), "in hex and in binary"); +#else + CHECK(is(say("-1 U.\n"), "18446744073709551615 ok\nok> "), "the largest number (as v3)"); + CHECK(is(say("-9223372036854775808 . 9223372036854775807 .\n"), "-9223372036854775808 9223372036854775807 ok\nok> "), "the smallest and largest signed"); + CHECK(is(say("HEX -1 U. DECIMAL\n"), "FFFFFFFFFFFFFFFF ok\nok> "), "in hex"); + /* 64 binary digits are one more than the hold buffer's 63 (D-13): an error, and nothing is printed */ + CHECK(is(say("2 BASE ! -1 U. DECIMAL\n"), "Number too long\n ERROR\nok> "), "in binary, its 64 digits are one too many"); + CHECK(is(say("DECIMAL\n"), " ok\nok> "), "(back to decimal)"); + CHECK(is(say("9223372036854775807 2 BASE ! U. DECIMAL\n"), "111111111111111111111111111111111111111111111111111111111111111 ok\nok> "), "a 63-digit number prints whole"); +#endif + /* the shifts, to the last bit */ + { + char line[96], want[64]; + boot_bare(); + snprintf(line, sizeof line, "1 %d LSHIFT .\n", V4_CELL_BITS); + CHECK(is(say(line), "Shift count out of range\n ERROR\nok> "), "a shift by the cell's width is out of range"); + snprintf(line, sizeof line, "1 %d LSHIFT 0< . -1 %d RSHIFT . -8 1 RSHIFT 2* 8 + .\n", V4_CELL_BITS - 1, V4_CELL_BITS - 1); + CHECK(is(say(line), "-1 1 0 ok\nok> "), "a shift by one less reaches the top bit, and RSHIFT brings zeros in"); + snprintf(line, sizeof line, "-1 1 RSHIFT .\n"); +#if V4_CELL_BITS == 32 + snprintf(want, sizeof want, "2147483647 ok\nok> "); +#else + snprintf(want, sizeof want, "9223372036854775807 ok\nok> "); +#endif + CHECK(is(say(line), want), "-1 1 RSHIFT is the largest positive number"); + } + + /* .S works on the stack it is printing, so it needs some of it free */ + { + char line[4 * V4_DATA_DEPTH + 16], want[8 * V4_DATA_DEPTH + 32]; + unsigned k, m, most = 0; + for (k = 1; k < V4_DATA_DEPTH; k++) { + size_t at = 0, wt; + boot_bare(); + for (m = 0; m < k; m++) at += (size_t)snprintf(line + at, sizeof line - at, "7 "); + snprintf(line + at, sizeof line - at, "\n"); + if (strlen(line) > 80 || strcmp(say(line), " ok\nok> ") != 0) break; + wt = (size_t)snprintf(want, sizeof want, "<%u> ", k); + for (m = 0; m < k; m++) wt += (size_t)snprintf(want + wt, sizeof want - wt, "7 "); + snprintf(want + wt, sizeof want - wt, "\n ok\nok> "); + if (strcmp(say(".S\n"), want) != 0) break; + snprintf(want, sizeof want, "%u ok\nok> ", k); + CHECK(is(say("DEPTH .\n"), want), "after .S the %u values are still there", k); + most = k; + } + printf(" .S prints a stack of up to %u values; it needs %u cells free\n", most, (unsigned)V4_DATA_DEPTH - most); + CHECK(most + 8u >= V4_DATA_DEPTH, ".S works with all but eight cells of the stack in use"); + } + + /* ---- nested CASE, by value ---- */ + boot_bare(); + CHECK(is(say(": IN CASE 1 OF 65 ENDOF 2 OF 66 ENDOF 63 SWAP ENDCASE ;\n"), " ok\nok> ") + && is(say(": OUT CASE 1 OF IN ENDOF 2 OF DROP 90 ENDOF DROP 33 SWAP ENDCASE EMIT ;\n"), " ok\nok> "), "a CASE that calls a CASE"); + CHECK(is(say("1 1 OUT 2 1 OUT 9 1 OUT 5 2 OUT 5 7 OUT .S\n"), "AB?Z!<0> \n ok\nok> "), "every path through both"); + CHECK(is(say(": NC CASE 1 OF CASE 5 OF 65 ENDOF 66 SWAP ENDCASE ENDOF 67 SWAP ENDCASE EMIT ;\n"), " ok\nok> ") + && is(say("5 1 NC 6 1 NC 7 2 NC .S\n"), "ABC<1> 7 \n ok\nok> "), "a CASE inside a clause of a CASE"); + + /* ---- FORGET gives the space back, and FENCE protects ---- */ + boot_bare(); + { + v4_cell dp0 = n.mem[DP], latest0 = n.mem[LATEST]; + CHECK(is(say(": F1 1 ; VARIABLE F2 : F3 F1 F2 ;\n"), " ok\nok> ") && n.mem[DP] > dp0, "three words"); + CHECK(is(say("FORGET F1\n"), " ok\nok> ") && n.mem[DP] == dp0 && n.mem[LATEST] == latest0, "FORGET of the first puts HERE and LATEST back where they were"); + CHECK(is(say(": G1 65 EMIT ; : G2 66 EMIT ;\n"), " ok\nok> ") && is(say("HERE FENCE ! : G3 67 EMIT ;\n"), " ok\nok> "), "two words, the fence, and a third"); + CHECK(is(say("FORGET G2\n"), "Protected word\n ERROR\nok> ") && is(say("G1 G2 G3\n"), "ABC ok\nok> "), "a word below the fence cannot be forgotten"); + CHECK(is(say("FORGET G3 G1 G2\n"), "AB ok\nok> ") && is(say("G3\n"), "UNKNOWN WORD: 'G3'\n ERROR\nok> "), "one above it can"); + } + + /* ---- POST's runner: the kernel feeds a case and judges it from outside (NUCLEUS.md 6.3) ---- */ + { + static const long long three[] = { 3 }, four[] = { 4 }, two_vals[] = { 3, 3 }, seven[] = { 7 }, ab[] = { 1, 2 }; + static char big[2100]; + boot(); + CHECK(post_one("add.right", "1 2 +", 0, V4_POST_STACK, three, 1, "") == 1 && strstr(post_said, "POST FAIL") == NULL + && strstr(post_said, "PARITY:V4_POST tests=1 pass=1 fail=0\n") != NULL, "a case that leaves what the table has passes, and the tally says so: \"%s\"", post_said); + CHECK(post_one("add.wrong", "1 2 +", 0, V4_POST_STACK, four, 1, "") == 0 && strstr(post_said, "POST FAIL: add.wrong ") != NULL && strstr(post_said, "stack<3 >") != NULL + && strstr(post_said, "PARITY:V4_POST tests=1 pass=0 fail=1\n") != NULL, "one that leaves another value fails, by name, with the stack it left: \"%s\"", post_said); + CHECK(post_one("add.depth", "1 2 +", 0, V4_POST_STACK, two_vals, 2, "") == 0, "one that leaves fewer values than the table has fails"); + CHECK(post_one("two.order", "1 2", 0, V4_POST_STACK, ab, 2, "") == 1 && post_one("two.swapped", "2 1", 0, V4_POST_STACK, ab, 2, "") == 0, "the stack is compared in order, the deepest first"); + CHECK(post_one("dot.right", "5 DUP . . CR", 0, V4_POST_STACK, 0, 0, "5 5 \n") == 1, "what a case prints is compared"); + CHECK(strstr(post_said, "5 5") == NULL, "and what a passing case prints does not reach the console: \"%s\"", post_said); + CHECK(post_one("emit.wrong", "65 EMIT", 0, V4_POST_STACK, 0, 0, "B") == 0 && strstr(post_said, "POST FAIL: emit.wrong out") != NULL, "one that prints another character fails, with what it printed: \"%s\"", post_said); + CHECK(post_one("emit.short", "65 EMIT 66 EMIT", 0, V4_POST_STACK, 0, 0, "A") == 0 && post_one("emit.long", "65 EMIT", 0, V4_POST_STACK, 0, 0, "AB") == 0, "and one that prints more, or less"); + CHECK(post_one("err.right", "NOSUCHWORD", 0, V4_POST_ERROR, 0, 0, "") == 1, "a case that must end in an error and does passes"); + CHECK(strstr(post_said, "UNKNOWN") == NULL, "and the message of an expected error does not reach the console"); + CHECK(post_one("err.none", "1 2 +", 0, V4_POST_ERROR, 0, 0, "") == 0, "one that must end in an error and does not fails"); + CHECK(post_one("err.unwanted", "NOSUCHWORD", 0, V4_POST_STACK, 0, 0, "") == 0, "one that ends in an error and must not fails"); + CHECK(post_one("err.first", "NOSUCHWORD", "1 DROP", V4_POST_ERROR, 0, 0, "") == 1, "a case has ended in an error if any of its lines did"); + CHECK(post_one("two.lines", ": PQ 7 ;", "PQ", V4_POST_STACK, seven, 1, "") == 1, "a case of two lines is judged on what both leave"); + CHECK(is(say("PQ .\n"), "7 ok\nok> "), "and what a case defines stays on the node"); + CHECK(post_one("here.depth", "HERE", 0, V4_POST_DEPTH, 0, 1, "") == 1 && post_one("here.depth2", "HERE", 0, V4_POST_DEPTH, 0, 2, "") == 0, "a case may be checked for how many values it leaves and no more"); + CHECK(post_one("here.out", "HERE 65 EMIT", 0, V4_POST_DEPTH_OUTPUT, 0, 1, "A") == 1 && post_one("here.out2", "HERE 65 EMIT", 0, V4_POST_DEPTH_OUTPUT, 0, 1, "B") == 0, "or for that and what it prints"); + CHECK(post_one("depth.noout", "HERE 65 EMIT", 0, V4_POST_DEPTH, 0, 1, "") == 1, "a case checked for depth alone may print what it likes"); + + /* the state every case starts from */ + CHECK(is(say("1 2 3 HEX\n"), " ok\nok> "), "the node is left in HEX with three values on its stack"); + CHECK(post_one("state", "10 .", 0, V4_POST_STACK, 0, 0, "10 ") == 1, "a case still starts in decimal with nothing on the stack"); + post_state_fails = 1; + CHECK(post_one("state.bad", "1 2 +", 0, V4_POST_STACK, three, 1, "") == 0 && strstr(post_said, "POST FAIL: state.bad ") != NULL, "if the state cannot be set the case fails, by name"); + post_state_fails = 0; + + /* a case that prints more than is kept */ + CHECK(is(say(": MANY 2000 0 DO 65 EMIT LOOP ;\n"), " ok\nok> "), "a word that prints 2,000 characters"); + memset(big, 'A', 2000); big[2000] = 0; + CHECK(post_one("many", "MANY", 0, V4_POST_STACK, 0, 0, big) == 0 && strstr(post_said, "POST FAIL: many ") != NULL, "a case that prints more than the runner keeps fails, by name"); + CHECK(post_one("after.many", "1 2 +", 0, V4_POST_STACK, three, 1, "") == 1, "and the next case is judged as usual"); + + /* output on more than one line of a case */ + CHECK(post_one("two.out", "65 EMIT", "66 EMIT", V4_POST_STACK, 0, 0, "AB") == 1 && post_one("two.out2", "65 EMIT", "66 EMIT", V4_POST_STACK, 0, 0, "AA") == 0, + "what a case prints on its second line follows what it printed on its first"); + + /* a case the node does not come back from: POST stops there */ + CHECK(is(say(": SPIN BEGIN 0 UNTIL ;\n"), " ok\nok> "), "a word that never ends"); + { + static const char *const la[] = { "1 2 +" }, *const lb[] = { "SPIN" }, *const lc[] = { "65 EMIT" }; + static const v4_post_case three_cases[] = { + { "first", la, 1u, V4_POST_STACK, three, 1u, "", 0u }, + { "spins", lb, 1u, V4_POST_STACK, 0, 0u, "", 0u }, + { "never.run", lc, 1u, V4_POST_STACK, 0, 0u, "A", 1u }, + }; + v4_post_tally t; + post_said_len = 0; post_said[0] = 0; + post_step_limit = 2000000; + CHECK(v4_post_run(&post_host, three_cases, 3, &t) == 0 && t.tests == 2 && t.pass == 1 && t.fail == 1, + "the run is not a pass, and the case after it is not run: %u run, %u passed, %u failed", t.tests, t.pass, t.fail); + CHECK(strstr(post_said, "POST FAIL: spins ") != NULL && strstr(post_said, "POST: the node did not come back from spins; 1 not run\n") != NULL + && strstr(post_said, "never.run") == NULL && strstr(post_said, "PARITY:V4_POST tests=2 pass=1 fail=1\n") != NULL, + "it is named as the case the node did not come back from, with how many were not run: \"%s\"", post_said); + post_step_limit = 40000000; + } + boot(); /* the node was left spinning */ + } + + /* ---- nothing of POST is on the node (NUCLEUS.md 6.3) ---- */ + boot(); + CHECK(is(say("(CATCH)\n"), "UNKNOWN WORD: '(CATCH)'\n ERROR\nok> ") && is(say("(EMIT-HOOK)\n"), "UNKNOWN WORD: '(EMIT-HOOK)'\n ERROR\nok> ") + && is(say("T{\n"), "UNKNOWN WORD: 'T{'\n ERROR\nok> "), "the nucleus has neither of the variables the POST capsule needed, nor its words"); + + /* ---- storage that refuses a write (MESH.md 8.2) ---- */ + boot(); + CHECK(is(say(REFUSING_FIRST " BLOCK DROP UPDATE SAVE-BUFFERS 65 EMIT\n"), "Storage refused\n ERROR\nok> "), "a write storage will not take says so, and the prompt returns"); + { + unsigned k, held = 0; + for (k = 0; k < V4_BLOCK_SLOTS; k++) if (kblocks.block[k] == 2112u) held++; + CHECK(held == 0, "the block storage would not take is let go: no slot holds it"); + CHECK(is(say(REFUSING_FIRST " BLOCK C@ .\n"), "0 ok\nok> "), "and the next BLOCK reads it from storage again"); + } + + /* ---- blocks: text loaded from storage ---- */ + boot_bare(); + put_block(5, "65 EMIT 66 EMIT"); + CHECK(is(say("5 LOAD 67 EMIT BLK @ .\n"), "ABC0 ok\nok> "), "LOAD interprets the block and then the rest of the line"); + put_block(6, "BLK @ . 7 LOAD BLK @ ."); + put_block(7, "BLK @ . 68 EMIT"); + CHECK(is(say("6 LOAD BLK @ .\n"), "6 7 D6 0 ok\nok> "), "a block may LOAD another; BLK is the block being interpreted"); + put_block(8, "65 EMIT 9 LOAD 66 EMIT"); + put_block(9, "67 EMIT 10 LOAD 68 EMIT"); + put_block(10, "69 EMIT"); + CHECK(is(say("8 LOAD\n"), "ACEDB ok\nok> "), "three deep, with two buffers: each block is fetched again when it is come back to"); + put_block(11, ": W1 1 ; -->"); + put_block(12, ": W2 W1 1+ ; W2 . -->"); + put_block(13, "W2 W2 + ."); + CHECK(is(say("11 LOAD 70 EMIT\n"), "2 4 F ok\nok> "), "--> goes on with the next block"); + CHECK(is(say("11 13 THRU 9 8 THRU 71 EMIT\n"), "2 4 2 4 4 G ok\nok> "), "THRU loads each in turn (here the --> chain from 11 and 12, then 13); an empty range loads nothing"); + memset(disk + 14 * V4_BLOCK_BYTES, ' ', V4_BLOCK_BYTES); + memcpy(disk + 14 * V4_BLOCK_BYTES, "65 EMIT \\ 66 EMIT and the rest of this line", 43); + memcpy(disk + 14 * V4_BLOCK_BYTES + 64, "67 EMIT ( a comment", 19); + memcpy(disk + 14 * V4_BLOCK_BYTES + 128, "over two lines ) 68 EMIT : LONGDEF", 34); + memcpy(disk + 14 * V4_BLOCK_BYTES + 192, "69 EMIT ; LONGDEF", 17); + CHECK(is(say("14 LOAD\n"), "ACDE ok\nok> "), "in a block \\ skips to the next 64-character line; ( and : run across lines"); + put_block(15, "1 16 LOAD 2"); + put_block(16, "3 NOSUCH 4"); + CHECK(is(say("15 LOAD 99 .\n"), "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> "), "an error in a loaded block ends everything"); + CHECK(is(say("BLK @ . .S\n"), "0 <2> 1 3 \n ok\nok> ") && n.mem[SRC] == TIB, "and the terminal is the input again"); + put_block(17, ": HALFDONE 1 2"); + CHECK(is(say("17 LOAD\n"), " ok\nok> ") && n.mem[STATE] != 0 && is(say("+ ; HALFDONE .\n"), "3 ok\nok> "), "a definition begun in a block can be finished at the terminal"); + /* errors */ + CHECK(is(say("ABORT\n"), " ok\nok> "), "(an empty stack)"); + CHECK(is(say("7 0 BLOCK 65 EMIT\n"), "Block out of range\n ERROR\nok> ") && is(say("-1 BLOCK\n"), "Block out of range\n ERROR\nok> ") + && is(say("9000 BLOCK\n"), "Block out of range\n ERROR\nok> ") && is(say("2111 BLOCK DROP .S\n"), "<1> 7 \n ok\nok> "), "a block number below 1 or past the chain's last"); + CHECK(is(say("0 LOAD\n"), "Block out of range\n ERROR\nok> ") && is(say("-5 LOAD\n"), "Block out of range\n ERROR\nok> ") + && is(say("0 BUFFER\n"), "Block out of range\n ERROR\nok> ") && is(say("9000 LIST\n"), "Block out of range\n ERROR\nok> "), "LOAD, BUFFER and LIST the same"); + CHECK(is(say("-->\n"), "No block is being loaded\n ERROR\nok> ") && is(say("65 EMIT\n"), "A ok\nok> "), "--> at the terminal"); + put_block(18, "1 9000 LOAD 2"); + CHECK(is(say("ABORT\n"), " ok\nok> "), "(an empty stack)"); + CHECK(is(say("18 LOAD\n.S\n"), "Block out of range\n ERROR\nok> <1> 1 \n ok\nok> "), "a block that loads one that is not there"); + + /* ---- blocks: what is written, and when ---- */ + boot_bare(); + CHECK(is(say("3 BLOCK 1024 BLANK 72 3 BLOCK C! 73 3 BLOCK 1023 + C! UPDATE\n"), " ok\nok> ") && disk[3 * V4_BLOCK_BYTES] == 0, + "an UPDATEd block is not written yet"); + CHECK(is(say("FLUSH\n"), " ok\nok> ") && disk[3 * V4_BLOCK_BYTES] == 'H' && disk[3 * V4_BLOCK_BYTES + 1] == ' ' && disk[3 * V4_BLOCK_BYTES + 1023] == 'I' + && disk[2 * V4_BLOCK_BYTES + 1023] == 0 && disk[4 * V4_BLOCK_BYTES] == 0, "FLUSH writes it, all 1024 bytes and no others"); + CHECK(is(say("EMPTY-BUFFERS 74 3 BLOCK C! UPDATE 4 BLOCK DROP 5 BLOCK DROP 6 BLOCK DROP\n"), " ok\nok> ") && disk[3 * V4_BLOCK_BYTES] == 'H', + "with four slots three more blocks do not disturb it"); + CHECK(is(say("7 BLOCK DROP\n"), " ok\nok> ") && disk[3 * V4_BLOCK_BYTES] == 'H', "a fifth takes the slot of a block that was not UPDATEd, and nothing is written"); + CHECK(is(say("77 4 BLOCK C! UPDATE 77 5 BLOCK C! UPDATE 77 6 BLOCK C! UPDATE\n"), " ok\nok> ") && disk[3 * V4_BLOCK_BYTES] == 'H' + && disk[4 * V4_BLOCK_BYTES] != 'M' && disk[5 * V4_BLOCK_BYTES] != 'M' && disk[6 * V4_BLOCK_BYTES] != 'M', "four UPDATEd blocks fill the slots, and none is written yet"); + { + unsigned written; + CHECK(is(say("8 BLOCK DROP\n"), " ok\nok> "), "one more block is asked for"); + written = (disk[3 * V4_BLOCK_BYTES] == 'J') + (disk[4 * V4_BLOCK_BYTES] == 'M') + (disk[5 * V4_BLOCK_BYTES] == 'M') + (disk[6 * V4_BLOCK_BYTES] == 'M'); + CHECK(written == 1, "it takes the slot of one of them, and that one is written first: %u written", written); + } + CHECK(is(say("FLUSH\n"), " ok\nok> ") && disk[3 * V4_BLOCK_BYTES] == 'J' && disk[4 * V4_BLOCK_BYTES] == 'M' && disk[5 * V4_BLOCK_BYTES] == 'M' && disk[6 * V4_BLOCK_BYTES] == 'M', + "FLUSH writes the rest"); + CHECK(is(say("3 BLOCK C@ . 75 3 BLOCK C! UPDATE EMPTY-BUFFERS FLUSH 3 BLOCK C@ .\n"), "74 74 ok\nok> ") && disk[3 * V4_BLOCK_BYTES] == 'J', + "EMPTY-BUFFERS forgets a change without writing it"); + CHECK(is(say("76 3 BLOCK C! 5 BLOCK DROP 6 BLOCK DROP 7 BLOCK DROP 8 BLOCK DROP 3 BLOCK C@ .\n"), "74 ok\nok> "), "a change without UPDATE is lost when the slot is taken"); + CHECK(is(say("3 BLOCK 4 BLOCK 1024 CMOVE UPDATE SAVE-BUFFERS\n"), " ok\nok> ") && memcmp(disk + 3 * V4_BLOCK_BYTES, disk + 4 * V4_BLOCK_BYTES, V4_BLOCK_BYTES) == 0 + && disk[4 * V4_BLOCK_BYTES] == 'J', "two blocks in memory at once: one copied to the other"); + put_block(40, "this is on the device"); + CHECK(is(say("40 BUFFER 1024 65 FILL UPDATE FLUSH\n"), " ok\nok> ") && disk[40 * V4_BLOCK_BYTES] == 'A' && disk[40 * V4_BLOCK_BYTES + 1023] == 'A', + "BUFFER gives a buffer for a block without reading it"); + { + v4_cell k, wide = 0; + (void)say("3 BLOCK DROP\n"); + for (k = 0; k < (v4_cell)(V4_BLOCK_SLOTS * V4_BLOCK_CELLS); k++) if ((v4_ucell)n.mem[BUF0_W + k] > 0xFFFFFFFFu) wide = 1; + CHECK(!wide, "a block's bytes are four to a cell at every cell width"); + } + { + v4_cell before[8], k; + CHECK(is(say("VOCABULARY KEEP KEEP DEFINITIONS : KEPT 75 EMIT ; FORTH DEFINITIONS\n"), " ok\nok> "), "a vocabulary, before blocks are listed and loaded"); + for (k = 0; k < 8; k++) before[k] = n.mem[TOP - 56 + k]; /* the cells around (Q)'s old place */ + put_block(41, "66 EMIT"); + (void)say("41 LIST 41 LOAD\n"); + for (k = 0; k < 8; k++) CHECK(n.mem[TOP - 56 + k] == before[k], "LIST and LOAD leave cell TOP-%d alone", (int)(56 - k)); + CHECK(is(say("KEEP KEPT FORTH\n"), "K ok\nok> ") && n.mem[VOC_LINK] != 0, "and the vocabulary is intact"); + } + CHECK(strncmp(say("50 LIST\n"), "\nBlock 50\n00: \n01: ", 81) == 0 && n.mem[SCR] == 50, + "a block of zeros lists as blanks, and SCR is the block listed"); + + /* ---- the editor: FORTH source, compiled by the node ---- */ + boot_bare(); + CHECK(load_source("editor.fth"), "editor.fth compiles, every line of it"); + CHECK(is(say("ORDER .S\n"), "Search order: FORTH \nCurrent: FORTH\n<0> \n ok\nok> "), "and leaves FORTH as it found it"); + { + char want[2048], blank[65]; + size_t at; + unsigned k; + memset(blank, ' ', 64); blank[64] = 0; +#define SCREEN(num, ...) do { static const char *const t_[] = { __VA_ARGS__ }; \ + at = (size_t)snprintf(want, sizeof want, "Screen %d:\n", num); \ + for (k = 0; k < 16; k++) at += (size_t)snprintf(want + at, sizeof want - at, "%2u: %-64s\n", k, k < sizeof t_ / sizeof t_[0] ? t_[k] : ""); \ + snprintf(want + at, sizeof want - at, " ok\nok> "); } while (0) + SCREEN(9, ""); + CHECK(is(say("9 EDIT\n"), want), "EDIT lists the screen"); + CHECK(is(say("ORDER\n"), "Search order: EDITOR FORTH\nCurrent: FORTH\n ok\nok> ") && n.mem[SCR] == 9, "and the editor's words are now found first"); + CHECK(is(say("0 P first line\n"), " ok\nok> ") && is(say("1 P second, with blanks before it\n"), " ok\nok> ") + && is(say("3 P fourth\n"), " ok\nok> ") && is(say("15 P last\n"), " ok\nok> "), "P puts text on a line"); + SCREEN(9, "first line", " second, with blanks before it", "", "fourth", "", "", "", "", "", "", "", "", "", "", "", "last"); + CHECK(is(say("L\n"), want), "L lists it"); + CHECK(is(say("1 T 2 T\n"), " 1: second, with blanks before it \n 2: \n ok\nok> "), "T types a line"); + CHECK(is(say("2 S\n"), " ok\nok> ") && is(say("2 P put in the gap\n"), " ok\nok> "), "S spreads"); + SCREEN(9, "first line", " second, with blanks before it", "put in the gap", "", "fourth", "", "", "", "", "", "", "", "", "", "", ""); + CHECK(is(say("L\n"), want), "the lines below move down and the last is lost"); + CHECK(is(say("1 D\n"), " ok\nok> "), "D deletes"); + SCREEN(9, "first line", "put in the gap", "", "fourth"); + CHECK(is(say("L\n"), want), "the lines below move up"); + CHECK(is(say("5 I 0 H 7 R 2 E\n"), " ok\nok> "), "I inserts the deleted line; H and R copy one; E erases one"); + SCREEN(9, "first line", "put in the gap", "", "fourth", "", " second, with blanks before it", "", "first line"); + CHECK(is(say("L\n"), want), "as it should be"); + CHECK(is(say("0 D 0 D 0 D 0 D 0 D 15 S 15 D 0 S 0 D\n"), " ok\nok> "), "at the ends"); + SCREEN(9, " second, with blanks before it", "", "first line"); + CHECK(is(say("L\n"), want), "nothing is disturbed"); + CHECK(disk[9 * V4_BLOCK_BYTES] == 0, "nothing has reached storage yet"); + CHECK(is(say("16 T\n"), "Line out of range\n ok\nok> ") && is(say("-1 E\n"), "Line out of range\n ok\nok> ") && is(say("16 P x\n"), "Line out of range\n ok\nok> "), + "a line that is not there"); + CHECK(is(say("9 EDIT\n"), want), "(ABORT left FORTH as CONTEXT; EDIT again)"); + CHECK(is(say("DONE ORDER\n"), "Search order: FORTH \nCurrent: FORTH\n ok\nok> ") && memcmp(disk + 9 * V4_BLOCK_BYTES, " second, with blanks", 21) == 0 + && disk[9 * V4_BLOCK_BYTES + 128] == 'f' && disk[9 * V4_BLOCK_BYTES + 1023] == ' ', "DONE writes the screen and goes back to FORTH"); + /* text typed into a screen is a programme */ + CHECK(is(say("20 EDIT\n"), blank_screen(20)) && is(say("0 P : HELLO .\" Hello from a block\" ;\n"), " ok\nok> ") + && is(say("1 P HELLO \\ and say it\n"), " ok\nok> ") && is(say("2 P 3 4 + .\n"), " ok\nok> ") && is(say("DONE 20 LOAD\n"), "Hello from a block7 ok\nok> "), + "a screen that has been edited can be loaded"); + CHECK(is(say("9 21 COPY 21 LIST\n"), out) && strstr(out, "Block 21\n00: second, with blanks before it") && strstr(out, "02: first line "), "COPY copies a screen"); + CHECK(is(say("FLUSH\n"), " ok\nok> ") && memcmp(disk + 21 * V4_BLOCK_BYTES, disk + 9 * V4_BLOCK_BYTES, V4_BLOCK_BYTES) == 0, "and the copy reaches storage"); + /* each change on its own reaches storage */ + CHECK(is(say("30 EDIT\n"), blank_screen(30)) && is(say("0 P only this\n"), " ok\nok> ") && is(say("DONE\n"), " ok\nok> ") + && memcmp(disk + 30 * V4_BLOCK_BYTES, "only this ", 10) == 0, "P alone is written"); + CHECK(is(say("30 EDIT\n"), out) && is(say("0 E DONE\n"), " ok\nok> ") && disk[30 * V4_BLOCK_BYTES] == ' ', "E alone is written"); + /* D and I with every line in use */ + CHECK(is(say("31 EDIT\n"), blank_screen(31)), "another screen"); + for (k = 0; k < 16; k++) { + char line[32]; + snprintf(line, sizeof line, "%u P line %c\n", k, 'A' + k); + CHECK(is(say(line), " ok\nok> "), "line %u", k); + } + CHECK(is(say("3 D\n"), " ok\nok> "), "delete line 3 of a full screen"); + SCREEN(31, "line A", "line B", "line C", "line E", "line F", "line G", "line H", "line I", "line J", "line K", "line L", "line M", "line N", "line O", "line P", ""); + CHECK(is(say("L\n"), want), "every line below moved up, the last is blank"); + CHECK(is(say("1 I\n"), " ok\nok> "), "insert the deleted line at 1"); + SCREEN(31, "line A", "line D", "line B", "line C", "line E", "line F", "line G", "line H", "line I", "line J", "line K", "line L", "line M", "line N", "line O", "line P"); + CHECK(is(say("L DONE\n"), want), "every line from 1 moved down"); + CHECK(is(say("21 EDIT\n"), out) && is(say("WIPE N\n"), blank_screen(22)) && is(say("B\n"), blank_screen(21)), "WIPE blanks it; N and B move to the next and back"); + CHECK(is(say("9000 EDIT\n"), "Block out of range\n ERROR\nok> ") && n.mem[SCR] == 21, "EDIT of a block that is not there"); + /* v3's three, in FORTH */ + CHECK(is(say("FORTH 9 SCR ! 0 L 3 L\n"), " second, with blanks before it \n \n ok\nok> "), + "FORTH's L shows a line, as v3's"); + CHECK(is(say("S\" a much longer line than hello\" 3 S\n"), " ok\nok> ") + && is(say("S\" hello world\" 3 S 3 L\n"), "hello world \n ok\nok> "), "and S sets one from a string, blanks after it"); + SCREEN(9, " second, with blanks before it", "", "first line", "hello world"); + CHECK(is(say("SHOW\n"), want), "and SHOW shows the screen"); + CHECK(is(say("7 PAD 3 16 S\n"), "Line out of range\n ok\nok> "), "a line out of range"); +#undef SCREEN + } + + /* ---- SEE: FORTH source too ---- */ + boot_bare(); + CHECK(load_source("tools.fth"), "tools.fth compiles, every line of it"); + CHECK(is(say(": SQ DUP * ; SEE SQ\n"), ": SQ\n dup call * \n ; \n ok\nok> "), "a definition: an in-line word, a call by name, the return"); + CHECK(is(say("SEE DUP\n"), ": DUP\n dup ; \n ok\nok> ") && is(say("SEE EMIT\n"), out) && strncmp(out, ": EMIT\n @p 255 and ", 20) == 0 && strstr(out, " pop a! ; \n"), + "the capsule's own words; a literal's value follows its @p"); + CHECK(is(say("VARIABLE V 7 V ! SEE V\n"), ": V\n data: 7 \n ok\nok> ") && is(say("5 CONSTANT K SEE K\n"), ": K\n data: 5 \n ok\nok> "), "a variable and a constant show what they hold"); + CHECK(is(say(": IM 1 ; IMMEDIATE SEE IM\n"), ": IM\n @p 1 ; \nIMMEDIATE\n ok\nok> "), "an immediate word says so"); + CHECK(is(say(": ST .\" hi\" 300 + ; SEE ST\n"), ": ST\n call (.\") \"hi\" \n @p 300 + ; \n ok\nok> "), "text in a definition is shown as text, and the code after it as code"); + CHECK(is(say(": S3 S\" abcdefg\" 0 ABORT\" x\" ; SEE S3\n"), ": S3\n call (S\") \"abcdefg\" \n @p 0 call (ABORT\") \"x\" \n ; \n ok\nok> "), "S\" and ABORT\" the same"); + { + /* branches: the addresses are this node's, so they are read back rather than written here */ + const char *o = say(": AB DUP 0< IF NEGATE THEN ; SEE AB\n"); + long a1, a2; + CHECK(sscanf(o, ": AB\n dup call 0< \n if %ld \n drop inv @p 1 + \n jump %ld \n drop \n ; \n ok", &a1, &a2) == 2 && a2 == a1 + 1 + && a1 > (long)DICT_W && a1 < (long)DICT_END_W, "IF and THEN: the if goes to the drop, the jump to the word after it"); + CHECK(is(say("7 AB -7 AB + .\n"), "14 ok\nok> "), "(and the word works)"); + o = say(": LP 10 0 DO I . LOOP ; SEE LP\n"); + CHECK(strstr(o, ": LP\n @p 10 @p 0 over push push drop \n pop dup push \n call . \n") == o && strstr(o, "\n drop drop drop ; \n ok\nok> "), + "a loop runs to its last return, past the returns inside it"); + o = say("SEE SEE\n"); + CHECK(strstr(o, ": SEE\n call FIND \n dup call 0= \n call (ABORT\") \"SEE: not found\" \n call (.\") \": \" \n") == o + && strstr(o, "call (SEE-CODE) ") && strstr(o, "\"IMMEDIATE\" \n call CR \n") && strlen(o) < 700, "SEE shows itself"); + } + CHECK(is(say(": S4 .\" abcd\" 65 EMIT ; SEE S4\n"), ": S4\n call (.\") \"abcd\" \n @p 65 call EMIT \n ; \n ok\nok> "), "text that fills its last cell but for the count"); + CHECK(is(say("SEE *\n"), out) && strstr(out, " +* unext drop drop a ; \n"), "the longest opcode name, in the capsule's multiply"); + CHECK(is(say(": LG LOG-WARN\" look\" 65 EMIT ; SEE LG\n"), ": LG\n @p 1 call (LOG\") \"look\" \n @p 65 call EMIT \n ; \n ok\nok> "), "a logged message is shown as text, after its level"); + CHECK(is(say("SEE NOSUCH\n"), "SEE: not found\n ok\nok> ") && is(say("SEE\n"), "SEE: not found\n ok\nok> "), "a word that is not there"); + CHECK(is(say("(.\")\n"), "(.\"): compile-only\n ERROR\nok> ") && is(say("(S\")\n"), "(S\"): compile-only\n ERROR\nok> "), "the string run-time words have names but cannot be run from the prompt"); + + /* ---- access control with its policy loaded: ACL.fth, FORTH source ---- */ + boot_bare(); + CHECK(load_source("ACL.fth"), "ACL.fth compiles, every line of it"); + CHECK(strstr(out, "\033[32mINFO: \033[0mACL: active\n") == out && n.mem[ACL_HOOK] != 0, "and its last line switches access control on"); + CHECK(is(say(": FOO 65 EMIT ; FOO ' FOO ACL-TTL@ . FOO ' FOO ACL-TTL@ .\n"), "A256 A255 ok\nok> "), "a word's first use is rechecked and earns it a TTL, which is then counted down"); + CHECK(is(say(": SFOO 66 EMIT ; ' SFOO ACL-STRICT SFOO SFOO ' SFOO ACL-TTL@ .\n"), "BB0 ok\nok> ") && is(say("' SFOO ACL-MODE@ .\n"), "1 ok\nok> "), + "a strict word is rechecked every time: its TTL stays 0"); + CHECK(is(say("' SFOO ACL-TTL-MODE SFOO ' SFOO ACL-TTL@ . ' SFOO ACL-MODE@ .\n"), "B256 0 ok\nok> "), "and can be put back in TTL mode"); + CHECK(is(say("' ACL-RECHECK ACL-PINNED? . ' ACL-BOOT ACL-PINNED? .\n"), "-1 -1 ok\nok> ") && is(say("' ACL-INIT-PRIMITIVES ACL-PINNED? .\n"), "-1 ok\nok> "), + "the policy's own words are pinned"); + CHECK(is(say("0 ' ACL-RECHECK ACL-ALLOW! ' ACL-RECHECK ACL-STRICT ' ACL-RECHECK ACL-ALLOW@ .\n"), "-1 ok\nok> ") + && is(say("' ACL-RECHECK ACL-MODE@ . FOO\n"), "0 A ok\nok> "), "so they cannot be denied or changed"); + CHECK(is(say("0 ' FOO ACL-ALLOW! 67 EMIT FOO 68 EMIT\n"), "C\033[33mWARN: \033[0mACL: denied 'FOO'\n ERROR\nok> "), "a denied word is refused while its TTL lasts"); + CHECK(is(say("0 ' FOO ACL-TTL! FOO\n"), "A ok\nok> "), "and when its TTL runs out the policy is asked again: this one allows"); + CHECK(is(say(": NOFOO DUP ['] FOO = IF 0 SWAP ACL-ALLOW! ELSE ACL-RECHECK THEN ;\n"), " ok\nok> ") + && is(say("' NOFOO ACL-HOOK ! 0 ' FOO ACL-TTL!\n"), " ok\nok> "), "a policy that denies one word"); + CHECK(is(say("69 EMIT FOO\n"), "E\033[33mWARN: \033[0mACL: denied 'FOO'\n ERROR\nok> ") && is(say("SFOO : G FOO ;\n"), "B\033[33mWARN: \033[0mACL: denied 'FOO'\n ERROR\nok> ") + && is(say("1 2 + . SFOO\n"), "3 B ok\nok> "), "that word is refused, interpreted or compiled, and nothing else is"); + CHECK(is(say("1 2 HERMES-CHANNEL-OPEN? . ACL-CA-KEY-LO . ' DUP ACL-ENTRY ' DUP = .\n"), "1 0 -1 ok\nok> "), "the rest of v3's policy file is there"); + CHECK(is(say("COLD\n"), "FORTH-79 Cold Start\nSystem initialized.\n ok\nok> ") && n.mem[ACL_HOOK] == 0 && is(say("ACL-BOOT\n"), "UNKNOWN WORD: 'ACL-BOOT'\n ERROR\nok> "), + "COLD takes the policy away with everything else that was loaded"); + + /* ---- the small system words ---- */ + boot_bare(); + CHECK(is(say("79-STANDARD .S\n"), "<0> \n ok\nok> "), "79-STANDARD is satisfied, and says nothing"); + { + char want[64]; + snprintf(want, sizeof want, "StarForth v4.0.0 F18 %d-bit\n ok\nok> ", V4_CELL_BITS); + CHECK(is(say("VERSION\n"), want), "VERSION"); + } + CHECK(is(say("65 EMIT PAGE 66 EMIT\n"), "A\x1b[2J\x1b[HB ok\nok> "), "PAGE, as v3"); + CHECK(is(say(": KEEPME 1 ; 1 2 3 WARM 65 EMIT\n.S KEEPME .\n"), "FORTH-79 Warm Start\nSystem restarted.\n ok\nok> <0> \n1 ok\nok> "), "WARM empties the stacks and keeps the dictionary"); + { + v4_cell dp = n.mem[BOOT_CELLS]; + CHECK(is(say("VOCABULARY VV VV DEFINITIONS : INVV 1 ; HEX 20 BLOCK DROP UPDATE 5 SCR !\n"), " ok\nok> ") + && is(say("4 LOG-LEVEL!\n"), " ok\nok> "), "a vocabulary, a base, a block, a screen, a log level"); + CHECK(is(say("1 2 COLD 65 EMIT\n"), "FORTH-79 Cold Start\nSystem initialized.\n ok\nok> "), "COLD says so"); + CHECK(n.mem[DP] == dp && n.mem[LATEST] == capsule_latest && n.mem[CONTEXT] == LATEST && n.mem[CURRENT] == LATEST && n.mem[VOC_LINK] == 0 + && n.mem[BASE] == 10 && n.mem[SCR] == 0 && kblocks.block[0] == 0 && kblocks.block[1] == 0 && kblocks.block[2] == 0 && kblocks.block[3] == 0 && n.mem[FENCE] == dp / 4 && n.mem[LOG_LEVEL] == 2, "and everything is as the loader left it"); + CHECK(is(say("KEEPME\n"), "UNKNOWN WORD: 'KEEPME'\n ERROR\nok> ") && is(say("VV\n"), "UNKNOWN WORD: 'VV'\n ERROR\nok> ") + && is(say(".S : NEW 16 . ; NEW\n"), "<0> \n16 ok\nok> "), "what was defined is gone, and the system works"); + } + /* deferred words */ + boot_bare(); + CHECK(is(say("DEFER FOO : BAR 65 EMIT ; ' BAR IS FOO FOO\n"), "A ok\nok> "), "a deferred word does what it is given"); + CHECK(is(say("DEFER@ FOO ' BAR = .\n"), "-1 ok\nok> "), "DEFER@ leaves it"); + CHECK(is(say(": BAZ 66 EMIT ; : U FOO FOO ; U ' BAZ IS FOO U\n"), "AABB ok\nok> "), "a word that uses it follows the change"); + CHECK(is(say(": SETB ['] BAR IS FOO ; : GET DEFER@ FOO ; SETB FOO GET ' BAR = .\n"), "A-1 ok\nok> "), "IS and DEFER@ in a definition"); + CHECK(is(say("7 DEFER QUX QUX 65 EMIT\n.S\n"), "Deferred word not set\n ERROR\nok> <1> 7 \n ok\nok> "), "a deferred word with nothing set"); + CHECK(is(say(": D3 1 2 3 ; ' D3 IS QUX QUX + + .\n"), "6 ok\nok> ") && is(say("DEFER\n"), "Name missing\n ERROR\nok> ") && is(say("' BAR IS NOSUCH\n"), "UNKNOWN WORD: 'NOSUCH'\n ERROR\nok> "), + "its stack effect is the word's; and the errors"); + { + /* a deferred word is no deeper than the word it runs */ + char line[64]; + CHECK(is(say("VARIABLE V VARIABLE C DEFER RR\n"), " ok\nok> ") + && is(say(": R1 C @ 1- DUP C ! IF RR EXIT THEN 65 EMIT ; ' R1 IS RR\n"), " ok\nok> "), "a word that runs itself through a deferred word"); + snprintf(line, sizeof line, "%u C ! RR\n", (unsigned)(V4_RET_DEPTH - 4u)); + CHECK(is(say(line), "A ok\nok> "), "each level takes one return entry, as a plain call does"); + snprintf(line, sizeof line, "%u C ! RR\n", (unsigned)V4_RET_DEPTH); + CHECK(is(say(line), "Return stack overflow\n ERROR\nok> "), "and too many is an overflow, as for any word"); + } + + /* ---- vocabularies (FORTH-79) ---- */ + boot_bare(); + CHECK(is(say("CONTEXT @ CURRENT @ = . ORDER\n"), "-1 Search order: FORTH \nCurrent: FORTH\n ok\nok> "), "at switch-on there is FORTH"); + CHECK(is(say("VOCABULARY ANIMALS ANIMALS DEFINITIONS : CAT 65 EMIT ; CAT FORTH CAT\n"), "AUNKNOWN WORD: 'CAT'\n ERROR\nok> "), + "a word defined in a vocabulary is found there and not in FORTH"); + CHECK(is(say("ORDER\n"), "Search order: FORTH \nCurrent: ANIMALS\n ok\nok> "), "FORTH is CONTEXT; ANIMALS is still CURRENT"); + CHECK(is(say("ANIMALS CAT 1 2 + . ORDER\n"), "A3 Search order: ANIMALS FORTH\nCurrent: ANIMALS\n ok\nok> "), "with ANIMALS as CONTEXT, FORTH is searched after it"); + CHECK(is(say(": DUP 66 EMIT ; DUP FORTH 5 DUP . . ANIMALS DUP\n"), "B5 5 B ok\nok> "), "a name in both: each vocabulary has its own"); + CHECK(is(say("FORTH DEFINITIONS VOCABULARY PLANTS PLANTS DEFINITIONS : CAT 67 EMIT ; CAT\n"), "C ok\nok> "), "a second vocabulary with the same name in it"); + CHECK(is(say("ANIMALS CAT PLANTS CAT FORTH DEFINITIONS\n"), "AC ok\nok> "), "each finds its own"); + CHECK(is(say("ANIMALS WORDS PLANTS WORDS FORTH\n"), "DUP CAT \nCAT \n ok\nok> "), "WORDS lists the CONTEXT vocabulary"); + CHECK(is(say("ANIMALS CONTEXT @ CURRENT @ = . : X 1 ; CONTEXT @ CURRENT @ = .\n"), "0 -1 ok\nok> "), ": makes the CURRENT vocabulary CONTEXT"); + CHECK(is(say(": T1 ANIMALS ; : T2 FORTH 68 EMIT ; T1 CAT T2 ORDER\n"), "ADSearch order: ANIMALS FORTH\nCurrent: FORTH\n ok\nok> "), + "a vocabulary's name can be compiled; FORTH is immediate"); + CHECK(is(say("VOCABULARY\nFORTH\n"), "Name missing\n ERROR\nok> ok\nok> "), "VOCABULARY needs a name"); + /* FORGET across vocabularies */ + boot_bare(); + CHECK(is(say("VOCABULARY V1 V1 DEFINITIONS : A1 1 ; FORTH DEFINITIONS : B1 2 ;\n"), " ok\nok> ") + && is(say("V1 DEFINITIONS : A2 3 ; FORTH DEFINITIONS\n"), " ok\nok> "), "words in two vocabularies, defined turn about"); + CHECK(is(say("FORGET B1 V1 A1 . A2\n"), "1 UNKNOWN WORD: 'A2'\n ERROR\nok> "), "FORGET takes what was defined later out of every vocabulary"); + CHECK(is(say("B1\n"), "UNKNOWN WORD: 'B1'\n ERROR\nok> ") && is(say("V1 DEFINITIONS : A3 4 ; A1 A3 + . FORTH DEFINITIONS\n"), "5 ok\nok> "), "and the vocabulary goes on"); + { + v4_cell dp; + CHECK(is(say("HERE . \n"), out) && n.mem[VOC_LINK] != 0, "(one vocabulary)"); + dp = n.mem[DP]; + CHECK(is(say("VOCABULARY V2 V2 DEFINITIONS : Z 1 ; VOCABULARY V3 ORDER\n"), "Search order: V2 FORTH\nCurrent: V2\n ok\nok> "), "a vocabulary that is CONTEXT and CURRENT"); + CHECK(is(say("FORGET V2 ORDER\n"), "Search order: FORTH \nCurrent: FORTH\n ok\nok> ") && n.mem[DP] == dp, + "forgotten, FORTH takes its place and the space is back"); + CHECK(is(say("V2\n"), "UNKNOWN WORD: 'V2'\n ERROR\nok> ") && is(say("V3\n"), "UNKNOWN WORD: 'V3'\n ERROR\nok> ") + && is(say("V1 A1 . FORTH : OK1 65 EMIT ; OK1\n"), "1 A ok\nok> "), "its words and the vocabulary defined inside it are gone; the rest works"); + CHECK(is(say("FORGET V1 FORGET V1\n"), "UNKNOWN WORD: 'V1'\n ERROR\nok> ") && n.mem[VOC_LINK] == 0, "and with V1 forgotten there is none"); + } + + /* ---- WORDS ---- */ + boot_bare(); + CHECK(is(say(": ZEBRA ; : YAK ; : HALFWAY 1\n"), " ok\nok> "), "two words and a definition under way"); + { + const char *w = say("[ WORDS ]\n"); + const char *p, *line = w; + unsigned longest = 0, names = 0; + CHECK(strncmp(w, "YAK ZEBRA ", 10) == 0, "WORDS starts with the newest; a definition under way is not shown"); + CHECK(strstr(w, " DUP ") && strstr(w, " WORDS ") && strstr(w, " : ") && strstr(w, " ABORT\" ") && strstr(w, "UM* "), "and goes back to the capsule's first word"); + CHECK(strlen(w) > 9 && strcmp(w + strlen(w) - 9, "\n ok\nok> ") == 0, "it ends with a new line"); + for (p = w; *p; p++) { + if (*p == ' ') names++; + if (*p == '\n') { if ((unsigned)(p - line) > longest) longest = (unsigned)(p - line); line = p + 1; } + } + printf(" WORDS: %u names, longest line %u columns\n", names - 1u, longest); + CHECK(longest <= 64u + 32u && names > 200u, "lines are wrapped"); + CHECK(is(say(";\n"), " ok\nok> ") && strncmp(say("VLIST\n"), "HALFWAY YAK ZEBRA ", 18) == 0, "VLIST is the same word; a finished definition is shown"); + } + + /* ---- DUMP: v3's layout, with this node's address ---- */ + { + char want[256]; + size_t at; + boot_bare(); + CHECK(is(say("PAD 24 ERASE PAD 16 65 FILL 126 PAD 17 + C! 200 PAD 18 + C! 127 PAD 19 + C!\n"), " ok\nok> "), "sixteen A's, a zero, a tilde, a byte above 127, a DEL"); + at = (size_t)snprintf(want, sizeof want, "%0*llX: ", V4_CELL_BITS / 4, (unsigned long long)PAD); + at += (size_t)snprintf(want + at, sizeof want - at, "41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA|\n"); + at += (size_t)snprintf(want + at, sizeof want - at, "%0*llX: ", V4_CELL_BITS / 4, (unsigned long long)PAD + 16); + at += (size_t)snprintf(want + at, sizeof want - at, "00 7E C8 7F |.~..|\n"); + snprintf(want + at, sizeof want - at, " ok\nok> "); + CHECK(is(say("PAD 20 DUMP\n"), want), "a line and four bytes, in hex though BASE is ten"); + CHECK(is(say("BASE @ 48 + EMIT\n"), ": ok\nok> "), "and BASE is put back"); + CHECK(is(say("8 BASE ! PAD 24 DUMP DECIMAL\n"), want), "the same from octal"); + } + + /* ---- a full dictionary ---- */ + boot_bare(); + n.mem[DP] = (DICT_END_W - 2) * 4; + CHECK(is(say(": FULL 1 2 3 4 5 6 7 8 9 ; 65 EMIT\n"), "Dictionary full\n ERROR\nok> ") && n.mem[STATE] == 0, "a definition that does not fit"); + CHECK(is(say("FULL\n"), "UNKNOWN WORD: 'FULL'\n ERROR\nok> "), "is not defined"); + n.mem[DP] = (DICT_END_W - 1) * 4; + CHECK(is(say("1 , 65 EMIT\n"), "A ok\nok> ") && is(say("2 , 66 EMIT\n"), "Dictionary full\n ERROR\nok> "), "the last cell can be used; the one after it cannot"); + CHECK(is(say("5 ALLOT 67 EMIT\n"), "Dictionary full\n ERROR\nok> ") && is(say("-99999 ALLOT\n"), "Dictionary full\n ERROR\nok> "), "nor can ALLOT go past either end"); + CHECK(is(say("68 EMIT .S\n"), "D<0> \n ok\nok> "), "and the prompt goes on"); + + /* ---- the fault table: six words, each a jump to its handler ---- */ + { + static const char *const handler[] = { "(FAULT)", "(D-OVER)", "(D-UNDER)", "(R-OVER)", "(R-UNDER)", "(RAISED)" }; + for (i = 0; i < V4_FAULT_KINDS; i++) { + v4_iword w = (v4_iword)((v4_ucell)n.mem[w_fault + (v4_cell)i] & 0xFFFFFFFFu); + CHECK(v4_iword_op(w, 0) == V4_OP_JUMP && v4_iword_branch(w_fault + (v4_cell)i + 1, w, 0) == v4_text_word(&tx, handler[i]), + "word %u of the fault table jumps to %s", i, handler[i]); + } + CHECK(n.fault_vector == w_fault, "and the node has it"); + } + + CHECK(v4_node_guards_intact(&n), "guards intact"); + + /* ---- the kernel is told of every entry made and of every entry that goes (ENGINE.md 3b) ---- */ + boot(); + CHECK(is(say("5 KERNEL-WORD ASK5\n"), " ok\nok> "), "KERNEL-WORD makes a word"); + CHECK(is(say("ASK5\n"), " ok\nok> ") && last_request == 5, "whose body writes its number to the port: %ld", (long)last_request); + CHECK(is(say(": TWICE ASK5 ASK5 ; TWICE\n"), " ok\nok> "), "and which a definition can call, again and again"); + boot(); + CHECK(is(say(": Q1 ;\n"), " ok\nok> ") && known_n == 0, "with nothing in (WORD-DEFINED) no one is told of a new entry"); + CHECK(is(say("1 KERNEL-WORD KD 2 KERNEL-WORD KF\n"), " ok\nok> "), "the kernel's two words"); + CHECK(is(say("' KD (WORD-DEFINED) ! ' KF (WORD-FORGOTTEN) !\n"), " ok\nok> "), "are put where the node will run them"); + known_n = node_words(known, 1024); /* what was there before the kernel was listening */ + n.mem[BOOT_CELLS] = n.mem[DP]; /* and all of it is the system, which COLD keeps */ + n.mem[BOOT_CELLS + 1] = n.mem[LATEST]; + n.mem[FENCE] = (n.mem[DP] + 3) / 4; + { + unsigned before = known_n; + CHECK(kernel_agrees() && before == 3, "the kernel starts knowing the words that are there: %u", before); + CHECK(is(say(": A1 ;\n"), " ok\nok> ") && known_n == before + 1 && kernel_agrees(), "a colon definition is told of"); + CHECK(strcmp(node_name(known[known_n - 1]), "A1") == 0, "by its xt, from which its name is read: %s", node_name(known[known_n - 1])); + CHECK(is(say("VARIABLE V1 5 CONSTANT C1 CREATE D1\n"), " ok\nok> ") && known_n == before + 4 && kernel_agrees(), + "and a variable, a constant and a CREATEd word"); + CHECK(is(say("VOCABULARY VOC1 VOC1 DEFINITIONS : IN1 ; FORTH DEFINITIONS : A2 ;\n"), " ok\nok> ") + && known_n == before + 7 && kernel_agrees(), "a vocabulary, a word in it, and a word after it"); + CHECK(strstr(say(": BAD NOSUCH ;\n"), "ERROR") != NULL && known_n == before + 8 && kernel_agrees(), + "a definition that is abandoned is still an entry, and is told of"); + CHECK(is(say("FORGET C1\n"), " ok\nok> ") && known_n == before + 2 && kernel_agrees(), + "FORGET tells that every entry from that one up has gone: %u left of ours", known_n - before); + CHECK(is(say(": A3 ;\n"), " ok\nok> ") && known_n == before + 3 && kernel_agrees(), "and what is defined next is told of as before"); + CHECK(strstr(say("FORGET KD\n"), "Protected word") != NULL && known_n == before + 3 && kernel_agrees(), + "a FORGET that is refused tells nothing"); + (void)say("COLD\n"); + CHECK(known_n == before && kernel_agrees(), "COLD tells that everything above the system has gone: %u", known_n); + CHECK(is(say(": A4 ; A4\n"), " ok\nok> ") && known_n == before + 1 && kernel_agrees(), "and the node goes on telling"); + } + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_host_unit.c b/v4/tests/test_host_unit.c new file mode 100644 index 00000000..b5ac5ea1 --- /dev/null +++ b/v4/tests/test_host_unit.c @@ -0,0 +1,520 @@ +/* test_host_unit.c -- five nodes come up from nothing. + * docs/v4.0.0/MESH.md section 9, step 5; acceptance 1 and 2. + * + * [11]---[12] + * | \ / | the four outer nodes are each on a + * console --1 [10] | port of Hera, 10, and joined in a + * kernel --0 | / \ | square; the corners across from each + * [13]---[14] other are not wired + * + * Hera is born empty and is given the nucleus through the port her requests + * go to, as the boot gives it (v4/system/boot.c). She is told who she is, + * given the words that ask for nodes (v4/include/v4/manage.h), FORTH-79, + * POST, and her own capsule, capsules/v4/hera.4th. Then she is told + * `10 UNIT`, and everything after that is hers: she asks for four nodes, + * wires them, sends each the nucleus cell by cell through the port that + * joins them and then FORTH-79 and POST a line at a time, and joins them. + * + * What stands in here for the host: the capsules are read from the files + * the build bakes in, and the nucleus is assembled as mkimage assembles it. + * + * STORAGE (MESH.md section 8, acceptance 3). Every node asks its kernel + * for its blocks, on its port 0, and the kernel's block subsystem + * (v3/src/block_subsystem.c) has them: one chain, fast RAM and a device of + * 64 blocks. For Hera the kernel on that port also answers her requests + * for nodes and capsules; for every other node it serves blocks and + * nothing else. + */ +#include "v4/capsule.h" +#include "v4/fabric.h" +#include "v4/image.h" +#include "v4/manage.h" +#include "v4/blocks.h" +#include "v4/message.h" +#include "v4/post.h" +#include "v4/text.h" +#include "block_subsystem.h" +#include +#include +#include + +#include "host_map.h" + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define PLACES 10u +static v4_text tx; +static v4_node nucleus; /* the nucleus, assembled: what the capsule of F18 code is written from */ +static v4_cell w_idle, w_fault; +static v4_fabric_node pool[PLACES]; +static int pool_used[PLACES]; + +/* the kernel's blocks: fast RAM and a device of 64 blocks */ +#define DISK_BLOCKS 64u +static unsigned char common_ram[(size_t)BLK_RAM_BLOCKS * BLK_FORTH_SIZE], common_dev[DISK_BLOCKS * V4_BLOCK_BYTES]; +extern void sf_time_init(void); +extern void log_set_level(int level); +static int storage_made(void) +{ + sf_time_init(); + log_set_level(-1); + return blk_subsys_init(common_ram, sizeof common_ram) == BLK_OK && blk_subsys_add_raw_device(common_dev, DISK_BLOCKS) == BLK_OK; +} +static v4_place places[PLACES]; +static v4_fabric f; +static v4_image im; /* only what the dictionary hash needs of it */ + +/* ---- the capsules ---- */ +static v4_cell f18[2u * V4_NODE_WORDS + 64u]; /* the nucleus as a capsule of F18 code */ +static unsigned f18_count; +static void f18_put(void *self, v4_cell w) { (void)self; if (f18_count < sizeof f18 / sizeof f18[0]) f18[f18_count++] = w; } + +typedef struct { char *text; long len, at; int in_block; unsigned cells_at; int is_f18; } reader; + +static int read_file(reader *r, const char *name) +{ + char path[600]; + FILE *in; + snprintf(path, sizeof path, "%s/../../capsules/v4/%s", V4_CAPSULE_DIR, name); + in = fopen(path, "rb"); + if (!in) return 0; + free(r->text); + fseek(in, 0, SEEK_END); r->len = ftell(in); fseek(in, 0, SEEK_SET); + r->text = (char *)malloc((size_t)r->len + 1); + if (!r->text || fread(r->text, 1, (size_t)r->len, in) != (size_t)r->len) { fclose(in); return 0; } + fclose(in); + r->at = 0; r->in_block = 0; r->is_f18 = 0; + return 1; +} +/* the next line of a block that has anything on it: its length, or -1 */ +static int next_line(reader *r, char *text) +{ + while (r->at < r->len) { + const char *p = r->text + r->at; + long n = 0; + while (r->at + n < r->len && p[n] != '\n') n++; + r->at += n + 1; + if (n >= 7 && memcmp(p, "Block ", 6) == 0 && p[6] >= '0' && p[6] <= '9') { r->in_block = 1; continue; } + if (n && p[n - 1] == '\r') n--; + if (!r->in_block || n == 0) continue; + if (n > V4_MANAGE_LINE) return -1; + memcpy(text, p, (size_t)n); + return (int)n; + } + return -1; +} + +/* ---- what Hera's requests are answered with ---- */ +static reader hera_reads; /* the capsule Hera has open */ +static unsigned born_count, parity_count; +static v4_cell parity_number[8]; +static uint64_t parity_hash[8]; + +/* THE KERNEL, for a node that is not Hera: on its port 0 it serves the + * node's blocks, and no other request (MESH.md 8.3). */ +static unsigned refused; +static v4_blocks node_blocks[PLACES]; /* what the kernel keeps of each node's block window, by where the node is in the pool */ +static int node_kernel_take(void *self, v4_cell value) +{ + v4_fabric_node *x = (v4_fabric_node *)self; + if (!v4_blocks_serve(&node_blocks[x - pool], &x->n, value)) refused++; + return 1; +} +static v4_device node_kernel[PLACES]; + +static int host_born(void *self) +{ + unsigned k; + int place; + (void)self; + for (k = 0; k < PLACES && pool_used[k]; k++) { } + if (k == PLACES) return -1; + place = v4_fabric_add(&f, &pool[k], PORT); + if (place < 0) return -1; + pool_used[k] = 1; + born_count++; + /* what a node's hardware gives it; there is nothing in its memory */ + v4_node_stack_regs_attach(&pool[k].n, DSTACK_REG, RSTACK_REG); + v4_node_error_attach(&pool[k].n, NODE_ERROR); + v4_node_fault_attach(&pool[k].n, w_fault); + v4_blocks_init(&node_blocks[k], BUF0_W); + if (k != 0) { /* Hera's kernel is wired where she is made */ + node_kernel[k].take = node_kernel_take; node_kernel[k].give = 0; node_kernel[k].self = &pool[k]; + if (!v4_fabric_wire_device(&f, (unsigned)place, 0, &node_kernel[k])) return -1; + } + return place; +} +static void host_gone(void *self, unsigned place, v4_fabric_node *was) +{ + (void)self; (void)place; + pool_used[was - pool] = 0; +} +static int host_open(void *self, const char *name, unsigned len) +{ + (void)self; + if (len == 17 && memcmp(name, "v4:nucleus-64.f18", 17) == 0) { hera_reads.is_f18 = 1; hera_reads.cells_at = 0; return 1; } + if (len == 14 && memcmp(name, "v4:forth79.4th", 14) == 0) return read_file(&hera_reads, "forth79.4th"); + return 0; +} +static int host_cell(void *self, v4_cell *w) +{ + (void)self; + if (!hera_reads.is_f18 || hera_reads.cells_at >= f18_count) return 0; + *w = f18[hera_reads.cells_at++]; + return 1; +} +static int host_line(void *self, char *text) +{ + (void)self; + return hera_reads.is_f18 ? -1 : next_line(&hera_reads, text); +} +static void host_parity(void *self, unsigned place, v4_cell number, const v4_node *n) +{ + (void)self; (void)place; + if (parity_count < 8) { parity_number[parity_count] = number; parity_hash[parity_count] = v4_image_dict_hash(n, &im); } + parity_count++; +} +static const v4_manage manage = { &f, host_born, host_gone, host_open, host_cell, host_line, host_parity, 0 }; + +/* ---- the kernel: a device on Hera's port 0 ---- */ +#define FIRST_REQUEST 1 /* the number of NODE-ME on her */ +static unsigned hera_place, given_cells; +static int kernel_give(void *self, v4_cell *value) /* the nucleus, to a node that has nothing in it */ +{ + (void)self; + if (given_cells >= f18_count) return 0; + *value = f18[given_cells++]; + return 1; +} +static int kernel_take(void *self, v4_cell value) /* a request */ +{ + (void)self; + if (v4_blocks_serve(&node_blocks[0], &pool[0].n, value)) return 1; /* a block, as for any node; Hera is the first in the pool */ + if (value < FIRST_REQUEST || !v4_manage_serve(&manage, hera_place, (unsigned)(value - FIRST_REQUEST))) refused++; + return 1; +} +static const v4_device kernel = { kernel_take, kernel_give, 0 }; + +/* ---- the console: a device on Hera's port 1 ---- */ +#define CONSOLE_ID 1 +static v4_message going, coming; +static unsigned going_at; +static char printed[8192]; /* what has come back since the console last sent */ +static unsigned printed_len; +static v4_cell printed_from; +static int ended; +static v4_cell ended_from, ended_how; +static unsigned post_passed[32]; /* by node number: POST tallies with no failures seen from it */ +static unsigned post_other; /* tallies with failures */ + +static int console_give(void *self, v4_cell *value) +{ + (void)self; + if (going_at >= going.count) return 0; + *value = going.word[going_at++]; + return 1; +} +static int console_take(void *self, v4_cell value) +{ + (void)self; + if (v4_message_word(&coming, value)) { + if (v4_message_type(&coming) == V4_MSG_OUTPUT) { + unsigned i, chars = v4_message_length(&coming), start = printed_len; + for (i = 0; i < chars && printed_len + 1 < sizeof printed; i++) printed[printed_len++] = v4_message_char(&coming, i); + printed[printed_len] = 0; + printed_from = v4_message_from(&coming); + if (strstr(printed + start, "PARITY:V4_POST")) { + if (strstr(printed + start, " fail=0\n") && printed_from >= 0 && printed_from < 32) post_passed[printed_from]++; + else post_other++; + } + } else if (v4_message_type(&coming) == V4_MSG_DONE) { + ended++; + ended_from = v4_message_from(&coming); + ended_how = coming.word[V4_MSG_HEADER]; + } + coming.count = 0; + } + return 1; +} +static const v4_device console = { console_take, console_give, 0 }; + +/* Is there a node that will execute at the next step? A step in which a + * node only faulted counts nothing done (exec.h), and it goes on from its + * fault handler at the next. */ +static int any_running(void) +{ + unsigned k; + for (k = 0; k < PLACES; k++) { + const v4_fabric_node *x = v4_fabric_node_at(&f, k); + if (x && !places[k].asleep && !x->n.stopped && !x->n.asking && !(x->n.reading && !x->n.given)) return 1; + } + return 0; +} + +/* What every node is doing, for a test that does not end. */ +static unsigned long step_limit = 4000000000ul; +static void stuck(void) +{ + unsigned k; + for (k = 0; k < PLACES; k++) { + const v4_fabric_node *x = v4_fabric_node_at(&f, k); + if (x) printf(" stuck: node %ld p=%ld asking=%d port=%u reading=%d rport=%u given=%d stopped=%d mq=%ld lost=%ld\n", (long)x->n.mem[ME], (long)x->n.p, + x->n.asking, x->n.ask_port, x->n.reading, x->n.read_port, x->n.given, x->n.stopped, (long)x->n.mem[MQ_COUNT], (long)x->n.mem[LOST]); + } +} +/* Send text to a node and let everything that follows from it happen. */ +static const char *tell(v4_cell node, const char *text) +{ + unsigned long steps = 0; + printed_len = 0; printed[0] = 0; printed_from = -1; + ended = 0; ended_from = -1; ended_how = -1; + if (!v4_message_text(&going, node, CONSOLE_ID, V4_MSG_TEXT, text, (unsigned)strlen(text))) return "(too long)"; + going_at = 0; + while (steps < step_limit && (v4_fabric_step(&f) != 0 || any_running())) steps++; + if (steps >= step_limit) { stuck(); return "(still running)"; } + return printed; +} +static int told(v4_cell node, const char *text) { return tell(node, text)[0] == 0 && ended == 1 && ended_how == V4_TEXT_COMPLETED; } + +/* POST's host, for the node numbered 10 (v4/include/v4/post.h): a line is + * told to it from the console, and what it prints is handed to the runner. */ +static int post_line(void *self, const char *text, unsigned text_len, char *out, unsigned cap, unsigned *len) +{ + static char line[V4_MSG_MAX_CHARS + 1]; + const char *r; + (void)self; + *len = 0; + if (text_len > V4_MSG_MAX_CHARS) return -1; + memcpy(line, text, text_len); line[text_len] = 0; + r = tell(10, line); + if (ended != 1 || ended_from != 10) return -1; + *len = printed_len; + memcpy(out, r, printed_len < cap ? printed_len : cap); + return (int)ended_how; +} +static char post_said[2048]; +static unsigned post_said_len; +static void post_say(void *self, const char *text, unsigned len) +{ + (void)self; + if (post_said_len + len < sizeof post_said) { memcpy(post_said + post_said_len, text, len); post_said_len += len; post_said[post_said_len] = 0; } +} + +/* Every line of a capsule of FORTH blocks, told to a node from the console: + * how many lines did not complete. */ +static unsigned load(v4_cell node, const char *file) +{ + static reader r; + char line[V4_MANAGE_LINE + 1]; + unsigned bad = 0; + int n; + if (!read_file(&r, file)) return 1; + while ((n = next_line(&r, line)) >= 0) { + line[n] = 0; + (void)tell(node, line); + if (ended != 1 || ended_how != V4_TEXT_COMPLETED) { if (!bad) { const v4_node *q = &pool[0].n; printf(" %s: \"%s\" -> \"%s\" ended=%d how=%ld; stopped=%d asking=%d port=%u reading=%d rport=%u p=%ld fault=%u@%ld\n", file, line, printed, ended, (long)ended_how, q->stopped, q->asking, q->ask_port, q->reading, q->read_port, (long)q->p, q->fault_kind, (long)q->fault_addr); } bad++; } + } + return bad; +} + +static v4_node *node_numbered(v4_cell number) +{ + unsigned k; + for (k = 0; k < PLACES; k++) if (v4_fabric_node_at(&f, k) && v4_fabric_node_at(&f, k)->n.mem[ME] == number) return &v4_fabric_node_at(&f, k)->n; + return 0; +} +static v4_uheat_t clock_of(v4_cell number) +{ + unsigned k; + for (k = 0; k < PLACES; k++) if (v4_fabric_node_at(&f, k) && v4_fabric_node_at(&f, k)->n.mem[ME] == number) return v4_fabric_node_at(&f, k)->es.anticlock; + return 0; +} +static int waiting(v4_cell number) +{ + const v4_node *n = node_numbered(number); + return n && n->reading && !n->given && n->read_port == V4_PORT_ANY; +} + +int main(void) +{ + unsigned i; + int place; + + printf("v4 unit tests: V4_CELL_BITS=%d, V4_NODE_WORDS=%u\n", V4_CELL_BITS, (unsigned)V4_NODE_WORDS); + if (V4_CELL_BITS != 64) { + /* The capsules the unit is built from are the 64-bit products': the + * expected results in POST's table are v3's, on 64-bit cells, and the + * nucleus capsule is nucleus-64. POST has never been run on 32-bit + * cells (docs/v4.0.0/MESH.md, step 5). */ + printf(" not run at this width: the capsules are the 64-bit products'\n"); + return 0; + } + CHECK(storage_made(), "the kernel's blocks are there before any node is"); + { + static const char *const files[] = { "core.v4", "input.v4", "dict.v4", "codegen.v4", "compile.v4", "quit.v4", "forth.v4", + "numout.v4", "words.v4", "system.v4", "qmath.v4", "blocks.v4", "log.v4", "acl.v4" }; + CHECK(host_load(&tx, &nucleus, files, 14), "the nucleus assembles"); + } + CHECK(v4_text_finish(&tx), "everything is defined: %s", v4_text_error(&tx)); + if (failures) { printf(" %d checks, %d failures\n", checks, failures); return 1; } + w_idle = v4_text_word(&tx, "(IDLE)"); + w_fault = v4_text_word(&tx, "(FAULTS)"); + nucleus.mem[DP] = DICT_W * 4; /* the variables, as at switch-on (tools/mkimage.c) */ + nucleus.mem[LATEST] = v4_text_latest(&tx); + nucleus.mem[CFP] = CFS_W; + nucleus.mem[BASE] = 10; + nucleus.mem[FENCE] = DICT_W; + nucleus.mem[BOOT_CELLS] = nucleus.mem[DP]; + nucleus.mem[BOOT_CELLS + 1] = nucleus.mem[LATEST]; + nucleus.mem[LOG_LEVEL] = 2; + nucleus.mem[CONTEXT] = LATEST; + nucleus.mem[CURRENT] = LATEST; + nucleus.mem[SRC] = TIB; + nucleus.mem[LINE_STATUS] = 1; + HOST_MESSAGES_EMPTY(&nucleus); + (void)v4_capsule_write(&nucleus, w_idle, f18_put, 0); + CHECK(f18_count > 1000 && f18_count < sizeof f18 / sizeof f18[0], "the nucleus is a capsule of F18 code: %u cells", f18_count); + memset(&im, 0, sizeof im); + im.dp = DP; im.latest = LATEST; + + /* ---- Hera is born empty, and takes in the nucleus ---- */ + v4_fabric_init(&f, places, PLACES); + v4_fabric_gone_error(&f, V4_ERROR_NO_ONE); + place = host_born(0); + CHECK(place == 0, "a node is born"); + hera_place = (unsigned)place; + for (i = 0; i < 4096 && pool[0].n.mem[i] == 0; i++) { } + CHECK(i == 4096 && pool[0].n.p == PORT + (v4_cell)V4_PORT_ANY, "with nothing in it, listening at its ports"); + CHECK(v4_fabric_wire_device(&f, hera_place, 0, &kernel) && v4_fabric_wire_device(&f, hera_place, 1, &console), "the kernel is on its port 0 and the console on its port 1"); + going.count = 0; going_at = 0; + for (i = 0; i < 400000 && v4_fabric_step(&f) != 0; i++) { } + CHECK(given_cells == f18_count && pool[0].n.reading && pool[0].n.read_port == V4_PORT_ANY && !pool[0].n.stopped, + "it takes in the nucleus through its port and waits for a message: %u of %u cells", given_cells, f18_count); + + CHECK(told(0, "10 (ME) ! 1 (CONSOLE) ! 1 1 ROUTE") && ended_from == 10, "it is told it is 10, and where the console is"); + { + char text[600]; + size_t at = 0; + for (i = 0; i < V4_MANAGE_WORDS; i++) at += (size_t)snprintf(text + at, sizeof text - at, "%u KERNEL-WORD %s ", FIRST_REQUEST + i, v4_manage_words[i]); + CHECK(told(10, text), "and given the words that ask for nodes and capsules: \"%s\"", printed); + } + CHECK(strcmp(tell(10, "NODE-ME ."), "0 ") == 0 && refused == 0, "it asks where it is, and is answered"); + CHECK(load(10, "forth79.4th") == 0, "it takes in FORTH-79"); + CHECK(told(10, "(SEAL)"), "the nucleus and FORTH-79 are the system POST is run on"); + { + static v4_cell before[V4_NODE_WORDS]; + v4_post_host host; + v4_post_tally tally; + v4_node *hera = node_numbered(10); + v4_cell here = hera->mem[DP] / 4, k, changed = 0, first = -1; + uint64_t hash = v4_image_dict_hash(hera, &im); + memcpy(before, hera->mem, sizeof before); + host.self = 0; host.n = hera; host.line = post_line; host.say = post_say; + CHECK(v4_post_run(&host, v4_post_cases, v4_post_case_count, &tally) && tally.tests == 538 && tally.pass == 538 && tally.fail == 0 + && strstr(post_said, "PARITY:V4_POST tests=538 pass=538 fail=0\n") != NULL && strstr(post_said, "POST FAIL") == NULL, + "and passes POST, which the kernel runs on her: %u of %u, %u failed; \"%s\"", tally.pass, tally.tests, tally.fail, post_said); + CHECK(strcmp(tell(10, "RS1"), "42 42 \n") == 0, "while POST runs, what its cases define is on her: \"%s\"", printed); + CHECK(strstr(tell(10, "COLD"), "Cold Start") != NULL, "the kernel puts her back to the system as it was sealed"); + CHECK(hera->mem[DP] == before[DP] && hera->mem[LATEST] == before[LATEST], "HERE and LATEST are where they were before POST"); + for (k = 0; k < here; k++) if (hera->mem[k] != before[k]) { if (first < 0) first = k; changed++; } + /* What differs is the TTL in the entry of each word POST had interpreted: a count of uses left before + * the word's access is checked again, which every use counts down (compile.v4, (ACL?)), as in v3. */ + printf(" after POST and COLD: %ld of the %ld cells below HERE differ from before POST (the first at %ld); dict_hash %s\n", + (long)changed, (long)here, (long)first, v4_image_dict_hash(hera, &im) == hash ? "the same" : "differs"); + } + CHECK(strstr(tell(10, "T{"), "UNKNOWN WORD") != NULL, "nothing of POST's harness is on her: \"%s\"", printed); + CHECK(strstr(tell(10, "RS1"), "UNKNOWN WORD") != NULL && strstr(tell(10, "ZERO"), "UNKNOWN WORD") != NULL, "nor anything POST's cases defined: POST leaves nothing, as in v3: \"%s\"", printed); + CHECK(load(10, "hera.4th") == 0, "and its own capsule, which makes it Hera"); + CHECK(told(10, "(SEAL)"), "that is the system it comes back to"); + + /* ---- she births the unit ---- */ + born_count = 0; + { + const char *r = tell(10, "10 UNIT"); + CHECK(ended == 1 && ended_how == V4_TEXT_COMPLETED && ended_from == 10, "Hera births four nodes and joins them: \"%s\"", r); + } + CHECK(born_count == 4 && refused == 0, "four nodes were asked for: %u", born_count); + CHECK(post_passed[10] == 0 && post_passed[11] == 0 && post_passed[12] == 0 && post_passed[13] == 0 && post_passed[14] == 0 && post_other == 0, + "a node she births is not POSTed, and no node prints a POST tally: POST is the kernel's, once, on Hera: %u %u %u %u %u, %u failed", + post_passed[10], post_passed[11], post_passed[12], post_passed[13], post_passed[14], post_other); + CHECK(parity_count == 4 && parity_number[0] == 11 && parity_number[1] == 12 && parity_number[2] == 13 && parity_number[3] == 14, "the parity of each was recorded: %u", parity_count); + CHECK(parity_hash[0] == parity_hash[1] && parity_hash[1] == parity_hash[2] && parity_hash[2] == parity_hash[3], + "and their dictionary hashes are the same: %016llx %016llx %016llx %016llx", + (unsigned long long)parity_hash[0], (unsigned long long)parity_hash[1], (unsigned long long)parity_hash[2], (unsigned long long)parity_hash[3]); + printf(" the four outer nodes: dict_hash=0x%016llx\n", (unsigned long long)parity_hash[0]); + CHECK(parity_hash[0] != v4_image_dict_hash(node_numbered(10), &im), "Hera's is not: she has her own capsule"); + CHECK(waiting(10) && waiting(11) && waiting(12) && waiting(13) && waiting(14), "all five are waiting at their ports"); + { + v4_uheat_t c[5]; + for (i = 0; i < 5; i++) c[i] = clock_of(10 + (v4_cell)i); + for (i = 0; i < 200; i++) (void)v4_fabric_step(&f); + for (i = 0; i < 5 && clock_of(10 + (v4_cell)i) == c[i]; i++) { } + CHECK(i == 5, "and execute nothing while they wait"); + } + + /* ---- they talk ---- */ + CHECK(strcmp(tell(10, "1 2 + ."), "3 ") == 0 && printed_from == 10, "a line typed at the console is done by Hera"); + for (i = 11; i <= 14; i++) { + char text[32], want[16]; + snprintf(text, sizeof text, "%u 100 * .", i); + snprintf(want, sizeof want, "%u ", i * 100); + CHECK(strcmp(tell((v4_cell)i, text), want) == 0 && printed_from == (v4_cell)i && ended_from == (v4_cell)i, "text for node %u is done there and what it prints comes back: \"%s\"", i, printed); + } + CHECK(strcmp(tell(13, "3 4 U* . ."), "0 12 ") == 0, "an outer node has FORTH-79: U* is a word of the capsule"); + CHECK(strcmp(tell(13, ": SQ DUP * ; 7 SQ ."), "49 ") == 0 && strstr(tell(12, "7 SQ ."), "UNKNOWN WORD") != NULL, "each has its own dictionary"); + CHECK(strstr(tell(13, "COLD"), "Cold Start") != NULL && strcmp(tell(13, "3 4 U* . ."), "0 12 ") == 0 && strstr(tell(13, "7 SQ ."), "UNKNOWN WORD") != NULL, + "COLD on it comes back to the nucleus and FORTH-79"); + { + v4_uheat_t hera = clock_of(10); + CHECK(strcmp(tell(11, ": T S\" 65 EMIT\" 12 SEND ; T"), "A") == 0 && printed_from == 12, "an outer node sends text to the one beside it: \"%s\"", printed); + hera = clock_of(10); + CHECK(strcmp(tell(11, ": X S\" 66 EMIT\" 14 SEND ; X"), "B") == 0 && printed_from == 14, "and to the one across from it, which it is not wired to: \"%s\"", printed); + CHECK(clock_of(10) > hera, "that went by a node in between"); + } + CHECK(strcmp(tell(10, "(LOST) @ ."), "0 ") == 0 && strcmp(tell(11, "(LOST) @ ."), "0 ") == 0 && strcmp(tell(14, "(LOST) @ ."), "0 ") == 0, "nothing was let go"); + + /* ---- they share the store (acceptance 3) ---- */ + step_limit = 30000000ul; + CHECK(told(12, "2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS") && common_dev[52 * V4_BLOCK_BYTES] == 'A' && common_dev[52 * V4_BLOCK_BYTES + 1] == ' ', + "node 12 writes a block, by asking the kernel: \"%s\"", printed); + for (i = 10; i <= 14; i++) { + if (i == 12) continue; + CHECK(strcmp(tell((v4_cell)i, "2100 BLOCK C@ ."), "65 ") == 0, "node %u reads what node 12 wrote: \"%s\"", i, printed); + } + CHECK(strstr(tell(14, "9000 BLOCK"), "Block out of range") != NULL && strcmp(tell(14, "14 100 * ."), "1400 ") == 0, "a block there is not says so, and the node goes on: \"%s\"", printed); + { + char text[64]; + unsigned before = refused, born = born_count; + snprintf(text, sizeof text, "%u KERNEL-WORD ASK-BORN ASK-BORN", FIRST_REQUEST + 1); + (void)tell(12, text); + CHECK(refused == before + 1 && born_count == born, "an outer node's request for a node is not honoured: only its blocks are"); + } + + /* two nodes use the store at once */ + CHECK(told(10, ": W 10 0 DO 97 I 2060 + BLOCK C! UPDATE SAVE-BUFFERS LOOP ;") && told(12, ": W 10 0 DO 98 I 2070 + BLOCK C! UPDATE SAVE-BUFFERS LOOP ;"), "each of two nodes has ten blocks to write"); + CHECK(told(10, ": GO S\" W\" 12 SEND W ; GO"), "Hera sets node 12 writing and writes her own meanwhile: \"%s\"", printed); + for (i = 0; i < 10 && common_dev[(12 + i) * V4_BLOCK_BYTES] == 'a' && common_dev[(22 + i) * V4_BLOCK_BYTES] == 'b'; i++) { } + CHECK(i == 10, "all twenty blocks reached the store: the first that did not is %u", i); + CHECK(strcmp(tell(10, "(LOST) @ ."), "0 ") == 0 && strcmp(tell(12, "(LOST) @ ."), "0 ") == 0, "and no message was let go"); + CHECK(waiting(10) && waiting(11) && waiting(12) && waiting(13) && waiting(14), "all five are waiting at their ports again"); + + /* ---- a node is killed while its neighbour is writing to it ---- */ + step_limit = 3000000ul; + CHECK(strcmp(tell(14, ": SPIN BEGIN 0 UNTIL ; SPIN"), "(still running)") == 0, "node 14 is stuck in a loop that never ends"); + CHECK(strcmp(tell(12, ": TO14 S\" 65 EMIT\" 14 SEND ; TO14"), "(still running)") == 0 && node_numbered(12)->asking, + "node 12, beside it, sends it text: 14 never reads, and 12 is blocked writing to it"); + { + unsigned born = born_count; + const char *r = tell(10, "(P4) @ NODE-KILL 65 EMIT"); + CHECK(strstr(printed, "A") != NULL && node_numbered(14) == NULL && born_count == born, "Hera kills node 14: \"%s\"", r); + } + CHECK(!node_numbered(12)->asking && !node_numbered(12)->stopped && waiting(12), "node 12 is no longer blocked: it is waiting at its ports"); + CHECK(strstr(printed, "No one on that port") != NULL, "what it was doing ended in an error, which said so: \"%s\"", printed); + step_limit = 30000000ul; + CHECK(strcmp(tell(12, "12 100 * ."), "1200 ") == 0 && strcmp(tell(13, "13 100 * ."), "1300 ") == 0 && strcmp(tell(10, "1 2 + ."), "3 ") == 0, "and everything else keeps running: \"%s\"", printed); + CHECK(strstr(tell(12, ": AGAIN14 S\" 65 EMIT\" 14 SEND ; AGAIN14"), "No one on that port") != NULL && waiting(12), "a later write to where node 14 was is an error at once, not a wait: \"%s\"", printed); + + printf(" %d checks, %d failures\n", checks, failures); + return failures != 0; +} diff --git a/v4/tests/test_iword.c b/v4/tests/test_iword.c new file mode 100644 index 00000000..7e87add7 --- /dev/null +++ b/v4/tests/test_iword.c @@ -0,0 +1,400 @@ +/* test_iword.c -- the instruction-word format. + * + * The properties pinned here are the ones the rest of the machine is built on + * and the ones most likely to be got wrong by a plausible-looking edit: + * + * - the six slots occupy the bit ranges the diagram in section 1.2 gives + * them, with slot 0 highest; + * - the reach column (27 / 22 / 17 / 12 for slots 0-3) is what the layout + * actually produces, rather than four independently-entered constants; + * - branches are illegal in slots 4 and 5; + * - the two spare bits are inert, so a word that differs only in them + * decodes identically; + * - a branch is page-relative: it replaces the low bits of P and preserves + * the rest; + * - no opcode name collides with a FORTH-79 word name, which is the stated + * reason for the `inv` and `xor` renames in section 1.3. + */ +#include "v4/iword.h" + +#include +#include + +static int failures = 0; +static int checks = 0; + +#define CHECK(cond, ...) \ + do { \ + checks++; \ + if (!(cond)) { \ + failures++; \ + printf(" FAIL %s:%d: ", __FILE__, __LINE__); \ + printf(__VA_ARGS__); \ + printf("\n"); \ + } \ + } while (0) + +static v4_iword word_of(const unsigned op[6], unsigned spare) +{ + return v4_iword_assemble(op, spare); +} + +static void test_slot_bit_ranges(void) +{ + /* The diagram's own boundaries, entered independently of the macros so the + * macros are checked rather than merely used. */ + static const unsigned want_high[6] = { 31, 26, 21, 16, 11, 6 }; + static const unsigned want_low[6] = { 27, 22, 17, 12, 7, 2 }; + + for (unsigned k = 0; k < 6; k++) { + CHECK(V4_SLOT_HIGH_BIT(k) == want_high[k], + "slot %u high bit: macro says %u, diagram says %u", k, + V4_SLOT_HIGH_BIT(k), want_high[k]); + CHECK(V4_SLOT_LOW_BIT(k) == want_low[k], + "slot %u low bit: macro says %u, diagram says %u", k, + V4_SLOT_LOW_BIT(k), want_low[k]); + } + + /* Each slot is 5 bits, and the six slots do not overlap. */ + for (unsigned k = 0; k < 6; k++) { + CHECK(V4_SLOT_HIGH_BIT(k) - V4_SLOT_LOW_BIT(k) == 4u, + "slot %u is not 5 bits wide", k); + } + CHECK(V4_SLOT_LOW_BIT(5) - V4_SPARE_BITS == 0u, + "slot 5 does not end just above the spare bits"); +} + +static void test_roundtrip_all_opcodes(void) +{ + /* Every one of the 32 opcodes, in every slot, survives assemble+decode. */ + for (unsigned op = 0; op < 32u; op++) { + for (unsigned k = 0; k < 6; k++) { + unsigned o[6]; + for (unsigned j = 0; j < 6; j++) o[j] = 0x1Du; /* distinct filler */ + o[k] = op; + v4_iword w = word_of(o, 0u); + CHECK(w != 0xFFFFFFFFu, "assemble rejected opcode %u", op); + CHECK(v4_iword_op(w, k) == op, + "opcode %u in slot %u decoded as %u", op, k, + v4_iword_op(w, k)); + /* And the other slots are undisturbed. */ + for (unsigned j = 0; j < 6; j++) { + if (j == k) continue; + CHECK(v4_iword_op(w, j) == 0x1Du, + "assembling %u into slot %u disturbed slot %u", op, k, j); + } + } + } +} + +static void test_slots_are_independent(void) +{ + /* All 32^6 words cannot be enumerated, but the packing is linear, so + * checking that each slot's bits land only in its own range is enough. */ + for (unsigned k = 0; k < 6; k++) { + unsigned o[6] = { 0, 0, 0, 0, 0, 0 }; + o[k] = 0x1Fu; /* all five bits set */ + v4_iword w = word_of(o, 0u); + v4_iword expect = (v4_iword)0x1Fu << V4_SLOT_LOW_BIT(k); + CHECK(w == expect, + "slot %u: word is %08lX, expected %08lX", k, + (unsigned long)w, (unsigned long)expect); + } +} + +static void test_spare_bits_are_inert_for_decode(void) +{ + /* The two spare low bits sit below every slot, so they are never executed. + * A word that differs only in them must decode to the same six opcodes -- + * otherwise the spare bits would have acquired decode meaning. */ + unsigned o[6] = { 2, 3, 5, 6, 7, 1 }; + v4_iword a = word_of(o, 0u); + v4_iword b = word_of(o, 3u); /* both spare patterns */ + + for (unsigned k = 0; k < 6; k++) { + CHECK(v4_iword_op(a, k) == v4_iword_op(b, k), + "spare bits changed the opcode in slot %u", k); + } + CHECK(v4_iword_spare(a) == 0u, "spare bits of word a"); + CHECK(v4_iword_spare(b) == 3u, "spare bits of word b"); +} + +static void test_spare_bits_are_branch_address_bits(void) +{ + /* The opposite property, and the one that is easy to get wrong: the spare + * bits are BELOW every slot, so "all bits to the right of its slot" -- the + * branch target, per section 1.2 -- includes them. They are the low bits + * of a branch address, not padding. Pinned here so that a later "cleanup" + * that treats them as unusable address bits fails a test instead of costing + * two bits of reach off every branch in the machine. */ + /* Only slot 0 is set, so every bit below it -- all 27 of them, spare bits + * included -- is zero and the branch target is the spare field alone. */ + unsigned o[6] = { 2, 0, 0, 0, 0, 0 }; + v4_iword a = word_of(o, 0u); + v4_iword b = word_of(o, 3u); /* both spare patterns */ + + CHECK(v4_iword_op(a, 0) == V4_OP_JUMP, "slot 0 should be jump"); + CHECK(v4_iword_target(a, 0u) == 0u, + "word a (spare 0) should have a zero low target field, got %u", + v4_iword_target(a, 0u)); + CHECK(v4_iword_target(b, 0u) == 3u, + "word b (spare 3) should carry 3 in the low address bits, got %u", + v4_iword_target(b, 0u)); + CHECK(v4_iword_branch((v4_cell)0, a, 0u) == 0, "branch with spare 0"); + CHECK(v4_iword_branch((v4_cell)0, b, 0u) == 3, + "branch with spare 3 should land on address 3, got %lld", + (long long)v4_iword_branch((v4_cell)0, b, 0u)); + + /* Every legal branch slot reaches bit 0, so the spare bits are address in + * all four of them. */ + for (unsigned k = 0; k < 4; k++) { + CHECK((v4_iword_slot_mask(k) & 3u) == 3u, + "slot %u branch target does not reach the spare bits", k); + } +} + +static void test_reach_column(void) +{ + /* The reach table from section 1.2, entered as literals. The + * implementation derives these from the layout; this asserts the two + * agree, which is the whole reason to derive rather than hard-code. */ + static const unsigned want_bits[4] = { 27, 22, 17, 12 }; + static const unsigned want_reach[4] = { + 0x8000000u, /* 2^27 words = whole address space */ + 0x400000u, /* 2^22 words = 4M words */ + 0x20000u, /* 2^17 words = 128K words */ + 0x1000u /* 2^12 words = 4K words */ + }; + + for (unsigned k = 0; k < 4; k++) { + CHECK(V4_BRANCH_ADDR_BITS(k) == want_bits[k], + "slot %u address bits: %u, spec says %u", k, + V4_BRANCH_ADDR_BITS(k), want_bits[k]); + CHECK(v4_iword_slot_mask(k) + 1u == want_reach[k], + "slot %u reach: %u words, spec table implies %u", k, + v4_iword_slot_mask(k) + 1u, want_reach[k]); + } +} + +static void test_branch_targets_take_all_low_bits(void) +{ + /* A target is every bit to the right of the slot, not just the low 5 or the + * low 12. Set a pattern of all-ones in the low region and confirm each + * slot recovers exactly its own low bits. */ + for (unsigned k = 0; k < 4; k++) { + v4_iword w = 0xFFFFFFFFu; /* every slot and spare bit set */ + uint32_t t = v4_iword_target(w, k); + uint32_t mask = v4_iword_slot_mask(k); + CHECK(t == mask, + "slot %u target from all-ones word is %08lX, expected %08lX", k, + (unsigned long)t, (unsigned long)mask); + + /* And the slot's own five bits must be excluded from its target. */ + unsigned op_in_slot = v4_iword_op(w, k); + CHECK(op_in_slot == 0x1Fu, "slot %u opcode from all-ones", k); + } +} + +static void test_branch_legality(void) +{ + for (unsigned k = 0; k < 4; k++) { + CHECK(v4_iword_branch_legal(k), "slot %u should allow branches", k); + } + for (unsigned k = 4; k < 6; k++) { + CHECK(!v4_iword_branch_legal(k), + "slot %u must not allow branches (section 1.2)", k); + } +} + +static void test_page_relative_branch(void) +{ + /* "That target replaces the same low bits of P (page-relative, as in the + * F18)." A branch inside one page must not disturb the bits above it, and + * must be able to reach every address in its page. */ + for (unsigned k = 0; k < 4; k++) { + uint32_t mask = v4_iword_slot_mask(k); + v4_ucell page = ~(v4_ucell)mask; /* a high value, low bits zero */ + v4_cell p = (v4_cell)page; + + for (uint32_t target = 0; target <= mask; target = target * 2u + 1u) { + v4_iword w = target; /* target lives in the low bits */ + v4_cell got = v4_iword_branch(p, w, k); + v4_ucell want = ((v4_ucell)page & ~(v4_ucell)mask) + | (v4_ucell)target; + CHECK((v4_ucell)got == want, + "slot %u: P=%lld target=%u gave %lld, expected %llu", k, + (long long)p, target, (long long)got, + (unsigned long long)want); + CHECK((v4_ucell)got == (v4_ucell)(page ^ target), + "slot %u: branch is not page-relative", k); + if (target > mask / 2u && target != mask) break; + } + } +} + +static void test_page_relative_branch_preserves_high_page(void) +{ + /* Same, from several distinct pages, to be sure nothing is hard-wired to + * page zero. */ + static const v4_ucell pages[] = { + (v4_ucell)0, + (v4_ucell)1, + (v4_ucell)0x80000000ull, + ~(v4_ucell)0 + }; + for (unsigned k = 0; k < 4; k++) { + uint32_t mask = v4_iword_slot_mask(k); + for (unsigned i = 0; i < sizeof(pages) / sizeof(pages[0]); i++) { + v4_cell p = (v4_cell)pages[i]; + v4_cell got = v4_iword_branch(p, 0u, k); + v4_ucell want = (pages[i] & ~(v4_ucell)mask); + CHECK((v4_ucell)got == want, + "slot %u: P=%llX with target 0 gave %llX, expected %llX", k, + (unsigned long long)pages[i], (unsigned long long)got, + (unsigned long long)want); + } + } +} + +static void test_branch_opcode_set(void) +{ + /* Exactly five opcodes take a target, and they are the five section 1.2 + * names. Everything else must not, so that a non-branch slot's low bits + * stay available to the compiler. */ + static const int want[32] = { + /* 0 */ 0, /* 1 */ 0, /* 2 jump */ 1, /* 3 call */ 1, /* 4 */ 0, + /* 5 next */ 1, /* 6 if */ 1, /* 7 -if */ 1, /* 8 */ 0, /* 9 */ 0, + /* A */ 0, /* B */ 0, /* C */ 0, /* D */ 0, /* E */ 0, /* F */ 0, + /* 10 */ 0, /* 11 */ 0, /* 12 */ 0, /* 13 */ 0, /* 14 */ 0, /* 15 */ 0, + /* 16 */ 0, /* 17 */ 0, /* 18 */ 0, /* 19 */ 0, /* 1A */ 0, + /* 1B */ 0, /* 1C */ 0, /* 1D */ 0, /* 1E */ 0, /* 1F */ 0 + }; + unsigned nbranch = 0; + for (unsigned op = 0; op < 32u; op++) { + int got = v4_op_is_branch(op); + CHECK(got == want[op], "opcode %02X: is_branch=%d, expected %d", op, + got, want[op]); + nbranch += (unsigned)got; + } + CHECK(nbranch == 5u, "expected exactly 5 branch opcodes, found %u", nbranch); +} + +static void test_opcode_enum_matches_spec_numbering(void) +{ + /* Each named opcode must carry the number section 1.3 gives it. Transposed + * or off-by-one enum entries are the classic way a 32-entry table rots. */ + CHECK(V4_OP_SEMI == 0x00, "opcode ;"); CHECK(V4_OP_EX == 0x01, "opcode ex"); + CHECK(V4_OP_JUMP == 0x02, "opcode jump"); CHECK(V4_OP_CALL == 0x03, "opcode call"); + CHECK(V4_OP_UNEXT == 0x04, "opcode unext"); CHECK(V4_OP_NEXT == 0x05, "opcode next"); + CHECK(V4_OP_IF == 0x06, "opcode if"); CHECK(V4_OP_MINUS_IF == 0x07, "opcode -if"); + CHECK(V4_OP_FETCH_P == 0x08, "opcode @p"); CHECK(V4_OP_FETCH_INC == 0x09, "opcode @+"); + CHECK(V4_OP_FETCH_B == 0x0A, "opcode @b"); CHECK(V4_OP_FETCH_A == 0x0B, "opcode @"); + CHECK(V4_OP_STORE_P == 0x0C, "opcode !p"); CHECK(V4_OP_STORE_INC == 0x0D, "opcode !+"); + CHECK(V4_OP_STORE_B == 0x0E, "opcode !b"); CHECK(V4_OP_STORE_A == 0x0F, "opcode !"); + CHECK(V4_OP_MUL_STEP == 0x10, "opcode +*"); CHECK(V4_OP_TWO_STAR == 0x11, "opcode 2*"); + CHECK(V4_OP_TWO_SLASH == 0x12, "opcode 2/"); CHECK(V4_OP_INV == 0x13, "opcode inv"); + CHECK(V4_OP_ADD == 0x14, "opcode +"); CHECK(V4_OP_AND == 0x15, "opcode and"); + CHECK(V4_OP_XOR == 0x16, "opcode xor"); CHECK(V4_OP_DROP == 0x17, "opcode drop"); + CHECK(V4_OP_DUP == 0x18, "opcode dup"); CHECK(V4_OP_RPOP == 0x19, "opcode pop"); + CHECK(V4_OP_OVER == 0x1A, "opcode over"); CHECK(V4_OP_PUSH_A == 0x1B, "opcode a"); + CHECK(V4_OP_NOP == 0x1C, "opcode nop"); CHECK(V4_OP_PUSH == 0x1D, "opcode push"); + CHECK(V4_OP_BANG_B == 0x1E, "opcode b!"); CHECK(V4_OP_BANG_A == 0x1F, "opcode a!"); + CHECK(V4_OPCODE_COUNT == 0x20, "opcode count"); +} + +static void test_ambiguous_f18_names_were_renamed(void) +{ + /* Section 1.3 says: "Opcode numbering follows the F18. Two names differ + * from Moore's: F18 `-` is renamed `inv` and F18 `or` (which is + * exclusive-or) is renamed `xor`, so instruction names never collide with + * FORTH-79 word names." + * + * The renames are the part that carries weight, and they are asserted here. + * `-` and `or` are exactly the dangerous case: Moore's F18 uses them with + * meanings that differ from the FORTH-79 words of the same name, so an + * instruction table containing either would be ambiguous rather than merely + * duplicated. `and` and `xor` are also FORTH-79 words, but `and` agrees + * with FORTH and `xor` is F18's spelling, so neither is ambiguous. + * + * NOTE: the trailing clause of that sentence is an overclaim, and the test + * deliberately does not assert it. `dup`, `drop`, `over`, `and`, `if` and + * `+` are all instruction names in section 1.3 and all FORTH-79 words, + * spelled identically and meaning the same thing. They coincide; they do + * not collide. What the renames prevent is a *divergent* meaning under a + * shared name, which is the property asserted above. Raised for the spec + * text rather than silently encoded here as if it were true. */ + static const char *opnames[32] = { + ";", "ex", "jump", "call", "unext", "next", "if", "-if", + "@p", "@+", "@b", "@", "!p", "!+", "!b", "!", + "+*", "2*", "2/", "inv", "+", "and", "xor", "drop", + "dup", "pop", "over", "a", "nop", "push", "b!", "a!" + }; + + CHECK(strcmp(opnames[V4_OP_INV], "inv") == 0, + "opcode 13 must be named inv, got \"%s\"", opnames[V4_OP_INV]); + CHECK(strcmp(opnames[V4_OP_XOR], "xor") == 0, + "opcode 16 must be named xor, got \"%s\"", opnames[V4_OP_XOR]); + + /* The two names the renames exist to remove must appear nowhere. */ + for (unsigned i = 0; i < 32u; i++) { + CHECK(strcmp(opnames[i], "-") != 0, + "F18 `-` must not survive as an instruction name (slot %u)", i); + CHECK(strcmp(opnames[i], "or") != 0, + "F18 `or` must not survive as an instruction name (slot %u)", i); + CHECK(strcmp(opnames[i], "OR") != 0, + "F18 `or` must not survive as an instruction name (slot %u)", i); + } + + /* The five branch opcodes, by the names section 1.2 lists. */ + CHECK(strcmp(opnames[V4_OP_JUMP], "jump") == 0, "opcode 2 name"); + CHECK(strcmp(opnames[V4_OP_CALL], "call") == 0, "opcode 3 name"); + CHECK(strcmp(opnames[V4_OP_NEXT], "next") == 0, "opcode 5 name"); + CHECK(strcmp(opnames[V4_OP_IF], "if") == 0, "opcode 6 name"); + CHECK(strcmp(opnames[V4_OP_MINUS_IF], "-if") == 0, "opcode 7 name"); +} + +static void test_assemble_rejects_out_of_range(void) +{ + unsigned o[6] = { 0, 0, 0, 0, 0, 0 }; + o[3] = 32u; /* will not fit in 5 bits */ + CHECK(v4_iword_assemble(o, 0u) == 0xFFFFFFFFu, + "assemble must reject a 6-bit opcode"); + o[3] = 0; + CHECK(v4_iword_assemble(o, 4u) == 0xFFFFFFFFu, + "assemble must reject spare bits above 3"); +} + +static void test_out_of_range_slots_are_inert(void) +{ + /* Slots past 5 do not exist. The decode must answer deterministically + * rather than shift by a nonsense amount. */ + v4_iword w = 0xFFFFFFFFu; + CHECK(v4_iword_op(w, 6u) == 0u, "op in slot 6 must be 0"); + CHECK(v4_iword_target(w, 6u) == 0u, "target in slot 6 must be 0"); + CHECK(v4_iword_slot_mask(6u) == 0u, "mask in slot 6 must be 0"); + CHECK(!v4_iword_branch_legal(6u), "slot 6 must not allow branches"); +} + +int main(void) +{ + printf("v4 iword tests: V4_CELL_BITS=%d\n", V4_CELL_BITS); + + test_slot_bit_ranges(); + test_roundtrip_all_opcodes(); + test_slots_are_independent(); + test_spare_bits_are_inert_for_decode(); + test_spare_bits_are_branch_address_bits(); + test_reach_column(); + test_branch_targets_take_all_low_bits(); + test_branch_legality(); + test_page_relative_branch(); + test_page_relative_branch_preserves_high_page(); + test_branch_opcode_set(); + test_opcode_enum_matches_spec_numbering(); + test_ambiguous_f18_names_were_renamed(); + test_assemble_rejects_out_of_range(); + test_out_of_range_slots_are_inert(); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_loops.c b/v4/tests/test_loops.c new file mode 100644 index 00000000..45aa47ce --- /dev/null +++ b/v4/tests/test_loops.c @@ -0,0 +1,474 @@ +/* test_loops.c -- the DO loop runtimes, executed. + * + * DECOMPOSITION.md 5.18: (DO) (?DO) (LOOP) (+LOOP) (LEAVE) I J UNLOOP and + * (0BRANCH). None of these is a word in v4: each is a short sequence the + * compiler lays down in line, with the loop's limit and index on the return + * stack (limit below index). This file lays them down by hand, as the + * compiler will, inside small test words, runs those on the golden model and + * compares what each loop body saw with C and with v3. + * + * v3 (v3/src/word_source/control_words.c): + * DO the body always runs once + * ?DO skips the loop when index = limit + * LOOP adds 1 and goes round again while index < limit, signed + * +LOOP ( n -- ) adds n and goes round again while index < limit for + * n >= 0, while index >= limit for n < 0 + * LEAVE FORTH-79 (ruled 2026-10-04): sets the limit equal to the + * index, so the loop ends at the next LOOP or +LOOP; the index is + * unchanged and the rest of the body still runs. v3's LEAVE left + * the loop at once, which is FORTH-83's. + * I J the index of this loop, of the loop outside it + * UNLOOP discards the loop's limit and index, for EXIT + * So `0 5 DO .. LOOP` runs once in v3 and here; 5.18's first (LOOP), which + * tested for index = limit, would have gone round the whole number circle. + * + * v3's LEAVE also left the loop's limit and index on its return stack, which + * is invisible in a single loop but breaks an outer one: in v3 + * : T 3 0 DO 10 0 DO I . I 1 = IF LEAVE THEN LOOP I . LOOP ; + * prints "0 1 10" and stops, the outer LOOP having counted the inner loop's + * leftovers. Here the inner LOOP discards them as it ends, and the outer + * loop carries on. + * + * The expected sequences marked "v3:" were recorded from the v3 binary on + * 2026-10-03, as in test_numout.c. + */ +#include "v4/asm.h" +#include "v4/testcode.h" +#include +#include + +static int failures = 0, checks = 0; +#define CHECK(c,...) do{checks++; if(!(c)){failures++; printf("FAIL %s:%d: ",__FILE__,__LINE__); printf(__VA_ARGS__); printf("\n");}}while(0) + +#define CANARY ((v4_cell)0x0C0FFEE5) +#define MAXS ((v4_cell)(V4_MSB - 1u)) +#define MINS ((v4_cell)V4_MSB) + +/* The memory map is open (D-4); the test chooses the addresses. */ +#define TRACE ((v4_cell)(V4_NODE_WORDS - 80u)) /* what the loop bodies saw, 64 cells */ +#define CNT ((v4_cell)(V4_NODE_WORDS - 8u)) /* how many cells of TRACE are used */ +#define STEP ((v4_cell)(V4_NODE_WORDS - 7u)) /* +LOOP's increment */ +#define KV ((v4_cell)(V4_NODE_WORDS - 6u)) /* the index to LEAVE or EXIT at */ +#define LAST ((v4_cell)(V4_NODE_WORDS - 5u)) /* set after the loop */ +#define TCAP 64 + +static v4_node n; +static v4_exec_state es; +static v4_heat h; +static v4_asm as; + +static v4_cell t_do, t_qdo, t_ploop, t_pqdo, t_nest, t_leave, t_pleave, t_nestleave, t_unloop, t_if, t_j3; + +#define O(name) v4_asm_op(&as, V4_OP_##name) +#define LIT(v) v4_asm_lit(&as, (v4_cell)(v)) +#define JUMP(x) v4_asm_branch(&as, V4_OP_JUMP, (x)) +#define FWD(op) v4_asm_branch_fwd(&as, V4_OP_##op) +#define HERE_(r) v4_asm_resolve(&as, (r), v4_asm_label(&as)) +#define SUB_INLINE() do { O(PUSH); O(INV); O(RPOP); O(ADD); O(INV); } while (0) + +/* ---- the expansions under test, as the compiler lays them down --------- */ + +/* (DO) ( limit index -- ) over push push drop R: limit index + * SWAP push push without the SWAP. */ +#define DO_() do { O(OVER); O(PUSH); O(PUSH); O(DROP); } while (0) + +/* (?DO) ( limit index -- ) + * over over xor if SKIP drop (DO) ...body and LOOP... SKIP: drop drop drop + * The caller resolves the returned reference after the loop, at code that + * drops the three cells. */ +#define QDO_(skip) do { O(OVER); O(OVER); O(XOR); (skip) = FWD(IF); O(DROP); DO_(); } while (0) +#define QDO_END_(skip, past) do { (past) = FWD(JUMP); HERE_(skip); O(DROP); O(DROP); O(DROP); HERE_(past); } while (0) + +/* The sign of T after this is set exactly when index' < limit, signed: + * index' itself when the two differ in sign, else index' - limit. + * ( i' lim -- i' lim s ) + * over over xor -if SAME drop over jump T SAME: drop over over - T: */ +#define LESS_SIGN_() do { v4_asm_ref same_, t_; \ + O(OVER); O(OVER); O(XOR); same_ = FWD(MINUS_IF); \ + O(DROP); O(OVER); t_ = FWD(JUMP); \ + HERE_(same_); O(DROP); O(OVER); O(OVER); SUB_INLINE(); \ + HERE_(t_); } while (0) + +/* (LOOP) + * pop 1 + pop i' lim + * i' lim s + * -if EXIT drop push push jump BODY + * EXIT: drop drop drop */ +#define LOOP_(body) do { v4_asm_ref exit_; \ + O(RPOP); LIT(1); O(ADD); O(RPOP); LESS_SIGN_(); \ + exit_ = FWD(MINUS_IF); O(DROP); O(PUSH); O(PUSH); JUMP(body); \ + HERE_(exit_); O(DROP); O(DROP); O(DROP); } while (0) + +/* (+LOOP) ( n -- ) + * dup a! pop + pop i' lim A: n + * i' lim s + * a xor top bit set: go round again + * -if EXIT drop push push jump BODY + * EXIT: drop drop drop + * Going round again is index' < limit for n >= 0 and the opposite for + * n < 0, that is, exactly when s and n differ in sign. Clobbers A. */ +#define PLOOP_(body) do { v4_asm_ref exit_; \ + O(DUP); O(BANG_A); O(RPOP); O(ADD); O(RPOP); LESS_SIGN_(); O(PUSH_A); O(XOR); \ + exit_ = FWD(MINUS_IF); O(DROP); O(PUSH); O(PUSH); JUMP(body); \ + HERE_(exit_); O(DROP); O(DROP); O(DROP); } while (0) + +/* (LEAVE) pop pop drop dup push push R: index index + * The limit becomes the index; nothing is jumped over. */ +#define LEAVE_() do { O(RPOP); O(RPOP); O(DROP); O(DUP); O(PUSH); O(PUSH); } while (0) + +/* I pop dup push + * J pop pop pop dup push a! push push a + * the outer index waits in A while the inner pair goes back, so J + * needs no return entry beyond the two loops' own. Clobbers A. + * UNLOOP pop drop pop drop */ +#define I_() do { O(RPOP); O(DUP); O(PUSH); } while (0) +#define J_() do { O(RPOP); O(RPOP); O(RPOP); O(DUP); O(PUSH); O(BANG_A); O(PUSH); O(PUSH); O(PUSH_A); } while (0) +#define UNLOOP_() do { O(RPOP); O(DROP); O(RPOP); O(DROP); } while (0) + +/* ---- what the test bodies do ------------------------------------------- */ +#define VGET(a) do { LIT(a); O(BANG_A); O(FETCH_A); } while (0) +#define VSET(a) do { LIT(a); O(BANG_A); O(STORE_A); } while (0) +/* ( x -- ) append x to TRACE: CNT @ 63 and TRACE + a! ! CNT @ 1 + CNT ! + * The index is masked so that a loop that runs away stays inside TRACE and + * fails on its count, not by writing over the node. */ +#define REC_() do { VGET(CNT); LIT(TCAP - 1); O(AND); LIT(TRACE); O(ADD); O(BANG_A); O(STORE_A); \ + VGET(CNT); LIT(1); O(ADD); VSET(CNT); } while (0) + +static void build(void) +{ + v4_asm_ref a, b, skip, past; /* past: the jump over a skipped ?DO loop */ + v4_cell body, body2; + + /* ( limit start -- ) DO I rec LOOP */ + t_do = v4_asm_label(&as); + DO_(); body = v4_asm_label(&as); I_(); REC_(); LOOP_(body); O(SEMI); + + /* ( limit start -- ) ?DO I rec LOOP */ + t_qdo = v4_asm_label(&as); + QDO_(skip); body = v4_asm_label(&as); I_(); REC_(); LOOP_(body); QDO_END_(skip, past); O(SEMI); + + /* ( limit start -- ) DO I rec STEP @ +LOOP */ + t_ploop = v4_asm_label(&as); + DO_(); body = v4_asm_label(&as); I_(); REC_(); VGET(STEP); PLOOP_(body); O(SEMI); + + /* ( limit start -- ) ?DO I rec STEP @ +LOOP */ + t_pqdo = v4_asm_label(&as); + QDO_(skip); body = v4_asm_label(&as); I_(); REC_(); VGET(STEP); PLOOP_(body); QDO_END_(skip, past); O(SEMI); + + /* ( olimit ilimit -- ) KV ! 0 DO KV @ 10 DO I rec J rec LOOP LOOP */ + t_nest = v4_asm_label(&as); + VSET(KV); LIT(0); DO_(); + body = v4_asm_label(&as); + VGET(KV); LIT(10); DO_(); + body2 = v4_asm_label(&as); + I_(); REC_(); J_(); REC_(); + LOOP_(body2); + LOOP_(body); + O(SEMI); + + /* ( limit start -- ) DO I rec I KV @ = IF LEAVE THEN I rec LOOP 77 LAST ! */ + t_leave = v4_asm_label(&as); + DO_(); body = v4_asm_label(&as); + I_(); REC_(); + I_(); VGET(KV); O(XOR); a = FWD(IF); O(DROP); b = FWD(JUMP); + HERE_(a); O(DROP); LEAVE_(); + HERE_(b); + I_(); REC_(); + LOOP_(body); + LIT(77); VSET(LAST); O(SEMI); + + /* ( limit start -- ) DO I rec I KV @ = IF LEAVE THEN I rec STEP @ +LOOP 77 LAST ! */ + t_pleave = v4_asm_label(&as); + DO_(); body = v4_asm_label(&as); + I_(); REC_(); + I_(); VGET(KV); O(XOR); a = FWD(IF); O(DROP); b = FWD(JUMP); + HERE_(a); O(DROP); LEAVE_(); + HERE_(b); + I_(); REC_(); + VGET(STEP); PLOOP_(body); + LIT(77); VSET(LAST); O(SEMI); + + /* ( -- ) 3 0 DO 10 0 DO I rec I 1 = IF LEAVE THEN LOOP I rec LOOP 77 LAST ! */ + t_nestleave = v4_asm_label(&as); + LIT(3); LIT(0); DO_(); + body = v4_asm_label(&as); + LIT(10); LIT(0); DO_(); + body2 = v4_asm_label(&as); + I_(); REC_(); + I_(); LIT(1); O(XOR); a = FWD(IF); O(DROP); b = FWD(JUMP); + HERE_(a); O(DROP); LEAVE_(); + HERE_(b); + LOOP_(body2); + I_(); REC_(); + LOOP_(body); + LIT(77); VSET(LAST); O(SEMI); + + /* ( limit start -- ) DO I KV @ = IF UNLOOP EXIT THEN I rec LOOP 99 LAST ! */ + t_unloop = v4_asm_label(&as); + DO_(); body = v4_asm_label(&as); + I_(); VGET(KV); O(XOR); a = FWD(IF); O(DROP); b = FWD(JUMP); + HERE_(a); O(DROP); UNLOOP_(); O(SEMI); + HERE_(b); + I_(); REC_(); + LOOP_(body); + LIT(99); VSET(LAST); O(SEMI); + + /* ( f -- n ) IF 1 ELSE 2 THEN (0BRANCH), section 2: + * if L1 drop 1 jump L2 L1: drop 2 L2: */ + t_if = v4_asm_label(&as); + a = FWD(IF); O(DROP); LIT(1); b = FWD(JUMP); + HERE_(a); O(DROP); LIT(2); + HERE_(b); O(SEMI); + + /* ( x y -- x y j ) 5 3 DO 2 1 DO J LEAVE LOOP LEAVE LOOP + * J with two cells of the caller's under it: it must leave them alone. */ + t_j3 = v4_asm_label(&as); + LIT(5); LIT(3); DO_(); + LIT(2); LIT(1); DO_(); + J_(); + UNLOOP_(); UNLOOP_(); + O(SEMI); +} + +/* ---- running ---------------------------------------------------------- */ + +static void prepare(v4_cell step, v4_cell k) +{ + unsigned i; + v4_dstack_reset(&n.ds); + v4_rstack_reset(&n.rs); + v4_exec_reset(&es); + v4_heat_reset(&h); + for (i = 0; i < TCAP; i++) n.mem[TRACE + (v4_cell)i] = 0x7E7E7E; + n.mem[CNT] = 0; n.mem[STEP] = step; n.mem[KV] = k; n.mem[LAST] = 0; +} +/* Runs `word`; true when it returns with the data stack as it found it + * under its arguments and the return stack exactly as it found it: two + * marked entries wait under the return address, and a loop that left its + * limit or index behind, or took one too many, would return through them. */ +#define RMARK0 ((v4_cell)0x6B0000A0) +#define RMARK1 ((v4_cell)0x6B0000A1) +static int call(v4_cell word, v4_cell step, v4_cell k, unsigned argc, v4_cell a, v4_cell b) +{ + prepare(step, k); + v4_dstack_push(&n.ds, CANARY); + if (argc > 0) v4_dstack_push(&n.ds, a); + if (argc > 1) v4_dstack_push(&n.ds, b); + v4_rstack_push(&n.rs, RMARK0); + v4_rstack_push(&n.rs, RMARK1); + return v4_test_call(&n, &es, &h, word, 100000) > 0 && n.ds.t == CANARY + && v4_rstack_pop(&n.rs) == RMARK1 && v4_rstack_pop(&n.rs) == RMARK0; +} +/* The trace is exactly these. */ +static int saw(const v4_cell *want, unsigned len) +{ + unsigned i; + if (n.mem[CNT] != (v4_cell)len) return 0; + for (i = 0; i < len; i++) if (n.mem[TRACE + (v4_cell)i] != want[i]) return 0; + return n.mem[TRACE + (v4_cell)len] == 0x7E7E7E; +} +#define SAW(...) saw((const v4_cell[]){ __VA_ARGS__ }, (unsigned)(sizeof((const v4_cell[]){ __VA_ARGS__ }) / sizeof(v4_cell))) + +/* Stack headroom, as in test_foundation.c: the same trace with marked cells + * under the canary and under the return address. */ +static int fits(v4_cell word, v4_cell step, v4_cell k, unsigned argc, v4_cell a, v4_cell b, + const v4_cell *want, unsigned len, unsigned dfill, unsigned rfill) +{ + unsigned i; + prepare(step, k); + for (i = 0; i < dfill; i++) v4_dstack_push(&n.ds, (v4_cell)(0x5A000000 + i)); + v4_dstack_push(&n.ds, CANARY); + if (argc > 0) v4_dstack_push(&n.ds, a); + if (argc > 1) v4_dstack_push(&n.ds, b); + for (i = 0; i < rfill; i++) v4_rstack_push(&n.rs, (v4_cell)(0x6B000000 + i)); + if (v4_test_call(&n, &es, &h, word, 100000) <= 0) return 0; + if (!saw(want, len)) return 0; + if (v4_dstack_pop(&n.ds) != CANARY) return 0; + for (i = dfill; i-- > 0; ) if (v4_dstack_pop(&n.ds) != (v4_cell)(0x5A000000 + i)) return 0; + for (i = rfill; i-- > 0; ) if (v4_rstack_pop(&n.rs) != (v4_cell)(0x6B000000 + i)) return 0; + return 1; +} +static void headroom(const char *name, v4_cell word, v4_cell step, v4_cell k, unsigned argc, v4_cell a, v4_cell b, + int min_d, int min_r) +{ + v4_cell want[TCAP]; + unsigned len, i; + int dh, rh; + CHECK(call(word, step, k, argc, a, b), "%s runs", name); + len = (unsigned)n.mem[CNT]; + for (i = 0; i < len; i++) want[i] = n.mem[TRACE + (v4_cell)i]; + for (dh = 0; dh < V4_DATA_DEPTH; dh++) if (!fits(word, step, k, argc, a, b, want, len, (unsigned)dh + 1u, 0)) break; + for (rh = 0; rh < V4_RET_DEPTH; rh++) if (!fits(word, step, k, argc, a, b, want, len, 0, (unsigned)rh + 1u)) break; + printf(" %-22s headroom: data %d below canary, return %d below its return address\n", name, dh, rh); + CHECK(dh >= min_d && rh >= min_r, "%s leaves room", name); +} + +/* ---- the C reference: v3's rules ---------------------------------------- */ + +/* The indexes a loop body sees; at most TCAP - 1 are produced, and the + * return is -1 if the loop would run longer than that. */ +static int ref_loop(v4_cell limit, v4_cell start, int qdo, int plus, v4_cell step, v4_cell *out) +{ + v4_cell i = start; + int len = 0; + if (qdo && start == limit) return 0; + for (;;) { + if (len >= TCAP - 1) return -1; + out[len++] = i; + i = (v4_cell)((v4_ucell)i + (v4_ucell)(plus ? step : 1)); + if (!plus) { if (!(i < limit)) break; } + else if (step >= 0) { if (!(i < limit)) break; } + else { if (!(i >= limit)) break; } + } + return len; +} + +static const v4_cell ends[] = { 0, 1, 2, 5, -1, -2, -5, 10, MAXS, (v4_cell)(MAXS - 1), (v4_cell)(MAXS - 4), + MINS, (v4_cell)(MINS + 1), (v4_cell)(MINS + 4) }; +#define NENDS (sizeof ends / sizeof ends[0]) +static const v4_cell steps[] = { 1, 2, 3, 7, -1, -2, -3, -7, 0, MAXS, MINS }; +#define NSTEPS (sizeof steps / sizeof steps[0]) + +int main(void) +{ + v4_cell want[TCAP]; + unsigned i, j, k, runs = 0, skipped = 0; + int len; + + printf("v4 loop tests: V4_CELL_BITS=%d\n", V4_CELL_BITS); + + v4_node_reset(&n); + /* Words 0 .. 15 each jump to themselves. A loop that leaves its index + * or limit on the return stack makes the word return to that number; + * the tests of LEAVE and UNLOOP use indexes and limits below 16, so such + * a return lands here and never comes back, where empty memory (all + * `;`) would have passed it on to the real return address unnoticed. */ + for (i = 0; i < 16; i++) { + v4_asm_begin(&as, &n, (v4_cell)i); + JUMP((v4_cell)i); + CHECK(v4_asm_ok(&as), "trap %u assembles", i); + } + v4_asm_begin(&as, &n, 16); + build(); + CHECK(v4_asm_ok(&as), "loop test words assemble"); + CHECK(v4_asm_label(&as) < TRACE, "code stays below the variables"); + printf(" code: %ld of %u words\n", (long)v4_asm_label(&as) - 16, (unsigned)V4_NODE_WORDS); + + /* ---- the v3 transcripts ---- */ + + /* : T 5 0 DO I . LOOP ; 0 1 2 3 4 : U 0 5 DO I . LOOP ; 5 + * : V 5 5 DO I . LOOP ; 5 : W 5 5 ?DO I . LOOP ; (nothing) + * : X 5 2 ?DO I . LOOP ; 2 3 4 */ + CHECK(call(t_do, 0, 0, 2, 5, 0) && SAW(0, 1, 2, 3, 4), "v3: 5 0 DO LOOP"); + CHECK(call(t_do, 0, 0, 2, 0, 5) && SAW(5), "v3: 0 5 DO LOOP runs once"); + CHECK(call(t_do, 0, 0, 2, 5, 5) && SAW(5), "v3: 5 5 DO LOOP runs once"); + CHECK(call(t_qdo, 0, 0, 2, 5, 5) && n.mem[CNT] == 0, "v3: 5 5 ?DO LOOP does not run"); + CHECK(call(t_qdo, 0, 0, 2, 5, 2) && SAW(2, 3, 4), "v3: 5 2 ?DO LOOP"); + + /* 10 0 DO I . 2 +LOOP 0 2 4 6 8 0 10 DO I . -3 +LOOP 10 7 4 1 + * 0 0 DO I . 5 +LOOP 0 3 7 DO I . 1 +LOOP 7 + * 7 3 DO I . -1 +LOOP 3 */ + CHECK(call(t_ploop, 2, 0, 2, 10, 0) && SAW(0, 2, 4, 6, 8), "v3: 10 0 DO 2 +LOOP"); + CHECK(call(t_ploop, -3, 0, 2, 0, 10) && SAW(10, 7, 4, 1), "v3: 0 10 DO -3 +LOOP"); + CHECK(call(t_ploop, 5, 0, 2, 0, 0) && SAW(0), "v3: 0 0 DO 5 +LOOP"); + CHECK(call(t_ploop, 1, 0, 2, 3, 7) && SAW(7), "v3: 3 7 DO 1 +LOOP"); + CHECK(call(t_ploop, -1, 0, 2, 7, 3) && SAW(3), "v3: 7 3 DO -1 +LOOP"); + + /* : T 3 0 DO 12 10 DO I . J . LOOP LOOP ; 10 0 11 0 10 1 11 1 10 2 11 2 */ + CHECK(call(t_nest, 0, 0, 2, 3, 12) && SAW(10, 0, 11, 0, 10, 1, 11, 1, 10, 2, 11, 2), "v3: nested loops, I and J"); + + /* FORTH-79 LEAVE: the body runs on to the loop's end with I unchanged. + * (v3, leaving at once, printed one number fewer in each of these.) + * : T 10 0 DO I . I 3 = IF LEAVE THEN I . LOOP ; 0 0 1 1 2 2 3 3 + * : T 20 0 DO I . I 6 = IF LEAVE THEN I . 3 +LOOP 77 . ; 0 0 3 3 6 6 77 + * : T 0 20 DO I . I 11 = IF LEAVE THEN I . -3 +LOOP 77 . ; 20 20 17 17 14 14 11 11 77 */ + CHECK(call(t_leave, 0, 3, 2, 10, 0) && SAW(0, 0, 1, 1, 2, 2, 3, 3) && n.mem[LAST] == 77, "LEAVE in LOOP"); + CHECK(call(t_pleave, 3, 6, 2, 12, 0) && SAW(0, 0, 3, 3, 6, 6) && n.mem[LAST] == 77, "LEAVE in +LOOP, limit below 16"); + CHECK(call(t_pleave, 3, 6, 2, 20, 0) && SAW(0, 0, 3, 3, 6, 6) && n.mem[LAST] == 77, "LEAVE in +LOOP, up"); + CHECK(call(t_pleave, -3, 11, 2, 0, 20) && SAW(20, 20, 17, 17, 14, 14, 11, 11) && n.mem[LAST] == 77, + "LEAVE in +LOOP, down"); + CHECK(call(t_pleave, 0, 4, 2, 9, 4) && SAW(4, 4) && n.mem[LAST] == 77, "LEAVE ends a 0 +LOOP"); + + /* : T 10 0 DO I 3 = IF UNLOOP EXIT THEN I . LOOP 99 . ; 0 1 2 */ + CHECK(call(t_unloop, 0, 3, 2, 10, 0) && SAW(0, 1, 2) && n.mem[LAST] == 0, "v3: UNLOOP EXIT"); + CHECK(call(t_unloop, 0, 55, 2, 4, 0) && SAW(0, 1, 2, 3) && n.mem[LAST] == 99, "a loop that never meets UNLOOP runs out"); + + /* : T IF 1 ELSE 2 THEN . ; 5 T 0 T -1 T 1 2 1 */ + { + static const v4_cell f[] = { 5, 0, -1, 1, MINS, MAXS }; + for (i = 0; i < 6; i++) { + prepare(0, 0); + v4_dstack_push(&n.ds, CANARY); + v4_dstack_push(&n.ds, f[i]); + CHECK(v4_test_call(&n, &es, &h, t_if, 1000) > 0 && v4_dstack_pop(&n.ds) == (f[i] ? 1 : 2) + && v4_dstack_pop(&n.ds) == CANARY, "%sIF ELSE THEN [%u]", i < 3 ? "v3: " : "", i); + } + } + + /* ---- where v4 parts from v3: LEAVE inside an outer loop ---- */ + CHECK(call(t_nestleave, 0, 0, 0, 0, 0) && SAW(0, 1, 0, 0, 1, 1, 0, 1, 2) && n.mem[LAST] == 77, + "LEAVE leaves the inner loop only (v3: 0 1 10 and the outer loop stops)"); + + /* J leaves the cells under it alone */ + prepare(0, 0); + v4_dstack_push(&n.ds, CANARY); + v4_dstack_push(&n.ds, 111); + v4_dstack_push(&n.ds, 222); + CHECK(v4_test_call(&n, &es, &h, t_j3, 1000) > 0 && v4_dstack_pop(&n.ds) == 3 && v4_dstack_pop(&n.ds) == 222 + && v4_dstack_pop(&n.ds) == 111 && v4_dstack_pop(&n.ds) == CANARY, "J is the outer index"); + + /* ---- against C: every pair of loop ends, and every step ---- */ + for (i = 0; i < NENDS; i++) + for (j = 0; j < NENDS; j++) { + v4_cell limit = ends[i], start = ends[j]; + for (k = 0; k < 2; k++) { + len = ref_loop(limit, start, (int)k, 0, 0, want); + if (len < 0) { skipped++; continue; } + runs++; + CHECK(call(k ? t_qdo : t_do, 0, 0, 2, limit, start) && saw(want, (unsigned)len), + "%s LOOP [%u,%u]: %d times", k ? "?DO" : "DO", i, j, len); + } + for (k = 0; k < NSTEPS; k++) { + unsigned q; + for (q = 0; q < 2; q++) { + len = ref_loop(limit, start, (int)q, 1, steps[k], want); + if (len < 0) { skipped++; continue; } + runs++; + CHECK(call(q ? t_pqdo : t_ploop, steps[k], 0, 2, limit, start) && saw(want, (unsigned)len), + "%s +LOOP [%u,%u] step [%u]: %d times", q ? "?DO" : "DO", i, j, k, len); + } + } + } + printf(" loops run against C: %u (%u more would run past %d times and were left out)\n", runs, skipped, TCAP - 1); + CHECK(runs > 2000, "enough loops were run"); + + /* LEAVE and UNLOOP EXIT at every index of a short loop */ + for (i = 0; i < 12; i++) { + unsigned m; + for (m = 0, j = 0; j <= i; j++) { want[m++] = (v4_cell)j; want[m++] = (v4_cell)j; } + CHECK(call(t_leave, 0, (v4_cell)i, 2, 12, 0) && saw(want, m) && n.mem[LAST] == 77, "LEAVE at %u", i); + for (m = 0, j = 0; j < i; j++) want[m++] = (v4_cell)j; + CHECK(call(t_unloop, 0, (v4_cell)i, 2, 12, 0) && saw(want, m) && n.mem[LAST] == 0, "UNLOOP EXIT at %u", i); + } + + /* nested: every pair of small limits */ + for (i = 1; i <= 4; i++) + for (j = 11; j <= 14; j++) { + unsigned m = 0, a, b; + for (a = 0; a < i; a++) for (b = 10; b < j; b++) { want[m++] = (v4_cell)b; want[m++] = (v4_cell)a; } + CHECK(call(t_nest, 0, 0, 2, (v4_cell)i, (v4_cell)j) && saw(want, m), "nested [%u,%u]", i, j); + } + + /* What a loop leaves the code around it (D-2): a word with one loop, and + * with two nested. */ + headroom("DO .. LOOP", t_do, 0, 0, 2, 5, 0, 5, 6); + headroom("DO .. +LOOP", t_ploop, 2, 0, 2, 10, 0, 5, 6); + headroom("?DO .. LOOP", t_qdo, 0, 0, 2, 5, 2, 5, 6); + headroom("DO .. LEAVE .. LOOP", t_leave, 0, 3, 2, 10, 0, 5, 6); + headroom("nested DO, I and J", t_nest, 0, 0, 2, 3, 12, 5, 4); + + CHECK(v4_node_guards_intact(&n), "guards intact"); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_node.c b/v4/tests/test_node.c new file mode 100644 index 00000000..72f70d58 --- /dev/null +++ b/v4/tests/test_node.c @@ -0,0 +1,262 @@ +/* test_node.c -- the node: registers, memory, and the boundary on memory. + * + * The memory boundary does a job the stack boundaries do not: it is the landing + * place for a *linear* index error -- mem[-1], mem[V4_NODE_WORDS] -- which is + * inside the struct and therefore invisible to AddressSanitizer. + * + * It does not cover an out-of-range *word address*, where P, A or B has left + * the address space: as an index that would land gigabytes away, outside any + * band. D-14 guards that with a range check, tested here for the C accessors + * and in test_exec.c for a running programme. + */ +#include "v4/node.h" + +#include +#include +#include +#include +#include + +static int failures = 0; +static int checks = 0; + +#define CHECK(cond, ...) \ + do { \ + checks++; \ + if (!(cond)) { \ + failures++; \ + printf(" FAIL %s:%d: ", __FILE__, __LINE__); \ + printf(__VA_ARGS__); \ + printf("\n"); \ + } \ + } while (0) + +static void test_geometry(void) +{ + /* The boundary is 5% of memory at each end, rounded up, never zero. */ + CHECK(V4_MEM_BOUND == V4_GUARD_ELEMS(V4_NODE_WORDS), + "memory boundary is not 5%% of %u words", V4_NODE_WORDS); + CHECK(V4_MEM_BOUND >= 1u, "memory boundary must be at least one word"); + CHECK((unsigned long)V4_MEM_BOUND * 100u + >= (unsigned long)V4_NODE_WORDS * V4_GUARD_PCT, + "memory boundary %u is less than %u%% of %u", V4_MEM_BOUND, + V4_GUARD_PCT, V4_NODE_WORDS); + + /* At the default size that is a real cost, and naming it here means the + * number is on the record rather than discovered from a memory report. */ + printf(" node: %u words + %u head + %u tail boundary " + "(%.1f%% overhead)\n", + V4_NODE_WORDS, V4_MEM_BOUND, V4_MEM_BOUND, + 100.0 * 2.0 * (double)V4_MEM_BOUND / (double)V4_NODE_WORDS); +} + +static void test_reset_state(void) +{ + v4_node n; + v4_node_reset(&n); + + CHECK(n.p == 0, "P after reset"); + CHECK(n.a == 0, "A after reset"); + CHECK(n.b == 0, "B after reset"); + CHECK(v4_node_guards_intact(&n), "all boundaries intact after reset"); + + /* T, S and R live in the stacks, so they are checked through the stack + * API rather than as node fields. */ + CHECK(v4_dstack_peek(&n.ds) == 0, "T after reset"); + CHECK(v4_dstack_peek2(&n.ds) == 0, "S after reset"); + CHECK(v4_rstack_peek(&n.rs) == 0, "R after reset"); +} + +static void test_guards_absent_before_reset(void) +{ + /* A node that has never been reset holds whatever was on the stack. The + * check must notice, which is what proves it reads the boundary rather than + * returning a constant. */ + v4_node *n = (v4_node *)malloc(sizeof *n); + if (n == NULL) { + failures++; + printf(" FAIL %s:%d: out of memory\n", __FILE__, __LINE__); + return; + } + memset(n, 0xA5, sizeof *n); + CHECK(!v4_node_guards_intact(n), + "boundaries must not read as intact before reset"); + v4_node_reset(n); + CHECK(v4_node_guards_intact(n), "boundaries intact after reset"); + free(n); +} + +static void test_load_store_roundtrip(void) +{ + v4_node n; + v4_node_reset(&n); + + /* Every word, not a sample: a stray boundary in the middle of memory would + * not be found by spot checks. */ + for (v4_cell i = 0; i < (v4_cell)V4_NODE_WORDS; i++) { + v4_node_store(&n, i, i * 3 + 1); + } + for (v4_cell i = 0; i < (v4_cell)V4_NODE_WORDS; i++) { + CHECK(v4_node_load(&n, i) == i * 3 + 1, + "word %lld: got %lld want %lld", (long long)i, + (long long)v4_node_load(&n, i), (long long)(i * 3 + 1)); + } + CHECK(v4_node_guards_intact(&n), "memory boundary survived a full sweep"); +} + +static void test_load_store_edges(void) +{ + /* The first and last words, which are the ones adjacent to the boundary. + * A boundary that is a word too wide would quietly steal word 0 or the + * last word, and the memory would still pass every interior test. */ + v4_node n; + v4_node_reset(&n); + + v4_node_store(&n, 0, 0x11111111); + v4_node_store(&n, (v4_cell)V4_NODE_WORDS - 1, 0x22222222); + CHECK(v4_node_load(&n, 0) == 0x11111111, "word 0 did not take its value"); + CHECK(v4_node_load(&n, (v4_cell)V4_NODE_WORDS - 1) == 0x22222222, + "last word did not take its value"); + CHECK(v4_node_guards_intact(&n), "edge writes disturbed the boundary"); +} + +static void test_boundary_is_adjacent_to_memory(void) +{ + /* The band only catches a linear index error if it is immediately next to + * mem, so adjacency is asserted rather than assumed -- the compiler is free + * to reorder struct members, and a band that drifted to the far end of the + * struct would silently stop catching anything. */ + CHECK(offsetof(v4_node, mem_guard_tail) + == offsetof(v4_node, mem) + sizeof(((v4_node *)0)->mem), + "tail boundary does not start immediately after memory"); + CHECK(offsetof(v4_node, mem_guard_head) + + sizeof(((v4_node *)0)->mem_guard_head) + == offsetof(v4_node, mem), + "head boundary does not end immediately before memory"); +} + +static void test_linear_overrun_low_is_caught(void) +{ + /* A linear index error -- the kind an off-by-one in a loop bound or a + * pointer step produces. It lands in the head boundary, it is inside the + * struct so AddressSanitizer says nothing about it, and the boundary check + * is what reports it. Written through the boundary array rather than as + * mem[-1], because mem[-1] is out of bounds of a declared array and the + * standard lets the compiler do anything with it; the offsetof test above + * establishes that this *is* the word mem[-1] resolves to. */ + v4_node n; + v4_node_reset(&n); + CHECK(v4_node_guards_intact(&n), "intact before the deliberate overrun"); + + n.mem_guard_head[V4_MEM_BOUND - 1u] = (v4_cell)0xDEADBEEF; + CHECK(!v4_node_guards_intact(&n), + "a linear access before mem was not detected"); + + v4_node_reset(&n); + CHECK(v4_node_guards_intact(&n), "intact after re-reset"); +} + +static void test_linear_overrun_high_is_caught(void) +{ + v4_node n; + v4_node_reset(&n); + + n.mem_guard_tail[0] = (v4_cell)0xDEADBEEF; + CHECK(!v4_node_guards_intact(&n), + "a linear access past the last word was not detected"); + + v4_node_reset(&n); + CHECK(v4_node_guards_intact(&n), "intact after re-reset"); +} + +static void test_out_of_range_word_address_touches_nothing(void) +{ + /* A word address outside memory is a different thing from a linear index + * error: -1 as an index would be 2^32 words past mem, far outside the + * struct and any band. D-14 (2026-10-04) rules it guarded: load gives 0 + * and store does nothing. (That a running programme faults there is the + * executor's business: test_exec.c.) */ + static const v4_cell bad[] = { -1, -2, (v4_cell)V4_NODE_WORDS, (v4_cell)V4_NODE_WORDS + (v4_cell)V4_MEM_BOUND, + (v4_cell)V4_MSB, (v4_cell)(V4_MSB - 1u) }; + v4_node *n = malloc(sizeof *n); + unsigned i; + if (!n) { CHECK(0, "malloc"); return; } + v4_node_reset(n); + for (i = 0; i < V4_NODE_WORDS; i++) n->mem[i] = (v4_cell)(i + 1000u); + for (i = 0; i < sizeof bad / sizeof bad[0]; i++) { + CHECK(!v4_node_addr_ok(bad[i]), "%lld is not an address", (long long)bad[i]); + CHECK(v4_node_load(n, bad[i]) == 0, "a load at %lld gives 0", (long long)bad[i]); + v4_node_store(n, bad[i], 0x5A5A); + } + for (i = 0; i < V4_NODE_WORDS; i++) + if (n->mem[i] != (v4_cell)(i + 1000u)) { CHECK(0, "a store outside memory changed word %u", i); break; } + CHECK(v4_node_guards_intact(n), "and the boundaries are intact"); + CHECK(v4_node_addr_ok(0) && v4_node_addr_ok((v4_cell)(V4_NODE_WORDS - 1u)), "the first and last words are addresses"); + free(n); +} + +static void test_ends_are_distinguishable(void) +{ + /* The two boundaries carry different patterns precisely so that a failure + * says which end. Checked here on memory as well as in test_guard.c on the + * ring, because "which end" is the property that makes a report actionable. */ + v4_node n; + v4_node_reset(&n); + CHECK((v4_ucell)n.mem_guard_head[0] == V4_GUARD_PATTERN_HEAD, + "memory head boundary pattern"); + CHECK((v4_ucell)n.mem_guard_tail[0] == V4_GUARD_PATTERN_TAIL, + "memory tail boundary pattern"); + CHECK(V4_GUARD_PATTERN_HEAD != V4_GUARD_PATTERN_TAIL, + "head and tail patterns are equal at V4_CELL_BITS=%d", V4_CELL_BITS); +} + +static void test_workload_never_false_alarms(void) +{ + /* A boundary that fires on legitimate use is worse than no boundary. Drive + * a workload across the whole address space, through both address registers + * and the program counter, and require every boundary to survive. */ + v4_node n; + v4_node_reset(&n); + + uint64_t s = 0xB5026F5AA96619E9ull; + for (int i = 0; i < 200000; i++) { + s ^= s << 13; s ^= s >> 7; s ^= s << 17; + + v4_cell addr = (v4_cell)(s % (uint64_t)V4_NODE_WORDS); + v4_node_store(&n, addr, (v4_cell)s); + + n.a = addr; + n.b = (v4_cell)((addr + 1u) % V4_NODE_WORDS); + n.p = (v4_cell)((addr + 2u) % V4_NODE_WORDS); + + v4_dstack_push(&n.ds, (v4_cell)s); + v4_rstack_push(&n.rs, (v4_cell)(s >> 13)); + if (i & 1) { (void)v4_dstack_pop(&n.ds); (void)v4_rstack_pop(&n.rs); } + } + CHECK(v4_node_guards_intact(&n), + "a boundary fired during ordinary workload"); + CHECK(n.p < (v4_cell)V4_NODE_WORDS, "P left the address space"); + CHECK(n.a < (v4_cell)V4_NODE_WORDS, "A left the address space"); + CHECK(n.b < (v4_cell)V4_NODE_WORDS, "B left the address space"); +} + +int main(void) +{ + printf("v4 node tests: V4_CELL_BITS=%d, %u words\n", + V4_CELL_BITS, V4_NODE_WORDS); + + test_geometry(); + test_reset_state(); + test_guards_absent_before_reset(); + test_load_store_roundtrip(); + test_load_store_edges(); + test_boundary_is_adjacent_to_memory(); + test_linear_overrun_low_is_caught(); + test_linear_overrun_high_is_caught(); + test_out_of_range_word_address_touches_nothing(); + test_ends_are_distinguishable(); + test_workload_never_false_alarms(); + + printf(" %d checks, %d failures\n", checks, failures); + return failures ? 1 : 0; +} diff --git a/v4/tests/test_numout.c b/v4/tests/test_numout.c new file mode 100644 index 00000000..f6cd0cd9 --- /dev/null +++ b/v4/tests/test_numout.c @@ -0,0 +1,731 @@ +/* test_numout.c -- `.` `U.` `D.` `.R` `U.R` `D.R` and SPACES, executed. + * + * DECOMPOSITION.md 5.8 and 5.10. The number-printing words are pictured + * output (test_pictured.c) handed to TYPE (test_terminal.c), so this file + * assembles both sets again, opcode for opcode, on a node of its own with + * the console attached, and reads back what was printed. + * + * v3 (v3/src/word_source/format_words.c, io_words.c): + * . U. the number in the current base, then one space + * .R U.R ( n width -- ) the number right-justified in `width` + * columns; a number wider than the field is printed whole; + * width <= 0 pads nothing. No space after it: that is the + * FORTH-79 reference word (ruled 2026-10-04); v3 printed one. + * D. D.R the same for a double + * SPACES ( n -- ) n spaces, none for n <= 0 + * + * Where v4 parts from v3, as 5.8 already rules for pictured output: + * - a double is ( lo hi ), high cell on top; v3's D. took the low cell on + * top; + * - D. prints the whole double; v3 printed "DOUBLE-OVERFLOW" unless the + * double fitted one signed cell, and agrees with v4 whenever it does; + * - the number is built in the 63-character hold buffer (D-13), so a + * number longer than that loses its leading characters and sets + * NODE-ERROR. v3 printed from a private 80-character buffer. + * + * Six transcripts of the real v3 binary are recorded below as expected + * output. They were taken on 2026-10-03 from + * printf '