mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-11-24 07:48:04 +03:00
fix mutability tests
This commit is contained in:
parent
d4eae685a3
commit
f334ba646d
@ -9,7 +9,7 @@ pub mod import;
|
||||
pub mod inputs;
|
||||
pub mod integers;
|
||||
pub mod macros;
|
||||
// pub mod mutability;
|
||||
pub mod mutability;
|
||||
// pub mod statements;
|
||||
// pub mod syntax;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
// Adding the `mut` keyword makes an array variable mutable.
|
||||
function main() -> u32 {
|
||||
function main() {
|
||||
let mut a = [1u32];
|
||||
a[0] = 0;
|
||||
|
||||
return a[0]
|
||||
assert_eq!(a[0], 0u32);
|
||||
}
|
@ -3,9 +3,9 @@ circuit Foo {
|
||||
x: u32
|
||||
}
|
||||
|
||||
function main() -> u32 {
|
||||
function main() {
|
||||
let mut a = Foo { x: 1 };
|
||||
a.x = 0;
|
||||
|
||||
return a.x
|
||||
assert_eq!(a.x, 0u32);
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
// Function inputs are immutable by default.
|
||||
function main(a: u32) {
|
||||
a = 0;
|
||||
function main(a: bool) {
|
||||
a = false;
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
// Adding the `mut` keyword makes a function variable mutable.
|
||||
function main(mut a: u32) -> u32 {
|
||||
a = 0;
|
||||
function main(mut a: bool) {
|
||||
a = true;
|
||||
|
||||
return a
|
||||
assert_eq!(a, true);
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
// Adding the `mut` keyword makes a variable mutable.
|
||||
function main() -> u32 {
|
||||
function main() {
|
||||
let mut a = 1u32;
|
||||
a = 0;
|
||||
|
||||
return a
|
||||
assert_eq!(a, 0u32);
|
||||
}
|
@ -1,42 +1,12 @@
|
||||
use crate::{array::input_value_u32_one, parse_program, EdwardsConstrainedValue, EdwardsTestCompiler};
|
||||
use leo_compiler::{
|
||||
errors::{CompilerError, FunctionError, StatementError},
|
||||
ConstrainedValue,
|
||||
Integer,
|
||||
};
|
||||
|
||||
use snarkos_curves::edwards_bls12::Fq;
|
||||
use snarkos_models::gadgets::{r1cs::TestConstraintSystem, utilities::uint::UInt32};
|
||||
|
||||
fn mut_success(program: EdwardsTestCompiler) {
|
||||
let mut cs = TestConstraintSystem::<Fq>::new();
|
||||
let output = program.compile_constraints(&mut cs).unwrap();
|
||||
|
||||
assert!(cs.is_satisfied());
|
||||
assert_eq!(
|
||||
EdwardsConstrainedValue::Return(vec![ConstrainedValue::Integer(Integer::U32(UInt32::constant(0)))]).to_string(),
|
||||
output.to_string()
|
||||
);
|
||||
}
|
||||
|
||||
fn mut_fail(program: EdwardsTestCompiler) {
|
||||
let mut cs = TestConstraintSystem::<Fq>::new();
|
||||
let err = program.compile_constraints(&mut cs).unwrap_err();
|
||||
|
||||
// It would be ideal if assert_eq!(Error1, Error2) were possible but unfortunately it is not due to
|
||||
// https://github.com/rust-lang/rust/issues/34158#issuecomment-224910299
|
||||
match err {
|
||||
CompilerError::FunctionError(FunctionError::StatementError(StatementError::Error(_string))) => {}
|
||||
err => panic!("Expected immutable assign error, got {}", err),
|
||||
}
|
||||
}
|
||||
use crate::{assert_satisfied, expect_compiler_error, generate_main_inputs, parse_program};
|
||||
use leo_types::InputValue;
|
||||
|
||||
#[test]
|
||||
fn test_let() {
|
||||
let bytes = include_bytes!("let.leo");
|
||||
let program = parse_program(bytes).unwrap();
|
||||
|
||||
mut_fail(program);
|
||||
expect_compiler_error(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -44,7 +14,7 @@ fn test_let_mut() {
|
||||
let bytes = include_bytes!("let_mut.leo");
|
||||
let program = parse_program(bytes).unwrap();
|
||||
|
||||
mut_success(program);
|
||||
assert_satisfied(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -52,7 +22,7 @@ fn test_const_fail() {
|
||||
let bytes = include_bytes!("const.leo");
|
||||
let program = parse_program(bytes).unwrap();
|
||||
|
||||
mut_fail(program);
|
||||
expect_compiler_error(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -60,7 +30,7 @@ fn test_const_mut_fail() {
|
||||
let bytes = include_bytes!("const_mut.leo");
|
||||
let program = parse_program(bytes).unwrap();
|
||||
|
||||
mut_fail(program);
|
||||
expect_compiler_error(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -68,7 +38,7 @@ fn test_array() {
|
||||
let bytes = include_bytes!("array.leo");
|
||||
let program = parse_program(bytes).unwrap();
|
||||
|
||||
mut_fail(program);
|
||||
expect_compiler_error(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -76,7 +46,7 @@ fn test_array_mut() {
|
||||
let bytes = include_bytes!("array_mut.leo");
|
||||
let program = parse_program(bytes).unwrap();
|
||||
|
||||
mut_success(program);
|
||||
assert_satisfied(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -84,7 +54,7 @@ fn test_circuit() {
|
||||
let bytes = include_bytes!("circuit.leo");
|
||||
let program = parse_program(bytes).unwrap();
|
||||
|
||||
mut_fail(program);
|
||||
expect_compiler_error(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -92,7 +62,7 @@ fn test_circuit_mut() {
|
||||
let bytes = include_bytes!("circuit_mut.leo");
|
||||
let program = parse_program(bytes).unwrap();
|
||||
|
||||
mut_success(program);
|
||||
assert_satisfied(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -100,8 +70,11 @@ fn test_function_input() {
|
||||
let bytes = include_bytes!("function_input.leo");
|
||||
let mut program = parse_program(bytes).unwrap();
|
||||
|
||||
program.set_main_inputs(vec![Some(input_value_u32_one())]);
|
||||
mut_fail(program);
|
||||
let main_inputs = generate_main_inputs(vec![("a", Some(InputValue::Boolean(true)))]);
|
||||
|
||||
program.set_main_inputs(main_inputs);
|
||||
|
||||
expect_compiler_error(program);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -109,6 +82,9 @@ fn test_function_input_mut() {
|
||||
let bytes = include_bytes!("function_input_mut.leo");
|
||||
let mut program = parse_program(bytes).unwrap();
|
||||
|
||||
program.set_main_inputs(vec![Some(input_value_u32_one())]);
|
||||
mut_success(program);
|
||||
let main_inputs = generate_main_inputs(vec![("a", Some(InputValue::Boolean(true)))]);
|
||||
|
||||
program.set_main_inputs(main_inputs);
|
||||
|
||||
assert_satisfied(program);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user