Skip to content

Commit 47bcc07

Browse files
authored
Add benchmark and regression test for #1521. (#1619)
The new style formats this about 200x faster than the old one. It's still kind of slow, but tolerable. Fix #1521.
1 parent e12c007 commit 47bcc07

File tree

4 files changed

+125
-0
lines changed

4 files changed

+125
-0
lines changed

benchmark/case/curry_2.expect

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
typedef Map1<T1, R> = R Function(T1 arg1);
2+
3+
typedef Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> =
4+
R Function(
5+
T1 arg1,
6+
T2 arg2,
7+
T3 arg3,
8+
T4 arg4,
9+
T5 arg5,
10+
T6 arg6,
11+
T7 arg7,
12+
T8 arg8,
13+
);
14+
15+
extension Curry8<T1, T2, T3, T4, T5, T6, T7, T8, R>
16+
on Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> {
17+
Map1<
18+
T1,
19+
Map1<T2, Map1<T3, Map1<T4, Map1<T5, Map1<T6, Map1<T7, Map1<T8, R>>>>>>>
20+
>
21+
get curry =>
22+
(T1 arg1) =>
23+
(T2 arg2) =>
24+
(T3 arg3) =>
25+
(T4 arg4) =>
26+
(T5 arg5) =>
27+
(T6 arg6) =>
28+
(T7 arg7) =>
29+
(T8 arg8) => this(
30+
arg1,
31+
arg2,
32+
arg3,
33+
arg4,
34+
arg5,
35+
arg6,
36+
arg7,
37+
arg8,
38+
);
39+
}

benchmark/case/curry_2.expect_short

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
typedef Map1<T1, R> = R Function(T1 arg1);
2+
3+
typedef Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> = R Function(
4+
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
5+
6+
extension Curry8<T1, T2, T3, T4, T5, T6, T7, T8, R>
7+
on Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> {
8+
Map1<
9+
T1,
10+
Map1<T2,
11+
Map1<T3, Map1<T4, Map1<T5, Map1<T6, Map1<T7, Map1<T8, R>>>>>>>>
12+
get curry => (T1 arg1) => (T2 arg2) => (T3 arg3) => (T4 arg4) =>
13+
(T5 arg5) => (T6 arg6) => (T7 arg7) =>
14+
(T8 arg8) => this(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
15+
}

benchmark/case/curry_2.unit

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
typedef Map1<T1, R> = R Function(T1 arg1);
2+
3+
typedef Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> = R Function(
4+
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
5+
6+
extension Curry8<T1, T2, T3, T4, T5, T6, T7, T8, R>
7+
on Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> {
8+
Map1<
9+
T1,
10+
Map1<T2,
11+
Map1<T3, Map1<T4, Map1<T5, Map1<T6, Map1<T7, Map1<T8, R>>>>>>>>
12+
get curry => (T1 arg1) => (T2 arg2) => (T3 arg3) => (T4 arg4) =>
13+
(T5 arg5) => (T6 arg6) => (T7 arg7) =>
14+
(T8 arg8) => this(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
15+
}

test/tall/regression/1500/1521.unit

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
>>>
2+
typedef Map1<T1, R> = R Function(T1 arg1);
3+
4+
typedef Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> = R Function(
5+
T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
6+
7+
extension Curry8<T1, T2, T3, T4, T5, T6, T7, T8, R>
8+
on Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> {
9+
Map1<
10+
T1,
11+
Map1<T2,
12+
Map1<T3, Map1<T4, Map1<T5, Map1<T6, Map1<T7, Map1<T8, R>>>>>>>>
13+
get curry => (T1 arg1) => (T2 arg2) => (T3 arg3) => (T4 arg4) =>
14+
(T5 arg5) => (T6 arg6) => (T7 arg7) =>
15+
(T8 arg8) => this(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
16+
}
17+
<<<
18+
typedef Map1<T1, R> = R Function(T1 arg1);
19+
20+
typedef Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> =
21+
R Function(
22+
T1 arg1,
23+
T2 arg2,
24+
T3 arg3,
25+
T4 arg4,
26+
T5 arg5,
27+
T6 arg6,
28+
T7 arg7,
29+
T8 arg8,
30+
);
31+
32+
extension Curry8<T1, T2, T3, T4, T5, T6, T7, T8, R>
33+
on Map8<T1, T2, T3, T4, T5, T6, T7, T8, R> {
34+
Map1<
35+
T1,
36+
Map1<T2, Map1<T3, Map1<T4, Map1<T5, Map1<T6, Map1<T7, Map1<T8, R>>>>>>>
37+
>
38+
get curry =>
39+
(T1 arg1) =>
40+
(T2 arg2) =>
41+
(T3 arg3) =>
42+
(T4 arg4) =>
43+
(T5 arg5) =>
44+
(T6 arg6) =>
45+
(T7 arg7) =>
46+
(T8 arg8) => this(
47+
arg1,
48+
arg2,
49+
arg3,
50+
arg4,
51+
arg5,
52+
arg6,
53+
arg7,
54+
arg8,
55+
);
56+
}

0 commit comments

Comments
 (0)