From 6a6e600e4868d31cf739d5978c8d27f91c042a3f Mon Sep 17 00:00:00 2001 From: Yeastplume Date: Tue, 27 Mar 2018 19:15:42 +0100 Subject: [PATCH] tests for difficulty adjustment scenarios (#887) * tests for difficulty adjustment scenarios * ignore test --- chain/tests/mine_simple_chain.rs | 30 ++++++++++++++++++++++++++ core/tests/consensus.rs | 36 ++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/chain/tests/mine_simple_chain.rs b/chain/tests/mine_simple_chain.rs index cdb5fc69e..741f1d94f 100644 --- a/chain/tests/mine_simple_chain.rs +++ b/chain/tests/mine_simple_chain.rs @@ -433,3 +433,33 @@ fn prepare_block_nosum( b.header.pow = core::core::Proof::random(proof_size); b } + +#[test] +#[ignore] +fn actual_diff_iter_output() { + global::set_mining_mode(ChainTypes::AutomatedTesting); + let genesis_block = pow::mine_genesis_block(None).unwrap(); + let chain = chain::Chain::init( + "../.grin".to_string(), + Arc::new(NoopAdapter {}), + genesis_block, + pow::verify_size, + ).unwrap(); + let iter = chain.difficulty_iter(); + let mut last_time = 0; + let mut first = true; + for i in iter.into_iter() { + let elem = i.unwrap(); + if first { + last_time = elem.0; + first = false; + } + println!( + "next_difficulty time: {}, diff: {}, duration: {} ", + elem.0, + elem.1.into_num(), + last_time - elem.0 + ); + last_time = elem.0; + } +} diff --git a/core/tests/consensus.rs b/core/tests/consensus.rs index efb3335b2..7abffc012 100644 --- a/core/tests/consensus.rs +++ b/core/tests/consensus.rs @@ -64,6 +64,18 @@ fn add_block( return_chain } +// Adds many defined blocks +fn add_blocks( + intervals: Vec, + chain_sim: Vec>, +) -> Vec> { + let mut return_chain = chain_sim.clone(); + for i in intervals { + return_chain = add_block(i, return_chain.clone()); + } + return_chain +} + // Adds another n 'blocks' to the iterator, with difficulty calculated fn add_block_repeated( interval: u64, @@ -83,8 +95,13 @@ fn print_chain_sim(chain_sim: &Vec>) { let mut chain_sim = chain_sim.clone(); chain_sim.reverse(); let mut last_time = 0; + let mut first = true; chain_sim.iter().enumerate().for_each(|(i, b)| { let block = b.as_ref().unwrap(); + if first { + last_time = block.0; + first = false; + } println!( "Height: {}, Time: {}, Interval: {}, Next network difficulty:{}", i, @@ -179,6 +196,25 @@ fn adjustment_scenarios() { println!("*********************************************************"); print_chain_sim(&chain_sim); println!("*********************************************************"); + + // Actual testnet 2 timings + let testnet2_intervals = [ + 2880, 16701, 1882, 3466, 614, 605, 1551, 538, 931, 23, 690, 1397, 2112, 2058, 605, 721, + 2148, 1605, 134, 1234, 1569, 482, 1775, 2732, 540, 958, 883, 3475, 518, 1346, 1926, 780, + 865, 269, 141, 105, 781, 289, 256, 709, 68, 165, 1813, 3899, 1458, 955, 2336, 239, 674, + 1059, 157, 214, 15, 157, 558, 1945, 1677, + ]; + + global::set_mining_mode(global::ChainTypes::Testnet2); + let chain_sim = create_chain_sim(global::initial_block_difficulty()); + let chain_sim = add_blocks(testnet2_intervals.to_vec(), chain_sim); + + println!(""); + println!("*********************************************************"); + println!("Scenario 6) Testnet2"); + println!("*********************************************************"); + print_chain_sim(&chain_sim); + println!("*********************************************************"); } /// Checks different next_target adjustments and difficulty boundaries