use super::*;
impl<N: Network> Eq for DynamicRecord<N> {}
impl<N: Network> PartialEq for DynamicRecord<N> {
fn eq(&self, other: &Self) -> bool {
*self.is_equal(other)
}
}
impl<N: Network> Equal<Self> for DynamicRecord<N> {
type Output = Boolean<N>;
fn is_equal(&self, other: &Self) -> Self::Output {
self.owner.is_equal(&other.owner)
& self.root.is_equal(&other.root)
& self.nonce.is_equal(&other.nonce)
& self.version.is_equal(&other.version)
}
fn is_not_equal(&self, other: &Self) -> Self::Output {
!self.is_equal(other)
}
}
#[cfg(test)]
mod tests {
use super::*;
use snarkvm_console_network::MainnetV0;
use std::str::FromStr;
type CurrentNetwork = MainnetV0;
fn sample_record() -> DynamicRecord<CurrentNetwork> {
DynamicRecord::from_record(
&Record::<CurrentNetwork, Plaintext<CurrentNetwork>>::from_str(
r"{
owner: aleo14tlamssdmg3d0p5zmljma573jghe2q9n6wz29qf36re2glcedcpqfg4add.private,
a: true.private,
b: 123456789field.public,
c: 0group.private,
d: {
e: true.private,
f: 123456789field.private,
g: 0group.private
},
_nonce: 0group.public,
_version: 0u8.public
}",
)
.unwrap(),
)
.unwrap()
}
fn sample_mismatched_record() -> DynamicRecord<CurrentNetwork> {
DynamicRecord::from_record(
&Record::<CurrentNetwork, Plaintext<CurrentNetwork>>::from_str(
r"{
owner: aleo14tlamssdmg3d0p5zmljma573jghe2q9n6wz29qf36re2glcedcpqfg4add.private,
a: true.public,
b: 123456789field.public,
c: 0group.private,
d: {
e: true.private,
f: 123456789field.private,
g: 0group.private
},
_nonce: 0group.public,
_version: 0u8.public
}",
)
.unwrap(),
)
.unwrap()
}
fn check_is_equal() {
let record = sample_record();
let mismatched_record = sample_mismatched_record();
let candidate = record.is_equal(&record);
assert!(*candidate);
let candidate = record.is_equal(&mismatched_record);
assert!(!*candidate);
}
fn check_is_not_equal() {
let record = sample_record();
let mismatched_record = sample_mismatched_record();
let candidate = record.is_not_equal(&mismatched_record);
assert!(*candidate);
let candidate = record.is_not_equal(&record);
assert!(!*candidate);
}
#[test]
fn test_is_equal() {
check_is_equal()
}
#[test]
fn test_is_not_equal() {
check_is_not_equal()
}
}