def test_StaticArray_set_copy(): value = abi.StaticArray(abi.StaticArrayTypeSpec(abi.Uint64TypeSpec(), 10)) otherArray = abi.StaticArray( abi.StaticArrayTypeSpec(abi.Uint64TypeSpec(), 10)) with pytest.raises(pt.TealInputError): value.set( abi.StaticArray(abi.StaticArrayTypeSpec(abi.Uint64TypeSpec(), 11))) with pytest.raises(pt.TealInputError): value.set( abi.StaticArray(abi.StaticArrayTypeSpec(abi.Uint8TypeSpec(), 10))) with pytest.raises(pt.TealInputError): value.set(abi.Uint64()) expr = value.set(otherArray) assert expr.type_of() == pt.TealType.none assert not expr.has_return() expected = pt.TealSimpleBlock([ pt.TealOp(None, pt.Op.load, otherArray.stored_value.slot), pt.TealOp(None, pt.Op.store, value.stored_value.slot), ]) actual, _ = expr.__teal__(options) actual.addIncoming() actual = pt.TealBlock.NormalizeBlocks(actual) with pt.TealComponent.Context.ignoreExprEquality(): assert actual == expected
def test_Tuple_set_Computed(): tupleValue = abi.Tuple( abi.TupleTypeSpec( abi.Uint8TypeSpec(), abi.Uint16TypeSpec(), abi.Uint32TypeSpec() ) ) computed = ContainerType( tupleValue.type_spec(), pt.Bytes("internal representation") ) expr = tupleValue.set(computed) assert expr.type_of() == pt.TealType.none assert not expr.has_return() expected = pt.TealSimpleBlock( [ pt.TealOp(None, pt.Op.byte, '"internal representation"'), pt.TealOp(None, pt.Op.store, tupleValue.stored_value.slot), ] ) actual, _ = expr.__teal__(options) actual.addIncoming() actual = pt.TealBlock.NormalizeBlocks(actual) with pt.TealComponent.Context.ignoreExprEquality(): assert actual == expected with pytest.raises(pt.TealInputError): tupleValue.set(computed, computed) with pytest.raises(pt.TealInputError): tupleValue.set( ContainerType(abi.TupleTypeSpec(abi.ByteTypeSpec()), pt.Bytes(b"a")) )
def test_TupleTypeSpec_str(): assert str(abi.TupleTypeSpec()) == "()" assert str(abi.TupleTypeSpec(abi.TupleTypeSpec())) == "(())" assert str(abi.TupleTypeSpec(abi.TupleTypeSpec(), abi.TupleTypeSpec())) == "((),())" assert ( str( abi.TupleTypeSpec( abi.Uint64TypeSpec(), abi.Uint32TypeSpec(), abi.BoolTypeSpec() ) ) == "(uint64,uint32,bool)" ) assert ( str( abi.TupleTypeSpec( abi.BoolTypeSpec(), abi.Uint64TypeSpec(), abi.Uint32TypeSpec() ) ) == "(bool,uint64,uint32)" ) assert ( str( abi.TupleTypeSpec( abi.Uint16TypeSpec(), abi.DynamicArrayTypeSpec(abi.Uint8TypeSpec()) ) ) == "(uint16,uint8[])" )
def test_TupleTypeSpec_is_dynamic(): assert not abi.TupleTypeSpec().is_dynamic() assert not abi.TupleTypeSpec( abi.Uint64TypeSpec(), abi.Uint32TypeSpec(), abi.BoolTypeSpec() ).is_dynamic() assert abi.TupleTypeSpec( abi.Uint16TypeSpec(), abi.DynamicArrayTypeSpec(abi.Uint8TypeSpec()) ).is_dynamic()
def test_AccountTypeSpec_eq(): assert abi.AccountTypeSpec() == abi.AccountTypeSpec() for otherType in ( abi.ByteTypeSpec(), abi.Uint8TypeSpec(), abi.AddressTypeSpec(), ): assert abi.AccountTypeSpec() != otherType
def test_ApplicationTypeSpec_eq(): assert abi.ApplicationTypeSpec() == abi.ApplicationTypeSpec() for otherType in ( abi.ByteTypeSpec(), abi.Uint8TypeSpec(), abi.AddressTypeSpec(), ): assert abi.ApplicationTypeSpec() != otherType
def test_UintTypeSpec_eq(): for i, test in enumerate(testData): assert test.uintType == test.uintType for j, otherTest in enumerate(testData): if i == j: continue assert test.uintType != otherTest.uintType for otherType in ( abi.BoolTypeSpec(), abi.StaticArrayTypeSpec(test.uintType, 1), abi.DynamicArrayTypeSpec(test.uintType), ): assert test.uintType != otherType assert abi.ByteTypeSpec() != abi.Uint8TypeSpec() assert abi.Uint8TypeSpec() != abi.ByteTypeSpec()
def test_TransactionTypeSpec_eq(): for tv in TransactionValues: assert tv.ts == tv.ts for otherType in ( abi.ByteTypeSpec(), abi.Uint8TypeSpec(), abi.AddressTypeSpec(), ): assert tv.ts != otherType
def test_StringTypeSpec_eq(): assert abi.StringTypeSpec() == abi.StringTypeSpec() for otherType in ( abi.ByteTypeSpec(), abi.StaticArrayTypeSpec(abi.ByteTypeSpec(), 1), abi.DynamicArrayTypeSpec(abi.Uint8TypeSpec()), abi.DynamicArrayTypeSpec(abi.ByteTypeSpec()), ): assert abi.StringTypeSpec() != otherType
def test_TupleTypeSpec_byte_length_static(): assert abi.TupleTypeSpec().byte_length_static() == 0 assert abi.TupleTypeSpec(abi.TupleTypeSpec()).byte_length_static() == 0 assert ( abi.TupleTypeSpec(abi.TupleTypeSpec(), abi.TupleTypeSpec()).byte_length_static() == 0 ) assert ( abi.TupleTypeSpec( abi.Uint64TypeSpec(), abi.Uint32TypeSpec(), abi.BoolTypeSpec() ).byte_length_static() == 8 + 4 + 1 ) assert ( abi.TupleTypeSpec( abi.Uint64TypeSpec(), abi.Uint32TypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), ).byte_length_static() == 8 + 4 + 1 ) assert ( abi.TupleTypeSpec( abi.Uint64TypeSpec(), abi.Uint32TypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.BoolTypeSpec(), ).byte_length_static() == 8 + 4 + 2 ) with pytest.raises(ValueError): abi.TupleTypeSpec( abi.Uint16TypeSpec(), abi.DynamicArrayTypeSpec(abi.Uint8TypeSpec()) ).byte_length_static()
def test_ByteUint8_mutual_conversion(): cases: List[Tuple[abi.UintTypeSpec, abi.UintTypeSpec]] = [ (abi.Uint8TypeSpec(), abi.ByteTypeSpec()), (abi.ByteTypeSpec(), abi.Uint8TypeSpec()), ] for type_a, type_b in cases: type_b_instance = type_b.new_instance() other = type_a.new_instance() expr = type_b_instance.set(other) assert expr.type_of() == pt.TealType.none assert not expr.has_return() expected = pt.TealSimpleBlock([ pt.TealOp(None, pt.Op.load, other.stored_value.slot), pt.TealOp(None, pt.Op.store, type_b_instance.stored_value.slot), ]) actual, _ = expr.__teal__(options) actual.addIncoming() actual = pt.TealBlock.NormalizeBlocks(actual) with pt.TealComponent.Context.ignoreExprEquality(): assert actual == expected
def test_Tuple_set(): tupleValue = abi.Tuple( abi.TupleTypeSpec( abi.Uint8TypeSpec(), abi.Uint16TypeSpec(), abi.Uint32TypeSpec() ) ) uint8 = abi.Uint8() uint16 = abi.Uint16() uint32 = abi.Uint32() with pytest.raises(pt.TealInputError): tupleValue.set() with pytest.raises(pt.TealInputError): tupleValue.set(uint8, uint16) with pytest.raises(pt.TealInputError): tupleValue.set(uint8, uint16, uint32, uint32) with pytest.raises(pt.TealInputError): tupleValue.set(uint8, uint32, uint16) with pytest.raises(pt.TealInputError): tupleValue.set(uint8, uint16, uint16) expr = tupleValue.set(uint8, uint16, uint32) assert expr.type_of() == pt.TealType.none assert not expr.has_return() expectedExpr = tupleValue.stored_value.store(_encode_tuple([uint8, uint16, uint32])) expected, _ = expectedExpr.__teal__(options) expected.addIncoming() expected = pt.TealBlock.NormalizeBlocks(expected) actual, _ = expr.__teal__(options) actual.addIncoming() actual = pt.TealBlock.NormalizeBlocks(actual) with pt.TealComponent.Context.ignoreExprEquality(): assert actual == expected
from typing import List, cast import pytest import pyteal as pt from pyteal import abi options = pt.CompileOptions(version=5) STATIC_TYPES: List[abi.TypeSpec] = [ abi.BoolTypeSpec(), abi.Uint8TypeSpec(), abi.Uint16TypeSpec(), abi.Uint32TypeSpec(), abi.Uint64TypeSpec(), abi.TupleTypeSpec(), abi.TupleTypeSpec(abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.Uint64TypeSpec()), abi.StaticArrayTypeSpec(abi.BoolTypeSpec(), 10), abi.StaticArrayTypeSpec(abi.Uint8TypeSpec(), 10), abi.StaticArrayTypeSpec(abi.Uint16TypeSpec(), 10), abi.StaticArrayTypeSpec(abi.Uint32TypeSpec(), 10), abi.StaticArrayTypeSpec(abi.Uint64TypeSpec(), 10), abi.StaticArrayTypeSpec( abi.TupleTypeSpec(abi.BoolTypeSpec(), abi.BoolTypeSpec(), abi.Uint64TypeSpec()), 10, ), ] DYNAMIC_TYPES: List[abi.TypeSpec] = [ abi.DynamicArrayTypeSpec(abi.BoolTypeSpec()),
checkUpperBound: bool expectedDecoding: Callable[ [pt.Expr, Optional[pt.Expr], Optional[pt.Expr], Optional[pt.Expr]], pt.Expr] expectedEncoding: Callable[[abi.Uint], pt.Expr] def noneToInt0(value: Union[None, pt.Expr]): if value is None: return pt.Int(0) return value testData = [ UintTestData( uintType=abi.Uint8TypeSpec(), instanceType=abi.Uint8, expectedBits=8, maxValue=2**8 - 1, checkUpperBound=True, expectedDecoding=lambda encoded, start_index, end_index, length: pt. GetByte(encoded, noneToInt0(start_index)), expectedEncoding=lambda uintType: pt.SetByte(pt.Bytes( b"\x00"), pt.Int(0), uintType.get()), ), UintTestData( uintType=abi.Uint16TypeSpec(), instanceType=abi.Uint16, expectedBits=16, maxValue=2**16 - 1, checkUpperBound=True,