From 906131f8826bac9f338075cb0c045d3739dc2948 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 26 Feb 2019 16:27:42 +1300 Subject: [PATCH] Add tests and benches for epoch processing --- eth2/state_processing/Cargo.toml | 9 ++++++ eth2/state_processing/benches/benches.rs | 28 +++++++++++++++++++ .../state_processing/src/epoch_processable.rs | 10 ++----- .../src/epoch_processable/tests.rs | 21 ++++++++++++++ 4 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 eth2/state_processing/benches/benches.rs create mode 100644 eth2/state_processing/src/epoch_processable/tests.rs diff --git a/eth2/state_processing/Cargo.toml b/eth2/state_processing/Cargo.toml index b6b0ea57c4..85ac8b42ad 100644 --- a/eth2/state_processing/Cargo.toml +++ b/eth2/state_processing/Cargo.toml @@ -4,6 +4,15 @@ version = "0.1.0" authors = ["Paul Hauner "] edition = "2018" +[[bench]] +name = "benches" +harness = false + +[dev-dependencies] +criterion = "0.2" +test_harness = { path = "../../beacon_node/beacon_chain/test_harness" } +env_logger = "0.6.0" + [dependencies] hashing = { path = "../utils/hashing" } int_to_bytes = { path = "../utils/int_to_bytes" } diff --git a/eth2/state_processing/benches/benches.rs b/eth2/state_processing/benches/benches.rs new file mode 100644 index 0000000000..29f9a1e868 --- /dev/null +++ b/eth2/state_processing/benches/benches.rs @@ -0,0 +1,28 @@ +use criterion::Criterion; +use criterion::{black_box, criterion_group, criterion_main}; +// use env_logger::{Builder, Env}; +use state_processing::SlotProcessable; +use types::{beacon_state::BeaconStateBuilder, ChainSpec, Hash256}; + +fn epoch_processing(c: &mut Criterion) { + // Builder::from_env(Env::default().default_filter_or("debug")).init(); + + let mut builder = BeaconStateBuilder::with_random_validators(8); + builder.spec = ChainSpec::few_validators(); + + builder.genesis().unwrap(); + builder.teleport_to_end_of_epoch(builder.spec.genesis_epoch + 4); + + let state = builder.build().unwrap(); + + c.bench_function("epoch processing", move |b| { + let spec = &builder.spec; + b.iter_with_setup( + || state.clone(), + |mut state| black_box(state.per_slot_processing(Hash256::zero(), spec).unwrap()), + ) + }); +} + +criterion_group!(benches, epoch_processing,); +criterion_main!(benches); diff --git a/eth2/state_processing/src/epoch_processable.rs b/eth2/state_processing/src/epoch_processable.rs index 9b6c98c863..2cee455a39 100644 --- a/eth2/state_processing/src/epoch_processable.rs +++ b/eth2/state_processing/src/epoch_processable.rs @@ -9,6 +9,8 @@ use types::{ Crosslink, Epoch, Hash256, InclusionError, PendingAttestation, RelativeEpoch, }; +mod tests; + macro_rules! safe_add_assign { ($a: expr, $b: expr) => { $a = $a.saturating_add($b); @@ -725,11 +727,3 @@ impl From for WinningRootError { WinningRootError::BeaconStateError(e) } } - -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} diff --git a/eth2/state_processing/src/epoch_processable/tests.rs b/eth2/state_processing/src/epoch_processable/tests.rs new file mode 100644 index 0000000000..353672fd1d --- /dev/null +++ b/eth2/state_processing/src/epoch_processable/tests.rs @@ -0,0 +1,21 @@ +#![cfg(test)] +use crate::EpochProcessable; +use env_logger::{Builder, Env}; +use types::beacon_state::BeaconStateBuilder; +use types::*; + +#[test] +fn runs_without_error() { + Builder::from_env(Env::default().default_filter_or("error")).init(); + + let mut builder = BeaconStateBuilder::with_random_validators(8); + builder.spec = ChainSpec::few_validators(); + + builder.genesis().unwrap(); + builder.teleport_to_end_of_epoch(builder.spec.genesis_epoch + 4); + + let mut state = builder.build().unwrap(); + + let spec = &builder.spec; + state.per_epoch_processing(spec).unwrap(); +}