mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-03 14:23:07 +00:00
Merge pull request #389 from mir-protocol/deoptimize_tests
Compiler optimizes away some tests
This commit is contained in:
commit
aed4de0293
@ -1,7 +1,5 @@
|
||||
use std::borrow::Borrow;
|
||||
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::field::extension_field::Extendable;
|
||||
use crate::field::field_types::{PrimeField, RichField};
|
||||
use crate::gates::arithmetic_base::ArithmeticGate;
|
||||
@ -206,7 +204,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
|
||||
terms
|
||||
.iter()
|
||||
.copied()
|
||||
.fold1(|acc, t| self.mul(acc, t))
|
||||
.reduce(|acc, t| self.mul(acc, t))
|
||||
.unwrap_or_else(|| self.one())
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::field::extension_field::target::{ExtensionAlgebraTarget, ExtensionTarget};
|
||||
use crate::field::extension_field::FieldExtension;
|
||||
use crate::field::extension_field::{Extendable, OEF};
|
||||
@ -301,7 +299,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
|
||||
terms
|
||||
.iter()
|
||||
.copied()
|
||||
.fold1(|acc, t| self.mul_extension(acc, t))
|
||||
.reduce(|acc, t| self.mul_extension(acc, t))
|
||||
.unwrap_or_else(|| self.one_extension())
|
||||
}
|
||||
|
||||
@ -558,6 +556,7 @@ mod tests {
|
||||
|
||||
use crate::field::extension_field::algebra::ExtensionAlgebra;
|
||||
use crate::field::extension_field::quartic::QuarticExtension;
|
||||
use crate::field::extension_field::target::ExtensionAlgebraTarget;
|
||||
use crate::field::field_types::Field;
|
||||
use crate::field::goldilocks_field::GoldilocksField;
|
||||
use crate::iop::witness::{PartialWitness, Witness};
|
||||
@ -618,9 +617,7 @@ mod tests {
|
||||
let yt = builder.constant_extension(y);
|
||||
let zt = builder.constant_extension(z);
|
||||
let comp_zt = builder.div_extension(xt, yt);
|
||||
let comp_zt_unsafe = builder.div_extension(xt, yt);
|
||||
builder.connect_extension(zt, comp_zt);
|
||||
builder.connect_extension(zt, comp_zt_unsafe);
|
||||
|
||||
let data = builder.build();
|
||||
let proof = data.prove(pw)?;
|
||||
@ -636,23 +633,29 @@ mod tests {
|
||||
|
||||
let config = CircuitConfig::standard_recursion_config();
|
||||
|
||||
let pw = PartialWitness::new();
|
||||
let mut pw = PartialWitness::new();
|
||||
let mut builder = CircuitBuilder::<F, D>::new(config);
|
||||
|
||||
let x = FF::rand_vec(4);
|
||||
let y = FF::rand_vec(4);
|
||||
let xa = ExtensionAlgebra(x.try_into().unwrap());
|
||||
let ya = ExtensionAlgebra(y.try_into().unwrap());
|
||||
let za = xa * ya;
|
||||
|
||||
let xt = builder.constant_ext_algebra(xa);
|
||||
let yt = builder.constant_ext_algebra(ya);
|
||||
let zt = builder.constant_ext_algebra(za);
|
||||
let xt =
|
||||
ExtensionAlgebraTarget(builder.add_virtual_extension_targets(D).try_into().unwrap());
|
||||
let yt =
|
||||
ExtensionAlgebraTarget(builder.add_virtual_extension_targets(D).try_into().unwrap());
|
||||
let zt =
|
||||
ExtensionAlgebraTarget(builder.add_virtual_extension_targets(D).try_into().unwrap());
|
||||
let comp_zt = builder.mul_ext_algebra(xt, yt);
|
||||
for i in 0..D {
|
||||
builder.connect_extension(zt.0[i], comp_zt.0[i]);
|
||||
}
|
||||
|
||||
let x = ExtensionAlgebra::<FF, D>(FF::rand_arr());
|
||||
let y = ExtensionAlgebra::<FF, D>(FF::rand_arr());
|
||||
let z = x * y;
|
||||
for i in 0..D {
|
||||
pw.set_extension_target(xt.0[i], x.0[i]);
|
||||
pw.set_extension_target(yt.0[i], y.0[i]);
|
||||
pw.set_extension_target(zt.0[i], z.0[i]);
|
||||
}
|
||||
|
||||
let data = builder.build();
|
||||
let proof = data.prove(pw)?;
|
||||
|
||||
|
||||
@ -247,6 +247,7 @@ mod tests {
|
||||
use num::{BigUint, FromPrimitive, Integer};
|
||||
use rand::Rng;
|
||||
|
||||
use crate::iop::witness::Witness;
|
||||
use crate::{
|
||||
field::goldilocks_field::GoldilocksField,
|
||||
iop::witness::PartialWitness,
|
||||
@ -263,16 +264,19 @@ mod tests {
|
||||
|
||||
type F = GoldilocksField;
|
||||
let config = CircuitConfig::standard_recursion_config();
|
||||
let pw = PartialWitness::new();
|
||||
let mut pw = PartialWitness::new();
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
|
||||
let x = builder.constant_biguint(&x_value);
|
||||
let y = builder.constant_biguint(&y_value);
|
||||
let x = builder.add_virtual_biguint_target(x_value.to_u32_digits().len());
|
||||
let y = builder.add_virtual_biguint_target(y_value.to_u32_digits().len());
|
||||
let z = builder.add_biguint(&x, &y);
|
||||
let expected_z = builder.constant_biguint(&expected_z_value);
|
||||
|
||||
let expected_z = builder.add_virtual_biguint_target(expected_z_value.to_u32_digits().len());
|
||||
builder.connect_biguint(&z, &expected_z);
|
||||
|
||||
pw.set_biguint_target(&x, &x_value);
|
||||
pw.set_biguint_target(&y, &y_value);
|
||||
pw.set_biguint_target(&expected_z, &expected_z_value);
|
||||
|
||||
let data = builder.build();
|
||||
let proof = data.prove(pw).unwrap();
|
||||
verify(proof, &data.verifier_only, &data.common)
|
||||
@ -316,16 +320,19 @@ mod tests {
|
||||
|
||||
type F = GoldilocksField;
|
||||
let config = CircuitConfig::standard_recursion_config();
|
||||
let pw = PartialWitness::new();
|
||||
let mut pw = PartialWitness::new();
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
|
||||
let x = builder.constant_biguint(&x_value);
|
||||
let y = builder.constant_biguint(&y_value);
|
||||
let x = builder.add_virtual_biguint_target(x_value.to_u32_digits().len());
|
||||
let y = builder.add_virtual_biguint_target(y_value.to_u32_digits().len());
|
||||
let z = builder.mul_biguint(&x, &y);
|
||||
let expected_z = builder.constant_biguint(&expected_z_value);
|
||||
|
||||
let expected_z = builder.add_virtual_biguint_target(expected_z_value.to_u32_digits().len());
|
||||
builder.connect_biguint(&z, &expected_z);
|
||||
|
||||
pw.set_biguint_target(&x, &x_value);
|
||||
pw.set_biguint_target(&y, &y_value);
|
||||
pw.set_biguint_target(&expected_z, &expected_z_value);
|
||||
|
||||
let data = builder.build();
|
||||
let proof = data.prove(pw).unwrap();
|
||||
verify(proof, &data.verifier_only, &data.common)
|
||||
|
||||
@ -146,14 +146,14 @@ mod tests {
|
||||
let pw = PartialWitness::new();
|
||||
let mut builder = CircuitBuilder::<F, 4>::new(config);
|
||||
|
||||
let n = thread_rng().gen_range(0..(1 << 10));
|
||||
let n = thread_rng().gen_range(0..(1 << 30));
|
||||
let x = builder.constant(F::from_canonical_usize(n));
|
||||
|
||||
let zero = builder._false();
|
||||
let one = builder._true();
|
||||
|
||||
let y = builder.le_sum(
|
||||
(0..10)
|
||||
(0..30)
|
||||
.scan(n, |acc, _| {
|
||||
let tmp = *acc % 2;
|
||||
*acc /= 2;
|
||||
|
||||
@ -5,6 +5,7 @@ use num::{BigUint, FromPrimitive, Zero};
|
||||
use crate::field::extension_field::target::ExtensionTarget;
|
||||
use crate::field::extension_field::{Extendable, FieldExtension};
|
||||
use crate::field::field_types::Field;
|
||||
use crate::gadgets::arithmetic_u32::U32Target;
|
||||
use crate::gadgets::biguint::BigUintTarget;
|
||||
use crate::gadgets::nonnative::NonNativeTarget;
|
||||
use crate::hash::hash_types::HashOutTarget;
|
||||
@ -136,6 +137,16 @@ pub trait Witness<F: Field> {
|
||||
self.set_target(target.target, F::from_bool(value))
|
||||
}
|
||||
|
||||
fn set_u32_target(&mut self, target: U32Target, value: u32) {
|
||||
self.set_target(target.0, F::from_canonical_u32(value))
|
||||
}
|
||||
|
||||
fn set_biguint_target(&mut self, target: &BigUintTarget, value: &BigUint) {
|
||||
for (<, &l) in target.limbs.iter().zip(&value.to_u32_digits()) {
|
||||
self.set_u32_target(lt, l);
|
||||
}
|
||||
}
|
||||
|
||||
fn set_wire(&mut self, wire: Wire, value: F) {
|
||||
self.set_target(Target::Wire(wire), value)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user