Example #1
0
 def setUp(self):
     self.parser = InputParser()
Example #2
0
class InputParserTests(unittest.TestCase):
    def setUp(self):
        self.parser = InputParser()

    def test_parse_function_triangular(self):
        result = self.parser.parse_function('triangulo: (1,2) (3,4) (5,6)')
        self.assertIsInstance(result, TriangularFunction)
        self.assertEqual(result.a, Point(1, 2))
        self.assertEqual(result.b, Point(3, 4))
        self.assertEqual(result.c, Point(5, 6))

    def test_parse_function_trapezoidal(self):
        result = self.parser.parse_function(
            'trapecio: (1,2) (3,4) (5,6) (7,8)')
        self.assertIsInstance(result, TrapezoidalFunction)
        self.assertEqual(result.a, Point(1, 2))
        self.assertEqual(result.b, Point(3, 4))
        self.assertEqual(result.c, Point(5, 6))
        self.assertEqual(result.d, Point(7, 8))

    def test_parse_input_vars(self):
        result = self.parser.parse_input_vars(
            """
            input: (Calidad) (Buena) (triangulo: (1,2) (3,4) (5,6))
            input: (Calidad) (Regular) (trapecio: (1,2) (3,4) (5,6) (7,8))
            input: (Calidad) (Mala) (trapecio: (1,2) (3,4) (5,6) (7,8))

            input: (Comida) (Buena) (triangulo: (1,2) (3,4) (5,6))
            input: (Comida) (Regular) (trapecio: (1,2) (3,4) (5,6) (7,8))
            input: (Comida) (Mala) (trapecio: (1,2) (3,4) (5,6) (7,8))
            """
        )
        self.assertIsInstance(result, VariableCollection)
        self.assertEqual(len(result), 2)

        calidad = result[0]

        self.assertEqual(len(calidad.values), 3)
        self.assertEqual(calidad.values[0].value, 'Buena')
        self.assertIsInstance(calidad.values[0].function, TriangularFunction)
        self.assertEqual(calidad.values[1].value, 'Regular')
        self.assertIsInstance(calidad.values[1].function, TrapezoidalFunction)
        self.assertEqual(calidad.values[2].value, 'Mala')
        self.assertIsInstance(calidad.values[2].function, TrapezoidalFunction)

        comida = result[1]
        self.assertEqual(len(comida.values), 3)
        self.assertEqual(comida.values[0].value, 'Buena')
        self.assertIsInstance(comida.values[0].function, TriangularFunction)
        self.assertEqual(comida.values[1].value, 'Regular')
        self.assertIsInstance(comida.values[1].function, TrapezoidalFunction)
        self.assertEqual(comida.values[2].value, 'Mala')
        self.assertIsInstance(comida.values[2].function, TrapezoidalFunction)

    def test_parse_output_var(self):
        calidad = self.parser.parse_output_var(
            """
            output: (Calidad) (Buena) (triangulo: (1,2) (3,4) (5,6))
            output: (Calidad) (Regular) (trapecio: (1,2) (3,4) (5,6) (7,8))
            """
        )
        self.assertIsInstance(calidad, VariableDefinition)

        self.assertEqual(len(calidad.values), 2)
        self.assertEqual(calidad.values[0].value, 'Buena')
        self.assertIsInstance(calidad.values[0].function, TriangularFunction)
        self.assertEqual(calidad.values[1].value, 'Regular')
        self.assertIsInstance(calidad.values[1].function, TrapezoidalFunction)

    def test_parse_rules(self):
        text = """
        output: (Calidad) (Buena) (triangulo: (1,2) (3,4) (5,6))
        output: (Calidad) (Regular) (trapecio: (1,2) (3,4) (5,6) (7,8))

        rule: VarA = ValueA => Buena
        rule: not(VarA = ValueA) => Buena
        rule: VarA = ValueA and VarB = ValueB => Regular
        rule: VarA = ValueA or VarB = ValueB => Regular
        rule: (VarA = ValueA or VarB = ValueB) and ValueB = VarA => Buena
        rule: not(VarA = ValueA or VarB = ValueB) => Regular
        """
        output_var_def = self.parser.parse_output_var(text)

        rules = self.parser.parse_rules(text, output_var_def)
        self.assertEqual(len(rules), 6)

        self.assertEqual(rules[0].orig_head, 'VarA = ValueA')
        # Asegurarnos de que se parsea la regla
        self.assertEqual(rules[0].head,
            'variables.get_var("VarA", "ValueA")')
        self.assertEqual(rules[0].output_var.definition, output_var_def)
        self.assertEqual(rules[0].output_var.value.value, 'Buena')

        #...

        self.assertEqual(rules[5].output_var.value.value, 'Regular')

    def test_parse_input_values(self):
        text = """
            ini: Calidad = 13
            ini: Temperatura = 10
            ini: Propina = 16.3
            """
        d = self.parser.parse_input_values(text)
        self.assertEqual(len(d), 3)
        self.assertEqual(d['Calidad'], 13)
        self.assertEqual(d['Temperatura'], 10)
        self.assertEqual(d['Propina'], 16.3)