tests are passing interestingly but idk if they should be, == doesn't work for input on fields

This commit is contained in:
gluax 2021-05-19 16:48:34 -04:00
commit b6479b754f
42 changed files with 308 additions and 80 deletions

View File

@ -120,7 +120,10 @@ impl<'a, F: PrimeField, G: GroupType<F>> ConstrainedProgram<'a, F, G> {
Ok(ConstrainedValue::Tuple( Ok(ConstrainedValue::Tuple(
values values
.iter() .iter()
.map(|x| self.constant_main_function_input(cs, type_, name, Some(x.clone()), span)) .enumerate()
.map(|(i, x)| {
self.constant_main_function_input(cs, types.get(i).unwrap(), name, Some(x.clone()), span)
})
.collect::<Result<Vec<_>, _>>()?, .collect::<Result<Vec<_>, _>>()?,
)) ))
} }

View File

@ -1,3 +0,0 @@
function main(a: field, b: field, c: field) {
console.assert(a + b == c);
}

View File

@ -1,3 +0,0 @@
function main(a: field, b: field) {
console.assert(a == b);
}

View File

@ -1,3 +0,0 @@
function main(a: field, b: field, c: field) {
console.assert(a / b == c);
}

View File

@ -1,3 +0,0 @@
function main(a: field, b: field, c: bool) {
console.assert(a == b == c);
}

View File

@ -1,4 +0,0 @@
function main() {
const negOneField: field = -1field;
const oneField = 1field;
}

View File

@ -1,3 +0,0 @@
function main(a: field, b: field, c: field) {
console.assert(a * b == c);
}

View File

@ -1,3 +0,0 @@
function main(a: field, b: field) {
console.assert(-a == b);
}

View File

@ -1,3 +0,0 @@
function main() {
const f = 1 field;
}

View File

@ -1,3 +0,0 @@
function main(registers) -> field {
return registers.r;
}

View File

@ -1,3 +0,0 @@
function main(a: field, b: field, c: field) {
console.assert(a - b == c);
}

View File

@ -1,5 +0,0 @@
function main(s: bool, a: field, b: field, c: field) {
const r = s ? a : b;
console.assert(r == c);
}

View File

