File size: 1,904 Bytes
463f868
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use crate::core::logic::*;
use crate::test_helpers::{create_test_state, load_real_db};

#[test]
fn test_win_by_lives() {
    let _db = load_real_db();
    let mut state = create_test_state();

    // Player 0 has 3 success lives (START:DASH!! ID 137)
    state.players[0].success_lives = vec![137, 137, 137].into();
    state.players[1].success_lives = vec![].into();

    state.check_win_condition();

    assert_eq!(state.phase, Phase::Terminal);
    assert_eq!(state.get_winner(), 0);
}

#[test]
fn test_draw_simultaneous_lives() {
    let _db = load_real_db();
    let mut state = create_test_state();

    // Simultaneous reach 3 lives
    state.players[0].success_lives = vec![137, 137, 137].into();
    state.players[1].success_lives = vec![137, 137, 137].into();

    state.check_win_condition();

    assert_eq!(state.phase, Phase::Terminal);
    assert_eq!(
        state.get_winner(),
        2,
        "Rule 1.2.1.2: Simultaneous 3+ lives is a Draw (2)"
    );
}

#[test]
fn test_true_draw_lives_and_score_equal() {
    let _db = load_real_db();
    let mut state = create_test_state();

    state.players[0].success_lives = vec![137, 137, 137].into();
    state.players[1].success_lives = vec![137, 137, 137].into();

    state.players[0].score = 25;
    state.players[1].score = 25;

    state.check_win_condition();

    assert_eq!(state.get_winner(), 2, "Should be a true draw (2)");
}

#[test]
fn test_deck_out_not_yet_implemented() {
    // Verifying current behavior: Deck out doesn't cause immediate loss yet
    let _db = load_real_db();
    let mut state = create_test_state();
    state.players[0].deck = vec![].into();
    state.players[0].discard = vec![].into();

    state.draw_cards(0, 1);

    assert_ne!(
        state.phase,
        Phase::Terminal,
        "Deck out logic NOT in game.rs yet"
    );
}