add tests, fix order of outputs in test runner
This commit is contained in:
parent
38be2a4890
commit
9de72fe21e
7 changed files with 76 additions and 9 deletions
|
@ -1,2 +1,2 @@
|
|||
def main(field[2] a, field[2] b, field condition) -> (field[2]):
|
||||
return if condition == 1 then a else [2, 3] fi
|
||||
return if condition == 1 then a else b fi
|
|
@ -2365,6 +2365,42 @@ mod tests {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn array_if() {
|
||||
// if 1 == 1 then [1] else [3] fi
|
||||
|
||||
let mut flattener = Flattener::new(FieldPrime::get_required_bits());
|
||||
let mut functions_flattened = vec![];
|
||||
flattener.load_corelib(&mut functions_flattened);
|
||||
let arguments_flattened = vec![];
|
||||
let mut statements_flattened = vec![];
|
||||
|
||||
let e = FieldElementArrayExpression::IfElse(
|
||||
box BooleanExpression::Eq(
|
||||
box FieldElementExpression::Number(FieldPrime::from(1)),
|
||||
box FieldElementExpression::Number(FieldPrime::from(1)),
|
||||
),
|
||||
box FieldElementArrayExpression::Value(
|
||||
1,
|
||||
vec![FieldElementExpression::Number(FieldPrime::from(1))],
|
||||
),
|
||||
box FieldElementArrayExpression::Value(
|
||||
1,
|
||||
vec![FieldElementExpression::Number(FieldPrime::from(3))],
|
||||
),
|
||||
);
|
||||
|
||||
println!(
|
||||
"{:?}",
|
||||
flattener.flatten_field_array_expression(
|
||||
&mut functions_flattened,
|
||||
&arguments_flattened,
|
||||
&mut statements_flattened,
|
||||
e,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn next_variable() {
|
||||
let mut flattener = Flattener::new(FieldPrime::get_required_bits());
|
||||
|
|
|
@ -8,12 +8,14 @@ pub type ExecutionResult<T> = Result<Witness<T>, Error>;
|
|||
pub struct Witness<T: Field>(BTreeMap<FlatVariable, T>);
|
||||
|
||||
impl<T: Field> Witness<T> {
|
||||
pub fn return_values(&self) -> Vec<T> {
|
||||
self.0
|
||||
.clone()
|
||||
.into_iter()
|
||||
pub fn return_values(&self) -> Vec<&T> {
|
||||
let out = self
|
||||
.0
|
||||
.iter()
|
||||
.filter(|(k, _)| k.is_output())
|
||||
.map(|(_, v)| v)
|
||||
.collect::<HashMap<_, _>>();
|
||||
(0..out.len())
|
||||
.map(|i| *out.get(&FlatVariable::public(i)).unwrap())
|
||||
.collect()
|
||||
}
|
||||
|
||||
|
|
2
zokrates_core/tests/bench/array_if.code
Normal file
2
zokrates_core/tests/bench/array_if.code
Normal file
|
@ -0,0 +1,2 @@
|
|||
def main(field[2] a, field[2] b, field condition) -> (field[2]):
|
||||
return if condition == 1 then a else b fi
|
24
zokrates_core/tests/bench/array_if.json
Normal file
24
zokrates_core/tests/bench/array_if.json
Normal file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"tests": [
|
||||
{
|
||||
"input": {
|
||||
"values": ["1", "2", "3", "4", "1"]
|
||||
},
|
||||
"output": {
|
||||
"Ok": {
|
||||
"values": ["1", "2"]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"input": {
|
||||
"values": ["1", "2", "3", "4", "2"]
|
||||
},
|
||||
"output": {
|
||||
"Ok": {
|
||||
"values": ["3", "4"]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
extern crate serde_json;
|
||||
extern crate zokrates_core;
|
||||
extern crate zokrates_field;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
|
||||
|
@ -9,4 +10,5 @@ mod utils;
|
|||
zokrates_test! {
|
||||
add,
|
||||
assert_one,
|
||||
array_if,
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
extern crate serde_json;
|
||||
extern crate zokrates_field;
|
||||
|
||||
use std::io;
|
||||
use zokrates_core::compile::{compile as generic_compile, CompileError};
|
||||
use zokrates_core::field::{Field, FieldPrime};
|
||||
use zokrates_core::ir;
|
||||
use zokrates_field::field::{Field, FieldPrime};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct Tests {
|
||||
|
@ -35,7 +36,7 @@ type Val = String;
|
|||
|
||||
impl From<ir::ExecutionResult<FieldPrime>> for ComparableResult {
|
||||
fn from(r: ir::ExecutionResult<FieldPrime>) -> ComparableResult {
|
||||
ComparableResult(r.map(|v| v.return_values()))
|
||||
ComparableResult(r.map(|v| v.return_values().iter().map(|&x| x.clone()).collect()))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,7 +91,7 @@ macro_rules! zokrates_test {
|
|||
#[test]
|
||||
fn $name() {
|
||||
|
||||
use zokrates_core::field::{FieldPrime, Field};
|
||||
use zokrates_field::field::{FieldPrime, Field};
|
||||
|
||||
let code_string = $crate::utils::read_file(&format!("./{}.code", stringify!($name)));
|
||||
let test_string = $crate::utils::read_file(&format!("./{}.json", stringify!($name)));
|
||||
|
|
Loading…
Reference in a new issue