{ "function": "violations", "cases": [ { "name": "a-sane-state-has-no-violations", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [] }, { "name": "no-apple-is-fine", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": null, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [] }, { "name": "a-pending-perpendicular-turn-is-fine", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Up", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [] }, { "name": "a-one-cell-snake-is-fine", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 0, "y": 0 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [] }, { "name": "a-game-over-state-can-be-sane", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 4, "y": 2 }, { "x": 3, "y": 2 }, { "x": 2, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "GameOver", "frame": 0, "queued": null } ], "expected": [] }, { "name": "empty-snake", "args": [ { "width": 5, "height": 5, "snake": [], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "snake-not-empty" ] }, { "name": "head-off-the-right-edge", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 5, "y": 2 }, { "x": 4, "y": 2 }, { "x": 3, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "snake-in-bounds" ] }, { "name": "tail-above-the-board", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 1, "y": 1 }, { "x": 1, "y": 0 }, { "x": 1, "y": -1 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "snake-in-bounds" ] }, { "name": "head-on-its-own-body", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 2, "y": 3 }, { "x": 1, "y": 3 }, { "x": 1, "y": 2 }, { "x": 2, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "snake-no-overlap" ] }, { "name": "snake-with-a-gap", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 3, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "snake-connected" ] }, { "name": "snake-with-a-diagonal-step", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 1 }, { "x": 0, "y": 1 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "snake-connected" ] }, { "name": "apple-outside-the-board", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 5, "y": 0 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "apple-in-bounds" ] }, { "name": "apple-on-the-head", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 2, "y": 2 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "apple-not-on-snake" ] }, { "name": "apple-on-the-tail", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 0, "y": 2 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "apple-not-on-snake" ] }, { "name": "pending-turn-straight-back", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Left", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "turn-not-reversed" ] }, { "name": "pending-turn-straight-back-vertical", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Up", "nextDir": "Down", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "turn-not-reversed" ] }, { "name": "several-violations-are-listed-in-order", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 5, "y": 2 }, { "x": 3, "y": 2 }, { "x": 3, "y": 2 } ], "dir": "Right", "nextDir": "Left", "apple": { "x": 3, "y": 2 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "snake-in-bounds", "snake-no-overlap", "snake-connected", "apple-not-on-snake", "turn-not-reversed" ] }, { "name": "doubled-cell-counts-as-overlap-and-as-disconnected", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 2, "y": 2 } ], "dir": "Right", "nextDir": "Right", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": null } ], "expected": [ "snake-no-overlap", "snake-connected" ] }, { "name": "a-queued-turn-is-fine", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Up", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": "Left" } ], "expected": [] }, { "name": "queued-turn-straight-back-from-the-pending-turn", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Up", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": "Down" } ], "expected": [ "queued-not-reversed" ] }, { "name": "reversed-pending-turn-and-reversed-queue-are-both-listed", "args": [ { "width": 5, "height": 5, "snake": [ { "x": 2, "y": 2 }, { "x": 1, "y": 2 }, { "x": 0, "y": 2 } ], "dir": "Right", "nextDir": "Left", "apple": { "x": 4, "y": 4 }, "seed": 0, "score": 0, "status": "Playing", "frame": 0, "queued": "Right" } ], "expected": [ "turn-not-reversed", "queued-not-reversed" ] } ] }