Skip to content

Commit 20fd4c0

Browse files
aorumbayevdaniel-makerx
authored andcommitted
chore: add simple test for tuple with primitives in return type
1 parent e971ad6 commit 20fd4c0

7 files changed

+227
-0
lines changed

tests/arc4/test_tuple.py

+15
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import pytest
44
from _algopy_testing import arc4
5+
from algopy_testing import AlgopyTestContext, algopy_testing_context
56
from algosdk import abi
67

8+
from tests.artifacts.Tuples.contract import TuplesContract
79
from tests.util import int_to_bytes
810

911
_abi_string = "hello"
@@ -15,6 +17,14 @@
1517
_arc4_uint8 = arc4.UInt8(42)
1618
_arc4_bool = arc4.Bool(True)
1719

20+
21+
# New fixture
22+
@pytest.fixture()
23+
def context() -> typing.Generator[AlgopyTestContext, None, None]:
24+
with algopy_testing_context() as ctx:
25+
yield ctx
26+
27+
1828
_test_data = [
1929
(
2030
abi.ABIType.from_string("(uint8,bool,bool)"),
@@ -279,3 +289,8 @@ def _compare_abi_and_arc4_values(
279289
assert arc4_value.native == abi_value
280290
else:
281291
assert arc4_value.bytes == int_to_bytes(abi_value, len(arc4_value.bytes))
292+
293+
294+
def test_tuple_return_with_primitive_type(context: AlgopyTestContext) -> None: # noqa: ARG001
295+
contract = TuplesContract()
296+
contract.test_tuple_with_primitive_type()

tests/artifacts/Tuples/__init__.py

Whitespace-only changes.

tests/artifacts/Tuples/contract.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from algopy import (
2+
ARC4Contract,
3+
UInt64,
4+
arc4,
5+
)
6+
7+
8+
class TuplesContract(ARC4Contract, avm_version=11):
9+
@arc4.abimethod()
10+
def test_tuple_with_primitive_type(self) -> tuple[UInt64, bool]:
11+
return (UInt64(0), True)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#pragma version 11
2+
#pragma typetrack false
3+
4+
// algopy.arc4.ARC4Contract.approval_program() -> uint64:
5+
main:
6+
// tests/artifacts/Tuples/contract.py:8
7+
// class TuplesContract(ARC4Contract, avm_version=11):
8+
txn NumAppArgs
9+
bz main_bare_routing@6
10+
pushbytes 0x7229d79a // method "test_tuple_with_primitive_type()(uint64,bool)"
11+
txna ApplicationArgs 0
12+
match main_test_tuple_with_primitive_type_route@3
13+
14+
main_after_if_else@10:
15+
// tests/artifacts/Tuples/contract.py:8
16+
// class TuplesContract(ARC4Contract, avm_version=11):
17+
pushint 0 // 0
18+
return
19+
20+
main_test_tuple_with_primitive_type_route@3:
21+
// tests/artifacts/Tuples/contract.py:9
22+
// @arc4.abimethod()
23+
txn OnCompletion
24+
!
25+
assert // OnCompletion is not NoOp
26+
txn ApplicationID
27+
assert // can only call when not creating
28+
pushbytes 0x151f7c75000000000000000080
29+
log
30+
pushint 1 // 1
31+
return
32+
33+
main_bare_routing@6:
34+
// tests/artifacts/Tuples/contract.py:8
35+
// class TuplesContract(ARC4Contract, avm_version=11):
36+
txn OnCompletion
37+
bnz main_after_if_else@10
38+
txn ApplicationID
39+
!
40+
assert // can only call when creating
41+
pushint 1 // 1
42+
return
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"hints": {
3+
"test_tuple_with_primitive_type()(uint64,bool)": {
4+
"call_config": {
5+
"no_op": "CALL"
6+
}
7+
}
8+
},
9+
"source": {
10+
"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgogICAgcHVzaGJ5dGVzIDB4NzIyOWQ3OWEgLy8gbWV0aG9kICJ0ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGUoKSh1aW50NjQsYm9vbCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3Rlc3RfdHVwbGVfd2l0aF9wcmltaXRpdmVfdHlwZV9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvVHVwbGVzL2NvbnRyYWN0LnB5OjgKICAgIC8vIGNsYXNzIFR1cGxlc0NvbnRyYWN0KEFSQzRDb250cmFjdCwgYXZtX3ZlcnNpb249MTEpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl90ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwODAKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=",
11+
"clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"
12+
},
13+
"state": {
14+
"global": {
15+
"num_byte_slices": 0,
16+
"num_uints": 0
17+
},
18+
"local": {
19+
"num_byte_slices": 0,
20+
"num_uints": 0
21+
}
22+
},
23+
"schema": {
24+
"global": {
25+
"declared": {},
26+
"reserved": {}
27+
},
28+
"local": {
29+
"declared": {},
30+
"reserved": {}
31+
}
32+
},
33+
"contract": {
34+
"name": "TuplesContract",
35+
"methods": [
36+
{
37+
"name": "test_tuple_with_primitive_type",
38+
"args": [],
39+
"readonly": false,
40+
"returns": {
41+
"type": "(uint64,bool)"
42+
}
43+
}
44+
],
45+
"networks": {}
46+
},
47+
"bare_call_config": {
48+
"no_op": "CREATE"
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
{
2+
"name": "TuplesContract",
3+
"structs": {},
4+
"methods": [
5+
{
6+
"name": "test_tuple_with_primitive_type",
7+
"args": [],
8+
"returns": {
9+
"type": "(uint64,bool)"
10+
},
11+
"actions": {
12+
"create": [],
13+
"call": [
14+
"NoOp"
15+
]
16+
},
17+
"readonly": false,
18+
"events": [],
19+
"recommendations": {}
20+
}
21+
],
22+
"arcs": [
23+
22,
24+
28
25+
],
26+
"networks": {},
27+
"state": {
28+
"schema": {
29+
"global": {
30+
"ints": 0,
31+
"bytes": 0
32+
},
33+
"local": {
34+
"ints": 0,
35+
"bytes": 0
36+
}
37+
},
38+
"keys": {
39+
"global": {},
40+
"local": {},
41+
"box": {}
42+
},
43+
"maps": {
44+
"global": {},
45+
"local": {},
46+
"box": {}
47+
}
48+
},
49+
"bareActions": {
50+
"create": [
51+
"NoOp"
52+
],
53+
"call": []
54+
},
55+
"sourceInfo": {
56+
"approval": {
57+
"sourceInfo": [
58+
{
59+
"pc": [
60+
25
61+
],
62+
"errorMessage": "OnCompletion is not NoOp"
63+
},
64+
{
65+
"pc": [
66+
56
67+
],
68+
"errorMessage": "can only call when creating"
69+
},
70+
{
71+
"pc": [
72+
28
73+
],
74+
"errorMessage": "can only call when not creating"
75+
}
76+
],
77+
"pcOffsetMethod": "none"
78+
},
79+
"clear": {
80+
"sourceInfo": [],
81+
"pcOffsetMethod": "none"
82+
}
83+
},
84+
"source": {
85+
"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9iYXJlX3JvdXRpbmdANgogICAgcHVzaGJ5dGVzIDB4NzIyOWQ3OWEgLy8gbWV0aG9kICJ0ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGUoKSh1aW50NjQsYm9vbCkiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3Rlc3RfdHVwbGVfd2l0aF9wcmltaXRpdmVfdHlwZV9yb3V0ZUAzCgptYWluX2FmdGVyX2lmX2Vsc2VAMTA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvVHVwbGVzL2NvbnRyYWN0LnB5OjgKICAgIC8vIGNsYXNzIFR1cGxlc0NvbnRyYWN0KEFSQzRDb250cmFjdCwgYXZtX3ZlcnNpb249MTEpOgogICAgcHVzaGludCAwIC8vIDAKICAgIHJldHVybgoKbWFpbl90ZXN0X3R1cGxlX3dpdGhfcHJpbWl0aXZlX3R5cGVfcm91dGVAMzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAwMDAwODAKICAgIGxvZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9UdXBsZXMvY29udHJhY3QucHk6OAogICAgLy8gY2xhc3MgVHVwbGVzQ29udHJhY3QoQVJDNENvbnRyYWN0LCBhdm1fdmVyc2lvbj0xMSk6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDEwCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgcHVzaGludCAxIC8vIDEKICAgIHJldHVybgo=",
86+
"clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"
87+
},
88+
"byteCode": {
89+
"approval": "CzEbQQAqgARyKdeaNhoAjgEAA4EAQzEZFEQxGESADRUffHUAAAAAAAAAAICwgQFDMRlA/94xGBREgQFD",
90+
"clear": "C4EBQw=="
91+
},
92+
"compilerInfo": {
93+
"compiler": "puya",
94+
"compilerVersion": {
95+
"major": 4,
96+
"minor": 8,
97+
"patch": 1
98+
}
99+
},
100+
"events": [],
101+
"templateVariables": {}
102+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#pragma version 11
2+
#pragma typetrack false
3+
4+
// algopy.arc4.ARC4Contract.clear_state_program() -> uint64:
5+
main:
6+
pushint 1 // 1
7+
return

0 commit comments

Comments
 (0)