Sanitize fibonacci program to make round-trip tests happy, isolate unsanitary code

This commit is contained in:
Turner 2022-06-20 14:28:11 -07:00 committed by Lucas
parent 787f345275
commit 1b00e4d416
3 changed files with 115 additions and 18 deletions

View File

@ -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)
]
)
)

View File

@ -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)
]
)

View File

@ -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);
}