예제 #1
0
파일: test_text.py 프로젝트: inducer/relate
    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)
예제 #2
0
    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)
예제 #3
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))
예제 #4
0
    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)
예제 #5
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])
예제 #6
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))
예제 #7
0
    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])
예제 #8
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)
예제 #9
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)
예제 #10
0
    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))
예제 #11
0
 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))