Add test cases exercising Error::NotEnoughColumnsForConstants

This commit is contained in:
Jack Grigg 2021-07-21 16:43:18 +01:00
parent 6420a25c8c
commit 4e6c857854
3 changed files with 110 additions and 1 deletions

View File

@ -305,3 +305,58 @@ impl<'r, 'a, F: Field, CS: Assignment<F> + 'a> RegionLayouter<F>
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,
);
}
}

View File

@ -414,3 +414,57 @@ impl<'r, 'a, F: Field, CS: Assignment<F> + 'a> RegionLayouter<F> for V1Region<'r
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,
);
}
}

View File

@ -134,7 +134,7 @@ pub struct ProvingKey<C: CurveAffine> {
/// This is an error that could occur during proving or circuit synthesis.
// TODO: these errors need to be cleaned up
#[derive(Debug)]
#[derive(Debug, PartialEq)]
pub enum Error {
/// This is an error that can occur during synthesis of the circuit, for
/// example, when the witness is not present.