feat(scheduler-sim-repl-verbosity): task 2.1 - RED-phase Round Rollup tests
Adds 7 tests in a new test_repl_round_rollup.c covering per-round decision summaries, collapsing of repetitive rounds, and the shared repl_round_collapse_flush() entry point (Requirements 2.1-2.4, 3.1-3.4, 3.6). repl_round_collapse_flush() itself is not yet implemented (task 2.2) - build fails at link time, confirming RED. Split into its own file rather than the originally-planned test_repl_execution_control.c: that file was already at the project's 800-line cap before this task, and landing these tests there would have pushed it to 1563 lines. design.md's File Structure Plan is corrected accordingly (mirrors the existing test_repl_snapshot_params.c /test_repl_breakpoints_inspection.c split in this same file family). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YAWMhfRJFnmmnG8h97yUDd
This commit is contained in:
parent
e6c670194f
commit
0c6ccb0324
4 changed files with 1058 additions and 2 deletions
|
|
@ -110,7 +110,9 @@ flowchart TD
|
|||
- `src/scheduler/include/repl.h` — no functional change expected; existing inline wrappers already cover the gating points this feature needs.
|
||||
|
||||
### New/Modified Test Files
|
||||
- `src/scheduler/testsuite/test_repl_execution_control.c` — extended with child-process output-capture tests covering Requirements 1, 2, 3, and the Requirement 5 no-regression checks (this file already drives `sched_sim_driver_run()` end-to-end and captures real process output via `child_continue_then_inspect`-style helpers); also gains the new prompt-content tests (Requirement 5.5) and `help`-listing structure tests (Requirement 7.1-7.4) — the natural home given it already exercises `readline()`/prompt-adjacent behavior and no `help` test exists anywhere today.
|
||||
**Correction (post-review, task 2.1)**: `test_repl_execution_control.c` was already over this project's 800-line cap (937 lines) before this feature's work began. Landing task 2.1's Round Rollup tests there per the original plan below pushed it to 1563 lines — nearly double the cap, and past the ~1000-line threshold this exact spec family already treats as a split trigger (`test_repl_snapshot_params.c` was split out of `test_repl_breakpoints_inspection.c` for precisely this reason; see that file's own meson.build comment). Round Rollup's tests (task 2.1, and any Round-Rollup-internal portion of later tasks, e.g. Requirement 3.5's flush-on-structural-event/breakpoint interaction) now live in a new `src/scheduler/testsuite/test_repl_round_rollup.c` instead, duplicating (not sharing) whatever pre-existing static fixture helpers it needs — the established convention this same file pair (`test_repl_breakpoints_inspection.c`/`test_repl_snapshot_params.c`) already follows, rather than factoring out a shared test-helper header. `test_repl_execution_control.c` remains the target for Requirement 1's Event Echo Gate tests, the `sim_print_decision` gate tests, the Requirement 5 no-regression checks, the new prompt-content tests (Requirement 5.5), and `help`-listing structure tests (Requirement 7.1-7.4) — but re-check its line count before landing each of those; if it approaches the cap again, split further rather than growing past it.
|
||||
- `src/scheduler/testsuite/test_repl_execution_control.c` — child-process output-capture tests covering Requirement 1, the Requirement 5 no-regression checks (this file already drives `sched_sim_driver_run()` end-to-end and captures real process output via `child_continue_then_inspect`-style helpers); also gains the new prompt-content tests (Requirement 5.5) and `help`-listing structure tests (Requirement 7.1-7.4) — the natural home given it already exercises `readline()`/prompt-adjacent behavior and no `help` test exists anywhere today.
|
||||
- `src/scheduler/testsuite/test_repl_round_rollup.c` (new, per the Correction above) — child-process output-capture tests for Requirements 2 and 3 (per-round decision summary, collapsing, the shared flush entry point, and its call from `xce_repl_on_replay_complete`).
|
||||
- `src/scheduler/testsuite/test_repl_output_compression.c` (new) — focused unit tests for the jobid-range-compression helper (Requirement 4): a pure function, tested without the process harness.
|
||||
- `src/scheduler/testsuite/test_repl_resource_formatting.c` (new) — focused unit tests for the byte/megabyte classification and adaptive human-scaling helpers (Requirement 6.1, 6.2, 6.5): pure functions, tested without the process harness, mirroring `test_repl_output_compression.c`'s pattern.
|
||||
- `src/scheduler/testsuite/test_repl_breakpoints_inspection.c` — extended with `info worker`/`info resource` table-layout and units-mode-display tests (Requirement 6.6, alongside its existing `info worker`/`info resource` tests) and `break`'s enriched unrecognized-event-type error test (Requirement 7.5, alongside the existing `test_break_unrecognized_event_type_rejected`).
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
- _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5_
|
||||
|
||||
- [ ] 2. Core: per-round decision summary, repetitive-round collapsing, and the shared range-flush capability
|
||||
- [ ] 2.1 Write failing tests for round-level decision summaries, collapsing, and the shared flush capability
|
||||
- [x] 2.1 Write failing tests for round-level decision summaries, collapsing, and the shared flush capability
|
||||
- Cover: a round with at least one decision produces one summary line naming decision counts and affected job identifiers; a round with zero decisions produces no individual line; two or more consecutive idle rounds collapse into a single range notification; two or more consecutive rounds with an identical decision outcome collapse into a single range notification; a collapsed range notification states its round bounds, round count, and covered time span; a change in outcome ends an active collapsed range; a job's status change between rounds is reflected in the following round's summary even without a dedicated dispatch event to observe; the shared flush capability safely does nothing when no range is active and is safe to call more than once in a row; an active collapsed range open at replay completion is flushed and printed before `xce_repl_on_replay_complete()`'s existing completion banner
|
||||
- Observable: the new test cases fail against today's unconditional per-decision echo, which has no summarizing, collapsing, or flush behavior
|
||||
- _Requirements: 2.1, 2.2, 2.4, 3.1, 3.2, 3.3, 3.4, 3.6_
|
||||
|
|
|
|||
|
|
@ -901,6 +901,36 @@ sched_repl_execution_control_test = executable(
|
|||
dependencies: [scheduler_test_deps, libedit_dep],
|
||||
install: false)
|
||||
|
||||
# Contract test for the interactive simulation REPL's Round Rollup
|
||||
# component (scheduler-sim-repl-verbosity spec, task 2.1, Requirements 2
|
||||
# and 3 "per-round decision summary"/"collapsing repetitive rounds"): a
|
||||
# round with at least one decision produces a summary naming decision
|
||||
# counts and affected jobids; idle or identical-outcome consecutive rounds
|
||||
# collapse into a single range notification; and the shared
|
||||
# repl_round_collapse_flush() entry point is exercised directly (a safe
|
||||
# no-op when nothing is active) and indirectly (flushed before a structural
|
||||
# event/replay-complete banner). Same white-box #include pattern as
|
||||
# sched_repl_execution_control_test above (core.c, core_clock.c,
|
||||
# core_events.c, core_session.c, decision.c, plugin.c,
|
||||
# plugins/builtin_fcfs.c, recording.c, recording_session.c, sim.c,
|
||||
# sim_loop.c, sim_record.c, sim_verify.c,
|
||||
# snapshot.c/snapshot_wire.c/snapshot_load.c, repl.c, repl_break.c,
|
||||
# repl_info.c, repl_params.c). Split into its own file rather than appended
|
||||
# to test_repl_execution_control.c -- that file was already 936 lines
|
||||
# (pre-existing, over this project's 800-line cap on its own), and this
|
||||
# task's own tests (seven forked-child, real-stdout-capture fixtures plus
|
||||
# their own fork/capture helper pair) would have pushed it to 1563 lines,
|
||||
# past the ~1000-line threshold this exact spec family already treats as a
|
||||
# split trigger (see sched_repl_snapshot_params_test's own comment below
|
||||
# for the precedent). See design.md's "**Correction (post-review, task
|
||||
# 2.1)**" note.
|
||||
sched_repl_round_rollup_test = executable(
|
||||
'sched_repl_round_rollup_test',
|
||||
['test_repl_round_rollup.c'],
|
||||
include_directories:[incdir],
|
||||
dependencies: [scheduler_test_deps, libedit_dep],
|
||||
install: false)
|
||||
|
||||
# Contract test for the interactive simulation REPL's breakpoint and
|
||||
# state-inspection slice (scheduler-core spec, task 12.2, Req 5 AC 22
|
||||
# "Breakpoints"/"State inspection"): setting a breakpoint on a specific
|
||||
|
|
@ -1351,6 +1381,9 @@ test('scheduler sim e2e original motivation test',
|
|||
test('scheduler repl execution control test',
|
||||
sched_repl_execution_control_test, suite: 'scheduler',
|
||||
env: ['ASAN_OPTIONS=detect_leaks=0'])
|
||||
test('scheduler repl round rollup test',
|
||||
sched_repl_round_rollup_test, suite: 'scheduler',
|
||||
env: ['ASAN_OPTIONS=detect_leaks=0'])
|
||||
test('scheduler repl breakpoints inspection test',
|
||||
sched_repl_breakpoints_inspection_test, suite: 'scheduler',
|
||||
env: ['ASAN_OPTIONS=detect_leaks=0'])
|
||||
|
|
|
|||
1021
src/scheduler/testsuite/test_repl_round_rollup.c
Normal file
1021
src/scheduler/testsuite/test_repl_round_rollup.c
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue