Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions changes/unreleased/pssm-call-results-tester-traces.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- **A synchronous call of an operation a state machine accepts as a call event returns the operation's outputs to the caller.** `StateExecutor.Call` queues the call event, runs the machine through the run-to-completion step dispatching it — later events that step queued and timers it armed wait for the machine's next run, while a call a state defers holds its caller until the machine recalls it — and releases the caller with the values the behaviors that step fired — the transition's effect, an entry or an exit — returned or assigned to the operation's `out` and result parameters, by name — the parameters the operation declares as a member of the machine's owner when it declares one, an `inout` the step left unwritten going back as passed, every output the step returned otherwise — as PSSM §8.5.9 resumes a synchronous caller after the run-to-completion step; a call the run leaves queued or deferred is reported as `ErrCallNotReturned`, one no transition accepts is discarded. The arguments are checked against the declaration the call selects among same-named operations before the call is queued — an unbound, unknown or wrong-typed one is refused, an omitted input carries its default — and the queued call event carries that declaration, so it fires only the triggers naming it and same-named overloads whose parameter names differ reach their own transitions. A snapshot and a held image capture the call in flight. A nested action's `return` or output assignment reaches the enclosing behavior's parameter of that name on the way. Conformance case `state_call_trigger_results` and `TestRuntimeRobustnessCallResults` cover it.
- **The PSSM referee drives the tester's stimulation in the tester's order and reads a standalone state machine as the class under test.** The driver performs each send, synchronous call and `trace(...)` of the tester's behavior as the tester does, appending a traced value to the target's `log` once the call it embeds has returned, with the suite's test library (`Concat`, `ToString`, `formatParameterValue`) read into the model and evaluated generically; the reader reads a `StateMachine` that is itself the class under test as a target with its attributes, operations and constructor. *Event 019 A* moves from `not-expressible` to `pass` (52 pass / 13 fail / 37 not-expressible / 1 differs-by-design); tests needing an entry, exit or do behavior with parameters, or an effect that returns the call's result, stay `not-expressible` on exactly those reasons until the emitter spells them, and every other test's result and reason is unchanged.
176 changes: 154 additions & 22 deletions docs/internals/design/precise-semantics-alignment.md

Large diffs are not rendered by default.

34 changes: 19 additions & 15 deletions docs/project/pssm-referee-baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
"url": "https://www.omg.org/spec/PSSM/20181101/PSSM_TestSuite.xmi",
"suiteDigest": "c355b249c356774377a46b60345019d827af1ce417bde88e533aa5f39206ae07",
"tests": 103,
"recorded": "2026-09-19",
"develop": "b36c7c0f0fd8069a11df862b185eb2b101478fb7"
"recorded": "2026-09-21",
"develop": "2a652735904510298960f56ab48d5e2713423f3f"
},
"buckets": {
"differs-by-design": 1,
"fail": 13,
"not-expressible": 38,
"pass": 51
"not-expressible": 37,
"pass": 52
},
"tests": [
{
Expand Down Expand Up @@ -524,11 +524,15 @@
{
"name": "Event 019 A",
"area": "Event",
"class": "not-expressible",
"bucket": "not-expressible",
"reasons": [
"tester trace this.testable.trace(\"End\")"
]
"class": "standard",
"bucket": "pass",
"expected": [
"S1(exit)::Call(op)::End::S2(entry)"
],
"reached": [
"S1(exit)::Call(op)::End::S2(entry)"
],
"runs": 1
},
{
"name": "Event 019 B",
Expand All @@ -554,7 +558,7 @@
"class": "not-expressible",
"bucket": "not-expressible",
"reasons": [
"operation result T2; tester trace this.testable.trace(formatParameterValue(false, this.testable.op()))"
"operation result T2"
]
},
{
Expand All @@ -563,7 +567,7 @@
"class": "not-expressible",
"bucket": "not-expressible",
"reasons": [
"behavior parameter S1.S1.1; behavior parameter S1.S2.1.S2.1.1; operation result T2; tester trace this.testable.trace(Concat(formatParameterValue(false, this.testable.or(true, true)), formatParameterValue(false, this.testable.or(true, true))))"
"behavior parameter S1.S1.1; behavior parameter S1.S2.1.S2.1.1; operation result T2"
]
},
{
Expand Down Expand Up @@ -872,7 +876,7 @@
"class": "not-expressible",
"bucket": "not-expressible",
"reasons": [
"standalone state machine Standalone001_Test; exit point ExitPoint1; exit point ExitPoint1; entry point EntryPoint1"
"exit point ExitPoint1; exit point ExitPoint1; entry point EntryPoint1"
]
},
{
Expand All @@ -881,7 +885,7 @@
"class": "not-expressible",
"bucket": "not-expressible",
"reasons": [
"standalone state machine Standalone002_Test; exit point ExitPoint1; entry point EntryPoint1; behavior parameter S2; behavior parameter S2; behavior parameter S2.S2.1; behavior parameter S2.S2.2"
"exit point ExitPoint1; entry point EntryPoint1; behavior parameter S2; behavior parameter S2; behavior parameter S2.S2.1; behavior parameter S2.S2.2"
]
},
{
Expand All @@ -890,7 +894,7 @@
"class": "not-expressible",
"bucket": "not-expressible",
"reasons": [
"standalone state machine Standalone003_Test; behavior parameter S1.S1.1; behavior parameter S1.S2.1.S2.1.1; operation result T2; tester trace this.testable.trace(Concat(formatParameterValue(false, this.testable.or(true, true)), formatParameterValue(false, this.testable.or(true, true))))"
"behavior parameter S1.S1.1; behavior parameter S1.S2.1.S2.1.1; operation result T2"
]
},
{
Expand Down Expand Up @@ -1187,7 +1191,7 @@
"class": "not-expressible",
"bucket": "not-expressible",
"reasons": [
"operation result T4; tester trace this.testable.trace(formatParameterValue(false, this.testable.op(true)))"
"operation result T4"
]
},
{
Expand Down
Loading
Loading