Ton
113 строк · 3.0 Кб
1tuple empty_tuple() asm "NIL";
2forall X -> (tuple, ()) tpush(tuple t, X x) asm "TPUSH";
3
4tuple asm_func_1(int x, int y, int z) asm "3 TUPLE";
5tuple asm_func_2(int x, int y, int z) asm (z y x -> 0) "3 TUPLE";
6tuple asm_func_3(int x, int y, int z) asm (y z x -> 0) "3 TUPLE";
7tuple asm_func_4(int a, (int, (int, int)) b, int c) asm (b a c -> 0) "5 TUPLE";
8
9(tuple, ()) asm_func_modify(tuple a, int b, int c) asm (c b a -> 0) "SWAP TPUSH SWAP TPUSH";
10
11global tuple t;
12
13int foo(int x) {
14t~tpush(x);
15return x * 10;
16}
17
18(tuple, tuple) test_old_1() method_id(11) {
19t = empty_tuple();
20tuple t2 = asm_func_1(foo(11), foo(22), foo(33));
21return (t, t2);
22}
23
24(tuple, tuple) test_old_2() method_id(12) {
25t = empty_tuple();
26tuple t2 = asm_func_2(foo(11), foo(22), foo(33));
27return (t, t2);
28}
29
30(tuple, tuple) test_old_3() method_id(13) {
31t = empty_tuple();
32tuple t2 = asm_func_3(foo(11), foo(22), foo(33));
33return (t, t2);
34}
35
36(tuple, tuple) test_old_4() method_id(14) {
37t = empty_tuple();
38tuple t2 = empty_tuple();
39;; This actually computes left-to-right even without compute-asm-ltr
40tuple t2 = asm_func_4(foo(11), (foo(22), (foo(33), foo(44))), foo(55));
41return (t, t2);
42}
43
44(tuple, tuple) test_old_modify() method_id(15) {
45t = empty_tuple();
46tuple t2 = empty_tuple();
47t2~asm_func_modify(foo(22), foo(33));
48return (t, t2);
49}
50
51(tuple, tuple) test_old_dot() method_id(16) {
52t = empty_tuple();
53tuple t2 = foo(11).asm_func_3(foo(22), foo(33));
54return (t, t2);
55}
56
57#pragma compute-asm-ltr;
58
59(tuple, tuple) test_new_1() method_id(21) {
60t = empty_tuple();
61tuple t2 = asm_func_1(foo(11), foo(22), foo(33));
62return (t, t2);
63}
64
65(tuple, tuple) test_new_2() method_id(22) {
66t = empty_tuple();
67tuple t2 = asm_func_2(foo(11), foo(22), foo(33));
68return (t, t2);
69}
70
71(tuple, tuple) test_new_3() method_id(23) {
72t = empty_tuple();
73tuple t2 = asm_func_3(foo(11), foo(22), foo(33));
74return (t, t2);
75}
76
77(tuple, tuple) test_new_4() method_id(24) {
78t = empty_tuple();
79tuple t2 = asm_func_4(foo(11), (foo(22), (foo(33), foo(44))), foo(55));
80return (t, t2);
81}
82
83(tuple, tuple) test_new_modify() method_id(25) {
84t = empty_tuple();
85tuple t2 = empty_tuple();
86t2~asm_func_modify(foo(22), foo(33));
87return (t, t2);
88}
89
90(tuple, tuple) test_new_dot() method_id(26) {
91t = empty_tuple();
92tuple t2 = foo(11).asm_func_3(foo(22), foo(33));
93return (t, t2);
94}
95
96() main() {
97}
98
99{-
100method_id | in | out
101TESTCASE | 11 | | [ 11 22 33 ] [ 110 220 330 ]
102TESTCASE | 12 | | [ 33 22 11 ] [ 330 220 110 ]
103TESTCASE | 13 | | [ 22 33 11 ] [ 220 330 110 ]
104TESTCASE | 14 | | [ 11 22 33 44 55 ] [ 220 330 440 110 550 ]
105TESTCASE | 15 | | [ 33 22 ] [ 220 330 ]
106TESTCASE | 16 | | [ 22 33 11 ] [ 220 330 110 ]
107TESTCASE | 21 | | [ 11 22 33 ] [ 110 220 330 ]
108TESTCASE | 22 | | [ 11 22 33 ] [ 330 220 110 ]
109TESTCASE | 23 | | [ 11 22 33 ] [ 220 330 110 ]
110TESTCASE | 24 | | [ 11 22 33 44 55 ] [ 220 330 440 110 550 ]
111TESTCASE | 25 | | [ 22 33 ] [ 220 330 ]
112TESTCASE | 26 | | [ 11 22 33 ] [ 220 330 110 ]
113-}
114