Commit db261dc1 by Peter Baratta

Add docstrings; test divsion by zero at Response level

parent 43395b70
...@@ -349,10 +349,13 @@ class OptionResponseTest(ResponseTest): ...@@ -349,10 +349,13 @@ class OptionResponseTest(ResponseTest):
class FormulaResponseTest(ResponseTest): class FormulaResponseTest(ResponseTest):
""" Test the FormulaResponse class """
from response_xml_factory import FormulaResponseXMLFactory from response_xml_factory import FormulaResponseXMLFactory
xml_factory_class = FormulaResponseXMLFactory xml_factory_class = FormulaResponseXMLFactory
def test_grade(self): def test_grade(self):
""" Test basic functionality of FormulaResponse
Specifically, if it can understand equivalence of formulae"""
# Sample variables x and y in the range [-10, 10] # Sample variables x and y in the range [-10, 10]
sample_dict = {'x': (-10, 10), 'y': (-10, 10)} sample_dict = {'x': (-10, 10), 'y': (-10, 10)}
...@@ -373,6 +376,7 @@ class FormulaResponseTest(ResponseTest): ...@@ -373,6 +376,7 @@ class FormulaResponseTest(ResponseTest):
self.assert_grade(problem, input_formula, "incorrect") self.assert_grade(problem, input_formula, "incorrect")
def test_hint(self): def test_hint(self):
""" Test the hint-giving functionality of FormulaResponse"""
# Sample variables x and y in the range [-10, 10] # Sample variables x and y in the range [-10, 10]
sample_dict = {'x': (-10, 10), 'y': (-10, 10)} sample_dict = {'x': (-10, 10), 'y': (-10, 10)}
...@@ -401,6 +405,8 @@ class FormulaResponseTest(ResponseTest): ...@@ -401,6 +405,8 @@ class FormulaResponseTest(ResponseTest):
'Try including the variable x') 'Try including the variable x')
def test_script(self): def test_script(self):
""" Test if python script can be used to generate answers"""
# Calculate the answer using a script # Calculate the answer using a script
script = "calculated_ans = 'x+x'" script = "calculated_ans = 'x+x'"
...@@ -496,8 +502,8 @@ class FormulaResponseTest(ResponseTest): ...@@ -496,8 +502,8 @@ class FormulaResponseTest(ResponseTest):
msg="Failed on function {0}; the given, incorrect answer was {1} but graded 'correct'".format(func, incorrect)) msg="Failed on function {0}; the given, incorrect answer was {1} but graded 'correct'".format(func, incorrect))
def test_grade_infinity(self): def test_grade_infinity(self):
# This resolves a bug where a problem with relative tolerance would """This resolves a bug where a problem with relative tolerance would
# pass with any arbitrarily large student answer. pass with any arbitrarily large student answer"""
sample_dict = {'x': (1, 2)} sample_dict = {'x': (1, 2)}
...@@ -514,8 +520,8 @@ class FormulaResponseTest(ResponseTest): ...@@ -514,8 +520,8 @@ class FormulaResponseTest(ResponseTest):
self.assert_grade(problem, input_formula, "incorrect") self.assert_grade(problem, input_formula, "incorrect")
def test_grade_nan(self): def test_grade_nan(self):
# Attempt to produce a value which causes the student's answer to be """Attempt to produce a value which causes the student's answer to be
# evaluated to nan. See if this is resolved correctly. evaluated to nan. See if this is resolved correctly."""
sample_dict = {'x': (1, 2)} sample_dict = {'x': (1, 2)}
...@@ -532,6 +538,15 @@ class FormulaResponseTest(ResponseTest): ...@@ -532,6 +538,15 @@ class FormulaResponseTest(ResponseTest):
input_formula = "x + 0*1e999" input_formula = "x + 0*1e999"
self.assert_grade(problem, input_formula, "incorrect") self.assert_grade(problem, input_formula, "incorrect")
def test_raises_zero_division_err(self):
"""See if division by zero is handled correctly"""
sample_dict = {'x': (1, 2)}
problem = self.build_problem(sample_dict=sample_dict,
num_samples=10,
tolerance="1%",
answer="x") # Answer doesn't matter
input_dict = {'1_2_1': '1/0'}
self.assertRaises(StudentInputError, problem.grade_answers, input_dict)
class StringResponseTest(ResponseTest): class StringResponseTest(ResponseTest):
from response_xml_factory import StringResponseXMLFactory from response_xml_factory import StringResponseXMLFactory
...@@ -898,6 +913,13 @@ class NumericalResponseTest(ResponseTest): ...@@ -898,6 +913,13 @@ class NumericalResponseTest(ResponseTest):
incorrect_responses = ["", "3.9", "4.1", "0", "5.01e1"] incorrect_responses = ["", "3.9", "4.1", "0", "5.01e1"]
self.assert_multiple_grade(problem, correct_responses, incorrect_responses) self.assert_multiple_grade(problem, correct_responses, incorrect_responses)
def test_raises_zero_division_err(self):
"""See if division by zero is handled correctly"""
problem = self.build_problem(question_text="What 5 * 10?",
explanation="The answer is 50",
answer="5e+1") # Answer doesn't matter
input_dict = {'1_2_1': '1/0'}
self.assertRaises(StudentInputError, problem.grade_answers, input_dict)
class CustomResponseTest(ResponseTest): class CustomResponseTest(ResponseTest):
from response_xml_factory import CustomResponseXMLFactory from response_xml_factory import CustomResponseXMLFactory
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment