From 6c15a6ce2cb92ed7b9d565d67a0b3b301a24fbfb Mon Sep 17 00:00:00 2001 From: Krishna Shukla Date: Wed, 8 Apr 2026 16:44:40 +0530 Subject: [PATCH] test(locked_outpoints): add unit tests for ChangeSet merge and is_empty --- src/wallet/locked_outpoints.rs | 78 ++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src/wallet/locked_outpoints.rs b/src/wallet/locked_outpoints.rs index 6ab2cbc3..dfee71b6 100644 --- a/src/wallet/locked_outpoints.rs +++ b/src/wallet/locked_outpoints.rs @@ -24,3 +24,81 @@ impl Merge for ChangeSet { self.outpoints.is_empty() } } + +#[cfg(test)] +mod test { + use super::*; + use bdk_chain::Merge; + use bitcoin::{hashes::Hash, OutPoint, Txid}; + + /// Helper to create an `OutPoint` from an index byte. + fn outpoint(vout: u32) -> OutPoint { + OutPoint { + txid: Txid::from_byte_array([vout as u8; 32]), + vout, + } + } + + #[test] + fn test_is_empty_default() { + let cs = ChangeSet::default(); + assert!(cs.is_empty()); + } + + #[test] + fn test_is_empty_with_entries() { + let cs = ChangeSet { + outpoints: [(outpoint(0), true)].into(), + }; + assert!(!cs.is_empty()); + } + + #[test] + fn test_merge_into_empty() { + let mut cs = ChangeSet::default(); + let other = ChangeSet { + outpoints: [(outpoint(1), true)].into(), + }; + cs.merge(other); + assert_eq!(cs.outpoints.len(), 1); + assert!(cs.outpoints[&outpoint(1)]); + } + + #[test] + fn test_merge_empty_into_non_empty() { + let mut cs = ChangeSet { + outpoints: [(outpoint(0), true)].into(), + }; + let snapshot = cs.clone(); + cs.merge(ChangeSet::default()); + assert_eq!(cs, snapshot); + } + + #[test] + fn test_merge_disjoint() { + let mut cs = ChangeSet { + outpoints: [(outpoint(0), true)].into(), + }; + let other = ChangeSet { + outpoints: [(outpoint(1), false)].into(), + }; + cs.merge(other); + assert_eq!(cs.outpoints.len(), 2); + assert!(cs.outpoints[&outpoint(0)]); + assert!(!cs.outpoints[&outpoint(1)]); + } + + #[test] + fn test_merge_overwrites_duplicate() { + let op = outpoint(0); + let mut cs = ChangeSet { + outpoints: [(op, true)].into(), + }; + let other = ChangeSet { + outpoints: [(op, false)].into(), + }; + cs.merge(other); + assert_eq!(cs.outpoints.len(), 1); + assert!(!cs.outpoints[&op], "other's value should overwrite self"); + } +}