Skip to content

Commit

Permalink
use folded value for folding
Browse files Browse the repository at this point in the history
  • Loading branch information
tserg committed Nov 2, 2023
1 parent cb6e0a4 commit 4e99c48
Show file tree
Hide file tree
Showing 15 changed files with 234 additions and 360 deletions.
6 changes: 3 additions & 3 deletions tests/ast/nodes/test_evaluate_binop_decimal.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def foo(a: decimal, b: decimal) -> decimal:
vyper_ast = vy_ast.parse_to_ast(f"{left} {op} {right}")
old_node = vyper_ast.body[0].value
try:
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.left, old_node.right)
is_valid = True
except ZeroDivisionException:
is_valid = False
Expand All @@ -49,7 +49,7 @@ def test_binop_pow():
old_node = vyper_ast.body[0].value

with pytest.raises(TypeMismatch):
old_node.evaluate()
old_node.evaluate(old_node.left, old_node.right)


@pytest.mark.fuzzing
Expand Down Expand Up @@ -82,7 +82,7 @@ def foo() -> decimal:
vyper_ast = vy_ast.parse_to_ast(expected)
try:
validate_semantics(vyper_ast, {})
vy_ast.folding.replace_literal_ops(vyper_ast)
vy_ast.folding.replace_foldable_values(vyper_ast)
expected = vyper_ast.body[0].body[0].value.value
is_valid = -(2**127) <= expected < 2**127
except (OverflowException, ZeroDivisionException):
Expand Down
8 changes: 4 additions & 4 deletions tests/ast/nodes/test_evaluate_binop_int.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def foo(a: int128, b: int128) -> int128:
vyper_ast = vy_ast.parse_to_ast(f"{left} {op} {right}")
old_node = vyper_ast.body[0].value
try:
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.left, old_node.right)
is_valid = True
except ZeroDivisionException:
is_valid = False
Expand Down Expand Up @@ -57,7 +57,7 @@ def foo(a: uint256, b: uint256) -> uint256:
vyper_ast = vy_ast.parse_to_ast(f"{left} {op} {right}")
old_node = vyper_ast.body[0].value
try:
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.left, old_node.right)
is_valid = new_node.value >= 0
except ZeroDivisionException:
is_valid = False
Expand All @@ -84,7 +84,7 @@ def foo(a: uint256, b: uint256) -> uint256:

vyper_ast = vy_ast.parse_to_ast(f"{left} ** {right}")
old_node = vyper_ast.body[0].value
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.left, old_node.right)

assert contract.foo(left, right) == new_node.value

Expand Down Expand Up @@ -120,7 +120,7 @@ def foo() -> int128:

try:
validate_semantics(vyper_ast, {})
vy_ast.folding.replace_literal_ops(vyper_ast)
vy_ast.folding.replace_foldable_values(vyper_ast)
expected = vyper_ast.body[0].body[0].value.value
is_valid = True
except ZeroDivisionException:
Expand Down
4 changes: 2 additions & 2 deletions tests/ast/nodes/test_evaluate_boolop.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def foo({input_value}) -> bool:

vyper_ast = vy_ast.parse_to_ast(literal_op)
old_node = vyper_ast.body[0].value
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.values)

assert contract.foo(*values) == new_node.value

Expand Down Expand Up @@ -61,7 +61,7 @@ def foo() -> bool:

vyper_ast = vy_ast.parse_to_ast(expected)
validate_semantics(vyper_ast, {})
vy_ast.folding.replace_literal_ops(vyper_ast)
vy_ast.folding.replace_foldable_values(vyper_ast)
expected = vyper_ast.body[0].body[0].value.value

assert contract.foo(*values) == expected
10 changes: 5 additions & 5 deletions tests/ast/nodes/test_evaluate_compare.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def foo(a: int128, b: int128) -> bool:

vyper_ast = vy_ast.parse_to_ast(f"{left} {op} {right}")
old_node = vyper_ast.body[0].value
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.left, old_node.right)

assert contract.foo(left, right) == new_node.value

Expand All @@ -41,7 +41,7 @@ def foo(a: uint128, b: uint128) -> bool:

vyper_ast = vy_ast.parse_to_ast(f"{left} {op} {right}")
old_node = vyper_ast.body[0].value
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.left, old_node.right)

assert contract.foo(left, right) == new_node.value

Expand All @@ -65,7 +65,7 @@ def bar(a: int128) -> bool:

vyper_ast = vy_ast.parse_to_ast(f"{left} in {right}")
old_node = vyper_ast.body[0].value
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.left, old_node.right)

# check runtime == fully folded
assert contract.foo(left, right) == new_node.value
Expand Down Expand Up @@ -94,7 +94,7 @@ def bar(a: int128) -> bool:

vyper_ast = vy_ast.parse_to_ast(f"{left} not in {right}")
old_node = vyper_ast.body[0].value
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.left, old_node.right)

# check runtime == fully folded
assert contract.foo(left, right) == new_node.value
Expand All @@ -109,4 +109,4 @@ def test_compare_type_mismatch(op):
vyper_ast = vy_ast.parse_to_ast(f"1 {op} 1.0")
old_node = vyper_ast.body[0].value
with pytest.raises(UnfoldableNode):
old_node.evaluate()
old_node.evaluate(old_node.left, old_node.right)
2 changes: 1 addition & 1 deletion tests/ast/nodes/test_evaluate_subscript.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ def foo(array: int128[10], idx: uint256) -> int128:

vyper_ast = vy_ast.parse_to_ast(f"{array}[{idx}]")
old_node = vyper_ast.body[0].value
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.slice.value, old_node.value)

assert contract.foo(array, idx) == new_node.value
4 changes: 2 additions & 2 deletions tests/ast/nodes/test_evaluate_unaryop.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def foo(a: bool) -> bool:

vyper_ast = vy_ast.parse_to_ast(f"not {bool_cond}")
old_node = vyper_ast.body[0].value
new_node = old_node.evaluate()
new_node = old_node.evaluate(old_node.operand)

assert contract.foo(bool_cond) == new_node.value

Expand All @@ -39,7 +39,7 @@ def foo() -> bool:

vyper_ast = vy_ast.parse_to_ast(expected)
validate_semantics(vyper_ast, {})
vy_ast.folding.replace_literal_ops(vyper_ast)
vy_ast.folding.replace_foldable_values(vyper_ast)
expected = vyper_ast.body[0].body[0].value.value

assert contract.foo(bool_cond) == expected
Loading

0 comments on commit 4e99c48

Please sign in to comment.