diff --git a/src/lib.rs b/src/lib.rs index dfe8d55..600f959 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -61,6 +61,7 @@ pub fn time_to_blockheight(time: DateTime, bi: BlockchainInfo) -> BlockHeig #[cfg(test)] mod tests { use super::*; + use chrono::Duration; #[test] fn one_block_time_away() { @@ -100,4 +101,30 @@ mod tests { let result = time_to_blockheight(wanted_negative_block_time, blockchain_info); assert_eq!(result, -1); } + + #[test] + fn a_next_block_on_some_blockchains() { + // Doesn't feel like an overly good test - but I can't think of anyother way that's "dynamic" + // to me manually updating the times above + let bi: BlockchainInfo = BlockchainSupported::BTC.into(); + let wanted_time = bi.latest_block_time + Duration::seconds(bi.block_period as i64 + 1); + let bh = time_to_blockheight_specific_chain(wanted_time, BlockchainSupported::BTC); + assert_eq!(bh, bi.latest_block_height + 1); + let bi: BlockchainInfo = BlockchainSupported::BSV.into(); + let wanted_time = bi.latest_block_time + Duration::seconds(bi.block_period as i64 + 2); + let bh = time_to_blockheight_specific_chain(wanted_time, BlockchainSupported::BSV); + assert_eq!(bh, bi.latest_block_height + 1); + let bi: BlockchainInfo = BlockchainSupported::XMR.into(); + let wanted_time = bi.latest_block_time + Duration::seconds(bi.block_period as i64 + 3); + let bh = time_to_blockheight_specific_chain(wanted_time, BlockchainSupported::XMR); + assert_eq!(bh, bi.latest_block_height + 1); + let bi: BlockchainInfo = BlockchainSupported::ETH.into(); + let wanted_time = bi.latest_block_time + Duration::seconds(bi.block_period as i64 + 4); + let bh = time_to_blockheight_specific_chain(wanted_time, BlockchainSupported::ETH); + assert_eq!(bh, bi.latest_block_height + 1); + let bi: BlockchainInfo = BlockchainSupported::ETH.into(); + let wanted_time = bi.latest_block_time + Duration::seconds(bi.block_period as i64 + 5); + let bh = time_to_blockheight_specific_chain(wanted_time, BlockchainSupported::XMR); + assert_ne!(bh, bi.latest_block_height + 1); + } }