Exemple #1
0
def test_ReferenceType_decode():
    encoded = pt.Bytes("encoded")
    for value in (abi.Account(), abi.Asset(), abi.Application()):
        for start_index in (None, pt.Int(1)):
            for end_index in (None, pt.Int(2)):
                for length in (None, pt.Int(3)):
                    expr = value.decode(
                        encoded,
                        start_index=start_index,
                        end_index=end_index,
                        length=length,
                    )
                    assert expr.type_of() == pt.TealType.none
                    assert expr.has_return() is False

                    expected_decoding = value.stored_value.store(
                        pt.GetByte(
                            encoded,
                            start_index
                            if start_index is not None else pt.Int(0),
                        ))
                    expected, _ = expected_decoding.__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
Exemple #2
0
def test_Asset_params():
    value = abi.Asset()

    params = value.params()

    assert type(params) is pt.AssetParamObject

    expected = value.referenced_index()
    actual = params._asset

    with pt.TealComponent.Context.ignoreExprEquality():
        assert actual.__teal__(options) == expected.__teal__(options)
Exemple #3
0
def test_Asset_holding():
    value = abi.Asset()

    accounts = (
        (pt.Int(6), pt.Int(6)),
        (
            pt.Addr(
                "QSA6K5MNJPEGO5SDSWXBM3K4UEI3Q2NCPS2OUXVJI5QPCHMVI27MFRSHKI"),
            pt.Addr(
                "QSA6K5MNJPEGO5SDSWXBM3K4UEI3Q2NCPS2OUXVJI5QPCHMVI27MFRSHKI"),
        ),
        (a := abi.Account(), a.referenced_index()),
    )
Exemple #4
0
def test_ReferenceType_referenced_index():
    for value in (abi.Account(), abi.Asset(), abi.Application()):
        expr = value.referenced_index()
        assert expr.type_of() == pt.TealType.uint64
        assert expr.has_return() is False

        expected = pt.TealSimpleBlock([
            pt.TealOp(expr, pt.Op.load, value.stored_value.slot),
        ])
        actual, _ = expr.__teal__(options)
        actual.addIncoming()
        actual = pt.TealBlock.NormalizeBlocks(actual)

        with pt.TealComponent.Context.ignoreExprEquality():
            assert actual == expected
Exemple #5
0
def test_Asset_asset_id():
    value = abi.Asset()
    expr = value.asset_id()
    assert expr.type_of() == pt.TealType.uint64
    assert expr.has_return() is False

    expected = pt.TealSimpleBlock([
        pt.TealOp(None, pt.Op.load, value.stored_value.slot),
        pt.TealOp(None, pt.Op.txnas, "Assets"),
    ])
    actual, _ = expr.__teal__(options)
    actual.addIncoming()
    actual = pt.TealBlock.NormalizeBlocks(actual)

    with pt.TealComponent.Context.ignoreExprEquality():
        assert actual == expected
Exemple #6
0
def test_ReferenceType_encode():
    for value in (abi.Account(), abi.Asset(), abi.Application()):
        with pytest.raises(pt.TealInputError,
                           match=r"A ReferenceType cannot be encoded$"):
            value.encode()
Exemple #7
0
def test_Asset_typespec():
    assert abi.Asset().type_spec() == abi.AssetTypeSpec()
Exemple #8
0
def test_Account_asset_holding():
    value = abi.Account()

    assets = ((pt.Int(6), pt.Int(6)), (a := abi.Asset(), a.referenced_index()))