File size: 1,881 Bytes
eb1ebe6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Tests for task bank integrity."""

import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))

from task_bank import (
    ALL_TASKS,
    ALGORITHMS,
    EASY_TASKS,
    HARD_TASKS,
    MATH_TOPICS,
    MEDIUM_TASKS,
    ML_CONCEPTS,
    STATISTICS_TASKS,
    Task,
)


def test_task_counts():
    assert len(ML_CONCEPTS) >= 5, f"ML_CONCEPTS has {len(ML_CONCEPTS)} (need >=5)"
    assert len(MATH_TOPICS) >= 5, f"MATH_TOPICS has {len(MATH_TOPICS)} (need >=5)"
    assert len(ALGORITHMS) >= 3, f"ALGORITHMS has {len(ALGORITHMS)} (need >=3)"
    assert len(STATISTICS_TASKS) >= 2, f"STATISTICS_TASKS has {len(STATISTICS_TASKS)} (need >=2)"
    assert len(ALL_TASKS) == len(ML_CONCEPTS) + len(MATH_TOPICS) + len(ALGORITHMS) + len(STATISTICS_TASKS)


def test_difficulty_partition():
    assert len(EASY_TASKS) + len(MEDIUM_TASKS) + len(HARD_TASKS) == len(ALL_TASKS)
    assert len(EASY_TASKS) > 0
    assert len(MEDIUM_TASKS) > 0
    assert len(HARD_TASKS) > 0


def test_task_fields():
    for t in ALL_TASKS:
        assert isinstance(t, Task)
        assert t.topic, f"empty topic: {t}"
        assert t.content, f"empty content: {t}"
        assert t.tier in ("beginner", "intermediate", "advanced"), f"bad tier: {t.tier}"
        assert t.keywords, f"empty keywords: {t.topic}"
        assert t.preferred_format in ("marimo", "manim", None), f"bad format: {t.preferred_format}"
        assert t.difficulty in ("easy", "medium", "hard"), f"bad difficulty: {t.difficulty}"


def test_both_formats_present():
    formats = {t.preferred_format for t in ALL_TASKS}
    assert "marimo" in formats, "no marimo tasks"
    assert "manim" in formats, "no manim tasks"


if __name__ == "__main__":
    test_task_counts()
    test_difficulty_partition()
    test_task_fields()
    test_both_formats_present()
    print("PASS: test_task_bank (4/4)")