File size: 1,340 Bytes
363abf3 | 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 | from env.curriculum import CurriculumController
def test_promotion_fires_at_threshold():
ctrl = CurriculumController(start_tier="easy")
for _ in range(10):
result = ctrl.after_episode(5.0)
assert ctrl.get_tier() == "medium"
assert len(ctrl.promotion_log) == 1
assert ctrl.promotion_log[0][1] == "medium"
def test_no_premature_promotion():
ctrl = CurriculumController(start_tier="easy")
for _ in range(5):
ctrl.after_episode(5.0)
assert ctrl.get_tier() == "easy"
def test_demotion_on_collapse():
ctrl = CurriculumController(start_tier="easy")
# Promote to medium
for _ in range(10):
ctrl.after_episode(5.0)
assert ctrl.get_tier() == "medium"
# Collapse performance — avg 0.5, well below 4.0 * 0.5 = 2.0
for _ in range(10):
ctrl.after_episode(0.5)
assert ctrl.get_tier() == "easy"
def test_history_tracking():
ctrl = CurriculumController(start_tier="easy")
# 10 high rewards → promotion
for _ in range(10):
ctrl.after_episode(5.0)
# 10 more on medium
for _ in range(10):
ctrl.after_episode(4.0)
history = ctrl.get_history()
assert len(history) == 20
assert any(t == "easy" for _, t, _ in history)
assert any(t == "medium" for _, t, _ in history)
assert len(ctrl.promotion_log) >= 1
|