master
1const builtin = @import("builtin");
2const expect = @import("std").testing.expect;
3
4const Node = struct {
5 payload: i32,
6 children: []Node,
7};
8
9const NodeAligned = struct {
10 payload: i32,
11 children: []align(@alignOf(NodeAligned)) NodeAligned,
12};
13
14test "struct contains slice of itself" {
15 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
16 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
17
18 var other_nodes = [_]Node{
19 Node{
20 .payload = 31,
21 .children = &[_]Node{},
22 },
23 Node{
24 .payload = 32,
25 .children = &[_]Node{},
26 },
27 };
28 var nodes = [_]Node{
29 Node{
30 .payload = 1,
31 .children = &[_]Node{},
32 },
33 Node{
34 .payload = 2,
35 .children = &[_]Node{},
36 },
37 Node{
38 .payload = 3,
39 .children = other_nodes[0..],
40 },
41 };
42 const root = Node{
43 .payload = 1234,
44 .children = nodes[0..],
45 };
46 try expect(root.payload == 1234);
47 try expect(root.children[0].payload == 1);
48 try expect(root.children[1].payload == 2);
49 try expect(root.children[2].payload == 3);
50 try expect(root.children[2].children[0].payload == 31);
51 try expect(root.children[2].children[1].payload == 32);
52}
53
54test "struct contains aligned slice of itself" {
55 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
56 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
57
58 var other_nodes = [_]NodeAligned{
59 NodeAligned{
60 .payload = 31,
61 .children = &[_]NodeAligned{},
62 },
63 NodeAligned{
64 .payload = 32,
65 .children = &[_]NodeAligned{},
66 },
67 };
68 var nodes = [_]NodeAligned{
69 NodeAligned{
70 .payload = 1,
71 .children = &[_]NodeAligned{},
72 },
73 NodeAligned{
74 .payload = 2,
75 .children = &[_]NodeAligned{},
76 },
77 NodeAligned{
78 .payload = 3,
79 .children = other_nodes[0..],
80 },
81 };
82 const root = NodeAligned{
83 .payload = 1234,
84 .children = nodes[0..],
85 };
86 try expect(root.payload == 1234);
87 try expect(root.children[0].payload == 1);
88 try expect(root.children[1].payload == 2);
89 try expect(root.children[2].payload == 3);
90 try expect(root.children[2].children[0].payload == 31);
91 try expect(root.children[2].children[1].payload == 32);
92}