tests
This commit is contained in:
@ -3,7 +3,7 @@ from rply import Token
|
||||
from simpleast import Program, ExprStatement, BooleanLiteral, Assignment, ImplicitSelf
|
||||
from simplelexer import lex
|
||||
from simpleparser import parse
|
||||
from objmodel import W_NormalObject, W_Integer, W_Boolean
|
||||
from objmodel import W_Integer, W_Boolean
|
||||
from interpreter import Interpreter
|
||||
|
||||
|
||||
|
@ -1,22 +0,0 @@
|
||||
from bytecodeinterpreter import Interpreter
|
||||
from simpleparser import parse
|
||||
|
||||
|
||||
def builtin_test_helper(expr):
|
||||
ast = parse("x = " + expr)
|
||||
interpreter = Interpreter()
|
||||
w_module = interpreter.make_module()
|
||||
interpreter.eval(ast, w_module)
|
||||
|
||||
return w_module.getvalue("x").value
|
||||
|
||||
|
||||
def test_sugar_builtins():
|
||||
assert builtin_test_helper("2 add(5)") == 7
|
||||
assert builtin_test_helper("2 mul(5)") == 10
|
||||
assert builtin_test_helper("2 div(5)") == 0
|
||||
assert builtin_test_helper("10 div(5)") == 2
|
||||
assert builtin_test_helper("10 div(3)") == 3
|
||||
assert builtin_test_helper("5 mod(3)") == 2
|
||||
assert builtin_test_helper("4 mod(2)") == 0
|
||||
assert builtin_test_helper("2 inc") == 3
|
@ -1,6 +1,6 @@
|
||||
from rply import Token
|
||||
|
||||
from simpleast import Program, ExprStatement, StringLiteral, ImplicitSelf, Assignment, DoubleLiteral
|
||||
from simpleast import Program, ExprStatement, ImplicitSelf, Assignment, DoubleLiteral
|
||||
from simplelexer import lex
|
||||
from simpleparser import parse
|
||||
from objmodel import W_Integer, W_Double
|
||||
|
@ -1,10 +1,10 @@
|
||||
from rply import Token
|
||||
|
||||
from simpleast import Program, ExprStatement, BooleanLiteral, ImplicitSelf, Assignment, StringLiteral
|
||||
from interpreter import Interpreter
|
||||
from objmodel import W_Integer, W_String, W_Boolean
|
||||
from simpleast import Program, ExprStatement, ImplicitSelf, Assignment, StringLiteral
|
||||
from simplelexer import lex
|
||||
from simpleparser import parse
|
||||
from objmodel import W_NormalObject, W_Integer, W_String, W_Boolean
|
||||
from interpreter import Interpreter
|
||||
|
||||
|
||||
def test_basic_string_lexing():
|
||||
|
@ -1,8 +1,8 @@
|
||||
import py
|
||||
from rply import Token
|
||||
|
||||
from simpleparser import parse
|
||||
from objmodel import W_NormalObject
|
||||
from interpreter import Interpreter
|
||||
from simplelexer import lex
|
||||
from simpleparser import parse
|
||||
|
||||
|
||||
def sugar_test_helper(expr):
|
||||
@ -14,6 +14,41 @@ def sugar_test_helper(expr):
|
||||
return w_module.getvalue("x").value
|
||||
|
||||
|
||||
def test_lexing():
|
||||
token = lex("+ - * / ++ %")
|
||||
|
||||
assert Token("Plus", "+") == token[0]
|
||||
assert Token("Minus", "-") == token[1]
|
||||
assert Token("Multiply", "*") == token[2]
|
||||
assert Token("Divide", "/") == token[3]
|
||||
assert Token("Increment", "++") == token[4]
|
||||
assert Token("Modulo", "%") == token[5]
|
||||
|
||||
|
||||
def test_parsing():
|
||||
assert parse("1 + 2") == parse("1 add(2)")
|
||||
assert parse("1 + 2 + 3") == parse("1 add(2) add(3)")
|
||||
assert parse("1 + 2 * 3") == parse("1 add(2 mul(3))")
|
||||
assert parse("1 - 2 - 3") == parse("1 sub(2) sub(3)")
|
||||
assert parse("1 + 2 % 3 / 4 - 5 * 6 + 7++") == parse("1 add(2 mod(3) div(4)) sub(5 mul(6)) add(7 inc)")
|
||||
|
||||
|
||||
def test_parsing_parenthesis():
|
||||
assert parse("(1 + 2)") == parse("1 add(2)")
|
||||
assert parse("1 * (2 + 3)") == parse("1 mul(2 add(3))")
|
||||
|
||||
|
||||
def test_sugar_builtins():
|
||||
assert sugar_test_helper("2 add(5)") == 7
|
||||
assert sugar_test_helper("2 mul(5)") == 10
|
||||
assert sugar_test_helper("2 div(5)") == 0
|
||||
assert sugar_test_helper("10 div(5)") == 2
|
||||
assert sugar_test_helper("10 div(3)") == 3
|
||||
assert sugar_test_helper("5 mod(3)") == 2
|
||||
assert sugar_test_helper("4 mod(2)") == 0
|
||||
assert sugar_test_helper("2 inc") == 3
|
||||
|
||||
|
||||
def test_plus():
|
||||
assert sugar_test_helper("1 + 1 + 1") == 3
|
||||
assert sugar_test_helper("1 + 1") == 2
|
||||
@ -40,9 +75,77 @@ def test_mod():
|
||||
|
||||
def test_inc():
|
||||
assert sugar_test_helper("1 ++") == 2
|
||||
assert sugar_test_helper("1 ++ + 1") == 3 # Is this allowed?
|
||||
assert sugar_test_helper("1 ++ + 1") == 3
|
||||
assert sugar_test_helper("2 * 2 ++") == 6
|
||||
|
||||
ast = parse("""
|
||||
i = 1
|
||||
i++
|
||||
x = i
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_module = interpreter.make_module()
|
||||
interpreter.eval(ast, w_module)
|
||||
|
||||
assert w_module.getvalue("x").value == 2
|
||||
|
||||
|
||||
def test_inplace_arithmetic():
|
||||
ast = parse("""
|
||||
w = 5
|
||||
x = 5
|
||||
y = 5
|
||||
z = 5
|
||||
w += 1
|
||||
x -= 2
|
||||
y *= 5
|
||||
z /= 2
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert w_model.getvalue("w").value == 6
|
||||
assert w_model.getvalue("x").value == 3
|
||||
assert w_model.getvalue("y").value == 25
|
||||
assert w_model.getvalue("z").value == 2
|
||||
|
||||
|
||||
def test_comparisons():
|
||||
ast = parse("""
|
||||
u = 5 < 3
|
||||
v = 5 <= 5
|
||||
w = 5 > 3
|
||||
x = 5 >= 3
|
||||
y = 5 == 6
|
||||
z = 5 != 6
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert w_model.getvalue("u").istrue() is False
|
||||
assert w_model.getvalue("v").istrue() is True
|
||||
assert w_model.getvalue("w").istrue() is True
|
||||
assert w_model.getvalue("x").istrue() is True
|
||||
assert w_model.getvalue("y").istrue() is False
|
||||
assert w_model.getvalue("z").istrue() is True
|
||||
|
||||
|
||||
def test_logical():
|
||||
ast = parse("""
|
||||
x = true && false
|
||||
y = true || false
|
||||
z = !true
|
||||
""")
|
||||
interpreter = Interpreter()
|
||||
w_model = interpreter.make_module()
|
||||
interpreter.eval(ast, w_model)
|
||||
|
||||
assert w_model.getvalue("x").istrue() is False
|
||||
assert w_model.getvalue("y").istrue() is True
|
||||
assert w_model.getvalue("z").istrue() is False
|
||||
|
||||
|
||||
def test_mixed_precedence():
|
||||
assert sugar_test_helper("2 * 3 / 2") == 3
|
||||
|
@ -1,13 +0,0 @@
|
||||
from rply import Token
|
||||
from simplelexer import lex
|
||||
|
||||
|
||||
def test_lexing():
|
||||
token = lex("+ - * / ++ %")
|
||||
|
||||
assert Token("Plus", "+") == token[0]
|
||||
assert Token("Minus", "-") == token[1]
|
||||
assert Token("Multiply", "*") == token[2]
|
||||
assert Token("Divide", "/") == token[3]
|
||||
assert Token("Increment", "++") == token[4]
|
||||
assert Token("Modulo", "%") == token[5]
|
@ -1,15 +0,0 @@
|
||||
from simpleparser import parse
|
||||
|
||||
|
||||
def test_parsing():
|
||||
assert parse("1 + 2") == parse("1 $int_add(2)")
|
||||
assert parse("1 + 2 + 3") == parse("1 $int_add(2) $int_add(3)")
|
||||
assert parse("1 + 2 * 3") == parse("1 $int_add(2 $int_mul(3))")
|
||||
assert parse("1 - 2 - 3") == parse("1 $int_sub(2) $int_sub(3)")
|
||||
assert parse("1 + 2 % 3 / 4 - 5 * 6 + 7++") \
|
||||
== parse("1 $int_add(2 $int_mod(3) $int_div(4)) $int_sub(5 $int_mul(6)) $int_add(7 $int_inc)")
|
||||
|
||||
|
||||
def test_parsing_parenthesis():
|
||||
assert parse("(1 + 2)") == parse("1 $int_add(2)")
|
||||
assert parse("1 * (2 + 3)") == parse("1 $int_mul(2 $int_add(3))")
|
Reference in New Issue
Block a user