1contract Test {
2    struct S {
3        uint8 x;
4        uint16 y;
5        uint256 z;
6        uint8[2] a;
7    }
8    S[5] data;
9
10    function testInit()
11        public
12        returns (uint8 x, uint16 y, uint256 z, uint8 a, bool flag)
13    {
14        S[2] memory d;
15        x = d[0].x;
16        y = d[0].y;
17        z = d[0].z;
18        a = d[0].a[1];
19        flag = true;
20    }
21
22    function testCopyRead()
23        public
24        returns (uint8 x, uint16 y, uint256 z, uint8 a)
25    {
26        data[2].x = 1;
27        data[2].y = 2;
28        data[2].z = 3;
29        data[2].a[1] = 4;
30        S memory s = data[2];
31        x = s.x;
32        y = s.y;
33        z = s.z;
34        a = s.a[1];
35    }
36
37    function testAssign()
38        public
39        returns (uint8 x, uint16 y, uint256 z, uint8 a)
40    {
41        S memory s;
42        s.x = 1;
43        s.y = 2;
44        s.z = 3;
45        s.a[1] = 4;
46        x = s.x;
47        y = s.y;
48        z = s.z;
49        a = s.a[1];
50    }
51}
52
53// ====
54// compileViaYul: also
55// compileToEwasm: also
56// ----
57// testInit() -> 0, 0, 0, 0, true
58// testCopyRead() -> 1, 2, 3, 4
59// testAssign() -> 1, 2, 3, 4
60