Remove batch splitting system (#475)
* First pass at removing batch splitting * Refactor to separate module loading from request parsing * Consolidate module functionality * Tidy up comments * Use array of modules instead of HashMap * Formatting * Use module hashes when importing modules
This commit is contained in:
parent
5dab8195b4
commit
acab26e5c1
17 changed files with 1425 additions and 1938 deletions
|
|
@ -798,7 +798,6 @@ impl MainPodCompiler {
|
|||
|
||||
#[cfg(test)]
|
||||
pub mod tests {
|
||||
|
||||
use num::BigUint;
|
||||
|
||||
use super::*;
|
||||
|
|
@ -813,7 +812,7 @@ pub mod tests {
|
|||
tickets_pod_full_flow, zu_kyc_pod_builder, zu_kyc_pod_request,
|
||||
zu_kyc_sign_dict_builders, EthDosHelper, MOCK_VD_SET,
|
||||
},
|
||||
lang::parse,
|
||||
lang::load_module,
|
||||
middleware::{
|
||||
containers::{Array, Set},
|
||||
Signer as _, Value,
|
||||
|
|
@ -1382,11 +1381,8 @@ pub mod tests {
|
|||
Equal(b, 5)
|
||||
)
|
||||
"#;
|
||||
let batch = parse(input, ¶ms, &[])
|
||||
.unwrap()
|
||||
.first_batch()
|
||||
.unwrap()
|
||||
.clone();
|
||||
let module = load_module(input, "test", ¶ms, vec![]).unwrap();
|
||||
let batch = module.batch.clone();
|
||||
let pred_test = batch.predicate_ref_by_name("Test").unwrap();
|
||||
|
||||
// Try to build with wrong type in 1st arg
|
||||
|
|
@ -1434,11 +1430,8 @@ pub mod tests {
|
|||
c(6, 3)
|
||||
)
|
||||
"#;
|
||||
let batch = parse(input, ¶ms, &[])
|
||||
.unwrap()
|
||||
.first_batch()
|
||||
.unwrap()
|
||||
.clone();
|
||||
let module = load_module(input, "test", ¶ms, vec![]).unwrap();
|
||||
let batch = module.batch.clone();
|
||||
let pred_test = batch.predicate_ref_by_name("Test").unwrap();
|
||||
|
||||
let mut builder = MainPodBuilder::new(¶ms, vd_set);
|
||||
|
|
@ -1459,11 +1452,8 @@ pub mod tests {
|
|||
c(6, 3)
|
||||
)
|
||||
"#;
|
||||
let batch = parse(input, ¶ms, &[])
|
||||
.unwrap()
|
||||
.first_batch()
|
||||
.unwrap()
|
||||
.clone();
|
||||
let module = load_module(input, "test", ¶ms, vec![]).unwrap();
|
||||
let batch = module.batch.clone();
|
||||
let pred_test = batch.predicate_ref_by_name("Test").unwrap();
|
||||
|
||||
let mut builder = MainPodBuilder::new(¶ms, vd_set);
|
||||
|
|
@ -1501,12 +1491,11 @@ pub mod tests {
|
|||
"#;
|
||||
|
||||
// Parse and batch the predicate (this handles splitting internally)
|
||||
let parsed = parse(input, ¶ms, &[])?;
|
||||
let batches = &parsed.custom_batches;
|
||||
let module = load_module(input, "test", ¶ms, vec![])?;
|
||||
|
||||
// Verify it was split
|
||||
assert!(batches.split_chain("large_pred").is_some());
|
||||
let chain_info = batches.split_chain("large_pred").unwrap();
|
||||
assert!(module.split_chains.contains_key("large_pred"));
|
||||
let chain_info = module.split_chains.get("large_pred").unwrap();
|
||||
assert_eq!(chain_info.chain_pieces.len(), 2);
|
||||
assert_eq!(chain_info.real_statement_count, 6);
|
||||
|
||||
|
|
@ -1538,10 +1527,10 @@ pub mod tests {
|
|||
let statements = vec![st_a, st_b, st_c, st_d, st_e, st_f];
|
||||
|
||||
// Use apply_predicate (primary API) to automatically wire the split chain
|
||||
let result = batches.apply_predicate(&mut builder, "large_pred", statements, true)?;
|
||||
let result = module.apply_predicate(&mut builder, "large_pred", statements, true)?;
|
||||
|
||||
// The result should be a valid statement
|
||||
let predicate = batches.predicate_ref_by_name("large_pred").unwrap();
|
||||
let predicate = module.predicate_ref_by_name("large_pred").unwrap();
|
||||
match &result {
|
||||
Statement::Custom(pred_ref, _) => {
|
||||
assert_eq!(pred_ref, &predicate);
|
||||
|
|
|
|||
|
|
@ -632,7 +632,7 @@ mod tests {
|
|||
dict,
|
||||
examples::MOCK_VD_SET,
|
||||
frontend::{Operation as FrontendOp, SignedDictBuilder},
|
||||
lang::parse,
|
||||
lang::load_module,
|
||||
};
|
||||
|
||||
#[test]
|
||||
|
|
@ -756,18 +756,17 @@ mod tests {
|
|||
|
||||
// pred_a accepts a Contains statement
|
||||
// pred_b accepts a pred_a statement (Custom statement from pred_a)
|
||||
let parsed = parse(
|
||||
let module = load_module(
|
||||
r#"
|
||||
pred_a(X) = AND(Contains(X, "k", 1))
|
||||
pred_b(X) = AND(pred_a(X))
|
||||
"#,
|
||||
"test",
|
||||
¶ms,
|
||||
&[],
|
||||
vec![],
|
||||
)
|
||||
.expect("parse predicates");
|
||||
let batch = parsed
|
||||
.first_batch()
|
||||
.expect("parse predicates should have a batch");
|
||||
.expect("load module");
|
||||
let batch = &module.batch;
|
||||
|
||||
let mut builder = MultiPodBuilder::new(¶ms, vd_set);
|
||||
|
||||
|
|
@ -1484,20 +1483,19 @@ mod tests {
|
|||
let vd_set = &*MOCK_VD_SET;
|
||||
|
||||
// Chain of predicates: each accepts the output of the previous
|
||||
let parsed = parse(
|
||||
let module = load_module(
|
||||
r#"
|
||||
pred_a(X) = AND(Contains(X, "k", 1))
|
||||
pred_b(X) = AND(pred_a(X))
|
||||
pred_c(X) = AND(pred_b(X))
|
||||
pred_d(X) = AND(pred_c(X))
|
||||
"#,
|
||||
"test",
|
||||
¶ms,
|
||||
&[],
|
||||
vec![],
|
||||
)
|
||||
.expect("parse predicates");
|
||||
let batch = parsed
|
||||
.first_batch()
|
||||
.expect("parse predicates should have a batch");
|
||||
.expect("load module");
|
||||
let batch = &module.batch;
|
||||
|
||||
let mut builder = MultiPodBuilder::new(¶ms, vd_set);
|
||||
|
||||
|
|
@ -1612,7 +1610,7 @@ mod tests {
|
|||
// pred_a takes TWO custom statement arguments (b_out and c_out)
|
||||
// pred_b and pred_c each take a Contains
|
||||
// Note: AND clauses are newline-separated, not comma-separated
|
||||
let parsed = parse(
|
||||
let module = load_module(
|
||||
r#"
|
||||
pred_b(X) = AND(Contains(X, "k", 1))
|
||||
pred_c(X) = AND(Contains(X, "k", 1))
|
||||
|
|
@ -1621,13 +1619,12 @@ mod tests {
|
|||
pred_c(Y)
|
||||
)
|
||||
"#,
|
||||
"test",
|
||||
¶ms,
|
||||
&[],
|
||||
vec![],
|
||||
)
|
||||
.expect("parse predicates");
|
||||
let batch = parsed
|
||||
.first_batch()
|
||||
.expect("parse predicates should have a batch");
|
||||
.expect("load module");
|
||||
let batch = &module.batch;
|
||||
|
||||
let mut builder = MultiPodBuilder::new(¶ms, vd_set);
|
||||
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ mod tests {
|
|||
zu_kyc_pod_builder, zu_kyc_pod_request, zu_kyc_sign_dict_builders, MOCK_VD_SET,
|
||||
},
|
||||
frontend::{MainPodBuilder, Operation},
|
||||
lang::parse,
|
||||
lang::parse_request,
|
||||
middleware::{Params, Value},
|
||||
};
|
||||
|
||||
|
|
@ -210,7 +210,7 @@ mod tests {
|
|||
assert!(request.exact_match_pod(&*kyc.pod).is_ok());
|
||||
|
||||
// This request does not match the POD, because the POD does not contain a NotEqual statement.
|
||||
let non_matching_request = parse(
|
||||
let non_matching_request = parse_request(
|
||||
r#"
|
||||
REQUEST(
|
||||
NotEqual(4, 5)
|
||||
|
|
@ -219,8 +219,7 @@ mod tests {
|
|||
¶ms,
|
||||
&[],
|
||||
)
|
||||
.unwrap()
|
||||
.request;
|
||||
.unwrap();
|
||||
assert!(non_matching_request.exact_match_pod(&*kyc.pod).is_err());
|
||||
}
|
||||
|
||||
|
|
@ -240,7 +239,7 @@ mod tests {
|
|||
|
||||
println!("{pod}");
|
||||
|
||||
let request = parse(
|
||||
let request = parse_request(
|
||||
r#"
|
||||
REQUEST(
|
||||
SumOf(a, b, c)
|
||||
|
|
@ -252,7 +251,7 @@ mod tests {
|
|||
)
|
||||
.unwrap();
|
||||
|
||||
let bindings = request.request.exact_match_pod(&*pod.pod).unwrap();
|
||||
let bindings = request.exact_match_pod(&*pod.pod).unwrap();
|
||||
assert_eq!(*bindings.get("a").unwrap(), 10.into());
|
||||
assert_eq!(*bindings.get("b").unwrap(), 9.into());
|
||||
assert_eq!(*bindings.get("c").unwrap(), 1.into());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue