Skip to content

Commit c4d9712

Browse files
committed
Add test for copying elements of nested storage array
1 parent 0262621 commit c4d9712

File tree

1 file changed

+62
-32
lines changed

1 file changed

+62
-32
lines changed
Lines changed: 62 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,85 @@
1+
pragma abicoder v2;
2+
13
contract C {
24
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);
58

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;
913

1014
constructor() {
1115
src1[1] = new uint8[][](2);
1216
src1[1][0] = [3, 4];
1317
src1[1][1] = [5, 6];
1418

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];
1727

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];
2232
}
2333

2434
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]);
2942
}
3043

3144
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]);
3752
}
3853

3954
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]);
4369
}
4470
}
4571

4672
// ----
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

Comments
 (0)