Skip to content

test_coverage()

Documentation for tests/homestead/coverage/test_coverage.py::test_coverage@49a16fac.

Generate fixtures for these test cases for Prague with:

fill -v tests/homestead/coverage/test_coverage.py::test_coverage --fork Prague

Cover gaps that result from transforming Yul code into ethereum_test_tools.vm.opcode.Opcodes bytecode.

E.g. Yul tends to optimize stack items by using SWAP1 and DUP1 opcodes, which are not regularly used in python code.

Modify this test to cover more Yul code if required in the future.

Source code in tests/homestead/coverage/test_coverage.py
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
@pytest.mark.valid_from("Homestead")
def test_coverage(
    state_test: StateTestFiller,
    pre: Alloc,
    fork: Fork,
):
    """
    Cover gaps that result from transforming Yul code into
    `ethereum_test_tools.vm.opcode.Opcodes` bytecode.

    E.g. Yul tends to optimize stack items by using `SWAP1` and `DUP1` opcodes, which are not
    regularly used in python code.

    Modify this test to cover more Yul code if required in the future.
    """
    missed_coverage = pre.deploy_contract(
        balance=0,
        code=Op.SHL(0x0000000000000000000000000000000000000000000000000000000000000001, 0x00)
        + Op.SHR(0x0000000000000000000000000000000000000000000000000000000000000001, 0x00)
        + Op.PUSH1(0x0A)
        + Op.PUSH1(0x0B)
        + Op.PUSH1(0x0C)
        + Op.PUSH1(0x0D)
        + Op.PUSH1(0x0E)
        + Op.SWAP1()
        + Op.DUP1()
        + Op.DUP2()
        + Op.PUSH0()
        + Op.PUSH2(0x0102)
        + Op.PUSH3(0x010203)
        + Op.PUSH4(0x01020304)
        + Op.POP(0x01)
        # lllc tests insert codecopy when using lll(seq())
        + Op.CODECOPY(0, 16, 4),
        storage={},
    )
    address_to = pre.deploy_contract(
        balance=1_000_000_000_000_000_000,
        code=Op.MSTORE(0, Op.CALL(Op.GAS, missed_coverage, 0, 0, 0, 0, 0)) + Op.RETURN(0, 32),
    )

    if fork >= Cancun:
        tx = Transaction(
            sender=pre.fund_eoa(7_000_000_000_000_000_000),
            gas_limit=100000,
            to=address_to,
            data=b"",
            value=0,
            protected=False,
            access_list=[],
            max_fee_per_gas=10,
            max_priority_fee_per_gas=5,
        )
    else:
        tx = Transaction(
            sender=pre.fund_eoa(7_000_000_000_000_000_000),
            gas_limit=100000,
            to=address_to,
            data=b"",
            value=0,
            protected=False,
        )

    state_test(env=Environment(), pre=pre, post={}, tx=tx)

Parametrized Test Cases

This test case is only parametrized by fork and fixture format.

Test ID (Abbreviated)
...fork_Homestead-blockchain_test
...fork_Homestead-state_test
...fork_Byzantium-blockchain_test
...fork_Byzantium-state_test
...fork_Constantinople-blockchain_test
...fork_Constantinople-state_test
...fork_ConstantinopleFix-blockchain_test
...fork_ConstantinopleFix-state_test
...fork_Istanbul-blockchain_test
...fork_Istanbul-state_test
...fork_Berlin-blockchain_test
...fork_Berlin-state_test
...fork_London-blockchain_test
...fork_London-state_test
...fork_Paris-blockchain_test
...fork_Paris-state_test
...fork_Shanghai-blockchain_test
...fork_Shanghai-state_test
...fork_Cancun-blockchain_test
...fork_Cancun-state_test
...fork_Prague-blockchain_test
...fork_Prague-state_test
...fork_Osaka-blockchain_test
...fork_Osaka-state_test