Merge rust-bitcoin/rust-bitcoin#4217: primitives: Increase test coverage in `block.rs`
c1ea20b958
Increase test coverage in block.rs (Jamil Lambert, PhD)3e750d7ba1
Create test helper function to create a header (Jamil Lambert, PhD) Pull request description: Add tests to `primitive::block` module to increase test coverage. Coverage tested with `cargo-tarpaulin` `block.rs` coverage: before 13.79% after 100% ACKs for top commit: apoelstra: ACK c1ea20b958f448a5a35073ce3d5bd5394918eb9b; successfully ran local tests tcharding: ACKc1ea20b958
Tree-SHA512: 70bbdce9c45e9bdcea76026b7a27582a32b796099329c429527d7dfe574788604020e53e417afd3cf53886ceb87df37b6dcb34a7ff40260b9d8a3811e22a478c
This commit is contained in:
commit
1798679145
|
@ -361,6 +361,17 @@ impl<'a> Arbitrary<'a> for Version {
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
fn dummy_header() -> Header {
|
||||||
|
Header {
|
||||||
|
version: Version::ONE,
|
||||||
|
prev_blockhash: BlockHash::from_byte_array([0x99; 32]),
|
||||||
|
merkle_root: TxMerkleNode::from_byte_array([0x77; 32]),
|
||||||
|
time: Timestamp::from(2),
|
||||||
|
bits: CompactTarget::from_consensus(3),
|
||||||
|
nonce: 4,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn version_is_not_signalling_with_invalid_bit() {
|
fn version_is_not_signalling_with_invalid_bit() {
|
||||||
let arbitrary_version = Version::from_consensus(1_234_567_890);
|
let arbitrary_version = Version::from_consensus(1_234_567_890);
|
||||||
|
@ -395,17 +406,16 @@ mod tests {
|
||||||
assert_eq!(version.to_consensus(), 1_234_567_890);
|
assert_eq!(version.to_consensus(), 1_234_567_890);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn version_default() {
|
||||||
|
let version = Version::default();
|
||||||
|
assert_eq!(version.to_consensus(), Version::NO_SOFT_FORK_SIGNALLING.to_consensus());
|
||||||
|
}
|
||||||
|
|
||||||
// Check that the size of the header consensus serialization matches the const SIZE value
|
// Check that the size of the header consensus serialization matches the const SIZE value
|
||||||
#[test]
|
#[test]
|
||||||
fn header_size() {
|
fn header_size() {
|
||||||
let header = Header {
|
let header = dummy_header();
|
||||||
version: Version::ONE,
|
|
||||||
prev_blockhash: BlockHash::from_byte_array([0x99; 32]),
|
|
||||||
merkle_root: TxMerkleNode::from_byte_array([0x77; 32]),
|
|
||||||
time: Timestamp::from(2),
|
|
||||||
bits: CompactTarget::from_consensus(3),
|
|
||||||
nonce: 4,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Calculate the size of the block header in bytes from the sum of the serialized lengths
|
// Calculate the size of the block header in bytes from the sum of the serialized lengths
|
||||||
// it's fields: version, prev_blockhash, merkle_root, time, bits, nonce.
|
// it's fields: version, prev_blockhash, merkle_root, time, bits, nonce.
|
||||||
|
@ -418,4 +428,108 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(header_size, Header::SIZE);
|
assert_eq!(header_size, Header::SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
fn block_new_unchecked() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let transactions = vec![];
|
||||||
|
let block = Block::new_unchecked(header, transactions.clone());
|
||||||
|
assert_eq!(block.header, header);
|
||||||
|
assert_eq!(block.transactions, transactions);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
fn block_assume_checked() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let transactions = vec![];
|
||||||
|
let block = Block::new_unchecked(header, transactions.clone());
|
||||||
|
let witness_root = Some(WitnessMerkleNode::from_byte_array([0x88; 32]));
|
||||||
|
let checked_block = block.assume_checked(witness_root);
|
||||||
|
assert_eq!(checked_block.header(), &header);
|
||||||
|
assert_eq!(checked_block.transactions(), &transactions);
|
||||||
|
assert_eq!(checked_block.cached_witness_root(), witness_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
fn block_into_parts() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let transactions = vec![];
|
||||||
|
let block = Block::new_unchecked(header, transactions.clone());
|
||||||
|
let (block_header, block_transactions) = block.into_parts();
|
||||||
|
assert_eq!(block_header, header);
|
||||||
|
assert_eq!(block_transactions, transactions);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
fn block_cached_witness_root() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let transactions = vec![];
|
||||||
|
let block = Block::new_unchecked(header, transactions);
|
||||||
|
let witness_root = Some(WitnessMerkleNode::from_byte_array([0x88; 32]));
|
||||||
|
let checked_block = block.assume_checked(witness_root);
|
||||||
|
assert_eq!(checked_block.cached_witness_root(), witness_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
fn block_block_hash() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let transactions = vec![];
|
||||||
|
let block = Block::new_unchecked(header, transactions);
|
||||||
|
assert_eq!(block.block_hash(), header.block_hash());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn block_hash_from_header() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let block_hash = header.block_hash();
|
||||||
|
assert_eq!(block_hash, BlockHash::from(header));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn block_hash_from_header_ref() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let block_hash: BlockHash = BlockHash::from(&header);
|
||||||
|
assert_eq!(block_hash, header.block_hash());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
fn block_hash_from_block() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let transactions = vec![];
|
||||||
|
let block = Block::new_unchecked(header, transactions);
|
||||||
|
let block_hash: BlockHash = BlockHash::from(block);
|
||||||
|
assert_eq!(block_hash, header.block_hash());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "alloc")]
|
||||||
|
fn block_hash_from_block_ref() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let transactions = vec![];
|
||||||
|
let block = Block::new_unchecked(header, transactions);
|
||||||
|
let block_hash: BlockHash = BlockHash::from(&block);
|
||||||
|
assert_eq!(block_hash, header.block_hash());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn header_debug() {
|
||||||
|
let header = dummy_header();
|
||||||
|
let expected = format!(
|
||||||
|
"Header {{ block_hash: {:?}, version: {:?}, prev_blockhash: {:?}, merkle_root: {:?}, time: {:?}, bits: {:?}, nonce: {:?} }}",
|
||||||
|
header.block_hash(),
|
||||||
|
header.version,
|
||||||
|
header.prev_blockhash,
|
||||||
|
header.merkle_root,
|
||||||
|
header.time,
|
||||||
|
header.bits,
|
||||||
|
header.nonce
|
||||||
|
);
|
||||||
|
assert_eq!(format!("{:?}", header), expected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue