1// tbasic1.cpp -- Regression test program, basic tests part 1 2// $Id: tbasic1.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 TestBasics1() { 8 B(b00, Should fail, 0) { 9 A(false); 10 } 11 E; 12 13 B(b01, Should succeed, 0) { 14 A(sizeof(t4_byte) == 1); 15 A(sizeof(short) == 2); 16 A(sizeof(t4_i32) == 4); 17 A(sizeof(float) == 4); 18 A(sizeof(double) == 8); 19 } 20 E; 21 22 B(b02, Int property, 0) { 23 c4_Row r1; 24 c4_IntProp p1("p1"); 25 p1(r1) = 1234567890L; 26 long x1 = p1(r1); 27 A(x1 == 1234567890L); 28 } 29 E; 30 31#if !q4_TINY 32 B(b03, Float property, 0) { 33 c4_Row r1; 34 c4_FloatProp p1("p1"); 35 p1(r1) = 123.456; 36 double x1 = p1(r1); 37 A((float)x1 == (float)123.456); 38 } 39 E; 40#endif 41 42 B(b04, String property, 0) { 43 c4_Row r1; 44 c4_StringProp p1("p1"); 45 p1(r1) = "abc"; 46 const char *x1 = p1(r1); 47 A((c4_String)x1 == "abc"); 48 } 49 E; 50 51 B(b05, View property, 0) { 52 c4_View v1; 53 c4_Row r1; 54 c4_ViewProp p1("p1"); 55 p1(r1) = v1; 56 c4_View x1 = p1(r1); 57 // compare cursors to make sure this is the same sequence 58 A(x1[0] == v1[0]); 59 } 60 E; 61 62 B(b06, View construction, 0) { 63 c4_IntProp p1("p1"), p2("p2"), p3("p3"); 64 c4_View v1 = (p1, p3, p2); 65 A(v1.FindProperty(p1.GetId()) == 0); 66 A(v1.FindProperty(p2.GetId()) == 2); 67 A(v1.FindProperty(p3.GetId()) == 1); 68 } 69 E; 70 71 B(b07, Row manipulation, 0) { 72 c4_StringProp p1("p1"), p2("p2"); 73 c4_IntProp p3("p3"); 74 c4_Row r1; 75 p1(r1) = "look at this"; 76 const char *x1 = p1(r1); 77 A(x1 == (c4_String)"look at this"); 78 r1 = p1["what's in a"] + p2["name..."]; 79 c4_String t = (const char*)p2(r1); 80 p1(r1) = t + (const char*)(p1(r1)); 81 p2(r1) = p1(r1); 82 c4_String x2 = (const char*)p1(r1); // 2000-03-16, store as c4_String 83 A(x2 == "name...what's in a"); 84 // the above change avoids an evaluation order issue in assert below 85 A(x2 == p2(r1)); 86 p3(r1) = 12345; 87 p3(r1) = p3(r1) + 123; 88 int x3 = p3(r1); 89 A(x3 == 12345+123); 90 } 91 E; 92 93 B(b08, Row expressions, 0) { 94 c4_StringProp p1("p1"), p2("p2"); 95 c4_IntProp p3("p3"); 96 c4_Row r1; 97 c4_View v1 = (p1, p2, p3); 98 v1.SetSize(5); 99 r1 = v1[1]; 100 v1[2] = v1[1]; 101 v1[3] = r1; 102 v1[4] = v1[4]; 103 r1 = r1; 104 } 105 E; 106 107 B(b09, View manipulation, 0) { 108 c4_StringProp p1("p1"), p2("p2"); 109 c4_Row r1 = p1["One"] + p2["Two"]; 110 c4_Row r2; 111 c4_View v1; 112 v1.Add(r1); 113 v1.Add(r2); 114 v1.Add(r1); 115 A(v1.GetSize() == 3); 116 A(v1[0] == r1); 117 A(v1[1] == r2); 118 A(v1[2] == r1); 119 v1.RemoveAt(1, 1); 120 A(v1.GetSize() == 2); 121 A(v1[0] == r1); 122 A(v1[0] == v1[1]); 123 } 124 E; 125 126 B(b10, View sorting, 0) { 127 c4_IntProp p1("p1"); 128 c4_View v1; 129 v1.Add(p1[111]); 130 v1.Add(p1[222]); 131 v1.Add(p1[333]); 132 v1.Add(p1[345]); 133 v1.Add(p1[234]); 134 v1.Add(p1[123]); 135 c4_View v2 = v1.Sort(); 136 A(v2.GetSize() == 6); 137 A(p1(v2[0]) == 111); 138 A(p1(v2[1]) == 123); 139 A(p1(v2[2]) == 222); 140 A(p1(v2[3]) == 234); 141 A(p1(v2[4]) == 333); 142 A(p1(v2[5]) == 345); 143 } 144 E; 145 146 B(b11, View selection, 0) { 147 c4_IntProp p1("p1"); 148 c4_View v1; 149 v1.Add(p1[111]); 150 v1.Add(p1[222]); 151 v1.Add(p1[333]); 152 v1.Add(p1[345]); 153 v1.Add(p1[234]); 154 v1.Add(p1[123]); 155 c4_View v2 = v1.SelectRange(p1[200], p1[333]); 156 A(v2.GetSize() == 3); 157 A(p1(v2[0]) == 222); 158 A(p1(v2[1]) == 333); 159 A(p1(v2[2]) == 234); 160 } 161 E; 162 163 B(b12, Add after remove, 0) { 164 c4_StringProp p1("p1"); 165 c4_View v1; 166 v1.Add(p1["abc"]); 167 A(v1.GetSize() == 1); 168 v1.RemoveAt(0); 169 A(v1.GetSize() == 0); 170 v1.Add(p1["def"]); 171 A(v1.GetSize() == 1); 172 } 173 E; 174 175 B(b13, Clear view entry, 0) { 176 c4_IntProp p1("p1"); 177 c4_View v1; 178 179 v1.Add(p1[123]); 180 A(v1.GetSize() == 1); 181 A(p1(v1[0]) == 123); 182 183 v1[0] = c4_Row(); 184 A(v1.GetSize() == 1); 185 A(p1(v1[0]) == 0); 186 } 187 E; 188 189 B(b14, Empty view outlives temp storage, 0) { 190 c4_View v1; 191 c4_Storage s1; 192 v1 = s1.GetAs("a[p1:I,p2:S]"); 193 } 194 E; 195 196 B(b15, View outlives temp storage, 0) { 197 c4_IntProp p1("p1"); 198 c4_View v1; 199 200 { 201 c4_Storage s1; 202 v1 = s1.GetAs("a[p1:I,p2:S]"); 203 v1.Add(p1[123]); 204 } 205 206 // 19990916 - semantics changed, view now 1 row, but 0 props 207 A(v1.GetSize() == 1); 208 A(v1.NumProperties() == 0); 209 //A(p1 (v1[0]) == 123); 210 } 211 E; 212 213 B(b16, View outlives cleared temp storage, 0) { 214 c4_IntProp p1("p1"); 215 c4_View v1; 216 217 { 218 c4_Storage s1; 219 v1 = s1.GetAs("a[p1:I,p2:S]"); 220 v1.Add(p1[123]); 221 v1.RemoveAll(); 222 } 223 224 A(v1.GetSize() == 0); 225 v1.Add(p1[123]); 226 A(v1.GetSize() == 1); 227 A(p1(v1[0]) == 123); 228 } 229 E; 230 231#if !q4_TINY 232 B(b17, Double property, 0) { 233 c4_Row r1; 234 c4_DoubleProp p1("p1"); 235 p1(r1) = 1234.5678; 236 double x1 = p1(r1); 237 A(x1 == (double)1234.5678); 238 } 239 E; 240#endif 241 242 B(b18, SetAtGrow usage, 0) { 243 c4_IntProp p1("p1"); 244 c4_View v1; 245 246 v1.SetAtGrow(3, p1[333]); 247 v1.SetAtGrow(1, p1[111]); 248 v1.SetAtGrow(5, p1[555]); 249 250 A(v1.GetSize() == 6); 251 A(p1(v1[1]) == 111); 252 A(p1(v1[3]) == 333); 253 A(p1(v1[5]) == 555); 254 } 255 E; 256 257 B(b19, Bytes property, 0) { 258 c4_Row r1; 259 c4_BytesProp p1("p1"); 260 c4_Bytes x1("hi!", 3); 261 262 p1(r1) = x1; 263 c4_Bytes x2 = p1(r1); 264 A(x1 == x2); 265 } 266 E; 267} 268