Move benching_utils structs into types

This commit is contained in:
Paul Hauner 2019-03-11 11:17:27 +11:00
parent 6ae99a1462
commit 0b7082e2b9
No known key found for this signature in database
GPG Key ID: D362883A9218FCC6
12 changed files with 25 additions and 54 deletions

View File

@ -4,7 +4,6 @@ members = [
"eth2/block_proposer",
"eth2/fork_choice",
"eth2/state_processing",
"eth2/state_processing/benching_utils",
"eth2/types",
"eth2/utils/bls",
"eth2/utils/boolean-bitfield",

View File

@ -11,7 +11,6 @@ harness = false
[dev-dependencies]
criterion = "0.2"
env_logger = "0.6.0"
benching_utils = { path = "./benching_utils" }
[dependencies]
bls = { path = "../utils/bls" }

View File

@ -1,4 +1,3 @@
use benching_utils::{BeaconBlockBencher, BeaconStateBencher};
use criterion::Criterion;
use criterion::{black_box, Benchmark};
use ssz::TreeHash;
@ -10,6 +9,7 @@ use state_processing::{
verify_block_signature,
},
};
use types::test_utils::{TestingBeaconBlockBuilder, TestingBeaconStateBuilder};
use types::*;
/// Run the benchmarking suite on a foundation spec with 16,384 validators.
@ -82,7 +82,7 @@ pub fn block_processing_16k_validators(c: &mut Criterion) {
}
fn build_state(validator_count: usize, spec: &ChainSpec) -> (BeaconState, Vec<Keypair>) {
let mut builder = BeaconStateBencher::new(validator_count, &spec);
let mut builder = TestingBeaconStateBuilder::new(validator_count, &spec);
// Set the state to be just before an epoch transition.
let target_slot = (spec.genesis_epoch + 4).end_slot(spec.slots_per_epoch);
@ -95,7 +95,7 @@ fn build_state(validator_count: usize, spec: &ChainSpec) -> (BeaconState, Vec<Ke
}
fn build_block(state: &mut BeaconState, keypairs: &[Keypair], spec: &ChainSpec) -> BeaconBlock {
let mut builder = BeaconBlockBencher::new(spec);
let mut builder = TestingBeaconBlockBuilder::new(spec);
builder.set_slot(state.slot);

View File

@ -1,4 +1,3 @@
use benching_utils::BeaconStateBencher;
use criterion::Criterion;
use criterion::{black_box, Benchmark};
use ssz::TreeHash;
@ -11,6 +10,7 @@ use state_processing::{
update_latest_slashed_balances,
},
};
use types::test_utils::TestingBeaconStateBuilder;
use types::{validator_registry::get_active_validator_indices, *};
pub const BENCHING_SAMPLE_SIZE: usize = 10;
@ -22,7 +22,7 @@ pub fn epoch_processing_16k_validators(c: &mut Criterion) {
let validator_count = 300_032;
let mut builder = BeaconStateBencher::new(validator_count, &spec);
let mut builder = TestingBeaconStateBuilder::new(validator_count, &spec);
// Set the state to be just before an epoch transition.
let target_slot = (spec.genesis_epoch + 4).end_slot(spec.slots_per_epoch);

View File

@ -1,17 +0,0 @@
[package]
name = "benching_utils"
version = "0.1.0"
authors = ["Paul Hauner <paul@paulhauner.com>"]
edition = "2018"
[dependencies]
bls = { path = "../../utils/bls" }
hashing = { path = "../../utils/hashing" }
int_to_bytes = { path = "../../utils/int_to_bytes" }
integer-sqrt = "0.1"
log = "0.4"
merkle_proof = { path = "../../utils/merkle_proof" }
ssz = { path = "../../utils/ssz" }
ssz_derive = { path = "../../utils/ssz_derive" }
types = { path = "../../types" }
rayon = "1.0"

View File

@ -1,5 +0,0 @@
mod beacon_block_bencher;
mod beacon_state_bencher;
pub use beacon_block_bencher::BeaconBlockBencher;
pub use beacon_state_bencher::BeaconStateBencher;

View File

@ -1,7 +1,7 @@
#![cfg(test)]
use crate::per_epoch_processing;
use benching_utils::BeaconStateBencher;
use env_logger::{Builder, Env};
use types::test_utils::TestingBeaconStateBuilder;
use types::*;
#[test]
@ -10,7 +10,7 @@ fn runs_without_error() {
let spec = ChainSpec::few_validators();
let mut builder = BeaconStateBencher::new(8, &spec);
let mut builder = TestingBeaconStateBuilder::new(8, &spec);
let target_slot = (spec.genesis_epoch + 4).end_slot(spec.slots_per_epoch);
builder.teleport_to_slot(target_slot, &spec);

View File

@ -6,7 +6,7 @@ use ssz::TreeHash;
/// Builds a `BeaconState` for use in production.
///
/// This struct should not be modified for use in testing scenarios. Use `TestingBeaconStateBuilder` for that purpose.
/// This struct should _not_ be modified for use in testing scenarios. Use `TestingBeaconStateBuilder` for that purpose.
///
/// This struct should remain safe and sensible for production usage.
pub struct BeaconStateBuilder {

View File

@ -1,29 +1,20 @@
#![cfg(test)]
use super::*;
use crate::test_utils::TestingBeaconStateBuilder;
use crate::test_utils::{SeedableRng, TestRandom, XorShiftRng};
use crate::{BeaconState, ChainSpec};
use ssz::{ssz_encode, Decodable};
#[test]
pub fn can_produce_genesis_block() {
let mut builder = BeaconStateBuilder::new(2);
builder.build().unwrap();
}
/// Tests that `get_attestation_participants` is consistent with the result of
/// get_crosslink_committees_at_slot` with a full bitfield.
#[test]
pub fn get_attestation_participants_consistency() {
let mut rng = XorShiftRng::from_seed([42; 16]);
let mut builder = BeaconStateBuilder::new(8);
builder.spec = ChainSpec::few_validators();
builder.build().unwrap();
let mut state = builder.cloned_state();
let spec = builder.spec.clone();
let spec = ChainSpec::few_validators();
let builder = TestingBeaconStateBuilder::new(8, &spec);
let (mut state, _keypairs) = builder.build();
state
.build_epoch_cache(RelativeEpoch::Previous, &spec)

View File

@ -1,5 +1,7 @@
mod test_random;
mod testing_attestation_builder;
mod testing_beacon_block_builder;
mod testing_beacon_state_builder;
mod testing_deposit_builder;
mod testing_transfer_builder;
mod testing_voluntary_exit_builder;
@ -7,6 +9,8 @@ mod testing_voluntary_exit_builder;
pub use rand::{prng::XorShiftRng, SeedableRng};
pub use test_random::TestRandom;
pub use testing_attestation_builder::TestingAttestationBuilder;
pub use testing_beacon_block_builder::TestingBeaconBlockBuilder;
pub use testing_beacon_state_builder::TestingBeaconStateBuilder;
pub use testing_deposit_builder::TestingDepositBuilder;
pub use testing_transfer_builder::TestingTransferBuilder;
pub use testing_voluntary_exit_builder::TestingVoluntaryExitBuilder;

View File

@ -1,6 +1,4 @@
use rayon::prelude::*;
use ssz::{SignedRoot, TreeHash};
use types::{
use crate::{
attester_slashing::AttesterSlashingBuilder,
proposer_slashing::ProposerSlashingBuilder,
test_utils::{
@ -9,12 +7,14 @@ use types::{
},
*,
};
use rayon::prelude::*;
use ssz::{SignedRoot, TreeHash};
pub struct BeaconBlockBencher {
pub struct TestingBeaconBlockBuilder {
block: BeaconBlock,
}
impl BeaconBlockBencher {
impl TestingBeaconBlockBuilder {
pub fn new(spec: &ChainSpec) -> Self {
Self {
block: BeaconBlock::genesis(spec.zero_hash, spec),

View File

@ -1,15 +1,15 @@
use crate::beacon_state::BeaconStateBuilder;
use crate::*;
use bls::get_withdrawal_credentials;
use int_to_bytes::int_to_bytes48;
use rayon::prelude::*;
use types::beacon_state::BeaconStateBuilder;
use types::*;
pub struct BeaconStateBencher {
pub struct TestingBeaconStateBuilder {
state: BeaconState,
keypairs: Vec<Keypair>,
}
impl BeaconStateBencher {
impl TestingBeaconStateBuilder {
pub fn new(validator_count: usize, spec: &ChainSpec) -> Self {
let keypairs: Vec<Keypair> = (0..validator_count)
.collect::<Vec<usize>>()