utilize new randomize functions in process_inactivity_updates testing
This commit is contained in:
parent
d38af7a158
commit
049210bd8a
|
@ -8,6 +8,9 @@ from eth2spec.test.helpers.state import (
|
||||||
from eth2spec.test.helpers.epoch_processing import (
|
from eth2spec.test.helpers.epoch_processing import (
|
||||||
run_epoch_processing_with
|
run_epoch_processing_with
|
||||||
)
|
)
|
||||||
|
from eth2spec.test.helpers.random import (
|
||||||
|
randomize_attestation_participation,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def set_full_participation(spec, state):
|
def set_full_participation(spec, state):
|
||||||
|
@ -16,37 +19,10 @@ def set_full_participation(spec, state):
|
||||||
full_flags = spec.add_flag(full_flags, flag_index)
|
full_flags = spec.add_flag(full_flags, flag_index)
|
||||||
|
|
||||||
for index in range(len(state.validators)):
|
for index in range(len(state.validators)):
|
||||||
|
state.current_epoch_participation[index] = full_flags
|
||||||
state.previous_epoch_participation[index] = full_flags
|
state.previous_epoch_participation[index] = full_flags
|
||||||
|
|
||||||
|
|
||||||
def randomize_flags(spec, state, rng=Random(2080)):
|
|
||||||
for index in range(len(state.validators)):
|
|
||||||
# ~1/3 have bad head or bad target or not timely enough
|
|
||||||
is_timely_correct_head = rng.randint(0, 2) != 0
|
|
||||||
flags = state.previous_epoch_participation[index]
|
|
||||||
|
|
||||||
def set_flag(index, value):
|
|
||||||
nonlocal flags
|
|
||||||
flag = spec.ParticipationFlags(2**index)
|
|
||||||
if value:
|
|
||||||
flags |= flag
|
|
||||||
else:
|
|
||||||
flags &= 0xff ^ flag
|
|
||||||
|
|
||||||
set_flag(spec.TIMELY_HEAD_FLAG_INDEX, is_timely_correct_head)
|
|
||||||
if is_timely_correct_head:
|
|
||||||
# If timely head, then must be timely target
|
|
||||||
set_flag(spec.TIMELY_TARGET_FLAG_INDEX, True)
|
|
||||||
# If timely head, then must be timely source
|
|
||||||
set_flag(spec.TIMELY_SOURCE_FLAG_INDEX, True)
|
|
||||||
else:
|
|
||||||
# ~50% of remaining have bad target or not timely enough
|
|
||||||
set_flag(spec.TIMELY_TARGET_FLAG_INDEX, rng.choice([True, False]))
|
|
||||||
# ~50% of remaining have bad source or not timely enough
|
|
||||||
set_flag(spec.TIMELY_SOURCE_FLAG_INDEX, rng.choice([True, False]))
|
|
||||||
state.previous_epoch_participation[index] = flags
|
|
||||||
|
|
||||||
|
|
||||||
def run_process_inactivity_updates(spec, state):
|
def run_process_inactivity_updates(spec, state):
|
||||||
yield from run_epoch_processing_with(spec, state, 'process_inactivity_updates')
|
yield from run_epoch_processing_with(spec, state, 'process_inactivity_updates')
|
||||||
|
|
||||||
|
@ -75,7 +51,7 @@ def test_all_zero_inactivity_scores_empty_participation(spec, state):
|
||||||
def test_all_zero_inactivity_scores_random_participation(spec, state):
|
def test_all_zero_inactivity_scores_random_participation(spec, state):
|
||||||
next_epoch_via_block(spec, state)
|
next_epoch_via_block(spec, state)
|
||||||
state.inactivity_scores = [0] * len(state.validators)
|
state.inactivity_scores = [0] * len(state.validators)
|
||||||
randomize_flags(spec, state)
|
randomize_attestation_participation(spec, state, rng=Random(5555))
|
||||||
yield from run_process_inactivity_updates(spec, state)
|
yield from run_process_inactivity_updates(spec, state)
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,8 +59,8 @@ def test_all_zero_inactivity_scores_random_participation(spec, state):
|
||||||
@spec_state_test
|
@spec_state_test
|
||||||
def test_all_zero_inactivity_scores_full_participation(spec, state):
|
def test_all_zero_inactivity_scores_full_participation(spec, state):
|
||||||
next_epoch_via_block(spec, state)
|
next_epoch_via_block(spec, state)
|
||||||
state.inactivity_scores = [0] * len(state.validators)
|
|
||||||
set_full_participation(spec, state)
|
set_full_participation(spec, state)
|
||||||
|
state.inactivity_scores = [0] * len(state.validators)
|
||||||
yield from run_process_inactivity_updates(spec, state)
|
yield from run_process_inactivity_updates(spec, state)
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,8 +76,8 @@ def test_random_inactivity_scores_empty_participation(spec, state):
|
||||||
@spec_state_test
|
@spec_state_test
|
||||||
def test_random_inactivity_scores_random_participation(spec, state):
|
def test_random_inactivity_scores_random_participation(spec, state):
|
||||||
next_epoch_via_block(spec, state)
|
next_epoch_via_block(spec, state)
|
||||||
|
randomize_attestation_participation(spec, state, rng=Random(22222))
|
||||||
randomize_inactivity_scores(spec, state, rng=Random(22222))
|
randomize_inactivity_scores(spec, state, rng=Random(22222))
|
||||||
randomize_flags(spec, state)
|
|
||||||
yield from run_process_inactivity_updates(spec, state)
|
yield from run_process_inactivity_updates(spec, state)
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,6 +85,6 @@ def test_random_inactivity_scores_random_participation(spec, state):
|
||||||
@spec_state_test
|
@spec_state_test
|
||||||
def test_random_inactivity_scores_full_participation(spec, state):
|
def test_random_inactivity_scores_full_participation(spec, state):
|
||||||
next_epoch_via_block(spec, state)
|
next_epoch_via_block(spec, state)
|
||||||
randomize_inactivity_scores(spec, state, rng=Random(33333))
|
|
||||||
set_full_participation(spec, state)
|
set_full_participation(spec, state)
|
||||||
|
randomize_inactivity_scores(spec, state, rng=Random(33333))
|
||||||
yield from run_process_inactivity_updates(spec, state)
|
yield from run_process_inactivity_updates(spec, state)
|
||||||
|
|
Loading…
Reference in New Issue