Beispiel #1
0
    def test_exponent(self):
        self.assertEqual(parse("2 ** 2"), (int, 4))
        self.assertEqual(parse("2 ** 3"), (int, 8))
        self.assertEqual(parse("2 ** 0.5"), (float, 2 ** 0.5))

        self.assertEqual(parse("2 ** 2 ** 3"), (int, 64))
        self.assertEqual(parse("2 ** (2 ** 3)"), (int, 256))
Beispiel #2
0
    def test_exponent(self):
        self.assertEqual(parse('2 ** 2'), (int, 4))
        self.assertEqual(parse('2 ** 3'), (int, 8))
        self.assertEqual(parse('2 ** 0.5'), (float, 2**0.5))

        self.assertEqual(parse('2 ** 2 ** 3'), (int, 64))
        self.assertEqual(parse('2 ** (2 ** 3)'), (int, 256))
Beispiel #3
0
    def test_range_expression(self):
        self.assertEqual(parse('{0:10}'), (Range, Range(0, 10)))
        self.assertEqual(parse('{-5:5}'), (Range, Range(-5, 5)))
        self.assertEqual(parse('{-10:-1}'), (Range, Range(-10, -1)))

        self.assertRaises(TypeError, parse, '{1:0}')
        self.assertRaises(TypeError, parse, '{1:1}')
        self.assertRaises(SyntaxError, parse, '{1:{1:2}}')
Beispiel #4
0
    def test_range_expression(self):
        self.assertEqual(parse("{0:10}"), (Range, Range(0, 10)))
        self.assertEqual(parse("{-5:5}"), (Range, Range(-5, 5)))
        self.assertEqual(parse("{-10:-1}"), (Range, Range(-10, -1)))

        self.assertRaises(TypeError, parse, "{1:0}")
        self.assertRaises(TypeError, parse, "{1:1}")
        self.assertRaises(SyntaxError, parse, "{1:{1:2}}")
Beispiel #5
0
    def test_string_predicate(self):
        self.assertEqual(parse('"a" == "a"'), (bool, True))
        self.assertEqual(parse('"a" == "b"'), (bool, False))
        self.assertEqual(parse('"a" != "b"'), (bool, True))
        self.assertEqual(parse('"a" != "a"'), (bool, False))
        self.assertEqual(parse('"あ" == "あ"'), (bool, True))

        self.assertEqual(parse('x == "a" for x = "a"'), (bool, True))
        self.assertEqual(parse('"a" == x for x = "a"'), (bool, True))
        self.assertEqual(parse('x == x for x = "a"'), (bool, True))
Beispiel #6
0
    def test_string_predicate(self):
        self.assertEqual(parse('"a" == "a"'), (bool, True))
        self.assertEqual(parse('"a" == "b"'), (bool, False))
        self.assertEqual(parse('"a" != "b"'), (bool, True))
        self.assertEqual(parse('"a" != "a"'), (bool, False))
        self.assertEqual(parse('"あ" == "あ"'), (bool, True))

        self.assertEqual(parse('x == "a" for x = "a"'), (bool, True))
        self.assertEqual(parse('"a" == x for x = "a"'), (bool, True))
        self.assertEqual(parse('x == x for x = "a"'), (bool, True))
Beispiel #7
0
    def test_enumeration_expression(self):
        self.assertEqual(parse("{}"), (Enumeration, Enumeration([])))
        self.assertEqual(parse("{1}"), (Enumeration, Enumeration([1])))
        self.assertEqual(parse("{1,2}"), (Enumeration, Enumeration([1, 2])))

        self.assertEqual(parse("{x} for x = 1"), (Enumeration, Enumeration([1])))
        self.assertEqual(parse("{1,x} for x = 1"), (Enumeration, Enumeration([1])))
        self.assertEqual(parse("{x+1} for x = 1"), (Enumeration, Enumeration([2])))
        self.assertEqual(parse("{{}}"), (Enumeration, Enumeration([Enumeration([])])))
Beispiel #8
0
    def test_elementary_arithmetic(self):
        self.assertEqual(parse('1 + 1'), (int, 2))
        self.assertEqual(parse('1 + (1 + 2)'), (int, 4))
        self.assertEqual(parse('1 - 1 - 3'), (int, -3))
        self.assertEqual(parse('1 - (1 - 3)'), (int, 3))

        self.assertEqual(parse('1 + 1 * 2'), (int, 3))
        self.assertEqual(parse('(1 + 1) * 2'), (int, 4))
        self.assertEqual(parse('(1 + 1) / 2'), (float, 1.0))
        self.assertRaises(ZeroDivisionError, parse, '(1 + 1) / 0')
