From 003c0c6b61b46e8cfc9a9d31c6256f960cdf3ca9 Mon Sep 17 00:00:00 2001 From: Samual Date: Wed, 19 Feb 2025 22:43:54 +0000 Subject: [PATCH] update tests --- src/__snapshots__/doMove.ts.snap | 7867 ++++++++++++++++- test/__snapshots__/doCombat.test.js.snap | 53 + test/__snapshots__/doMove.test.js.snap | 16 + .../doMovePlayFaceUp.test.js.snap | 29 + test/doCombat.test.js | 34 +- test/doMove.test.js | 13 +- test/doMovePlayFaceUp.test.js | 20 +- 7 files changed, 7876 insertions(+), 156 deletions(-) create mode 100644 test/__snapshots__/doCombat.test.js.snap create mode 100644 test/__snapshots__/doMove.test.js.snap create mode 100644 test/__snapshots__/doMovePlayFaceUp.test.js.snap diff --git a/src/__snapshots__/doMove.ts.snap b/src/__snapshots__/doMove.ts.snap index 3afb068..71363d3 100644 --- a/src/__snapshots__/doMove.ts.snap +++ b/src/__snapshots__/doMove.ts.snap @@ -1,11 +1,11 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`reset attackerPassedLastTurn on discard 1`] = ` +exports[`reset attackerPassedLastTurn on combat 1`] = ` "\`V000\` \`n------\` -d0 \`n--\`" +d0 d3 / 2+ hd0 " `; -exports[`reset attackerPassedLastTurn on discard 2`] = ` +exports[`reset attackerPassedLastTurn on combat 2`] = ` { "attackerDeck": [], "attackerDiscardPile": [], @@ -19,8 +19,10 @@ exports[`reset attackerPassedLastTurn on discard 2`] = ` [], [], ], - "defenderHand": [], - "defenderPassedLastTurn": true, + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": false, "defenderStacks": [ { "cards": [], @@ -106,7 +108,6 @@ exports[`reset attackerPassedLastTurn on discard 2`] = ` "*%", ">!", "7^", - "2+", ], [ "*+", @@ -152,17 +153,17 @@ exports[`reset attackerPassedLastTurn on discard 2`] = ` } `; -exports[`reset attackerPassedLastTurn on discard 3`] = ` +exports[`reset attackerPassedLastTurn on combat 3`] = ` "\`V001\` \`n------\` -a0 d3 / 2+ ha0 " +a0 d2 / X ha0 " `; -exports[`reset attackerPassedLastTurn on discard 4`] = ` +exports[`reset attackerPassedLastTurn on combat 4`] = ` { "attackerDeck": [], "attackerDiscardPile": [], "attackerHand": [ - "2+", + "8!", ], "attackerPassedLastTurn": false, "attackerStacks": [ @@ -173,8 +174,10 @@ exports[`reset attackerPassedLastTurn on discard 4`] = ` [], [], ], - "defenderHand": [], - "defenderPassedLastTurn": true, + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": false, "defenderStacks": [ { "cards": [], @@ -245,7 +248,6 @@ exports[`reset attackerPassedLastTurn on discard 4`] = ` "3+", "8+", "8^", - "8!", ], [ ">+", @@ -305,17 +307,17 @@ exports[`reset attackerPassedLastTurn on discard 4`] = ` } `; -exports[`reset attackerPassedLastTurn on discard 5`] = ` +exports[`reset attackerPassedLastTurn on combat 5`] = ` "\`V002\` \`n------\` -d0 \`n--\`" +d0 pX0 / X d0" `; -exports[`reset attackerPassedLastTurn on discard 6`] = ` +exports[`reset attackerPassedLastTurn on combat 6`] = ` { "attackerDeck": [], "attackerDiscardPile": [], "attackerHand": [ - "2+", + "8!", ], "attackerPassedLastTurn": false, "attackerStacks": [ @@ -327,10 +329,12 @@ exports[`reset attackerPassedLastTurn on discard 6`] = ` [], ], "defenderHand": [], - "defenderPassedLastTurn": true, + "defenderPassedLastTurn": false, "defenderStacks": [ { - "cards": [], + "cards": [ + "2+", + ], "isFaceUp": false, }, { @@ -398,7 +402,6 @@ exports[`reset attackerPassedLastTurn on discard 6`] = ` "3+", "8+", "8^", - "8!", ], [ ">+", @@ -458,32 +461,34 @@ exports[`reset attackerPassedLastTurn on discard 6`] = ` } `; -exports[`reset attackerPassedLastTurn on discard 7`] = ` +exports[`reset attackerPassedLastTurn on combat 7`] = ` "\`V003\` \`n------\` -a0 pX3 / X a3" +a0 pX0 / X a0" `; -exports[`reset attackerPassedLastTurn on discard 8`] = ` +exports[`reset attackerPassedLastTurn on combat 8`] = ` { "attackerDeck": [], "attackerDiscardPile": [], "attackerHand": [], "attackerPassedLastTurn": false, "attackerStacks": [ + [ + "8!", + ], [], [], [], - [ - "2+", - ], [], [], ], "defenderHand": [], - "defenderPassedLastTurn": true, + "defenderPassedLastTurn": false, "defenderStacks": [ { - "cards": [], + "cards": [ + "2+", + ], "isFaceUp": false, }, { @@ -551,7 +556,6 @@ exports[`reset attackerPassedLastTurn on discard 8`] = ` "3+", "8+", "8^", - "8!", ], [ ">+", @@ -611,24 +615,24 @@ exports[`reset attackerPassedLastTurn on discard 8`] = ` } `; -exports[`reset attackerPassedLastTurn on discard 9`] = ` +exports[`reset attackerPassedLastTurn on combat 9`] = ` "\`V004\` \`n------\` d0 \`n--\`" `; -exports[`reset attackerPassedLastTurn on discard 10`] = ` +exports[`reset attackerPassedLastTurn on combat 10`] = ` { "attackerDeck": [], "attackerDiscardPile": [], "attackerHand": [], "attackerPassedLastTurn": false, "attackerStacks": [ + [ + "8!", + ], [], [], [], - [ - "2+", - ], [], [], ], @@ -636,7 +640,9 @@ exports[`reset attackerPassedLastTurn on discard 10`] = ` "defenderPassedLastTurn": true, "defenderStacks": [ { - "cards": [], + "cards": [ + "2+", + ], "isFaceUp": false, }, { @@ -704,7 +710,6 @@ exports[`reset attackerPassedLastTurn on discard 10`] = ` "3+", "8+", "8^", - "8!", ], [ ">+", @@ -764,26 +769,21 @@ exports[`reset attackerPassedLastTurn on discard 10`] = ` } `; -exports[`reset attackerPassedLastTurn on discard 11`] = ` +exports[`reset attackerPassedLastTurn on combat 11`] = ` "\`V005\` \`n------\` -a0 c3 -\`n--\` c3 / 2+ / -\`n--\` 1 0 2 / 2+ xa / >! 7^ ha0 " +a0 \`n--\`" `; -exports[`reset attackerPassedLastTurn on discard 12`] = ` +exports[`reset attackerPassedLastTurn on combat 12`] = ` { "attackerDeck": [], - "attackerDiscardPile": [ - "2+", - ], - "attackerHand": [ - ">!", - "7^", - ], - "attackerPassedLastTurn": false, + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, "attackerStacks": [ - [], + [ + "8!", + ], [], [], [], @@ -794,7 +794,9 @@ exports[`reset attackerPassedLastTurn on discard 12`] = ` "defenderPassedLastTurn": true, "defenderStacks": [ { - "cards": [], + "cards": [ + "2+", + ], "isFaceUp": false, }, { @@ -862,7 +864,6 @@ exports[`reset attackerPassedLastTurn on discard 12`] = ` "3+", "8+", "8^", - "8!", ], [ ">+", @@ -875,6 +876,8 @@ exports[`reset attackerPassedLastTurn on discard 12`] = ` "?&", "?#", "*%", + ">!", + "7^", ], [ "*+", @@ -920,24 +923,21 @@ exports[`reset attackerPassedLastTurn on discard 12`] = ` } `; -exports[`reset attackerPassedLastTurn on discard 13`] = ` +exports[`reset attackerPassedLastTurn on combat 13`] = ` "\`V006\` \`n------\` d0 \`n--\`" `; -exports[`reset attackerPassedLastTurn on discard 14`] = ` +exports[`reset attackerPassedLastTurn on combat 14`] = ` { "attackerDeck": [], - "attackerDiscardPile": [ - "2+", - ], - "attackerHand": [ - ">!", - "7^", - ], - "attackerPassedLastTurn": false, + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, "attackerStacks": [ - [], + [ + "8!", + ], [], [], [], @@ -948,7 +948,9 @@ exports[`reset attackerPassedLastTurn on discard 14`] = ` "defenderPassedLastTurn": true, "defenderStacks": [ { - "cards": [], + "cards": [ + "2+", + ], "isFaceUp": false, }, { @@ -1016,7 +1018,6 @@ exports[`reset attackerPassedLastTurn on discard 14`] = ` "3+", "8+", "8^", - "8!", ], [ ">+", @@ -1029,6 +1030,8 @@ exports[`reset attackerPassedLastTurn on discard 14`] = ` "?&", "?#", "*%", + ">!", + "7^", ], [ "*+", @@ -1074,22 +1077,25 @@ exports[`reset attackerPassedLastTurn on discard 14`] = ` } `; -exports[`reset attackerPassedLastTurn on discard 15`] = ` +exports[`reset attackerPassedLastTurn on combat 15`] = ` "\`V007\` \`n------\` -a0 \`n--\`" +a0 c0 +\`n--\` c0 / 8! / 2+ +\`n--\` 3 1 3 / 8! xa / 2+ xa / X X ha0 " `; -exports[`reset attackerPassedLastTurn on discard 16`] = ` +exports[`reset attackerPassedLastTurn on combat 16`] = ` { "attackerDeck": [], "attackerDiscardPile": [ "2+", + "8!", ], "attackerHand": [ - ">!", - "7^", + "4&", + "3&", ], - "attackerPassedLastTurn": true, + "attackerPassedLastTurn": false, "attackerStacks": [ [], [], @@ -1139,8 +1145,6 @@ exports[`reset attackerPassedLastTurn on discard 16`] = ` "6+", "@&", "a#", - "4&", - "3&", ], [ "*#", @@ -1170,7 +1174,6 @@ exports[`reset attackerPassedLastTurn on discard 16`] = ` "3+", "8+", "8^", - "8!", ], [ ">+", @@ -1183,6 +1186,8 @@ exports[`reset attackerPassedLastTurn on discard 16`] = ` "?&", "?#", "*%", + ">!", + "7^", ], [ "*+", @@ -1228,22 +1233,17 @@ exports[`reset attackerPassedLastTurn on discard 16`] = ` } `; -exports[`reset attackerPassedLastTurn on discard 17`] = ` -"\`V008\` \`n------\` +exports[`reset attackerPassedLastTurn on discard 1`] = ` +"\`V000\` \`n------\` d0 \`n--\`" `; -exports[`reset attackerPassedLastTurn on discard 18`] = ` +exports[`reset attackerPassedLastTurn on discard 2`] = ` { "attackerDeck": [], - "attackerDiscardPile": [ - "2+", - ], - "attackerHand": [ - ">!", - "7^", - ], - "attackerPassedLastTurn": true, + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, "attackerStacks": [ [], [], @@ -1337,6 +1337,9 @@ exports[`reset attackerPassedLastTurn on discard 18`] = ` "?&", "?#", "*%", + ">!", + "7^", + "2+", ], [ "*+", @@ -1378,23 +1381,21 @@ exports[`reset attackerPassedLastTurn on discard 18`] = ` [], ], "maxTurns": 110, - "turn": 9, + "turn": 1, } `; -exports[`reset attackerPassedLastTurn on discard 19`] = ` -"\`V009\` \`n------\` -a0 x>a / >! xa" +exports[`reset attackerPassedLastTurn on discard 3`] = ` +"\`V001\` \`n------\` +a0 d3 / 2+ ha0 " `; -exports[`reset attackerPassedLastTurn on discard 20`] = ` +exports[`reset attackerPassedLastTurn on discard 4`] = ` { "attackerDeck": [], "attackerDiscardPile": [], "attackerHand": [ - "7^", "2+", - ">!", ], "attackerPassedLastTurn": false, "attackerStacks": [ @@ -1490,6 +1491,8 @@ exports[`reset attackerPassedLastTurn on discard 20`] = ` "?&", "?#", "*%", + ">!", + "7^", ], [ "*+", @@ -1531,6 +1534,7684 @@ exports[`reset attackerPassedLastTurn on discard 20`] = ` [], ], "maxTurns": 110, - "turn": 10, + "turn": 2, +} +`; + +exports[`reset attackerPassedLastTurn on discard 5`] = ` +"\`V002\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on discard 6`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "2+", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 3, +} +`; + +exports[`reset attackerPassedLastTurn on discard 7`] = ` +"\`V003\` \`n------\` +a0 pX3 / X a3" +`; + +exports[`reset attackerPassedLastTurn on discard 8`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [ + "2+", + ], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 4, +} +`; + +exports[`reset attackerPassedLastTurn on discard 9`] = ` +"\`V004\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on discard 10`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [ + "2+", + ], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 5, +} +`; + +exports[`reset attackerPassedLastTurn on discard 11`] = ` +"\`V005\` \`n------\` +a0 c3 +\`n--\` c3 / 2+ / +\`n--\` 1 0 2 / 2+ xa / >! 7^ ha0 " +`; + +exports[`reset attackerPassedLastTurn on discard 12`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [ + "2+", + ], + "attackerHand": [ + ">!", + "7^", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 6, +} +`; + +exports[`reset attackerPassedLastTurn on discard 13`] = ` +"\`V006\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on discard 14`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [ + "2+", + ], + "attackerHand": [ + ">!", + "7^", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 7, +} +`; + +exports[`reset attackerPassedLastTurn on discard 15`] = ` +"\`V007\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on discard 16`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [ + "2+", + ], + "attackerHand": [ + ">!", + "7^", + ], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 8, +} +`; + +exports[`reset attackerPassedLastTurn on discard 17`] = ` +"\`V008\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on discard 18`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [ + "2+", + ], + "attackerHand": [ + ">!", + "7^", + ], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 9, +} +`; + +exports[`reset attackerPassedLastTurn on discard 19`] = ` +"\`V009\` \`n------\` +a0 x>a / >! xa" +`; + +exports[`reset attackerPassedLastTurn on discard 20`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "7^", + "2+", + ">!", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 10, +} +`; + +exports[`reset attackerPassedLastTurn on draw 1`] = ` +"\`V000\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on draw 2`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 1, +} +`; + +exports[`reset attackerPassedLastTurn on draw 3`] = ` +"\`V001\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on draw 4`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 2, +} +`; + +exports[`reset attackerPassedLastTurn on draw 5`] = ` +"\`V002\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on draw 6`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 3, +} +`; + +exports[`reset attackerPassedLastTurn on draw 7`] = ` +"\`V003\` \`n------\` +a0 d0 / X ha0 " +`; + +exports[`reset attackerPassedLastTurn on draw 8`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "3&", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 4, +} +`; + +exports[`reset attackerPassedLastTurn on play 1`] = ` +"\`V000\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on play 2`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 1, +} +`; + +exports[`reset attackerPassedLastTurn on play 3`] = ` +"\`V001\` \`n------\` +a0 d0 / X ha0 " +`; + +exports[`reset attackerPassedLastTurn on play 4`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "3&", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 2, +} +`; + +exports[`reset attackerPassedLastTurn on play 5`] = ` +"\`V002\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on play 6`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "3&", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 3, +} +`; + +exports[`reset attackerPassedLastTurn on play 7`] = ` +"\`V003\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on play 8`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "3&", + ], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 4, +} +`; + +exports[`reset attackerPassedLastTurn on play 9`] = ` +"\`V004\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on play 10`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "3&", + ], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 5, +} +`; + +exports[`reset attackerPassedLastTurn on play 11`] = ` +"\`V005\` \`n------\` +a0 pX0 / X a0" +`; + +exports[`reset attackerPassedLastTurn on play 12`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [ + "3&", + ], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 6, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 1`] = ` +"\`V000\` \`n------\` +d0 d3 / 2+ hd0 " +`; + +exports[`reset attackerPassedLastTurn on play face-up 2`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 1, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 3`] = ` +"\`V001\` \`n------\` +a0 d5 / >^ ha0 " +`; + +exports[`reset attackerPassedLastTurn on play face-up 4`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + ">^", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 2, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 5`] = ` +"\`V002\` \`n------\` +d0 pX0 / X d0" +`; + +exports[`reset attackerPassedLastTurn on play face-up 6`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + ">^", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 3, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 7`] = ` +"\`V003\` \`n------\` +a0 d4 / 2! ha0 " +`; + +exports[`reset attackerPassedLastTurn on play face-up 8`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + ">^", + "2!", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 4, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 9`] = ` +"\`V004\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on play face-up 10`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + ">^", + "2!", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 5, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 11`] = ` +"\`V005\` \`n------\` +a0 pX0 / X a0" +`; + +exports[`reset attackerPassedLastTurn on play face-up 12`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + ">^", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [ + "2!", + ], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 6, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 13`] = ` +"\`V006\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on play face-up 14`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + ">^", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [ + "2!", + ], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 7, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 15`] = ` +"\`V007\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on play face-up 16`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + ">^", + ], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [ + "2!", + ], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 8, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 17`] = ` +"\`V008\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset attackerPassedLastTurn on play face-up 18`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + ">^", + ], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [ + "2!", + ], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 9, +} +`; + +exports[`reset attackerPassedLastTurn on play face-up 19`] = ` +"\`V009\` \`n------\` +a0 u>0 / >^ a0 +\`n--\` c0 / 2! >^u / 2+ +\`n--\` 1 1 1 / 2! >^u xa / 2+ xa" +`; + +exports[`reset attackerPassedLastTurn on play face-up 20`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [ + "2+", + "2!", + ">^", + ], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 10, +} +`; + +exports[`reset defenderPassedLastTurn on discard 1`] = ` +"\`V000\` \`n------\` +d0 d3 / 2+ hd0 " +`; + +exports[`reset defenderPassedLastTurn on discard 2`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 1, +} +`; + +exports[`reset defenderPassedLastTurn on discard 3`] = ` +"\`V001\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on discard 4`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 2, +} +`; + +exports[`reset defenderPassedLastTurn on discard 5`] = ` +"\`V002\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on discard 6`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 3, +} +`; + +exports[`reset defenderPassedLastTurn on discard 7`] = ` +"\`V003\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on discard 8`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 4, +} +`; + +exports[`reset defenderPassedLastTurn on discard 9`] = ` +"\`V004\` \`n------\` +d0 x20 / 2+ x0" +`; + +exports[`reset defenderPassedLastTurn on discard 10`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [ + "2+", + ], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 5, +} +`; + +exports[`reset defenderPassedLastTurn on draw 1`] = ` +"\`V000\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on draw 2`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 1, +} +`; + +exports[`reset defenderPassedLastTurn on draw 3`] = ` +"\`V001\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on draw 4`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 2, +} +`; + +exports[`reset defenderPassedLastTurn on draw 5`] = ` +"\`V002\` \`n------\` +d0 d0 / X hd0 " +`; + +exports[`reset defenderPassedLastTurn on draw 6`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "3&", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 3, +} +`; + +exports[`reset defenderPassedLastTurn on play 1`] = ` +"\`V000\` \`n------\` +d0 d0 / X hd0 " +`; + +exports[`reset defenderPassedLastTurn on play 2`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "3&", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 1, +} +`; + +exports[`reset defenderPassedLastTurn on play 3`] = ` +"\`V001\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on play 4`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "3&", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 2, +} +`; + +exports[`reset defenderPassedLastTurn on play 5`] = ` +"\`V002\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on play 6`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "3&", + ], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 3, +} +`; + +exports[`reset defenderPassedLastTurn on play 7`] = ` +"\`V003\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on play 8`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "3&", + ], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 4, +} +`; + +exports[`reset defenderPassedLastTurn on play 9`] = ` +"\`V004\` \`n------\` +d0 pX0 / X d0" +`; + +exports[`reset defenderPassedLastTurn on play 10`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [ + "3&", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + "2+", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 5, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 1`] = ` +"\`V000\` \`n------\` +d0 d3 / 2+ hd0 " +`; + +exports[`reset defenderPassedLastTurn on play face-up 2`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + "7^", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 1, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 3`] = ` +"\`V001\` \`n------\` +a0 d3 / 7^ ha0 " +`; + +exports[`reset defenderPassedLastTurn on play face-up 4`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "7^", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ">!", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 2, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 5`] = ` +"\`V002\` \`n------\` +d0 d3 / >! hd0 " +`; + +exports[`reset defenderPassedLastTurn on play face-up 6`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "7^", + ], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ">!", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 3, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 7`] = ` +"\`V003\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on play face-up 8`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "7^", + ], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + "2+", + ">!", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 4, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 9`] = ` +"\`V004\` \`n------\` +d0 pX0 / X d0" +`; + +exports[`reset defenderPassedLastTurn on play face-up 10`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [ + "7^", + ], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + ">!", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 5, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 11`] = ` +"\`V005\` \`n------\` +a0 pX0 / X a0" +`; + +exports[`reset defenderPassedLastTurn on play face-up 12`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [ + "7^", + ], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + ">!", + ], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 6, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 13`] = ` +"\`V006\` \`n------\` +d0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on play face-up 14`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": false, + "attackerStacks": [ + [ + "7^", + ], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + ">!", + ], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 7, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 15`] = ` +"\`V007\` \`n------\` +a0 \`n--\`" +`; + +exports[`reset defenderPassedLastTurn on play face-up 16`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [ + "7^", + ], + [], + [], + [], + [], + [], + ], + "defenderHand": [ + ">!", + ], + "defenderPassedLastTurn": true, + "defenderStacks": [ + { + "cards": [ + "2+", + ], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 8, +} +`; + +exports[`reset defenderPassedLastTurn on play face-up 17`] = ` +"\`V008\` \`n------\` +d0 u>0 / >! d0 +\`n--\` c0 / 7^ / 2+ >! +\`n--\` 0 1 - / 7^ x0" +`; + +exports[`reset defenderPassedLastTurn on play face-up 18`] = ` +{ + "attackerDeck": [], + "attackerDiscardPile": [], + "attackerHand": [], + "attackerPassedLastTurn": true, + "attackerStacks": [ + [], + [], + [], + [], + [], + [], + ], + "defenderHand": [], + "defenderPassedLastTurn": false, + "defenderStacks": [ + { + "cards": [ + "2+", + ">!", + ], + "isFaceUp": true, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + { + "cards": [], + "isFaceUp": false, + }, + ], + "laneDecks": [ + [ + "?%", + "4+", + "7!", + "9^", + "@^", + "5^", + "@#", + "3%", + "6+", + "@&", + "a#", + "4&", + "3&", + ], + [ + "*#", + "@!", + "7&", + "5%", + "2%", + "9%", + "9#", + ">#", + "@+", + "7+", + "4#", + "*!", + "9+", + ], + [ + "3#", + "*&", + "8%", + "5&", + "*^", + "?+", + "4!", + "8&", + "3^", + "3+", + "8+", + "8^", + "8!", + ], + [ + ">+", + "6#", + "a&", + "5!", + "?^", + "6^", + "2&", + "?&", + "?#", + "*%", + ], + [ + "*+", + "3!", + "6!", + "8#", + "5+", + "9&", + "a!", + "?!", + ">%", + "9!", + "2#", + "a%", + "2!", + ], + [ + "4%", + "a+", + "7#", + ">&", + "2^", + "a^", + "4^", + "6%", + "@%", + "5#", + "6&", + "7%", + ">^", + ], + ], + "laneDiscardPiles": [ + [ + "7^", + ], + [], + [], + [], + [], + [], + ], + "maxTurns": 110, + "turn": 9, } `; diff --git a/test/__snapshots__/doCombat.test.js.snap b/test/__snapshots__/doCombat.test.js.snap new file mode 100644 index 0000000..4611e92 --- /dev/null +++ b/test/__snapshots__/doCombat.test.js.snap @@ -0,0 +1,53 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`bounce (attacker) 1`] = ` +{ + "attackerAttackPower": 0, + "attackerBouncesDiscarded": [ + "?!", + ], + "attackerCardsTrapped": [], + "attackerStack": [ + "?!", + ], + "attackerStackDiscarded": [], + "cardsDrawn": [], + "cardsDrawnToDiscard": [], + "damageValue": 0, + "defenderAttackPower": 0, + "defenderBouncesDiscarded": [], + "defenderCardsTrapped": [], + "defenderStack": [ + "4!", + ], + "defenderStackWasFaceUp": false, + "status": 1, +} +`; + +exports[`bounce (defender) 1`] = ` +{ + "attackerAttackPower": 0, + "attackerBouncesDiscarded": [], + "attackerCardsTrapped": [], + "attackerStack": [ + "8!", + ], + "attackerStackDiscarded": [ + "8!", + ], + "cardsDrawn": [], + "cardsDrawnToDiscard": [], + "damageValue": 0, + "defenderAttackPower": 0, + "defenderBouncesDiscarded": [ + "?!", + ], + "defenderCardsTrapped": [], + "defenderStack": [ + "?!", + ], + "defenderStackWasFaceUp": false, + "status": 1, +} +`; diff --git a/test/__snapshots__/doMove.test.js.snap b/test/__snapshots__/doMove.test.js.snap new file mode 100644 index 0000000..7c12d07 --- /dev/null +++ b/test/__snapshots__/doMove.test.js.snap @@ -0,0 +1,16 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`works 1`] = ` +{ + "binlog": [ + "\`V001\` \`n------\`", + "a0 c0", + "\`n--\` c0 / @% / ?+ 4% @# 3+", + "\`n--\` a@ / 3+ xa", + "\`n--\` d@ / @% x0", + "\`n--\` d? / ?+ xa", + "\`n--\` 0 0 0 / xa", + ], + "status": 1, +} +`; diff --git a/test/__snapshots__/doMovePlayFaceUp.test.js.snap b/test/__snapshots__/doMovePlayFaceUp.test.js.snap new file mode 100644 index 0000000..5ea1f95 --- /dev/null +++ b/test/__snapshots__/doMovePlayFaceUp.test.js.snap @@ -0,0 +1,29 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`bounce 1`] = ` +{ + "cardPlayed": "?+", + "combat": { + "attackerAttackPower": 0, + "attackerBouncesDiscarded": [ + "?+", + ], + "attackerCardsTrapped": [], + "attackerStack": [ + "?+", + ], + "attackerStackDiscarded": [], + "cardsDrawn": [], + "cardsDrawnToDiscard": [], + "damageValue": 0, + "defenderAttackPower": 0, + "defenderBouncesDiscarded": [], + "defenderCardsTrapped": [], + "defenderStack": [ + "4%", + ], + "defenderStackWasFaceUp": false, + }, + "status": 1, +} +`; diff --git a/test/doCombat.test.js b/test/doCombat.test.js index fd2a15d..9a0c35f 100644 --- a/test/doCombat.test.js +++ b/test/doCombat.test.js @@ -138,22 +138,7 @@ test("bounce (defender)", () => { defenderPassedLastTurn: false } - expect(doCombat(state, 0)).toEqual({ - status: StatusCode.Okay, - attackerStack: [ "8!" ], - defenderStack: [ "?!" ], - attackerAttackPower: 3, - defenderAttackPower: 0, - damageValue: 0, - cardsDrawn: [], - attackerBouncesDiscarded: [], - attackerCardsTrapped: [], - attackerStackDiscarded: [ "8!" ], - defenderBouncesDiscarded: [ "?!" ], - defenderCardsTrapped: [], - defenderStackWasFaceUp: false, - cardsDrawnToDiscard: [] - }) + expect(doCombat(state, 0)).toMatchSnapshot() expect(state).toEqual({ attackerStacks: [ [], [], [], [], [], [] ], @@ -418,22 +403,7 @@ test("bounce (attacker)", () => { defenderPassedLastTurn: false } - expect(doCombat(state, 0)).toEqual({ - status: StatusCode.Okay, - attackerStack: [ "?!" ], - defenderStack: [ "4!" ], - attackerAttackPower: 0, - defenderAttackPower: 2, - damageValue: 0, - cardsDrawn: [], - attackerBouncesDiscarded: [ "?!" ], - attackerCardsTrapped: [], - attackerStackDiscarded: [], - defenderBouncesDiscarded: [], - defenderCardsTrapped: [], - defenderStackWasFaceUp: false, - cardsDrawnToDiscard: [] - }) + expect(doCombat(state, 0)).toMatchSnapshot() expect(state).toEqual({ attackerStacks: [ [], [], [], [], [], [] ], diff --git a/test/doMove.test.js b/test/doMove.test.js index 352fce9..9f46732 100644 --- a/test/doMove.test.js +++ b/test/doMove.test.js @@ -394,18 +394,7 @@ it("works", () => { maxTurns: 110, attackerPassedLastTurn: false, defenderPassedLastTurn: false - }, { tag: MoveTag.Combat, lane: 0 })).toEqual({ - status: StatusCode.Okay, - binlog: [ - "`V001` `n------`", - "a0 c0", - "`n--` c0 / @% / ?+ 4% @# 3+", - "`n--` a@ / 3+ xa", - "`n--` d@ / @% x0", - "`n--` d? / ?+ xa", - "`n--` 0 2 - / x0" - ] - }) + }, { tag: MoveTag.Combat, lane: 0 })).toMatchSnapshot() expect(doMove({ attackerStacks: [ [], [], [], [], [], [ "4%" ] ], diff --git a/test/doMovePlayFaceUp.test.js b/test/doMovePlayFaceUp.test.js index d4f115a..a086f16 100644 --- a/test/doMovePlayFaceUp.test.js +++ b/test/doMovePlayFaceUp.test.js @@ -566,25 +566,7 @@ test("bounce", () => { maxTurns: 110, attackerPassedLastTurn: false, defenderPassedLastTurn: false - }, "?+", 0)).toEqual({ - status: StatusCode.Okay, - cardPlayed: "?+", - combat: { - attackerStack: [ "?+" ], - defenderStack: [ "4%" ], - attackerAttackPower: 0, - defenderAttackPower: 2, - damageValue: 0, - cardsDrawn: [], - attackerBouncesDiscarded: [ "?+" ], - attackerCardsTrapped: [], - attackerStackDiscarded: [], - defenderBouncesDiscarded: [], - defenderCardsTrapped: [], - defenderStackWasFaceUp: false, - cardsDrawnToDiscard: [] - } - }) + }, "?+", 0)).toMatchSnapshot() }) test("defender win", () => {