Add mono tests for function-specialization information preserved in lambda sets

This commit is contained in:
Ayaz Hafiz 2023-01-16 12:04:31 -06:00
parent 3109b2b00f
commit 011c2ffd47
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
3 changed files with 138 additions and 0 deletions

View file

@ -0,0 +1,49 @@
procedure Num.19 (#Attr.2, #Attr.3):
let Num.257 : I64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.257;
procedure Test.1 (Test.8):
let Test.3 : I64 = 10i64;
ret Test.3;
procedure Test.1 (Test.8):
let Test.3 : I64 = 10i64;
ret Test.3;
procedure Test.2 ():
let Test.13 : {} = Struct {};
let Test.12 : I64 = CallByName Test.1 Test.13;
ret Test.12;
procedure Test.2 ():
let Test.24 : {} = Struct {};
let Test.23 : I64 = CallByName Test.1 Test.24;
ret Test.23;
procedure Test.4 (Test.5, Test.3):
let Test.18 : {} = Struct {};
let Test.17 : I64 = CallByName Test.6 Test.18;
let Test.16 : I64 = CallByName Num.19 Test.17 Test.3;
ret Test.16;
procedure Test.4 (Test.5, Test.3):
let Test.29 : {} = Struct {};
let Test.28 : I64 = CallByName Test.7 Test.29;
let Test.27 : I64 = CallByName Num.19 Test.28 Test.3;
ret Test.27;
procedure Test.6 (Test.19):
let Test.22 : {} = Struct {};
let Test.21 : I64 = CallByName Test.2;
let Test.20 : I64 = CallByName Test.4 Test.22 Test.21;
ret Test.20;
procedure Test.7 (Test.30):
let Test.31 : I64 = 10i64;
ret Test.31;
procedure Test.0 ():
let Test.11 : {} = Struct {};
let Test.10 : I64 = CallByName Test.2;
let Test.9 : I64 = CallByName Test.4 Test.11 Test.10;
ret Test.9;

View file

@ -0,0 +1,49 @@
procedure Num.19 (#Attr.2, #Attr.3):
let Num.257 : U8 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.257;
procedure Test.1 (Test.9):
let Test.4 : U8 = 10i64;
ret Test.4;
procedure Test.1 (Test.9):
let Test.4 : U8 = 10i64;
ret Test.4;
procedure Test.2 ():
let Test.14 : {} = Struct {};
let Test.13 : U8 = CallByName Test.1 Test.14;
ret Test.13;
procedure Test.3 ():
let Test.25 : {} = Struct {};
let Test.24 : U8 = CallByName Test.1 Test.25;
ret Test.24;
procedure Test.5 (Test.6, Test.4):
let Test.19 : {} = Struct {};
let Test.18 : U8 = CallByName Test.7 Test.19;
let Test.17 : U8 = CallByName Num.19 Test.18 Test.4;
ret Test.17;
procedure Test.5 (Test.6, Test.4):
let Test.30 : {} = Struct {};
let Test.29 : U8 = CallByName Test.8 Test.30;
let Test.28 : U8 = CallByName Num.19 Test.29 Test.4;
ret Test.28;
procedure Test.7 (Test.20):
let Test.23 : {} = Struct {};
let Test.22 : U8 = CallByName Test.3;
let Test.21 : U8 = CallByName Test.5 Test.23 Test.22;
ret Test.21;
procedure Test.8 (Test.31):
let Test.32 : U8 = 10i64;
ret Test.32;
procedure Test.0 ():
let Test.12 : {} = Struct {};
let Test.11 : U8 = CallByName Test.2;
let Test.10 : U8 = CallByName Test.5 Test.12 Test.11;
ret Test.10;

View file

@ -2408,3 +2408,43 @@ fn pattern_as_of_symbol() {
"###
)
}
#[mono_test]
fn function_specialization_information_in_lambda_set_thunk() {
// https://github.com/roc-lang/roc/issues/4734
// https://rwx.notion.site/Let-generalization-Let-s-not-742a3ab23ff742619129dcc848a271cf#6b08b0a203fb443db2d7238a0eb154eb
indoc!(
r###"
app "test" provides [main] to "./platform"
andThen = \{} ->
x = 10
\newFn -> Num.add (newFn {}) x
between = andThen {}
main = between \{} -> between \{} -> 10
"###
)
}
#[mono_test]
fn function_specialization_information_in_lambda_set_thunk_independent_defs() {
// https://github.com/roc-lang/roc/issues/4734
// https://rwx.notion.site/Let-generalization-Let-s-not-742a3ab23ff742619129dcc848a271cf#6b08b0a203fb443db2d7238a0eb154eb
indoc!(
r###"
app "test" provides [main] to "./platform"
andThen = \{} ->
x = 10u8
\newFn -> Num.add (newFn {}) x
between1 = andThen {}
between2 = andThen {}
main = between1 \{} -> between2 \{} -> 10u8
"###
)
}