def test_Sum_of_numbers_is_parsed_as_expression(): assert ( parsed("32+44") == [ OperationTree("+", NumberTree("32"), NumberTree("44")) ] )
def test_Function_definition_with_params_and_commands_gets_parsed(): assert ( parsed('{:(x,yy)print(3-4) a="x" print(a)}') == [ FunctionDefTree( [ SymbolTree("x"), SymbolTree("yy") ], [ FunctionCallTree( SymbolTree("print"), [ OperationTree( '-', NumberTree('3'), NumberTree('4') ) ] ), AssignmentTree(SymbolTree("a"), StringTree("x")), FunctionCallTree(SymbolTree("print"), [SymbolTree("a")]) ] ) ] )
def test_Multiple_function_calls_with_various_args_get_parsed(): assert ( parsed("print('a',3,4/12)(512)()") == [ FunctionCallTree( FunctionCallTree( FunctionCallTree( SymbolTree("print"), [ StringTree("a"), NumberTree("3"), OperationTree( "/", NumberTree("4"), NumberTree("12") ) ] ), [ NumberTree("512") ] ), [] ) ] )
def test_Array_literal_parses(): assert ( parsed("[3,4]") == [ ArrayTree( [ NumberTree("3"), NumberTree("4"), ], ) ] )
def test_Function_call_with_various_args_gets_parsed(): assert ( parsed("print('a',3,4/12)") == [ FunctionCallTree( SymbolTree("print"), [ StringTree("a"), NumberTree("3"), OperationTree("/", NumberTree("4"), NumberTree("12")) ] ) ] )
def test_Modify_symbol_is_parsed_as_expression(): assert ( parsed("foo-=44") == [ ModifyTree("-=", SymbolTree("foo"), NumberTree("44")) ] )
def test_Difference_of_symbol_and_number_is_parsed_as_expression(): assert ( parsed("foo-44") == [ OperationTree("-", SymbolTree("foo"), NumberTree("44")) ] )
def test_Variable_assignment_gets_parsed(): assert ( parsed("x=3") == [ AssignmentTree(SymbolTree("x"), NumberTree("3")) ] )
def test_Modify_by_negative_is_parsed_as_expression(): assert ( parsed("foo*=-44") == [ ModifyTree( "*=", SymbolTree("foo"), NegativeTree(NumberTree("44")) ) ] )
def test_Variable_assignment_to_negative_gets_parsed(): assert ( parsed("x=--3") == [ AssignmentTree( SymbolTree("x"), NegativeTree(NegativeTree(NumberTree("3"))), ) ] )
def test_Comparisons_are_parsed(): assert ( parsed("12<3") == [OperationTree("<", NumberTree("12"), NumberTree("3"))] ) assert ( parsed("12>x") == [OperationTree(">", NumberTree("12"), SymbolTree("x"))] ) assert ( parsed("x<=1") == [OperationTree("<=", SymbolTree("x"), NumberTree("1"))] ) assert ( parsed("y>=x") == [OperationTree(">=", SymbolTree("y"), SymbolTree("x"))] ) assert ( parsed("y==x") == [OperationTree("==", SymbolTree("y"), SymbolTree("x"))] )
def test_Spaces_are_allowed_where_unimportant(): assert ( parsed(''' {:( x, y ) x+y foo( 3 ) }( 3, 4 ) ''') == [ FunctionCallTree( FunctionDefTree( [ SymbolTree("x"), SymbolTree("y"), ], [ OperationTree( '+', SymbolTree("x"), SymbolTree("y"), ), FunctionCallTree( SymbolTree("foo"), [ NumberTree("3"), ] ), ] ), [ NumberTree("3"), NumberTree("4"), ] ) ] )
def test_Multiple_commands_parse_into_multiple_expressions(): program = """ x=3 func={:(a)print(a)} func(x) """ assert ( parsed(program) == [ AssignmentTree(SymbolTree('x'), NumberTree('3')), AssignmentTree( SymbolTree('func'), FunctionDefTree( [SymbolTree('a')], [ FunctionCallTree( SymbolTree('print'), [SymbolTree('a')]) ] ) ), FunctionCallTree(SymbolTree('func'), [SymbolTree('x')]) ] )
def test_Negative_number_is_parsed_as_expression(): assert parsed("-56") == [NegativeTree(NumberTree("56"))]
def test_Number_is_parsed_as_expression(): assert parsed("56") == [NumberTree("56")]
def test_Label_is_parsed(): assert ( parsed("12 ^ 3") == [NumberTree(value='12'), LabelTree(), NumberTree(value='3')] )