Skip to content

test_clz_jump_operation()

Documentation for tests/osaka/eip7939_count_leading_zeros/test_count_leading_zeros.py::test_clz_jump_operation@88e9fb8f.

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
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
@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,
) -> None:
    """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