Beispiel #9
0
    def test_elementary_arithmetic(self):
        self.assertEqual(parse("1 + 1"), (int, 2))
        self.assertEqual(parse("1 + (1 + 2)"), (int, 4))
        self.assertEqual(parse("1 - 1 - 3"), (int, -3))
        self.assertEqual(parse("1 - (1 - 3)"), (int, 3))

        self.assertEqual(parse("1 + 1 * 2"), (int, 3))
        self.assertEqual(parse("(1 + 1) * 2"), (int, 4))
        self.assertEqual(parse("(1 + 1) / 2"), (float, 1.0))
        self.assertRaises(ZeroDivisionError, parse, "(1 + 1) / 0")
Beispiel #10
0
 def parse(self, line):
     try:
         t,v = parse(line)
         print('\033[93m[%s]\033[0m %s' % (t.__name__, v))
         return 0
     except NoParseError as e:
         print('\033[91mSyntax error: %s\033[0m' % e)
     except EvaluationError as e:
         print("\033[91mError while evaluating '%s': %s\033[0m" % (line, e))
     except TypeError as e:
         print('\033[91mType inconsistency: %s\033[0m' % e)
     except ZeroDivisionError as e:
         print('\033[91mIllegal operation: Division by zero\033[0m')
     return -1
Beispiel #11
0
    def test_enumeration_expression(self):
        self.assertEqual(parse('{}'), (Enumeration, Enumeration([])))
        self.assertEqual(parse('{1}'), (Enumeration, Enumeration([1])))
        self.assertEqual(parse('{1,2}'), (Enumeration, Enumeration([1, 2])))

        self.assertEqual(parse('{x} for x = 1'),
                         (Enumeration, Enumeration([1])))
        self.assertEqual(parse('{1,x} for x = 1'),
                         (Enumeration, Enumeration([1])))
        self.assertEqual(parse('{x+1} for x = 1'),
                         (Enumeration, Enumeration([2])))
        self.assertEqual(parse('{{}}'),
                         (Enumeration, Enumeration([Enumeration([])])))
Beispiel #12
0
    def test_variable_bounding(self):
        self.assertEqual(parse('x for x = 1'), (int, 1))
        self.assertEqual(parse('x for x = 1.0'), (float, 1.0))
        self.assertEqual(parse('x + x for x = -1.0'), (float, -2.0))

        self.assertEqual(parse('x for x = y for y = 1'), (int, 1))
        self.assertEqual(parse('x for x = x for x = 1'), (int, 1))
        self.assertEqual(parse('x for x =(x for x = 1)'), (int, 1))

        self.assertRaises(EvaluationError, parse, 'x')
        self.assertRaises(EvaluationError, parse, 'x + y for x = 1')
Beispiel #13
0
    def test_variable_bounding(self):
        self.assertEqual(parse("x for x = 1"), (int, 1))
        self.assertEqual(parse("x for x = 1.0"), (float, 1.0))
        self.assertEqual(parse("x + x for x = -1.0"), (float, -2.0))

        self.assertEqual(parse("x for x = y for y = 1"), (int, 1))
        self.assertEqual(parse("x for x = x for x = 1"), (int, 1))
        self.assertEqual(parse("x for x =(x for x = 1)"), (int, 1))

        self.assertRaises(EvaluationError, parse, "x")
        self.assertRaises(EvaluationError, parse, "x + y for x = 1")
Beispiel #14
0
 def test_set_expression(self):
     t, s = parse("{x for x in {}}")
     self.assertEqual(t, Set)
Beispiel #15
0
 def test_float(self):
     self.assertEqual(parse('1.0'), (float, 1.0))
     self.assertEqual(parse('-1.0'), (float, -1.0))
     self.assertEqual(parse('0.0'), (float, 0.0))
     self.assertEqual(parse('-0.0'), (float, 0.0))
Beispiel #16
0
 def test_int(self):
     self.assertEqual(parse('1'), (int, 1))
     self.assertEqual(parse('-1'), (int, -1))
     self.assertEqual(parse('0'), (int, 0))
     self.assertEqual(parse('-0'), (int, 0))
