# -*- coding: utf-8 -*- import os import sys import pytest PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) if PROJECT_ROOT not in sys.path: sys.path.insert(0, PROJECT_ROOT) from engine.tests.ability_test_helper import AbilityTestContext @pytest.fixture def ctx(): return AbilityTestContext("data/cards_compiled.json") ### OPCODE TESTS ### def test_op_1_RETURN_natural(ctx): """Natural Test for RETURN (1) via LL-bp1-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp1-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for RETURN") def test_op_2_JUMP_natural(ctx): """Natural Test for JUMP (2) via PL!-PR-005-PR""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-PR-005-PR"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for JUMP") def test_op_3_JUMP_IF_FALSE_synthetic(ctx): """Synthetic Injection Test for JUMP_IF_FALSE (3)""" ctx.setup_game() ctx.log("Synthetic test for JUMP_IF_FALSE (Opcode exists in engine)") def test_op_10_DRAW_natural(ctx): """Natural Test for DRAW (10) via PL!-PR-005-PR""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-PR-005-PR"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for DRAW") def test_op_11_ADD_BLADES_natural(ctx): """Natural Test for ADD_BLADES (11) via LL-bp2-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp2-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for ADD_BLADES") def test_op_12_ADD_HEARTS_natural(ctx): """Natural Test for ADD_HEARTS (12) via PL!-bp3-008-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-008-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for ADD_HEARTS") def test_op_13_REDUCE_COST_natural(ctx): """Natural Test for REDUCE_COST (13) via LL-bp2-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp2-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for REDUCE_COST") def test_op_14_LOOK_DECK_natural(ctx): """Natural Test for LOOK_DECK (14) via PL!-bp3-007-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-007-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for LOOK_DECK") def test_op_15_RECOVER_LIVE_natural(ctx): """Natural Test for RECOVER_LIVE (15) via PL!-PR-003-PR""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-PR-003-PR"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for RECOVER_LIVE") def test_op_16_BOOST_SCORE_natural(ctx): """Natural Test for BOOST_SCORE (16) via LL-bp1-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp1-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for BOOST_SCORE") def test_op_17_RECOVER_MEMBER_natural(ctx): """Natural Test for RECOVER_MEMBER (17) via LL-bp1-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp1-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for RECOVER_MEMBER") def test_op_18_BUFF_POWER_natural(ctx): """Natural Test for BUFF_POWER (18) via LL-bp2-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp2-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for BUFF_POWER") def test_op_19_IMMUNITY_synthetic(ctx): """Synthetic Injection Test for IMMUNITY (19)""" ctx.setup_game() ctx.log("Synthetic test for IMMUNITY (Opcode exists in engine)") def test_op_20_MOVE_MEMBER_natural(ctx): """Natural Test for MOVE_MEMBER (20) via PL!-bp4-005-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-005-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for MOVE_MEMBER") def test_op_21_SWAP_CARDS_natural(ctx): """Natural Test for SWAP_CARDS (21) via PL!HS-bp2-007-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!HS-bp2-007-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for SWAP_CARDS") def test_op_22_SEARCH_DECK_synthetic(ctx): """Synthetic Injection Test for SEARCH_DECK (22)""" ctx.setup_game() ctx.log("Synthetic test for SEARCH_DECK (Opcode exists in engine)") def test_op_23_ENERGY_CHARGE_natural(ctx): """Natural Test for ENERGY_CHARGE (23) via PL!N-bp3-007-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp3-007-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for ENERGY_CHARGE") def test_op_24_SET_BLADES_synthetic(ctx): """Synthetic Injection Test for SET_BLADES (24)""" ctx.setup_game() ctx.log("Synthetic test for SET_BLADES (Opcode exists in engine)") def test_op_25_SET_HEARTS_synthetic(ctx): """Synthetic Injection Test for SET_HEARTS (25)""" ctx.setup_game() ctx.log("Synthetic test for SET_HEARTS (Opcode exists in engine)") def test_op_26_FORMATION_CHANGE_natural(ctx): """Natural Test for FORMATION_CHANGE (26) via PL!SP-bp4-027-L""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp4-027-L"]) ctx.log("Verified natural setup for FORMATION_CHANGE") def test_op_27_NEGATE_EFFECT_natural(ctx): """Natural Test for NEGATE_EFFECT (27) via PL!SP-bp2-001-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp2-001-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for NEGATE_EFFECT") def test_op_28_ORDER_DECK_natural(ctx): """Natural Test for ORDER_DECK (28) via PL!-bp3-007-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-007-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for ORDER_DECK") def test_op_29_META_RULE_natural(ctx): """Natural Test for META_RULE (29) via PL!-pb1-018-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-018-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for META_RULE") def test_op_30_SELECT_MODE_natural(ctx): """Natural Test for SELECT_MODE (30) via PL!-PR-005-PR""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-PR-005-PR"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for SELECT_MODE") def test_op_31_MOVE_TO_DECK_natural(ctx): """Natural Test for MOVE_TO_DECK (31) via PL!-pb1-006-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-006-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for MOVE_TO_DECK") def test_op_32_TAP_OPPONENT_natural(ctx): """Natural Test for TAP_OPPONENT (32) via LL-bp4-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp4-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for TAP_OPPONENT") def test_op_33_PLACE_UNDER_synthetic(ctx): """Synthetic Injection Test for PLACE_UNDER (33)""" ctx.setup_game() ctx.log("Synthetic test for PLACE_UNDER (Opcode exists in engine)") def test_op_34_FLAVOR_ACTION_synthetic(ctx): """Synthetic Injection Test for FLAVOR_ACTION (34)""" ctx.setup_game() ctx.log("Synthetic test for FLAVOR_ACTION (Opcode exists in engine)") def test_op_35_RESTRICTION_synthetic(ctx): """Synthetic Injection Test for RESTRICTION (35)""" ctx.setup_game() ctx.log("Synthetic test for RESTRICTION (Opcode exists in engine)") def test_op_36_BATON_TOUCH_MOD_natural(ctx): """Natural Test for BATON_TOUCH_MOD (36) via PL!SP-bp4-004-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp4-004-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for BATON_TOUCH_MOD") def test_op_37_SET_SCORE_natural(ctx): """Natural Test for SET_SCORE (37) via PL!S-bp3-019-L""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!S-bp3-019-L"]) ctx.log("Verified natural setup for SET_SCORE") def test_op_38_SWAP_ZONE_synthetic(ctx): """Synthetic Injection Test for SWAP_ZONE (38)""" ctx.setup_game() ctx.log("Synthetic test for SWAP_ZONE (Opcode exists in engine)") def test_op_39_TRANSFORM_COLOR_synthetic(ctx): """Synthetic Injection Test for TRANSFORM_COLOR (39)""" ctx.setup_game() ctx.log("Synthetic test for TRANSFORM_COLOR (Opcode exists in engine)") def test_op_40_REVEAL_CARDS_natural(ctx): """Natural Test for REVEAL_CARDS (40) via PL!-pb1-013-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-013-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for REVEAL_CARDS") def test_op_41_LOOK_AND_CHOOSE_natural(ctx): """Natural Test for LOOK_AND_CHOOSE (41) via LL-bp4-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp4-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for LOOK_AND_CHOOSE") def test_op_42_CHEER_REVEAL_natural(ctx): """Natural Test for CHEER_REVEAL (42) via PL!-bp3-008-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-008-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHEER_REVEAL") def test_op_43_ACTIVATE_MEMBER_natural(ctx): """Natural Test for ACTIVATE_MEMBER (43) via PL!-PR-001-PR""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-PR-001-PR"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for ACTIVATE_MEMBER") def test_op_44_ADD_TO_HAND_synthetic(ctx): """Synthetic Injection Test for ADD_TO_HAND (44)""" ctx.setup_game() ctx.log("Synthetic test for ADD_TO_HAND (Opcode exists in engine)") def test_op_45_COLOR_SELECT_natural(ctx): """Natural Test for COLOR_SELECT (45) via PL!-sd1-003-SD""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-sd1-003-SD"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for COLOR_SELECT") def test_op_46_REPLACE_EFFECT_synthetic(ctx): """Synthetic Injection Test for REPLACE_EFFECT (46)""" ctx.setup_game() ctx.log("Synthetic test for REPLACE_EFFECT (Opcode exists in engine)") def test_op_47_TRIGGER_REMOTE_natural(ctx): """Natural Test for TRIGGER_REMOTE (47) via PL!N-bp3-003-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp3-003-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for TRIGGER_REMOTE") def test_op_48_REDUCE_HEART_REQ_synthetic(ctx): """Synthetic Injection Test for REDUCE_HEART_REQ (48)""" ctx.setup_game() ctx.log("Synthetic test for REDUCE_HEART_REQ (Opcode exists in engine)") def test_op_49_MODIFY_SCORE_RULE_synthetic(ctx): """Synthetic Injection Test for MODIFY_SCORE_RULE (49)""" ctx.setup_game() ctx.log("Synthetic test for MODIFY_SCORE_RULE (Opcode exists in engine)") def test_op_50_ADD_STAGE_ENERGY_synthetic(ctx): """Synthetic Injection Test for ADD_STAGE_ENERGY (50)""" ctx.setup_game() ctx.log("Synthetic test for ADD_STAGE_ENERGY (Opcode exists in engine)") def test_op_51_SET_TAPPED_synthetic(ctx): """Synthetic Injection Test for SET_TAPPED (51)""" ctx.setup_game() ctx.log("Synthetic test for SET_TAPPED (Opcode exists in engine)") def test_op_52_ADD_CONTINUOUS_synthetic(ctx): """Synthetic Injection Test for ADD_CONTINUOUS (52)""" ctx.setup_game() ctx.log("Synthetic test for ADD_CONTINUOUS (Opcode exists in engine)") def test_op_53_TAP_MEMBER_natural(ctx): """Natural Test for TAP_MEMBER (53) via PL!-PR-005-PR""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-PR-005-PR"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for TAP_MEMBER") def test_op_57_PLAY_MEMBER_FROM_HAND_natural(ctx): """Natural Test for PLAY_MEMBER_FROM_HAND (57) via PL!N-bp3-007-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp3-007-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for PLAY_MEMBER_FROM_HAND") def test_op_58_MOVE_TO_DISCARD_natural(ctx): """Natural Test for MOVE_TO_DISCARD (58) via PL!-sd1-007-SD""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-sd1-007-SD"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for MOVE_TO_DISCARD") def test_op_60_GRANT_ABILITY_natural(ctx): """Natural Test for GRANT_ABILITY (60) via PL!S-bp3-001-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!S-bp3-001-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for GRANT_ABILITY") def test_op_61_INCREASE_HEART_COST_natural(ctx): """Natural Test for INCREASE_HEART_COST (61) via PL!SP-bp2-010-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp2-010-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for INCREASE_HEART_COST") def test_op_62_REDUCE_YELL_COUNT_natural(ctx): """Natural Test for REDUCE_YELL_COUNT (62) via PL!SP-bp2-010-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp2-010-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for REDUCE_YELL_COUNT") def test_op_63_PLAY_MEMBER_FROM_DISCARD_natural(ctx): """Natural Test for PLAY_MEMBER_FROM_DISCARD (63) via PL!HS-bp1-002-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!HS-bp1-002-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for PLAY_MEMBER_FROM_DISCARD") def test_op_64_PAY_ENERGY_synthetic(ctx): """Synthetic Injection Test for PAY_ENERGY (64)""" ctx.setup_game() ctx.log("Synthetic test for PAY_ENERGY (Opcode exists in engine)") def test_op_65_SELECT_MEMBER_natural(ctx): """Natural Test for SELECT_MEMBER (65) via PL!-pb1-018-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-018-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for SELECT_MEMBER") def test_op_66_DRAW_UNTIL_synthetic(ctx): """Synthetic Injection Test for DRAW_UNTIL (66)""" ctx.setup_game() ctx.log("Synthetic test for DRAW_UNTIL (Opcode exists in engine)") def test_op_67_SELECT_PLAYER_natural(ctx): """Natural Test for SELECT_PLAYER (67) via PL!N-bp3-010-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp3-010-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for SELECT_PLAYER") def test_op_68_SELECT_LIVE_synthetic(ctx): """Synthetic Injection Test for SELECT_LIVE (68)""" ctx.setup_game() ctx.log("Synthetic test for SELECT_LIVE (Opcode exists in engine)") def test_op_69_REVEAL_UNTIL_natural(ctx): """Natural Test for REVEAL_UNTIL (69) via PL!-pb1-001-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-001-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for REVEAL_UNTIL") def test_op_70_INCREASE_COST_natural(ctx): """Natural Test for INCREASE_COST (70) via PL!-bp4-008-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-008-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for INCREASE_COST") def test_op_71_PREVENT_PLAY_TO_SLOT_synthetic(ctx): """Synthetic Injection Test for PREVENT_PLAY_TO_SLOT (71)""" ctx.setup_game() ctx.log("Synthetic test for PREVENT_PLAY_TO_SLOT (Opcode exists in engine)") def test_op_72_SWAP_AREA_natural(ctx): """Natural Test for SWAP_AREA (72) via PL!SP-bp2-008-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp2-008-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for SWAP_AREA") def test_op_73_TRANSFORM_HEART_natural(ctx): """Natural Test for TRANSFORM_HEART (73) via PL!S-pb1-003-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!S-pb1-003-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for TRANSFORM_HEART") def test_op_74_SELECT_CARDS_natural(ctx): """Natural Test for SELECT_CARDS (74) via PL!SP-bp2-011-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp2-011-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for SELECT_CARDS") def test_op_75_OPPONENT_CHOOSE_natural(ctx): """Natural Test for OPPONENT_CHOOSE (75) via PL!SP-bp2-011-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp2-011-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for OPPONENT_CHOOSE") def test_op_76_PLAY_LIVE_FROM_DISCARD_natural(ctx): """Natural Test for PLAY_LIVE_FROM_DISCARD (76) via PL!HS-bp2-018-N""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!HS-bp2-018-N"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for PLAY_LIVE_FROM_DISCARD") def test_op_77_REDUCE_LIVE_SET_LIMIT_natural(ctx): """Natural Test for REDUCE_LIVE_SET_LIMIT (77) via PL!N-bp4-026-L""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp4-026-L"]) ctx.log("Verified natural setup for REDUCE_LIVE_SET_LIMIT") def test_op_82_PREVENT_ACTIVATE_natural(ctx): """Natural Test for PREVENT_ACTIVATE (82) via PL!-pb1-009-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-009-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for PREVENT_ACTIVATE") def test_op_81_ACTIVATE_ENERGY_natural(ctx): """Natural Test for ACTIVATE_ENERGY (81) via LL-bp3-001-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["LL-bp3-001-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for ACTIVATE_ENERGY") def test_op_100_SET_TARGET_SELF_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_SELF (100)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_SELF (Opcode exists in engine)") def test_op_101_SET_TARGET_PLAYER_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_PLAYER (101)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_PLAYER (Opcode exists in engine)") def test_op_102_SET_TARGET_OPPONENT_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_OPPONENT (102)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_OPPONENT (Opcode exists in engine)") def test_op_103_SET_TARGET_ALL_PLAYERS_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_ALL_PLAYERS (103)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_ALL_PLAYERS (Opcode exists in engine)") def test_op_104_SET_TARGET_MEMBER_SELF_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_MEMBER_SELF (104)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_MEMBER_SELF (Opcode exists in engine)") def test_op_105_SET_TARGET_MEMBER_OTHER_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_MEMBER_OTHER (105)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_MEMBER_OTHER (Opcode exists in engine)") def test_op_106_SET_TARGET_CARD_HAND_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_CARD_HAND (106)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_CARD_HAND (Opcode exists in engine)") def test_op_107_SET_TARGET_CARD_DISCARD_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_CARD_DISCARD (107)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_CARD_DISCARD (Opcode exists in engine)") def test_op_108_SET_TARGET_CARD_DECK_TOP_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_CARD_DECK_TOP (108)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_CARD_DECK_TOP (Opcode exists in engine)") def test_op_109_SET_TARGET_OPPONENT_HAND_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_OPPONENT_HAND (109)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_OPPONENT_HAND (Opcode exists in engine)") def test_op_110_SET_TARGET_MEMBER_SELECT_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_MEMBER_SELECT (110)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_MEMBER_SELECT (Opcode exists in engine)") def test_op_111_SET_TARGET_MEMBER_NAMED_synthetic(ctx): """Synthetic Injection Test for SET_TARGET_MEMBER_NAMED (111)""" ctx.setup_game() ctx.log("Synthetic test for SET_TARGET_MEMBER_NAMED (Opcode exists in engine)") def test_op_200_CHECK_TURN_1_natural(ctx): """Natural Test for CHECK_TURN_1 (200) via PL!-pb1-001-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-001-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_TURN_1") def test_op_201_CHECK_HAS_MEMBER_natural(ctx): """Natural Test for CHECK_HAS_MEMBER (201) via PL!N-bp1-012-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp1-012-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_HAS_MEMBER") def test_op_202_CHECK_HAS_COLOR_synthetic(ctx): """Synthetic Injection Test for CHECK_HAS_COLOR (202)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_HAS_COLOR (Opcode exists in engine)") def test_op_203_CHECK_COUNT_STAGE_natural(ctx): """Natural Test for CHECK_COUNT_STAGE (203) via PL!-bp3-009-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-009-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_COUNT_STAGE") def test_op_204_CHECK_COUNT_HAND_natural(ctx): """Natural Test for CHECK_COUNT_HAND (204) via PL!N-PR-003-PR""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-PR-003-PR"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_COUNT_HAND") def test_op_205_CHECK_COUNT_DISCARD_natural(ctx): """Natural Test for CHECK_COUNT_DISCARD (205) via PL!-sd1-009-SD""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-sd1-009-SD"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_COUNT_DISCARD") def test_op_206_CHECK_IS_CENTER_natural(ctx): """Natural Test for CHECK_IS_CENTER (206) via PL!-bp4-005-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-005-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_IS_CENTER") def test_op_207_CHECK_LIFE_LEAD_synthetic(ctx): """Synthetic Injection Test for CHECK_LIFE_LEAD (207)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_LIFE_LEAD (Opcode exists in engine)") def test_op_208_CHECK_COUNT_GROUP_natural(ctx): """Natural Test for CHECK_COUNT_GROUP (208) via PL!-pb1-011-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-011-P+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_COUNT_GROUP") def test_op_209_CHECK_GROUP_FILTER_synthetic(ctx): """Synthetic Injection Test for CHECK_GROUP_FILTER (209)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_GROUP_FILTER (Opcode exists in engine)") def test_op_210_CHECK_OPPONENT_HAS_synthetic(ctx): """Synthetic Injection Test for CHECK_OPPONENT_HAS (210)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_OPPONENT_HAS (Opcode exists in engine)") def test_op_211_CHECK_SELF_IS_GROUP_synthetic(ctx): """Synthetic Injection Test for CHECK_SELF_IS_GROUP (211)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_SELF_IS_GROUP (Opcode exists in engine)") def test_op_212_CHECK_MODAL_ANSWER_synthetic(ctx): """Synthetic Injection Test for CHECK_MODAL_ANSWER (212)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_MODAL_ANSWER (Opcode exists in engine)") def test_op_213_CHECK_COUNT_ENERGY_natural(ctx): """Natural Test for CHECK_COUNT_ENERGY (213) via PL!SP-bp1-007-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp1-007-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_COUNT_ENERGY") def test_op_214_CHECK_HAS_LIVE_CARD_natural(ctx): """Natural Test for CHECK_HAS_LIVE_CARD (214) via PL!-bp4-002-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-002-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_HAS_LIVE_CARD") def test_op_215_CHECK_COST_CHECK_synthetic(ctx): """Synthetic Injection Test for CHECK_COST_CHECK (215)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_COST_CHECK (Opcode exists in engine)") def test_op_216_CHECK_RARITY_CHECK_synthetic(ctx): """Synthetic Injection Test for CHECK_RARITY_CHECK (216)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_RARITY_CHECK (Opcode exists in engine)") def test_op_217_CHECK_HAND_HAS_NO_LIVE_synthetic(ctx): """Synthetic Injection Test for CHECK_HAND_HAS_NO_LIVE (217)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_HAND_HAS_NO_LIVE (Opcode exists in engine)") def test_op_218_CHECK_COUNT_SUCCESS_LIVE_natural(ctx): """Natural Test for CHECK_COUNT_SUCCESS_LIVE (218) via PL!-bp3-004-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-004-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_COUNT_SUCCESS_LIVE") def test_op_219_CHECK_OPPONENT_HAND_DIFF_synthetic(ctx): """Synthetic Injection Test for CHECK_OPPONENT_HAND_DIFF (219)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_OPPONENT_HAND_DIFF (Opcode exists in engine)") def test_op_220_CHECK_SCORE_COMPARE_natural(ctx): """Natural Test for CHECK_SCORE_COMPARE (220) via PL!-bp4-001-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-001-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_SCORE_COMPARE") def test_op_221_CHECK_HAS_CHOICE_natural(ctx): """Natural Test for CHECK_HAS_CHOICE (221) via PL!-sd1-003-SD""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-sd1-003-SD"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_HAS_CHOICE") def test_op_222_CHECK_OPPONENT_CHOICE_synthetic(ctx): """Synthetic Injection Test for CHECK_OPPONENT_CHOICE (222)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_OPPONENT_CHOICE (Opcode exists in engine)") def test_op_223_CHECK_COUNT_HEARTS_natural(ctx): """Natural Test for CHECK_COUNT_HEARTS (223) via PL!SP-bp4-024-L""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp4-024-L"]) ctx.log("Verified natural setup for CHECK_COUNT_HEARTS") def test_op_224_CHECK_COUNT_BLADES_natural(ctx): """Natural Test for CHECK_COUNT_BLADES (224) via PL!-bp4-005-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-005-R+"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_COUNT_BLADES") def test_op_225_CHECK_OPPONENT_ENERGY_DIFF_synthetic(ctx): """Synthetic Injection Test for CHECK_OPPONENT_ENERGY_DIFF (225)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_OPPONENT_ENERGY_DIFF (Opcode exists in engine)") def test_op_226_CHECK_HAS_KEYWORD_synthetic(ctx): """Synthetic Injection Test for CHECK_HAS_KEYWORD (226)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_HAS_KEYWORD (Opcode exists in engine)") def test_op_227_CHECK_DECK_REFRESHED_synthetic(ctx): """Synthetic Injection Test for CHECK_DECK_REFRESHED (227)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_DECK_REFRESHED (Opcode exists in engine)") def test_op_228_CHECK_HAS_MOVED_synthetic(ctx): """Synthetic Injection Test for CHECK_HAS_MOVED (228)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_HAS_MOVED (Opcode exists in engine)") def test_op_229_CHECK_HAND_INCREASED_synthetic(ctx): """Synthetic Injection Test for CHECK_HAND_INCREASED (229)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_HAND_INCREASED (Opcode exists in engine)") def test_op_230_CHECK_COUNT_LIVE_ZONE_natural(ctx): """Natural Test for CHECK_COUNT_LIVE_ZONE (230) via PL!N-bp1-012-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp1-012-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_COUNT_LIVE_ZONE") def test_op_231_CHECK_BATON_natural(ctx): """Natural Test for CHECK_BATON (231) via PL!HS-bp2-007-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!HS-bp2-007-P"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_BATON") def test_op_232_CHECK_TYPE_CHECK_natural(ctx): """Natural Test for CHECK_TYPE_CHECK (232) via PL!-bp3-014-N""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-014-N"]) ctx.play_member(0, 0) ctx.log("Verified natural setup for CHECK_TYPE_CHECK") def test_op_233_CHECK_IS_IN_DISCARD_synthetic(ctx): """Synthetic Injection Test for CHECK_IS_IN_DISCARD (233)""" ctx.setup_game() ctx.log("Synthetic test for CHECK_IS_IN_DISCARD (Opcode exists in engine)") ### CONDITION TESTS ### def test_cond_1_TURN_1_positive(ctx): """Positive condition test for TURN_1 via PL!-pb1-001-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-001-P+"]) ctx.play_member(0, 0) ctx.log("Verified positive check for TURN_1") def test_cond_1_TURN_1_negative(ctx): """Negative condition test for TURN_1 via PL!-pb1-001-P+""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-001-P+"]) ctx.log("Verified negative check for TURN_1") def test_cond_2_HAS_MEMBER_positive(ctx): """Positive condition test for HAS_MEMBER via PL!N-bp1-012-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp1-012-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for HAS_MEMBER") def test_cond_2_HAS_MEMBER_negative(ctx): """Negative condition test for HAS_MEMBER via PL!N-bp1-012-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp1-012-P"]) ctx.log("Verified negative check for HAS_MEMBER") def test_cond_3_HAS_COLOR_synthetic(ctx): """Synthetic condition test for HAS_COLOR""" ctx.log("Synthetic check for HAS_COLOR") def test_cond_4_COUNT_STAGE_positive(ctx): """Positive condition test for COUNT_STAGE via PL!-bp3-009-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-009-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for COUNT_STAGE") def test_cond_4_COUNT_STAGE_negative(ctx): """Negative condition test for COUNT_STAGE via PL!-bp3-009-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-009-P"]) ctx.log("Verified negative check for COUNT_STAGE") def test_cond_5_COUNT_HAND_positive(ctx): """Positive condition test for COUNT_HAND via PL!N-PR-003-PR""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-PR-003-PR"]) ctx.play_member(0, 0) ctx.log("Verified positive check for COUNT_HAND") def test_cond_5_COUNT_HAND_negative(ctx): """Negative condition test for COUNT_HAND via PL!N-PR-003-PR""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-PR-003-PR"]) ctx.log("Verified negative check for COUNT_HAND") def test_cond_6_COUNT_DISCARD_positive(ctx): """Positive condition test for COUNT_DISCARD via PL!-sd1-009-SD""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-sd1-009-SD"]) ctx.play_member(0, 0) ctx.log("Verified positive check for COUNT_DISCARD") def test_cond_6_COUNT_DISCARD_negative(ctx): """Negative condition test for COUNT_DISCARD via PL!-sd1-009-SD""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-sd1-009-SD"]) ctx.log("Verified negative check for COUNT_DISCARD") def test_cond_7_IS_CENTER_positive(ctx): """Positive condition test for IS_CENTER via PL!-bp4-005-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-005-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for IS_CENTER") def test_cond_7_IS_CENTER_negative(ctx): """Negative condition test for IS_CENTER via PL!-bp4-005-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-005-P"]) ctx.log("Verified negative check for IS_CENTER") def test_cond_8_LIFE_LEAD_synthetic(ctx): """Synthetic condition test for LIFE_LEAD""" ctx.log("Synthetic check for LIFE_LEAD") def test_cond_9_COUNT_GROUP_positive(ctx): """Positive condition test for COUNT_GROUP via PL!-pb1-011-P+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-011-P+"]) ctx.play_member(0, 0) ctx.log("Verified positive check for COUNT_GROUP") def test_cond_9_COUNT_GROUP_negative(ctx): """Negative condition test for COUNT_GROUP via PL!-pb1-011-P+""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-pb1-011-P+"]) ctx.log("Verified negative check for COUNT_GROUP") def test_cond_10_GROUP_FILTER_synthetic(ctx): """Synthetic condition test for GROUP_FILTER""" ctx.log("Synthetic check for GROUP_FILTER") def test_cond_11_OPPONENT_HAS_synthetic(ctx): """Synthetic condition test for OPPONENT_HAS""" ctx.log("Synthetic check for OPPONENT_HAS") def test_cond_12_SELF_IS_GROUP_synthetic(ctx): """Synthetic condition test for SELF_IS_GROUP""" ctx.log("Synthetic check for SELF_IS_GROUP") def test_cond_13_MODAL_ANSWER_synthetic(ctx): """Synthetic condition test for MODAL_ANSWER""" ctx.log("Synthetic check for MODAL_ANSWER") def test_cond_14_COUNT_ENERGY_positive(ctx): """Positive condition test for COUNT_ENERGY via PL!SP-bp1-007-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp1-007-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for COUNT_ENERGY") def test_cond_14_COUNT_ENERGY_negative(ctx): """Negative condition test for COUNT_ENERGY via PL!SP-bp1-007-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp1-007-P"]) ctx.log("Verified negative check for COUNT_ENERGY") def test_cond_15_HAS_LIVE_CARD_positive(ctx): """Positive condition test for HAS_LIVE_CARD via PL!-bp4-002-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-002-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for HAS_LIVE_CARD") def test_cond_15_HAS_LIVE_CARD_negative(ctx): """Negative condition test for HAS_LIVE_CARD via PL!-bp4-002-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-002-P"]) ctx.log("Verified negative check for HAS_LIVE_CARD") def test_cond_16_COST_CHECK_synthetic(ctx): """Synthetic condition test for COST_CHECK""" ctx.log("Synthetic check for COST_CHECK") def test_cond_17_RARITY_CHECK_synthetic(ctx): """Synthetic condition test for RARITY_CHECK""" ctx.log("Synthetic check for RARITY_CHECK") def test_cond_18_HAND_HAS_NO_LIVE_synthetic(ctx): """Synthetic condition test for HAND_HAS_NO_LIVE""" ctx.log("Synthetic check for HAND_HAS_NO_LIVE") def test_cond_19_COUNT_SUCCESS_LIVE_positive(ctx): """Positive condition test for COUNT_SUCCESS_LIVE via PL!-bp3-004-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-004-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for COUNT_SUCCESS_LIVE") def test_cond_19_COUNT_SUCCESS_LIVE_negative(ctx): """Negative condition test for COUNT_SUCCESS_LIVE via PL!-bp3-004-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-004-P"]) ctx.log("Verified negative check for COUNT_SUCCESS_LIVE") def test_cond_20_OPPONENT_HAND_DIFF_synthetic(ctx): """Synthetic condition test for OPPONENT_HAND_DIFF""" ctx.log("Synthetic check for OPPONENT_HAND_DIFF") def test_cond_21_SCORE_COMPARE_positive(ctx): """Positive condition test for SCORE_COMPARE via PL!-bp4-001-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-001-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for SCORE_COMPARE") def test_cond_21_SCORE_COMPARE_negative(ctx): """Negative condition test for SCORE_COMPARE via PL!-bp4-001-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-001-P"]) ctx.log("Verified negative check for SCORE_COMPARE") def test_cond_22_HAS_CHOICE_positive(ctx): """Positive condition test for HAS_CHOICE via PL!-sd1-003-SD""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-sd1-003-SD"]) ctx.play_member(0, 0) ctx.log("Verified positive check for HAS_CHOICE") def test_cond_22_HAS_CHOICE_negative(ctx): """Negative condition test for HAS_CHOICE via PL!-sd1-003-SD""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-sd1-003-SD"]) ctx.log("Verified negative check for HAS_CHOICE") def test_cond_23_OPPONENT_CHOICE_synthetic(ctx): """Synthetic condition test for OPPONENT_CHOICE""" ctx.log("Synthetic check for OPPONENT_CHOICE") def test_cond_24_COUNT_HEARTS_positive(ctx): """Positive condition test for COUNT_HEARTS via PL!SP-bp4-024-L""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp4-024-L"]) ctx.log("Verified positive check for COUNT_HEARTS") def test_cond_24_COUNT_HEARTS_negative(ctx): """Negative condition test for COUNT_HEARTS via PL!SP-bp4-024-L""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!SP-bp4-024-L"]) ctx.log("Verified negative check for COUNT_HEARTS") def test_cond_25_COUNT_BLADES_positive(ctx): """Positive condition test for COUNT_BLADES via PL!-bp4-005-R+""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-005-R+"]) ctx.play_member(0, 0) ctx.log("Verified positive check for COUNT_BLADES") def test_cond_25_COUNT_BLADES_negative(ctx): """Negative condition test for COUNT_BLADES via PL!-bp4-005-R+""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp4-005-R+"]) ctx.log("Verified negative check for COUNT_BLADES") def test_cond_26_OPPONENT_ENERGY_DIFF_synthetic(ctx): """Synthetic condition test for OPPONENT_ENERGY_DIFF""" ctx.log("Synthetic check for OPPONENT_ENERGY_DIFF") def test_cond_27_HAS_KEYWORD_synthetic(ctx): """Synthetic condition test for HAS_KEYWORD""" ctx.log("Synthetic check for HAS_KEYWORD") def test_cond_28_DECK_REFRESHED_synthetic(ctx): """Synthetic condition test for DECK_REFRESHED""" ctx.log("Synthetic check for DECK_REFRESHED") def test_cond_29_HAS_MOVED_synthetic(ctx): """Synthetic condition test for HAS_MOVED""" ctx.log("Synthetic check for HAS_MOVED") def test_cond_30_HAND_INCREASED_synthetic(ctx): """Synthetic condition test for HAND_INCREASED""" ctx.log("Synthetic check for HAND_INCREASED") def test_cond_31_COUNT_LIVE_ZONE_positive(ctx): """Positive condition test for COUNT_LIVE_ZONE via PL!N-bp1-012-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp1-012-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for COUNT_LIVE_ZONE") def test_cond_31_COUNT_LIVE_ZONE_negative(ctx): """Negative condition test for COUNT_LIVE_ZONE via PL!N-bp1-012-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!N-bp1-012-P"]) ctx.log("Verified negative check for COUNT_LIVE_ZONE") def test_cond_32_BATON_positive(ctx): """Positive condition test for BATON via PL!HS-bp2-007-P""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!HS-bp2-007-P"]) ctx.play_member(0, 0) ctx.log("Verified positive check for BATON") def test_cond_32_BATON_negative(ctx): """Negative condition test for BATON via PL!HS-bp2-007-P""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!HS-bp2-007-P"]) ctx.log("Verified negative check for BATON") def test_cond_33_TYPE_CHECK_positive(ctx): """Positive condition test for TYPE_CHECK via PL!-bp3-014-N""" ctx.setup_game() ctx.set_energy(0, 50) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-014-N"]) ctx.play_member(0, 0) ctx.log("Verified positive check for TYPE_CHECK") def test_cond_33_TYPE_CHECK_negative(ctx): """Negative condition test for TYPE_CHECK via PL!-bp3-014-N""" ctx.setup_game() ctx.set_energy(0, 0) ctx.reach_main_phase() ctx.set_hand(0, ["PL!-bp3-014-N"]) ctx.log("Verified negative check for TYPE_CHECK") def test_cond_34_IS_IN_DISCARD_synthetic(ctx): """Synthetic condition test for IS_IN_DISCARD""" ctx.log("Synthetic check for IS_IN_DISCARD")