def test_float_matcher_grade_neither_rtol_nor_atol(self): matcher = FloatMatcher(None, "", dict_to_struct( {"type": "float", "value": "20.1", })) self.assertEqual(matcher.grade(""), 0) self.assertEqual(matcher.grade("abcd"), 0) self.assertEqual(matcher.grade(20000), 1) self.assertEqual(matcher.grade(-2), 1)
def test_float_matcher_grade_inf(self): matcher = FloatMatcher(None, "", dict_to_struct( {"type": "float", "value": "inf", "rtol": 0.01 })) self.assertEqual(matcher.grade(float("nan")), 0) self.assertEqual(matcher.grade(float("inf")), 1) self.assertEqual(matcher.grade(float("20.5")), 0)
def test_float_matcher_value_error(self): expected_error_msg = "'value' does not provide a valid float literal" with self.assertRaises(ValidationError) as cm: FloatMatcher(None, "", dict_to_struct({ "type": "float", "value": "abcd" })) self.assertIn(expected_error_msg, str(cm.exception))
def test_float_matcher_grade_rtol(self): matcher = FloatMatcher(None, "", dict_to_struct( {"type": "float", "value": "100.1", "rtol": 0.01 })) self.assertEqual(matcher.grade(""), 0) self.assertEqual(matcher.grade(0), 0) self.assertEqual(matcher.grade("abcd"), 0) self.assertEqual(matcher.grade(100), 1) self.assertEqual(matcher.grade(100.9), 1) self.assertEqual(matcher.grade(101.11), 0) self.assertEqual(matcher.correct_answer_text(), str(100.1)) self.assertEqual(matcher.grade(float("nan")), 0) self.assertEqual(matcher.grade(float("inf")), 0)
def test_float_matcher_neither_atol_nor_rtol_present_warning(self): mock_vctx = mock.MagicMock() expected_warning = ("Float match should have either rtol or atol--" "otherwise it will match any number") FloatMatcher(mock_vctx, "some where", dict_to_struct( {"type": "float", "value": "1"})) self.assertIn(expected_warning, mock_vctx.add_warning.call_args[0])
def test_float_matcher_value_zero_rtol_zero_error(self): expected_error_msg = "'rtol' not allowed when 'value' is zero" with self.assertRaises(ValidationError) as cm: FloatMatcher(None, "", dict_to_struct( {"type": "float", "value": "0", "rtol": "0"})) self.assertIn(expected_error_msg, str(cm.exception))
def test_float_matcher_value_zero_atol_not_present_warning(self): mock_vctx = mock.MagicMock() expected_warning = ("Float match for 'value' zero should have " "atol--otherwise it will match any number") FloatMatcher(mock_vctx, "some where", dict_to_struct( {"type": "float", "value": "0"})) self.assertIn(expected_warning, mock_vctx.add_warning.call_args[0])
def test_float_matcher_grade_atol(self): matcher = FloatMatcher(None, "", dict_to_struct( {"type": "float", "value": "1", "atol": 0.01 })) self.assertEqual(matcher.grade(""), 0) self.assertEqual(matcher.grade(0), 0) self.assertEqual(matcher.grade("abcd"), 0) self.assertEqual(matcher.grade(1), 1) self.assertEqual(matcher.grade(1.005), 1) self.assertEqual(matcher.grade(1.02), 0) self.assertEqual(matcher.grade(float("nan")), 0) self.assertEqual(matcher.grade(float("inf")), 0)
def test_float_matcher_grade_neither_rtol_nor_atol(self): matcher = FloatMatcher( None, "", dict_to_struct({ "type": "float", "value": "20.1", })) self.assertEqual(matcher.grade(""), 0) self.assertEqual(matcher.grade("abcd"), 0) self.assertEqual(matcher.grade(20000), 1) self.assertEqual(matcher.grade(-2), 1)
def test_float_matcher_validate(self): matcher = FloatMatcher(None, "", dict_to_struct( {"type": "float", "value": "1", "atol": 0.01 })) matcher.validate(1.1) expected_error_msg = "TypeError: can\'t convert expression to float" with self.assertRaises(forms.ValidationError) as cm: matcher.validate("abcd") self.assertIn(expected_error_msg, str(cm.exception))
def test_float_matcher_struct_validation_error(self): # make sure validate_struct is called expected_error_msg = "not a key-value map" with self.assertRaises(ValidationError) as cm: FloatMatcher(None, "", "abcd") self.assertIn(expected_error_msg, str(cm.exception))