summaryrefslogtreecommitdiffstats
path: root/src/scheduler_brutal_unittest.py
blob: 779d2c301f2878f0342d4b3e48ef6b7a76a258aa (plain)
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import pytest
import scheduler_brutal
from scheduler_brutal import SchedulerBrutal as UUT
from card import Card

# Force HISTORY_DEPTH to simplify testing
scheduler_brutal.HISTORY_DEPTH = 3

#--------------------------------------------------------------------------
# Scheduling behaviour
#--------------------------------------------------------------------------
def test_scheduling():
    cards = {id: Card("", "") for id in range(0, 10)}
    state = {
        0: [1, 1, 1],
        1: [0, 0, 0],
        2: [0, 0, 1],
        3: [1, 0, 0],

        4: [None, None, 1   ],
        5: [None, 1,    None],
        6: [1,    None, None],
        7: [None, None, 0   ],
        8: [0,    0,    None],
        9: [None, None, None],
    }

    expected_priority = [9, 6, 5, 7, 8, 4, 1, 3, 2, 0]

    uut = UUT(cards, state)

    for i in range(0, len(expected_priority)):
        assert set(uut.practice(i + 1)) == set(expected_priority[0:i + 1])

#--------------------------------------------------------------------------
# State update
#--------------------------------------------------------------------------
def test_stateUpdate():
    cards = {0: Card("f", "b"), 1: Card("a", "b"), 2: Card("c", "d")}
    state = {0: [1, 0, 1], 1: [1, 0, 0], 2: [0, 0, 1]}

    uut = UUT(cards, state)

    # Unknown IDs in the result are silently ignored
    result = {0: 1, 1: 0, 3: 0}
    expected_state = {0: [0, 1, 1], 1: [0, 0, 0], 2: [0, 1, None]}

    uut.update(result)

    assert uut.getState() == expected_state

#--------------------------------------------------------------------------
# State corrections
#--------------------------------------------------------------------------
def test_stateWhenCardsChanged():
    cards = {0: Card("f", "b"), 1: Card("a", "b")}

    initial_state = {0: [1, 0, 1], -1: [0, 0, 0]}
    expected_state = {0: [1, 0, 1], 1: [None, None, None]}

    uut = UUT(cards, initial_state)

    assert uut.getState() == expected_state

def test_stateWhenHistoryDepthIncreased():
    scheduler_brutal.HISTORY_DEPTH = 5

    cards = {0: Card("f", "b"), 1: Card("a", "b"), 2: Card("new", "new")}

    initial_state = {0: [1, 0, 1], 1: [0, 0, 0]}
    expected_state = {0: [None, None, 1, 0, 1], 1: [None, None, 0, 0, 0], 2: [None] * 5}

    uut = UUT(cards, initial_state)

    assert uut.getState() == expected_state

def test_stateWhenHistoryDepthDecreased():
    scheduler_brutal.HISTORY_DEPTH = 1

    cards = {0: Card("f", "b"), 1: Card("a", "b"), 2: Card("new", "new")}

    initial_state = {0: [1, 0, 0], 1: [0, 0, 1]}
    expected_state = {0: [0], 1: [1], 2: [None]}

    uut = UUT(cards, initial_state)

    assert uut.getState() == expected_state