mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-12-23 18:21:38 +03:00
closes #1183
This commit is contained in:
parent
ad6e27000d
commit
eb0863cda9
@ -66,8 +66,9 @@ fn hash(input: String) -> String {
|
|||||||
pub(crate) fn parse_program(
|
pub(crate) fn parse_program(
|
||||||
program_string: &str,
|
program_string: &str,
|
||||||
theorem_options: Option<AstSnapshotOptions>,
|
theorem_options: Option<AstSnapshotOptions>,
|
||||||
|
cwd: Option<PathBuf>,
|
||||||
) -> Result<EdwardsTestCompiler, CompilerError> {
|
) -> Result<EdwardsTestCompiler, CompilerError> {
|
||||||
let mut compiler = new_compiler("compiler-test".into(), theorem_options);
|
let mut compiler = new_compiler(cwd.unwrap_or("compiler-test".into()), theorem_options);
|
||||||
|
|
||||||
compiler.parse_program_from_string(program_string)?;
|
compiler.parse_program_from_string(program_string)?;
|
||||||
|
|
||||||
@ -101,15 +102,12 @@ impl Namespace for CompileNamespace {
|
|||||||
// ``` cwd: import ```
|
// ``` cwd: import ```
|
||||||
// When set, uses different working directory for current file.
|
// When set, uses different working directory for current file.
|
||||||
// If not, uses file path as current working directory.
|
// If not, uses file path as current working directory.
|
||||||
// let cwd = test
|
let cwd = test.config.get("cwd").map(|val| {
|
||||||
// .config
|
let mut cwd = test.path.clone();
|
||||||
// .get("cwd")
|
cwd.pop();
|
||||||
// .map(|val| {
|
cwd.join(&val.as_str().unwrap())
|
||||||
// let mut cwd = test.path.clone();
|
});
|
||||||
// cwd.pop();
|
// .unwrap_or(test.path.clone());
|
||||||
// cwd.join(&val.as_str().unwrap())
|
|
||||||
// })
|
|
||||||
// .unwrap_or(test.path.clone());
|
|
||||||
|
|
||||||
let parsed = parse_program(
|
let parsed = parse_program(
|
||||||
&test.content,
|
&test.content,
|
||||||
@ -118,6 +116,7 @@ impl Namespace for CompileNamespace {
|
|||||||
canonicalized: true,
|
canonicalized: true,
|
||||||
type_inferenced: true,
|
type_inferenced: true,
|
||||||
}),
|
}),
|
||||||
|
cwd,
|
||||||
)
|
)
|
||||||
.map_err(|x| x.to_string())?;
|
.map_err(|x| x.to_string())?;
|
||||||
|
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
[main]
|
||||||
|
|
||||||
|
[registers]
|
@ -0,0 +1,9 @@
|
|||||||
|
circuit Cave {
|
||||||
|
function name() -> [char; 4] {
|
||||||
|
return "cave";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
|
||||||
|
}
|
6
tests/compiler/import_dependency/input/dummy.in
Normal file
6
tests/compiler/import_dependency/input/dummy.in
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[main]
|
||||||
|
y: bool = true;
|
||||||
|
n: bool = false;
|
||||||
|
|
||||||
|
[registers]
|
||||||
|
r0: bool = true;
|
8
tests/compiler/import_dependency/readme.md
Normal file
8
tests/compiler/import_dependency/readme.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
Tests in this folder test external dependencies that were imported. To mock that we
|
||||||
|
need to have structure similar to typical Leo package: source files must be in the
|
||||||
|
directory next to `imports/`; but instead of `src/` we have `tests/` here.
|
||||||
|
|
||||||
|
Option `cwd` param in these tests must point to the `tests/`, so having it as `.`
|
||||||
|
should be enough.
|
||||||
|
|
||||||
|
Have fun testing!
|
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: ../input/dummy.in
|
||||||
|
cwd: .
|
||||||
|
*/
|
||||||
|
|
||||||
|
import dependency.*;
|
||||||
|
|
||||||
|
function main(y: bool) -> bool {
|
||||||
|
return y == (Cave::name() == "cave");
|
||||||
|
}
|
14
tests/compiler/import_local/import_all.leo
Normal file
14
tests/compiler/import_local/import_all.leo
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: input/dummy.in
|
||||||
|
cwd: local_imports
|
||||||
|
*/
|
||||||
|
|
||||||
|
import circuits.*;
|
||||||
|
|
||||||
|
function main(y: bool) -> bool {
|
||||||
|
const a = Point { x: 1u32, y: 0u32 };
|
||||||
|
|
||||||
|
return (foo() == 1u32) == y;
|
||||||
|
}
|
12
tests/compiler/import_local/import_as.leo
Normal file
12
tests/compiler/import_local/import_as.leo
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: input/dummy.in
|
||||||
|
cwd: local_imports
|
||||||
|
*/
|
||||||
|
|
||||||
|
import lib.say_hello as howdy;
|
||||||
|
|
||||||
|
function main(y: bool) -> bool {
|
||||||
|
return y == (howdy() == "hello");
|
||||||
|
}
|
12
tests/compiler/import_local/import_dir.leo
Normal file
12
tests/compiler/import_local/import_dir.leo
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: input/dummy.in
|
||||||
|
cwd: local_imports
|
||||||
|
*/
|
||||||
|
|
||||||
|
import nested.hello.say_hello;
|
||||||
|
|
||||||
|
function main(y: bool) -> bool {
|
||||||
|
return y == (say_hello() == "hello");
|
||||||
|
}
|
12
tests/compiler/import_local/import_files.leo
Normal file
12
tests/compiler/import_local/import_files.leo
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: input/dummy.in
|
||||||
|
cwd: local_imports
|
||||||
|
*/
|
||||||
|
|
||||||
|
import lib.say_hello;
|
||||||
|
|
||||||
|
function main(y: bool) -> bool {
|
||||||
|
return y == (say_hello() == "hello");
|
||||||
|
}
|
17
tests/compiler/import_local/import_many.leo
Normal file
17
tests/compiler/import_local/import_many.leo
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: input/dummy.in
|
||||||
|
cwd: local_imports
|
||||||
|
*/
|
||||||
|
|
||||||
|
import circuits.(
|
||||||
|
Point,
|
||||||
|
foo
|
||||||
|
);
|
||||||
|
|
||||||
|
function main(y: bool) -> bool {
|
||||||
|
const a = Point { x: 1u32, y: 0u32 };
|
||||||
|
|
||||||
|
return (foo() == 1u32) == y;
|
||||||
|
}
|
12
tests/compiler/import_local/import_weird_names.leo
Normal file
12
tests/compiler/import_local/import_weird_names.leo
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
input_file: input/dummy.in
|
||||||
|
cwd: local_imports
|
||||||
|
*/
|
||||||
|
|
||||||
|
import a-9.*;
|
||||||
|
|
||||||
|
function main(y: bool) -> bool {
|
||||||
|
return y == true;
|
||||||
|
}
|
6
tests/compiler/import_local/input/dummy.in
Normal file
6
tests/compiler/import_local/input/dummy.in
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[main]
|
||||||
|
y: bool = true;
|
||||||
|
n: bool = false;
|
||||||
|
|
||||||
|
[registers]
|
||||||
|
r0: bool = true;
|
0
tests/compiler/import_local/local_imports/a-9.leo
Normal file
0
tests/compiler/import_local/local_imports/a-9.leo
Normal file
8
tests/compiler/import_local/local_imports/circuits.leo
Normal file
8
tests/compiler/import_local/local_imports/circuits.leo
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
circuit Point {
|
||||||
|
x: u32
|
||||||
|
y: u32
|
||||||
|
}
|
||||||
|
|
||||||
|
function foo() -> u32 {
|
||||||
|
return 1u32;
|
||||||
|
}
|
3
tests/compiler/import_local/local_imports/lib.leo
Normal file
3
tests/compiler/import_local/local_imports/lib.leo
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
function say_hello() -> [char; 5] {
|
||||||
|
return "hello";
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
function say_hello() -> [char; 5] {
|
||||||
|
return "hello";
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 1
|
||||||
|
num_constraints: 1
|
||||||
|
at: 042610d0fd1fe6d6ac112138f8755752f44c7d2a00f1b5960574d6da5cda393f
|
||||||
|
bt: e97756698880ab7555a959a5fb5c6b4e15bd64612aa677adbfe2d0bd91f0a83c
|
||||||
|
ct: cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05
|
||||||
|
output:
|
||||||
|
- input_file: "../input/dummy.in"
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
initial_ast: d6273a716c2546b210eeefb640b5c34830fb2b2a4195ae0b636843e855fcbc1e
|
||||||
|
canonicalized_ast: 41a3c4ffe7c243ffc76bc7d3c147f77f71119d64e632581a20eb1cd576752ac3
|
||||||
|
type_inferenced_ast: 196e5191c3d8c8cc552b419422b3e1411fa576336f63ae9d5c340bf2a7d62942
|
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 1
|
||||||
|
num_constraints: 1
|
||||||
|
at: 042610d0fd1fe6d6ac112138f8755752f44c7d2a00f1b5960574d6da5cda393f
|
||||||
|
bt: e97756698880ab7555a959a5fb5c6b4e15bd64612aa677adbfe2d0bd91f0a83c
|
||||||
|
ct: cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
initial_ast: 1a78fdc95fad861e53d1b0463228701df726fa0bf5092bd94d1d35f57c8c2a94
|
||||||
|
canonicalized_ast: 1a78fdc95fad861e53d1b0463228701df726fa0bf5092bd94d1d35f57c8c2a94
|
||||||
|
type_inferenced_ast: be1c8166ce3ae7f805d8600441996328ce8f45ada3c16c4284f07d07af52ef75
|
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 1
|
||||||
|
num_constraints: 1
|
||||||
|
at: 042610d0fd1fe6d6ac112138f8755752f44c7d2a00f1b5960574d6da5cda393f
|
||||||
|
bt: e97756698880ab7555a959a5fb5c6b4e15bd64612aa677adbfe2d0bd91f0a83c
|
||||||
|
ct: cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
initial_ast: 47ef8cd0b57a42612bc9138c6da6e05fbca27c47464acf5af569c2fe0c91dd31
|
||||||
|
canonicalized_ast: 39c0b27ba63cc34eed735900912e154031ca1f291aade9d9964ce49e77eeb19e
|
||||||
|
type_inferenced_ast: 19bfc761f899b48a3e0c4142bac6cbdaceac8230e92422cf9f6a99d9f7eddc6f
|
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 1
|
||||||
|
num_constraints: 1
|
||||||
|
at: 042610d0fd1fe6d6ac112138f8755752f44c7d2a00f1b5960574d6da5cda393f
|
||||||
|
bt: e97756698880ab7555a959a5fb5c6b4e15bd64612aa677adbfe2d0bd91f0a83c
|
||||||
|
ct: cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
initial_ast: 7e0ba7b09b3840a5d4fc9f0d413163ba2de8f207c3818f604f9a71297aac30f3
|
||||||
|
canonicalized_ast: 3f7efb61847fd75fed58b70526da8ceffb573a0806521fb30443f341c3d14a45
|
||||||
|
type_inferenced_ast: a1baf614c8ab13c1ff978faf8022f90eef4c482261928cb3256ab4d63e20096c
|
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 1
|
||||||
|
num_constraints: 1
|
||||||
|
at: 042610d0fd1fe6d6ac112138f8755752f44c7d2a00f1b5960574d6da5cda393f
|
||||||
|
bt: e97756698880ab7555a959a5fb5c6b4e15bd64612aa677adbfe2d0bd91f0a83c
|
||||||
|
ct: cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
initial_ast: 042e056c86e545ce256459a0de20d44c0bae24ff406becba4330e3208c48e180
|
||||||
|
canonicalized_ast: 6cab1ab863f40c96d5d6921e2ced0dd00ebe5e9e334d84508af708be19ae8f59
|
||||||
|
type_inferenced_ast: 17ff3e62f1c48edfbfb1c35ed4ac542260b59153d85afeca2e707dde217dc675
|
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 1
|
||||||
|
num_constraints: 1
|
||||||
|
at: 042610d0fd1fe6d6ac112138f8755752f44c7d2a00f1b5960574d6da5cda393f
|
||||||
|
bt: e97756698880ab7555a959a5fb5c6b4e15bd64612aa677adbfe2d0bd91f0a83c
|
||||||
|
ct: cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
initial_ast: ad1dd786c43b4d3de69b6e162bed3f01a0a53f0643e6fd2d95f12c98dfa16855
|
||||||
|
canonicalized_ast: ad1dd786c43b4d3de69b6e162bed3f01a0a53f0643e6fd2d95f12c98dfa16855
|
||||||
|
type_inferenced_ast: 1c983cf518cfafbe158ee3e42aed5cb190863b09aedfc4dd34e0268160ee79e2
|
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
namespace: Compile
|
||||||
|
expectation: Pass
|
||||||
|
outputs:
|
||||||
|
- circuit:
|
||||||
|
num_public_variables: 0
|
||||||
|
num_private_variables: 1
|
||||||
|
num_constraints: 1
|
||||||
|
at: 042610d0fd1fe6d6ac112138f8755752f44c7d2a00f1b5960574d6da5cda393f
|
||||||
|
bt: e97756698880ab7555a959a5fb5c6b4e15bd64612aa677adbfe2d0bd91f0a83c
|
||||||
|
ct: cf1cbb66a638b4860a516671fb74850e6ccf787fe6c4c8d29e9c04efe880bd05
|
||||||
|
output:
|
||||||
|
- input_file: input/dummy.in
|
||||||
|
output:
|
||||||
|
registers:
|
||||||
|
r0:
|
||||||
|
type: bool
|
||||||
|
value: "true"
|
||||||
|
initial_ast: 6a099d784f82bb8065c8efdd2b4018089d968a7f57cbab3406df3ec5d0612410
|
||||||
|
canonicalized_ast: 6a099d784f82bb8065c8efdd2b4018089d968a7f57cbab3406df3ec5d0612410
|
||||||
|
type_inferenced_ast: 58541200a815edfee41333b9b2b048add269d0924ca17457ecf9fbcbb5032ccf
|
Loading…
Reference in New Issue
Block a user