LovecaSim / engine /tests /logic /test_complex_abilities_rust.py
trioskosmos's picture
Upload folder using huggingface_hub
bb3fbf9 verified
import pytest
from engine.game.enums import Phase
from engine.tests.ability_test_helper import AbilityTestContext
def test_kasumi_sec_order_deck():
"""
Test Kasumi SEC (PL!N-bp1-002-SEC): ORDER_DECK ability.
- Play Kasumi.
- Order Deck choice should appear.
"""
ctx = AbilityTestContext()
card_no = "PL!N-bp1-002-SEC"
ctx.setup_game()
ctx.reach_main_phase()
ctx.set_hand(0, [card_no])
ctx.set_energy(0, 5, 0)
# Play Kasumi to Center
ctx.play_member(0, 1)
# Kasumi SEC has choices for ORDER_DECK
# According to logic.rs, choice ID is 550 + area*100 + ab_idx*10 + choice
# Slot 1, Ab index 0 -> 650, 651, 652, 653 (Done)
ctx.assert_phase(Phase.RESPONSE)
legal = ctx.get_legal_actions()
assert 650 in legal
assert 653 in legal
# Perform ordering
ctx.gs.step(651)
ctx.gs.step(653)
ctx.assert_phase(Phase.MAIN)
ctx.log("Kasumi SEC ORDER_DECK verified!")
def test_emma_verde_activate_energy():
"""
Test Emma Verde (PL!N-sd1-008-SD): ACTIVATE_ENERGY.
It is an OnPlay ability.
"""
ctx = AbilityTestContext()
card_no = "PL!N-sd1-008-SD"
ctx.setup_game()
ctx.reach_main_phase()
ctx.set_hand(0, [card_no])
ctx.set_energy(0, 10, 0) # 10 untapped
# Play Emma Verde
ctx.play_member(0, 1)
# Cost 7. After play: 7 tapped, 3 untapped.
# OnPlay activates 2. Final: 5 tapped, 5 untapped.
p0_after = ctx.gs.get_player(0)
tapped_count = sum(1 for t in p0_after.tapped_energy if t)
assert tapped_count == 5, f"Expected 5 tapped energy, got {tapped_count}"
ctx.log("Emma Verde ACTIVATE_ENERGY verified!")
def test_turn_1_condition():
"""
Test C_TR1 (Turn 1) condition.
C_TR1 = 200
O_DRAW = 10
"""
ctx = AbilityTestContext()
# Bytecode: [C_TR1, 1, 0, 0, O_DRAW, 1, 0, 1, JUMP, 1, 0, 0, RETURN, 0, 0, 0]
# Simple check: [200, 1, 0, 0, 10, 1, 0, 1]
bytecode = [200, 1, 0, 0, 10, 1, 0, 1]
ctx.setup_game()
ctx.gs.turn = 1
hand_before = len(ctx.gs.get_player(0).hand)
ctx.gs.debug_execute_bytecode(bytecode, 0, -1, -1, -1, -1, -1)
hand_after = len(ctx.gs.get_player(0).hand)
assert hand_after == hand_before + 1, "Should have drawn a card on Turn 1"
# Test Turn 2
ctx.gs.turn = 2
ctx.gs.debug_execute_bytecode(bytecode, 0, -1, -1, -1, -1, -1)
hand_after_2 = len(ctx.gs.get_player(0).hand)
assert hand_after_2 == hand_after, "Should NOT have drawn a card on Turn 2"
ctx.log("C_TR1 condition verified!")
if __name__ == "__main__":
pytest.main([__file__])