Skip to content

Commit d9ee03f

Browse files
committed
use constraint_tracker in unit tests that print constraint numbers
1 parent 423d114 commit d9ee03f

File tree

4 files changed

+74
-74
lines changed

4 files changed

+74
-74
lines changed

libsnark/gadgetlib1/tests/test_curve_gadgets.cpp

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* @copyright MIT license (see LICENSE file)
77
*****************************************************************************/
88

9+
#include "libsnark/common/constraints_tracker/constraints_tracker.hpp"
910
#include "libsnark/gadgetlib1/gadgets/pairing/bw6_761_bls12_377/bw6_761_pairing_params.hpp"
1011
#include "libsnark/gadgetlib1/gadgets/pairing/mnt/mnt_pairing_params.hpp"
1112
#include "libsnark/gadgetlib1/gadgets/pairing/pairing_params.hpp"
@@ -25,6 +26,8 @@ using npp = other_curve<wpp>;
2526
namespace
2627
{
2728

29+
static constraints_tracker constraints;
30+
2831
template<typename ppT>
2932
void generate_and_check_proof(
3033
protoboard<libff::Fr<ppT>> &pb, const std::string &test_name)
@@ -33,7 +36,8 @@ void generate_and_check_proof(
3336
ASSERT_TRUE(pb.is_satisfied());
3437
const r1cs_gg_ppzksnark_keypair<ppT> keypair =
3538
r1cs_gg_ppzksnark_generator<ppT>(pb.get_constraint_system(), true);
36-
printf("%s: %zu constraints\n", test_name.c_str(), pb.num_constraints());
39+
40+
constraints.add_measurement<ppT>(test_name, pb.num_constraints());
3741
r1cs_primary_input<libff::Fr<wpp>> primary_input = pb.primary_input();
3842
r1cs_auxiliary_input<libff::Fr<ppT>> auxiliary_input = pb.auxiliary_input();
3943
r1cs_gg_ppzksnark_proof<ppT> proof = r1cs_gg_ppzksnark_prover(
@@ -50,20 +54,16 @@ void test_G2_checker_gadget(const std::string &annotation)
5054
G2_checker_gadget<ppT> g_check(pb, g, "g_check");
5155
g_check.generate_r1cs_constraints();
5256

53-
printf("positive test\n");
5457
g.generate_r1cs_witness(libff::G2<other_curve<ppT>>::one());
5558
g_check.generate_r1cs_witness();
5659
assert(pb.is_satisfied());
5760

58-
printf("negative test\n");
5961
g.generate_r1cs_witness(libff::G2<other_curve<ppT>>::zero());
6062
g_check.generate_r1cs_witness();
6163
assert(!pb.is_satisfied());
6264

63-
printf(
64-
"number of constraints for G2 checker (Fr is %s) = %zu\n",
65-
annotation.c_str(),
66-
pb.num_constraints());
65+
constraints.add_measurement<ppT>(
66+
"G2_checker_gadget - " + annotation, pb.num_constraints());
6767
}
6868

6969
template<
@@ -97,7 +97,7 @@ void test_add_gadget(
9797
ASSERT_TRUE(pb.is_satisfied());
9898
ASSERT_EQ(expect_val, result_val);
9999

100-
printf("%s: %zu constraints\n", test_name.c_str(), pb.num_constraints());
100+
constraints.add_measurement<wpp>(test_name, pb.num_constraints());
101101
}
102102

103103
template<typename ppT, typename GroupT, typename VarT, typename DblGadgetT>
@@ -120,7 +120,7 @@ void test_dbl_gadget(
120120
ASSERT_TRUE(pb.is_satisfied());
121121
ASSERT_EQ(expect_val, result_val);
122122

123-
printf("%s: %zu constraints\n", test_name.c_str(), pb.num_constraints());
123+
constraints.add_measurement<wpp>(test_name, pb.num_constraints());
124124
}
125125

126126
template<
@@ -801,22 +801,38 @@ TEST(TestCurveGadgets, VarOrIdentityMulScalarVar)
801801
G2_variable_or_identity_mul_by_scalar_gadget<wpp>>;
802802

803803
test_g1_var_or_identity_mul_by_scalar_gadget(
804-
libff::Fr<npp>(13), libff::Fr<npp>::zero());
804+
libff::Fr<npp>(13),
805+
libff::Fr<npp>::zero(),
806+
"G1_var_or_identity_mul_by_scalar_gadget (0*[13]_1)");
805807
test_g1_var_or_identity_mul_by_scalar_gadget(
806-
libff::Fr<npp>::zero(), libff::Fr<npp>(13));
808+
libff::Fr<npp>::zero(),
809+
libff::Fr<npp>(13),
810+
"G1_var_or_identity_mul_by_scalar_gadget (13*[0]_1)");
807811
test_g1_var_or_identity_mul_by_scalar_gadget(
808-
libff::Fr<npp>(13), libff::Fr<npp>(127));
812+
libff::Fr<npp>(13),
813+
libff::Fr<npp>(127),
814+
"G1_var_or_identity_mul_by_scalar_gadget (127*[13]_1)");
809815
test_g1_var_or_identity_mul_by_scalar_gadget(
810-
libff::Fr<npp>(13), -libff::Fr<npp>::one());
816+
libff::Fr<npp>(13),
817+
-libff::Fr<npp>::one(),
818+
"G1_var_or_identity_mul_by_scalar_gadget (-1*[13]_1)");
811819