Beispiel #17
0
    def test_anonymous_function(self):
        self.assertEqual(parse('[:1]()'), (int, 1))
        self.assertEqual(parse('[x: x](1)'), (int, 1))
        self.assertEqual(parse('[x: x + 1](1)'), (int, 2))
        self.assertEqual(parse('[x, y: x + y](1, 2)'), (int, 3))
        self.assertEqual(parse('[x: x + 1 if x < 5 else x](4)'), (int, 5))
        self.assertEqual(parse('[x: x + 1 if x < 5 else x](5)'), (int, 5))

        self.assertEqual(parse('g(1) for g=[x: x]'), (int, 1))
        self.assertEqual(parse('g(y) for g=[x: x], y=2'), (int, 2))
        self.assertEqual(parse('g(y,z) for g=[a, b: a + b], y=2, z=3'),
                         (int, 5))

        self.assertEqual(parse('g() for g=[:1]'), (int, 1))
        self.assertEqual(parse('g(1) for g=[x:log(x)]'), (float, 0.0))

        # fixed point
        self.assertEqual(
            parse('fp([x:x+1 if x < 10 else 10], 4)' +
                  'for fp=[f,x: x if f(x)==x else fp(f, f(x))]'), (int, 10))

        self.assertRaises(EvaluationError, parse, 'g(x)')
        self.assertRaises(TypeError, parse, '[x, y: x](1)')
Beispiel #18
0
 def test_function_application(self):
     self.assertEqual(parse('log(8)'), (float, math.log(8)))
     self.assertEqual(parse('log(8,2)'), (float, math.log(8, 2)))
Beispiel #19
0
 def test_set_expression(self):
     t, s = parse('{x for x in {}}')
     self.assertEqual(t, Set)
Beispiel #20
0
    def test_numeric_predicate(self):
        self.assertEqual(parse("1 == 1"), (bool, True))
        self.assertEqual(parse("1 == 2"), (bool, False))
        self.assertEqual(parse("1 != 2"), (bool, True))
        self.assertEqual(parse("1 != 1"), (bool, False))
        self.assertEqual(parse("1 >= 1"), (bool, True))
        self.assertEqual(parse("1 >= 2"), (bool, False))
        self.assertEqual(parse("2 > 1"), (bool, True))
        self.assertEqual(parse("1 > 1"), (bool, False))
        self.assertEqual(parse("1 <= 1"), (bool, True))
        self.assertEqual(parse("2 <= 1"), (bool, False))
        self.assertEqual(parse("1 < 2"), (bool, True))
        self.assertEqual(parse("1 < 1"), (bool, False))

        self.assertEqual(parse("x == 1 for x = 1"), (bool, True))
        self.assertEqual(parse("1 == x for x = 1"), (bool, True))
        self.assertEqual(parse("x == x for x = 1"), (bool, True))
Beispiel #21
0
    def test_anonymous_function(self):
        self.assertEqual(parse("[:1]()"), (int, 1))
        self.assertEqual(parse("[x: x](1)"), (int, 1))
        self.assertEqual(parse("[x: x + 1](1)"), (int, 2))
        self.assertEqual(parse("[x, y: x + y](1, 2)"), (int, 3))
        self.assertEqual(parse("[x: x + 1 if x < 5 else x](4)"), (int, 5))
        self.assertEqual(parse("[x: x + 1 if x < 5 else x](5)"), (int, 5))

        self.assertEqual(parse("g(1) for g=[x: x]"), (int, 1))
        self.assertEqual(parse("g(y) for g=[x: x], y=2"), (int, 2))
        self.assertEqual(parse("g(y,z) for g=[a, b: a + b], y=2, z=3"), (int, 5))

        self.assertEqual(parse("g() for g=[:1]"), (int, 1))
        self.assertEqual(parse("g(1) for g=[x:log(x)]"), (float, 0.0))

        # fixed point
        self.assertEqual(
            parse("fp([x:x+1 if x < 10 else 10], 4)" + "for fp=[f,x: x if f(x)==x else fp(f, f(x))]"), (int, 10)
        )

        self.assertRaises(EvaluationError, parse, "g(x)")
        self.assertRaises(TypeError, parse, "[x, y: x](1)")
Beispiel #22
0
 def test_int(self):
     self.assertEqual(parse("1"), (int, 1))
     self.assertEqual(parse("-1"), (int, -1))
     self.assertEqual(parse("0"), (int, 0))
     self.assertEqual(parse("-0"), (int, 0))
