mirror of https://github.com/zcash/halo2.git
Add test cases exercising Error::NotEnoughColumnsForConstants
This commit is contained in:
parent
6420a25c8c
commit
4e6c857854
|
@ -305,3 +305,58 @@ impl<'r, 'a, F: Field, CS: Assignment<F> + 'a> RegionLayouter<F>
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use pasta_curves::vesta;
|
||||||
|
|
||||||
|
use super::SimpleFloorPlanner;
|
||||||
|
use crate::{
|
||||||
|
dev::MockProver,
|
||||||
|
plonk::{Advice, Circuit, Column, Error},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn not_enough_columns_for_constants() {
|
||||||
|
struct MyCircuit {}
|
||||||
|
|
||||||
|
impl Circuit<vesta::Scalar> for MyCircuit {
|
||||||
|
type Config = Column<Advice>;
|
||||||
|
type FloorPlanner = SimpleFloorPlanner;
|
||||||
|
|
||||||
|
fn without_witnesses(&self) -> Self {
|
||||||
|
MyCircuit {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn configure(meta: &mut crate::plonk::ConstraintSystem<vesta::Scalar>) -> Self::Config {
|
||||||
|
meta.advice_column()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn synthesize(
|
||||||
|
&self,
|
||||||
|
config: Self::Config,
|
||||||
|
mut layouter: impl crate::circuit::Layouter<vesta::Scalar>,
|
||||||
|
) -> Result<(), crate::plonk::Error> {
|
||||||
|
layouter.assign_region(
|
||||||
|
|| "assign constant",
|
||||||
|
|mut region| {
|
||||||
|
region.assign_advice_from_constant(
|
||||||
|
|| "one",
|
||||||
|
config,
|
||||||
|
0,
|
||||||
|
vesta::Scalar::one(),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let circuit = MyCircuit {};
|
||||||
|
assert_eq!(
|
||||||
|
MockProver::run(3, &circuit, vec![]).unwrap_err(),
|
||||||
|
Error::NotEnoughColumnsForConstants,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -414,3 +414,57 @@ impl<'r, 'a, F: Field, CS: Assignment<F> + 'a> RegionLayouter<F> for V1Region<'r
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use pasta_curves::vesta;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
dev::MockProver,
|
||||||
|
plonk::{Advice, Circuit, Column, Error},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn not_enough_columns_for_constants() {
|
||||||
|
struct MyCircuit {}
|
||||||
|
|
||||||
|
impl Circuit<vesta::Scalar> for MyCircuit {
|
||||||
|
type Config = Column<Advice>;
|
||||||
|
type FloorPlanner = super::V1;
|
||||||
|
|
||||||
|
fn without_witnesses(&self) -> Self {
|
||||||
|
MyCircuit {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn configure(meta: &mut crate::plonk::ConstraintSystem<vesta::Scalar>) -> Self::Config {
|
||||||
|
meta.advice_column()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn synthesize(
|
||||||
|
&self,
|
||||||
|
config: Self::Config,
|
||||||
|
mut layouter: impl crate::circuit::Layouter<vesta::Scalar>,
|
||||||
|
) -> Result<(), crate::plonk::Error> {
|
||||||
|
layouter.assign_region(
|
||||||
|
|| "assign constant",
|
||||||
|
|mut region| {
|
||||||
|
region.assign_advice_from_constant(
|
||||||
|
|| "one",
|
||||||
|
config,
|
||||||
|
0,
|
||||||
|
vesta::Scalar::one(),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let circuit = MyCircuit {};
|
||||||
|
assert_eq!(
|
||||||
|
MockProver::run(3, &circuit, vec![]).unwrap_err(),
|
||||||
|
Error::NotEnoughColumnsForConstants,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -134,7 +134,7 @@ pub struct ProvingKey<C: CurveAffine> {
|
||||||
|
|
||||||
/// This is an error that could occur during proving or circuit synthesis.
|
/// This is an error that could occur during proving or circuit synthesis.
|
||||||
// TODO: these errors need to be cleaned up
|
// TODO: these errors need to be cleaned up
|
||||||
#[derive(Debug)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
/// This is an error that can occur during synthesis of the circuit, for
|
/// This is an error that can occur during synthesis of the circuit, for
|
||||||
/// example, when the witness is not present.
|
/// example, when the witness is not present.
|
||||||
|
|
Loading…
Reference in New Issue