Merge rust-bitcoin/rust-bitcoin#4036: primitives: Add tests to witness
7e66091e1e
Add from impl tests (Jamil Lambert, PhD)2f95064cfd
Add from_parts test (Jamil Lambert, PhD)3ee66c5bb8
Modify push test (Jamil Lambert, PhD) Pull request description: Add tests to kill the mutants in `primitives/src/witness.rs` ACKs for top commit: tcharding: ACK7e66091e1e
apoelstra: ACK 7e66091e1e8b6cdd3e40d001ea1824125f7175e7; successfully ran local tests Tree-SHA512: 57b2b0e4dbd93023d1a6a9709a02fa843e3ef9b25e7293ad641726b9c335e220a4ed87b717ec5dda999217677a916b86ac7daa9aaaec077afbfee4789836344e
This commit is contained in:
commit
fce0cf1692
|
@ -497,6 +497,7 @@ mod test {
|
||||||
fn push() {
|
fn push() {
|
||||||
// Sanity check default.
|
// Sanity check default.
|
||||||
let mut witness = Witness::default();
|
let mut witness = Witness::default();
|
||||||
|
assert!(witness.is_empty());
|
||||||
assert_eq!(witness.last(), None);
|
assert_eq!(witness.last(), None);
|
||||||
assert_eq!(witness.second_to_last(), None);
|
assert_eq!(witness.second_to_last(), None);
|
||||||
|
|
||||||
|
@ -506,10 +507,11 @@ mod test {
|
||||||
assert_eq!(witness.nth(3), None);
|
assert_eq!(witness.nth(3), None);
|
||||||
|
|
||||||
// Push a single byte element onto the witness stack.
|
// Push a single byte element onto the witness stack.
|
||||||
let push = [0_u8];
|
let push = [11_u8];
|
||||||
witness.push(push);
|
witness.push(push);
|
||||||
|
assert!(!witness.is_empty());
|
||||||
|
|
||||||
let elements = [1u8, 0];
|
let elements = [1u8, 11];
|
||||||
let expected = Witness {
|
let expected = Witness {
|
||||||
witness_elements: 1,
|
witness_elements: 1,
|
||||||
content: append_u32_vec(&elements, &[0]), // Start at index 0.
|
content: append_u32_vec(&elements, &[0]), // Start at index 0.
|
||||||
|
@ -529,10 +531,10 @@ mod test {
|
||||||
assert_eq!(witness.nth(3), None);
|
assert_eq!(witness.nth(3), None);
|
||||||
|
|
||||||
// Now push 2 byte element onto the witness stack.
|
// Now push 2 byte element onto the witness stack.
|
||||||
let push = [2u8, 3u8];
|
let push = [21u8, 22u8];
|
||||||
witness.push(push);
|
witness.push(push);
|
||||||
|
|
||||||
let elements = [1u8, 0, 2, 2, 3];
|
let elements = [1u8, 11, 2, 21, 22];
|
||||||
let expected = Witness {
|
let expected = Witness {
|
||||||
witness_elements: 2,
|
witness_elements: 2,
|
||||||
content: append_u32_vec(&elements, &[0, 2]),
|
content: append_u32_vec(&elements, &[0, 2]),
|
||||||
|
@ -552,10 +554,10 @@ mod test {
|
||||||
assert_eq!(witness.last(), Some(element_1));
|
assert_eq!(witness.last(), Some(element_1));
|
||||||
|
|
||||||
// Now push another 2 byte element onto the witness stack.
|
// Now push another 2 byte element onto the witness stack.
|
||||||
let push = [4u8, 5u8];
|
let push = [31u8, 32u8];
|
||||||
witness.push(push);
|
witness.push(push);
|
||||||
|
|
||||||
let elements = [1u8, 0, 2, 2, 3, 2, 4, 5];
|
let elements = [1u8, 11, 2, 21, 22, 2, 31, 32];
|
||||||
let expected = Witness {
|
let expected = Witness {
|
||||||
witness_elements: 3,
|
witness_elements: 3,
|
||||||
content: append_u32_vec(&elements, &[0, 2, 5]),
|
content: append_u32_vec(&elements, &[0, 2, 5]),
|
||||||
|
@ -571,6 +573,7 @@ mod test {
|
||||||
assert_eq!(witness.nth(2), Some(element_2));
|
assert_eq!(witness.nth(2), Some(element_2));
|
||||||
assert_eq!(witness.nth(3), None);
|
assert_eq!(witness.nth(3), None);
|
||||||
|
|
||||||
|
assert_eq!(witness.third_to_last(), Some(element_0));
|
||||||
assert_eq!(witness.second_to_last(), Some(element_1));
|
assert_eq!(witness.second_to_last(), Some(element_1));
|
||||||
assert_eq!(witness.last(), Some(element_2));
|
assert_eq!(witness.last(), Some(element_2));
|
||||||
}
|
}
|
||||||
|
@ -594,6 +597,45 @@ mod test {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn witness_from_parts() {
|
||||||
|
let elements = [1u8, 11, 2, 21, 22];
|
||||||
|
let witness_elements = 2;
|
||||||
|
let content = append_u32_vec(&elements, &[0, 2]);
|
||||||
|
let indices_start = elements.len();
|
||||||
|
let witness = Witness::from_parts__unstable(content.clone(), witness_elements, indices_start);
|
||||||
|
assert_eq!(witness.nth(0).unwrap(), [11_u8]);
|
||||||
|
assert_eq!(witness.nth(1).unwrap(), [21_u8, 22]);
|
||||||
|
assert_eq!(witness.size(), 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn witness_from_impl() {
|
||||||
|
// Test From implementations with the same 2 elements
|
||||||
|
let vec = vec![vec![11], vec![21, 22]];
|
||||||
|
let slice_vec: &[Vec<u8>] = &vec;
|
||||||
|
let slice_slice: &[&[u8]] = &[&[11u8], &[21, 22]];
|
||||||
|
let vec_slice: Vec<&[u8]> = vec![&[11u8], &[21, 22]];
|
||||||
|
|
||||||
|
let witness_vec_vec = Witness::from(vec.clone());
|
||||||
|
let witness_slice_vec = Witness::from(slice_vec);
|
||||||
|
let witness_slice_slice = Witness::from(slice_slice);
|
||||||
|
let witness_vec_slice = Witness::from(vec_slice);
|
||||||
|
|
||||||
|
let mut expected = Witness::from_slice(&vec);
|
||||||
|
assert_eq!(expected.len(), 2);
|
||||||
|
assert_eq!(expected.to_vec(), vec);
|
||||||
|
|
||||||
|
assert_eq!(witness_vec_vec, expected);
|
||||||
|
assert_eq!(witness_slice_vec, expected);
|
||||||
|
assert_eq!(witness_slice_slice, expected);
|
||||||
|
assert_eq!(witness_vec_slice, expected);
|
||||||
|
|
||||||
|
// Test clear method
|
||||||
|
expected.clear();
|
||||||
|
assert!(expected.is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
fn serde_bincode_backward_compatibility() {
|
fn serde_bincode_backward_compatibility() {
|
||||||
|
|
Loading…
Reference in New Issue