Skip to content

test_clz_jump_operation()

Documentation for tests/osaka/eip7939_count_leading_zeros/test_count_leading_zeros.py::test_clz_jump_operation@0f7c73a7.

Generate fixtures for these test cases for Osaka with:

fill -v tests/osaka/eip7939_count_leading_zeros/test_count_leading_zeros.py::test_clz_jump_operation --fork Osaka

Test CLZ opcode with valid and invalid jump.

Source code in tests/osaka/eip7939_count_leading_zeros/test_count_leading_zeros.py
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
@pytest.mark.valid_from("Osaka")
@pytest.mark.parametrize("opcode", [Op.JUMPI, Op.JUMP])
@pytest.mark.parametrize("valid_jump", [True, False])
@pytest.mark.parametrize("jumpi_condition", [True, False])
@pytest.mark.parametrize("bits", [0, 16, 64, 128, 255])
def test_clz_jump_operation(
    state_test: StateTestFiller,
    pre: Alloc,
    opcode: Op,
    valid_jump: bool,
    jumpi_condition: bool,
    bits: int,
):
    """Test CLZ opcode with valid and invalid jump."""
    if opcode == Op.JUMP and not jumpi_condition:
        pytest.skip("Duplicate case for JUMP.")

    code = Op.PUSH32(1 << bits)

    if opcode == Op.JUMPI:
        code += Op.PUSH1(jumpi_condition)

    code += Op.PUSH1(len(code) + 3) + opcode

    if valid_jump:
        code += Op.JUMPDEST

    code += Op.CLZ + Op.PUSH0 + Op.SSTORE + Op.RETURN(0, 0)

    callee_address = pre.deploy_contract(code=code)

    caller_address = pre.deploy_contract(
        code=Op.SSTORE(0, Op.CALL(gas=0xFFFF, address=callee_address)),
        storage={"0x00": "0xdeadbeef"},
    )

    tx = Transaction(
        to=caller_address,
        sender=pre.fund_eoa(),
        gas_limit=200_000,
    )

    expected_clz = 255 - bits

    post = {
        caller_address: Account(storage={"0x00": 1 if valid_jump or not jumpi_condition else 0}),
    }

    if valid_jump or not jumpi_condition:
        post[callee_address] = Account(storage={"0x00": expected_clz})

    state_test(pre=pre, post=post, tx=tx)

Parametrized Test Cases

The interactive table below is also available as a standalone page.

Test ID (Abbreviated) bits jumpi_condition valid_jump opcode
...fork_Osaka-state_test-bits_0-jumpi_condition_True-valid_jump_True-opcode_JUMPI 0 True True JUMPI
...fork_Osaka-state_test-bits_0-jumpi_condition_True-valid_jump_True-opcode_JUMP 0 True True JUMP
...fork_Osaka-state_test-bits_0-jumpi_condition_True-valid_jump_False-opcode_JUMPI 0 True False JUMPI
...fork_Osaka-state_test-bits_0-jumpi_condition_True-valid_jump_False-opcode_JUMP 0 True False JUMP
...fork_Osaka-state_test-bits_0-jumpi_condition_False-valid_jump_True-opcode_JUMPI 0 False True JUMPI
...fork_Osaka-state_test-bits_0-jumpi_condition_False-valid_jump_True-opcode_JUMP 0 False True JUMP
...fork_Osaka-state_test-bits_0-jumpi_condition_False-valid_jump_False-opcode_JUMPI 0 False False JUMPI
...fork_Osaka-state_test-bits_0-jumpi_condition_False-valid_jump_False-opcode_JUMP 0 False False JUMP
...fork_Osaka-state_test-bits_16-jumpi_condition_True-valid_jump_True-opcode_JUMPI 16 True True JUMPI
...fork_Osaka-state_test-bits_16-jumpi_condition_True-valid_jump_True-opcode_JUMP 16 True True JUMP
...fork_Osaka-state_test-bits_16-jumpi_condition_True-valid_jump_False-opcode_JUMPI 16 True False JUMPI
...fork_Osaka-state_test-bits_16-jumpi_condition_True-valid_jump_False-opcode_JUMP 16 True False JUMP
...fork_Osaka-state_test-bits_16-jumpi_condition_False-valid_jump_True-opcode_JUMPI 16 False True JUMPI
...fork_Osaka-state_test-bits_16-jumpi_condition_False-valid_jump_True-opcode_JUMP 16 False True JUMP
...fork_Osaka-state_test-bits_16-jumpi_condition_False-valid_jump_False-opcode_JUMPI 16 False False JUMPI
...fork_Osaka-state_test-bits_16-jumpi_condition_False-valid_jump_False-opcode_JUMP 16 False False JUMP
...fork_Osaka-state_test-bits_64-jumpi_condition_True-valid_jump_True-opcode_JUMPI 64 True True JUMPI
...fork_Osaka-state_test-bits_64-jumpi_condition_True-valid_jump_True-opcode_JUMP 64 True True JUMP
...fork_Osaka-state_test-bits_64-jumpi_condition_True-valid_jump_False-opcode_JUMPI 64 True False JUMPI
...fork_Osaka-state_test-bits_64-jumpi_condition_True-valid_jump_False-opcode_JUMP 64 True False JUMP
...fork_Osaka-state_test-bits_64-jumpi_condition_False-valid_jump_True-opcode_JUMPI 64 False True JUMPI
...fork_Osaka-state_test-bits_64-jumpi_condition_False-valid_jump_True-opcode_JUMP 64 False True JUMP
...fork_Osaka-state_test-bits_64-jumpi_condition_False-valid_jump_False-opcode_JUMPI 64 False False JUMPI
...fork_Osaka-state_test-bits_64-jumpi_condition_False-valid_jump_False-opcode_JUMP 64 False False JUMP
...fork_Osaka-state_test-bits_128-jumpi_condition_True-valid_jump_True-opcode_JUMPI 128 True True JUMPI
...fork_Osaka-state_test-bits_128-jumpi_condition_True-valid_jump_True-opcode_JUMP 128 True True JUMP
...fork_Osaka-state_test-bits_128-jumpi_condition_True-valid_jump_False-opcode_JUMPI 128 True False JUMPI
...fork_Osaka-state_test-bits_128-jumpi_condition_True-valid_jump_False-opcode_JUMP 128 True False JUMP
...fork_Osaka-state_test-bits_128-jumpi_condition_False-valid_jump_True-opcode_JUMPI 128 False True JUMPI
...fork_Osaka-state_test-bits_128-jumpi_condition_False-valid_jump_True-opcode_JUMP 128 False True JUMP
...fork_Osaka-state_test-bits_128-jumpi_condition_False-valid_jump_False-opcode_JUMPI 128 False False JUMPI
...fork_Osaka-state_test-bits_128-jumpi_condition_False-valid_jump_False-opcode_JUMP 128 False False JUMP
...fork_Osaka-state_test-bits_255-jumpi_condition_True-valid_jump_True-opcode_JUMPI 255 True True JUMPI
...fork_Osaka-state_test-bits_255-jumpi_condition_True-valid_jump_True-opcode_JUMP 255 True True JUMP
...fork_Osaka-state_test-bits_255-jumpi_condition_True-valid_jump_False-opcode_JUMPI 255 True False JUMPI
...fork_Osaka-state_test-bits_255-jumpi_condition_True-valid_jump_False-opcode_JUMP 255 True False JUMP
...fork_Osaka-state_test-bits_255-jumpi_condition_False-valid_jump_True-opcode_JUMPI 255 False True JUMPI
...fork_Osaka-state_test-bits_255-jumpi_condition_False-valid_jump_True-opcode_JUMP 255 False True JUMP
...fork_Osaka-state_test-bits_255-jumpi_condition_False-valid_jump_False-opcode_JUMPI 255 False False JUMPI
...fork_Osaka-state_test-bits_255-jumpi_condition_False-valid_jump_False-opcode_JUMP 255 False False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_0-jumpi_condition_True-valid_jump_True-opcode_JUMPI 0 True True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_0-jumpi_condition_True-valid_jump_True-opcode_JUMP 0 True True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_0-jumpi_condition_True-valid_jump_False-opcode_JUMPI 0 True False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_0-jumpi_condition_True-valid_jump_False-opcode_JUMP 0 True False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_0-jumpi_condition_False-valid_jump_True-opcode_JUMPI 0 False True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_0-jumpi_condition_False-valid_jump_True-opcode_JUMP 0 False True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_0-jumpi_condition_False-valid_jump_False-opcode_JUMPI 0 False False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_0-jumpi_condition_False-valid_jump_False-opcode_JUMP 0 False False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_16-jumpi_condition_True-valid_jump_True-opcode_JUMPI 16 True True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_16-jumpi_condition_True-valid_jump_True-opcode_JUMP 16 True True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_16-jumpi_condition_True-valid_jump_False-opcode_JUMPI 16 True False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_16-jumpi_condition_True-valid_jump_False-opcode_JUMP 16 True False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_16-jumpi_condition_False-valid_jump_True-opcode_JUMPI 16 False True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_16-jumpi_condition_False-valid_jump_True-opcode_JUMP 16 False True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_16-jumpi_condition_False-valid_jump_False-opcode_JUMPI 16 False False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_16-jumpi_condition_False-valid_jump_False-opcode_JUMP 16 False False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_64-jumpi_condition_True-valid_jump_True-opcode_JUMPI 64 True True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_64-jumpi_condition_True-valid_jump_True-opcode_JUMP 64 True True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_64-jumpi_condition_True-valid_jump_False-opcode_JUMPI 64 True False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_64-jumpi_condition_True-valid_jump_False-opcode_JUMP 64 True False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_64-jumpi_condition_False-valid_jump_True-opcode_JUMPI 64 False True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_64-jumpi_condition_False-valid_jump_True-opcode_JUMP 64 False True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_64-jumpi_condition_False-valid_jump_False-opcode_JUMPI 64 False False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_64-jumpi_condition_False-valid_jump_False-opcode_JUMP 64 False False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_128-jumpi_condition_True-valid_jump_True-opcode_JUMPI 128 True True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_128-jumpi_condition_True-valid_jump_True-opcode_JUMP 128 True True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_128-jumpi_condition_True-valid_jump_False-opcode_JUMPI 128 True False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_128-jumpi_condition_True-valid_jump_False-opcode_JUMP 128 True False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_128-jumpi_condition_False-valid_jump_True-opcode_JUMPI 128 False True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_128-jumpi_condition_False-valid_jump_True-opcode_JUMP 128 False True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_128-jumpi_condition_False-valid_jump_False-opcode_JUMPI 128 False False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_128-jumpi_condition_False-valid_jump_False-opcode_JUMP 128 False False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_255-jumpi_condition_True-valid_jump_True-opcode_JUMPI 255 True True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_255-jumpi_condition_True-valid_jump_True-opcode_JUMP 255 True True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_255-jumpi_condition_True-valid_jump_False-opcode_JUMPI 255 True False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_255-jumpi_condition_True-valid_jump_False-opcode_JUMP 255 True False JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_255-jumpi_condition_False-valid_jump_True-opcode_JUMPI 255 False True JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_255-jumpi_condition_False-valid_jump_True-opcode_JUMP 255 False True JUMP
...fork_Osaka-blockchain_test_from_state_test-bits_255-jumpi_condition_False-valid_jump_False-opcode_JUMPI 255 False False JUMPI
...fork_Osaka-blockchain_test_from_state_test-bits_255-jumpi_condition_False-valid_jump_False-opcode_JUMP 255 False False JUMP