rabukasim / docs /plans /new_opcode_test_plan.md
trioskosmos's picture
chore: remove large files for HF Space
9bd4ce5

新しいオペコードのテスト計画

概要

BP05シリーズで追加された新しいアビリティに対応するため、7つの新しいオペコードと4つの新しい条件を追加しました。このドキュメントでは、各オペコードの仕様と、それを使用するカードのアビリティテキストに基づいたテストケースを定義します。

新しいオペコード一覧

オペコード ID 説明
LOOK_DECK_DYNAMIC 91 ライブスコアに基づいてデッキを見る
REDUCE_SCORE 92 ライブスコアを減らす
REPEAT_ABILITY 93 アビリティを繰り返す
LOSE_EXCESS_HEARTS 94 余剰ハートを失う
SKIP_ACTIVATE_PHASE 95 アクティブフェーズをスキップ
PAY_ENERGY_DYNAMIC 96 カードスコアに基づいてエネルギーを支払う
PLACE_ENERGY_UNDER_MEMBER 97 エネルギーをメンバーの下に配置

新しい条件一覧

条件 ID 説明
COUNT_ENERGY_EXACT 301 エネルギーの正確な数をチェック
COUNT_BLADE_HEART_TYPES 302 ブレード/ハートタイプをカウント
OPPONENT_HAS_EXCESS_HEART 303 相手が余剰ハートを持つかチェック
SCORE_TOTAL_CHECK 304 合計スコアをチェック

テストケース

1. LOOK_DECK_DYNAMIC (91)

カード例: PL!-bp5-001-AR 元のテキスト:

ライブ成功時、手札を1枚控え室に置いてもよい:自分のデッキの上から、自分のライブの合計スコアに2を足した数に等しい枚数見る。その中からカードを1枚手札に加える。残りを控え室に置く。

現在のコンパイル状態: effect_type: 29 (META_RULE)

期待される動作:

  1. ライブ成功時にトリガー
  2. オプションコスト: 手札を1枚捨てる
  3. ライブの合計スコア + 2枚のカードをデッキの上から見る
  4. その中から1枚を手札に加える
  5. 残りを控え室に置く

テストシナリオ:

GIVEN: ライブスコアが5の状態
WHEN: アビリティが発動
THEN: デッキの上から7枚(5+2)を見る
AND: 1枚を選んで手札に加える
AND: 残り6枚を控え室に置く

Rustテストコード:

#[test]
fn test_opcode_look_deck_dynamic_score() {
    let mut state = create_test_state();
    // Setup: ライブスコア5、デッキに10枚以上
    state.core.players[0].live_score = 5;
    // ... デッキのセットアップ

    // Execute: LOOK_DECK_DYNAMIC(2)を実行
    // 期待: 7枚を見る

    // Assert: looked_cardsに7枚が含まれる
    assert_eq!(state.core.players[0].looked_cards.len(), 7);
}

2. REDUCE_SCORE (92)

説明: ライブスコアを減少させる効果

期待される動作:

  • 指定された値だけライブスコアを減らす
  • スコアは0以下にならない

テストシナリオ:

GIVEN: ライブスコアが10の状態
WHEN: REDUCE_SCORE(3)を実行
THEN: ライブスコアが7になる

Rustテストコード:

#[test]
fn test_opcode_reduce_score() {
    let mut state = create_test_state();
    state.core.players[0].live_score = 10;

    // Execute: REDUCE_SCORE(3)
    // 期待: live_score = 7

    assert_eq!(state.core.players[0].live_score, 7);
}

3. REPEAT_ABILITY (93)

説明: アビリティを指定回数繰り返す

期待される動作:

  • 現在のアビリティを指定回数実行する
  • 繰り返し回数は動的に計算可能

テストシナリオ:

GIVEN: アビリティが「1枚引く」
WHEN: REPEAT_ABILITY(2)を実行
THEN: 2枚引く

4. LOSE_EXCESS_HEARTS (94)

説明: 余剰ハートを失う効果

期待される動作:

  • 必要ハート数を超えているハートを失う
  • ライブ成功条件に影響する可能性がある

テストシナリオ:

GIVEN: 必要ハートが[1,0,1,0,7,1,0]、現在のハートが[2,1,2,0,8,2,1]
WHEN: LOSE_EXCESS_HEARTSを実行
THEN: ハートが[1,0,1,0,7,1,0]になる(余剰分を失う)

5. SKIP_ACTIVATE_PHASE (95)

説明: アクティブフェーズをスキップする

期待される動作:

  • プレイヤーのアクティブフェーズをスキップ
  • 次のフェーズに進む

テストシナリオ:

GIVEN: アクティブフェーズ
WHEN: SKIP_ACTIVATE_PHASEを実行
THEN: アクティブフェーズがスキップされる

6. PAY_ENERGY_DYNAMIC (96)

説明: カードのスコアに基づいてエネルギーを支払う

期待される動作:

  • カードのスコア分のエネルギーを支払う
  • 動的なコスト計算

テストシナリオ:

GIVEN: エネルギーゾーンに5枚、カードスコアが3
WHEN: PAY_ENERGY_DYNAMICを実行
THEN: エネルギーを3枚支払う

7. PLACE_ENERGY_UNDER_MEMBER (97)

説明: エネルギーをメンバーの下に配置

期待される動作:

  • エネルギーカードをメンバーの下に移動
  • 特殊な状態管理が必要

テストシナリオ:

GIVEN: エネルギーゾーンにカード、ステージにメンバー
WHEN: PLACE_ENERGY_UNDER_MEMBERを実行
THEN: エネルギーがメンバーの下に配置される

新しい条件のテスト

COUNT_ENERGY_EXACT (301)

テストシナリオ:

GIVEN: エネルギーゾーンに3枚
WHEN: COUNT_ENERGY_EXACT(3)を評価
THEN: true

WHEN: COUNT_ENERGY_EXACT(4)を評価
THEN: false

COUNT_BLADE_HEART_TYPES (302)

テストシナリオ:

GIVEN: メンバーが3種類のブレード/ハートを持つ
WHEN: COUNT_BLADE_HEART_TYPES(3)を評価
THEN: true

OPPONENT_HAS_EXCESS_HEART (303)

テストシナリオ:

GIVEN: 相手が余剰ハートを持つ
WHEN: OPPONENT_HAS_EXCESS_HEARTを評価
THEN: true

SCORE_TOTAL_CHECK (304)

テストシナリオ:

GIVEN: 合計スコアが10
WHEN: SCORE_TOTAL_CHECK(10)を評価
THEN: true

実装優先順位

  1. LOOK_DECK_DYNAMIC - 最も多くのカードで使用
  2. REDUCE_SCORE - スコア計算に重要
  3. PAY_ENERGY_DYNAMIC - エネルギーコスト管理
  4. LOSE_EXCESS_HEARTS - ライブメカニクス
  5. SKIP_ACTIVATE_PHASE - フェーズ管理
  6. REPEAT_ABILITY - 複雑な効果
  7. PLACE_ENERGY_UNDER_MEMBER - 特殊な状態管理

次のステップ

  1. CodeモードでRustエンジンにオペコードハンドラーを実装
  2. 各オペコードのテストを追加
  3. BP05カードをテストスイートに追加
  4. カードコンパイラを更新して新しいオペコードを使用