From 849f330441d45af55f444d73d5d1ed445f7a92f0 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Thu, 28 Dec 2017 12:00:22 -0700 Subject: [PATCH] Add test to monitor the number of constraints consumed by the pedersen hash (in the context of a merkle tree). --- src/circuit/pedersen_hash.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/circuit/pedersen_hash.rs b/src/circuit/pedersen_hash.rs index 00146d5..0989d84 100644 --- a/src/circuit/pedersen_hash.rs +++ b/src/circuit/pedersen_hash.rs @@ -206,6 +206,31 @@ mod test { use ::circuit::test::*; use ::circuit::boolean::{Boolean, AllocatedBit}; use pairing::bls12_381::{Bls12, Fr}; + use pairing::PrimeField; + + #[test] + fn test_pedersen_hash_constraints() { + let mut rng = XorShiftRng::from_seed([0x3dbe6259, 0x8d313d76, 0x3237db17, 0xe5bc0654]); + let params = &JubjubBls12::new(); + let mut cs = TestConstraintSystem::::new(); + + let input: Vec = (0..(Fr::NUM_BITS * 2)).map(|_| rng.gen()).collect(); + + let input_bools: Vec> = input.iter().enumerate().map(|(i, b)| { + Boolean::from( + AllocatedBit::alloc(cs.namespace(|| format!("input {}", i)), Some(*b)).unwrap() + ) + }).collect(); + + pedersen_hash( + cs.namespace(|| "pedersen hash"), + &input_bools, + params + ).unwrap(); + + assert!(cs.is_satisfied()); + assert_eq!(cs.num_constraints(), 1539); + } #[test] fn test_pedersen_hash() {