fix refactored array initializer tests wip 2

This commit is contained in:
collin 2020-11-09 15:03:12 -08:00
parent aa17355a72
commit 34b425ffe5
3 changed files with 48 additions and 31 deletions

View File

@ -153,18 +153,37 @@ impl<F: Field + PrimeField, G: GroupType<F>> ConstrainedProgram<F, G> {
None => return Err(ExpressionError::unexpected_array(type_.to_string(), span)),
};
// Update the actual array dimensions.
let _first_dimension = actual_dimensions.remove_first();
// Update the expected type to a new array type with the first dimension removed.
let expected_expression_type = Some(inner_array_type(*type_, expected_dimensions));
println!("expected type {:?}", expected_expression_type);
// Get the value of the array element.
let element_value = self.enforce_expression(
cs,
file_scope,
function_scope,
expected_expression_type,
element_expression,
)?;
// If the expression has more dimensions.
let element_value = match actual_dimensions.first() {
Some(_dimension) => {
// Get the value of the array element as an initializer.
self.enforce_array_initializer(
cs,
file_scope,
function_scope,
expected_expression_type,
element_expression,
actual_dimensions.clone(),
span.clone(),
)?
}
None => {
// Get the value of the array element as an expression.
self.enforce_expression(
cs,
file_scope,
function_scope,
expected_expression_type,
element_expression,
)?
}
};
// Allocate the array of values.
let array_values = vec![element_value; dimension];

View File

@ -44,7 +44,6 @@ impl<F: Field + PrimeField, G: GroupType<F>> ConstrainedProgram<F, G> {
expected_type: Option<Type>,
expression: Expression,
) -> Result<ConstrainedValue<F, G>, ExpressionError> {
println!("expr {}", expression);
match expression {
// Variables
Expression::Identifier(unresolved_variable) => {

View File

@ -17,7 +17,6 @@
use crate::{
assert_satisfied,
expect_compiler_error,
expect_type_inference_error,
get_output,
parse_program,
parse_program_with_input,
@ -191,9 +190,9 @@ fn test_nested_3x2_value() {
#[test]
fn test_nested_3x2_value_fail() {
let program_bytes = include_bytes!("nested_3x2_value_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -207,9 +206,9 @@ fn test_tuple_3x2_value() {
#[test]
fn test_tuple_3x2_value_fail() {
let program_bytes = include_bytes!("tuple_3x2_value_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -251,9 +250,9 @@ fn test_type_nested_value_nested_3x2() {
#[test]
fn test_type_nested_value_nested_3x2_fail() {
let program_bytes = include_bytes!("type_nested_value_nested_3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -267,9 +266,9 @@ fn test_type_nested_value_nested_4x3x2() {
#[test]
fn test_type_nested_value_nested_4x3x2_fail() {
let program_bytes = include_bytes!("type_nested_value_nested_4x3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -283,9 +282,9 @@ fn test_type_nested_value_tuple_3x2() {
#[test]
fn test_type_nested_value_tuple_3x2_fail() {
let program_bytes = include_bytes!("type_nested_value_tuple_3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -299,9 +298,9 @@ fn test_type_nested_value_tuple_4x3x2() {
#[test]
fn test_type_nested_value_tuple_4x3x2_fail() {
let program_bytes = include_bytes!("type_nested_value_tuple_4x3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -315,9 +314,9 @@ fn test_type_tuple_value_nested_3x2() {
#[test]
fn test_type_tuple_value_nested_3x2_fail() {
let program_bytes = include_bytes!("type_tuple_value_nested_3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -331,9 +330,9 @@ fn test_type_tuple_value_nested_4x3x2() {
#[test]
fn test_type_tuple_value_nested_4x3x2_fail() {
let program_bytes = include_bytes!("type_tuple_value_nested_4x3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -347,9 +346,9 @@ fn test_type_tuple_value_tuple_3x2() {
#[test]
fn test_type_tuple_value_tuple_3x2_fail() {
let program_bytes = include_bytes!("type_tuple_value_tuple_3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
#[test]
@ -363,9 +362,9 @@ fn test_type_tuple_value_tuple_4x3x2() {
#[test]
fn test_type_tuple_value_tuple_4x3x2_fail() {
let program_bytes = include_bytes!("type_tuple_value_tuple_4x3x2_fail.leo");
let error = parse_program(program_bytes).err().unwrap();
let program = parse_program(program_bytes).unwrap();
expect_type_inference_error(error);
let _err = expect_compiler_error(program);
}
// Tests for nested multi-dimensional arrays as input to the program