812820
test_g2_var_or_identity_mul_by_scalar_gadget(
813-
libff::Fr<npp>(13), libff::Fr<npp>::zero());
821+
libff::Fr<npp>(13),
822+
libff::Fr<npp>::zero(),
823+
"G2_var_or_identity_mul_by_scalar_gadget (0*[13]_2)");
814824
test_g2_var_or_identity_mul_by_scalar_gadget(
815-
libff::Fr<npp>::zero(), libff::Fr<npp>(13));
825+
libff::Fr<npp>::zero(),
826+
libff::Fr<npp>(13),
827+
"G2_var_or_identity_mul_by_scalar_gadget (13*[0]_2)");
816828
test_g2_var_or_identity_mul_by_scalar_gadget(
817-
libff::Fr<npp>(13), libff::Fr<npp>(127));
829+
libff::Fr<npp>(13),
830+
libff::Fr<npp>(127),
831+
"G2_var_or_identity_mul_by_scalar_gadget (127*[13]_2)");
818832
test_g2_var_or_identity_mul_by_scalar_gadget(
819-
libff::Fr<npp>(13), -libff::Fr<npp>::one());
833+
libff::Fr<npp>(13),
834+
-libff::Fr<npp>::one(),
835+
"G2_var_or_identity_mul_by_scalar_gadget (-1*[13]_2)");
820836
}
821837

822838
} // namespace

libsnark/gadgetlib1/tests/test_pairing.cpp

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* @copyright MIT license (see LICENSE file)
77
*****************************************************************************/
88

9+
#include "libsnark/common/constraints_tracker/constraints_tracker.hpp"
910
#include "libsnark/gadgetlib1/gadgets/pairing/bw6_761_bls12_377/bw6_761_pairing_params.hpp"
1011
#include "libsnark/gadgetlib1/gadgets/pairing/mnt/mnt_pairing_params.hpp"
1112
#include "libsnark/gadgetlib1/protoboard.hpp"
@@ -19,6 +20,8 @@
1920
namespace libsnark
2021
{
2122

23+
static constraints_tracker constraints;
24+
2225
template<typename ppT>
2326
void test_G1_variable_precomp(const std::string &annotation)
2427
{
@@ -47,10 +50,8 @@ void test_G1_variable_precomp(const std::string &annotation)
4750
const_precomp.PY_twist_squared->get_element(),
4851
native_precomp.PY_twist_squared);
4952

50-
printf(
51-
"number of constraints for G1 precomp (Fr is %s) = %zu\n",
52-
annotation.c_str(),
53-
pb.num_constraints());
53+
constraints.add_measurement<ppT>(
54+
"G1 precomp - " + annotation, pb.num_constraints());
5455
}
5556

5657
template<typename ppT>
@@ -91,10 +92,8 @@ void test_G2_variable_precomp(const std::string &annotation)
9192
native_precomp.coeffs[i].gamma_X);
9293
}
9394