Beispiel #23
0
    def test_set_predicate(self):
        self.assertEqual(parse("{2,1} == {1,2}"), (bool, True))
        self.assertEqual(parse("{1,2} == {2,3}"), (bool, False))
        self.assertEqual(parse("{1,2} != {2,3}"), (bool, True))
        self.assertEqual(parse("{2,1} != {1,2}"), (bool, False))

        self.assertEqual(parse("{1:2} == {1:2}"), (bool, True))
        self.assertEqual(parse("{1:2} == {2:3}"), (bool, False))
        self.assertEqual(parse("{1:2} != {2:3}"), (bool, True))
        self.assertEqual(parse("{1:2} != {1:2}"), (bool, False))

        self.assertEqual(parse("{x for x in {1}} == {x for x in {1}}"), (bool, True))
        self.assertEqual(parse("{x for x in {1}} == {x for x in {2}}"), (bool, False))
        self.assertEqual(parse("{x for x in {1}} != {x for x in {2}}"), (bool, True))
        self.assertEqual(parse("{x for x in {1}} != {x for x in {1}}"), (bool, False))

        self.assertEqual(parse("x == {1} for x = {1}"), (bool, True))
        self.assertEqual(parse("{1} == x for x = {1}"), (bool, True))
        self.assertEqual(parse("x == x for x = {1}"), (bool, True))
Beispiel #24
0
 def test_float(self):
     self.assertEqual(parse("1.0"), (float, 1.0))
     self.assertEqual(parse("-1.0"), (float, -1.0))
     self.assertEqual(parse("0.0"), (float, 0.0))
     self.assertEqual(parse("-0.0"), (float, 0.0))
Beispiel #25
0
 def test_boolean_constant(self):
     self.assertEqual(parse('True'), (bool, True))
     self.assertEqual(parse('False'), (bool, False))
Beispiel #26
0
 def test_function_application(self):
     self.assertEqual(parse("log(8)"), (float, math.log(8)))
     self.assertEqual(parse("log(8,2)"), (float, math.log(8, 2)))
Beispiel #27
0
    def test_numeric_predicate(self):
        self.assertEqual(parse('1 == 1'), (bool, True))
        self.assertEqual(parse('1 == 2'), (bool, False))
        self.assertEqual(parse('1 != 2'), (bool, True))
        self.assertEqual(parse('1 != 1'), (bool, False))
        self.assertEqual(parse('1 >= 1'), (bool, True))
        self.assertEqual(parse('1 >= 2'), (bool, False))
        self.assertEqual(parse('2 > 1'), (bool, True))
        self.assertEqual(parse('1 > 1'), (bool, False))
        self.assertEqual(parse('1 <= 1'), (bool, True))
        self.assertEqual(parse('2 <= 1'), (bool, False))
        self.assertEqual(parse('1 < 2'), (bool, True))
        self.assertEqual(parse('1 < 1'), (bool, False))

        self.assertEqual(parse('x == 1 for x = 1'), (bool, True))
        self.assertEqual(parse('1 == x for x = 1'), (bool, True))
        self.assertEqual(parse('x == x for x = 1'), (bool, True))
Beispiel #28
0
 def test_boolean_constant(self):
     self.assertEqual(parse("True"), (bool, True))
     self.assertEqual(parse("False"), (bool, False))
Beispiel #29
0
    def test_set_predicate(self):
        self.assertEqual(parse('{2,1} == {1,2}'), (bool, True))
        self.assertEqual(parse('{1,2} == {2,3}'), (bool, False))
        self.assertEqual(parse('{1,2} != {2,3}'), (bool, True))
        self.assertEqual(parse('{2,1} != {1,2}'), (bool, False))

        self.assertEqual(parse('{1:2} == {1:2}'), (bool, True))
        self.assertEqual(parse('{1:2} == {2:3}'), (bool, False))
        self.assertEqual(parse('{1:2} != {2:3}'), (bool, True))
        self.assertEqual(parse('{1:2} != {1:2}'), (bool, False))

        self.assertEqual(parse('{x for x in {1}} == {x for x in {1}}'),
                         (bool, True))
        self.assertEqual(parse('{x for x in {1}} == {x for x in {2}}'),
                         (bool, False))
        self.assertEqual(parse('{x for x in {1}} != {x for x in {2}}'),
                         (bool, True))
        self.assertEqual(parse('{x for x in {1}} != {x for x in {1}}'),
                         (bool, False))

        self.assertEqual(parse('x == {1} for x = {1}'), (bool, True))
        self.assertEqual(parse('{1} == x for x = {1}'), (bool, True))
        self.assertEqual(parse('x == x for x = {1}'), (bool, True))
Beispiel #30
0
def _yaffel(expr):
    try:
        return parser.parse(expr)
    except Exception as e:
        raise YaffelEvalError(expression=expr, message=str(e))