diff --git a/crates/uplc/test_data/fibonacci/fibonacci.uplc b/crates/uplc/test_data/fibonacci/fibonacci.uplc index b1683917..2e1f1174 100644 --- a/crates/uplc/test_data/fibonacci/fibonacci.uplc +++ b/crates/uplc/test_data/fibonacci/fibonacci.uplc @@ -2,7 +2,7 @@ 1.0.0 [ (lam - i0 + i_0 [ [ (force @@ -10,13 +10,19 @@ (delay (delay (lam - f + i_1 [ - (force (delay (lam s [ s s ]))) + (force (delay (lam i_2 [ i_2 i_2 ]))) (lam - s + i_3 (lam - x [ [ f [ (force (delay (lam s [ s s ]))) s ] ] x ] + i_4 + [ + [ + i_1 [ (force (delay (lam i_5 [ i_5 i_5 ]))) i_3 ] + ] + i_4 + ] ) ) ] @@ -26,22 +32,25 @@ ) ) (lam - rec + i_6 (lam - i + i_7 [ [ [ (force (delay (lam - b + i_8 (lam - x + i_9 (lam - y + i_10 [ - [ [ [ (force (builtin ifThenElse)) b ] x ] y ] + [ + [ [ (force (builtin ifThenElse)) i_8 ] i_9 ] + i_10 + ] (con unit ()) ] ) @@ -49,29 +58,32 @@ ) ) ) - [ [ (builtin lessThanEqualsInteger) i ] (con integer 1) ] + [ [ (builtin lessThanEqualsInteger) i_7 ] (con integer 1) ] ] - (lam u i) + (lam i_11 i_7) ] (lam - u + i_12 [ [ (builtin addInteger) [ - rec [ [ (builtin subtractInteger) i ] (con integer 1) ] + i_6 + [ [ (builtin subtractInteger) i_7 ] (con integer 1) ] ] ] - [ rec [ [ (builtin subtractInteger) i ] (con integer 2) ] ] + [ + i_6 [ [ (builtin subtractInteger) i_7 ] (con integer 2) ] + ] ] ) ] ) ) ] - i0 + i_0 ] ) (con integer 0) ] -) +) \ No newline at end of file diff --git a/crates/uplc/test_data/fibonacci/unsanitary_fibonacci.uplc b/crates/uplc/test_data/fibonacci/unsanitary_fibonacci.uplc new file mode 100644 index 00000000..b1683917 --- /dev/null +++ b/crates/uplc/test_data/fibonacci/unsanitary_fibonacci.uplc @@ -0,0 +1,77 @@ +(program + 1.0.0 + [ + (lam + i0 + [ + [ + (force + (force + (delay + (delay + (lam + f + [ + (force (delay (lam s [ s s ]))) + (lam + s + (lam + x [ [ f [ (force (delay (lam s [ s s ]))) s ] ] x ] + ) + ) + ] + ) + ) + ) + ) + ) + (lam + rec + (lam + i + [ + [ + [ + (force + (delay + (lam + b + (lam + x + (lam + y + [ + [ [ [ (force (builtin ifThenElse)) b ] x ] y ] + (con unit ()) + ] + ) + ) + ) + ) + ) + [ [ (builtin lessThanEqualsInteger) i ] (con integer 1) ] + ] + (lam u i) + ] + (lam + u + [ + [ + (builtin addInteger) + [ + rec [ [ (builtin subtractInteger) i ] (con integer 1) ] + ] + ] + [ rec [ [ (builtin subtractInteger) i ] (con integer 2) ] ] + ] + ) + ] + ) + ) + ] + i0 + ] + ) + (con integer 0) + ] +) diff --git a/crates/uplc/tests/integ_tests.rs b/crates/uplc/tests/integ_tests.rs index 008be5dd..c6418236 100644 --- a/crates/uplc/tests/integ_tests.rs +++ b/crates/uplc/tests/integ_tests.rs @@ -72,4 +72,12 @@ fn fibonacci() { let code = include_str!("../test_data/fibonacci/fibonacci.uplc"); round_trip_test(bytes, code); +} + +#[test] +fn one_way_fibonacci() { + let bytes = include_bytes!("../test_data/fibonacci/fibonacci.flat"); + let code = include_str!("../test_data/fibonacci/unsanitary_fibonacci.uplc"); + + parsed_program_matches_decoded_bytes(bytes, code); } \ No newline at end of file