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]):
|
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]
|
#[test]
|
||||||
fn next_variable() {
|
fn next_variable() {
|
||||||
let mut flattener = Flattener::new(FieldPrime::get_required_bits());
|
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>);
|
pub struct Witness<T: Field>(BTreeMap<FlatVariable, T>);
|
||||||
|
|
||||||
impl<T: Field> Witness<T> {
|
impl<T: Field> Witness<T> {
|
||||||
pub fn return_values(&self) -> Vec<T> {
|
pub fn return_values(&self) -> Vec<&T> {
|
||||||
self.0
|
let out = self
|
||||||
.clone()
|
.0
|
||||||
.into_iter()
|
.iter()
|
||||||
.filter(|(k, _)| k.is_output())
|
.filter(|(k, _)| k.is_output())
|
||||||
.map(|(_, v)| v)
|
.collect::<HashMap<_, _>>();
|
||||||
|
(0..out.len())
|
||||||
|
.map(|i| *out.get(&FlatVariable::public(i)).unwrap())
|
||||||
.collect()
|
.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 serde_json;
|
||||||
extern crate zokrates_core;
|
extern crate zokrates_core;
|
||||||
|
extern crate zokrates_field;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde_derive;
|
extern crate serde_derive;
|
||||||
|
|
||||||
|
@ -9,4 +10,5 @@ mod utils;
|
||||||
zokrates_test! {
|
zokrates_test! {
|
||||||
add,
|
add,
|
||||||
assert_one,
|
assert_one,
|
||||||
|
array_if,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
extern crate serde_json;
|
extern crate serde_json;
|
||||||
|
extern crate zokrates_field;
|
||||||
|
|
||||||
use std::io;
|
use std::io;
|
||||||
use zokrates_core::compile::{compile as generic_compile, CompileError};
|
use zokrates_core::compile::{compile as generic_compile, CompileError};
|
||||||
use zokrates_core::field::{Field, FieldPrime};
|
|
||||||
use zokrates_core::ir;
|
use zokrates_core::ir;
|
||||||
|
use zokrates_field::field::{Field, FieldPrime};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct Tests {
|
pub struct Tests {
|
||||||
|
@ -35,7 +36,7 @@ type Val = String;
|
||||||
|
|
||||||
impl From<ir::ExecutionResult<FieldPrime>> for ComparableResult {
|
impl From<ir::ExecutionResult<FieldPrime>> for ComparableResult {
|
||||||
fn from(r: ir::ExecutionResult<FieldPrime>) -> 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]
|
#[test]
|
||||||
fn $name() {
|
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 code_string = $crate::utils::read_file(&format!("./{}.code", stringify!($name)));
|
||||||
let test_string = $crate::utils::read_file(&format!("./{}.json", stringify!($name)));
|
let test_string = $crate::utils::read_file(&format!("./{}.json", stringify!($name)));
|
||||||
|
|
Loading…
Reference in a new issue