1// tformat.cpp -- Regression test program, (re-)format tests 2// $Id: tformat.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 TestFormat() { 8 B(f01, Add view to format, 0)W(f01a); 9 { 10 c4_IntProp p1("p1"); 11 c4_IntProp p2("p2"); 12 { 13 c4_Storage s1("f01a", 1); 14 s1.SetStructure("a[p1:I]"); 15 16 c4_View v1 = s1.View("a"); 17 v1.Add(p1[123]); 18 s1.Commit(); 19 20 c4_View v2 = s1.GetAs("b[p2:I]"); 21 22 v2.Add(p2[345]); 23 v2.Add(p2[567]); 24 25 s1.Commit(); 26 } 27 { 28 c4_Storage s1("f01a", 0); 29 30 c4_View v1 = s1.View("a"); 31 A(v1.GetSize() == 1); 32 A(p1(v1[0]) == 123); 33 34 c4_View v2 = s1.View("b"); 35 A(v2.GetSize() == 2); 36 A(p2(v2[0]) == 345); 37 A(p2(v2[1]) == 567); 38 } 39 } 40 D(f01a); 41 R(f01a); 42 E; 43 44 B(f02, Remove view from format, 0)W(f02a); 45 { 46 c4_IntProp p1("p1"); 47 c4_IntProp p2("p2"); 48 { 49 c4_Storage s1("f02a", 1); 50 s1.SetStructure("a[p1:I],b[p2:I]"); 51 52 c4_View v1 = s1.View("a"); 53 v1.Add(p1[123]); 54 55 c4_View v2 = s1.View("b"); 56 v2.Add(p2[345]); 57 v2.Add(p2[567]); 58 59 s1.Commit(); 60 } 61 { 62 c4_Storage s1("f02a", 1); 63 s1.SetStructure("b[p2:I]"); 64 65 c4_View v1 = s1.View("a"); 66 A(v1.GetSize() == 1); // 19990916 new semantics, still as temp view 67 A(p1(v1[0]) == 123); 68 69 c4_View v2 = s1.View("b"); 70 A(v2.GetSize() == 2); 71 A(p2(v2[0]) == 345); 72 A(p2(v2[1]) == 567); 73 74 s1.Commit(); 75 } 76 { 77 c4_Storage s1("f02a", 0); 78 79 c4_View v1 = s1.View("a"); 80 A(v1.GetSize() == 0); 81 82 c4_View v2 = s1.View("b"); 83 A(v2.GetSize() == 2); 84 A(p2(v2[0]) == 345); 85 A(p2(v2[1]) == 567); 86 } 87 } 88 D(f02a); 89 R(f02a); 90 E; 91 92 B(f03, Rollback format change, 0)W(f03a); 93 { 94 c4_IntProp p1("p1"); 95 { 96 c4_Storage s1("f03a", 1); 97 s1.SetStructure("a[p1:I]"); 98 99 c4_View v1 = s1.View("a"); 100 v1.Add(p1[123]); 101 102 s1.Commit(); 103 104 v1 = s1.GetAs("a"); 105 A(v1.GetSize() == 0); 106 107 s1.Rollback(); 108 109 v1 = s1.View("a"); 110 A(v1.GetSize() == 1); 111 A(p1(v1[0]) == 123); 112 } 113 } 114 D(f03a); 115 R(f03a); 116 E; 117 118 B(f04, Rearrange format, 0)W(f04a); 119 { 120 c4_IntProp p1("p1"); 121 c4_IntProp p2("p2"); 122 { 123 c4_Storage s1("f04a", 1); 124 s1.SetStructure("a[p1:I],b[p2:I]"); 125 126 c4_View v1 = s1.View("a"); 127 v1.Add(p1[123]); 128 129 c4_View v2 = s1.View("b"); 130 v2.Add(p2[345]); 131 v2.Add(p2[567]); 132 133 s1.Commit(); 134 } 135 { 136 c4_Storage s1("f04a", 1); 137 s1.SetStructure("b[p2:I],a[p1:I]"); 138 139 c4_View v1 = s1.View("a"); 140 A(v1.GetSize() == 1); 141 A(p1(v1[0]) == 123); 142 143 c4_View v2 = s1.View("b"); 144 A(v2.GetSize() == 2); 145 A(p2(v2[0]) == 345); 146 A(p2(v2[1]) == 567); 147 148 s1.Commit(); 149 } 150 } 151 D(f04a); 152 R(f04a); 153 E; 154 155 B(f05, Nested reformat, 0)W(f05a); 156 { 157 c4_IntProp p1("p1"); 158 c4_IntProp p2("p2"); 159 { 160 c4_Storage s1("f05a", 1); 161 s1.SetStructure("a[p1:I],b[p2:I]"); 162 163 c4_View v1 = s1.View("a"); 164 v1.Add(p1[123]); 165 166 c4_View v2 = s1.View("b"); 167 v2.Add(p2[345]); 168 v2.Add(p2[567]); 169 170 s1.Commit(); 171 } 172 { 173 c4_Storage s1("f05a", 1); 174 s1.SetStructure("a[p1:I],b[p1:I,p2:I]"); 175 176 c4_View v2 = s1.View("b"); 177 p1(v2[0]) = 543; 178 p1(v2[1]) = 765; 179 180 s1.Commit(); 181 } 182 { 183 c4_Storage s1("f05a", 0); 184 185 c4_View v1 = s1.View("a"); 186 A(v1.GetSize() == 1); 187 A(p1(v1[0]) == 123); 188 189 c4_View v2 = s1.View("b"); 190 A(v2.GetSize() == 2); 191 A(p1(v2[0]) == 543); 192 A(p1(v2[1]) == 765); 193 A(p2(v2[0]) == 345); 194 A(p2(v2[1]) == 567); 195 } 196 } 197 D(f05a); 198 R(f05a); 199 E; 200 201 B(f06, Flip foreign data, 0) { 202 D(reversed); // not created here, only dump existing file 203 } 204 E; 205 206 B(f07, Automatic structure info (obsolete), 0)W(f07a); 207 { 208 /* Structure() and Store() are no longer supported 209 c4_StringProp p1 ("p1"), p2 ("p2"); 210 c4_Row r1 = p1 ["One"] + p2 ["Two"]; 211 c4_Row r2; 212 c4_View v1; 213 v1.Add(r1); 214 v1.Add(r2); 215 v1.Add(r1); 216 217 c4_View v2 = v1.Structure(); 218 A(v2.GetSize() == 1); 219 220 c4_ViewProp pView ("view"); 221 c4_View v3 = pView (v2[0]); 222 A(v3.GetSize() == 2); 223 */ 224#define FORMAT07 "dict[parent:I,index:I,view[name:S,type:S,child:I]]" 225 c4_Storage s1("f07a", 1); 226 s1.SetStructure(FORMAT07); 227 228 //s1.View("dict") = v1.Structure(); 229 230 s1.Commit(); 231 232 } 233 D(f07a); 234 R(f07a); 235 E; 236 237 B(f08, Automatic storage format, 0)W(f08a); 238 { 239 c4_StringProp p1("p1"), p2("p2"); 240 c4_Row r1 = p1["One"] + p2["Two"]; 241 c4_Row r2; 242 c4_View v1; 243 v1.Add(r1); 244 v1.Add(r2); 245 v1.Add(r1); 246 247 c4_Storage s1("f08a", 1); 248 249 // changed 2000-03-15: Store is gone 250 //s1.Store("dict", v1); 251 c4_View v2 = s1.GetAs("dict[p1:S,p2:S]"); 252 v2.InsertAt(0, v1); 253 254 s1.Commit(); 255 256 } 257 D(f08a); 258 R(f08a); 259 E; 260 261 B(f09, Partial restructuring, 0)W(f09a); 262 { 263 c4_IntProp p1("p1"), p2("p2"), p3("p3"); 264 c4_Storage s1("f09a", 1); 265 266 c4_View v1 = s1.GetAs("a[p1:I]"); 267 v1.SetSize(10); 268 269 for (int i = 0; i < v1.GetSize(); ++i) 270 p1(v1[i]) = 1000+i; 271 272 c4_View v2 = s1.GetAs("a[p1:I,p2:I]"); 273 274 for (int j = 0; j < v2.GetSize(); j += 2) 275 p2(v2[j]) = 2000+j; 276 277 c4_View v3 = s1.GetAs("a[p1:I,p2:I,p3:I]"); 278 279 for (int k = 0; k < v3.GetSize(); k += 3) 280 p3(v3[k]) = 3000+k; 281 282 s1.Commit(); 283 284 } 285 D(f09a); 286 R(f09a); 287 E; 288 289 B(f10, Committed restructuring, 0)W(f10a); 290 { 291 c4_IntProp p1("p1"), p2("p2"), p3("p3"); 292 c4_Storage s1("f10a", 1); 293 294 c4_View v1 = s1.GetAs("a[p1:I]"); 295 v1.SetSize(10); 296 297 for (int i = 0; i < v1.GetSize(); ++i) 298 p1(v1[i]) = 1000+i; 299 300 s1.Commit(); 301 302 c4_View v2 = s1.GetAs("a[p1:I,p2:I]"); 303 304 for (int j = 0; j < v2.GetSize(); j += 2) 305 p2(v2[j]) = 2000+j; 306 307 s1.Commit(); 308 309 c4_View v3 = s1.GetAs("a[p1:I,p2:I,p3:I]"); 310 311 for (int k = 0; k < v3.GetSize(); k += 3) 312 p3(v3[k]) = 3000+k; 313 314 s1.Commit(); 315 316 } 317 D(f10a); 318 R(f10a); 319 E; 320 321 // 19990824: don't crash on GetAs with an inexistent view 322 B(f11, Delete missing view, 0)W(f11a); 323 { 324 c4_Storage s1("f11a", 1); 325 326 c4_View v1 = s1.GetAs("a"); 327 v1.SetSize(10); 328 329 s1.Commit(); 330 331 } 332 D(f11a); 333 R(f11a); 334 E; 335} 336