1// tcusto1.cpp -- Regression test program, custom view tests
2// $Id: tcusto1.cpp 1230 2007-03-09 15:58:53Z jcw $
3// This is part of Metakit, the homepage is http://www.equi4.com/metakit.html
4
5#include "regress.h"
6
7void TestCustom1() {
8  B(c01, Slice forward, 0) {
9    c4_IntProp p1("p1");
10
11    c4_View v1;
12    v1.Add(p1[123]);
13    v1.Add(p1[234]);
14    v1.Add(p1[345]);
15    v1.Add(p1[456]);
16    v1.Add(p1[567]);
17
18    c4_View v2 = v1.Slice(1,  - 1, 2);
19    A(v2.GetSize() == 2);
20    A(p1(v2[0]) == 234);
21    A(p1(v2[1]) == 456);
22
23    v1.Add(p1[678]);
24    A(v1.GetSize() == 6);
25    A(v2.GetSize() == 3);
26    A(p1(v2[2]) == 678);
27  }
28  E;
29
30  B(c02, Slice backward, 0) {
31    c4_IntProp p1("p1");
32
33    c4_View v1;
34    v1.Add(p1[123]);
35    v1.Add(p1[234]);
36    v1.Add(p1[345]);
37    v1.Add(p1[456]);
38    v1.Add(p1[567]);
39
40    c4_View v2 = v1.Slice(1,  - 1,  - 2);
41    A(v2.GetSize() == 2);
42    A(p1(v2[0]) == 456);
43    A(p1(v2[1]) == 234);
44
45    v1.Add(p1[678]);
46    A(v1.GetSize() == 6);
47    A(v2.GetSize() == 3);
48    A(p1(v2[0]) == 678);
49    A(p1(v2[1]) == 456);
50    A(p1(v2[2]) == 234);
51  }
52  E;
53
54  B(c03, Slice reverse, 0) {
55    c4_IntProp p1("p1");
56
57    c4_View v1;
58    v1.Add(p1[123]);
59    v1.Add(p1[234]);
60    v1.Add(p1[345]);
61    v1.Add(p1[456]);
62    v1.Add(p1[567]);
63
64    c4_View v2 = v1.Slice(1, 5,  - 1);
65    A(v2.GetSize() == 4);
66    A(p1(v2[0]) == 567);
67    A(p1(v2[1]) == 456);
68    A(p1(v2[2]) == 345);
69    A(p1(v2[3]) == 234);
70
71    v1.Add(p1[678]);
72    A(v1.GetSize() == 6);
73    A(v2.GetSize() == 4);
74  }
75  E;
76
77  B(c04, Cartesian product, 0) {
78    c4_IntProp p1("p1");
79    c4_IntProp p2("p2");
80
81    c4_View v1;
82    v1.Add(p1[123]);
83    v1.Add(p1[234]);
84    v1.Add(p1[345]);
85
86    c4_View v2;
87    v2.Add(p2[111]);
88    v2.Add(p2[222]);
89
90    c4_View v3 = v1.Product(v2);
91    A(v3.GetSize() == 6);
92    A(p1(v3[0]) == 123);
93    A(p2(v3[0]) == 111);
94    A(p1(v3[1]) == 123);
95    A(p2(v3[1]) == 222);
96    A(p1(v3[2]) == 234);
97    A(p2(v3[2]) == 111);
98    A(p1(v3[3]) == 234);
99    A(p2(v3[3]) == 222);
100    A(p1(v3[4]) == 345);
101    A(p2(v3[4]) == 111);
102    A(p1(v3[5]) == 345);
103    A(p2(v3[5]) == 222);
104
105    v1.Add(p1[456]);
106    A(v3.GetSize() == 8);
107    v2.Add(p2[333]);
108    A(v3.GetSize() == 12);
109  }
110  E;
111
112  B(c05, Remapping, 0) {
113    c4_IntProp p1("p1");
114
115    c4_View v1;
116    v1.Add(p1[123]);
117    v1.Add(p1[234]);
118    v1.Add(p1[345]);
119
120    c4_View v2;
121    v2.Add(p1[2]);
122    v2.Add(p1[0]);
123    v2.Add(p1[1]);
124    v2.Add(p1[0]);
125
126    c4_View v3 = v1.RemapWith(v2);
127    A(v3.GetSize() == 4);
128    A(p1(v3[0]) == 345);
129    A(p1(v3[1]) == 123);
130    A(p1(v3[2]) == 234);
131    A(p1(v3[3]) == 123);
132  }
133  E;
134
135  B(c06, Pairwise combination, 0) {
136    c4_IntProp p1("p1");
137    c4_IntProp p2("p2");
138
139    c4_View v1;
140    v1.Add(p1[123]);
141    v1.Add(p1[234]);
142    v1.Add(p1[345]);
143
144    c4_View v2;
145    v2.Add(p2[111]);
146    v2.Add(p2[222]);
147    v2.Add(p2[333]);
148
149    c4_View v3 = v1.Pair(v2);
150    A(v3.GetSize() == 3);
151    A(p1(v3[0]) == 123);
152    A(p2(v3[0]) == 111);
153    A(p1(v3[1]) == 234);
154    A(p2(v3[1]) == 222);
155    A(p1(v3[2]) == 345);
156    A(p2(v3[2]) == 333);
157  }
158  E;
159
160  B(c07, Concatenate views, 0) {
161    c4_IntProp p1("p1");
162
163    c4_View v1;
164    v1.Add(p1[123]);
165    v1.Add(p1[234]);
166    v1.Add(p1[345]);
167
168    c4_View v2;
169    v2.Add(p1[111]);
170    v2.Add(p1[222]);
171
172    c4_View v3 = v1.Concat(v2);
173    A(v3.GetSize() == 5);
174    A(p1(v3[0]) == 123);
175    A(p1(v3[1]) == 234);
176    A(p1(v3[2]) == 345);
177    A(p1(v3[3]) == 111);
178    A(p1(v3[4]) == 222);
179  }
180  E;
181
182  B(c08, Rename property, 0) {
183    c4_IntProp p1("p1");
184    c4_IntProp p2("p2");
185
186    c4_View v1;
187    v1.Add(p1[123]);
188    v1.Add(p1[234]);
189    v1.Add(p1[345]);
190
191    c4_View v2 = v1.Rename(p1, p2);
192    A(v2.GetSize() == 3);
193    A(p2(v2[0]) == 123);
194    A(p2(v2[1]) == 234);
195    A(p2(v2[2]) == 345);
196    A(p1(v2[0]) == 0);
197    A(p1(v2[1]) == 0);
198    A(p1(v2[2]) == 0);
199  }
200  E;
201
202  B(c09, GroupBy operation, 0) {
203    c4_StringProp p1("p1");
204    c4_IntProp p2("p2");
205    c4_ViewProp p3("p3");
206
207    c4_View v1, v2, v3;
208
209    v1.Add(p1[""]);
210    v1.Add(p1["1"] + p2[1]);
211    v1.Add(p1["12"] + p2[1]);
212    v1.Add(p1["12"] + p2[2]);
213    v1.Add(p1["123"] + p2[1]);
214    v1.Add(p1["123"] + p2[2]);
215    v1.Add(p1["123"] + p2[3]);
216
217    v2 = v1.GroupBy(p1, p3);
218    A(v2.GetSize() == 4);
219    A(p1(v2[0]) == (c4_String)"");
220    A(p1(v2[1]) == (c4_String)"1");
221    A(p1(v2[2]) == (c4_String)"12");
222    A(p1(v2[3]) == (c4_String)"123");
223
224    v3 = p3(v2[0]);
225    A(v3.GetSize() == 1);
226    A(p2(v3[0]) == 0);
227    v3 = p3(v2[1]);
228    A(v3.GetSize() == 1);
229    A(p2(v3[0]) == 1);
230    v3 = p3(v2[2]);
231    A(v3.GetSize() == 2);
232    A(p2(v3[0]) == 1);
233    A(p2(v3[1]) == 2);
234    v3 = p3(v2[3]);
235    A(v3.GetSize() == 3);
236    A(p2(v3[0]) == 1);
237    A(p2(v3[1]) == 2);
238    A(p2(v3[2]) == 3);
239
240  }
241  E;
242
243  B(c10, Counts operation, 0) {
244    c4_StringProp p1("p1");
245    c4_IntProp p2("p2"), p3("p3");
246
247    c4_View v1, v2, v3;
248
249    v1.Add(p1[""]);
250    v1.Add(p1["1"] + p2[1]);
251    v1.Add(p1["12"] + p2[1]);
252    v1.Add(p1["12"] + p2[2]);
253    v1.Add(p1["123"] + p2[1]);
254    v1.Add(p1["123"] + p2[2]);
255    v1.Add(p1["123"] + p2[3]);
256
257    v2 = v1.Counts(p1, p3);
258    A(v2.GetSize() == 4);
259    A(p1(v2[0]) == (c4_String)"");
260    A(p1(v2[1]) == (c4_String)"1");
261    A(p1(v2[2]) == (c4_String)"12");
262    A(p1(v2[3]) == (c4_String)"123");
263
264    A(p2(v2[0]) == 0);
265    A(p2(v2[1]) == 0);
266    A(p2(v2[2]) == 0);
267    A(p2(v2[3]) == 0);
268
269    A(p3(v2[0]) == 1);
270    A(p3(v2[1]) == 1);
271    A(p3(v2[2]) == 2);
272    A(p3(v2[3]) == 3);
273
274  }
275  E;
276}
277