mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 20:28:02 +00:00
Add mono tests for function-specialization information preserved in lambda sets
This commit is contained in:
parent
3109b2b00f
commit
011c2ffd47
3 changed files with 138 additions and 0 deletions
|
@ -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;
|
|
@ -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;
|
|
@ -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
|
||||
"###
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue