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