snarkvm_circuit_program/data/identifier/
to_bits.rs1use super::*;
17
18impl<A: Aleo> ToBits for Identifier<A> {
19 type Boolean = Boolean<A>;
20
21 fn write_bits_le(&self, vec: &mut Vec<Self::Boolean>) {
23 (&self).write_bits_le(vec);
24 }
25
26 fn write_bits_be(&self, vec: &mut Vec<Self::Boolean>) {
28 (&self).write_bits_be(vec);
29 }
30}
31
32impl<A: Aleo> ToBits for &Identifier<A> {
33 type Boolean = Boolean<A>;
34
35 fn write_bits_le(&self, vec: &mut Vec<Self::Boolean>) {
37 let initial_len = vec.len();
38 self.0.write_bits_le(vec);
39 vec.truncate(initial_len + 8 * self.1 as usize);
40 }
41
42 fn write_bits_be(&self, vec: &mut Vec<Self::Boolean>) {
44 let initial_len = vec.len();
45 self.write_bits_le(vec);
46 vec[initial_len..].reverse();
47 }
48}
49
50#[cfg(all(test, feature = "console"))]
51mod tests {
52 use super::*;
53 use crate::{Circuit, data::identifier::tests::sample_console_identifier};
54
55 use anyhow::Result;
56
57 const ITERATIONS: u64 = 100;
58
59 fn check_to_bits_le(num_constants: u64, num_public: u64, num_private: u64, num_constraints: u64) -> Result<()> {
60 for _ in 0..ITERATIONS {
61 let console_identifier = sample_console_identifier::<Circuit>()?;
63 let circuit_identifier = Identifier::<Circuit>::new(Mode::Constant, console_identifier);
65
66 Circuit::scope("Identifier ToBits", || {
67 let candidate = circuit_identifier.to_bits_le();
68 assert_eq!(Mode::Constant, candidate.eject_mode());
69 assert_eq!(console_identifier.to_bits_le(), candidate.eject_value());
70 assert_scope!(num_constants, num_public, num_private, num_constraints);
71 });
72 Circuit::reset();
73 }
74 Ok(())
75 }
76
77 fn check_to_bits_be(num_constants: u64, num_public: u64, num_private: u64, num_constraints: u64) -> Result<()> {
78 for _ in 0..ITERATIONS {
79 let console_identifier = sample_console_identifier::<Circuit>()?;
81 let circuit_identifier = Identifier::<Circuit>::new(Mode::Constant, console_identifier);
83
84 Circuit::scope("Identifier ToBits", || {
85 let candidate = circuit_identifier.to_bits_be();
86 assert_eq!(Mode::Constant, candidate.eject_mode());
87 assert_eq!(console_identifier.to_bits_be(), candidate.eject_value());
88 assert_scope!(num_constants, num_public, num_private, num_constraints);
89 });
90 Circuit::reset();
91 }
92 Ok(())
93 }
94
95 #[test]
96 fn test_to_bits_le() -> Result<()> {
97 check_to_bits_le(0, 0, 0, 0)
98 }
99
100 #[test]
101 fn test_to_bits_be() -> Result<()> {
102 check_to_bits_be(0, 0, 0, 0)
103 }
104}