1 module ocean.meta.values.Reset_test;
2
3 import ocean.meta.values.Reset;
4 import ocean.core.array.Mutation;
5 import ocean.core.Test;
6
7 unittest
8 {
9 struct TestStruct
10 {
11 int a;
12 char[] b;
13 int[7] c;
14
15 public struct SubStruct
16 {
17 int d;
18 char[] e;
19 char[][] f;
20 int[7] g;
21
22 public struct SubSubStruct
23 {
24 int h;
25 char[] i;
26 char[][] j;
27 int[7] k;
28
29 void InitStructure()
30 {
31 this.h = -52;
32 this.i.copy("even even more test text");
33 this.j.length = 3;
34 this.j[0].copy("abc");
35 this.j[1].copy("def");
36 this.j[2].copy("ghi");
37 foreach ( ref item; this.k )
38 {
39 item = 120000;
40 }
41 }
42 }
43
44 void InitStructure()
45 {
46 this.d = 32;
47 this.e.copy("even more test text");
48
49 this.f.length = 1;
50 this.f[0].copy("abc");
51 foreach ( ref item; this.g )
52 {
53 item = 32400;
54 }
55 }
56
57 SubSubStruct[] sub_sub_struct;
58 SubSubStruct[1] sub_sub_static_array;
59 }
60
61 SubStruct sub_struct;
62
63 SubStruct[] sub_struct_array;
64 int[][1] dynamic_static_array;
65 }
66
67 TestStruct test_struct;
68 test_struct.a = 7;
69 test_struct.b.copy("some test");
70 foreach ( i, ref item; test_struct.c )
71 {
72 item = 64800;
73 }
74
75 TestStruct.SubStruct sub_struct;
76 sub_struct.InitStructure;
77 test_struct.sub_struct = sub_struct;
78 test_struct.sub_struct_array ~= sub_struct;
79 test_struct.sub_struct_array ~= sub_struct;
80
81
82 TestStruct.SubStruct.SubSubStruct sub_sub_struct;
83 sub_sub_struct.InitStructure;
84 test_struct.sub_struct_array[0].sub_sub_struct ~= sub_sub_struct;
85 test_struct.sub_struct_array[1].sub_sub_struct ~= sub_sub_struct;
86 test_struct.sub_struct_array[1].sub_sub_struct ~= sub_sub_struct;
87 test_struct.sub_struct.sub_sub_struct ~= sub_sub_struct;
88 test_struct.sub_struct.sub_sub_struct ~= sub_sub_struct;
89 test_struct.sub_struct.sub_sub_static_array[0] = sub_sub_struct;
90
91 test_struct.dynamic_static_array[0] = [ 1, 2, 3 ];
92
93 reset(test_struct);
94
95 test!("==")(test_struct.a, 0);
96 test!("==")(test_struct.b, ""[]);
97 foreach ( item; test_struct.c )
98 {
99 test!("==")(item, 0);
100 }
101
102 test!("==")(test_struct.sub_struct_array.length, 0);
103
104 test!("==")(test_struct.sub_struct.d, 0);
105 test!("==")(test_struct.sub_struct.e, ""[]);
106 test!("==")(test_struct.sub_struct.f.length, 0);
107 foreach ( item; test_struct.sub_struct.g )
108 {
109 test!("==")(item, 0);
110 }
111
112 foreach (idx, ref field; test_struct.sub_struct.sub_sub_static_array[0].tupleof)
113 {
114 test!("==")(field, TestStruct.SubStruct.SubSubStruct.init.tupleof[idx]);
115 }
116
117 test!("==")(test_struct.sub_struct.sub_sub_struct.length, 0);
118 test!("==")(test_struct.dynamic_static_array[0].length, 0);
119
120 //Test nested classes.
121 class TestClass
122 {
123 int a;
124 char[] b;
125 int[2] c;
126
127 public class SubClass
128 {
129 int d;
130 char[] e;
131 }
132
133 SubClass[1] s;
134 }
135
136 TestClass test_class = new TestClass;
137 test_class.s[0] = test_class..new SubClass;
138 test_class.a = 7;
139 test_class.b = [];
140 test_class.b ~= 't';
141 test_class.c[1] = 1;
142 test_class.s[0].d = 5;
143 test_class.s[0].e = [];
144 test_class.s[0].e ~= 'q';
145
146 reset(test_class);
147 test!("==")(test_class.a, 0);
148 test!("==")(test_class.b.length, 0);
149 test!("==")(test_class.c[1], 0);
150 test!("!is")(cast(void*)test_class.s, null);
151 test!("==")(test_class.s[0].d, 0);
152 test!("==")(test_class.s[0].e.length, 0);
153 }