diff options
Diffstat (limited to 'tests/scheduler_brutal_unittest.py')
-rw-r--r-- | tests/scheduler_brutal_unittest.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/scheduler_brutal_unittest.py b/tests/scheduler_brutal_unittest.py new file mode 100644 index 0000000..a87e5e9 --- /dev/null +++ b/tests/scheduler_brutal_unittest.py @@ -0,0 +1,88 @@ +import pytest + +from flashcards import scheduler_brutal +from flashcards.scheduler_brutal import SchedulerBrutal as UUT +from flashcards.card import Card + +# Force HISTORY_DEPTH to simplify testing +scheduler_brutal.HISTORY_DEPTH = 3 + +#-------------------------------------------------------------------------- +# Scheduling behaviour +#-------------------------------------------------------------------------- +def test_scheduling(): + cards = {str(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], "2": [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 |