use super::*;
impl<A: Aleo> ToBits for ProgramID<A> {
type Boolean = Boolean<A>;
fn to_bits_le(&self) -> Vec<Self::Boolean> {
(&self).to_bits_le()
}
fn to_bits_be(&self) -> Vec<Self::Boolean> {
(&self).to_bits_be()
}
}
impl<A: Aleo> ToBits for &ProgramID<A> {
type Boolean = Boolean<A>;
fn to_bits_le(&self) -> Vec<Self::Boolean> {
let mut bits = self.name().to_bits_le();
bits.extend(self.network().to_bits_le());
bits
}
fn to_bits_be(&self) -> Vec<Self::Boolean> {
let mut bits = self.name().to_bits_be();
bits.extend(self.network().to_bits_be());
bits
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{data::identifier::tests::sample_lowercase_console_identifier_as_string, Circuit};
use anyhow::Result;
const ITERATIONS: usize = 100;
fn check_to_bits_le(mode: Mode) -> Result<()> {
for _ in 0..ITERATIONS {
let expected_name_string = sample_lowercase_console_identifier_as_string::<Circuit>()?;
let expected = console::ProgramID::<<Circuit as Environment>::Network>::from_str(&format!(
"{expected_name_string}.aleo"
))?;
let candidate = ProgramID::<Circuit>::new(mode, expected);
assert_eq!(expected.to_bits_le(), candidate.to_bits_le().eject_value());
}
Ok(())
}
fn check_to_bits_be(mode: Mode) -> Result<()> {
for _ in 0..ITERATIONS {
let expected_name_string = sample_lowercase_console_identifier_as_string::<Circuit>()?;
let expected = console::ProgramID::<<Circuit as Environment>::Network>::from_str(&format!(
"{expected_name_string}.aleo"
))?;
let candidate = ProgramID::<Circuit>::new(mode, expected);
assert_eq!(expected.to_bits_be(), candidate.to_bits_be().eject_value());
}
Ok(())
}
#[test]
fn test_to_bits_le() -> Result<()> {
check_to_bits_le(Mode::Constant)?;
check_to_bits_le(Mode::Public)?;
check_to_bits_le(Mode::Private)?;
Ok(())
}
#[test]
fn test_to_bits_be() -> Result<()> {
check_to_bits_be(Mode::Constant)?;
check_to_bits_be(Mode::Public)?;
check_to_bits_be(Mode::Private)?;
Ok(())
}
}