mod bytes;
mod parse;
mod serialize;
use crate::Identifier;
use snarkvm_console_network::prelude::*;
#[derive(Clone, PartialEq, Eq, Hash)]
pub enum Register<N: Network> {
Locator(u64),
Member(u64, Vec<Identifier<N>>),
}
impl<N: Network> Register<N> {
#[inline]
pub const fn locator(&self) -> u64 {
match self {
Self::Locator(locator) => *locator,
Self::Member(locator, _) => *locator,
}
}
}
impl<N: Network> Ord for Register<N> {
fn cmp(&self, other: &Self) -> Ordering {
self.locator().cmp(&other.locator())
}
}
impl<N: Network> PartialOrd for Register<N> {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
#[cfg(test)]
mod tests {
use super::*;
use snarkvm_console_network::Testnet3;
type CurrentNetwork = Testnet3;
#[test]
fn test_register_partial_ord() -> Result<()> {
assert_eq!(
Some(Ordering::Equal),
Register::<CurrentNetwork>::Locator(0).partial_cmp(&Register::<CurrentNetwork>::Locator(0))
);
assert_eq!(
Some(Ordering::Less),
Register::<CurrentNetwork>::Locator(0).partial_cmp(&Register::<CurrentNetwork>::Locator(1))
);
assert_eq!(
Some(Ordering::Greater),
Register::<CurrentNetwork>::Locator(1).partial_cmp(&Register::<CurrentNetwork>::Locator(0))
);
assert_eq!(
Some(Ordering::Equal),
Register::<CurrentNetwork>::Member(0, vec![Identifier::from_str("owner")?]).partial_cmp(&Register::<
CurrentNetwork,
>::Member(
0,
vec![Identifier::from_str("owner")?]
))
);
assert_eq!(
Some(Ordering::Less),
Register::<CurrentNetwork>::Member(0, vec![Identifier::from_str("owner")?]).partial_cmp(&Register::<
CurrentNetwork,
>::Member(
1,
vec![Identifier::from_str("owner")?]
))
);
assert_eq!(
Some(Ordering::Greater),
Register::<CurrentNetwork>::Member(1, vec![Identifier::from_str("owner")?]).partial_cmp(&Register::<
CurrentNetwork,
>::Member(
0,
vec![Identifier::from_str("owner")?]
))
);
Ok(())
}
#[test]
fn test_register_eq() -> Result<()> {
assert_eq!(Register::<CurrentNetwork>::Locator(0), Register::<CurrentNetwork>::Locator(0));
assert_ne!(Register::<CurrentNetwork>::Locator(0), Register::<CurrentNetwork>::Locator(1));
assert_ne!(Register::<CurrentNetwork>::Locator(0), Register::<CurrentNetwork>::Locator(2));
assert_ne!(Register::<CurrentNetwork>::Locator(0), Register::<CurrentNetwork>::Locator(3));
assert_ne!(Register::<CurrentNetwork>::Locator(0), Register::<CurrentNetwork>::Locator(4));
assert_eq!(
Register::<CurrentNetwork>::Member(0, vec![Identifier::from_str("owner")?]),
Register::<CurrentNetwork>::Member(0, vec![Identifier::from_str("owner")?])
);
assert_ne!(
Register::<CurrentNetwork>::Member(0, vec![Identifier::from_str("owner")?]),
Register::<CurrentNetwork>::Member(1, vec![Identifier::from_str("owner")?])
);
assert_ne!(
Register::<CurrentNetwork>::Member(0, vec![Identifier::from_str("owner")?]),
Register::<CurrentNetwork>::Member(2, vec![Identifier::from_str("owner")?])
);
assert_ne!(
Register::<CurrentNetwork>::Member(0, vec![Identifier::from_str("owner")?]),
Register::<CurrentNetwork>::Member(3, vec![Identifier::from_str("owner")?])
);
assert_ne!(
Register::<CurrentNetwork>::Member(0, vec![Identifier::from_str("owner")?]),
Register::<CurrentNetwork>::Member(4, vec![Identifier::from_str("owner")?])
);
Ok(())
}
}