94-
printf(
95-
"number of constraints for G2 precomp (Fr is %s) = %zu\n",
96-
annotation.c_str(),
97-
pb.num_constraints());
95+
constraints.add_measurement<ppT>(
96+
"G2 precomp - " + annotation, pb.num_constraints());
9897
}
9998

10099
template<typename ppT>
@@ -137,13 +136,12 @@ void test_miller_loop(
137136
Q.generate_r1cs_witness(Q_val);
138137
compute_prec_Q.generate_r1cs_witness();
139138
miller.generate_r1cs_witness();
140-
ASSERT_TRUE(pb.is_satisfied());
141139

140+
constraints.add_measurement<ppT>(
141+
"Miller loop + precomp - " + annotation, pb.num_constraints());
142+
143+
ASSERT_TRUE(pb.is_satisfied());
142144
ASSERT_EQ(expect_result, result.get_element());
143-
printf(
144-
"number of constraints for Miller loop (Fr is %s) = %zu\n",
145-
annotation.c_str(),
146-
pb.num_constraints());
147145
}
148146

149147
template<typename ppT> void test_mnt_miller_loop(const std::string &annotation)
@@ -244,13 +242,10 @@ void test_e_over_e_miller_loop(
244242
compute_prec_Q2.generate_r1cs_witness();
245243
miller.generate_r1cs_witness();
246244

247-
ASSERT_TRUE(pb.is_satisfied());
248-
249-
printf(
250-
"number of constraints for e over e Miller loop (Fr is %s) = %zu\n",
251-
annotation.c_str(),
252-
pb.num_constraints());
245+
constraints.add_measurement<ppT>(
246+
"e_over_e_miller_loop + precomp - " + annotation, pb.num_constraints());
253247

248+
ASSERT_TRUE(pb.is_satisfied());
254249
ASSERT_EQ(expect_result, result.get_element());
255250
}
256251

@@ -441,12 +436,11 @@ void test_mnt_e_times_e_over_e_miller_loop(const std::string &annotation)
441436
native_prec_P3, native_prec_Q3)
442437
.inverse());
443438

444-
ASSERT_EQ(native_result, result.get_element());
445-
printf(
446-
"number of constraints for e times e over e Miller loop (Fr is %s) = "
447-
"%zu\n",
448-
annotation.c_str(),
439+
constraints.add_measurement<ppT>(
440+
"e_times_e_over_e_Miller_loop + precomp - " + annotation,
449441
pb.num_constraints());
442+
443+
ASSERT_EQ(native_result, result.get_element());
450444
}
451445

