From 03647457d9390ff7fdb6f939d32ece3676ca4303 Mon Sep 17 00:00:00 2001 From: Serge Radinovich <47865535+sergerad@users.noreply.github.com> Date: Mon, 5 May 2025 13:46:54 +1200 Subject: [PATCH] Add default constructors to MmrPeaks and PartialMmr (#409) --- CHANGELOG.md | 1 + miden-crypto/src/merkle/mmr/partial.rs | 12 ++++++++++++ miden-crypto/src/merkle/mmr/peaks.rs | 7 +++++++ miden-crypto/src/merkle/mmr/tests.rs | 17 +++++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48247a6..4a7928b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## 0.15.0 (TBD) +- Added default constructors to `MmrPeaks` and `PartialMmr` (#409). ## 0.14.0 (2025-03-15) diff --git a/miden-crypto/src/merkle/mmr/partial.rs b/miden-crypto/src/merkle/mmr/partial.rs index 1cf2fd2..310f55e 100644 --- a/miden-crypto/src/merkle/mmr/partial.rs +++ b/miden-crypto/src/merkle/mmr/partial.rs @@ -70,6 +70,18 @@ pub struct PartialMmr { pub(crate) track_latest: bool, } +impl Default for PartialMmr { + /// Creates a new [PartialMmr] with default values. + fn default() -> Self { + let forest = 0; + let peaks = Vec::new(); + let nodes = BTreeMap::new(); + let track_latest = false; + + Self { forest, peaks, nodes, track_latest } + } +} + impl PartialMmr { // CONSTRUCTORS // -------------------------------------------------------------------------------------------- diff --git a/miden-crypto/src/merkle/mmr/peaks.rs b/miden-crypto/src/merkle/mmr/peaks.rs index a640afd..2873e44 100644 --- a/miden-crypto/src/merkle/mmr/peaks.rs +++ b/miden-crypto/src/merkle/mmr/peaks.rs @@ -34,6 +34,13 @@ pub struct MmrPeaks { peaks: Vec, } +impl Default for MmrPeaks { + /// Returns new [`MmrPeaks`] instantiated from an empty vector of peaks and 0 leaves. + fn default() -> Self { + Self { num_leaves: 0, peaks: Vec::new() } + } +} + impl MmrPeaks { // CONSTRUCTOR // -------------------------------------------------------------------------------------------- diff --git a/miden-crypto/src/merkle/mmr/tests.rs b/miden-crypto/src/merkle/mmr/tests.rs index e47a7c3..ba2ef7a 100644 --- a/miden-crypto/src/merkle/mmr/tests.rs +++ b/miden-crypto/src/merkle/mmr/tests.rs @@ -12,6 +12,23 @@ use crate::{ merkle::{InOrderIndex, MerklePath, MerkleTree, MmrProof, NodeIndex, int_to_node}, }; +#[test] +fn tests_empty_mmr_peaks() { + let peaks = MmrPeaks::default(); + assert_eq!(peaks.num_peaks(), 0); + assert_eq!(peaks.num_leaves(), 0); +} + +#[test] +fn test_empty_partial_mmr() { + let mmr = PartialMmr::default(); + assert_eq!(mmr.num_leaves(), 0); + assert_eq!(mmr.forest(), 0); + assert_eq!(mmr.peaks(), MmrPeaks::default()); + assert!(mmr.nodes.is_empty()); + assert!(!mmr.track_latest); +} + #[test] fn test_position_equal_or_higher_than_leafs_is_never_contained() { let empty_forest = 0;