File size: 3,776 Bytes
398d45e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
"""
Simulates EXACTLY what the Scaler validator does:
1. Import grader classes from openenv.yaml paths
2. Instantiate each class
3. Call .grade(env) or .grade(None)
4. Check score is strictly in (0.01, 0.99)

Run: python test_validator_simulation.py
"""
import sys
import os

# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

def test_grader_classes():
    print("=" * 60)
    print("VALIDATOR SIMULATION: Testing grader classes")
    print("=" * 60)
    
    from server.graders.grader_api import (
        Task1Grader, Task2Grader, Task3Grader,
        Task4Grader, Task5Grader, Task6Grader, Task7Grader,
    )
    
    graders = {
        "task1_json": Task1Grader(),
        "task2_yaml": Task2Grader(),
        "task3_dockerfile": Task3Grader(),
        "task4_compose": Task4Grader(),
        "task5_k8s": Task5Grader(),
        "task6_github_actions": Task6Grader(),
        "task7_nginx": Task7Grader(),
    }
    
    all_pass = True
    
    for task_id, grader in graders.items():
        # Test 1: .grade(None) β€” validator may call with None
        score_none = grader.grade(None)
        ok_none = 0.0 < score_none < 1.0
        
        # Test 2: .grade(env) β€” validator passes environment
        from server.config_debug_environment import ConfigDebugEnvironment
        env = ConfigDebugEnvironment()
        env.reset(task_id=task_id)
        score_env = grader.grade(env)
        ok_env = 0.0 < score_env < 1.0
        
        # Test 3: .grade(ground_truth_string) β€” direct string
        from server.tasks.task_registry import get_task
        task = get_task(task_id)
        score_gt = grader.grade(task.ground_truth)
        ok_gt = 0.0 < score_gt < 1.0
        
        status = "PASS" if (ok_none and ok_env and ok_gt) else "FAIL"
        if not (ok_none and ok_env and ok_gt):
            all_pass = False
        
        print(f"\n[{status}] {task_id}")
        print(f"  .grade(None)         = {score_none:.4f}  {'OK' if ok_none else 'OUT OF RANGE!'}")
        print(f"  .grade(env)          = {score_env:.4f}  {'OK' if ok_env else 'OUT OF RANGE!'}")
        print(f"  .grade(ground_truth) = {score_gt:.4f}  {'OK' if ok_gt else 'OUT OF RANGE!'}")
        
        # Strict check
        if score_none == 0.0 or score_none == 1.0:
            print(f"  FATAL: score is exactly {score_none} β€” validator rejects 0.0 and 1.0!")
            all_pass = False
        if score_env == 0.0 or score_env == 1.0:
            print(f"  FATAL: score is exactly {score_env} β€” validator rejects 0.0 and 1.0!")
            all_pass = False
        if score_gt == 0.0 or score_gt == 1.0:
            print(f"  FATAL: score is exactly {score_gt} β€” validator rejects 0.0 and 1.0!")
            all_pass = False
    
    print("\n" + "=" * 60)
    if all_pass:
        print("ALL TASKS PASSED β€” safe to push and submit!")
    else:
        print("SOME TASKS FAILED β€” fix before pushing!")
    print("=" * 60)


def test_docker_verification():
    """The exact Docker test command from the Meta AI email."""
    print("\n\nDOCKER VERIFICATION EQUIVALENT:")
    print("-" * 40)
    
    from server.graders.grader_api import (
        Task1Grader, Task2Grader, Task3Grader,
        Task4Grader, Task5Grader, Task6Grader, Task7Grader,
    )
    
    for name, cls in [
        ("Task1Grader", Task1Grader),
        ("Task2Grader", Task2Grader),
        ("Task3Grader", Task3Grader),
        ("Task4Grader", Task4Grader),
        ("Task5Grader", Task5Grader),
        ("Task6Grader", Task6Grader),
        ("Task7Grader", Task7Grader),
    ]:
        score = cls().grade(None)
        print(f"{name}().grade(None) = {score}")


if __name__ == "__main__":
    test_grader_classes()
    test_docker_verification()