build: add r1cs flag to zxc example (#230)

the example requires this flag but the build system did not know that

credits to Victor Miller for finding the issue
This commit is contained in:
Alex Ozdemir
2025-06-02 23:55:46 -07:00
committed by GitHub
parent 9c6d7ffbe3
commit 291af0bf48
9 changed files with 30 additions and 44 deletions

View File

@@ -99,7 +99,7 @@ required-features = ["smt", "zokc"]
[[example]]
name = "zxc"
required-features = ["smt", "zok"]
required-features = ["smt", "zok", "r1cs"]
[[example]]
name = "opa_bench"

View File

@@ -29,7 +29,7 @@ pub enum ErrorKind {
/// An error with an optional span
pub struct Error<'ast> {
/// The error
pub kind: ErrorKind,
pub kind: Box<ErrorKind>,
/// The span
pub span: Option<Span<'ast>>,
}
@@ -50,7 +50,7 @@ impl Display for Error<'_> {
impl From<ErrorKind> for Error<'_> {
fn from(error_kind: ErrorKind) -> Self {
Error {
kind: error_kind,
kind: Box::new(error_kind),
span: None,
}
}
@@ -59,7 +59,7 @@ impl From<ErrorKind> for Error<'_> {
impl From<crate::circify::CircError> for Error<'_> {
fn from(circ: crate::circify::CircError) -> Self {
Error {
kind: ErrorKind::Circify(circ),
kind: Box::new(ErrorKind::Circify(circ)),
span: None,
}
}
@@ -76,7 +76,7 @@ impl<'ast> Error<'ast> {
/// New error, with span
pub fn new(kind: ErrorKind, span: Span<'ast>) -> Self {
Error {
kind,
kind: Box::new(kind),
span: Some(span),
}
}

View File

@@ -270,10 +270,10 @@ impl T {
}
pub fn pretty<W: std::io::Write>(&self, f: &mut W) -> Result<(), std::io::Error> {
use std::io::{Error, ErrorKind};
use std::io::Error;
let val = match &self.term.op() {
Op::Const(v) => Ok(v),
_ => Err(Error::new(ErrorKind::Other, "not a const val")),
_ => Err(Error::other("not a const val")),
}?;
match &**val {
Value::Bool(b) => write!(f, "{b}"),
@@ -289,10 +289,7 @@ impl T {
let (n, fl) = if let Ty::Struct(n, fl) = &self.ty {
Ok((n, fl))
} else {
Err(Error::new(
ErrorKind::Other,
"expected struct, got something else",
))
Err(Error::other("expected struct, got something else"))
}?;
write!(f, "{n} {{ ")?;
fl.fields().zip(vs.iter()).try_for_each(|((n, ty), v)| {
@@ -306,10 +303,7 @@ impl T {
let inner_ty = if let Ty::Array(_, ty) = &self.ty {
Ok(ty)
} else {
Err(Error::new(
ErrorKind::Other,
"expected array, got something else",
))
Err(Error::other("expected array, got something else"))
}?;
write!(f, "[")?;
arr.key_sort
@@ -1229,7 +1223,7 @@ impl Embeddable for ZSharp {
let ps: Vec<Option<T>> = match precompute.map(|p| p.unwrap_array()) {
Some(Ok(v)) => v.into_iter().map(Some).collect(),
Some(Err(e)) => panic!("{}", e),
None => std::iter::repeat(None).take(*n).collect(),
None => std::iter::repeat_n(None, *n).collect(),
};
debug_assert_eq!(*n, ps.len());
array(
@@ -1243,7 +1237,7 @@ impl Embeddable for ZSharp {
let ps: Vec<Option<T>> = match precompute.map(|p| p.unwrap_array()) {
Some(Ok(v)) => v.into_iter().map(Some).collect(),
Some(Err(e)) => panic!("{}", e),
None => std::iter::repeat(None).take(*n).collect(),
None => std::iter::repeat_n(None, *n).collect(),
};
debug_assert_eq!(*n, ps.len());
array(ps.into_iter().enumerate().map(|(i, p)| {

View File

@@ -252,10 +252,10 @@ impl T {
}
pub fn pretty<W: std::io::Write>(&self, f: &mut W) -> Result<(), std::io::Error> {
use std::io::{Error, ErrorKind};
use std::io::Error;
let val = match &self.term.op() {
Op::Const(v) => Ok(v),
_ => Err(Error::new(ErrorKind::Other, "not a const val")),
_ => Err(Error::other("not a const val")),
}?;
match &**val {
Value::Bool(b) => write!(f, "{b}"),
@@ -285,19 +285,13 @@ impl T {
})?;
write!(f, ")")
}
_ => Err(Error::new(
ErrorKind::Other,
"expected struct or tuple, got something else",
)),
_ => Err(Error::other("expected struct or tuple, got something else")),
},
Value::Array(arr) => {
let inner_ty = if let Ty::Array(_, ty) = &self.ty {
Ok(ty)
} else {
Err(Error::new(
ErrorKind::Other,
"expected array, got something else",
))
Err(Error::other("expected array, got something else"))
}?;
write!(f, "[")?;
arr.key_sort
@@ -1246,7 +1240,7 @@ impl Embeddable for ZSharp {
let ps: Vec<Option<T>> = match precompute.map(|p| p.unwrap_array()) {
Some(Ok(v)) => v.into_iter().map(Some).collect(),
Some(Err(e)) => panic!("{}", e),
None => std::iter::repeat(None).take(*n).collect(),
None => std::iter::repeat_n(None, *n).collect(),
};
debug_assert_eq!(*n, ps.len());
array(
@@ -1260,7 +1254,7 @@ impl Embeddable for ZSharp {
let ps: Vec<Option<T>> = match precompute.map(|p| p.unwrap_array()) {
Some(Ok(v)) => v.into_iter().map(Some).collect(),
Some(Err(e)) => panic!("{}", e),
None => std::iter::repeat(None).take(*n).collect(),
None => std::iter::repeat_n(None, *n).collect(),
};
debug_assert_eq!(*n, ps.len());
array(
@@ -1304,7 +1298,7 @@ impl Embeddable for ZSharp {
panic!("Precompute type doesn't match expected tuple type");
}
},
None => std::iter::repeat(None).take(tys.len()).collect(),
None => std::iter::repeat_n(None, tys.len()).collect(),
};
debug_assert_eq!(tys.len(), ps.len());
T::new(

View File

@@ -4,7 +4,7 @@ use super::*;
use circ_fields::{FieldT, FieldV};
use rand::{distributions::Distribution, prelude::SliceRandom, Rng};
use std::iter::repeat;
use std::iter::repeat_n;
// A distribution of boolean terms with some size.
// All subterms are booleans.
@@ -210,9 +210,9 @@ impl FixedSizeDist {
let s = Sort::BitVector(self.bv_width.unwrap());
vec![s.clone(), s]
}
o if o.arity().is_none() && o != &Op::BvConcat => repeat(sort.clone())
.take(rng.gen_range(1..self.size))
.collect(),
o if o.arity().is_none() && o != &Op::BvConcat => {
repeat_n(sort.clone(), rng.gen_range(1..self.size)).collect()
}
// perhaps allow concat?
Op::BvBinOp(_) => vec![sort.clone(), sort.clone()],
Op::BvUnOp(_) => vec![sort.clone()],

View File

@@ -6,7 +6,7 @@ use std::path::Path;
/// Given Path `path` and String denominator `lang`, return the filename of the path
pub fn get_path(path: &Path, lang: &str, t: &str, create: bool) -> String {
let filename = Path::new(&path.iter().last().unwrap())
let filename = Path::new(path.iter().next_back().unwrap())
.file_stem()
.unwrap()
.to_os_string()

View File

@@ -291,7 +291,7 @@ impl ToMilp {
Op::BvUext(extra_n) => {
if self.bv_has_bits(&bv.cs()[0]) {
let bits = self.get_bv_bits(&bv.cs()[0]);
let ext_bits = std::iter::repeat(Expression::from(0)).take(*extra_n);
let ext_bits = std::iter::repeat_n(Expression::from(0), *extra_n);
self.set_bv_bits(bv, bits.into_iter().chain(ext_bits).collect());
} else {
let x = self.get_bv_uint(&bv.cs()[0]);
@@ -300,9 +300,8 @@ impl ToMilp {
}
Op::BvSext(extra_n) => {
let mut bits = self.get_bv_bits(&bv.cs()[0]).into_iter().rev();
let ext_bits = std::iter::repeat(bits.next().expect("sign ext empty"))
.take(extra_n + 1);
let ext_bits =
std::iter::repeat_n(bits.next().expect("sign ext empty"), extra_n + 1);
self.set_bv_bits(bv, bits.rev().chain(ext_bits).collect());
}
Op::BoolToBv => {

View File

@@ -740,7 +740,7 @@ impl<'cfg> ToR1cs<'cfg> {
Op::BvUext(extra_n) => {
if self.bv_has_bits(&bv.cs()[0]) {
let bits = self.get_bv_bits(&bv.cs()[0]);
let ext_bits = std::iter::repeat(self.zero.clone()).take(*extra_n);
let ext_bits = std::iter::repeat_n(self.zero.clone(), *extra_n);
self.set_bv_bits(bv, bits.into_iter().chain(ext_bits).collect());
} else {
let x = self.get_bv_uint(&bv.cs()[0]);
@@ -749,9 +749,8 @@ impl<'cfg> ToR1cs<'cfg> {
}
Op::BvSext(extra_n) => {
let mut bits = self.get_bv_bits(&bv.cs()[0]).into_iter().rev();
let ext_bits = std::iter::repeat(bits.next().expect("sign ext empty"))
.take(extra_n + 1);
let ext_bits =
std::iter::repeat_n(bits.next().expect("sign ext empty"), extra_n + 1);
self.set_bv_bits(bv, bits.rev().chain(ext_bits).collect());
}
Op::PfToBv(nbits) => {

View File

@@ -1,5 +1,5 @@
// disable a clippy lint as pest_ast generates improper code
#![allow(clippy::clone_on_copy)]
#![allow(clippy::clone_on_copy, deprecated)]
use from_pest::FromPest;
use pest::error::Error as PestError;