Skip to content

Commit

Permalink
Merge pull request #858 from zancas/fix_is_confirmed_before_bug
Browse files Browse the repository at this point in the history
Fix is confirmed before bug
  • Loading branch information
zancas authored Mar 31, 2024
2 parents 1ade74d + a8dd7cb commit 53594f8
Showing 1 changed file with 51 additions and 8 deletions.
59 changes: 51 additions & 8 deletions zingo-status/src/confirmation_status.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ impl ConfirmationStatus {
///
/// let status = ConfirmationStatus::Broadcast(10.into());
/// assert_eq!(status.is_broadcast(), true);
/// assert_eq!(status.is_confirmed(), false);
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_broadcast(), false);
/// assert_eq!(status.is_confirmed(), true);
/// ```
pub fn is_broadcast(&self) -> bool {
matches!(self, Self::Broadcast(_))
Expand All @@ -48,9 +50,11 @@ impl ConfirmationStatus {
///
/// let status = ConfirmationStatus::Broadcast(10.into());
/// assert_eq!(status.is_confirmed(), false);
/// assert_eq!(status.is_broadcast(), true);
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_confirmed(), true);
/// assert_eq!(status.is_broadcast(), false);
/// ```
pub fn is_confirmed(&self) -> bool {
matches!(self, Self::Confirmed(_))
Expand All @@ -63,13 +67,13 @@ impl ConfirmationStatus {
/// use zcash_primitives::consensus::BlockHeight;
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_confirmed_after_or_at(&8.into()), true);
/// assert_eq!(status.is_confirmed_after_or_at(&9.into()), true);
///
/// let status = ConfirmationStatus::Broadcast(10.into());
/// assert_eq!(status.is_confirmed_after_or_at(&10.into()), false);
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_confirmed_after_or_at(&12.into()), false);
/// assert_eq!(status.is_confirmed_after_or_at(&11.into()), false);
/// ```
pub fn is_confirmed_after_or_at(&self, comparison_height: &BlockHeight) -> bool {
match self {
Expand All @@ -85,20 +89,60 @@ impl ConfirmationStatus {
/// use zcash_primitives::consensus::BlockHeight;
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_confirmed_before_or_at(&8.into()), false);
/// assert_eq!(status.is_confirmed_before_or_at(&9.into()), false);
///
/// let status = ConfirmationStatus::Broadcast(10.into());
/// assert_eq!(status.is_confirmed_before_or_at(&10.into()), false);
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_confirmed_before_or_at(&12.into()), true);
/// assert_eq!(status.is_confirmed_before_or_at(&11.into()), true);
/// ```
pub fn is_confirmed_before_or_at(&self, comparison_height: &BlockHeight) -> bool {
match self {
Self::Confirmed(self_height) => self_height <= comparison_height,
Self::Confirmed(self_height) => {
self.is_confirmed_before(comparison_height) || self_height == comparison_height
}
_ => false,
}
}
/// To return true, the status must be confirmed earlier than specified height.
/// # Examples
///
/// ```
/// use zingo_status::confirmation_status::ConfirmationStatus;
/// use zcash_primitives::consensus::BlockHeight;
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_confirmed_before(&9.into()), false);
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_confirmed_before(&10.into()), false);
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_confirmed_before(&11.into()), true);
/// ```
pub fn is_confirmed_before(&self, comparison_height: &BlockHeight) -> bool {
match self {
Self::Confirmed(self_height) => self_height < comparison_height,
_ => false,
}
}
/// To return true, the status must have broadcast at or later than specified height.
/// # Examples
///
/// ```
/// use zingo_status::confirmation_status::ConfirmationStatus;
/// use zcash_primitives::consensus::BlockHeight;
///
/// let status = ConfirmationStatus::Confirmed(10.into());
/// assert_eq!(status.is_broadcast_after_or_at(&9.into()), false);
///
/// let status = ConfirmationStatus::Broadcast(10.into());
/// assert_eq!(status.is_broadcast_after_or_at(&10.into()), true);
///
/// let status = ConfirmationStatus::Broadcast(10.into());
/// assert_eq!(status.is_broadcast_after_or_at(&11.into()), false);
/// ```
pub fn is_broadcast_after_or_at(&self, comparison_height: &BlockHeight) -> bool {
match self {
Self::Broadcast(self_height) => self_height >= comparison_height,
Expand All @@ -113,10 +157,10 @@ impl ConfirmationStatus {
/// use zcash_primitives::consensus::BlockHeight;
///
/// let status = ConfirmationStatus::Confirmed(16.into());
/// assert_eq!(status.is_broadcast_before(&14.into()), false);
/// assert_eq!(status.is_broadcast_before(&15.into()), false);
///
/// let status = ConfirmationStatus::Broadcast(12.into());
/// assert_eq!(status.is_broadcast_before(&14.into()), true);
/// assert_eq!(status.is_broadcast_before(&13.into()), true);
///
/// let status = ConfirmationStatus::Broadcast(14.into());
/// assert_eq!(status.is_broadcast_before(&14.into()), false);
Expand Down Expand Up @@ -165,7 +209,6 @@ impl ConfirmationStatus {
_ => None,
}
}
// this function and the placeholder is not a preferred pattern. please use match whenever possible.
/// # Examples
///
/// ```
Expand Down

0 comments on commit 53594f8

Please sign in to comment.