Example #1
0
 def test_funcdef(self):
     assert parse("function() x") == ast.Block(
         [ast.Function(formals=ast.FormalList(), body=ast.Symbol("x"))])
     assert parse("function(x) x") == ast.Block([
         ast.Function(formals=ast.FormalList([(ast.Symbol("x"), None)]),
                      body=ast.Symbol("x"))
     ])
     assert parse("function(x) { x + 3 }") == ast.Block([
         ast.Function(formals=ast.FormalList([(ast.Symbol("x"), None)]),
                      body=ast.Block([
                          ast.BinaryOperation(
                              "+", ast.Symbol("x"),
                              ast.Vector([ast.FloatValue(3.)]))
                      ]))
     ])
     assert parse("function(x, y=0) { x + y }") == ast.Block([
         ast.Function(formals=ast.FormalList([
             (ast.Symbol("x"), None),
             (ast.Symbol("y"), ast.Vector([ast.FloatValue(0.)]))
         ]),
                      body=ast.Block([
                          ast.BinaryOperation("+", ast.Symbol("x"),
                                              ast.Symbol("y"))
                      ]))
     ])
Example #2
0
 def test_assignment(self):
     assert parse("a = 123") == ast.Block(
         [ast.Assign(ast.Symbol("a"), ast.Vector([ast.FloatValue(123.)]))])
     assert parse("a <- 123") == ast.Block(
         [ast.Assign(ast.Symbol("a"), ast.Vector([ast.FloatValue(123.)]))])
     assert parse("123 -> a") == ast.Block(
         [ast.Assign(ast.Symbol("a"), ast.Vector([ast.FloatValue(123.)]))])
Example #3
0
 def test_parses_block(self):
     source = dedent("""\
         {
             "String literal"
         }
         """)
     assert parse(source) == ast.Block(
         [ast.Block([ast.Vector([ast.CharValue(u"String literal")])])])
Example #4
0
 def test_constant(self):
     assert parse("3") == ast.Block([ast.Vector([ast.FloatValue(3.)])])
     assert parse("3e3") == ast.Block([ast.Vector([ast.FloatValue(3000.)])])
     assert parse("5e-1") == ast.Block([ast.Vector([ast.FloatValue(0.5)])])
     assert parse("NA") == ast.Block(
         [ast.Vector([ast.BoolValue(False, na=True)])])
Example #5
0
 def test_unicode_symbol(self):
     assert parse(u"👺 = 5".encode("utf-8")) == ast.Block([
         ast.Assign(ast.Symbol(u"👺"), ast.Vector([ast.FloatValue(5.)]))
     ])
Example #6
0
 def test_unicode_string(self):
     source = u'"👺"'
     assert parse(source.encode("utf-8")) == ast.Block([
         # strip quotes in a narrow-python friendly way
         ast.Vector([ast.CharValue(source[1:-1])])
     ])
Example #7
0
 def test_simple_exprs(self):
     assert parse("(3)") == ast.Block([ast.Vector([ast.FloatValue(3.)])])
     assert parse("3;;\n3") == ast.Block([
         ast.Vector([ast.FloatValue(3.)]),
         ast.Vector([ast.FloatValue(3.)])
     ])
Example #8
0
 def expr_na(self, p):
     # type: (List[Token]) -> ast.Vector
     return ast.Vector([
         ast.BoolValue(False, na=True)
     ])
Example #9
0
 def expr_str_const(self, p):
     # type: (List[Token]) -> ast.Vector
     return ast.Vector([
         ast.CharValue(p[0].getstr().decode("utf-8"))
     ])
Example #10
0
 def expr_num_const(self, p):
     # type: (List[Token]) -> ast.Vector
     # TODO: support L, I extensions
     return ast.Vector([
         ast.FloatValue(float(p[0].getstr()))
     ])