# X-Check Test Validation Table **Purpose**: Map each test to its correct expected GroundballResultType based on official charts **Source**: Images #1 (G1), #2 (G2), #3 (G3) **Date**: 2025-11-02 --- ## Result Type Reference (from Images #4-5) ``` 1 = BATTER_OUT_RUNNERS_HOLD 2 = DOUBLE_PLAY_AT_SECOND 3 = BATTER_OUT_RUNNERS_ADVANCE 4 = BATTER_SAFE_FORCE_OUT_AT_SECOND 5 = CONDITIONAL_ON_MIDDLE_INFIELD 6 = CONDITIONAL_ON_RIGHT_SIDE 7 = BATTER_OUT_FORCED_ONLY 8 = BATTER_OUT_FORCED_ONLY_ALT 9 = LEAD_HOLDS_TRAIL_ADVANCES 10 = DOUBLE_PLAY_HOME_TO_FIRST 11 = BATTER_SAFE_LEAD_OUT 12 = DECIDE_OPPORTUNITY 13 = CONDITIONAL_DOUBLE_PLAY ``` --- ## G1 Chart Reference (Image #1) | Bases (on_base_code) | Infield Normal | Infield In | |----------------------|----------------|------------| | Empty (0) | 1 | N/A | | 1st (1) | 2 | 2 | | 2nd (2) | 12 | 12 | | 3rd (3) | 3 | 1 | | 1st & 2nd (4) | 13 | 2 | | 1st & 3rd (5) | 2 | 1 | | 2nd & 3rd (6) | 3 | 1 | | Loaded (7) | 2 | 10 | --- ## G2 Chart Reference (Image #2) | Bases (on_base_code) | Infield Normal | Infield In | |----------------------|----------------|------------| | Empty (0) | 1 | N/A | | 1st (1) | 4 | 4 | | 2nd (2) | 12 | 12 | | 3rd (3) | 5 | 1 | | 1st & 2nd (4) | 4 | 4 | | 1st & 3rd (5) | 4 | 1 | | 2nd & 3rd (6) | 5 | 1 | | Loaded (7) | 4 | 11 | --- ## G3 Chart Reference (Image #3) | Bases (on_base_code) | Infield Normal | Infield In | |----------------------|----------------|------------| | Empty (0) | 1 | N/A | | 1st (1) | 3 | 3 | | 2nd (2) | 12 | 3 | | 3rd (3) | 3 | 12 (DECIDE)| | 1st & 2nd (4) | 3 | 3 | | 1st & 3rd (5) | 3 | 3 | | 2nd & 3rd (6) | 3 | 12 (DECIDE)| | Loaded (7) | 3 | 11 | --- ## Test Validation - G1 Tests ### test_g1_bases_empty_normal_no_error - **Scenario**: G1, Empty, Normal, NO - **Current on_base_code**: 0 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 1 (BATTER_OUT_RUNNERS_HOLD) - **Current Expectation**: BATTER_OUT_RUNNERS_HOLD ✅ - **Status**: ✅ CORRECT ### test_g1_r1_only_normal_no_error - **Scenario**: G1, 1st, Normal, NO - **Current on_base_code**: 1 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 2 (DOUBLE_PLAY_AT_SECOND) - **Current Expectation**: DOUBLE_PLAY_AT_SECOND ✅ - **Status**: ✅ CORRECT ### test_g1_r1_only_infield_in_no_error - **Scenario**: G1, 1st, In, NO - **Current on_base_code**: 1 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 2 (DOUBLE_PLAY_AT_SECOND) - **Chart Says**: 2 ✅ - **Current Expectation**: BATTER_OUT_RUNNERS_ADVANCE (3) ❌ - **Status**: ❌ WRONG - Should be DOUBLE_PLAY_AT_SECOND (2) ### test_g1_r2_only_normal_no_error - **Scenario**: G1, 2nd, Normal, NO - **Current on_base_code**: 2 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 12 (DECIDE_OPPORTUNITY) - **Current Expectation**: DECIDE_OPPORTUNITY ✅ - **Status**: ✅ CORRECT ### test_g1_r1_r2_normal_no_error - **Scenario**: G1, 1st & 2nd, Normal, NO - **Current on_base_code**: 4 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 13 (CONDITIONAL_DOUBLE_PLAY) - **Chart Says**: 13 ✅ - **Current Expectation**: BATTER_OUT_RUNNERS_ADVANCE (3) ❌ - **Status**: ❌ WRONG - Should be CONDITIONAL_DOUBLE_PLAY (13) ### test_g1_r1_r2_infield_in_no_error - **Scenario**: G1, 1st & 2nd, In, NO - **Current on_base_code**: 4 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 2 (DOUBLE_PLAY_AT_SECOND) - **Chart Says**: 2 ✅ - **Current Expectation**: BATTER_SAFE_FORCE_OUT_AT_SECOND (4) ❌ - **Status**: ❌ WRONG - Should be DOUBLE_PLAY_AT_SECOND (2) ### test_g1_r3_only_normal_no_error - **Scenario**: G1, 3rd, Normal, NO - **Current on_base_code**: 3 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 3 (BATTER_OUT_RUNNERS_ADVANCE) - **Chart Says**: 3 ✅ - **Current Expectation**: CONDITIONAL_DOUBLE_PLAY (13) ❌ - **Status**: ❌ WRONG - Should be BATTER_OUT_RUNNERS_ADVANCE (3) ### test_g1_r3_only_infield_in_no_error - **Scenario**: G1, 3rd, In, NO - **Current on_base_code**: 3 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 1 (BATTER_OUT_RUNNERS_HOLD) - **Chart Says**: 1 ✅ - **Current Expectation**: BATTER_OUT_RUNNERS_ADVANCE (3) ❌ - **Status**: ❌ WRONG - Should be BATTER_OUT_RUNNERS_HOLD (1) ### test_g1_loaded_normal_no_error - **Scenario**: G1, Loaded, Normal, NO - **Current on_base_code**: 7 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 2 (DOUBLE_PLAY_AT_SECOND) - **Current Expectation**: DOUBLE_PLAY_AT_SECOND ✅ - **Status**: ✅ CORRECT ### test_g1_loaded_infield_in_no_error - **Scenario**: G1, Loaded, In, NO - **Current on_base_code**: 7 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 10 (DOUBLE_PLAY_HOME_TO_FIRST) - **Current Expectation**: DOUBLE_PLAY_HOME_TO_FIRST ✅ - **Status**: ✅ CORRECT --- ## Test Validation - G2 Tests ### test_g2_bases_empty_normal_no_error - **Scenario**: G2, Empty, Normal, NO - **Current on_base_code**: 0 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 1 (BATTER_OUT_RUNNERS_HOLD) - **Current Expectation**: BATTER_OUT_RUNNERS_HOLD ✅ - **Status**: ✅ CORRECT ### test_g2_r1_only_normal_no_error - **Scenario**: G2, 1st, Normal, NO - **Current on_base_code**: 1 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 4 (BATTER_SAFE_FORCE_OUT_AT_SECOND) - **Current Expectation**: BATTER_SAFE_FORCE_OUT_AT_SECOND ✅ - **Status**: ✅ CORRECT ### test_g2_r1_r2_normal_no_error - **Scenario**: G2, 1st & 2nd, Normal, NO - **Current on_base_code**: 4 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 4 (BATTER_SAFE_FORCE_OUT_AT_SECOND) - **Chart Says**: 4 ✅ - **Current Expectation**: CONDITIONAL_ON_MIDDLE_INFIELD (5) ❌ - **Status**: ❌ WRONG - Should be BATTER_SAFE_FORCE_OUT_AT_SECOND (4) ### test_g2_r1_r2_infield_in_no_error - **Scenario**: G2, 1st & 2nd, In, NO - **Current on_base_code**: 4 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 4 (BATTER_SAFE_FORCE_OUT_AT_SECOND) - **Current Expectation**: BATTER_SAFE_FORCE_OUT_AT_SECOND ✅ - **Status**: ✅ CORRECT ### test_g2_r3_only_normal_no_error - **Scenario**: G2, 3rd, Normal, NO - **Current on_base_code**: 3 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 5 (CONDITIONAL_ON_MIDDLE_INFIELD) - **Current Expectation**: CONDITIONAL_ON_MIDDLE_INFIELD ✅ - **Status**: ✅ CORRECT ### test_g2_r3_only_infield_in_no_error - **Scenario**: G2, 3rd, In, NO - **Current on_base_code**: 3 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 1 (BATTER_OUT_RUNNERS_HOLD) - **Chart Says**: 1 ✅ - **Current Expectation**: BATTER_OUT_RUNNERS_ADVANCE (3) ❌ - **Status**: ❌ WRONG - Should be BATTER_OUT_RUNNERS_HOLD (1) ### test_g2_loaded_normal_no_error - **Scenario**: G2, Loaded, Normal, NO - **Current on_base_code**: 7 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 4 (BATTER_SAFE_FORCE_OUT_AT_SECOND) - **Current Expectation**: BATTER_SAFE_FORCE_OUT_AT_SECOND ✅ - **Status**: ✅ CORRECT ### test_g2_loaded_infield_in_no_error - **Scenario**: G2, Loaded, In, NO - **Current on_base_code**: 7 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 11 (BATTER_SAFE_LEAD_OUT) - **Current Expectation**: BATTER_SAFE_LEAD_OUT ✅ - **Status**: ✅ CORRECT --- ## Test Validation - G3 Tests ### test_g3_bases_empty_normal_no_error - **Scenario**: G3, Empty, Normal, NO - **Current on_base_code**: 0 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 1 (BATTER_OUT_RUNNERS_HOLD) - **Current Expectation**: BATTER_OUT_RUNNERS_HOLD ✅ - **Status**: ✅ CORRECT ### test_g3_r1_only_normal_no_error - **Scenario**: G3, 1st, Normal, NO - **Current on_base_code**: 1 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 3 (BATTER_OUT_RUNNERS_ADVANCE) - **Current Expectation**: BATTER_OUT_RUNNERS_ADVANCE ✅ - **Status**: ✅ CORRECT ### test_g3_r2_only_normal_no_error - **Scenario**: G3, 2nd, Normal, NO - **Current on_base_code**: 2 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 12 (DECIDE_OPPORTUNITY) - **Current Expectation**: DECIDE_OPPORTUNITY ✅ - **Status**: ✅ CORRECT ### test_g3_r2_only_infield_in_no_error - **Scenario**: G3, 2nd, In, NO - **Current on_base_code**: 2 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 3 (BATTER_OUT_RUNNERS_ADVANCE) - **Current Expectation**: BATTER_OUT_RUNNERS_ADVANCE ✅ - **Status**: ✅ CORRECT ### test_g3_r3_only_infield_in_decide - **Scenario**: G3, 3rd, In, NO - **Current on_base_code**: 3 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 12 (DECIDE_OPPORTUNITY) - **Current Expectation**: DECIDE_OPPORTUNITY ✅ - **Status**: ✅ CORRECT ### test_g3_r2_r3_infield_in_decide - **Scenario**: G3, 2nd & 3rd, In, NO - **Current on_base_code**: 6 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 12 (DECIDE_OPPORTUNITY) - **Current Expectation**: DECIDE_OPPORTUNITY ✅ - **Status**: ✅ CORRECT ### test_g3_loaded_normal_no_error - **Scenario**: G3, Loaded, Normal, NO - **Current on_base_code**: 7 ✅ - **Current defender_in**: False ✅ - **Expected Result**: 3 (BATTER_OUT_RUNNERS_ADVANCE) - **Current Expectation**: BATTER_OUT_RUNNERS_ADVANCE ✅ - **Status**: ✅ CORRECT ### test_g3_loaded_infield_in_no_error - **Scenario**: G3, Loaded, In, NO - **Current on_base_code**: 7 ✅ - **Current defender_in**: True ✅ - **Expected Result**: 11 (BATTER_SAFE_LEAD_OUT) - **Current Expectation**: BATTER_SAFE_LEAD_OUT ✅ - **Status**: ✅ CORRECT --- ## Summary of Test Failures **Total Tests with Wrong Expectations**: 6 ### Tests That Need Fixing: 1. **test_g1_r1_only_infield_in_no_error** - Current: BATTER_OUT_RUNNERS_ADVANCE (3) - Should be: DOUBLE_PLAY_AT_SECOND (2) 2. **test_g1_r1_r2_normal_no_error** - Current: BATTER_OUT_RUNNERS_ADVANCE (3) - Should be: CONDITIONAL_DOUBLE_PLAY (13) 3. **test_g1_r1_r2_infield_in_no_error** - Current: BATTER_SAFE_FORCE_OUT_AT_SECOND (4) - Should be: DOUBLE_PLAY_AT_SECOND (2) 4. **test_g1_r3_only_normal_no_error** - Current: CONDITIONAL_DOUBLE_PLAY (13) - Should be: BATTER_OUT_RUNNERS_ADVANCE (3) 5. **test_g1_r3_only_infield_in_no_error** - Current: BATTER_OUT_RUNNERS_ADVANCE (3) - Should be: BATTER_OUT_RUNNERS_HOLD (1) 6. **test_g2_r1_r2_normal_no_error** - Current: CONDITIONAL_ON_MIDDLE_INFIELD (5) - Should be: BATTER_SAFE_FORCE_OUT_AT_SECOND (4) 7. **test_g2_r3_only_infield_in_no_error** - Current: BATTER_OUT_RUNNERS_ADVANCE (3) - Should be: BATTER_OUT_RUNNERS_HOLD (1) --- ## Next Steps 1. ✅ Validation table complete 2. ⏳ Fix the 7 tests with wrong expectations 3. ⏳ Re-run test suite to verify 59/59 passing 4. ⏳ Create git commit with ALL fixes (on_base_code + expectations)