Skip to content

Test Coverage

Documentation for tests/homestead/coverage/test_coverage.py.

Generate fixtures for these test cases with:

fill -v tests/homestead/coverage/test_coverage.py

Tests that address coverage gaps that result from updating ethereum/tests into EEST tests.

test_coverage(state_test, pre, fork)

This test covers 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
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
77
78
@pytest.mark.valid_from("Homestead")
def test_coverage(
    state_test: StateTestFiller,
    pre: Alloc,
    fork: Fork,
):
    """
    This test covers 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)