1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00

put internal isolation behind flag, add tests

This commit is contained in:
schaeff 2021-05-17 13:35:45 +02:00
parent ad4717e67f
commit e5c4bb0787
4 changed files with 97 additions and 19 deletions

View file

@ -439,29 +439,38 @@ impl<'ast, T: Field> Flattener<'ast, T> {
) -> FlatUExpression<T> {
let condition = self.flatten_boolean_expression(statements_flattened, condition);
let mut consequence_statements = vec![];
let consequence = consequence.flatten(self, &mut consequence_statements);
let mut alternative_statements = vec![];
let alternative = alternative.flatten(self, &mut alternative_statements);
let condition_id = self.use_sym();
statements_flattened.push(FlatStatement::Definition(condition_id, condition));
let consequence_statements =
self.make_conditional(consequence_statements, condition_id.into());
let alternative_statements = self.make_conditional(
alternative_statements,
FlatExpression::Sub(
box FlatExpression::Number(T::one()),
box condition_id.into(),
),
);
let (consequence, alternative) = if self.config.isolate_branches {
let mut consequence_statements = vec![];
statements_flattened.extend(consequence_statements);
statements_flattened.extend(alternative_statements);
let consequence = consequence.flatten(self, &mut consequence_statements);
let mut alternative_statements = vec![];
let alternative = alternative.flatten(self, &mut alternative_statements);
let consequence_statements =
self.make_conditional(consequence_statements, condition_id.into());
let alternative_statements = self.make_conditional(
alternative_statements,
FlatExpression::Sub(
box FlatExpression::Number(T::one()),
box condition_id.into(),
),
);
statements_flattened.extend(consequence_statements);
statements_flattened.extend(alternative_statements);
(consequence, alternative)
} else {
(
consequence.flatten(self, statements_flattened),
alternative.flatten(self, statements_flattened),
)
};
let consequence = consequence.flat();
let alternative = alternative.flat();

View file

@ -0,0 +1,34 @@
{
"entry_point": "./tests/tests/panics/internal_panic.zok",
"curves": ["Bn128"],
"config": {
"allow_unconstrained_variables": false,
"isolate_branches": true
},
"tests": [
{
"input": {
"values": [
"1"
]
},
"output": {
"Ok": {
"values": ["1"]
}
}
},
{
"input": {
"values": [
"0"
]
},
"output": {
"Ok": {
"values": ["0"]
}
}
}
]
}

View file

@ -0,0 +1,2 @@
def main(field x) -> field:
return if x == 0 then 0 else 1/x fi

View file

@ -0,0 +1,33 @@
{
"entry_point": "./tests/tests/panics/internal_panic.zok",
"curves": ["Bn128"],
"tests": [
{
"input": {
"values": [
"1"
]
},
"output": {
"Ok": {
"values": ["1"]
}
}
},
{
"input": {
"values": [
"0"
]
},
"output": {
"Err": {
"UnsatisfiedConstraint": {
"left": "0",
"right": "1"
}
}
}
}
]
}