snarkvm_circuit_environment/macros/
scope.rs1#[macro_export]
17macro_rules! scope {
18 ($scope_name:expr, $block:block) => {
19 E::scope($scope_name, || $block)
20 };
21}
22
23#[macro_export]
24macro_rules! print_scope {
25 () => {{
26 println!(
27 "Circuit::scope(Constants: {:?}, Public: {:?}, Private: {:?}, Constraints: {:?})\n",
28 Circuit::num_constants_in_scope(),
29 Circuit::num_public_in_scope(),
30 Circuit::num_private_in_scope(),
31 Circuit::num_constraints_in_scope()
32 );
33 }};
34}
35
36#[macro_export]
37macro_rules! assert_scope {
38 () => {{
39 $crate::print_scope!();
40
41 assert!(Circuit::is_satisfied_in_scope(), "(is_satisfied_in_scope)");
42 }};
43 ($num_constants:expr, $num_public:expr, $num_private:expr, $num_constraints:expr) => {{
44 $crate::print_scope!();
45
46 assert_eq!($num_constants, Circuit::num_constants_in_scope(), "(num_constants)");
47 assert_eq!($num_public, Circuit::num_public_in_scope(), "(num_public)");
48 assert_eq!($num_private, Circuit::num_private_in_scope(), "(num_private)");
49 assert_eq!($num_constraints, Circuit::num_constraints_in_scope(), "(num_constraints)");
50 assert!(Circuit::is_satisfied_in_scope(), "(is_satisfied_in_scope)");
51 }};
52 (<=$num_constants:expr, $num_public:expr, $num_private:expr, $num_constraints:expr) => {{
53 $crate::print_scope!();
54
55 assert!(Circuit::num_constants_in_scope() <= $num_constants, "(num_constants)");
56 assert_eq!($num_public, Circuit::num_public_in_scope(), "(num_public)");
57 assert_eq!($num_private, Circuit::num_private_in_scope(), "(num_private)");
58 assert_eq!($num_constraints, Circuit::num_constraints_in_scope(), "(num_constraints)");
59 assert!(Circuit::is_satisfied_in_scope(), "(is_satisfied_in_scope)");
60 }};
61 (<=$num_constants:expr, <=$num_public:expr, <=$num_private:expr, <=$num_constraints:expr) => {{
62 $crate::print_scope!();
63
64 assert!(Circuit::num_constants_in_scope() <= $num_constants, "(num_constants)");
65 assert!(Circuit::num_public_in_scope() <= $num_public, "(num_public)");
66 assert!(Circuit::num_private_in_scope() <= $num_private, "(num_private)");
67 assert!(Circuit::num_constraints_in_scope() <= $num_constraints, "(num_constraints)");
68 assert!(Circuit::is_satisfied_in_scope(), "(is_satisfied_in_scope)");
69 }};
70 ($case:expr, $num_constants:expr, $num_public:expr, $num_private:expr, $num_constraints:expr) => {{
71 $crate::print_scope!();
72
73 assert_eq!($num_constants, Circuit::num_constants_in_scope(), "{} (num_constants)", $case);
74 assert_eq!($num_public, Circuit::num_public_in_scope(), "{} (num_public)", $case);
75 assert_eq!($num_private, Circuit::num_private_in_scope(), "{} (num_private)", $case);
76 assert_eq!($num_constraints, Circuit::num_constraints_in_scope(), "{} (num_constraints)", $case);
77 assert!(Circuit::is_satisfied_in_scope(), "{} (is_satisfied_in_scope)", $case);
78 }};
79}
80
81#[macro_export]
82macro_rules! assert_scope_fails {
83 () => {{
84 $crate::print_scope!();
85
86 assert!(!Circuit::is_satisfied_in_scope(), "(!is_satisfied_in_scope)");
87 }};
88 ($num_constants:expr, $num_public:expr, $num_private:expr, $num_constraints:expr) => {{
89 $crate::print_scope!();
90
91 assert_eq!($num_constants, Circuit::num_constants_in_scope(), "(num_constants)");
92 assert_eq!($num_public, Circuit::num_public_in_scope(), "(num_public)");
93 assert_eq!($num_private, Circuit::num_private_in_scope(), "(num_private)");
94 assert_eq!($num_constraints, Circuit::num_constraints_in_scope(), "(num_constraints)");
95 assert!(!Circuit::is_satisfied_in_scope(), "(!is_satisfied_in_scope)");
96 }};
97 ($case:expr, $num_constants:expr, $num_public:expr, $num_private:expr, $num_constraints:expr) => {{
98 $crate::print_scope!();
99
100 assert_eq!($num_constants, Circuit::num_constants_in_scope(), "{} (num_constants)", $case);
101 assert_eq!($num_public, Circuit::num_public_in_scope(), "{} (num_public)", $case);
102 assert_eq!($num_private, Circuit::num_private_in_scope(), "{} (num_private)", $case);
103 assert_eq!($num_constraints, Circuit::num_constraints_in_scope(), "{} (num_constraints)", $case);
104 assert!(!Circuit::is_satisfied_in_scope(), "{} (!is_satisfied_in_scope)", $case);
105 }};
106}