Skip to content

test_worst_tstore()

Documentation for tests/benchmark/test_worst_compute.py::test_worst_tstore@e9958ed2.

Generate fixtures for these test cases for Osaka with:

fill -v tests/benchmark/test_worst_compute.py::test_worst_tstore -m benchmark

Test running a block with as many TSTORE calls as possible.

Source code in tests/benchmark/test_worst_compute.py
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
@pytest.mark.parametrize("key_mut", [True, False])
@pytest.mark.parametrize("dense_val_mut", [True, False])
def test_worst_tstore(
    benchmark_test: BenchmarkTestFiller,
    key_mut: bool,
    dense_val_mut: bool,
) -> None:
    """Test running a block with as many TSTORE calls as possible."""
    init_key = 42
    setup = Op.PUSH1(init_key)

    # If `dense_val_mut` is set, we use GAS as a cheap way of always
    # storing a different value than
    # the previous one.
    attack_block = Op.TSTORE(Op.DUP2, Op.GAS if dense_val_mut else Op.DUP1)

    # If `key_mut` is True, we mutate the key on every iteration of the
    # big loop.
    cleanup = Op.POP + Op.GAS if key_mut else Bytecode()

    benchmark_test(
        code_generator=JumpLoopGenerator(setup=setup, attack_block=attack_block, cleanup=cleanup),
    )

Parametrized Test Cases

This test case is only parametrized by fork.

Test ID (Abbreviated) dense_val_mut key_mut
...fork_Prague-blockchain_test-dense_val_mut_True-key_mut_True True True
...fork_Prague-blockchain_test-dense_val_mut_True-key_mut_False True False
...fork_Prague-blockchain_test-dense_val_mut_False-key_mut_True False True
...fork_Prague-blockchain_test-dense_val_mut_False-key_mut_False False False
...fork_Osaka-blockchain_test-dense_val_mut_True-key_mut_True True True
...fork_Osaka-blockchain_test-dense_val_mut_True-key_mut_False True False
...fork_Osaka-blockchain_test-dense_val_mut_False-key_mut_True False True
...fork_Osaka-blockchain_test-dense_val_mut_False-key_mut_False False False