mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-11-27 02:24:15 +03:00
program state
This commit is contained in:
parent
72648c993c
commit
032341089b
@ -1,2 +1,5 @@
|
|||||||
[main]
|
[main]
|
||||||
x: [i16; 1] = [0i16; 1];
|
x: [i16; 1] = [0i16; 1];
|
||||||
|
|
||||||
|
[registers]
|
||||||
|
r0: bool = true;
|
||||||
|
@ -4,7 +4,6 @@ expectation: Pass
|
|||||||
input_file: input/main_array.in
|
input_file: input/main_array.in
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function main(x: [i16; 1]) {
|
function main(x: [i16; 1]) -> bool{
|
||||||
console.log("{}", x);
|
return x[0] == 0;
|
||||||
console.assert(x[0] == 0);
|
|
||||||
}
|
}
|
||||||
|
@ -1,2 +1,5 @@
|
|||||||
[constants]
|
[constants]
|
||||||
x: [i16; 1] = [0i16; 1];
|
x: [i16; 1] = [0i16; 1];
|
||||||
|
|
||||||
|
[registers]
|
||||||
|
r0: bool = true;
|
||||||
|
@ -4,7 +4,7 @@ expectation: Pass
|
|||||||
input_file: input/main_array.in
|
input_file: input/main_array.in
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function main(const x: [i16; 1]) {
|
function main(const x: [i16; 1]) -> bool {
|
||||||
console.log("{}", x);
|
console.log("{}", x);
|
||||||
console.assert(x[0] == 0);
|
return x[0] == 0;
|
||||||
}
|
}
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
// Copyright (C) 2019-2021 Aleo Systems Inc.
|
|
||||||
// This file is part of the Leo library.
|
|
||||||
|
|
||||||
// The Leo library is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// The Leo library is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
use crate::{expect_compiler_error, get_output, parse_program_with_input};
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_registers_pass() {
|
|
||||||
let program_string = include_str!("registers_pass.leo");
|
|
||||||
let input_string = include_str!("input/main.in");
|
|
||||||
let expected = include_bytes!("output/registers_pass.out");
|
|
||||||
|
|
||||||
let program = parse_program_with_input(program_string, input_string).unwrap();
|
|
||||||
|
|
||||||
let actual = get_output(program);
|
|
||||||
|
|
||||||
assert!(expected.eq(actual.bytes().as_slice()));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_registers_fail() {
|
|
||||||
let program_string = include_str!("registers_fail.leo");
|
|
||||||
let input_string = include_str!("input/main.in");
|
|
||||||
|
|
||||||
let program = parse_program_with_input(program_string, input_string).unwrap();
|
|
||||||
|
|
||||||
expect_compiler_error(program);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_registers_array() {
|
|
||||||
let program_string = include_str!("registers_array.leo");
|
|
||||||
let input_string = include_str!("input/array.in");
|
|
||||||
let expected = include_bytes!("output/registers_array.out");
|
|
||||||
|
|
||||||
let program = parse_program_with_input(program_string, input_string).unwrap();
|
|
||||||
|
|
||||||
let actual = get_output(program);
|
|
||||||
|
|
||||||
assert!(expected.eq(actual.bytes().as_slice()));
|
|
||||||
}
|
|
@ -1,2 +0,0 @@
|
|||||||
[registers]
|
|
||||||
r2: [[u8; 4]; 2] = [[1, 2, 3, 4], [5, 6, 7, 8]];
|
|
@ -1,2 +0,0 @@
|
|||||||
[registers]
|
|
||||||
r: u8 = 1;
|
|
@ -1,3 +1,9 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: input/array.in
|
||||||
|
*/
|
||||||
|
|
||||||
function main () -> [[u8; 4]; 2] {
|
function main () -> [[u8; 4]; 2] {
|
||||||
return [[1u8, 2u8, 3u8, 4u8], [5u8, 6u8, 7u8, 8u8]];
|
return [[1u8, 2u8, 3u8, 4u8], [5u8, 6u8, 7u8, 8u8]];
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Fail
|
||||||
|
input_file: input/main.in
|
||||||
|
*/
|
||||||
|
|
||||||
function main() -> bool {
|
function main() -> bool {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: input/main.in
|
||||||
|
*/
|
||||||
|
|
||||||
function main() -> u8 {
|
function main() -> u8 {
|
||||||
return 1u8;
|
return 1u8;
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,13 @@
|
|||||||
function main() {
|
/*
|
||||||
console.assert(input.state.root == [0u8; 32]);
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
state_file: input/token_withdraw.state
|
||||||
|
input_file: input/dummy.in
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() -> bool {
|
||||||
const expected: address = aleo1qnr4dkkvkgfqph0vzc3y6z2eu975wnpz2925ntjccd5cfqxtyu8sta57j8;
|
const expected: address = aleo1qnr4dkkvkgfqph0vzc3y6z2eu975wnpz2925ntjccd5cfqxtyu8sta57j8;
|
||||||
//console.assert(input.record.owner, expected);
|
|
||||||
|
|
||||||
console.assert(input.state_leaf.network_id == 0u8);
|
return input.state.root == [0u8; 32]
|
||||||
}
|
&& input.state_leaf.network_id == 0u8;
|
||||||
|
}
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
function main() {
|
/*
|
||||||
console.assert(input.state.root == [0u8; 32]);
|
namespace: Compile
|
||||||
}
|
expectation: Pass
|
||||||
|
state_file: input/token_withdraw.state
|
||||||
|
input_file: input/dummy.in
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() -> bool {
|
||||||
|
return input.state.root == [0u8; 32];
|
||||||
|
}
|
||||||
|
10
tests/compiler/input_files/program_state/basic.leo
Normal file
10
tests/compiler/input_files/program_state/basic.leo
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
state_file: input/basic.state
|
||||||
|
input_file: input/dummy.in
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() -> bool {
|
||||||
|
return true;
|
||||||
|
}
|
2
tests/compiler/input_files/program_state/input/dummy.in
Normal file
2
tests/compiler/input_files/program_state/input/dummy.in
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[registers]
|
||||||
|
r0: bool = false;
|
@ -1,78 +0,0 @@
|
|||||||
// Copyright (C) 2019-2021 Aleo Systems Inc.
|
|
||||||
// This file is part of the Leo library.
|
|
||||||
|
|
||||||
// The Leo library is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
|
|
||||||
// The Leo library is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
use crate::{assert_satisfied, parse_program_with_state, parse_state};
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_basic() {
|
|
||||||
let state_string = include_str!("input/basic.state");
|
|
||||||
|
|
||||||
parse_state(state_string).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_token_withdraw() {
|
|
||||||
let state_string = include_str!("input/token_withdraw.state");
|
|
||||||
|
|
||||||
parse_state(state_string).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_access_state() {
|
|
||||||
let program_string = include_str!("access_state.leo");
|
|
||||||
let state_string = include_str!("input/token_withdraw.state");
|
|
||||||
|
|
||||||
let program = parse_program_with_state(program_string, state_string).unwrap();
|
|
||||||
|
|
||||||
assert_satisfied(program);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_access_all() {
|
|
||||||
let program_string = include_str!("access_all.leo");
|
|
||||||
let state_string = include_str!("input/token_withdraw.state");
|
|
||||||
|
|
||||||
let program = parse_program_with_state(program_string, state_string).unwrap();
|
|
||||||
|
|
||||||
assert_satisfied(program);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_visibility_fail() {
|
|
||||||
let state_string = include_str!("input/visibility_fail.state");
|
|
||||||
|
|
||||||
let is_err = parse_state(state_string).is_err();
|
|
||||||
|
|
||||||
assert!(is_err);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_section_undefined() {
|
|
||||||
let state_string = include_str!("input/section_undefined.state");
|
|
||||||
|
|
||||||
let is_err = parse_state(state_string).is_err();
|
|
||||||
|
|
||||||
assert!(is_err);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_section_invalid() {
|
|
||||||
let state_string = include_str!("input/section_invalid.state");
|
|
||||||
|
|
||||||
let is_err = parse_state(state_string).is_err();
|
|
||||||
|
|
||||||
assert!(is_err);
|
|
||||||
}
|
|
10
tests/compiler/input_files/program_state/section_invalid.leo
Normal file
10
tests/compiler/input_files/program_state/section_invalid.leo
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Fail
|
||||||
|
state_file: input/section_invalid.state
|
||||||
|
input_file: input/dummy.in
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() -> bool {
|
||||||
|
return true;
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Fail
|
||||||
|
state_file: input/section_undefined.state
|
||||||
|
input_file: input/dummy.in
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() -> bool {
|
||||||
|
return true;
|
||||||
|
}
|
10
tests/compiler/input_files/program_state/visibility_fail.leo
Normal file
10
tests/compiler/input_files/program_state/visibility_fail.leo
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Fail
|
||||||
|
state_file: input/visibility_fail.state
|
||||||
|
input_file: input/dummy.in
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() -> bool {
|
||||||
|
return true;
|
||||||
|
}
|
@ -12,4 +12,7 @@ outputs:
|
|||||||
output:
|
output:
|
||||||
- input_file: input/main_array.in
|
- input_file: input/main_array.in
|
||||||
output:
|
output:
|
||||||
registers: {}
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
@ -12,4 +12,7 @@ outputs:
|
|||||||
output:
|
output:
|
||||||
- input_file: input/main_array.in
|
- input_file: input/main_array.in
|
||||||
output:
|
output:
|
||||||
registers: {}
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 0
|
||||||
|
num_constraints: 0
|
||||||
|
at: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
bt: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
ct: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
output:
|
||||||
|
- input_file: input/array.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r2:
|
||||||
|
type: "[[u8; 4]; 2]"
|
||||||
|
value: "[[1, 2, 3, 4], [5, 6, 7, 8]]"
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Fail
|
||||||
|
outputs:
|
||||||
|
- " --> /test/src/main.leo:3:1\n |\n 3 | function main() -> bool {\n 4 | ...\n 5 | }\n | ^\n |\n = Mismatched types. Expected register output type `u8`, found type `bool`."
|
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 0
|
||||||
|
num_constraints: 0
|
||||||
|
at: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
bt: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
ct: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
output:
|
||||||
|
- input_file: input/main.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r:
|
||||||
|
type: u8
|
||||||
|
value: "1"
|
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 527
|
||||||
|
num_constraints: 527
|
||||||
|
at: 7f6c7713392a44fa83a3fbffafd830d6e20356d72aff3d67f78c70ea5439a735
|
||||||
|
bt: b21f2049f4ae8c11dff5de8b33d532f3ea7637bfdbd09395d056495472c1853a
|
||||||
|
ct: 096693f8f4f40acd0e3f82bd256738e157f33989bcc68a7b8eabe44e8449bbb0
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 511
|
||||||
|
num_constraints: 511
|
||||||
|
at: bb121a0b56bee9895a337644cf8ece2f09dcf9113cd75c29f9bf26d635ba6d22
|
||||||
|
bt: 4a54bb6ffc0c9de1f8f349449b9071745f3db6985adb9b1d657e8aaa4309cc41
|
||||||
|
ct: a0736e8c8f3bb1c39a147348754e53dfd31fd76a1df9cd9960472841bcc531df
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 0
|
||||||
|
num_constraints: 0
|
||||||
|
at: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
bt: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
ct: 4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Fail
|
||||||
|
outputs:
|
||||||
|
- aborting due to syntax error
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Fail
|
||||||
|
outputs:
|
||||||
|
- aborting due to syntax error
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Fail
|
||||||
|
outputs:
|
||||||
|
- aborting due to syntax error
|
Loading…
Reference in New Issue
Block a user