reorganize shrinker tests
This commit is contained in:
parent
eb709d6fc3
commit
97b0cf6813
|
@ -1653,9 +1653,30 @@ mod tests {
|
||||||
optimize::interner::CodeGenInterner,
|
optimize::interner::CodeGenInterner,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fn compare_optimization(
|
||||||
|
mut expected: Program<Name>,
|
||||||
|
mut program: Program<Name>,
|
||||||
|
optimization: fn(Program<Name>) -> Program<Name>,
|
||||||
|
) {
|
||||||
|
let mut interner = CodeGenInterner::new();
|
||||||
|
|
||||||
|
interner.program(&mut program);
|
||||||
|
|
||||||
|
let mut interner = CodeGenInterner::new();
|
||||||
|
|
||||||
|
interner.program(&mut expected);
|
||||||
|
|
||||||
|
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
||||||
|
let actual = optimization(program);
|
||||||
|
|
||||||
|
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn lambda_reduce_var() {
|
fn lambda_reduce_var() {
|
||||||
let mut program = Program {
|
let program = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("bar")
|
term: Term::var("bar")
|
||||||
.lambda("bar")
|
.lambda("bar")
|
||||||
|
@ -1668,11 +1689,7 @@ mod tests {
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("foo").lambda("foo").apply(
|
term: Term::var("foo").lambda("foo").apply(
|
||||||
Term::constr_data()
|
Term::constr_data()
|
||||||
|
@ -1681,80 +1698,44 @@ mod tests {
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.lambda_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
let actual = program.lambda_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn lambda_reduce_constant() {
|
fn lambda_reduce_constant() {
|
||||||
let mut program = Program {
|
let program = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("foo")
|
term: Term::var("foo")
|
||||||
.lambda("foo")
|
.lambda("foo")
|
||||||
.apply(Term::integer(6.into())),
|
.apply(Term::integer(6.into())),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected: Program<Name> = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected: Program<Name> = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::integer(6.into()),
|
term: Term::integer(6.into()),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.lambda_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
let actual = program.lambda_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn lambda_reduce_builtin() {
|
fn lambda_reduce_builtin() {
|
||||||
let mut program = Program {
|
let program = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("foo").lambda("foo").apply(Term::add_integer()),
|
term: Term::var("foo").lambda("foo").apply(Term::add_integer()),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected: Program<Name> = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected: Program<Name> = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::add_integer(),
|
term: Term::add_integer(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.lambda_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.lambda_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn lambda_reduce_force_delay_error_lam() {
|
fn lambda_reduce_force_delay_error_lam() {
|
||||||
let mut program: Program<Name> = Program {
|
let program: Program<Name> = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("foo")
|
term: Term::var("foo")
|
||||||
.apply(Term::var("bar"))
|
.apply(Term::var("bar"))
|
||||||
|
@ -1770,11 +1751,7 @@ mod tests {
|
||||||
.apply(Term::bool(false).lambda("x")),
|
.apply(Term::bool(false).lambda("x")),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("foo")
|
term: Term::var("foo")
|
||||||
.apply(Term::var("bar"))
|
.apply(Term::var("bar"))
|
||||||
|
@ -1790,17 +1767,7 @@ mod tests {
|
||||||
.apply(Term::bool(false).lambda("x")),
|
.apply(Term::bool(false).lambda("x")),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.lambda_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.lambda_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -1814,7 +1781,7 @@ mod tests {
|
||||||
.lambda("y"),
|
.lambda("y"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut expected = Program {
|
let expected = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("__cons_list_wrapped")
|
term: Term::var("__cons_list_wrapped")
|
||||||
.apply(Term::var("x"))
|
.apply(Term::var("x"))
|
||||||
|
@ -1833,21 +1800,7 @@ mod tests {
|
||||||
.apply(Term::tail_list()),
|
.apply(Term::tail_list()),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.builtin_force_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let mut actual = program.builtin_force_reducer();
|
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
|
||||||
|
|
||||||
interner.program(&mut actual);
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -1869,7 +1822,7 @@ mod tests {
|
||||||
.lambda("y"),
|
.lambda("y"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut expected = Program {
|
let expected = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("__if_then_else_wrapped")
|
term: Term::var("__if_then_else_wrapped")
|
||||||
.apply(
|
.apply(
|
||||||
|
@ -1892,26 +1845,53 @@ mod tests {
|
||||||
.apply(Term::Builtin(DefaultFunction::IfThenElse).force()),
|
.apply(Term::Builtin(DefaultFunction::IfThenElse).force()),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.builtin_force_reducer());
|
||||||
|
}
|
||||||
|
|
||||||
interner.program(&mut expected);
|
#[test]
|
||||||
|
fn builtin_force_reduce_pair_builtins() {
|
||||||
|
let program: Program<Name> = Program {
|
||||||
|
version: (1, 0, 0),
|
||||||
|
term: Term::add_integer()
|
||||||
|
.apply(Term::un_i_data().apply(Term::fst_pair().apply(Term::var("__pair"))))
|
||||||
|
.apply(Term::un_i_data().apply(Term::snd_pair().apply(Term::var("__pair"))))
|
||||||
|
.lambda("__pair")
|
||||||
|
.apply(
|
||||||
|
Term::mk_pair_data()
|
||||||
|
.apply(Term::data(Data::integer(1.into())))
|
||||||
|
.apply(Term::data(Data::integer(5.into()))),
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
let expected = Program {
|
||||||
|
version: (1, 0, 0),
|
||||||
|
term: Term::add_integer()
|
||||||
|
.apply(
|
||||||
|
Term::un_i_data()
|
||||||
|
.apply(Term::var("__fst_pair_wrapped").apply(Term::var("__pair"))),
|
||||||
|
)
|
||||||
|
.apply(
|
||||||
|
Term::un_i_data()
|
||||||
|
.apply(Term::var("__snd_pair_wrapped").apply(Term::var("__pair"))),
|
||||||
|
)
|
||||||
|
.lambda("__pair")
|
||||||
|
.apply(
|
||||||
|
Term::mk_pair_data()
|
||||||
|
.apply(Term::data(Data::integer(1.into())))
|
||||||
|
.apply(Term::data(Data::integer(5.into()))),
|
||||||
|
)
|
||||||
|
.lambda("__fst_pair_wrapped")
|
||||||
|
.apply(Term::fst_pair())
|
||||||
|
.lambda("__snd_pair_wrapped")
|
||||||
|
.apply(Term::snd_pair()),
|
||||||
|
};
|
||||||
|
|
||||||
let mut actual = program.builtin_force_reducer();
|
compare_optimization(expected, program, |p| p.builtin_force_reducer());
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
|
||||||
|
|
||||||
interner.program(&mut actual);
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn identity_reduce_0_occurrence() {
|
fn identity_reduce_0_occurrence() {
|
||||||
let mut program: Program<Name> = Program {
|
let program: Program<Name> = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::sha2_256()
|
term: Term::sha2_256()
|
||||||
.apply(Term::var("identity").apply(Term::var("x")))
|
.apply(Term::var("identity").apply(Term::var("x")))
|
||||||
|
@ -1921,11 +1901,7 @@ mod tests {
|
||||||
.apply(Term::var("y").lambda("y")),
|
.apply(Term::var("y").lambda("y")),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::sha2_256()
|
term: Term::sha2_256()
|
||||||
.apply(Term::var("x"))
|
.apply(Term::var("x"))
|
||||||
|
@ -1933,22 +1909,12 @@ mod tests {
|
||||||
.apply(Term::byte_string(vec![]).delay()),
|
.apply(Term::byte_string(vec![]).delay()),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.identity_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.identity_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn identity_reduce_param() {
|
fn identity_reduce_param() {
|
||||||
let mut program: Program<Name> = Program {
|
let program: Program<Name> = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::sha2_256()
|
term: Term::sha2_256()
|
||||||
.apply(
|
.apply(
|
||||||
|
@ -1969,11 +1935,7 @@ mod tests {
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::sha2_256()
|
term: Term::sha2_256()
|
||||||
.apply(
|
.apply(
|
||||||
|
@ -1994,22 +1956,12 @@ mod tests {
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.identity_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.identity_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn inline_reduce_delay_sha() {
|
fn inline_reduce_delay_sha() {
|
||||||
let mut program: Program<Name> = Program {
|
let program: Program<Name> = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::sha2_256()
|
term: Term::sha2_256()
|
||||||
.apply(Term::var("x"))
|
.apply(Term::var("x"))
|
||||||
|
@ -2017,31 +1969,17 @@ mod tests {
|
||||||
.apply(Term::byte_string(vec![]).delay()),
|
.apply(Term::byte_string(vec![]).delay()),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::sha2_256().apply(Term::byte_string(vec![]).delay()),
|
term: Term::sha2_256().apply(Term::byte_string(vec![]).delay()),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.inline_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.inline_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn wrap_data_reduce_i_data() {
|
fn wrap_data_reduce_i_data() {
|
||||||
let mut program: Program<Name> = Program {
|
let program: Program<Name> = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::equals_data()
|
term: Term::equals_data()
|
||||||
.apply(Term::i_data().apply(Term::un_i_data().apply(Term::Constant(
|
.apply(Term::i_data().apply(Term::un_i_data().apply(Term::Constant(
|
||||||
|
@ -2051,11 +1989,7 @@ mod tests {
|
||||||
.lambda("x"),
|
.lambda("x"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::equals_data()
|
term: Term::equals_data()
|
||||||
.apply(Term::Constant(
|
.apply(Term::Constant(
|
||||||
|
@ -2065,22 +1999,12 @@ mod tests {
|
||||||
.lambda("x"),
|
.lambda("x"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.cast_data_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.cast_data_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn wrap_data_reduce_un_i_data() {
|
fn wrap_data_reduce_un_i_data() {
|
||||||
let mut program: Program<Name> = Program {
|
let program: Program<Name> = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::equals_integer()
|
term: Term::equals_integer()
|
||||||
.apply(Term::un_i_data().apply(Term::i_data().apply(Term::integer(1.into()))))
|
.apply(Term::un_i_data().apply(Term::i_data().apply(Term::integer(1.into()))))
|
||||||
|
@ -2090,11 +2014,7 @@ mod tests {
|
||||||
.lambda("x"),
|
.lambda("x"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::equals_integer()
|
term: Term::equals_integer()
|
||||||
.apply(Term::integer(1.into()))
|
.apply(Term::integer(1.into()))
|
||||||
|
@ -2102,22 +2022,12 @@ mod tests {
|
||||||
.lambda("x"),
|
.lambda("x"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.cast_data_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.cast_data_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn curry_reducer_test_1() {
|
fn curry_reducer_test_1() {
|
||||||
let mut program: Program<Name> = Program {
|
let program: Program<Name> = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::add_integer()
|
term: Term::add_integer()
|
||||||
.apply(Term::var("x"))
|
.apply(Term::var("x"))
|
||||||
|
@ -2132,11 +2042,7 @@ mod tests {
|
||||||
.apply(Term::integer(5.into())),
|
.apply(Term::integer(5.into())),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("add_one_curried")
|
term: Term::var("add_one_curried")
|
||||||
.apply(Term::var("x"))
|
.apply(Term::var("x"))
|
||||||
|
@ -2148,22 +2054,12 @@ mod tests {
|
||||||
.apply(Term::integer(5.into())),
|
.apply(Term::integer(5.into())),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.builtin_curry_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.builtin_curry_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn curry_reducer_test_2() {
|
fn curry_reducer_test_2() {
|
||||||
let mut program: Program<Name> = Program {
|
let program: Program<Name> = Program {
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("equivalence")
|
term: Term::var("equivalence")
|
||||||
.lambda("equivalence")
|
.lambda("equivalence")
|
||||||
|
@ -2346,11 +2242,7 @@ mod tests {
|
||||||
.constr_fields_exposer(),
|
.constr_fields_exposer(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
let expected = Program {
|
||||||
|
|
||||||
interner.program(&mut program);
|
|
||||||
|
|
||||||
let mut expected = Program {
|
|
||||||
version: (1, 0, 0),
|
version: (1, 0, 0),
|
||||||
term: Term::var("equivalence")
|
term: Term::var("equivalence")
|
||||||
.lambda("equivalence")
|
.lambda("equivalence")
|
||||||
|
@ -2523,16 +2415,6 @@ mod tests {
|
||||||
.constr_fields_exposer(),
|
.constr_fields_exposer(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut interner = CodeGenInterner::new();
|
compare_optimization(expected, program, |p| p.builtin_curry_reducer());
|
||||||
|
|
||||||
interner.program(&mut expected);
|
|
||||||
|
|
||||||
let expected: Program<NamedDeBruijn> = expected.try_into().unwrap();
|
|
||||||
|
|
||||||
let actual = program.builtin_curry_reducer();
|
|
||||||
|
|
||||||
let actual: Program<NamedDeBruijn> = actual.try_into().unwrap();
|
|
||||||
|
|
||||||
assert_eq!(actual, expected);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue