File size: 1,372 Bytes
014b14c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Smoke #2 (boxed parser) + #4 (answer grader)."""
from mathcompose.common.math_grade import (
    extract_boxed_int, extract_last_boxed, grade_answer, normalize_problem_text,
)


def test_boxed_int():
    assert extract_boxed_int(r"blah \boxed{-1}") == -1
    assert extract_boxed_int(r"...\boxed{3}") == 3
    assert extract_boxed_int(r"Verdict... \boxed{ 12 }") == 12
    assert extract_boxed_int(r"\boxed{\text{-1}}") == -1
    assert extract_boxed_int("no box; first error at step 5") == 5
    assert extract_boxed_int("nothing here") is None


def test_last_boxed_nested():
    assert extract_last_boxed(r"\boxed{\frac{1}{2}}") == r"\frac{1}{2}"
    assert extract_last_boxed(r"\boxed{1} then \boxed{2}") == "2"


def test_grade_answer_equivalence():
    assert grade_answer("42", "42")
    assert grade_answer(r"\frac{1}{2}", "0.5")
    assert grade_answer(r"\frac{1}{2}", r"\frac{2}{4}")
    assert grade_answer(r"\sqrt{2}", "1.41421356")
    assert grade_answer("1,000", "1000")
    assert grade_answer("x+1", "1+x")
    assert grade_answer(r"2\pi", "6.283185307")


def test_grade_answer_rejects():
    assert not grade_answer("3", "4")
    assert not grade_answer(r"\frac{1}{3}", "0.33")
    assert not grade_answer(None, "4")


def test_problem_normalization():
    assert normalize_problem_text("What is $1+1$?") == normalize_problem_text("what is 1 + 1 ?")