| { |
| "version": "1.0.0", |
| "description": "Reference inputs and expected outputs for validating implementations", |
| "test_cases": { |
| "card_encoding": [ |
| { |
| "description": "First card (Club Jack)", |
| "card": "CJ", |
| "expected_index": 0 |
| }, |
| { |
| "description": "Last card (Diamond 7)", |
| "card": "D7", |
| "expected_index": 31 |
| }, |
| { |
| "description": "Spade Jack", |
| "card": "SJ", |
| "expected_index": 1 |
| }, |
| { |
| "description": "Club Ace", |
| "card": "CA", |
| "expected_index": 4 |
| }, |
| { |
| "description": "Heart 10", |
| "card": "HT", |
| "expected_index": 19 |
| } |
| ], |
| "game_type_encoding": [ |
| { |
| "game_type": "DIAMONDS", |
| "expected_index": 0 |
| }, |
| { |
| "game_type": "GRAND", |
| "expected_index": 4 |
| }, |
| { |
| "game_type": "NULL", |
| "expected_index": 5 |
| } |
| ], |
| "position_encoding": [ |
| { |
| "position": "FOREHAND", |
| "expected_index": 0 |
| }, |
| { |
| "position": "MIDDLEHAND", |
| "expected_index": 1 |
| }, |
| { |
| "position": "REARHAND", |
| "expected_index": 2 |
| } |
| ], |
| "bidding_transformer": [ |
| { |
| "description": "Strong Grand hand - all 4 Jacks + Aces", |
| "input": { |
| "hand_cards": ["CJ", "SJ", "HJ", "DJ", "CA", "SA", "HA", "DA", "CT", "ST"], |
| "position": "FOREHAND" |
| }, |
| "expected": { |
| "description": "Should have high win probability at Grand bid levels", |
| "pickup_prob_at_bid_18_min": 0.9, |
| "hand_prob_at_bid_18_min": 0.85 |
| } |
| }, |
| { |
| "description": "Weak hand - no Jacks, scattered low cards", |
| "input": { |
| "hand_cards": ["C7", "C8", "S7", "S8", "H7", "H8", "D7", "D8", "C9", "S9"], |
| "position": "REARHAND" |
| }, |
| "expected": { |
| "description": "Should have low win probability at most bid levels", |
| "pickup_prob_at_bid_18_max": 0.3, |
| "hand_prob_at_bid_18_max": 0.2 |
| } |
| } |
| ], |
| "game_eval_transformer": [ |
| { |
| "description": "Strong Clubs hand after skat pickup", |
| "input": { |
| "hand_cards": ["CJ", "SJ", "CA", "CT", "CK", "CQ", "C9", "C8", "SA", "ST"], |
| "skat_cards": ["C7", "D7"], |
| "skat_len": 2, |
| "game_type": "CLUBS", |
| "position": "FOREHAND", |
| "is_hand": 0, |
| "bid": 0.068 |
| }, |
| "expected": { |
| "description": "Should predict high win probability for Clubs", |
| "win_prob_min": 0.8 |
| } |
| } |
| ], |
| "card_play_transformer": [ |
| { |
| "description": "Opening lead in Clubs game as declarer with strong trumps", |
| "input": { |
| "game_type": "CLUBS", |
| "declarer": 0, |
| "is_ouvert": 0, |
| "hand": ["CJ", "SJ", "CA", "CT", "CK", "SA", "ST", "HA", "DA", "D7"], |
| "hand_len": 10, |
| "ouvert_hand": [], |
| "ouvert_hand_len": 0, |
| "history": [], |
| "history_len": 0, |
| "trick": [], |
| "trick_len": 0, |
| "legal_mask_cards": ["CJ", "SJ", "CA", "CT", "CK", "SA", "ST", "HA", "DA", "D7"] |
| }, |
| "expected": { |
| "description": "Should prefer leading a Jack to draw trumps", |
| "top_cards": ["CJ", "SJ"], |
| "top_prob_min": 0.3 |
| } |
| } |
| ] |
| }, |
| "notes": { |
| "bid_normalization": "Normalize bid values by dividing by 264 (max bid)", |
| "card_indices": "Convert card names to indices using card_encoding.order", |
| "legal_mask": "Create boolean array of size 32, True for cards in hand that are legal to play", |
| "padding": "Use pad_index (32) for empty slots in variable-length sequences" |
| } |
| } |
|
|