summaryrefslogtreecommitdiffstats
path: root/tests/scheduler_brutal_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/scheduler_brutal_unittest.py')
-rw-r--r--tests/scheduler_brutal_unittest.py88
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