@ -16,6 +16,6 @@ circuit Foo {
function main(character: char) -> char { function main(character: char) -> char {
let f = Foo { character }; let f = Foo { character };
let character = f.character == 'a' ? 'a' : 'Z'; let character = f.character == 'a' ? 'a' : f.character;
return character; return character;
} }

View File

@ -0,0 +1,14 @@
/*
namespace: Compile
expectation: Pass
input_file:
- inputs/ascii.in
- inputs/escaped_unicode.in
- inputs/escaped.in
- inputs/hex.in
- inputs/unicode.in
*/
function main(character: char) -> char {
return character != 'a' ? 'a' : 'Z';
}

View File

@ -1,2 +1,2 @@
[registers] [registers]
r: char = a; r: char = 'a';

View File

@ -1,9 +1,7 @@
/* // namespace: Compile
namespace: Compile // expectation: Fail
expectation: Fail // input_files:
input_files: // - input/dummy.in
- input/dummy.in
*/
import core.unstable.blake2s.BadCircuit; // `BadCircuit` is not included in the blake2s package import core.unstable.blake2s.BadCircuit; // `BadCircuit` is not included in the blake2s package

View File

@ -1,14 +1,12 @@
/* // namespace: Compile
namespace: Compile // expectation: Pass
expectation: Pass // inputs:
inputs: // - blake.in: |
- blake.in: | // [main]
[main] // message: [u8; 32] = [0; 32];
message: [u8; 32] = [0; 32];
[registers] // [registers]
r0: [u8; 32] = [0; 32]; // r0: [u8; 32] = [0; 32];
*/
import core.unstable.blake2s.Blake2s; import core.unstable.blake2s.Blake2s;

View File

@ -0,0 +1,10 @@
/*
namespace: Compile
expectation: Pass
input_file:
- inputs/fields.in
*/
function main(a: field, b: field, c: field) -> bool {
return a + b == c;
}

View File

@ -0,0 +1,10 @@
/*
namespace: Compile
expectation: Pass
input_file:
- inputs/fields.in
*/
function main(a: field, b: field, c: field) -> bool {
return a / b != c;
}

View File

@ -0,0 +1,10 @@
/*
namespace: Compile
expectation: Pass
input_file:
- inputs/fields.in
*/
function main(a: field, b: field) -> bool {
return a == b;
}

View File

@ -0,0 +1,11 @@
/*
namespace: Compile
expectation: Pass
input_file:
- inputs/fields.in
*/
function main(a: field) -> bool {
const negOneField: field = -1field;
return negOneField + a == 0field;
}

View File

@ -0,0 +1,7 @@
[main]
a: field = 1field;
b: field = 1field;
c: field = 2field;
[registers]
r: bool = false;

View File

@ -0,0 +1,10 @@
/*
namespace: Compile
expectation: Pass
input_file:
- inputs/fields.in
*/
function main(a: field, b: field, c: field) -> bool {
return a * b == c;
}

View File

@ -0,0 +1,10 @@
/*
namespace: Compile
expectation: Pass
input_file:
- inputs/fields.in
*/
function main(a: field, b: field) -> bool {
return -a == -b;
}

View File

@ -0,0 +1,8 @@
/*
namespace: Compile
expectation: Fail
*/
function main() {
const f = 1 field;
}

View File

@ -0,0 +1,3 @@
function main(a: field, b: field, c: field) -> bool {
return a - b == c;
}

View File

@ -0,0 +1,3 @@
function main(a: field, b: field, c: field) -> bool {
return b == 1field ? a == 1field : c == 2field;
}

View File

@ -1,5 +1,42 @@
--- ---
namespace: Compile namespace: Compile
expectation: Fail expectation: Pass
outputs: outputs:
- "- Circuit has no constraints, use inputs and registers in program to produce them" - circuit:
num_public_variables: 0
num_private_variables: 6
num_constraints: 4
at: 2859fe6f24016b5634df2791da7de932e68ec32c73b5b573e0c39e968c7a4e12
bt: 8143508f19c8eee208a7fbbcfb833aeeace6ba0a761e41d028599d2237cc60fa
ct: d0c6feeed1e6b8d5c0e03dc9e25641b7fdc34ad912e2b1488296d4a99ed6cbf5
output:
- input_file: inputs/ascii.in
output:
registers:
r:
type: char
value: a
- input_file: inputs/escaped_unicode.in
output:
registers:
r:
type: char
value: ❤
- input_file: inputs/escaped.in
output:
registers:
r:
type: char
value: "'"
- input_file: inputs/hex.in
output:
registers:
r:
type: char
value: "\n"
- input_file: inputs/unicode.in
output:
registers:
r:
type: char
value: ❤

View File

@ -0,0 +1,42 @@
---
namespace: Compile
expectation: Pass
outputs:
- circuit:
num_public_variables: 0
num_private_variables: 6
num_constraints: 3
at: cc1286e0b6fa2e90fb6f0880431a7c1e2cc37a329fae3aff1c13f51036c66f12
bt: 02c492cb6df07172e56cffd0cfd902a8443921e1256a2d907bbabd30bf6b8f6d
ct: a1f8e2b168c0f2f28f0ca3f16ce9b25ba7f7c410cfd68b0912bf19c90b53f2a2
output:
- input_file: inputs/ascii.in
output:
registers:
r:
type: char
value: Z
- input_file: inputs/escaped_unicode.in
output:
registers:
r:
type: char
value: a
- input_file: inputs/escaped.in
output:
registers:
r:
type: char
value: a
- input_file: inputs/hex.in
output:
registers:
r:
type: char
value: a
- input_file: inputs/unicode.in
output:
registers:
r:
type: char
value: a

View File

@ -1,5 +0,0 @@
---
namespace: Compile
expectation: Fail
outputs:
- " --> compiler-test:3:30\n |\n 3 | import core.unstable.blake2s.BadCircuit; // `BadCircuit` is not included in the blake2s package\n | ^^^^^^^^^^\n |\n = failed to resolve import: 'core.unstable.blake2s.BadCircuit'"

View File

@ -1,18 +0,0 @@
---
namespace: Compile
expectation: Pass
outputs:
- circuit:
num_public_variables: 0
num_private_variables: 20168
num_constraints: 20472
at: 43b5f7bd5efbf13ae0684e3c506e5e28866ce7a29f5d6b1442925913bb07a73b
bt: 4d435c1eac471fb7b40b0d83503e2aa13f49db68fc71d64be84ddc9cb053a15d
ct: 081e529f5d26cb4cea2d8288ad454a8d0b381f2fb81e0bd21b47d4186777504f
output:
- input_file: blake.in
output:
registers:
r0:
type: "[u8; 32]"
value: "[213, 24, 235, 180, 216, 116, 28, 65, 88, 162, 204, 6, 23, 8, 66, 112, 214, 239, 242, 134, 165, 39, 172, 247, 65, 130, 155, 2, 97, 147, 14, 57]"

View File

@ -0,0 +1,18 @@
---
namespace: Compile
expectation: Pass
outputs:
- circuit:
num_public_variables: 0
num_private_variables: 5
num_constraints: 3
at: 58e404664f2d64d2fd5fee64bf6e997f542a822b8b17e394fcdd7bed05386db8
bt: f91b8601243dbd0d25e7df8f34ff304ca78a295fdfafbe0102ec6ce4fcb3c0f0
ct: fe68b86a12c0b8c1585a656d7c4b8c47fbe19677b5da7ce0aae1d80dffb2a2ca
output:
- input_file: inputs/fields.in
output:
registers:
r:
type: bool
value: "true"

View File

@ -0,0 +1,18 @@
---
namespace: Compile
expectation: Pass
outputs:
- circuit:
num_public_variables: 0
num_private_variables: 7
num_constraints: 5
at: 545f3730dcbdb3a3dff41db4263dd41f9be9cf279fdc3cde9518973db0c88685
bt: 0a5ae5a6be6351f852bbcc193e57320be38fff279cf6fd65a3239c3a64239b27
ct: f25b05da849d0d7fcaab89d41d9624efacb48b7ba983f73a0d5f383b16f7009b
output:
- input_file: inputs/fields.in
output:
registers:
r:
type: bool
value: "true"

View File

@ -0,0 +1,18 @@
---
namespace: Compile
expectation: Pass
outputs:
- circuit:
num_public_variables: 0
num_private_variables: 4
num_constraints: 3
at: ca775a363045cd405dd1d60cd10edb6cc6e4c0b164934951dab0977509b8225c
bt: 02c492cb6df07172e56cffd0cfd902a8443921e1256a2d907bbabd30bf6b8f6d
ct: a1f8e2b168c0f2f28f0ca3f16ce9b25ba7f7c410cfd68b0912bf19c90b53f2a2
output:
- input_file: inputs/fields.in
output:
registers:
r:
type: bool
value: "true"

View File

@ -0,0 +1,18 @@
---
namespace: Compile
expectation: Pass
outputs:
- circuit:
num_public_variables: 0
num_private_variables: 4
num_constraints: 3
at: cfcc3adf871aef0910034c4c3478746733a9746d44fd678971ee2e1e5e69dffd
bt: 02c492cb6df07172e56cffd0cfd902a8443921e1256a2d907bbabd30bf6b8f6d
ct: a1f8e2b168c0f2f28f0ca3f16ce9b25ba7f7c410cfd68b0912bf19c90b53f2a2
output:
- input_file: inputs/fields.in
output:
registers:
r:
type: bool
value: "true"

View File

@ -0,0 +1,18 @@
---
namespace: Compile
expectation: Pass
outputs:
- circuit:
num_public_variables: 0
num_private_variables: 6
num_constraints: 4
at: 7dcea624bdc7a6e6fb5f5e93395e84a96db66898779eb3f5595c4e30e3684f17
bt: c21a8e9f463d2fad68fd3a88904dd88f2a3dc7dcb01835357fa4ee457ef1673b
ct: 4b4ef106804964b8a1ee7c1dad3d4682d20a0d07f576130bfec9989b353bf596
output:
- input_file: inputs/fields.in
output:
registers:
r:
type: bool
value: "false"

View File

@ -0,0 +1,18 @@
---
namespace: Compile
expectation: Pass
outputs:
- circuit:
num_public_variables: 0
num_private_variables: 4
num_constraints: 3
at: cc1286e0b6fa2e90fb6f0880431a7c1e2cc37a329fae3aff1c13f51036c66f12
bt: 02c492cb6df07172e56cffd0cfd902a8443921e1256a2d907bbabd30bf6b8f6d
ct: a1f8e2b168c0f2f28f0ca3f16ce9b25ba7f7c410cfd68b0912bf19c90b53f2a2
output:
- input_file: inputs/fields.in
output:
registers:
r:
type: bool
value: "true"

View File

@ -0,0 +1,5 @@
---
namespace: Compile
expectation: Fail
outputs:
- " --> compiler-test:4:13\n |\n 4 | const f = 1 field;\n | ^\n |\n = Unexpected white space between terms 1 and field"