452446
template<typename ppT>
@@ -551,14 +545,11 @@ void test_e_times_e_times_e_over_e_miller_loop(
551545
compute_prec_Q4.generate_r1cs_witness();
552546
miller.generate_r1cs_witness();
553547

554-
ASSERT_TRUE(pb.is_satisfied());
555-
556-
printf(
557-
"number of constraints for e times e times e over e Miller loop (Fr is "
558-
"%s) = %zu\n",
559-
annotation.c_str(),
548+
constraints.add_measurement<ppT>(
549+
"e_times_e_times_e_over_e Miller loop + precomp - " + annotation,
560550
pb.num_constraints());
561551

552+
ASSERT_TRUE(pb.is_satisfied());
562553
ASSERT_EQ(expect_result, result.get_element());
563554
}
564555

libsnark/gadgetlib1/tests/test_pairing_checks.cpp

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* @copyright MIT license (see LICENSE file)
77
*****************************************************************************/
88

9+
#include "libsnark/common/constraints_tracker/constraints_tracker.hpp"
910
#include "libsnark/gadgetlib1/gadgets/pairing/bw6_761_bls12_377/bw6_761_pairing_params.hpp"
1011
#include "libsnark/gadgetlib1/gadgets/pairing/mnt/mnt_pairing_params.hpp"
1112
#include "libsnark/gadgetlib1/gadgets/pairing/pairing_checks.hpp"
@@ -19,6 +20,8 @@
1920
namespace libsnark
2021
{
2122

23+
static constraints_tracker constraints;
24+
2225
/// Carry out a pairing check between elements of G1 and G2 defined over
2326
/// other_curve<ppT>, in a circuit defined over Fr<ppT>.
2427
template<typename ppT>
@@ -93,15 +96,10 @@ bool test_check_e_equals_e_gadget(
9396

9497
pairing_check.generate_r1cs_witness();
9598

96-
assert(pb.is_satisfied());
97-
printf(
98-
"number of constraints for check_e_equals_e_gadget (Fr is "
99-
"%s) = %zu\n",
100-
annotation_prefix.c_str(),
101-
pb.num_constraints());
99+
constraints.add_measurement<ppT>(
100+
"check_e_equals_e_gadget - " + annotation_prefix, pb.num_constraints());
102101

103-
bool test_success = (pb.val(result) == expected_result);
104-
return test_success;
102+
return pb.is_satisfied() && (pb.val(result) == expected_result);
105103
}
106104

107105
/// In this test we carry out - via a circuit defined over Fr<ppT> - a pairing
@@ -251,15 +249,11 @@ bool test_check_e_equals_eee_gadget(
251249

252250
pairing_check.generate_r1cs_witness();
253251

254-
assert(pb.is_satisfied());
255-
printf(
256-
"number of constraints for check_e_equals_eee_gadget (Fr is "
257-
"%s) = %zu\n",
258-
annotation_prefix.c_str(),
252+
constraints.add_measurement<ppT>(
253+
"check_e_equals_eee_gadget - " + annotation_prefix,
259254
pb.num_constraints());
260255

261-
bool test_success = (pb.val(result) == expected_result);
262-
return test_success;
256+
return pb.is_satisfied() && (pb.val(result) == expected_result);
263257
}
264258

265259
template<typename ppT>

libsnark/gadgetlib1/tests/test_r1cs_gg_ppzksnark_verifier_gadget.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* @copyright MIT license (see LICENSE file)
77
*****************************************************************************/
88

9+
#include "libsnark/common/constraints_tracker/constraints_tracker.hpp"
910
#include "libsnark/gadgetlib1/gadgets/pairing/bw6_761_bls12_377/bw6_761_pairing_params.hpp"
1011
#include "libsnark/gadgetlib1/gadgets/pairing/mnt/mnt_pairing_params.hpp"
1112
#include "libsnark/gadgetlib1/gadgets/verifiers/r1cs_gg_ppzksnark_verifier_gadget.hpp"
@@ -21,6 +22,8 @@ using namespace libsnark;
2122
namespace
2223
{
2324

25+
static constraints_tracker constraints;
26+
2427
/// This test generates a valid proof and checks that this valid proof
2528
/// is succesfully verified by the groth16 verifier gadget
2629
template<typename ppT_A, typename ppT_B>
@@ -101,12 +104,10 @@ void test_verifier(
101104
std::cout << "Negative test case" << std::endl;
102105
ASSERT_FALSE(pb.is_satisfied());
103106
PRINT_CONSTRAINT_PROFILING();
104-
printf(
105-
"number of constraints for verifier: %zu (verifier is implemented in "
106-
"%s constraints and verifies %s proofs))\n",
107-
pb.num_constraints(),
108-
annotation_B.c_str(),
109-
annotation_A.c_str());
107+
108+
constraints.add_measurement<ppT_B>(
109+
"r1cs_gg_ppzksnark_verifier - " + annotation_B + " - " + annotation_A,
110+
pb.num_constraints());
110111
}
111112

112113
template<typename ppT_A, typename ppT_B>
@@ -189,12 +190,10 @@ void test_hardcoded_verifier(
189190
printf("Negative test:\n");
190191
ASSERT_FALSE(pb.is_satisfied());
191192
PRINT_CONSTRAINT_PROFILING();
192-
printf(
193-
"number of constraints for verifier: %zu (verifier is implemented in "
194-
"%s constraints and verifies %s proofs))\n",
195-
pb.num_constraints(),
196-
annotation_B.c_str(),
197-
annotation_A.c_str());
193+
194+
constraints.add_measurement<ppT_B>(
195+
"r1cs_gg_ppzksnark_verifier - " + annotation_B + " - " + annotation_A,
196+
pb.num_constraints());
198197
}
199198

200199
TEST(Groth16VerifierGadgetTests, MntGroth16VerifierGadget)

0 commit comments

Comments
 (0)