|
| 1 | +pragma abicoder v2; |
| 2 | + |
1 | 3 | contract C {
|
2 | 4 | uint8[][][] src1 = new uint8[][][](2);
|
3 |
| - uint8[][2][] src2 = new uint8[][2][](1); |
4 |
| - uint8[2][][] src3 = new uint8[2][][](2); |
| 5 | + uint8[][][2] src2; |
| 6 | + uint8[][2][] src3 = new uint8[][2][](1); |
| 7 | + uint8[2][][] src4 = new uint8[2][][](2); |
5 | 8 |
|
6 |
| - uint8[][][1] dst1; |
7 |
| - uint8[][2][] dst2; |
8 |
| - uint8[2][] dst3; |
| 9 | + uint8[][] dst1; |
| 10 | + uint8[][] dst2; |
| 11 | + uint8[][2] dst3; |
| 12 | + uint8[][] dst4; |
9 | 13 |
|
10 | 14 | constructor() {
|
11 | 15 | src1[1] = new uint8[][](2);
|
12 | 16 | src1[1][0] = [3, 4];
|
13 | 17 | src1[1][1] = [5, 6];
|
14 | 18 |
|
15 |
| - src2[0][0] = [3, 4]; |
16 |
| - src2[0][1] = [5, 6]; |
| 19 | + src2[0] = new uint8[][](2); |
| 20 | + src2[0][0] = [6, 7]; |
| 21 | + src2[0][1] = [8, 9]; |
| 22 | + src2[1] = new uint8[][](2); |
| 23 | + src2[1][0] = [10, 11]; |
| 24 | + |
| 25 | + src3[0][0] = [3, 4]; |
| 26 | + src3[0][1] = [5, 6]; |
17 | 27 |
|
18 |
| - src3[0] = new uint8[2][](1); |
19 |
| - src3[0][0] = [17, 23]; |
20 |
| - src3[1] = new uint8[2][](1); |
21 |
| - src3[1][0] = [19, 31]; |
| 28 | + src4[0] = new uint8[2][](1); |
| 29 | + src4[0][0] = [17, 23]; |
| 30 | + src4[1] = new uint8[2][](1); |
| 31 | + src4[1][0] = [19, 31]; |
22 | 32 | }
|
23 | 33 |
|
24 | 34 | function test1() public {
|
25 |
| - dst1[0] = src1[1]; |
26 |
| - require(dst1[0].length == 2); |
27 |
| - require(dst1[0][0][0] == src1[1][0][0]); |
28 |
| - require(dst1[0][1][1] == src1[1][1][1]); |
| 35 | + dst1 = src1[1]; |
| 36 | + |
| 37 | + require(dst1.length == 2); |
| 38 | + require(dst1[0][0] == src1[1][0][0]); |
| 39 | + require(dst1[0][1] == src1[1][0][1]); |
| 40 | + require(dst1[1][0] == src1[1][1][0]); |
| 41 | + require(dst1[1][1] == src1[1][1][1]); |
29 | 42 | }
|
30 | 43 |
|
31 | 44 | function test2() public {
|
32 |
| - dst2.push(); |
33 |
| - dst2[0][0] = src2[0][0]; |
34 |
| - dst2[0][1] = src2[0][1]; |
35 |
| - require(dst2[0][0][0] == src2[0][0][0]); |
36 |
| - require(dst2[0][0][1] == src2[0][0][1]); |
| 45 | + dst2 = src2[0]; |
| 46 | + |
| 47 | + require(dst2.length == 2); |
| 48 | + require(dst2[0][0] == src2[1][0][0]); |
| 49 | + require(dst2[0][1] == src2[1][0][1]); |
| 50 | + require(dst2[1][0] == src2[1][1][0]); |
| 51 | + require(dst2[1][1] == src2[1][1][1]); |
37 | 52 | }
|
38 | 53 |
|
39 | 54 | function test3() public {
|
40 |
| - dst3 = src3[1]; |
41 |
| - require(dst3[0][0] == src3[1][0][0]); |
42 |
| - require(dst3[0][0] == src3[1][0][0]); |
| 55 | + dst3 = src3[0]; |
| 56 | + require(dst3[0][0] == src3[0][0][0]); |
| 57 | + require(dst3[0][1] == src3[0][0][1]); |
| 58 | + require(dst3[1][0] == src3[0][1][0]); |
| 59 | + require(dst3[1][1] == src3[0][1][1]); |
| 60 | + } |
| 61 | + |
| 62 | + function test4() public { |
| 63 | + dst4 = src4[1]; |
| 64 | + require(dst4.length == 2); |
| 65 | + require(dst4[0][0] == src4[0][0][0]); |
| 66 | + require(dst4[0][1] == src4[0][0][1]); |
| 67 | + require(dst4[1][0] == src4[0][1][0]); |
| 68 | + require(dst4[1][1] == src4[0][1][1]); |
43 | 69 | }
|
44 | 70 | }
|
45 | 71 |
|
46 | 72 | // ----
|
47 |
| -// test1() |
48 |
| -// gas irOptimized: 147595 |
49 |
| -// gas legacy: 148507 |
50 |
| -// gas legacyOptimized: 148336 |
51 |
| -// test2() |
52 |
| -// gas irOptimized: 145663 |
53 |
| -// gas legacy: 146311 |
54 |
| -// gas legacyOptimized: 146106 |
55 |
| -// test3() |
| 73 | +// test1() -> |
| 74 | +// gas irOptimized: 150570 |
| 75 | +// gas legacy: 151017 |
| 76 | +// gas legacyOptimized: 150970 |
| 77 | +// test2() -> FAILURE |
| 78 | +// gas irOptimized: 150408 |
| 79 | +// gas legacy: 150700 |
| 80 | +// gas legacyOptimized: 150601 |
| 81 | +// test3() -> |
| 82 | +// gas irOptimized: 123810 |
| 83 | +// gas legacy: 125381 |
| 84 | +// gas legacyOptimized: 125160 |
| 85 | +// test4() -> FAILURE |
0 commit comments