From a4adb290fc5aaf09e21e98074f20a643480a974f Mon Sep 17 00:00:00 2001 From: "ergon-release[bot]" <340038722+ergon-release[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 10:20:49 +0000 Subject: [PATCH] build: sync assert-spec to 16.0.0 --- .changeset/spec-sync-dokimasia-assert-spec.md | 4 + src/dokimi_assert/conformance/VERSION | 2 +- .../corpus/history/linearizable.json | 405 ++++++++++++ .../corpus/history/serializable.json | 486 ++++++++++++-- .../corpus/history/snapshot-isolation.json | 625 +++++++++++++++++- .../conformance/corpus/prop/behaviour.json | 317 ++++++++- .../conformance/corpus/prop/forms.json | 316 ++++++--- .../conformance/corpus/prop/recording.json | 282 ++++++++ .../conformance/corpus/stateful/machines.json | 291 +++++++- src/dokimi_assert/conformance/manifest.json | 28 +- .../conformance/overlays/python.json | 6 +- .../conformance/spec/assertions.json | 260 ++++++-- .../conformance/spec/naming.json | 79 ++- 13 files changed, 2849 insertions(+), 252 deletions(-) create mode 100644 .changeset/spec-sync-dokimasia-assert-spec.md diff --git a/.changeset/spec-sync-dokimasia-assert-spec.md b/.changeset/spec-sync-dokimasia-assert-spec.md new file mode 100644 index 0000000..4fe9f80 --- /dev/null +++ b/.changeset/spec-sync-dokimasia-assert-spec.md @@ -0,0 +1,4 @@ +--- +--- + +Sync the vendored copy of assert-spec to 16.0.0. diff --git a/src/dokimi_assert/conformance/VERSION b/src/dokimi_assert/conformance/VERSION index fc9c00c..946789e 100644 --- a/src/dokimi_assert/conformance/VERSION +++ b/src/dokimi_assert/conformance/VERSION @@ -1 +1 @@ -13.6.0 +16.0.0 diff --git a/src/dokimi_assert/conformance/corpus/history/linearizable.json b/src/dokimi_assert/conformance/corpus/history/linearizable.json index 15a2c45..2273680 100644 --- a/src/dokimi_assert/conformance/corpus/history/linearizable.json +++ b/src/dokimi_assert/conformance/corpus/history/linearizable.json @@ -2729,6 +2729,411 @@ "limit": null } }, + { + "id": "linearizable/unknown-writes-that-no-read-needs-pass-within-the-budget", + "spec": "register", + "budget": 10000, + "history": [ + { + "invoke": 0, + "client": 0, + "operation": "write", + "args": [ + { + "type": "int", + "value": 1 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 0, + "error": "crashed" + }, + { + "invoke": 1, + "client": 1, + "operation": "write", + "args": [ + { + "type": "int", + "value": 2 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 1, + "error": "crashed" + }, + { + "invoke": 2, + "client": 2, + "operation": "write", + "args": [ + { + "type": "int", + "value": 3 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 2, + "error": "crashed" + }, + { + "invoke": 3, + "client": 0, + "operation": "write", + "args": [ + { + "type": "int", + "value": 1 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 3, + "error": "crashed" + }, + { + "invoke": 4, + "client": 1, + "operation": "write", + "args": [ + { + "type": "int", + "value": 2 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 4, + "error": "crashed" + }, + { + "invoke": 5, + "client": 2, + "operation": "write", + "args": [ + { + "type": "int", + "value": 3 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 5, + "error": "crashed" + }, + { + "invoke": 6, + "client": 0, + "operation": "write", + "args": [ + { + "type": "int", + "value": 1 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 6, + "error": "crashed" + }, + { + "invoke": 7, + "client": 1, + "operation": "write", + "args": [ + { + "type": "int", + "value": 2 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 7, + "error": "crashed" + }, + { + "invoke": 8, + "client": 2, + "operation": "write", + "args": [ + { + "type": "int", + "value": 3 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 8, + "error": "crashed" + }, + { + "invoke": 9, + "client": 0, + "operation": "write", + "args": [ + { + "type": "int", + "value": 1 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 9, + "error": "crashed" + }, + { + "invoke": 10, + "client": 1, + "operation": "write", + "args": [ + { + "type": "int", + "value": 2 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 10, + "error": "crashed" + }, + { + "invoke": 11, + "client": 2, + "operation": "write", + "args": [ + { + "type": "int", + "value": 3 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 11, + "error": "crashed" + }, + { + "invoke": 12, + "client": 0, + "operation": "read", + "args": [], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "ok": 12, + "output": { + "type": "null" + } + } + ], + "expect": "pass", + "detail": { + "outcome": "passed", + "partitions": 1, + "steps": 1325, + "partition": null, + "calls": null, + "concurrency": null, + "linearized": null, + "states": null, + "candidates": null, + "limit": null + } + }, + { + "id": "linearizable/a-covered-configuration-is-no-frontier", + "spec": "register", + "history": [ + { + "invoke": 0, + "client": 0, + "operation": "write", + "args": [ + { + "type": "int", + "value": 1 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 0, + "error": "crashed" + }, + { + "invoke": 1, + "client": 1, + "operation": "write", + "args": [ + { + "type": "int", + "value": 1 + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "unknown": 1, + "error": "crashed" + }, + { + "invoke": 2, + "client": 2, + "operation": "read", + "args": [], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "ok": 2, + "output": { + "type": "int", + "value": 7 + } + } + ], + "expect": "fail", + "detail": { + "outcome": "violated", + "partitions": 1, + "steps": 7, + "partition": [ + { + "type": "string", + "value": "x" + } + ], + "calls": 3, + "concurrency": 3, + "linearized": [ + { + "call": 0, + "completion": 1, + "process": 0, + "operation": "write", + "args": [ + { + "type": "int", + "value": 1 + } + ] + } + ], + "states": [ + { + "type": "int", + "value": 1 + } + ], + "candidates": [ + { + "call": 4, + "completion": 5, + "process": 2, + "operation": "read", + "args": [], + "output": { + "type": "int", + "value": 7 + } + } + ], + "limit": null + } + }, { "id": "linearizable/a-compare-and-set-that-refuses-a-matching-value-is-violated", "spec": "cas-register", diff --git a/src/dokimi_assert/conformance/corpus/history/serializable.json b/src/dokimi_assert/conformance/corpus/history/serializable.json index 9dab638..89d7fe1 100644 --- a/src/dokimi_assert/conformance/corpus/history/serializable.json +++ b/src/dokimi_assert/conformance/corpus/history/serializable.json @@ -1755,6 +1755,444 @@ ] } }, + { + "id": "serializable/two-transactions-append-to-the-list-that-both-read", + "history": [ + { + "invoke": 0, + "client": 0, + "operation": "txn", + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 1 + } + ] + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "ok": 0, + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 1 + } + ] + } + ] + } + }, + { + "invoke": 1, + "client": 1, + "operation": "txn", + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "invoke": 2, + "client": 2, + "operation": "txn", + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "ok": 1, + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ] + } + }, + { + "ok": 2, + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ] + } + } + ], + "expect": "fail", + "detail": { + "anomaly": "lost-update", + "kinds": [ + "lost-update", + "G2" + ], + "transactions": [ + { + "call": 2, + "completion": 4, + "kind": "ok", + "process": 1, + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ], + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ] + } + }, + { + "call": 3, + "completion": 5, + "kind": "ok", + "process": 2, + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ], + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ] + } + } + ], + "cycle": null, + "explanation": [ + { + "calls": [ + 2, + 3 + ], + "key": { + "type": "string", + "value": "x" + }, + "read": { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + } + ] + } + }, { "id": "serializable/two-transactions-append-to-two-keys-in-opposite-orders", "history": [ @@ -11261,8 +11699,9 @@ ], "expect": "fail", "detail": { - "anomaly": "G2", + "anomaly": "lost-update", "kinds": [ + "lost-update", "G2" ], "transactions": [ @@ -11427,53 +11866,20 @@ } } ], - "cycle": [ - { - "call": 2, - "relations": [ - "rw" - ] - }, - { - "call": 3, - "relations": [ - "rw" - ] - } - ], + "cycle": null, "explanation": [ { - "from": 2, - "to": 3, - "relation": "rw", - "key": { - "type": "string", - "value": "x" - }, - "value": { - "type": "int", - "value": 1 - }, - "next": { - "type": "int", - "value": 3 - } - }, - { - "from": 3, - "to": 2, - "relation": "rw", + "calls": [ + 2, + 3 + ], "key": { "type": "string", "value": "x" }, - "value": { + "read": { "type": "int", "value": 1 - }, - "next": { - "type": "int", - "value": 2 } } ] diff --git a/src/dokimi_assert/conformance/corpus/history/snapshot-isolation.json b/src/dokimi_assert/conformance/corpus/history/snapshot-isolation.json index 13ad486..a5ac7d8 100644 --- a/src/dokimi_assert/conformance/corpus/history/snapshot-isolation.json +++ b/src/dokimi_assert/conformance/corpus/history/snapshot-isolation.json @@ -1754,6 +1754,443 @@ ] } }, + { + "id": "snapshot-isolation/two-transactions-append-to-the-list-that-both-read", + "history": [ + { + "invoke": 0, + "client": 0, + "operation": "txn", + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 1 + } + ] + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "ok": 0, + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 1 + } + ] + } + ] + } + }, + { + "invoke": 1, + "client": 1, + "operation": "txn", + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "invoke": 2, + "client": 2, + "operation": "txn", + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ], + "keys": [ + { + "type": "string", + "value": "x" + } + ] + }, + { + "ok": 1, + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ] + } + }, + { + "ok": 2, + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ] + } + } + ], + "expect": "fail", + "detail": { + "anomaly": "lost-update", + "kinds": [ + "lost-update" + ], + "transactions": [ + { + "call": 2, + "completion": 4, + "kind": "ok", + "process": 1, + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ], + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ] + } + }, + { + "call": 3, + "completion": 5, + "kind": "ok", + "process": 2, + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ], + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "append" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ] + } + } + ], + "cycle": null, + "explanation": [ + { + "calls": [ + 2, + 3 + ], + "key": { + "type": "string", + "value": "x" + }, + "read": { + "type": "list", + "of": "int", + "value": [ + 1 + ] + } + } + ] + } + }, { "id": "snapshot-isolation/two-transactions-append-to-two-keys-in-opposite-orders", "history": [ @@ -10438,13 +10875,191 @@ } } ], - "expect": "pass", + "expect": "fail", "detail": { - "anomaly": null, - "kinds": [], - "transactions": null, + "anomaly": "lost-update", + "kinds": [ + "lost-update" + ], + "transactions": [ + { + "call": 2, + "completion": 4, + "kind": "ok", + "process": 1, + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "write" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ], + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 1 + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "write" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 2 + } + ] + } + ] + } + }, + { + "call": 3, + "completion": 5, + "kind": "ok", + "process": 2, + "args": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "null" + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "write" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ], + "output": { + "type": "list", + "items": [ + { + "type": "list", + "items": [ + { + "type": "string", + "value": "read" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 1 + } + ] + }, + { + "type": "list", + "items": [ + { + "type": "string", + "value": "write" + }, + { + "type": "string", + "value": "x" + }, + { + "type": "int", + "value": 3 + } + ] + } + ] + } + } + ], "cycle": null, - "explanation": null + "explanation": [ + { + "calls": [ + 2, + 3 + ], + "key": { + "type": "string", + "value": "x" + }, + "read": { + "type": "int", + "value": 1 + } + } + ] } }, { diff --git a/src/dokimi_assert/conformance/corpus/prop/behaviour.json b/src/dokimi_assert/conformance/corpus/prop/behaviour.json index 9bbbafd..778e150 100644 --- a/src/dokimi_assert/conformance/corpus/prop/behaviour.json +++ b/src/dokimi_assert/conformance/corpus/prop/behaviour.json @@ -24,7 +24,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -72,7 +74,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -121,7 +125,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -167,7 +173,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -211,7 +219,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -266,7 +276,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -320,7 +332,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -390,7 +404,9 @@ ], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -438,7 +454,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -500,7 +518,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -553,7 +573,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -599,7 +621,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -635,7 +659,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -664,7 +690,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -695,7 +723,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -734,7 +764,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -756,7 +788,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -793,7 +827,9 @@ "step": null }, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -832,7 +868,206 @@ "step": null }, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 0 + } + }, + { + "id": "behaviour/reports-a-valid-case-whose-replay-observes-another-fingerprint", + "body": { + "kind": "observes-its-calls" + }, + "settings": { + "seed": "7", + "confirm": 1 + }, + "detail": { + "outcome": "flaky", + "cases": 1, + "rejected": 0, + "seed": "7", + "counterexample": [ + { + "label": "value", + "value": { + "type": "int", + "value": 0 + }, + "any-value-fails": null, + "nearest-passing": null + } + ], + "failure": null, + "choices": null, + "others": null, + "divergence": { + "what": "fingerprint", + "index": 0, + "recorded": 1, + "replayed": 2, + "label": null, + "step": null + }, + "coverage": null, + "reason": null, + "replays": null, + "reproduced": null + } + }, + { + "id": "behaviour/passes-the-same-body-without-confirm", + "body": { + "kind": "observes-its-calls" + }, + "settings": { + "seed": "7" + }, + "detail": { + "outcome": "passed", + "cases": 10, + "rejected": 0, + "seed": "7", + "counterexample": null, + "failure": null, + "choices": null, + "others": null, + "divergence": null, + "coverage": null, + "reason": null, + "replays": null, + "reproduced": null + } + }, + { + "id": "behaviour/shrinks-a-failure-that-one-replay-of-three-reproduces", + "body": { + "kind": "fails-on-even-calls" + }, + "settings": { + "seed": "7", + "replays": 3 + }, + "detail": { + "outcome": "counterexample", + "cases": 1, + "rejected": 0, + "seed": "7", + "counterexample": [ + { + "label": "value", + "value": { + "type": "int", + "value": 1001 + }, + "any-value-fails": false, + "nearest-passing": { + "type": "int", + "value": 1000 + } + } + ], + "failure": "even", + "choices": "prop1:AOkH", + "others": [], + "divergence": null, + "coverage": null, + "reason": null, + "replays": 3, + "reproduced": 1 + } + }, + { + "id": "behaviour/reports-a-failure-that-no-replay-of-three-reproduces", + "body": { + "kind": "fails-once" + }, + "settings": { + "seed": "7", + "replays": 3 + }, + "detail": { + "outcome": "flaky", + "cases": 1, + "rejected": 0, + "seed": "7", + "counterexample": [ + { + "label": "value", + "value": { + "type": "int", + "value": 558560502 + }, + "any-value-fails": null, + "nearest-passing": null + } + ], + "failure": "once", + "choices": null, + "others": null, + "divergence": { + "what": "verdict", + "index": 1, + "recorded": "once", + "replayed": null, + "label": null, + "step": null + }, + "coverage": null, + "reason": null, + "replays": 3, + "reproduced": 0 + } + }, + { + "id": "behaviour/counts-a-reproduction-in-each-of-three-replays", + "body": { + "draw": { + "gen": "integer", + "min": 0, + "max": 10000 + }, + "fails": [ + { + "identity": "big", + "when": { + "kind": "at-least", + "n": 1001 + } + } + ] + }, + "settings": { + "seed": "7", + "replays": 3 + }, + "detail": { + "outcome": "counterexample", + "cases": 1, + "rejected": 0, + "seed": "7", + "counterexample": [ + { + "label": "value", + "value": { + "type": "int", + "value": 1001 + }, + "any-value-fails": false, + "nearest-passing": { + "type": "int", + "value": 1000 + } + } + ], + "failure": "big", + "choices": "prop1:AOkH", + "others": [], + "divergence": null, + "coverage": null, + "reason": null, + "replays": 3, + "reproduced": 3 } }, { @@ -866,7 +1101,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": "unsupported" + "reason": "unsupported", + "replays": null, + "reproduced": null } }, { @@ -904,7 +1141,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": "unsupported" + "reason": "unsupported", + "replays": null, + "reproduced": null } }, { @@ -969,7 +1208,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1008,7 +1249,9 @@ "step": null }, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 0 } }, { @@ -1054,7 +1297,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1080,7 +1325,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1115,7 +1362,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1153,7 +1402,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1197,7 +1448,9 @@ "valid": 100, "verdict": "refuted" }, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1236,7 +1489,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1280,7 +1535,9 @@ "valid": 10, "verdict": "unmet" }, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } } ] diff --git a/src/dokimi_assert/conformance/corpus/prop/forms.json b/src/dokimi_assert/conformance/corpus/prop/forms.json index aecc6e8..00d8a89 100644 --- a/src/dokimi_assert/conformance/corpus/prop/forms.json +++ b/src/dokimi_assert/conformance/corpus/prop/forms.json @@ -30,7 +30,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -96,7 +98,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -141,7 +145,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -173,7 +179,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -220,7 +228,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -248,7 +258,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -292,7 +304,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -334,7 +348,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -392,7 +408,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -441,7 +459,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -500,7 +520,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -528,7 +550,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -569,7 +593,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -597,7 +623,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -643,7 +671,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -671,7 +701,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -712,7 +744,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -750,7 +784,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -809,7 +845,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -841,7 +879,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -900,7 +940,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -931,7 +973,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -980,7 +1024,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1017,7 +1063,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1076,7 +1124,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1113,7 +1163,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1178,7 +1230,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1212,7 +1266,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1272,7 +1328,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1304,7 +1362,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1364,7 +1424,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1394,7 +1456,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1446,7 +1510,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1476,7 +1542,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1528,7 +1596,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1558,7 +1628,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1613,7 +1685,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1651,7 +1725,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1715,7 +1791,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1753,7 +1831,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1820,7 +1900,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1852,7 +1934,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1914,7 +1998,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -1942,7 +2028,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -1986,7 +2074,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2014,7 +2104,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2055,7 +2147,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2083,7 +2177,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2128,7 +2224,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2156,7 +2254,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2200,7 +2300,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2228,7 +2330,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2273,7 +2377,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2301,7 +2407,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2342,7 +2450,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2370,7 +2480,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2414,7 +2526,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2442,7 +2556,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2483,7 +2599,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2511,7 +2629,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2552,7 +2672,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2580,7 +2702,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2621,7 +2745,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2649,7 +2775,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2694,7 +2822,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2722,7 +2852,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2767,7 +2899,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2795,7 +2929,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2836,7 +2972,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2864,7 +3002,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2914,7 +3054,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -2942,7 +3084,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -2983,7 +3127,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -3011,7 +3157,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -3070,7 +3218,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -3098,7 +3248,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -3166,7 +3318,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } }, { @@ -3194,7 +3348,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null } }, { @@ -3247,7 +3403,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 } } ] diff --git a/src/dokimi_assert/conformance/corpus/prop/recording.json b/src/dokimi_assert/conformance/corpus/prop/recording.json index 968bf9f..4e5fe79 100644 --- a/src/dokimi_assert/conformance/corpus/prop/recording.json +++ b/src/dokimi_assert/conformance/corpus/prop/recording.json @@ -472,6 +472,187 @@ } ] }, + { + "id": "recording/records-each-replay-before-the-shrink", + "body": { + "draw": { + "gen": "integer", + "min": 0, + "max": 10000 + }, + "fails": [ + { + "identity": "big", + "when": { + "kind": "at-least", + "n": 1001 + } + } + ] + }, + "settings": { + "seed": "7", + "replays": 2 + }, + "verdict": "fail", + "calls": [ + { + "run": 1, + "phase": "simplest", + "verdict": "pass" + }, + { + "run": 2, + "phase": "random", + "verdict": "fail" + }, + { + "run": 3, + "phase": "replay", + "verdict": "fail" + }, + { + "run": 4, + "phase": "replay", + "verdict": "fail" + }, + { + "run": 5, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 6, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 7, + "phase": "shrink", + "verdict": "fail" + }, + { + "run": 8, + "phase": "shrink", + "verdict": "fail" + }, + { + "run": 9, + "phase": "shrink", + "verdict": "fail" + }, + { + "run": 10, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 11, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 12, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 13, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 14, + "phase": "shrink", + "verdict": "fail" + }, + { + "run": 15, + "phase": "shrink", + "verdict": "fail" + }, + { + "run": 16, + "phase": "shrink", + "verdict": "fail" + }, + { + "run": 17, + "phase": "shrink", + "verdict": "fail" + }, + { + "run": 18, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 19, + "phase": "shrink", + "verdict": "fail" + }, + { + "run": 20, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 21, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 22, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 23, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 24, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 25, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 26, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 27, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 28, + "phase": "shrink", + "verdict": "pass" + }, + { + "run": 29, + "phase": "explain", + "verdict": "fail" + }, + { + "run": 30, + "phase": "explain", + "verdict": "pass" + }, + { + "run": 31, + "phase": "explain", + "verdict": "pass" + } + ] + }, { "id": "recording/records-the-coverage-phase-after-the-first-check", "body": { @@ -732,6 +913,107 @@ } ] }, + { + "id": "recording/records-the-replay-of-every-fifth-valid-case", + "body": { + "draw": { + "gen": "integer", + "min": 0, + "max": 1000 + } + }, + "settings": { + "seed": "7", + "cases": 10, + "confirm": 5 + }, + "verdict": "pass", + "calls": [ + { + "run": 1, + "phase": "simplest", + "verdict": "pass" + }, + { + "run": 2, + "phase": "random", + "verdict": "pass" + }, + { + "run": 4, + "phase": "random", + "verdict": "pass" + }, + { + "run": 5, + "phase": "edge", + "verdict": "pass" + }, + { + "run": 6, + "phase": "random", + "verdict": "pass" + }, + { + "run": 7, + "phase": "confirm", + "verdict": "pass" + }, + { + "run": 8, + "phase": "edge", + "verdict": "pass" + }, + { + "run": 9, + "phase": "random", + "verdict": "pass" + }, + { + "run": 11, + "phase": "random", + "verdict": "pass" + }, + { + "run": 12, + "phase": "random", + "verdict": "pass" + }, + { + "run": 13, + "phase": "random", + "verdict": "pass" + }, + { + "run": 14, + "phase": "confirm", + "verdict": "pass" + } + ] + }, + { + "id": "recording/records-the-replay-of-a-valid-case-that-observes-another-fingerprint", + "body": { + "kind": "observes-its-calls" + }, + "settings": { + "seed": "7", + "confirm": 1 + }, + "verdict": "fail", + "calls": [ + { + "run": 1, + "phase": "simplest", + "verdict": "pass" + }, + { + "run": 2, + "phase": "confirm", + "verdict": "pass" + } + ] + }, { "id": "recording/records-the-examples-then-the-stored-cases", "body": { diff --git a/src/dokimi_assert/conformance/corpus/stateful/machines.json b/src/dokimi_assert/conformance/corpus/stateful/machines.json index a4cc2ad..ed596c8 100644 --- a/src/dokimi_assert/conformance/corpus/stateful/machines.json +++ b/src/dokimi_assert/conformance/corpus/stateful/machines.json @@ -58,7 +58,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 }, "error": null }, @@ -82,7 +84,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null }, "error": null }, @@ -113,7 +117,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 }, "error": null }, @@ -137,7 +143,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null }, "error": null }, @@ -174,7 +182,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 }, "error": null }, @@ -198,7 +208,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null }, "error": null }, @@ -219,7 +231,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null }, "error": null }, @@ -243,7 +257,9 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null }, "error": null }, @@ -273,7 +289,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 }, "error": null }, @@ -294,7 +312,35 @@ "others": null, "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null + }, + "error": null + }, + { + "id": "racy-counter/a-concurrent-mean-of-0-stops-each-section-before-the-race", + "subject": "racy-counter", + "setup": { + "concurrent-mean": 0 + }, + "settings": { + "seed": "1" + }, + "detail": { + "outcome": "passed", + "cases": 98, + "rejected": 0, + "seed": "1", + "counterexample": null, + "failure": null, + "choices": null, + "others": null, + "divergence": null, + "coverage": null, + "reason": null, + "replays": null, + "reproduced": null }, "error": null }, @@ -337,7 +383,222 @@ } }, "coverage": null, - "reason": null + "reason": null, + "replays": null, + "reproduced": null + }, + "error": null + }, + { + "id": "register-flushes-in-two-parts/a-read-between-the-two-parts-of-a-flush-returns-null", + "subject": "register-flushes-in-two-parts", + "settings": { + "seed": "1" + }, + "detail": { + "outcome": "counterexample", + "cases": 51, + "rejected": 0, + "seed": "1", + "counterexample": [ + { + "step": "write" + }, + { + "label": "v", + "value": { + "type": "int", + "value": 0 + }, + "any-value-fails": true, + "nearest-passing": null + }, + { + "step": "read", + "client": 1 + } + ], + "failure": "linearizable", + "choices": "prop1:AAEAAQABAAAAAAAAAAEAAQABAAAAAAAAAAA", + "others": [], + "divergence": null, + "coverage": null, + "reason": null, + "replays": 1, + "reproduced": 1 + }, + "error": null + }, + { + "id": "register-flushes-in-two-parts/keeps-the-priority-of-a-woken-task-under-pct-3", + "subject": "register-flushes-in-two-parts", + "setup": { + "strategy": { + "pct": 3 + } + }, + "settings": { + "seed": "1" + }, + "detail": { + "outcome": "counterexample", + "cases": 31, + "rejected": 0, + "seed": "1", + "counterexample": [ + { + "step": "write" + }, + { + "label": "v", + "value": { + "type": "int", + "value": 0 + }, + "any-value-fails": true, + "nearest-passing": null + }, + { + "step": "read", + "client": 1 + } + ], + "failure": "linearizable", + "choices": "prop1:AAAAAQABAAEAAAAAAAAAAQABAAEAAAAAAAAAAA", + "others": [], + "divergence": null, + "coverage": null, + "reason": null, + "replays": 1, + "reproduced": 1 + }, + "error": null + }, + { + "id": "register-flushes/passes-with-two-clients", + "subject": "register-flushes", + "settings": { + "seed": "1" + }, + "detail": { + "outcome": "passed", + "cases": 100, + "rejected": 0, + "seed": "1", + "counterexample": null, + "failure": null, + "choices": null, + "others": null, + "divergence": null, + "coverage": null, + "reason": null, + "replays": null, + "reproduced": null + }, + "error": null + }, + { + "id": "ticker-skips-its-first-tick/an-advance-of-4-ms-and-a-read-return-0", + "subject": "ticker-skips-its-first-tick", + "setup": { + "strategy": { + "pct": 1 + } + }, + "settings": { + "seed": "1" + }, + "detail": { + "outcome": "counterexample", + "cases": 7, + "rejected": 0, + "seed": "1", + "counterexample": [ + { + "step": "advance" + }, + { + "label": "ms", + "value": { + "type": "int", + "value": 4 + }, + "any-value-fails": false, + "nearest-passing": { + "type": "int", + "value": 3 + } + }, + { + "step": "read" + } + ], + "failure": "linearizable", + "choices": "prop1:AAAAAQABAAEAAAAEAAEAAQ", + "others": [], + "divergence": null, + "coverage": null, + "reason": null, + "replays": 1, + "reproduced": 1 + }, + "error": null + }, + { + "id": "ticker/passes-when-each-tick-runs-at-its-deadline", + "subject": "ticker", + "setup": { + "strategy": { + "pct": 1 + } + }, + "settings": { + "seed": "1" + }, + "detail": { + "outcome": "passed", + "cases": 100, + "rejected": 0, + "seed": "1", + "counterexample": null, + "failure": null, + "choices": null, + "others": null, + "divergence": null, + "coverage": null, + "reason": null, + "replays": null, + "reproduced": null + }, + "error": null + }, + { + "id": "spins-until-a-flag/fails-the-case-at-the-release-limit", + "subject": "spins-until-a-flag", + "setup": { + "max-releases": 50 + }, + "settings": { + "seed": "1" + }, + "detail": { + "outcome": "counterexample", + "cases": 1, + "rejected": 0, + "seed": "1", + "counterexample": [ + { + "step": "spin" + } + ], + "failure": "max-releases", + "choices": "prop1:AAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "others": [], + "divergence": null, + "coverage": null, + "reason": null, + "replays": 1, + "reproduced": 1 }, "error": null }, @@ -430,7 +691,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 }, "error": null }, @@ -491,7 +754,9 @@ "others": [], "divergence": null, "coverage": null, - "reason": null + "reason": null, + "replays": 1, + "reproduced": 1 }, "error": null } diff --git a/src/dokimi_assert/conformance/manifest.json b/src/dokimi_assert/conformance/manifest.json index e638863..757e102 100644 --- a/src/dokimi_assert/conformance/manifest.json +++ b/src/dokimi_assert/conformance/manifest.json @@ -1,8 +1,8 @@ { - "commit": "ddbe8c21a3bc591b219ba88243c5b4a06785a454", - "digest": "sha256:9a679b0a3c09dca4945c49a78610ccee600e706f820ab12b4ea933c44fb2a109", + "commit": "f614d6a5cf3303f54d12451e4d13ec1df9a71614", + "digest": "sha256:687d9fe7c1bbe5c82ae4c063fcf870d2a4d6ffcdd13748d08ac8210840d8318d", "files": { - "VERSION": "sha256:66bcc7471f4ca6bed3b255adacc2804880b4ab2adb78324996de8f1c0cde6bb1", + "VERSION": "sha256:63f771c327e92574fbd77919586079c38f669058a5e6b67ccec385ef8fcde882", "corpus/accumulates.json": "sha256:9ac2967d84157a9b57d3fb59ef75378e60495ced35194ba170bf216deb0e3daf", "corpus/after-close.json": "sha256:c7df47d3ef812973763b2191caa55180c1d2536710873bb420ff8d4e79da6506", "corpus/associative.json": "sha256:41169311a5d852966b84a14702a528a8f99591e82c734d32017fc6586bae56e9", @@ -28,10 +28,10 @@ "corpus/files/tree-unchanged.json": "sha256:d1384e7a48e2fa983c8d829af94fed71491b6d31b492dd60abdae043fe3c9a75", "corpus/has-prefix.json": "sha256:935fdc489462090ae65b257970411fc6dbd695123ec48e07c5cac29a5583bc4f", "corpus/has-suffix.json": "sha256:ee23deeed9804651f26c0a6be8fdb655acec52d003521de5498c1181caec646d", - "corpus/history/linearizable.json": "sha256:64a55f71bcba1ea89824b28f7f891c98e78f64ce00ab26cccedc0ddb16c15d29", + "corpus/history/linearizable.json": "sha256:5bd71a0e763f20cfdec46f162f8c6319ea961cbe50006548d883a852436a5f95", "corpus/history/seam.json": "sha256:d5e727ea967d185ebfb433db1cfa75e42cd2df88ab30e586ba9b141a60145dab", - "corpus/history/serializable.json": "sha256:af4cc86b24544b3758b757d11a9dfd78d4b5038dd677375d5ed3b7e03c08a712", - "corpus/history/snapshot-isolation.json": "sha256:37372dd869ef8cf5baccf5ce9852241205ecfccf68e5ca126545e672793f5d4e", + "corpus/history/serializable.json": "sha256:0123efa1da6c5bed6f16955cb48fc9cd599640c2c79c632dc54564df9277ed86", + "corpus/history/snapshot-isolation.json": "sha256:651a42e705b2e4c808d6610004557040c3839d5e56d409b23d8d849bd2b5865f", "corpus/honours-cancellation.json": "sha256:81fc9e6a6b721a0140cfe4e3d68847e36fc45463ec4baa25499613f26b6dc48f", "corpus/honours-deadline.json": "sha256:0bd133592bbdfbb145cabacdc1360904da546e9e3f000670c08222f3694ebe32", "corpus/idempotent.json": "sha256:f78e287c54ef7033ceff0148d71844c32085e5e61f1a0929d21e1708ec1a8f7f", @@ -50,16 +50,16 @@ "corpus/not-throws.json": "sha256:8ee7b238c79930fe5321626e78e2ecaee7d3255f4aba66d8b32aac5336fb07da", "corpus/permutation.json": "sha256:a4f23e73693f5241d0507c098a5f21fd9398a0e2ccec516ef634893ce62392c1", "corpus/poisoned.json": "sha256:52f833723b3575767d95313a19b7b7023ae8fe450f31ac7c0b08352ec89173b9", - "corpus/prop/behaviour.json": "sha256:17780fa221f623357f5b293f3f965e99defcf1e653a32c9446dcb117abc35225", + "corpus/prop/behaviour.json": "sha256:4de184e0ad30379a654fa896f3e0a7e8e987920b4a8fd0772a0f4258f58b0610", "corpus/prop/bridge.json": "sha256:583763bb7ab09e7d6f9905ec548f505cd78496f9f61a5f11461d2bae657e3474", "corpus/prop/coverage.json": "sha256:6ddea5b6932e1722599d37efcbbfcbfbcf7a72fe82cef8d380c84430b041673e", "corpus/prop/decoding.json": "sha256:651e4ba90fee8ac5b67673c815b4d2a32f79054f009659a481b71c92a06c6934", "corpus/prop/draws.json": "sha256:d4f266f4969fb56722b2df90e5c608ece04827b9769098a575bbdf7d991a2a3d", "corpus/prop/fixtures.json": "sha256:28183420828c11f50f3c4550a433d5b728e11f141569b06604f35a85322d0a41", - "corpus/prop/forms.json": "sha256:c2cbc6a1e0d172cafe5acbfe4dbe40aecddbd5a5632eaf032e6742ee8e3257b5", + "corpus/prop/forms.json": "sha256:87eb6ccbbb8b0fbf6b9e0f1ca5f6aef537ab896edce51c3df1998d934975009e", "corpus/prop/generation.json": "sha256:790499ef131f4c062d9b4b406052cb9f8f070ca93d9a3a66ed170c7dc411ebe1", "corpus/prop/inverse.json": "sha256:82c1a258ebeb5e282deb7e7a6c9d722b50f8eeaec283cd20a2ad49a7ccda08f0", - "corpus/prop/recording.json": "sha256:d8a57c7e4f859fa82d19e96c17d3411108aeacc6cc6b13c29c970516f84012da", + "corpus/prop/recording.json": "sha256:202cf9c5a0355b2798903de319db61d6852671577e87d51bc98239497a598806", "corpus/prop/shapes.json": "sha256:7d0eb36916a1e1927f905fafb974405660a608b05eed8e20b7e86000ac1365fd", "corpus/prop/shrinking.json": "sha256:bb8195520aa1f5179b53780c2184c24f9338aaf340daaabf1d07a61f283f5027", "corpus/prop/store.json": "sha256:9e4f60498961abfb3b255d2957012165058e3736b89527da4ebaacd2424ce65f", @@ -67,13 +67,13 @@ "corpus/pure.json": "sha256:ad3dd837179217ed368d298d1f80f9f122758849404ad89bf6df2ef5542b2cd6", "corpus/round-trip.json": "sha256:4cf7e3545cb39b5e72c22d80fe257d924a22689004c57194e8524aa6bc72d334", "corpus/stable-order.json": "sha256:396b4366b7c118bb9e52c3d38cd2c28c40dbb727520c9a3bb0cac2546275a188", - "corpus/stateful/machines.json": "sha256:16548fef443c4daca2994003b70b1442756c135b417ceb10348cb78bf81bb36c", + "corpus/stateful/machines.json": "sha256:6d5f5fd0435c2945db35bb9ab874e76331801523502836704565960cfe440486", "corpus/throws.json": "sha256:40dd385108c7ada8c0ce236a79c13db2da23e8e142f2fa5947fcce1623e7e365", "corpus/total.json": "sha256:ee76e6bd97358d2576dd24dc9d32949cdce5b46484635237a1a4c0e043322cb3", "corpus/true.json": "sha256:43e01f045228fd01449d2abad5c07b50b8d700fd6c986e6877a4f192ff86b616", - "overlays/python.json": "sha256:517d75bb2d734f7bbe8cd60db00e2eb316eac43f64dc8d5201a1c01e70fe5844", - "spec/assertions.json": "sha256:8a33045679335176af75ed8b1a4d35c9ee15e7f669b38c054a9b0f42b8af3924", - "spec/naming.json": "sha256:e81b7cb928eafdb36f9b228347fd5d6ea79089d845f334b8b36e0fe886669535", + "overlays/python.json": "sha256:4a56f26fe7f07d01f01a2bb03eead4d1677e30d1660e3f981ede421832859ff7", + "spec/assertions.json": "sha256:e8387942aa0f40b69f7ce72f7cc4fb0877d341c9371953dc950c2f909dbb073d", + "spec/naming.json": "sha256:e863eaf35a76d1904703c5214026712056b65ddaae1abcdc7b1bf64bfadb22c4", "spec/zones.json": "sha256:6eb1d994a1e2d727161582e20dee8cd429073fa561c06f8eb7442c20f810f6c6" }, "languages": { @@ -82,5 +82,5 @@ ] }, "repo": "dokimasia/assert-spec", - "version": "13.6.0" + "version": "16.0.0" } diff --git a/src/dokimi_assert/conformance/overlays/python.json b/src/dokimi_assert/conformance/overlays/python.json index d4691e6..cca5fd9 100644 --- a/src/dokimi_assert/conformance/overlays/python.json +++ b/src/dokimi_assert/conformance/overlays/python.json @@ -1,5 +1,5 @@ { - "extends": "spec://assertions@13.6.0", + "extends": "spec://assertions@16.0.0", "language": "python", "diverge": [ { @@ -107,6 +107,10 @@ { "id": "scheduler.yield", "why": "A task of the scheduler is an asyncio coroutine on the scheduler's event loop, and an await suspends the coroutine at a point the loop sees, so the scheduler needs no member of its own for it." + }, + { + "id": "scheduler.wait", + "why": "A task of the scheduler is an asyncio coroutine on the scheduler's event loop, and it parks on an asyncio.Event or an asyncio.Condition, which the loop does not run until another task sets it, so the scheduler needs no member of its own for it." } ], "sections": ["tasks", "threads"], diff --git a/src/dokimi_assert/conformance/spec/assertions.json b/src/dokimi_assert/conformance/spec/assertions.json index b3857e4..d8110af 100644 --- a/src/dokimi_assert/conformance/spec/assertions.json +++ b/src/dokimi_assert/conformance/spec/assertions.json @@ -24,7 +24,8 @@ ], "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "Combining the combination of a and b with c gives what combining a with the combination of b and c gives. first is the former, and second the latter.\n" }, @@ -81,7 +82,8 @@ ], "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "Combining a and b gives what combining b and a gives. first is the combination of a and b, and second the combination of b and a.\n" }, @@ -102,7 +104,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "Text contains a substring, a sequence an element, or a map a key. An element or a key compares as equal compares, so an int does not match a float.\n" }, @@ -123,7 +126,8 @@ ], "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "32 calls of a subject with one input return equal results. first is the first result, and second the first result that differs.\n" }, @@ -144,7 +148,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "Structural equality. A null collection does not equal an empty one, no type coercion, NaN is unequal to itself, floats compare exactly and by value so -0 equals +0, cycles stop, functions compare by identity.\n" }, @@ -299,7 +304,8 @@ ], "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "Calling a subject twice with one input leaves the observed state that calling it once left. first is the observation after one call, and second after two.\n" }, @@ -431,7 +437,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "One iteration of a subject yields each element at most once. got is the first element equal to an earlier one, and index its position.\n" }, @@ -451,7 +458,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "Negation of contains.\n" }, @@ -470,7 +478,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "Negation of equal.\n" }, @@ -486,7 +495,8 @@ ], "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "Observed state changes across a call. got is the observation that did not change.\n" }, @@ -523,7 +533,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "A sequence contains the same elements as another, each as often, in any order. Elements compare as equal compares them.\n" }, @@ -548,7 +559,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -573,7 +586,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -587,7 +602,8 @@ "package": "prop", "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "The property form of associative. Each case of a run generates a, b and c, and associative runs on them as prop-for-all runs a body.\n" }, @@ -604,7 +620,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -629,7 +647,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -642,7 +662,8 @@ "package": "prop", "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "The property form of commutative. Each case of a run generates a and b, and commutative runs on them as prop-for-all runs a body.\n" }, @@ -659,7 +680,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -672,7 +695,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "The property form of contains. Each case of a run generates the input, and contains runs on it as prop-for-all runs a body.\n" }, @@ -689,7 +713,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -714,7 +740,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -726,7 +754,8 @@ "package": "prop", "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "The property form of deterministic. Each case of a run generates the input, and deterministic runs on it as prop-for-all runs a body.\n" }, @@ -743,7 +772,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -768,7 +799,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -781,7 +814,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "The property form of equal. Each case of a run generates the input, and equal runs on it as prop-for-all runs a body.\n" }, @@ -798,7 +832,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -823,7 +859,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -848,7 +886,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -873,7 +913,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -898,7 +940,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -923,7 +967,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -948,10 +994,12 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "package": "prop", - "summary": "A body passes for every input a run generates. A run replays the stored failures, tries the simplest input and the boundary inputs, then generates inputs it has not tested until it has run the stated number of cases or tested every input. A fixed sequence of passes shrinks a failing case towards the smallest case that fails the same way. A case that skips before the run finds a failing case skips the run. A fault that ends a call in a case ends the run in every phase, and the call ends with the same fault.\n" + "summary": "A body passes for every input a run generates. A run replays the stored failures, tries the simplest input and the boundary inputs, then generates inputs it has not tested until it has run the stated number of cases or tested every input. A run replays a failing case as often as its option replays states, and shrinks the case when one or more of the replays reproduce the failure. A fixed sequence of passes shrinks a failing case towards the smallest case that fails the same way. A case that skips before the run finds a failing case skips the run. A fault that ends a call in a case ends the run in every phase, and the call ends with the same fault.\n" }, "prop-has-prefix": { "arity": 3, @@ -966,7 +1014,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -991,7 +1041,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1016,7 +1068,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1041,7 +1095,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1066,7 +1122,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1078,7 +1136,8 @@ "package": "prop", "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "The property form of idempotent. Each case of a run generates the input, and idempotent runs on it as prop-for-all runs a body.\n" }, @@ -1095,7 +1154,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1120,7 +1181,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1145,7 +1208,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1170,7 +1235,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1195,7 +1262,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1220,7 +1289,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1245,7 +1316,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1270,7 +1343,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1283,7 +1358,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "The property form of not-contains. Each case of a run generates the input, and not-contains runs on it as prop-for-all runs a body.\n" }, @@ -1300,7 +1376,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1325,7 +1403,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1338,7 +1418,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "The property form of not-equal. Each case of a run generates the input, and not-equal runs on it as prop-for-all runs a body.\n" }, @@ -1355,7 +1436,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1380,7 +1463,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1392,7 +1477,8 @@ "package": "prop", "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "The property form of not-pure. Each case of a run generates the input, and not-pure runs on it as prop-for-all runs a body.\n" }, @@ -1409,7 +1495,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1434,7 +1522,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1459,7 +1549,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1472,7 +1564,8 @@ "relaxations": [ "equate-empty", "equate-nans", - "by-identity" + "by-identity", + "equate-by" ], "summary": "The property form of permutation. Each case of a run generates the input, and permutation runs on it as prop-for-all runs a body.\n" }, @@ -1489,7 +1582,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1501,7 +1596,8 @@ "package": "prop", "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "The property form of pure. Each case of a run generates the input, and pure runs on it as prop-for-all runs a body.\n" }, @@ -1518,7 +1614,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1530,7 +1628,8 @@ "package": "prop", "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "The property form of round-trip. Each case of a run generates the input, and round-trip runs on it as prop-for-all runs a body.\n" }, @@ -1547,7 +1646,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1572,7 +1673,9 @@ "others", "divergence", "coverage", - "reason" + "reason", + "replays", + "reproduced" ], "form": { "generates": [ @@ -1592,7 +1695,8 @@ ], "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "Observed state is unchanged across a call.\n" }, @@ -1609,7 +1713,8 @@ ], "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "The inverse conversion of the forward conversion of an input returns the input. want is the input, and got what came back.\n" }, @@ -1645,7 +1750,8 @@ ], "relaxations": [ "equate-empty", - "equate-nans" + "equate-nans", + "equate-by" ], "summary": "32 iterations of a subject yield equal sequences. first is the first sequence, and second the first sequence that differs.\n" }, @@ -1777,14 +1883,32 @@ "racy-counter": { "summary": "A counter, initially 0, whose increment reads the count, yields to the task scheduler, writes the count plus one and returns it. The action is increment, which records its one call with no arguments. The spec is the counter of counter-overflows.\n" }, + "register-flushes": { + "summary": "The machine of register-flushes-in-two-parts over a flusher that sets the durable value to the buffer and then sets the buffer to null, without a yield between.\n" + }, + "register-flushes-in-two-parts": { + "summary": "A register of a buffer and a durable value, both initially null. write(v) sets the buffer to v and returns null. read returns the buffer when it is set, and the durable value otherwise. A flusher task, which the subject spawns before the steps, waits until the buffer is set, takes the value and sets the buffer to null, yields to the task scheduler, sets the durable value to the value it took, and waits again. The actions are write, whose input is drawn under \"v\" as an integer in [0, 1000], and read, each of which records its one call. The spec is a register: write leaves v, and read outputs the value and leaves it, initially null.\n" + }, + "spins-until-a-flag": { + "summary": "A flag, initially false, that no action sets. The action is spin, which spawns a task that yields until the flag is set, runs the scheduler, and records no call. The machine has no spec, so a spin fails its case at the limit of releases of the scheduler, with the identity max-releases.\n" + }, "store-loses-on-crash": { "summary": "A store of a buffer and a durable map. The actions are put, flush and crash. put's input is a key drawn under \"key\" as an integer in [0, 3] and the next value of a counter that starts at 1. put records a call of put with the key and the value as arguments, sets the key to the value in the buffer, and completes the call with null. flush is a drain action, enabled while the buffer is not empty, that moves the buffer into the durable map and empties it. crash empties the buffer. Neither records a call. The machine has no spec. Its settle check reads the durable value of each key that a put completed for, and fails with the identity lost-write when it is not the last value put under the key.\n" + }, + "ticker": { + "summary": "The machine of ticker-skips-its-first-tick over a ticker that adds one at each of its four ticks.\n" + }, + "ticker-skips-its-first-tick": { + "summary": "A ticker task, which the subject spawns before the steps, sleeps 4 ms on the clock of its scheduler and then adds one to its count, four times, and it skips the addition of its first tick. advance(ms) advances the scheduler by ms milliseconds and returns null, and read returns the count. The actions are advance, whose input is drawn under \"ms\" as an integer in [0, 10], and read, each of which records its one call. The spec counts the milliseconds of the advances: advance(ms) adds ms, and read outputs the milliseconds divided by 4, rounded down and at most 4.\n" } }, "relaxations": { "by-identity": { "summary": "A reference equals another reference only when both refer to the same object, whatever the object's value. A value that is no reference compares as without it. The modifier applies wherever the comparison meets a reference: at the top, in an element of a list, in a value of a map and in a field of a record. What a reference is in each language is stated where the encoding states the reference literal.\n" }, + "equate-by": { + "summary": "A value of the type of the transform's argument compares by the transform's result, under the comparison and the other modifiers of the call. The modifier applies wherever the comparison meets such a value: at the top, in an element of a list, in a key and a value of a map and in a field of a record. At one place at most one transform applies: the result compares as it is, and its parts compare under the transforms again. The last transform of a call whose type matches a value applies. The record of equal and of not-equal states the result in place of got and want when the transform matches them.\n" + }, "equate-empty": { "summary": "An absent container equals an empty one of the same type. Without it a null map and an empty map are different values, which is what the standard states by default.\n" }, @@ -1928,5 +2052,5 @@ "summary": "Yields two objects, and the value of each is 1.\n" } }, - "version": "13.6.0" + "version": "16.0.0" } diff --git a/src/dokimi_assert/conformance/spec/naming.json b/src/dokimi_assert/conformance/spec/naming.json index 11928eb..ae0aeba 100644 --- a/src/dokimi_assert/conformance/spec/naming.json +++ b/src/dokimi_assert/conformance/spec/naming.json @@ -921,6 +921,13 @@ "python": "by_identity", "typescript": "byIdentity" }, + "equate-by": { + "go": "EquateBy", + "java": "Option.equateBy", + "kotlin": "Option.equateBy", + "python": "equate_by", + "typescript": "equateBy" + }, "equate-empty": { "go": "EquateEmpty", "java": "Option.EQUATE_EMPTY", @@ -1163,6 +1170,14 @@ "rust": "prop::composite", "typescript": "prop.composite" }, + "prop.confirm": { + "go": "prop.Confirm", + "java": "Prop.confirm", + "kotlin": "Prop.confirm", + "python": "prop.confirm", + "rust": "prop::confirm", + "typescript": "prop.confirm" + }, "prop.dict": { "go": "prop.Dict", "java": "Prop.dict", @@ -1355,6 +1370,14 @@ "rust": "prop::replay", "typescript": "prop.replay" }, + "prop.replays": { + "go": "prop.Replays", + "java": "Prop.replays", + "kotlin": "Prop.replays", + "python": "prop.replays", + "rust": "prop::replays", + "typescript": "prop.replays" + }, "prop.require": { "go": "prop.Require", "java": "Prop.require", @@ -1459,6 +1482,14 @@ "rust": "prop::workers", "typescript": "prop.workers" }, + "scheduler.max-releases": { + "go": "stateful.MaxReleases", + "java": "Stateful.maxReleases", + "kotlin": "Stateful.maxReleases", + "python": "stateful.max_releases", + "rust": "stateful::max_releases", + "typescript": "stateful.maxReleases" + }, "scheduler.new": { "go": "stateful.NewScheduler", "java": "new Scheduler()", @@ -1507,6 +1538,14 @@ "rust": "stateful::concurrent", "typescript": "stateful.concurrent" }, + "steps.concurrent-mean": { + "go": "stateful.ConcurrentMean", + "java": "Stateful.concurrentMean", + "kotlin": "Stateful.concurrentMean", + "python": "stateful.concurrent_mean", + "rust": "stateful::concurrent_mean", + "typescript": "stateful.concurrentMean" + }, "steps.max": { "go": "stateful.Max", "java": "Stateful.max", @@ -2134,6 +2173,22 @@ "rust": "rejected", "typescript": "rejected" }, + "run-result.replays": { + "go": "Replays", + "java": "replays", + "kotlin": "replays", + "python": "replays", + "rust": "replays", + "typescript": "replays" + }, + "run-result.reproduced": { + "go": "Reproduced", + "java": "reproduced", + "kotlin": "reproduced", + "python": "reproduced", + "rust": "reproduced", + "typescript": "reproduced" + }, "run-result.seed": { "go": "Seed", "java": "seed", @@ -2142,6 +2197,22 @@ "rust": "seed", "typescript": "seed" }, + "scheduler.advance": { + "go": "Advance", + "java": "advance", + "kotlin": "advance", + "python": "advance", + "rust": "advance", + "typescript": "advance" + }, + "scheduler.clock": { + "go": "Clock", + "java": "clock", + "kotlin": "clock", + "python": "clock", + "rust": "clock", + "typescript": "clock" + }, "scheduler.run": { "go": "Run", "java": "run", @@ -2158,6 +2229,12 @@ "rust": "spawn", "typescript": "spawn" }, + "scheduler.wait": { + "go": "Wait", + "java": "await", + "rust": "wait", + "typescript": "wait" + }, "scheduler.yield": { "go": "Yield", "java": "yield", @@ -2507,5 +2584,5 @@ } } }, - "version": "13.6.0" + "version": "16.0.0" }