Check a single POD against a POD Request (#359)
This commit is contained in:
parent
c7b39f21f0
commit
f10a5adb41
11 changed files with 419 additions and 102 deletions
|
|
@ -70,7 +70,7 @@ mod tests {
|
|||
let params = Params::default();
|
||||
let processed = parse(input, ¶ms, &[])?;
|
||||
let batch_result = processed.custom_batch;
|
||||
let request_result = processed.request_templates;
|
||||
let request_result = processed.request.templates();
|
||||
|
||||
assert_eq!(request_result.len(), 0);
|
||||
assert_eq!(batch_result.predicates.len(), 1);
|
||||
|
|
@ -115,13 +115,11 @@ mod tests {
|
|||
let params = Params::default();
|
||||
let processed = parse(input, ¶ms, &[])?;
|
||||
let batch_result = processed.custom_batch;
|
||||
let request_templates = processed.request_templates;
|
||||
let request_templates = processed.request.templates();
|
||||
|
||||
assert_eq!(batch_result.predicates.len(), 0);
|
||||
assert!(!request_templates.is_empty());
|
||||
|
||||
let request_templates = request_templates;
|
||||
|
||||
// Expected structure
|
||||
let expected_templates = vec![
|
||||
StatementTmpl {
|
||||
|
|
@ -157,7 +155,7 @@ mod tests {
|
|||
let params = Params::default();
|
||||
let processed = parse(input, ¶ms, &[])?;
|
||||
let batch_result = processed.custom_batch;
|
||||
let request_result = processed.request_templates;
|
||||
let request_result = processed.request.templates();
|
||||
|
||||
assert_eq!(request_result.len(), 0);
|
||||
assert_eq!(batch_result.predicates.len(), 1);
|
||||
|
|
@ -214,13 +212,12 @@ mod tests {
|
|||
let params = Params::default();
|
||||
let processed = parse(input, ¶ms, &[])?;
|
||||
let batch_result = processed.custom_batch;
|
||||
let request_templates = processed.request_templates;
|
||||
let request_templates = processed.request.templates();
|
||||
|
||||
assert_eq!(batch_result.predicates.len(), 1);
|
||||
assert!(!request_templates.is_empty());
|
||||
|
||||
let batch = batch_result;
|
||||
let request_templates = request_templates;
|
||||
|
||||
// Expected Batch structure
|
||||
let expected_pred_statements = vec![StatementTmpl {
|
||||
|
|
@ -278,13 +275,11 @@ mod tests {
|
|||
let params = Params::default();
|
||||
let processed = parse(input, ¶ms, &[])?;
|
||||
let batch_result = processed.custom_batch;
|
||||
let request_templates = processed.request_templates;
|
||||
let request_templates = processed.request.templates();
|
||||
|
||||
assert_eq!(batch_result.predicates.len(), 1); // some_pred is defined
|
||||
assert!(!request_templates.is_empty());
|
||||
|
||||
let request_templates = request_templates;
|
||||
|
||||
// Expected Wildcard Indices in Request Scope:
|
||||
// ?Var1 -> 0
|
||||
// ?AnotherPod -> 1
|
||||
|
|
@ -330,13 +325,11 @@ mod tests {
|
|||
let params = Params::default();
|
||||
let processed = parse(input, ¶ms, &[])?;
|
||||
let batch_result = processed.custom_batch;
|
||||
let request_templates = processed.request_templates;
|
||||
let request_templates = processed.request.templates();
|
||||
|
||||
assert_eq!(batch_result.predicates.len(), 0);
|
||||
assert!(!request_templates.is_empty());
|
||||
|
||||
let request_templates = request_templates;
|
||||
|
||||
let expected_templates = vec![
|
||||
StatementTmpl {
|
||||
pred: Predicate::Native(NativePredicate::LtEq),
|
||||
|
|
@ -389,7 +382,7 @@ mod tests {
|
|||
|
||||
// Parse the input string
|
||||
let processed = super::parse(input, &Params::default(), &[])?;
|
||||
let parsed_templates = processed.request_templates;
|
||||
let parsed_templates = processed.request.templates();
|
||||
|
||||
// Define Expected Templates (Copied from prover/mod.rs)
|
||||
let now_minus_18y_val = Value::from(1169909388_i64);
|
||||
|
|
@ -529,7 +522,7 @@ mod tests {
|
|||
let processed = super::parse(input, ¶ms, &[])?;
|
||||
|
||||
assert!(
|
||||
processed.request_templates.is_empty(),
|
||||
processed.request.templates().is_empty(),
|
||||
"Expected no request templates"
|
||||
);
|
||||
assert_eq!(
|
||||
|
|
@ -719,7 +712,7 @@ mod tests {
|
|||
|
||||
// 3. Parse the input
|
||||
let processed = parse(&input, ¶ms, &available_batches)?;
|
||||
let request_templates = processed.request_templates;
|
||||
let request_templates = processed.request.templates();
|
||||
|
||||
assert!(
|
||||
processed.custom_batch.predicates.is_empty(),
|
||||
|
|
@ -771,7 +764,7 @@ mod tests {
|
|||
|
||||
// 3. Parse the input
|
||||
let processed = parse(&input, ¶ms, &available_batches)?;
|
||||
let request_templates = processed.request_templates;
|
||||
let request_templates = processed.request.templates();
|
||||
|
||||
assert_eq!(request_templates.len(), 2, "Expected two request templates");
|
||||
|
||||
|
|
@ -830,7 +823,7 @@ mod tests {
|
|||
let processed = parse(&input, ¶ms, &available_batches)?;
|
||||
|
||||
assert!(
|
||||
processed.request_templates.is_empty(),
|
||||
processed.request.templates().is_empty(),
|
||||
"No request should be defined"
|
||||
);
|
||||
assert_eq!(
|
||||
|
|
@ -903,7 +896,7 @@ mod tests {
|
|||
|
||||
let params = Params::default();
|
||||
let processed = parse(&input, ¶ms, &[])?;
|
||||
let request_templates = processed.request_templates;
|
||||
let request_templates = processed.request.templates();
|
||||
|
||||
let expected_templates = vec![
|
||||
StatementTmpl {
|
||||
|
|
|
|||
|
|
@ -2,8 +2,11 @@
|
|||
|
||||
use std::fmt::Write;
|
||||
|
||||
use crate::middleware::{
|
||||
CustomPredicate, CustomPredicateBatch, Predicate, StatementTmpl, StatementTmplArg, Value,
|
||||
use crate::{
|
||||
frontend::PodRequest,
|
||||
middleware::{
|
||||
CustomPredicate, CustomPredicateBatch, Predicate, StatementTmpl, StatementTmplArg, Value,
|
||||
},
|
||||
};
|
||||
|
||||
/// Trait for converting AST nodes to Podlang source code
|
||||
|
|
@ -122,6 +125,19 @@ impl PrettyPrint for Value {
|
|||
}
|
||||
}
|
||||
|
||||
impl PrettyPrint for PodRequest {
|
||||
fn fmt_podlang_with_indent(&self, w: &mut dyn Write, _indent: usize) -> std::fmt::Result {
|
||||
write!(w, "REQUEST(")?;
|
||||
for (i, template) in self.request_templates.iter().enumerate() {
|
||||
if i > 0 {
|
||||
write!(w, ", ")?;
|
||||
}
|
||||
template.fmt_podlang_with_indent(w, 4)?;
|
||||
}
|
||||
write!(w, ")")
|
||||
}
|
||||
}
|
||||
|
||||
fn fmt_predicate_definition(
|
||||
w: &mut dyn Write,
|
||||
predicate: &CustomPredicate,
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ use crate::{
|
|||
deserialize_bytes,
|
||||
primitives::ec::{curve::Point, schnorr::SecretKey},
|
||||
},
|
||||
frontend::{BuilderArg, CustomPredicateBatchBuilder, StatementTmplBuilder},
|
||||
lang::Rule,
|
||||
frontend::{BuilderArg, CustomPredicateBatchBuilder, PodRequest, StatementTmplBuilder},
|
||||
lang::parser::Rule,
|
||||
middleware::{
|
||||
self, CustomPredicateBatch, CustomPredicateRef, Key, NativePredicate, Params, Predicate,
|
||||
StatementTmpl, StatementTmplArg, Value, Wildcard, F, VALUE_SIZE,
|
||||
|
|
@ -57,7 +57,7 @@ pub fn native_predicate_from_string(s: &str) -> Option<NativePredicate> {
|
|||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct PodlangOutput {
|
||||
pub custom_batch: Arc<CustomPredicateBatch>,
|
||||
pub request_templates: Vec<StatementTmpl>,
|
||||
pub request: PodRequest,
|
||||
}
|
||||
|
||||
struct ProcessingContext<'a> {
|
||||
|
|
@ -295,7 +295,7 @@ fn second_pass(
|
|||
|
||||
Ok(PodlangOutput {
|
||||
custom_batch,
|
||||
request_templates,
|
||||
request: PodRequest::new(request_templates),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue