Skip to content

Commit

Permalink
Add DAG tests and improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonpaulos committed Oct 14, 2020
1 parent 6afc0f4 commit 7e76149
Show file tree
Hide file tree
Showing 26 changed files with 1,786 additions and 609 deletions.
6 changes: 4 additions & 2 deletions pyteal/ast/addr_test.py
Expand Up @@ -5,9 +5,11 @@
def test_addr():
expr = Addr("NJUWK3DJNZTWU2LFNRUW4Z3KNFSWY2LOM5VGSZLMNFXGO2TJMVWGS3THMF")
assert expr.type_of() == TealType.bytes
assert expr.__teal__() == [
expected = TealBlock([
TealOp(Op.addr, "NJUWK3DJNZTWU2LFNRUW4Z3KNFSWY2LOM5VGSZLMNFXGO2TJMVWGS3THMF")
]
])
actual, _ = expr.__teal__()
assert actual == expected

def test_addr_invalid():
with pytest.raises(TealInputError):
Expand Down
125 changes: 94 additions & 31 deletions pyteal/ast/app_test.py
Expand Up @@ -3,52 +3,66 @@
from .. import *

def test_on_complete():
assert OnComplete.NoOp.__teal__() == [
assert OnComplete.NoOp.__teal__()[0] == TealBlock([
TealOp(Op.int, "NoOp")
]
])

assert OnComplete.OptIn.__teal__() == [
assert OnComplete.OptIn.__teal__()[0] == TealBlock([
TealOp(Op.int, "OptIn")
]
])

assert OnComplete.CloseOut.__teal__() == [
assert OnComplete.CloseOut.__teal__()[0] == TealBlock([
TealOp(Op.int, "CloseOut")
]
])

assert OnComplete.ClearState.__teal__() == [
assert OnComplete.ClearState.__teal__()[0] == TealBlock([
TealOp(Op.int, "ClearState")
]
])

assert OnComplete.UpdateApplication.__teal__() == [
assert OnComplete.UpdateApplication.__teal__()[0] == TealBlock([
TealOp(Op.int, "UpdateApplication")
]
])

assert OnComplete.DeleteApplication.__teal__() == [
assert OnComplete.DeleteApplication.__teal__()[0] == TealBlock([
TealOp(Op.int, "DeleteApplication")
]
])

def test_app_id():
expr = App.id()
assert expr.type_of() == TealType.uint64
assert expr.__teal__() == Global.current_application_id().__teal__()
assert expr.__teal__()[0] == Global.current_application_id().__teal__()[0]

def test_opted_in():
expr = App.optedIn(Int(1), Int(12))
assert expr.type_of() == TealType.uint64
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.int, 1),
TealOp(Op.int, 12),
TealOp(Op.app_opted_in)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_local_get():
expr = App.localGet(Int(0), Bytes("key"))
assert expr.type_of() == TealType.anytype
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.int, 0),
TealOp(Op.byte, "\"key\""),
TealOp(Op.app_local_get)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_local_get_invalid():
with pytest.raises(TealTypeError):
Expand All @@ -61,14 +75,21 @@ def test_local_get_ex():
expr = App.localGetEx(Int(0), Int(6), Bytes("key"))
assert expr.type_of() == TealType.none
assert expr.value().type_of() == TealType.anytype
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.int, 0),
TealOp(Op.int, 6),
TealOp(Op.byte, "\"key\""),
TealOp(Op.app_local_get_ex),
TealOp(Op.store, expr.slotOk),
TealOp(Op.store, expr.slotValue)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_local_get_ex_invalid():
with pytest.raises(TealTypeError):
Expand All @@ -83,10 +104,17 @@ def test_local_get_ex_invalid():
def test_global_get():
expr = App.globalGet(Bytes("key"))
assert expr.type_of() == TealType.anytype
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.byte, "\"key\""),
TealOp(Op.app_global_get)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_global_get_invalid():
with pytest.raises(TealTypeError):
Expand All @@ -96,13 +124,20 @@ def test_global_get_ex():
expr = App.globalGetEx(Int(6), Bytes("key"))
assert expr.type_of() == TealType.none
assert expr.value().type_of() == TealType.anytype
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.int, 6),
TealOp(Op.byte, "\"key\""),
TealOp(Op.app_global_get_ex),
TealOp(Op.store, expr.slotOk),
TealOp(Op.store, expr.slotValue)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_global_get_ex_invalid():
with pytest.raises(TealTypeError):
Expand All @@ -114,12 +149,19 @@ def test_global_get_ex_invalid():
def test_local_put():
expr = App.localPut(Int(0), Bytes("key"), Int(5))
assert expr.type_of() == TealType.none
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.int, 0),
TealOp(Op.byte, "\"key\""),
TealOp(Op.int, 5),
TealOp(Op.app_local_put)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_local_put_invalid():
with pytest.raises(TealTypeError):
Expand All @@ -134,11 +176,18 @@ def test_local_put_invalid():
def test_global_put():
expr = App.globalPut(Bytes("key"), Int(5))
assert expr.type_of() == TealType.none
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.byte, "\"key\""),
TealOp(Op.int, 5),
TealOp(Op.app_global_put)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_global_put_invalid():
with pytest.raises(TealTypeError):
Expand All @@ -150,11 +199,18 @@ def test_global_put_invalid():
def test_local_del():
expr = App.localDel(Int(0), Bytes("key"))
assert expr.type_of() == TealType.none
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.int, 0),
TealOp(Op.byte, "\"key\""),
TealOp(Op.app_local_del)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_local_del_invalid():
with pytest.raises(TealTypeError):
Expand All @@ -166,10 +222,17 @@ def test_local_del_invalid():
def test_global_del():
expr = App.globalDel(Bytes("key"))
assert expr.type_of() == TealType.none
assert expr.__teal__() == [

expected = TealBlock([
TealOp(Op.byte, "\"key\""),
TealOp(Op.app_global_del)
]
])

actual, _ = expr.__teal__()
actual.addIncoming()
TealBlock.NormalizeBlocks(actual)

assert actual == expected

def test_global_del_invalid():
with pytest.raises(TealTypeError):
Expand Down
6 changes: 4 additions & 2 deletions pyteal/ast/arg_test.py
Expand Up @@ -5,9 +5,11 @@
def test_arg():
expr = Arg(0)
assert expr.type_of() == TealType.bytes
assert expr.__teal__() == [
expected = TealBlock([
TealOp(Op.arg, 0)
]
])
actual, _ = expr.__teal__()
assert actual == expected

def test_arg_invalid():
with pytest.raises(TealInputError):
Expand Down
18 changes: 8 additions & 10 deletions pyteal/ast/assert_test.py
Expand Up @@ -5,16 +5,14 @@
def test_assert():
expr = Assert(Int(1))
assert expr.type_of() == TealType.none
teal = expr.__teal__()
assert len(teal) == 4
label = teal[3]
assert isinstance(label, TealLabel)
assert teal == [
TealOp(Op.int, 1),
TealOp(Op.bnz, label.label),
TealOp(Op.err),
label
]

expected, _ = Int(1).__teal__()
expected.setFalseBlock(Err().__teal__()[0])

actual, _ = expr.__teal__()
actual.trim()

assert actual == expected

def test_assert_invalid():
with pytest.raises(TealTypeError):
Expand Down

0 comments on commit 7e76149

Please sign in to comment.