Changeset 12781 for trunk/psLib
- Timestamp:
- Apr 10, 2007, 11:09:31 AM (19 years ago)
- Location:
- trunk/psLib/test
- Files:
-
- 42 edited
-
math/tap_psPolynomialEval1D.c (modified) (2 diffs)
-
math/tap_psStats00.c (modified) (2 diffs)
-
math/tap_psStats09.c (modified) (9 diffs)
-
mathtypes/tap_psImage.c (modified) (3 diffs)
-
mathtypes/tap_psImageInterpolate.c (modified) (1 diff)
-
mathtypes/tap_psScalar.c (modified) (2 diffs)
-
mathtypes/tap_psVector.c (modified) (29 diffs)
-
mathtypes/tap_psVectorSort_01.c (modified) (4 diffs)
-
mathtypes/tap_psVectorSort_02.c (modified) (4 diffs)
-
mathtypes/tap_psVectorSort_03.c (modified) (2 diffs)
-
mathtypes/tap_psVectorSort_04.c (modified) (2 diffs)
-
sys/tap_psConfigure.c (modified) (2 diffs)
-
sys/tap_psError.c (modified) (3 diffs)
-
sys/tap_psLine.c (modified) (2 diffs)
-
sys/tap_psMemory.c (modified) (5 diffs)
-
sys/tap_psString.c (modified) (3 diffs)
-
sys/tap_psStringSubstitute.c (modified) (2 diffs)
-
sys/tap_psTrace.c (modified) (4 diffs)
-
types/tap_psArguments_all.c (modified) (2 diffs)
-
types/tap_psArray_all.c (modified) (2 diffs)
-
types/tap_psBitSet_all.c (modified) (1 diff)
-
types/tap_psHash_845.c (modified) (1 diff)
-
types/tap_psListIterator.c (modified) (8 diffs)
-
types/tap_psList_all.c (modified) (4 diffs)
-
types/tap_psLookupTable_all.c (modified) (2 diffs)
-
types/tap_psMetadataConfigFormat.c (modified) (2 diffs)
-
types/tap_psMetadataConfigParse.c (modified) (9 diffs)
-
types/tap_psMetadataConfigParse_time.c (modified) (10 diffs)
-
types/tap_psMetadataConfigPrint.c (modified) (7 diffs)
-
types/tap_psMetadataConfigRead.c (modified) (2 diffs)
-
types/tap_psMetadataConfigWrite.c (modified) (2 diffs)
-
types/tap_psMetadataConfig_input.c (modified) (8 diffs)
-
types/tap_psMetadataItemCompare.c (modified) (1 diff)
-
types/tap_psMetadataItemParse.c (modified) (2 diffs)
-
types/tap_psMetadataIterator.c (modified) (14 diffs)
-
types/tap_psMetadataUpdate.c (modified) (11 diffs)
-
types/tap_psMetadata_copying.c (modified) (2 diffs)
-
types/tap_psMetadata_creating.c (modified) (2 diffs)
-
types/tap_psMetadata_manip.c (modified) (1 diff)
-
types/tap_psMetadata_polynomials.c (modified) (1 diff)
-
types/tap_psMetadata_printing.c (modified) (3 diffs)
-
types/tap_psPixels_all.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/math/tap_psPolynomialEval1D.c
r11422 r12781 4 4 * ORD and CHEB type polynomials. 5 5 * 6 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $7 * @date $Date: 2007-0 1-30 04:49:52$6 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2007-04-10 21:09:30 $ 8 8 * 9 9 * XXX: Probably should test single- and multi-dimensional polynomials in … … 75 75 skip_end(); 76 76 psFree(polyOrd); 77 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");77 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 78 78 } 79 79 -
trunk/psLib/test/math/tap_psStats00.c
r12607 r12781 9 9 * @author GLG, MHPCC 10 10 * 11 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2007-0 3-27 22:52:03$11 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2007-04-10 21:09:30 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, Univ. of Hawaii … … 242 242 } 243 243 bool result = psVectorStats(myStats, myVector, NULL, maskVector, 1); 244 ok(result == false, "psVectorStats suceeded(All values masked)");244 ok(result == true, "psVectorStats() returned TRUE (All values masked)"); 245 245 ok(isnan(myStats->sampleMean), "psVectorStats() returned NAN"); 246 246 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); -
trunk/psLib/test/math/tap_psStats09.c
r11686 r12781 115 115 for (psS32 i=0;i<numData;i++) { 116 116 errors->data.F32[i] = ERRORS; 117 errors->n++;118 117 } 119 118 } … … 125 124 for (psS32 i=0;i<numData;i++) { 126 125 errors->data.F64[i] = ERRORS; 127 errors->n++;128 126 } 129 127 } … … 135 133 for (psS32 i=0;i<numData;i++) { 136 134 errors->data.S8[i] = (psS8) ERRORS; 137 errors->n++;138 135 } 139 136 } … … 145 142 for (psS32 i=0;i<numData;i++) { 146 143 errors->data.U16[i] = (psU16) ERRORS; 147 errors->n++;148 144 } 149 145 } … … 155 151 for (psS32 i=0;i<numData;i++) { 156 152 errors->data.S32[i] = (psS32) ERRORS; 157 errors->n++;158 153 } 159 154 } … … 171 166 for (psS32 i=0;i<numData;i++) { 172 167 mask->data.U8[i] = (psU8) 0; 173 mask->n++;174 168 } 175 169 } … … 181 175 for (psS32 i=0;i<numData;i++) { 182 176 mask->data.S32[i] = (psS32) 0; 183 mask->n++;184 177 } 185 178 } … … 282 275 bool rc = psVectorStats(myStats, in, errors, outliers, 1); 283 276 if (rc == false) { 284 diag("TEST ERROR: the psVectorStats() function returned NULL .\n");277 diag("TEST ERROR: the psVectorStats() function returned NULL (a).\n"); 285 278 testStatus = false; 286 279 } else { … … 301 294 if (rc == false) { 302 295 if (expectedRC == true) { 303 diag("TEST ERROR: the psVectorStats() function returned NULL .\n");296 diag("TEST ERROR: the psVectorStats() function returned NULL (b).\n"); 304 297 testStatus = false; 305 298 } -
trunk/psLib/test/mathtypes/tap_psImage.c
r12513 r12781 6 6 * @author Robert DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-0 3-20 03:57:25$8 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-04-10 21:09:30 $ 10 10 * 11 11 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 16 16 #include <string.h> 17 17 #include <stdlib.h> 18 19 18 #include "pslib.h" 20 19 #include "psType.h" 21 22 20 #include "tap.h" 23 21 #include "pstap.h" 24 22 25 26 //static int Okay = 1;27 //static int setOkay( int okay )28 //{29 // Okay = okay;30 // return okay;31 //}32 23 33 24 #define OK(exp) \ … … 40 31 } 41 32 42 43 44 33 int main(int argc, char* argv[]) 45 34 { 46 plan_tests(383); 47 48 void testImageAlloc(void); 49 testImageAlloc(); 50 51 void testRegion(void); 52 testRegion(); 53 54 void testRegion2(void); 55 testRegion2(); 56 57 void testRegion3(void); 58 testRegion3(); 59 60 void testImageInit(void); 61 testImageInit(); 62 63 void testImageSet(void); 64 testImageSet(); 35 psLogSetFormat("HLNM"); 36 psLogSetLevel(PS_LOG_INFO); 37 plan_tests(402); 38 39 // testImageAlloc() 40 { 41 psMemId id = psMemGetId(); 42 psImage* image = NULL; 43 psU32 sizes = 6; 44 psU32 numCols[] = {0,1,1,100,100,150}; 45 psU32 numRows[] = {0,1,100,1,150,100}; 46 psU32 types = 12; 47 psElemType type[] = { PS_TYPE_S8, PS_TYPE_S16, PS_TYPE_S32, PS_TYPE_S64, 48 PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_U32, PS_TYPE_U64, 49 PS_TYPE_F32, PS_TYPE_F64 }; 50 for (psU32 t=0;t<types;t++) { 51 for (psU32 i=0;i<sizes;i++) { 52 // Following should be an error if numRows[i] == 0 || numCols[i]==0 53 image = psImageAlloc(numCols[i],numRows[i],type[t]); 54 if (image == NULL) { 55 if (numRows[i] == 0 || numCols[i] == 0) { 56 continue; 57 } 58 ok(0, "psImageAlloc returned NULL for type %x, size %dx%d.", 59 type[t], numCols[i], numRows[i]); 60 psFree(image); 61 } 62 63 ok(image->type.dimen==PS_DIMEN_IMAGE && image->type.type==type[t], 64 "psImageAlloc allocated dimen/type (%d/%d), expecting " 65 "PS_IMAGE_DIMEN/%d", image->type.dimen, 66 image->type.type, type[t]); 67 ok(image->numCols == numCols[i] && image->numRows == numRows[i], 68 "psImageAlloc allocated size %dx%d, expecting be %dx%d " 69 "(type = %d)", image->numCols, image->numRows, numCols[i], 70 numRows[i],type[t]); 71 ok(image->col0 == 0 && image->row0 == 0, 72 "psImageAlloc returned row0/col0 of %d/%d. Expected 0/0.", 73 image->row0, image->row0); 74 ok(image->parent == NULL, "psImageAlloc returned NULL parent"); 75 ok(image->children == NULL, 76 "psImageAlloc returned NULL children array"); 77 78 79 if (image->children != NULL) { 80 psFree(image); 81 } 82 83 switch (type[t]) { 84 case PS_TYPE_U16: { 85 psU32 rows = numRows[i]; 86 psU32 cols = numCols[i]; 87 88 for (psS32 r=0;r<rows;r++) { 89 for (psS32 c=0;c<cols;c++) { 90 image->data.U16[r][c] = 2*c+r; 91 } 92 } 93 bool errorFlag = false; 94 for (psS32 r=0;r<rows;r++) { 95 for (psS32 c=0;c<cols;c++) { 96 if (image->data.U16[r][c] != 2*c+r) { 97 errorFlag = true; 98 } 99 } 100 } 101 ok(!errorFlag, "psImageAlloc() set data correctly (U16)"); 102 } 103 break; 104 case PS_TYPE_F32: { 105 psU32 rows = numRows[i]; 106 psU32 cols = numCols[i]; 107 108 for (psS32 r=0;r<rows;r++) { 109 for (psS32 c=0;c<cols;c++) { 110 image->data.F32[r][c] = 2.0f*c+r; 111 } 112 } 113 bool errorFlag = false; 114 for (psS32 r=0;r<rows;r++) { 115 for (psS32 c=0;c<cols;c++) { 116 if (fabsf(image->data.F32[r][c] - (2.0f*c+r)) > FLT_EPSILON) { 117 errorFlag = true; 118 } 119 } 120 } 121 ok(!errorFlag, "psImageAlloc() set data correctly (F32)"); 122 } 123 break; 124 case PS_TYPE_F64: { 125 psU32 rows = numRows[i]; 126 psU32 cols = numCols[i]; 127 128 for (psS32 r=0;r<rows;r++) { 129 for (psS32 c=0;c<cols;c++) { 130 image->data.F64[r][c] = 2.0f*c+r; 131 } 132 } 133 bool errorFlag = false; 134 for (psS32 r=0;r<rows;r++) { 135 for (psS32 c=0;c<cols;c++) { 136 if (fabs(image->data.F64[r][c] - (2.0f*c+r)) > DBL_EPSILON) { 137 errorFlag = true; 138 } 139 } 140 } 141 ok(!errorFlag, "psImageAlloc() set data correctly (F64)"); 142 } 143 break; 144 default: { 145 // ignore type and just use as byte bucket. 146 psU32 rows = numRows[i]; 147 psU32 cols = numCols[i]*PSELEMTYPE_SIZEOF(type[t]); 148 149 for (psS32 r=0;r<rows;r++) { 150 for (psS32 c=0;c<cols;c++) { 151 image->data.U8[r][c] = (uint8_t)(r + c); 152 } 153 } 154 bool errorFlag = false; 155 for (psS32 r=0;r<rows;r++) { 156 for (psS32 c=0;c<cols;c++) { 157 if (image->data.U8[r][c] != (uint8_t)(r + c)) { 158 errorFlag = true; 159 } 160 } 161 } 162 ok(!errorFlag, "psImageAlloc() set data correctly (default)"); 163 } 164 } 165 psFree(image); 166 } 167 } 168 169 // #548: Verify no memory leaks or corruption are detected after a valid psImage structure with multiple 170 // children is freed. 171 image = psImageAlloc(100,100,PS_TYPE_F32); 172 psImageSubset(image,(psRegion) {50,0,70,20}); 173 psImageSubset(image,(psRegion) {70,20,90,40}); 174 psFree(image); 175 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 176 } 177 178 179 // testRegion() 180 { 181 psMemId id = psMemGetId(); 182 psRegion region = psRegionSet(1,2,3,4); 183 char *tmpStr = psRegionToString(region); 184 ok(!(region.x0 != 1 || region.x1 != 2 || region.y0 != 3 || region.y1 != 4), 185 "The region attributes are set to (%s)", tmpStr); 186 psFree(tmpStr); 187 region = psRegionFromString("[1:2,3:4]"); 188 tmpStr = psRegionToString(region); 189 ok(!(region.x0 != 0 || region.x1 != 2 || region.y0 != 2 || region.y1 != 4), 190 "The region attributes are set to (%s)", tmpStr); 191 psFree(tmpStr); 192 region = psRegionFromString("[1:2,3:]"); 193 ok(isnan(region.x0), 194 "psRegionFromString returned a NULL pointer given a malformed string."); 195 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 196 } 197 198 199 //psRegionForImage 200 { 201 psMemId id = psMemGetId(); 202 psImage *in; 203 psRegion inReg; 204 psRegion out; 205 in = psImageAlloc(1, 1, PS_TYPE_S32); 206 inReg = psRegionSet(1, 2, 1, 2); 207 out = psRegionForImage(in,inReg); 208 psRegion inReg2; 209 psRegion out2; 210 inReg2 = psRegionSet(-1, 0, -2, -1); 211 out2 = psRegionForImage(in, inReg2); 212 213 ok(!( out.x0 != 1 || out.x1 != 1 || out.y0 != 1 || out.y1 != 1 ), 214 "Region For Image returned correct values"); 215 216 ok(!( out2.x0 != 0 || out2.x1 != 1 || out2.y0 != 0 || out2.y1 != 0 ), 217 "Region For Image returned correct values"); 218 psFree(in); 219 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 220 } 221 222 223 //psRegionForSquare// 224 { 225 psMemId id = psMemGetId(); 226 float X = 1; 227 float Y = 1; 228 float RAD = 1; 229 psRegion out; 230 out = psRegionForSquare(X, Y, RAD); 231 ok(!(out.x0 != 0 || out.x1 != 3 || out.y0 != 0 || out.y1!= 3), 232 "Region For Square returned correct values"); 233 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 234 } 235 236 237 //Initialize an image with a given value.// 238 { 239 psMemId id = psMemGetId(); 240 psImage *in1 = NULL; 241 psImage *in2 = NULL; 242 psImage *in3 = NULL; 243 psImage *in4 = NULL; 244 int nRow = 1; 245 int nCol = 1; 246 in1 = psImageAlloc(nRow, nCol, PS_TYPE_U8); 247 ok(psImageInit(in1, 5 ), 248 "ImageAlloc. U8 Case - 1x1"); 249 nRow = 5; 250 in2 = psImageAlloc(nRow, nCol, PS_TYPE_F32); 251 ok(psImageInit(in2, 3), 252 "ImageAlloc. F32 Case - 5x1"); 253 254 nCol = 5; 255 in3 = psImageAlloc(nRow, nCol, PS_TYPE_F64); 256 ok(psImageInit(in3, 3.14), 257 "ImageAlloc. F64 Case - 5x5"); 258 259 in4 = psImageAlloc(nRow, nCol, PS_TYPE_S32); 260 ok(psImageInit(in4, 3), 261 "ImageAlloc. S32 Case - 5x5"); 262 psFree(in1); 263 psFree(in2); 264 psFree(in3); 265 psFree(in4); 266 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 267 } 268 269 270 // testImageSet() 271 { 272 psMemId id = psMemGetId(); 273 psImage *image = NULL; 274 image = psImageAlloc(5, 4, PS_TYPE_S32); 275 276 //Set the position of the subimage relative to the parent. 277 image->col0 = 10; 278 image->row0 = 10; 279 for (int i = 0; i < 4; i++) { 280 for (int j = 0; j < 5; j++) { 281 image->data.S32[i][j] = i+j; 282 } 283 } 284 285 //Attempt to set a position in a NULL psImage* 286 psImage *none = NULL; 287 ok(! psImageSet(none, 1, 1, 1), 288 "psImageSet returned non-null"); 289 290 //Attempt to set a position in a psImage* with negative numCols, numRows 291 none = psImageAlloc(2, 2, PS_TYPE_S32); 292 *(int*)&none->numCols = -1; 293 ok(! psImageSet(none, 1, 1, 1), 294 "psImageSet return false when passed an image with negative numCols"); 295 296 *(int*)&none->numCols = 2; 297 *(int*)&none->numRows = -1; 298 ok(!psImageSet(none, 1, 1, 1), 299 "psImageSet failed to return false when passed an image with negative numRows"); 300 301 //Attempt to set a position in a psImage* with negative col0, row0 302 *(int*)&none->numRows = 2; 303 none->row0 = -1; 304 ok(!psImageSet(none, 1, 1, 1), 305 "psImageSet failed to return false when passed an image with negative col0"); 306 307 none->row0 = 0; 308 none->col0 = -1; 309 ok(!psImageSet(none, 1, 1, 1), 310 "psImageSet failed to return false when passed an image with negative col0"); 311 psFree(none); 312 313 //Try to set a position inside of the subimage. 314 ok(psImageSet(image, 14, 12, 666), 315 "psImageSet failed to return true when passed valid parameters"); 316 317 ok(image->data.S32[2][4] == 666, 318 "psImageSet set the data value. value=%d", image->data.S32[2][4]); 319 320 //Try to set a position inside of the subimage from the tail. 321 ok(psImageSet(image, -1, -1, 666), 322 "psImageSet return true when passed valid parameters"); 323 324 ok(image->data.S32[3][4] == 666, 325 "psImageSet set (from the tail) the data values correctly"); 326 327 //Try to set a position outside of the subimage but inside of the parent image. 328 ok(!psImageSet(image, 0, 0, 666), 329 "psImageSet return false when passed an invalid location"); 330 331 ok(!psImageSet(image, 9, 10, 666), 332 "psImageSet return false when passed an invalid location"); 333 334 //Try to set a position outside of the subimage. 335 ok(!psImageSet(image, 15, 14, 666), 336 "psImageSet return false when passed an invalid location"); 337 338 //Try to set a position outside of the subimage, indexing from the tail. 339 ok(!psImageSet(image, -6, -1, 666), 340 "psImageSet return false when passed an invalid location"); 341 psFree(image); 342 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 343 } 344 345 346 // testImageGet() 347 { 348 psMemId id = psMemGetId(); 349 psImage *image = NULL; 350 image = psImageAlloc(5, 3, PS_TYPE_S32); 351 352 //Set the position of the subimage relative to the parent. 353 image->col0 = 10; 354 image->row0 = 10; 355 for (int i = 0; i < 3; i++) { 356 for (int j = 0; j < 5; j++) { 357 image->data.S32[i][j] = i+j; 358 } 359 } 360 361 //Attempt to get a position in a NULL psImage* 362 psImage *none = NULL; 363 ok(isnan( psImageGet(none, 1, 1) ), 364 "psImageGet return false when passed a NULL image"); 365 366 //Attempt to get a position in a psImage* with negative numCols, numRows 367 none = psImageAlloc(2, 2, PS_TYPE_S32); 368 *(int*)&none->numCols = -1; 369 ok(isnan( psImageGet(none, 1, 1) ), 370 "psImageGet return false when passed an image with negative numCols"); 371 372 *(int*)&none->numCols = 2; 373 *(int*)&none->numRows = -1; 374 ok(isnan( psImageGet(none, 1, 1) ), 375 "psImageGet return false when passed an image with negative numRows"); 376 377 //Attempt to get a position in a psImage* with negative col0, row0 378 *(int*)&none->numRows = 2; 379 none->row0 = -1; 380 ok(isnan( psImageGet(none, 1, 1) ), 381 "psImageGet return false when passed an image with negative col0"); 382 383 none->row0 = 0; 384 none->col0 = -1; 385 ok(isnan( psImageGet(none, 1, 1) ), 386 "psImageGet return false when passed an image with negative col0"); 387 388 psFree(none); 389 390 391 //Try to get a position inside of the subimage. 392 ok(psImageGet(image, 14, 12) == 6, 393 "psImageGet return the correct value"); 394 395 //Try to get a position inside of the subimage from the tail. 396 ok(psImageGet(image, -1, -1) == 6, 397 "psImageGet return the correct value"); 398 399 //Try to get a position outside of the subimage but inside of the parent image. 400 ok(isnan( psImageGet(image, 1, 1) ), 401 "psImageGet return NAN when passed an invalid location"); 402 403 ok(isnan( psImageGet(image, 9, 10) ), 404 "psImageGet return NAN when passed an invalid location"); 405 406 //Try to set a position outside of the subimage. 407 ok(isnan( psImageGet(image, 15, 14) ), 408 "psImageGet return NAN when passed an invalid location"); 409 410 //Try to set a position outside of the subimage, indexing from the tail. 411 ok(isnan( psImageGet(image, -6, -1) ), 412 "psImageGet failed to return NAN when passed an invalid location"); 413 psFree(image); 414 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 415 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 416 } 65 417 } 66 67 68 void testImageAlloc()69 {70 // diag("testImageAlloc");71 72 psImage* image = NULL;73 psU32 sizes = 6;74 psU32 numCols[] = {75 0,1,1,100,100,15076 };77 psU32 numRows[] = {78 0,1,100,1,150,10079 };80 psU32 types = 12;81 psElemType type[] = { PS_TYPE_S8, PS_TYPE_S16, PS_TYPE_S32, PS_TYPE_S64,82 PS_TYPE_U8, PS_TYPE_U16, PS_TYPE_U32, PS_TYPE_U64,83 PS_TYPE_F32, PS_TYPE_F64 };84 85 for (psU32 t=0;t<types;t++) {86 87 for (psU32 i=0;i<sizes;i++) {88 89 // Following should be an error if numRows[i] == 0 || numCols[i]==090 91 image = psImageAlloc(numCols[i],numRows[i],type[t]);92 93 if (image == NULL) {94 if (numRows[i] == 0 || numCols[i] == 0) {95 continue;96 }97 ok(0, "psImageAlloc returned NULL for type %x, size %dx%d.",98 type[t], numCols[i], numRows[i]);99 psFree(image);100 return;101 }102 103 ok (image->type.dimen==PS_DIMEN_IMAGE && image->type.type==type[t],104 "psImageAlloc allocated dimen/type (%d/%d), expecting "105 "PS_IMAGE_DIMEN/%d", image->type.dimen,106 image->type.type, type[t]);107 skip_start (!(image->type.dimen==PS_DIMEN_IMAGE && image->type.type==type[t]),108 4, "psImageAlloc allocated wrong dimen/type");109 110 ok (image->numCols == numCols[i] && image->numRows == numRows[i],111 "psImageAlloc allocated size %dx%d, expecting be %dx%d "112 "(type = %d)", image->numCols, image->numRows, numCols[i],113 numRows[i],type[t]);114 skip_start (!(image->numCols == numCols[i] && image->numRows == numRows[i]),115 3, "psImageAlloc allocated wrong size");116 117 ok (image->col0 == 0 && image->row0 == 0,118 "psImageAlloc returned row0/col0 of %d/%d. Expected 0/0.",119 image->row0, image->row0);120 skip_start (!(image->col0 == 0 && image->row0 == 0),121 2, "psImageAlloc returned wrong row0/col0");122 123 ok (image->parent == NULL, "psImageAlloc returned NULL parent");124 skip_start (image->parent != NULL,125 1, "psImageAlloc returned NULL parent");126 127 ok (image->children == NULL,128 "psImageAlloc returned NULL children array");129 130 skip_end();131 skip_end();132 skip_end();133 skip_end();134 135 if (image->children != NULL) {136 psFree(image);137 return;138 }139 140 switch (type[t]) {141 case PS_TYPE_U16: {142 psU32 rows = numRows[i];143 psU32 cols = numCols[i];144 145 for (psS32 r=0;r<rows;r++) {146 for (psS32 c=0;c<cols;c++) {147 image->data.U16[r][c] = 2*c+r;148 }149 }150 bool errorFlag = false;151 for (psS32 r=0;r<rows;r++) {152 for (psS32 c=0;c<cols;c++) {153 if (image->data.U16[r][c] != 2*c+r) {154 // diag("ERROR: Could not set all pixels in uint16 image at (%d,%d)",c,r);155 errorFlag = true;156 }157 }158 }159 ok(!errorFlag, "psImageAlloc() set data correctly (U16)");160 }161 break;162 case PS_TYPE_F32: {163 psU32 rows = numRows[i];164 psU32 cols = numCols[i];165 166 for (psS32 r=0;r<rows;r++) {167 for (psS32 c=0;c<cols;c++) {168 image->data.F32[r][c] = 2.0f*c+r;169 }170 }171 bool errorFlag = false;172 for (psS32 r=0;r<rows;r++) {173 for (psS32 c=0;c<cols;c++) {174 if (fabsf(image->data.F32[r][c] - (2.0f*c+r)) > FLT_EPSILON) {175 // diag("Could not set all pixels in float image at (%d,%d)",c,r);176 errorFlag = true;177 }178 }179 }180 ok(!errorFlag, "psImageAlloc() set data correctly (F32)");181 }182 break;183 case PS_TYPE_F64: {184 psU32 rows = numRows[i];185 psU32 cols = numCols[i];186 187 for (psS32 r=0;r<rows;r++) {188 for (psS32 c=0;c<cols;c++) {189 image->data.F64[r][c] = 2.0f*c+r;190 }191 }192 bool errorFlag = false;193 for (psS32 r=0;r<rows;r++) {194 for (psS32 c=0;c<cols;c++) {195 if (fabs(image->data.F64[r][c] - (2.0f*c+r)) > DBL_EPSILON) {196 // diag("Set all pixels in double image at (%d,%d)",c,r);197 errorFlag = true;198 }199 }200 }201 ok(!errorFlag, "psImageAlloc() set data correctly (F64)");202 }203 break;204 default: {205 // ignore type and just use as byte bucket.206 psU32 rows = numRows[i];207 psU32 cols = numCols[i]*PSELEMTYPE_SIZEOF(type[t]);208 209 for (psS32 r=0;r<rows;r++) {210 for (psS32 c=0;c<cols;c++) {211 image->data.U8[r][c] = (uint8_t)(r + c);212 }213 }214 bool errorFlag = false;215 for (psS32 r=0;r<rows;r++) {216 for (psS32 c=0;c<cols;c++) {217 if (image->data.U8[r][c] != (uint8_t)(r + c)) {218 // diag("Set all pixels in image (type=%d) at (%d,%d)", type[t],c,r);219 errorFlag = true;220 }221 }222 }223 ok(!errorFlag, "psImageAlloc() set data correctly (default)");224 }225 }226 psFree(image);227 }228 }229 230 // #548: Verify no memory leaks or corruption are detected after a valid psImage structure with multiple231 // children is freed.232 image = psImageAlloc(100,100,PS_TYPE_F32);233 psImageSubset(image,(psRegion) {234 50,0,70,20235 }236 );237 psImageSubset(image,(psRegion) {238 70,20,90,40239 }240 );241 242 psFree(image);243 }244 245 246 247 void testRegion()248 {249 // Testpoint #790250 251 // diag("testRegion");252 253 psRegion region = psRegionSet(1,2,3,4);254 ok (!(region.x0 != 1 || region.x1 != 2 || region.y0 != 3 || region.y1 != 4),255 "The region attributes are set to (%s)", psRegionToString(region));256 257 // Testpoint #791258 259 region = psRegionFromString("[1:2,3:4]");260 ok (!(region.x0 != 0 || region.x1 != 2 || region.y0 != 2 || region.y1 != 4),261 "The region attributes are set to (%s)", psRegionToString(region));262 263 region = psRegionFromString("[1:2,3:]");264 ok (isnan(region.x0),265 "psRegionFromString returned a NULL pointer given a malformed string.");266 }267 268 269 //psRegionForImage//270 void testRegion2()271 {272 // diag("testRegion2");273 274 psImage *in;275 psRegion inReg;276 psRegion out;277 in = psImageAlloc(1, 1, PS_TYPE_S32);278 inReg = psRegionSet(1, 2, 1, 2);279 out = psRegionForImage(in,inReg);280 psRegion inReg2;281 psRegion out2;282 inReg2 = psRegionSet(-1, 0, -2, -1);283 out2 = psRegionForImage(in, inReg2);284 285 ok(!( out.x0 != 1 || out.x1 != 1 || out.y0 != 1 || out.y1 != 1 ),286 "Region For Image returned correct values.\n");287 288 ok(!( out2.x0 != 0 || out2.x1 != 1 || out2.y0 != 0 || out2.y1 != 0 ),289 "Region For Image returned correct values.\n");290 291 psFree(in);292 }293 294 295 //psRegionForSquare//296 void testRegion3()297 {298 // diag("testRegion3");299 300 float X = 1;301 float Y = 1;302 float RAD = 1;303 psRegion out;304 out = psRegionForSquare(X, Y, RAD);305 ok (!(out.x0 != 0 || out.x1 != 3 || out.y0 != 0 || out.y1!= 3),306 "Region For Square returned correct values.\n");307 }308 309 310 //Initialize an image with a given value.//311 void testImageInit()312 {313 // diag("testImageInit");314 315 psImage *in1 = NULL;316 psImage *in2 = NULL;317 psImage *in3 = NULL;318 psImage *in4 = NULL;319 int nRow = 1;320 int nCol = 1;321 in1 = psImageAlloc(nRow, nCol, PS_TYPE_U8);322 ok ( psImageInit(in1, 5 ),323 "ImageAlloc. U8 Case - 1x1\n");324 nRow = 5;325 in2 = psImageAlloc(nRow, nCol, PS_TYPE_F32);326 ok ( psImageInit(in2, 3),327 "ImageAlloc. F32 Case - 5x1\n");328 329 nCol = 5;330 in3 = psImageAlloc(nRow, nCol, PS_TYPE_F64);331 ok ( psImageInit(in3, 3.14),332 "ImageAlloc. F64 Case - 5x5\n");333 334 in4 = psImageAlloc(nRow, nCol, PS_TYPE_S32);335 ok ( psImageInit(in4, 3),336 "ImageAlloc. S32 Case - 5x5\n");337 338 psFree(in1);339 psFree(in2);340 psFree(in3);341 psFree(in4);342 }343 344 345 void testImageSet()346 {347 // diag("testImageSet");348 349 psImage *image = NULL;350 image = psImageAlloc(5, 4, PS_TYPE_S32);351 352 //Set the position of the subimage relative to the parent.353 image->col0 = 10;354 image->row0 = 10;355 for (int i = 0; i < 4; i++) {356 for (int j = 0; j < 5; j++) {357 image->data.S32[i][j] = i+j;358 }359 }360 361 //Attempt to set a position in a NULL psImage*362 psImage *none = NULL;363 ok (! psImageSet(none, 1, 1, 1),364 "psImageSet returned non-null.\n");365 skip_start ( psImageSet(none, 1, 1, 1),366 12, "psImageSet failed");367 368 //Attempt to set a position in a psImage* with negative numCols, numRows369 none = psImageAlloc(2, 2, PS_TYPE_S32);370 *(int*)&none->numCols = -1;371 ok (! psImageSet(none, 1, 1, 1),372 "psImageSet return false when passed an image with negative numCols");373 skip_start ( psImageSet(none, 1, 1, 1),374 11,"psImageSet return true when passed an image with negative numCols");375 376 *(int*)&none->numCols = 2;377 *(int*)&none->numRows = -1;378 ok ( !psImageSet(none, 1, 1, 1),379 "psImageSet failed to return false when passed an image with negative numRows.\n");380 skip_start ( psImageSet(none, 1, 1, 1),381 10,"psImageSet return true when passed an image with negative numRows.");382 383 //Attempt to set a position in a psImage* with negative col0, row0384 *(int*)&none->numRows = 2;385 none->row0 = -1;386 ok ( !psImageSet(none, 1, 1, 1),387 "psImageSet failed to return false when passed an image with negative col0.\n");388 skip_start ( psImageSet(none, 1, 1, 1),389 9,"psImageSet return true when passed an image with negative col0.\n");390 391 none->row0 = 0;392 none->col0 = -1;393 ok ( !psImageSet(none, 1, 1, 1),394 "psImageSet failed to return false when passed an image with negative col0.\n");395 skip_start ( psImageSet(none, 1, 1, 1),396 8,"psImageSet return true when passed an image with negative col0.\n");397 398 psFree(none);399 400 //Try to set a position inside of the subimage.401 ok ( psImageSet(image, 14, 12, 666),402 "psImageSet failed to return true when passed valid parameters.\n");403 skip_start ( !psImageSet(image, 14, 12, 666),404 7,"psImageSet failed to return true when passed valid parameters.\n");405 406 ok (image->data.S32[2][4] == 666,407 "psImageSet set the data value. value=%d\n", image->data.S32[2][4]);408 skip_start (image->data.S32[2][4] != 666,409 6,"psImageSet set the data value. value=%d\n", image->data.S32[2][4]);410 411 //Try to set a position inside of the subimage from the tail.412 ok ( psImageSet(image, -1, -1, 666),413 "psImageSet return true when passed valid parameters.\n");414 skip_start ( !psImageSet(image, -1, -1, 666),415 5,"psImageSet failed to return true when passed valid parameters.\n");416 417 ok (image->data.S32[3][4] == 666,418 "psImageSet set (from the tail) the data values correctly.\n");419 skip_start (image->data.S32[3][4] != 666,420 4,"psImageSet set (from the tail) the data values incorrectly.\n");421 422 423 //Try to set a position outside of the subimage but inside of the parent image.424 ok ( !psImageSet(image, 0, 0, 666),425 "psImageSet return false when passed an invalid location.\n");426 skip_start ( psImageSet(image, 0, 0, 666),427 3,"psImageSet failed to return false when passed an invalid location");428 429 ok ( !psImageSet(image, 9, 10, 666),430 "psImageSet return false when passed an invalid location.\n");431 skip_start ( psImageSet(image, 9, 10, 666),432 2,"psImageSet return false when passed an invalid location.\n");433 434 //Try to set a position outside of the subimage.435 ok ( !psImageSet(image, 15, 14, 666),436 "psImageSet return false when passed an invalid location.\n");437 skip_start ( psImageSet(image, 15, 14, 666),438 1,"psImageSet failed to return false when passed an invalid location");439 440 //Try to set a position outside of the subimage, indexing from the tail.441 ok ( !psImageSet(image, -6, -1, 666),442 "psImageSet return false when passed an invalid location.\n");443 444 skip_end();445 skip_end();446 skip_end();447 skip_end();448 skip_end();449 skip_end();450 skip_end();451 skip_end();452 skip_end();453 skip_end();454 skip_end();455 skip_end();456 457 psFree(image);458 }459 460 461 void testImageGet()462 {463 // diag("testImageGet");464 465 psImage *image = NULL;466 image = psImageAlloc(5, 3, PS_TYPE_S32);467 468 //Set the position of the subimage relative to the parent.469 image->col0 = 10;470 image->row0 = 10;471 for (int i = 0; i < 3; i++) {472 for (int j = 0; j < 5; j++) {473 image->data.S32[i][j] = i+j;474 }475 }476 477 //Attempt to get a position in a NULL psImage*478 psImage *none = NULL;479 ok ( isnan( psImageGet(none, 1, 1) ),480 "psImageGet return false when passed a NULL image.\n");481 skip_start ( !isnan( psImageGet(none, 1, 1) ),482 10,"psImageGet failed to return false when passed a NULL image.\n");483 484 //Attempt to get a position in a psImage* with negative numCols, numRows485 none = psImageAlloc(2, 2, PS_TYPE_S32);486 *(int*)&none->numCols = -1;487 ok ( isnan( psImageGet(none, 1, 1) ),488 "psImageGet return false when passed an image with negative numCols");489 skip_start ( !isnan( psImageGet(none, 1, 1) ),490 9,"psImageGet return true when passed an image with negative numCols");491 492 *(int*)&none->numCols = 2;493 *(int*)&none->numRows = -1;494 ok ( isnan( psImageGet(none, 1, 1) ),495 "psImageGet return false when passed an image with negative numRows");496 skip_start ( !isnan( psImageGet(none, 1, 1) ),497 8,"psImageGet failed to return false when passed an image with negative numRows.\n");498 499 //Attempt to get a position in a psImage* with negative col0, row0500 *(int*)&none->numRows = 2;501 none->row0 = -1;502 ok ( isnan( psImageGet(none, 1, 1) ),503 "psImageGet return false when passed an image with negative col0.\n");504 skip_start ( !isnan( psImageGet(none, 1, 1) ),505 7,"psImageGet return false when passed an image with negative col0.\n");506 507 none->row0 = 0;508 none->col0 = -1;509 ok ( isnan( psImageGet(none, 1, 1) ),510 "psImageGet return false when passed an image with negative col0.\n");511 skip_start ( !isnan( psImageGet(none, 1, 1) ),512 6,"psImageGet failed to return false when passed an image with negative col0.\n");513 514 psFree(none);515 516 517 //Try to get a position inside of the subimage.518 ok ( psImageGet(image, 14, 12) == 6,519 "psImageGet return the correct value.\n");520 skip_start ( psImageGet(image, 14, 12) != 6,521 5,"psImageGet failed to return the correct value.\n");522 523 //Try to get a position inside of the subimage from the tail.524 ok ( psImageGet(image, -1, -1) == 6,525 "psImageGet return the correct value.\n");526 skip_start ( psImageGet(image, -1, -1) == 6,527 4, "psImageGet failed to return the correct value.\n");528 529 //Try to get a position outside of the subimage but inside of the parent image.530 ok ( isnan( psImageGet(image, 1, 1) ),531 "psImageGet return NAN when passed an invalid location.\n");532 skip_start ( !isnan( psImageGet(image, 1, 1) ),533 3, "psImageGet didn't return NAN when passed an invalid location.\n");534 535 ok ( isnan( psImageGet(image, 9, 10) ),536 "psImageGet return NAN when passed an invalid location.\n");537 skip_start ( ! isnan( psImageGet(image, 9, 10) ),538 2,"psImageGet failed to return NAN when passed an invalid location.\n");539 540 //Try to set a position outside of the subimage.541 ok ( isnan( psImageGet(image, 15, 14) ),542 "psImageGet return NAN when passed an invalid location.\n");543 skip_start ( !isnan( psImageGet(image, 15, 14) ),544 1, "psImageGet didn't return NAN when passed an invalid location.\n");545 546 //Try to set a position outside of the subimage, indexing from the tail.547 ok ( isnan( psImageGet(image, -6, -1) ),548 "psImageGet failed to return NAN when passed an invalid location.\n");549 550 skip_end();551 skip_end();552 skip_end();553 skip_end();554 skip_end();555 skip_end();556 skip_end();557 skip_end();558 skip_end();559 skip_end();560 561 562 psFree(image);563 } -
trunk/psLib/test/mathtypes/tap_psImageInterpolate.c
r12741 r12781 8 8 int main (void) 9 9 { 10 p lan_tests(88);11 12 // diag("psImageInterpolate() tests");10 psLogSetFormat("HLNM"); 11 psLogSetLevel(PS_LOG_INFO); 12 plan_tests(47); 13 13 14 14 // very simple tests: no mask, bilinear mode, xramp image only 15 15 { 16 16 psMemId id = psMemGetId(); 17 18 // diag ("interpolate a delta function"); 19 20 // generate simple image (x ramp) 21 psImage *image = psImageAlloc(32, 32, PS_TYPE_F64); 22 ok(image != NULL, "psImage successfully allocated"); 23 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 24 25 psImageInit(image, 0.0); 26 image->data.F64[10][10] = 1; 27 28 // center of pixels is 0.5, 0.5 29 double value; 30 31 psImageInterpolateOptions *interp = psImageInterpolateOptionsAlloc(PS_INTERPOLATE_BILINEAR, 32 image, NULL, NULL, 0, 0.0, 0.0, 33 0, 0, 0.0); 34 ok(interp, "Interpolation options set"); 35 36 ok(psImageInterpolate(&value, NULL, NULL, 10.5, 10.5, interp), "Interpolation"); 37 is_double (value, 1.0, "pixel center value - %f", value); 38 39 // diag ("why do I need to have tolerances of 4epsilon or so??"); 40 41 ok(psImageInterpolate(&value, NULL, NULL, 10.9, 10.5, interp), "Interpolation"); 42 is_double_tol (value, 0.6, 4.0*FLT_EPSILON, "pixel value - %.20f", value); 43 44 ok(psImageInterpolate(&value, NULL, NULL, 10.5, 10.9, interp), "Interpolation"); 45 is_double_tol (value, 0.6, 4.0*FLT_EPSILON, "pixel value - %.20f", value); 46 47 ok(psImageInterpolate(&value, NULL, NULL, 10.1, 10.5, interp), "Interpolation"); 48 is_double_tol (value, 0.6, 4.0*FLT_EPSILON, "pixel value - %.20f", value); 49 50 psFree(interp); 51 52 skip_end(); 53 54 psFree(image); 55 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 56 } 17 // generate simple image (x ramp) 18 psImage *image = psImageAlloc(32, 32, PS_TYPE_F32); 19 ok(image != NULL, "psImage successfully allocated"); 20 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 21 22 image->data.F32[10][10] = 1; 23 24 // center of pixels is 0.5, 0.5 25 float value; 26 27 value = psImagePixelInterpolate (image, 10.5, 10.5, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 28 is_float (value, 1.0, "pixel center value - %f", value); 29 30 value = psImagePixelInterpolate (image, 10.9, 10.5, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 31 is_float_tol (value, 0.6, 4.0*FLT_EPSILON, "pixel value - %.20f", value); 32 33 value = psImagePixelInterpolate (image, 10.5, 10.9, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 34 is_float_tol (value, 0.6, 4.0*FLT_EPSILON, "pixel value - %.20f", value); 35 36 value = psImagePixelInterpolate (image, 10.1, 10.5, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 37 is_float_tol (value, 0.6, 4.0*FLT_EPSILON, "pixel value - %.20f", value); 38 39 skip_end(); 40 41 psFree(image); 42 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 43 } 44 57 45 58 46 // very simple tests: no mask, bilinear mode, xramp image only 59 47 { 60 48 psMemId id = psMemGetId(); 61 62 // diag ("interpolate an x-ramp"); 63 64 // generate simple image (x ramp) 65 psImage *image = psImageAlloc(32, 32, PS_TYPE_F64); 66 ok(image != NULL, "psImage successfully allocated"); 67 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 68 69 for (int j = 0; j < image->numRows; j++) { 70 for (int i = 0; i < image->numCols; i++) { 71 image->data.F64[j][i] = i + 0.5; 72 } 73 } 74 75 // center of pixels is 0.5, 0.5 76 double value; 77 78 psImageInterpolateOptions *interp = psImageInterpolateOptionsAlloc(PS_INTERPOLATE_BILINEAR, 79 image, NULL, NULL, 0, 0.0, 0.0, 80 0, 0, 0.0); 81 ok(interp, "Interpolation options set"); 82 83 ok(psImageInterpolate(&value, NULL, NULL, 2.5, 2.5, interp), "Interpolation"); 84 is_double_tol (value, 2.5, 5.0e-8, "pixel center value - %f", value); 85 86 ok(psImageInterpolate(&value, NULL, NULL, 2.2, 2.5, interp), "Interpolation"); 87 is_double_tol (value, 2.2, 5.0e-8, "coord: 2.2, 2.5, value: %f", value); 88 89 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.5, interp), "Interpolation"); 90 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 91 92 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.2, interp), "Interpolation"); 93 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 94 95 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.8, interp), "Interpolation"); 96 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 97 98 ok(psImageInterpolate(&value, NULL, NULL, 0.8, 2.8, interp), "Interpolation"); 99 is_double_tol (value, 0.8, 5.0e-8, "coord: 0.8, value: %f", value); 49 // generate simple image (x ramp) 50 psImage *image = psImageAlloc(32, 32, PS_TYPE_F32); 51 ok(image != NULL, "psImage successfully allocated"); 52 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 53 54 for (int j = 0; j < image->numRows; j++) 55 { 56 for (int i = 0; i < image->numCols; i++) { 57 image->data.F32[j][i] = i + 0.5; 58 } 59 } 60 61 // center of pixels is 0.5, 0.5 62 float value; 63 64 value = psImagePixelInterpolate (image, 2.5, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 65 is_float (value, 2.5, "pixel center value - %f", value); 66 67 value = psImagePixelInterpolate (image, 2.2, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 68 is_float (value, 2.2, "coord: 2.2, 2.5, value: %f", value); 69 70 value = psImagePixelInterpolate (image, 2.8, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 71 is_float (value, 2.8, "coord: 2.8, value: %f", value); 72 73 value = psImagePixelInterpolate (image, 2.8, 2.2, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 74 is_float (value, 2.8, "coord: 2.8, value: %f", value); 75 76 value = psImagePixelInterpolate (image, 2.8, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 77 is_float (value, 2.8, "coord: 2.8, value: %f", value); 78 79 value = psImagePixelInterpolate (image, 0.8, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 80 is_float (value, 0.8, "coord: 0.8, value: %f", value); 100 81 101 82 // no extrapolation 102 ok(psImageInterpolate(&value, NULL, NULL, 0.3, 2.8, interp), "Interpolation"); 103 is_double (value, 0.0, "coord: 0.3, value: %f", value); 104 105 ok(psImageInterpolate(&value, NULL, NULL, -0.2, 2.8, interp), "Interpolation"); 106 is_double (value, 0.0, "coord: -0.2, value: %f", value); 107 108 psFree(interp); 109 110 skip_end(); 111 112 psFree(image); 113 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 114 } 83 value = psImagePixelInterpolate (image, 0.3, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 84 is_float (value, 0.5, "coord: 0.3, value: %f", value); 85 86 value = psImagePixelInterpolate (image, -0.2, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 87 is_float (value, 0.5, "coord: -0.2, value: %f", value); 88 89 skip_end(); 90 91 psFree(image); 92 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 93 } 94 115 95 116 96 // very simple tests: no mask, bilinear mode, yramp image only 117 97 { 118 98 psMemId id = psMemGetId(); 119 120 // diag ("interpolate a y-ramp: ");121 122 99 // generate simple image (y ramp) 123 psImage *image = psImageAlloc(32, 32, PS_TYPE_F64); 124 ok(image != NULL, "psImage successfully allocated"); 125 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 126 127 for (int j = 0; j < image->numRows; j++) 128 { 129 for (int i = 0; i < image->numCols; i++) { 130 image->data.F64[j][i] = j + 0.5; 131 } 132 } 133 134 // center of pixels is 0.5, 0.5 135 double value; 136 137 psImageInterpolateOptions *interp = psImageInterpolateOptionsAlloc(PS_INTERPOLATE_BILINEAR, 138 image, NULL, NULL, 0, 0.0, 0.0, 139 0, 0, 0.0); 140 ok(interp, "Interpolation options set"); 141 142 ok(psImageInterpolate(&value, NULL, NULL, 2.5, 2.5, interp), "Interpolation"); 143 is_double_tol (value, 2.5, 5.0e-8, "pixel center value - %f", value); 144 145 ok(psImageInterpolate(&value, NULL, NULL, 2.2, 2.2, interp), "Interpolation"); 146 is_double_tol (value, 2.2, 5.0e-8, "coord: 2.2, 2.2, value: %f", value); 147 148 ok(psImageInterpolate(&value, NULL, NULL, 2.5, 2.8, interp), "Interpolation"); 149 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 150 151 ok(psImageInterpolate(&value, NULL, NULL, 2.2, 2.8, interp), "Interpolation"); 152 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 153 154 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.8, interp), "Interpolation"); 155 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 156 157 psFree(interp); 158 159 skip_end(); 160 161 psFree(image); 162 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 163 } 100 psImage *image = psImageAlloc(32, 32, PS_TYPE_F32); 101 ok(image != NULL, "psImage successfully allocated"); 102 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 103 104 for (int j = 0; j < image->numRows; j++) 105 { 106 for (int i = 0; i < image->numCols; i++) { 107 image->data.F32[j][i] = j + 0.5; 108 } 109 } 110 111 // center of pixels is 0.5, 0.5 112 float value; 113 114 value = psImagePixelInterpolate (image, 2.5, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 115 is_float (value, 2.5, "pixel center value - %f", value); 116 117 value = psImagePixelInterpolate (image, 2.2, 2.2, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 118 is_float (value, 2.2, "coord: 2.2, 2.5, value: %f", value); 119 120 value = psImagePixelInterpolate (image, 2.5, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 121 is_float (value, 2.8, "coord: 2.8, value: %f", value); 122 123 value = psImagePixelInterpolate (image, 2.2, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 124 is_float (value, 2.8, "coord: 2.8, value: %f", value); 125 126 value = psImagePixelInterpolate (image, 2.8, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BILINEAR); 127 is_float (value, 2.8, "coord: 2.8, value: %f", value); 128 129 skip_end(); 130 131 psFree(image); 132 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 133 } 134 164 135 165 136 // very simple tests: no mask, bicube mode, xramp image only 166 137 { 167 138 psMemId id = psMemGetId(); 168 169 // diag ("interpolate an x-ramp (bicube)"); 170 171 // generate simple image (x ramp) 172 psImage *image = psImageAlloc(32, 32, PS_TYPE_F64); 173 ok(image != NULL, "psImage successfully allocated"); 174 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 175 176 for (int j = 0; j < image->numRows; j++) 177 { 178 for (int i = 0; i < image->numCols; i++) { 179 image->data.F64[j][i] = i + 0.5; 180 } 181 } 182 183 // center of pixels is 0.5, 0.5 184 double value; 185 186 psImageInterpolateOptions *interp = psImageInterpolateOptionsAlloc(PS_INTERPOLATE_BICUBE, 187 image, NULL, NULL, 0, 0.0, 0.0, 188 0, 0, 0.0); 189 ok(interp, "Interpolation options set"); 190 191 ok(psImageInterpolate(&value, NULL, NULL, 2.5, 2.5, interp), "Interpolation"); 192 is_double_tol (value, 2.5, 5.0e-8, "coord; 2.5, 2.5, value - %f", value); 193 194 ok(psImageInterpolate(&value, NULL, NULL, 2.2, 2.5, interp), "Interpolation"); 195 is_double_tol (value, 2.2, 5.0e-8, "coord: 2.2, 2.5, value: %f", value); 196 197 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.5, interp), "Interpolation"); 198 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, 2.5, value: %f", value); 199 200 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.2, interp), "Interpolation"); 201 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, 2.2, value: %f", value); 202 203 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.8, interp), "Interpolation"); 204 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, 2.8, value: %f", value); 205 206 // diag ("coords outside of nominal range (1 < x < Nx - 2) return 'uncover'"); 139 // generate simple image (x ramp) 140 psImage *image = psImageAlloc(32, 32, PS_TYPE_F32); 141 ok(image != NULL, "psImage successfully allocated"); 142 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 143 144 for (int j = 0; j < image->numRows; j++) 145 { 146 for (int i = 0; i < image->numCols; i++) { 147 image->data.F32[j][i] = i + 0.5; 148 } 149 } 150 151 // center of pixels is 0.5, 0.5 152 float value; 153 154 value = psImagePixelInterpolate (image, 2.5, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 155 is_float (value, 2.5, "coord; 2.5, 2.5, value - %f", value); 156 157 value = psImagePixelInterpolate (image, 2.2, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 158 is_float (value, 2.2, "coord: 2.2, 2.5, value: %f", value); 159 160 value = psImagePixelInterpolate (image, 2.8, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 161 is_float (value, 2.8, "coord: 2.8, 2.5, value: %f", value); 162 163 value = psImagePixelInterpolate (image, 2.8, 2.2, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 164 is_float (value, 2.8, "coord: 2.8, 2.2, value: %f", value); 165 166 value = psImagePixelInterpolate (image, 2.8, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 167 is_float (value, 2.8, "coord: 2.8, 2.8, value: %f", value); 207 168 208 169 // no extrapolation: these return the 'uncover' value 209 ok(psImageInterpolate(&value, NULL, NULL, 0.8, 2.8, interp), "Interpolation"); 210 is_double (value, 0.0, "coord: 0.8, 2.8, value: %f", value); 211 212 ok(psImageInterpolate(&value, NULL, NULL, 0.3, 2.8, interp), "Interpolation"); 213 is_double (value, 0.0, "coord: 0.3, 2.8, value: %f", value); 214 215 ok(psImageInterpolate(&value, NULL, NULL, -0.2, 2.8, interp), "Interpolation"); 216 is_double (value, 0.0, "coord: -0.2, 2.8, value: %f", value); 217 218 psFree(interp); 219 220 skip_end(); 221 222 psFree(image); 223 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 224 } 170 value = psImagePixelInterpolate (image, 0.8, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 171 is_float (value, 0.0, "coord: 0.8, 2.8, value: %f", value); 172 173 value = psImagePixelInterpolate (image, 0.3, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 174 is_float (value, 0.0, "coord: 0.3, 2.8, value: %f", value); 175 176 value = psImagePixelInterpolate (image, -0.2, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 177 is_float (value, 0.0, "coord: -0.2, 2.8, value: %f", value); 178 179 skip_end(); 180 181 psFree(image); 182 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 183 } 184 225 185 226 186 // very simple tests: no mask, bilinear mode, yramp image only 227 187 { 228 188 psMemId id = psMemGetId(); 229 230 // diag ("interpolate a y-ramp (bicube)");231 232 189 // generate simple image (y ramp) 233 psImage *image = psImageAlloc(32, 32, PS_TYPE_F64); 234 ok(image != NULL, "psImage successfully allocated"); 235 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 236 237 for (int j = 0; j < image->numRows; j++) 238 { 239 for (int i = 0; i < image->numCols; i++) { 240 image->data.F64[j][i] = j + 0.5; 241 } 242 } 243 244 // center of pixels is 0.5, 0.5 245 double value; 246 247 psImageInterpolateOptions *interp = psImageInterpolateOptionsAlloc(PS_INTERPOLATE_BICUBE, 248 image, NULL, NULL, 0, 0.0, 0.0, 249 0, 0, 0.0); 250 ok(interp, "Interpolation options set"); 251 252 ok(psImageInterpolate(&value, NULL, NULL, 2.5, 2.5, interp), "Interpolation"); 253 is_double_tol (value, 2.5, 5.0e-8, "pixel center value - %f", value); 254 255 ok(psImageInterpolate(&value, NULL, NULL, 2.2, 2.2, interp), "Interpolation"); 256 is_double_tol (value, 2.2, 5.0e-8, "coord: 2.2, 2.5, value: %f", value); 257 258 ok(psImageInterpolate(&value, NULL, NULL, 2.5, 2.8, interp), "Interpolation"); 259 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 260 261 ok(psImageInterpolate(&value, NULL, NULL, 2.2, 2.8, interp), "Interpolation"); 262 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 263 264 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.8, interp), "Interpolation"); 265 is_double_tol (value, 2.8, 5.0e-8, "coord: 2.8, value: %f", value); 266 267 psFree(interp); 268 269 skip_end(); 270 271 psFree(image); 272 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 273 } 190 psImage *image = psImageAlloc(32, 32, PS_TYPE_F32); 191 ok(image != NULL, "psImage successfully allocated"); 192 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 193 194 for (int j = 0; j < image->numRows; j++) 195 { 196 for (int i = 0; i < image->numCols; i++) { 197 image->data.F32[j][i] = j + 0.5; 198 } 199 } 200 201 // center of pixels is 0.5, 0.5 202 float value; 203 204 value = psImagePixelInterpolate (image, 2.5, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 205 is_float (value, 2.5, "pixel center value - %f", value); 206 207 value = psImagePixelInterpolate (image, 2.2, 2.2, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 208 is_float (value, 2.2, "coord: 2.2, 2.5, value: %f", value); 209 210 value = psImagePixelInterpolate (image, 2.5, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 211 is_float (value, 2.8, "coord: 2.8, value: %f", value); 212 213 value = psImagePixelInterpolate (image, 2.2, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 214 is_float (value, 2.8, "coord: 2.8, value: %f", value); 215 216 value = psImagePixelInterpolate (image, 2.8, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 217 is_float (value, 2.8, "coord: 2.8, value: %f", value); 218 219 skip_end(); 220 221 psFree(image); 222 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 223 } 224 274 225 275 226 // very simple tests: no mask, bilinear mode, x,y 2nd order shape 276 227 { 277 228 psMemId id = psMemGetId(); 278 279 // diag ("interpolate a quadratic shape (bicube)"); 280 281 // generate simple image (x ramp) 282 psImage *image = psImageAlloc(32, 32, PS_TYPE_F64); 283 ok(image != NULL, "psImage successfully allocated"); 284 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 285 286 for (int j = 0; j < image->numRows; j++) 287 { 288 for (int i = 0; i < image->numCols; i++) { 289 image->data.F64[j][i] = 0.25*PS_SQR(i + 0.5) + j + 0.5; 290 } 291 } 292 293 // center of pixels is 0.5, 0.5 294 double value; 295 296 psImageInterpolateOptions *interp = psImageInterpolateOptionsAlloc(PS_INTERPOLATE_BICUBE, 297 image, NULL, NULL, 0, 0.0, 0.0, 298 0, 0, 0.0); 299 ok(interp, "Interpolation options set"); 300 301 ok(psImageInterpolate(&value, NULL, NULL, 2.5, 2.5, interp), "Interpolation"); 302 is_double_tol (value, 4.0625, 2.0e-7, "pixel center value - %f", value); 303 304 ok(psImageInterpolate(&value, NULL, NULL, 2.2, 2.2, interp), "Interpolation"); 305 is_double_tol (value, 3.41, 2.0e-7, "coord: 2.2, 2.5, value: %f", value); 306 307 ok(psImageInterpolate(&value, NULL, NULL, 2.5, 2.8, interp), "Interpolation"); 308 is_double_tol (value, 4.3625, 2.0e-7, "coord: 2.5, 2.8, value: %f", value); 309 310 ok(psImageInterpolate(&value, NULL, NULL, 2.2, 2.8, interp), "Interpolation"); 311 is_double_tol (value, 4.01, 2.0e-7, "coord: 2.2, 2.8, value: %f", value); 312 313 ok(psImageInterpolate(&value, NULL, NULL, 2.8, 2.8, interp), "Interpolation"); 314 is_double_tol (value, 4.76, 2.0e-7, "coord: 2.8, 2.8, value: %f", value); 315 316 psFree(interp); 317 318 skip_end(); 319 320 psFree(image); 321 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 322 } 323 324 return exit_status(); 229 // generate simple image (x ramp) 230 psImage *image = psImageAlloc(32, 32, PS_TYPE_F32); 231 ok(image != NULL, "psImage successfully allocated"); 232 skip_start(image == NULL, 5, "Skipping tests because psImageAlloc() failed"); 233 234 for (int j = 0; j < image->numRows; j++) 235 { 236 for (int i = 0; i < image->numCols; i++) { 237 image->data.F32[j][i] = 0.25*PS_SQR(i + 0.5) + j + 0.5; 238 } 239 } 240 241 // center of pixels is 0.5, 0.5 242 float value; 243 244 value = psImagePixelInterpolate (image, 2.5, 2.5, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 245 is_float (value, 4.0625, "pixel center value - %f", value); 246 247 value = psImagePixelInterpolate (image, 2.2, 2.2, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 248 is_float (value, 3.41, "coord: 2.2, 2.5, value: %f", value); 249 250 value = psImagePixelInterpolate (image, 2.5, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 251 is_float (value, 4.3625002, "coord: 2.5, 2.8, value: %f", value); 252 253 value = psImagePixelInterpolate (image, 2.2, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 254 is_float (value, 4.010000229, "coord: 2.2, 2.8, value: %f", value); 255 256 value = psImagePixelInterpolate (image, 2.8, 2.8, NULL, 0, 0.0, PS_INTERPOLATE_BICUBE); 257 is_float (value, 4.75999975, "coord: 2.8, 2.8, value: %f", value); 258 259 skip_end(); 260 261 psFree(image); 262 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 263 } 325 264 } -
trunk/psLib/test/mathtypes/tap_psScalar.c
r12513 r12781 5 5 * @author Eric Van Alst, MHPCC 6 6 * 7 * @version $Revision: 1. 4$7 * @version $Revision: 1.5 $ 8 8 * $Name: not supported by cvs2svn $ 9 * @date $Date: 2007-0 3-20 03:57:25$9 * @date $Date: 2007-04-10 21:09:30 $ 10 10 * 11 11 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii 12 12 */ 13 14 13 #include <pslib.h> 15 16 14 #include "tap.h" 17 15 #include "pstap.h" … … 49 47 int main(void) 50 48 { 51 plan_tests(43); 49 psLogSetFormat("HLNM"); 50 psLogSetLevel(PS_LOG_INFO); 51 plan_tests(47); 52 52 53 void testScalarAlloc();54 testScalarAlloc();55 void testBadScalarAlloc();56 testBadScalarAlloc();57 53 58 void testScalarCopy(); 59 testScalarCopy(); 60 void testBadScalarCopy(); 61 testBadScalarCopy(); 62 } 54 // Verify return is null for invalid scalar type 55 { 56 psMemId id = psMemGetId(); 57 psScalar* scalar = psScalarAlloc(true,PS_TYPE_BOOL); 58 ok(scalar == NULL, "psScalarAlloc returns null for invalid type"); 59 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 60 } 63 61 64 void testScalarAlloc(void)65 {66 // diag("psTestScalarAlloc");67 62 68 63 //Verify the proper allocation/deallocation of scalar objects of valid types 69 tstScalarAllocByType(S8,10); 70 tstScalarAllocByType(U8,12); 71 tstScalarAllocByType(S16,14); 72 tstScalarAllocByType(U16,16); 73 tstScalarAllocByType(S32,18); 74 tstScalarAllocByType(U32,20); 75 tstScalarAllocByType(S64,22); 76 tstScalarAllocByType(U64,24); 77 tstScalarAllocByType(F32,26); 78 tstScalarAllocByType(F64,28); 79 } 64 { 65 psMemId id = psMemGetId(); 66 tstScalarAllocByType(S8,10); 67 tstScalarAllocByType(U8,12); 68 tstScalarAllocByType(S16,14); 69 tstScalarAllocByType(U16,16); 70 tstScalarAllocByType(S32,18); 71 tstScalarAllocByType(U32,20); 72 tstScalarAllocByType(S64,22); 73 tstScalarAllocByType(U64,24); 74 tstScalarAllocByType(F32,26); 75 tstScalarAllocByType(F64,28); 76 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 77 } 80 78 81 79 82 void testBadScalarAlloc(void) 83 { 84 // diag("psTestBadScalarAlloc"); 85 86 // Verify return is null for invalid scalar type 87 psScalar* scalar = psScalarAlloc(true,PS_TYPE_BOOL); 88 ok(scalar == NULL, "psScalarAlloc returns null for invalid type"); 89 } 80 // Verify the return is null for invalid scalar type in the original 81 { 82 psMemId id = psMemGetId(); 83 psScalar* scalarOrig = psScalarAlloc(0,PS_TYPE_S8); 84 scalarOrig->type.type = PS_TYPE_BOOL; 85 psScalar* scalarCopy = psScalarCopy(scalarOrig); 86 ok(scalarCopy == NULL, "psScalarCopy returns NULL for invalid type"); 87 scalarCopy = psScalarCopy(NULL); 88 ok(scalarCopy == NULL, "psScalarCopy returns NULL for NULL argument"); 89 psFree(scalarOrig); 90 psFree(scalarCopy); 91 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 92 } 90 93 91 94 92 void testScalarCopy(void)93 {94 // diag("psTestScalarCopy");95 96 95 // Verify the proper copying of scalar objects for all valid types 97 tstScalarCopyByType(S8,100); 98 tstScalarCopyByType(U8,110); 99 tstScalarCopyByType(S16,120); 100 tstScalarCopyByType(U16,130); 101 tstScalarCopyByType(S32,140); 102 tstScalarCopyByType(U32,150); 103 tstScalarCopyByType(S64,160); 104 tstScalarCopyByType(U64,170); 105 tstScalarCopyByType(F32,180); 106 tstScalarCopyByType(F64,190); 96 { 97 psMemId id = psMemGetId(); 98 tstScalarCopyByType(S8,100); 99 tstScalarCopyByType(U8,110); 100 tstScalarCopyByType(S16,120); 101 tstScalarCopyByType(U16,130); 102 tstScalarCopyByType(S32,140); 103 tstScalarCopyByType(U32,150); 104 tstScalarCopyByType(S64,160); 105 tstScalarCopyByType(U64,170); 106 tstScalarCopyByType(F32,180); 107 tstScalarCopyByType(F64,190); 108 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 109 } 107 110 } 108 109 110 void testBadScalarCopy(void)111 {112 // diag("psTestBadScalarCopy");113 114 // Verify the return is null for invalid scalar type in the original115 psScalar* scalarOrig = psScalarAlloc(0,PS_TYPE_S8);116 scalarOrig->type.type = PS_TYPE_BOOL;117 psScalar* scalarCopy = psScalarCopy(scalarOrig);118 ok(scalarCopy == NULL, "psScalarCopy returns NULL for invalid type");119 120 scalarCopy = psScalarCopy(NULL);121 ok(scalarCopy == NULL, "psScalarCopy returns NULL for NULL argument");122 } -
trunk/psLib/test/mathtypes/tap_psVector.c
r12513 r12781 8 8 int main (void) 9 9 { 10 plan_tests(209); 11 12 // diag("psVectorAlloc() tests"); 10 plan_tests(285); 11 13 12 14 13 { 15 14 psMemId id = psMemGetId(); 16 15 psVector *psVec = psVectorAlloc(5, PS_TYPE_S32); 17 18 16 ok(psVec != NULL, "psVector successfully allocated"); 19 17 skip_start(psVec == NULL, 4, "Skipping 4 tests because psVectorAlloc() failed"); … … 23 21 ok(psVec->type.dimen == PS_DIMEN_VECTOR, "Vector dimen = %d", psVec->type.dimen); 24 22 skip_end(); 25 26 23 psFree(psVec); 27 24 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 28 25 } 29 26 30 { 27 28 { 29 psMemId id = psMemGetId(); 31 30 psVector* vecZero = psVectorAlloc(0, PS_TYPE_S32); 32 33 31 ok(vecZero != NULL, "zero-length vector allocated"); 34 32 skip_start(vecZero == NULL, 2, "Skipping 2 tests because psVectorAlloc() failed"); … … 36 34 ok(vecZero->n == 0, "Vector population = %ld", vecZero->n); 37 35 skip_end(); 38 39 36 psFree(vecZero); 40 } 41 42 { 37 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 38 } 39 40 41 { 42 psMemId id = psMemGetId(); 43 43 psVector* vecBogus = psVectorAlloc(10, 0); 44 45 44 ok(vecBogus == NULL, "psVectorAlloc() doesn't not accept bogus type"); 46 45 psErr *err = psErrorLast(); 47 48 46 skip_start(err == NULL, 2, "Skipping 2 tests because psVectorAlloc() didn't fail as expect"); 49 47 ok(strstr(err->name, "vectorAlloc"), "alloc failure - got error name %s", err->name); 50 48 ok(err->code == PS_ERR_BAD_PARAMETER_TYPE, "alloc failure - got error code %d", err->code); 51 49 skip_end(); 52 53 50 psFree(vecBogus); 54 }55 56 57 // diag("psVectorRealloc() tests"); 58 59 { 60 // create new psVector51 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 52 } 53 54 55 // psVectorRealloc() tests 56 { 57 psMemId id = psMemGetId(); 61 58 psVector *psVec = psVectorAlloc(5, PS_TYPE_S32); 62 59 ok(psVec->n == 5, "Vector population = %ld", psVec->n); 63 // for(psS32 i = 0; i < 5; i++) {64 // printf ("Elem %d = %d\n", i, psVec->data.S32[i]);65 // }66 60 67 61 // generate first part of vector … … 93 87 } 94 88 skip_end(); 95 96 89 psFree(psVec); 97 } 98 99 { 100 // Test D - Reallocate S32 vector smaller 90 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 91 } 92 93 94 // Test D - Reallocate S32 vector smaller 95 { 96 psMemId id = psMemGetId(); 101 97 psVector *psVec = psVectorAlloc(5, PS_TYPE_S32); 102 psVec->n = 5;103 104 98 // generate test data values 105 99 for(psS32 i = 0; i < 5; i++) { … … 107 101 psVec->n++; 108 102 } 109 110 103 psVec = psVectorRealloc(psVec, 3); 111 112 104 ok(psVec != NULL, "test vector reallocated to smaller size"); 113 105 skip_start(psVec == NULL, 5, "Skipping 6 tests because psVectorRealloc() failed"); … … 120 112 } 121 113 skip_end(); 122 } 123 124 { 125 // reallocate to 0 length 114 psFree(psVec); 115 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 116 } 117 118 119 // reallocate to 0 length 120 { 121 psMemId id = psMemGetId(); 126 122 psVector *psVec = psVectorAlloc(5, PS_TYPE_S32); 127 123 psVec = psVectorRealloc(psVec,0); … … 136 132 // XXX not really a test... 137 133 psFree(psVec); 138 } 139 140 { 141 psVector *vecBogus = psVectorAlloc(5, PS_TYPE_S32); 142 vecBogus = psVectorRealloc(NULL, 6); 143 134 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 135 } 136 137 138 { 139 psMemId id = psMemGetId(); 140 psVector *vecBogus = psVectorRealloc(NULL, 6); 144 141 ok(vecBogus == NULL, "psVectorRealloc() doesn't not accept bogus type"); 145 142 psErr *err = psErrorLast(); 146 147 143 skip_start(err == NULL, 2, "Skipping 2 tests because psVectorRealloc() didn't fail as expect"); 148 144 ok(strstr(err->name, "psVectorRealloc"), "alloc failure - got error name %s", err->name); 149 145 ok(err->code == PS_ERR_BAD_PARAMETER_NULL, "alloc failure - got error code %d", err->code); 150 146 skip_end(); 151 152 147 psFree(vecBogus); 153 } 154 155 // diag("psVectorExtend() tests"); 156 { 157 // create new psVector 148 psFree(err); 149 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 150 } 151 152 153 // psVectorExtend() tests 154 { 155 psMemId id = psMemGetId(); 158 156 psVector *psVec = psVectorAlloc(5, PS_TYPE_S32); 159 157 psVec = psVectorExtend(psVec, 0, 2); … … 164 162 ok(psVec->n == 7, "Vector population = %ld", psVec->n); 165 163 skip_end(); 166 167 164 psFree(psVec); 168 } 169 170 { 165 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 166 } 167 168 169 { 170 psMemId id = psMemGetId(); 171 171 psVector *psVec = psVectorAlloc(5, PS_TYPE_S32); 172 172 psVec = psVectorExtend(psVec, 0, 2); 173 173 psVec = psVectorExtend(psVec, 0, 2); 174 175 174 ok(psVec != NULL, "test vector extended"); 176 175 skip_start(psVec == NULL, 2, "Skipping 2 tests because psVectorExtend() failed"); … … 179 178 ok(psVec->n == 9,"Vector population = %ld", psVec->n); 180 179 skip_end(); 181 182 180 psFree(psVec); 183 } 184 185 { 181 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 182 } 183 184 185 { 186 psMemId id = psMemGetId(); 186 187 psVector *psVec = psVectorAlloc(5, PS_TYPE_S32); 187 188 psVec = psVectorExtend(psVec, 0, 2); 188 189 psVec = psVectorExtend(psVec, 0, 2); 189 190 psVec = psVectorExtend(psVec, 0, -2); 190 191 191 ok(psVec != NULL, "test vector extended"); 192 192 skip_start(psVec == NULL, 2, "Skipping 2 tests because psVectorExtend() failed"); … … 195 195 ok(psVec->n == 7, "Vector population = %ld", psVec->n); 196 196 skip_end(); 197 198 197 psFree(psVec); 199 } 200 201 { 198 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 199 } 200 201 202 { 203 psMemId id = psMemGetId(); 202 204 psVector *psVec = psVectorAlloc(5, PS_TYPE_S32); 203 205 psVec = psVectorExtend(psVec, 0, 2); … … 205 207 psVec = psVectorExtend(psVec, 0, -2); 206 208 psVec = psVectorExtend(psVec, 0, -20); 207 208 209 ok(psVec != NULL, "test vector extended"); 209 210 skip_start(psVec == NULL, 2, "Skipping 2 tests because psVectorExtend() failed"); … … 212 213 ok(psVec->n == 0, "Vector population = %ld", psVec->n); 213 214 skip_end(); 214 215 215 psFree(psVec); 216 } 217 218 219 // diag("psVectorInit() tests"); 220 221 { 216 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 217 } 218 219 220 // psVectorInit() tests 221 { 222 psMemId id = psMemGetId(); 222 223 psVector *vec = psVectorAlloc(1, PS_TYPE_U8); 223 224 ok(psVectorInit(vec, 1 ), "U8 Case"); 224 225 psFree(vec); 225 } 226 227 { 226 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 227 } 228 229 230 { 231 psMemId id = psMemGetId(); 228 232 psVector *vec = psVectorAlloc(1, PS_TYPE_U16); 229 233 ok(!psVectorInit(vec, PS_MAX_U64), "VectorInit failed. U16 Case"); 230 234 psFree(vec); 231 } 232 233 { 235 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 236 } 237 238 239 { 240 psMemId id = psMemGetId(); 234 241 psVector *vec = psVectorAlloc(1, PS_TYPE_U32); 235 242 ok(psVectorInit(vec, 10), "U32 Case"); 236 243 psFree(vec); 237 } 238 239 { 244 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 245 } 246 247 248 { 249 psMemId id = psMemGetId(); 240 250 psVector *vec = psVectorAlloc(1, PS_TYPE_U64); 241 251 ok(psVectorInit(vec, PS_MIN_U64), "U64 Case"); 242 252 psFree(vec); 243 } 244 245 { 253 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 254 } 255 256 257 { 258 psMemId id = psMemGetId(); 246 259 psVector *vec = psVectorAlloc(1, PS_TYPE_S8); 247 260 ok(!psVectorInit(vec, PS_MAX_S16), "VectorInit failed. S8 Case"); 248 261 psFree(vec); 249 } 250 251 { 262 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 263 } 264 265 266 { 267 psMemId id = psMemGetId(); 252 268 psVector *vec = psVectorAlloc(1, PS_TYPE_S16); 253 269 ok(psVectorInit(vec, -100), "S16 Case"); 254 270 psFree(vec); 255 } 256 257 { 271 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 272 } 273 274 275 { 276 psMemId id = psMemGetId(); 258 277 psVector *vec = psVectorAlloc(1, PS_TYPE_S32); 259 278 ok(psVectorInit(vec, 1), "S32 Case"); 260 279 psFree(vec); 261 } 262 263 { 264 // XXX is this test ok? 280 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 281 } 282 283 284 // XXX is this test ok? 285 { 286 psMemId id = psMemGetId(); 265 287 psVector *vec = psVectorAlloc(1, PS_TYPE_S64); 266 288 ok(psVectorInit(vec, PS_MAX_S64), "S64 Case"); 267 289 psFree(vec); 268 } 269 270 { 290 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 291 } 292 293 294 { 295 psMemId id = psMemGetId(); 271 296 psVector *vec = psVectorAlloc(1, PS_TYPE_F32); 272 297 ok(psVectorInit(vec, 1.1), "F32 Case"); 273 298 psFree(vec); 274 } 275 276 { 299 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 300 } 301 302 303 { 304 psMemId id = psMemGetId(); 277 305 psVector *vec = psVectorAlloc(1, PS_TYPE_F64); 278 306 ok(psVectorInit(vec, 1.4 ), "F64 Case"); 279 307 psFree(vec); 280 } 281 282 283 // diag("psVectorCreate() tests"); 284 285 { 308 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 309 } 310 311 312 // psVectorCreate() tests 313 { 314 psMemId id = psMemGetId(); 286 315 psVector *test = psVectorCreate(NULL, 0.0, 10.0, 1.0, PS_TYPE_S8); 287 316 for (int i = 0; i < 10; i++) { … … 290 319 } 291 320 psFree(test); 292 } 293 294 { 321 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 322 } 323 324 325 { 326 psMemId id = psMemGetId(); 295 327 psVector *test = psVectorCreate(NULL, 0.0, 10.0, 1.0, PS_TYPE_U8); 296 328 for (int i = 0; i < 10; i++) { … … 299 331 } 300 332 psFree(test); 301 } 302 303 304 { 333 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 334 } 335 336 337 { 338 psMemId id = psMemGetId(); 305 339 psVector *test = psVectorCreate(NULL, 0.0, 10.0, 1.0, PS_TYPE_U32); 306 340 for (int i = 0; i < 10; i++) { … … 309 343 } 310 344 psFree(test); 311 } 312 313 314 { 345 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 346 } 347 348 349 { 350 psMemId id = psMemGetId(); 315 351 psVector *test = psVectorCreate(NULL, 0.0, 10.0, 1.0, PS_TYPE_S32); 316 352 for (int i = 0; i < 10; i++) { … … 319 355 } 320 356 psFree(test); 321 } 322 323 324 { 357 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 358 } 359 360 361 { 362 psMemId id = psMemGetId(); 325 363 psVector *input = psVectorAlloc(5, PS_TYPE_F32); 326 364 psVector *test = psVectorCreate(input, 0.0, 5.0, 0.5, PS_TYPE_F32); … … 330 368 "Vector data matches. i = %d, data=%f", i, test->data.F32[i]); 331 369 } 332 333 370 psFree(input); 334 } 371 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 372 } 373 335 374 336 375 // Test PS_TYPE_F64 337 376 // PS_TYPE_S64 338 377 // PS_TYPE_U64 339 340 {378 { 379 psMemId id = psMemGetId(); 341 380 psVector *test = psVectorCreate(NULL, 0.0, 10.0, 1.0, PS_TYPE_S64); 342 381 for (int i = 0; i < 10; i++) … … 347 386 } 348 387 psFree(test); 349 } 350 351 { 388 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 389 } 390 391 392 { 393 psMemId id = psMemGetId(); 352 394 psVector *test = psVectorCreate(NULL, 0.0, 10.0, 1.0, PS_TYPE_U64); 353 395 for (int i = 0; i < 10; i++) … … 358 400 } 359 401 psFree(test); 360 } 361 362 { 402 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 403 } 404 405 406 { 407 psMemId id = psMemGetId(); 363 408 psVector *input = psVectorAlloc(5, PS_TYPE_F64); 364 409 psVector *test = psVectorCreate(input, 0.0, 5.0, 0.5, PS_TYPE_F64); 365 366 410 for (int i = 0; i < 10; i++) 367 411 { … … 371 415 } 372 416 psFree(input); 373 } 417 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 418 } 419 374 420 375 421 // Test PS_TYPE_U16 376 422 // PS_TYPE_S16 377 423 { 424 psMemId id = psMemGetId(); 378 425 psVector *test = psVectorCreate(NULL, 0.0, 10.0, 1.0, PS_TYPE_S16); 379 426 for (int i = 0; i < 10; i++) … … 383 430 } 384 431 psFree(test); 385 } 386 387 { 432 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 433 } 434 435 436 { 437 psMemId id = psMemGetId(); 388 438 psVector *input = psVectorAlloc(5, PS_TYPE_U16); 389 439 psVector *test = psVectorCreate(input, 0.0, 20.0, 2.0, PS_TYPE_U16); 390 391 440 for (int i = 0; i < 10; i++) 392 441 { … … 395 444 } 396 445 psFree(input); 397 } 398 399 400 401 // diag("psVectorToString() tests"); 446 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 447 } 448 449 402 450 403 451 #define TEST_VECTOR_TO_STRING(TYPE, SIZE, START, INC, EXPECTED) \ 404 452 { \ 453 psMemId id = psMemGetId(); \ 405 454 const int asize = SIZE; /* alloc size */ \ 406 455 const int osize = 100; /* output size (max) */ \ … … 416 465 \ 417 466 psFree(input); \ 418 } 419 420 467 psFree(result); \ 468 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); \ 469 } 470 //HERE 471 // psVectorToString() tests 421 472 TEST_VECTOR_TO_STRING(PS_TYPE_U8, 5, 1, 1, "[1,2,3,4,5]"); 422 423 473 TEST_VECTOR_TO_STRING(PS_TYPE_U16, 5, 1, 1, "[1,2,3,4,5]"); 424 425 474 TEST_VECTOR_TO_STRING(PS_TYPE_U32, 5, 1, 1, "[1,2,3,4,5]"); 426 427 475 TEST_VECTOR_TO_STRING(PS_TYPE_U64, 5, 1, 1, "[1,2,3,4,5]"); 428 429 476 TEST_VECTOR_TO_STRING(PS_TYPE_S8, 5, -100, 10,"[-100,-90,-80,-70,-60]"); 430 431 477 TEST_VECTOR_TO_STRING(PS_TYPE_S16, 5, 0, -100, "[0,-100,-200,-300,-400]"); 432 433 478 TEST_VECTOR_TO_STRING(PS_TYPE_S32, 5, 0, -100, "[0,-100,-200,-300,-400]"); 434 435 479 TEST_VECTOR_TO_STRING(PS_TYPE_S64, 5, 0, -100, "[0,-100,-200,-300,-400]"); 436 437 480 TEST_VECTOR_TO_STRING(PS_TYPE_F32,5,.123,1,"[0.123,1.123,2.123,3.123,4.123]"); 438 481 TEST_VECTOR_TO_STRING(PS_TYPE_F64,5,.123,1,"[0.123,1.123,2.123,3.123,4.123]"); 439 482 440 441 // diag("p_psVectorGetElementF64() tests");442 483 443 484 #define TEST_VECTOR_GET_ELEMENT_F64(ELEM_TYPE, SIZE, VALUE_TYPE, \ 444 485 INIT_VALUE ) \ 445 486 { \ 487 psMemId id = psMemGetId(); \ 446 488 psVector *vec = psVectorAlloc(SIZE, ELEM_TYPE); \ 447 489 vec->n = SIZE; \ … … 454 496 \ 455 497 psFree(vec); \ 456 } 457 498 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); \ 499 } 500 // p_psVectorGetElementF64() tests 458 501 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_U8, 1, psU8, 1); 459 460 502 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_U16, 2, psU16, 2); 461 462 503 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_U32, 3, psU32, 3); 463 464 504 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_U64, 100, psU64, 999999); 465 466 505 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_S8, 1, psS8, -1); 467 468 506 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_S16, 2, psS16, -2); 469 470 507 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_S32, 3, psS32, -3); 471 472 508 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_S64, 100, psS64, -999999); 473 474 509 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_F32,1, psF32, .123); 475 476 510 TEST_VECTOR_GET_ELEMENT_F64(PS_TYPE_F64,2, psF64, -123.123); 477 511 478 512 479 // diag("p_psVectorPrint() tests");480 513 // XXX: Why are we testing private functions? 481 514 #define TEST_VECTOR_PRINT(ELEM_TYPE, SIZE, VALUE_TYPE, INIT_VALUE, FD, \ 482 515 OUT_NAME, EXPECTED_RC ) \ 483 516 { \ 517 psMemId id = psMemGetId(); \ 484 518 psVector *vec = psVectorAlloc(SIZE, ELEM_TYPE); \ 485 519 vec->n = SIZE; \ … … 491 525 \ 492 526 psFree(vec); \ 493 } 494 527 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); \ 528 } 529 // p_psVectorPrint() tests 495 530 TEST_VECTOR_PRINT(PS_TYPE_U8, 1, psU8, 1, 1, "PS_TYPE_U8", TRUE); 496 497 531 TEST_VECTOR_PRINT(PS_TYPE_U16, 2, psU16, 2, 1, "PS_TYPE_U16", TRUE); 498 499 532 TEST_VECTOR_PRINT(PS_TYPE_U32, 3, psU32, 3, 1, "PS_TYPE_U32", TRUE); 500 501 533 TEST_VECTOR_PRINT(PS_TYPE_U64, 4, psU64, 999999, 1, "PS_TYPE_U64", TRUE); 502 503 534 TEST_VECTOR_PRINT(PS_TYPE_S8, 1, psS8, -1, 1, "PS_TYPE_S8", TRUE); 504 505 535 TEST_VECTOR_PRINT(PS_TYPE_S16, 2, psS16, -2, 1, "PS_TYPE_S16", TRUE); 506 507 536 TEST_VECTOR_PRINT(PS_TYPE_S32, 3, psS32, -3, 1, "PS_TYPE_S32", TRUE); 508 509 537 TEST_VECTOR_PRINT(PS_TYPE_S64, 4, psS64, -999999, 1, "PS_TYPE_S64", TRUE); 510 511 538 TEST_VECTOR_PRINT(PS_TYPE_F32,1, psF32, .123, 1, "PS_TYPE_F32", TRUE); 512 513 539 TEST_VECTOR_PRINT(PS_TYPE_F64,2, psF64, -123.123, 1, "PS_TYPE_F64", TRUE); 514 540 515 // diag("psVectorSet() tests"); 516 517 {541 // psVectorSet() tests 542 { 543 psMemId id = psMemGetId(); 518 544 psVector *vec = psVectorAlloc(5, PS_TYPE_S32); 519 520 545 ok(psVectorSet(vec, 0, 10), 521 546 "VectorSet set S32 at position 0"); 522 523 psFree(vec); 524 } 525 526 { 547 psFree(vec); 548 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 549 } 550 551 552 { 553 psMemId id = psMemGetId(); 527 554 psVector *vec = psVectorAlloc(5, PS_TYPE_S32); 528 529 555 ok(!psVectorSet(vec, 10, 10), 530 556 "VectorSet failes to set S32 at out of range position"); 531 532 psFree(vec); 533 } 534 535 { 557 psFree(vec); 558 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 559 } 560 561 562 { 563 psMemId id = psMemGetId(); 536 564 psVector *vec = psVectorAlloc(5, PS_TYPE_S32); 537 538 565 ok(psVectorSet(vec, 1, 4) == true, 539 566 "VectorSet set S32 at position 1"); 540 541 psFree(vec);542 } 543 544 545 // diag("psVectorGet() tests"); 546 547 {567 psFree(vec); 568 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 569 } 570 571 572 // psVectorGet() tests 573 { 574 psMemId id = psMemGetId(); 548 575 psVector *vec = psVectorAlloc(10, PS_TYPE_S32); 549 576 psVectorSet(vec, 0, 10); 550 551 577 ok((psS32)psVectorGet(vec, 0) == 10, 552 578 "VectorGet returned the correct S32 from position 0"); 553 554 psFree(vec); 555 } 556 557 { 579 psFree(vec); 580 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 581 } 582 583 584 { 585 psMemId id = psMemGetId(); 558 586 psVector *vec = psVectorAlloc(5, PS_TYPE_S32); 559 587 psVectorSet(vec, -1, 4); 560 561 588 ok((psS32)psVectorGet(vec, -1) == 4, 562 589 "VectorGet returned the correct S32 from tail using -1"); 563 564 psFree(vec);565 } 566 567 568 // diag("psVectorCountPixelMask() tests"); 569 570 {590 psFree(vec); 591 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 592 } 593 594 595 // psVectorCountPixelMask() tests 596 { 597 psMemId id = psMemGetId(); 571 598 ok(psVectorCountPixelMask(NULL, 1) == -1, 572 599 "psVectorCountPixelMask returned -1 for NULL Vector input"); 573 } 574 575 { 600 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 601 } 602 603 604 { 605 psMemId id = psMemGetId(); 576 606 psVector *vec = psVectorAlloc(5, PS_TYPE_S32); 577 607 vec->data.S32[0] = 0; … … 580 610 vec->data.S32[3] = 1; 581 611 vec->data.S32[4] = 0; 582 vec->n = 5;583 584 612 ok(psVectorCountPixelMask(vec, 1) == -1, 585 613 "returned -1 for wrong type of Vector input"); 586 587 psFree(vec); 588 } 589 590 { 614 psFree(vec); 615 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 616 } 617 618 619 { 620 psMemId id = psMemGetId(); 591 621 psVector *vec = psVectorAlloc(5, PS_TYPE_U8); 592 622 vec->data.U8[0] = 0; … … 595 625 vec->data.U8[3] = 1; 596 626 vec->data.U8[4] = 0; 597 vec->n = 5;598 627 long numPix = psVectorCountPixelMask(vec, 1); 599 600 628 ok(numPix != -1, "returned -1 for correct Vector input"); 601 629 ok(numPix == 2, "returned pixel count %d", numPix); 602 603 psFree(vec); 604 } 605 606 607 // diag("psVectorLength() tests"); 608 { 630 psFree(vec); 631 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 632 } 633 634 635 // psVectorLength() tests 636 { 637 psMemId id = psMemGetId(); 609 638 psVector *vector = psVectorAlloc(5, PS_TYPE_F32); 610 639 ok(psVectorLength(vector) == 5, 611 640 "returned the correct length of vector (was %d, should be 5)", psVectorLength(vector)); 612 641 psFree(vector); 613 } 614 615 { 642 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 643 } 644 645 646 { 647 psMemId id = psMemGetId(); 616 648 psVector *vector = psVectorAlloc(5, PS_TYPE_F32); 617 vector->n = 5;618 619 649 ok(psVectorLength(vector) == 5, 620 650 "returned the correct length of vector"); 621 622 651 psFree(vector); 623 } 624 625 { 652 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 653 } 654 655 656 { 657 psMemId id = psMemGetId(); 626 658 psVector *vector = psVectorAlloc(6, PS_TYPE_F32); 627 vector->n = 6;628 629 659 ok(psVectorLength(vector) == 6, 630 660 "returned the correct length of vector"); 631 632 661 psFree(vector); 633 } 634 635 { 662 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 663 } 664 665 666 { 667 psMemId id = psMemGetId(); 636 668 ok(psVectorLength(NULL) == -1, "returned -1 for a NULL input vector"); 637 } 638 639 { 669 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 670 } 671 672 673 { 674 psMemId id = psMemGetId(); 640 675 psArray *array = psArrayAlloc(5); 641 642 676 ok(psVectorLength((psVector*)array) == -1, 643 677 "returned -1 for an invalid input vector"); 644 645 678 psFree(array); 646 }647 648 649 // diag("psVectorCopy() tests"); 650 651 { 652 679 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 680 } 681 682 683 // psVectorCopy() tests 684 { 685 psMemId id = psMemGetId(); 653 686 ok(psVectorCopy(NULL, NULL, PS_TYPE_F32) == NULL, 654 687 "returned a NULL vector for NULL input"); 655 } 656 657 { 688 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 689 } 690 691 692 { 693 psMemId id = psMemGetId(); 658 694 psVector *in = psVectorAlloc(5, PS_TYPE_F32); 659 in->n = 5;660 661 695 for (int i = 0; i < 5; i++) { 662 696 in->data.F32[i] = i; 663 697 } 664 665 698 //Try copy of different type 666 699 psVector *copy = psVectorCopy(NULL, in, PS_TYPE_F64); … … 671 704 copy->data.F64[2], in->data.F32[2]); 672 705 skip_end(); 673 674 706 psFree(in); 675 707 psFree(copy); 676 } 708 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 709 } 710 677 711 678 712 // XXX psVectorRecycle needs it's own tests 679 713 // copy = psVectorRecycle(copy, in->n + 2, PS_TYPE_F64); 680 681 {714 { 715 psMemId id = psMemGetId(); 682 716 // Try copy of same type and non-NULL outVector of different type and 683 717 // size. … … 700 734 psFree(in); 701 735 psFree(copy); 702 } 703 704 return exit_status(); 736 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 737 } 705 738 } -
trunk/psLib/test/mathtypes/tap_psVectorSort_01.c
r12513 r12781 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $15 * @date $Date: 2007-0 3-20 03:57:25$14 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2007-04-10 21:09:31 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii 18 18 * 19 19 */ 20 21 20 #include <pslib.h> 22 23 21 #include "tap.h" 24 22 #include "pstap.h" 25 23 26 27 24 #define tstVectorSortByType(datatype,value) \ 28 25 in = psVectorAlloc(7,PS_TYPE_##datatype); \ 29 in->n = 7; \30 26 out = psVectorAlloc(7,PS_TYPE_##datatype); \ 31 out->n = 7; \32 27 in->data.datatype[0] = 7+value; \ 33 28 in->data.datatype[1] = 9+value; \ … … 45 40 ok(out->data.datatype[0] == in->data.datatype[6], \ 46 41 "sort out[0] type %s",#datatype); \ 47 skip_start(out->data.datatype[0] != in->data.datatype[6], \48 6,"sort out[0] type %s",#datatype); \49 42 ok(out->data.datatype[1] == in->data.datatype[3], \ 50 43 "sort out[1] type %s",#datatype); \ 51 skip_start(out->data.datatype[1] != in->data.datatype[3], \52 5,"Improper sort out[1] type %s",#datatype); \53 44 ok(out->data.datatype[2] == in->data.datatype[2], \ 54 45 "sort out[2] type %s",#datatype); \ 55 skip_start(out->data.datatype[2] != in->data.datatype[2], \56 4,"Improper sort out[2] type %s",#datatype); \57 46 ok(out->data.datatype[3] == in->data.datatype[4], \ 58 47 "sort out[3] type %s",#datatype); \ 59 skip_start(out->data.datatype[3] != in->data.datatype[4], \60 3,"Improper sort out[3] type %s",#datatype); \61 48 ok(out->data.datatype[4] == in->data.datatype[5], \ 62 49 "sort out[4] %s",#datatype); \ 63 skip_start(out->data.datatype[4] != in->data.datatype[5], \64 2,"Improper sort out[4] %s",#datatype); \65 50 ok(out->data.datatype[5] == in->data.datatype[0], \ 66 51 "sort out[5] %s",#datatype); \ 67 skip_start(out->data.datatype[5] != in->data.datatype[0], \68 1,"Improper sort out[5] %s",#datatype); \69 52 ok(out->data.datatype[6] == in->data.datatype[1], \ 70 53 "sort out[6] %s",#datatype); \ 71 skip_end(); \72 skip_end(); \73 skip_end(); \74 skip_end(); \75 skip_end(); \76 skip_end(); \77 54 skip_end(); \ 78 55 psFree(in); \ … … 84 61 char* argv[]) 85 62 { 86 plan_tests(92); 63 psLogSetFormat("HLNM"); 64 psLogSetLevel(PS_LOG_INFO); 65 plan_tests(97); 87 66 88 67 psVector *in = NULL; … … 91 70 92 71 // Test A - Verify the sort for all supported types 93 94 tstVectorSortByType(S8,0); 95 tstVectorSortByType(S16,1); 96 tstVectorSortByType(S32,2); 97 tstVectorSortByType(S64,3); 98 tstVectorSortByType(U8,4); 99 tstVectorSortByType(U16,5); 100 tstVectorSortByType(U32,6); 101 tstVectorSortByType(U64,7); 102 tstVectorSortByType(F32,8); 103 tstVectorSortByType(F64,9); 72 { 73 psMemId id = psMemGetId(); 74 tstVectorSortByType(S8,0); 75 tstVectorSortByType(S16,1); 76 tstVectorSortByType(S32,2); 77 tstVectorSortByType(S64,3); 78 tstVectorSortByType(U8,4); 79 tstVectorSortByType(U16,5); 80 tstVectorSortByType(U32,6); 81 tstVectorSortByType(U64,7); 82 tstVectorSortByType(F32,8); 83 tstVectorSortByType(F64,9); 84 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 85 } 104 86 105 87 106 88 // Test B - Sort input vector into itself 89 { 90 psMemId id = psMemGetId(); 91 psVector *in = psVectorAlloc(7, PS_TYPE_F32); 92 in->data.F32[0] = 0.7f; 93 in->data.F32[1] = 0.9f; 94 in->data.F32[2] = 0.3f; 95 in->data.F32[3] = 0.1f; 96 in->data.F32[4] = 0.5f; 97 in->data.F32[5] = 0.5f; 98 in->data.F32[6] = -2.0f; 99 in = psVectorSort(in, in); 100 ok(in->data.F32[0] == -2.0f,"self sort in[0]"); 101 ok(in->data.F32[1] == 0.1f,"self sort in[1]"); 102 ok(in->data.F32[2] == 0.3f, "self sort in[2]"); 103 ok(in->data.F32[3] == 0.5f, "self sort in[3]"); 104 ok(in->data.F32[4] == 0.5f, "self sort in[4]"); 105 ok(in->data.F32[5] == 0.7f, "self sort in[5]"); 106 ok(in->data.F32[6] == 0.9f, "self sort in[6]"); 107 psFree(in); 108 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 109 } 107 110 108 in = psVectorAlloc(7, PS_TYPE_F32);109 in->n = 7;110 in->data.F32[0] = 0.7f;111 in->data.F32[1] = 0.9f;112 in->data.F32[2] = 0.3f;113 in->data.F32[3] = 0.1f;114 in->data.F32[4] = 0.5f;115 in->data.F32[5] = 0.5f;116 in->data.F32[6] = -2.0f;117 in = psVectorSort(in, in);118 ok(in->data.F32[0] == -2.0f,"self sort in[0]");119 ok(in->data.F32[1] == 0.1f,"self sort in[1]");120 ok(in->data.F32[2] == 0.3f, "self sort in[2]");121 ok(in->data.F32[3] == 0.5f, "self sort in[3]");122 ok(in->data.F32[4] == 0.5f, "self sort in[4]");123 ok(in->data.F32[5] == 0.7f, "self sort in[5]");124 ok(in->data.F32[6] == 0.9f, "self sort in[6]");125 111 126 112 // Test C - Attempt to sort vector with invalid type 127 in->type.type = PS_TYPE_BOOL; 128 out = psVectorAlloc(7,PS_TYPE_F32); 129 tempVec = psVectorSort(out,in); 130 ok(tempVec == NULL, "Did return NULL on error"); 113 { 114 psMemId id = psMemGetId(); 115 psVector *in = psVectorAlloc(7, PS_TYPE_F32); 116 in->type.type = PS_TYPE_BOOL; 117 out = psVectorAlloc(7,PS_TYPE_F32); 118 tempVec = psVectorSort(out,in); 119 ok(tempVec == NULL, "Did return NULL on error"); 120 psFree(out); 121 psFree(in); 122 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 123 } 124 131 125 132 126 // Test D - Sort vector with zero elements 133 out = psVectorAlloc(7,PS_TYPE_F32); 134 in->n = 0; 135 out = psVectorSort(out,in); 136 ok (out != NULL, "psVectorSort returned a non-NULL vector" ); 137 skip_start (out == NULL, 1, "psVectorSort returned a NULL vector" ); 138 ok (out->n == 0, "psVectorSort correctly return a 0-length vector.\n"); 139 skip_end(); 140 141 psFree(out); 127 { 128 psMemId id = psMemGetId(); 129 out = psVectorAlloc(7,PS_TYPE_F32); 130 in->n = 0; 131 out = psVectorSort(out,in); 132 ok(out != NULL, "psVectorSort returned a non-NULL vector" ); 133 skip_start (out == NULL, 1, "psVectorSort returned a NULL vector" ); 134 ok(out->n == 0, "psVectorSort correctly return a 0-length vector"); 135 skip_end(); 136 psFree(out); 137 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 138 } 142 139 143 140 144 141 // Test D - Free float vectors 145 psFree(in); 146 ok ( ! psMemCheckLeaks(0, NULL, stdout, false),"Memory leaks not detected"); 147 148 psS32 nBad = psMemCheckCorruption(stderr, false); 149 ok(!nBad, "Found %d bad memory blocks\n", nBad); 142 { 143 psMemId id = psMemGetId(); 144 psVector *in = psVectorAlloc(7, PS_TYPE_F32); 145 psFree(in); 146 ok( ! psMemCheckLeaks(0, NULL, stdout, false),"Memory leaks not detected"); 147 psS32 nBad = psMemCheckCorruption(stderr, false); 148 ok(!nBad, "Found %d bad memory blocks", nBad); 149 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 150 } 150 151 } -
trunk/psLib/test/mathtypes/tap_psVectorSort_02.c
r12513 r12781 14 14 * @author Ross Harman, MHPCC 15 15 * 16 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $17 * @date $Date: 2007-0 3-20 03:57:25$16 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 17 * @date $Date: 2007-04-10 21:09:31 $ 18 18 * 19 19 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 28 28 #define tstVectorSortIndexByType(datatype,value) \ 29 29 in = psVectorAlloc( 5, PS_TYPE_##datatype ); \ 30 in->n = 5; \31 30 in->data.datatype[0] = 7+value; \ 32 31 in->data.datatype[1] = 9+value; \ … … 52 51 psS32 main(psS32 argc, char* argv[]) 53 52 { 54 plan_tests(71); 53 psLogSetFormat("HLNM"); 54 psLogSetLevel(PS_LOG_INFO); 55 plan_tests(77); 55 56 56 57 psVector *in = NULL; … … 59 60 60 61 // Test A - Sort vectors by index for all types 61 tstVectorSortIndexByType(S8,0) 62 tstVectorSortIndexByType(U8,1) 63 tstVectorSortIndexByType(S16,2) 64 tstVectorSortIndexByType(U16,3) 65 tstVectorSortIndexByType(S32,4) 66 tstVectorSortIndexByType(U32,5) 67 tstVectorSortIndexByType(S64,6) 68 tstVectorSortIndexByType(U64,7) 69 tstVectorSortIndexByType(F32,8) 70 tstVectorSortIndexByType(F64,9) 71 psFree(out); 62 { 63 psMemId id = psMemGetId(); 64 tstVectorSortIndexByType(S8,0) 65 tstVectorSortIndexByType(U8,1) 66 tstVectorSortIndexByType(S16,2) 67 tstVectorSortIndexByType(U16,3) 68 tstVectorSortIndexByType(S32,4) 69 tstVectorSortIndexByType(U32,5) 70 tstVectorSortIndexByType(S64,6) 71 tstVectorSortIndexByType(U64,7) 72 tstVectorSortIndexByType(F32,8) 73 tstVectorSortIndexByType(F64,9) 74 psFree(out); 75 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 76 } 77 72 78 73 79 // Test C Attempt to sort with null input vector 74 in = NULL; 75 out = psVectorAlloc(5,PS_TYPE_U32); 76 out = psVectorSortIndex(out,in); 77 ok(out == NULL, "Did return NULL with NULL input specified"); 80 { 81 psMemId id = psMemGetId(); 82 in = NULL; 83 out = psVectorAlloc(5,PS_TYPE_U32); 84 out = psVectorSortIndex(out,in); 85 ok(out == NULL, "Did return NULL with NULL input specified"); 86 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 87 } 88 78 89 79 90 // Test D Sort with output vector which needs to be resized 80 in = psVectorAlloc(5,PS_TYPE_U8); 81 in->n=5; 82 for(psS32 m=0; m<5; m++) { 83 in->data.U8[m]= 20-m; 91 { 92 psMemId id = psMemGetId(); 93 in = psVectorAlloc(5,PS_TYPE_U8); 94 in->n=5; 95 for(psS32 m=0; m<5; m++) { 96 in->data.U8[m]= 20-m; 97 } 98 out = psVectorAlloc(5,PS_TYPE_U32); 99 out->n = 5; 100 out = psVectorSortIndex(out,in); 101 ok(out->n == 5, "Did properly resize output vector...out->n=%d, in->n=%d", out->n, in->n); 102 ok(out->data.U32[0] == 4, 103 "Did properly sort index out[0] = %d",out->data.U32[0]); 104 ok(out->data.U32[1] == 3, 105 "Did properly sort index out[1] = %d",out->data.U32[1]); 106 ok(out->data.U32[2] == 2, 107 "Did properly sort index out[2] = %d",out->data.U32[2]); 108 ok(out->data.U32[3] == 1, 109 "Did properly sort index out[3] = %d",out->data.U32[3]); 110 ok(out->data.U32[4] == 0, 111 "Did properly sort index out[4] = %d",out->data.U32[4]); 112 psFree(in); 113 psFree(out); 114 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 84 115 } 85 out = psVectorAlloc(5,PS_TYPE_U32);86 out->n = 5;87 out = psVectorSortIndex(out,in);88 ok(out->n == 5, "Did properly resize output vector...out->n=%d, in->n=%d", out->n, in->n);89 ok(out->data.U32[0] == 4,90 "Did properly sort index out[0] = %d",out->data.U32[0]);91 ok(out->data.U32[1] == 3,92 "Did properly sort index out[1] = %d",out->data.U32[1]);93 ok(out->data.U32[2] == 2,94 "Did properly sort index out[2] = %d",out->data.U32[2]);95 ok(out->data.U32[3] == 1,96 "Did properly sort index out[3] = %d",out->data.U32[3]);97 ok(out->data.U32[4] == 0,98 "Did properly sort index out[4] = %d",out->data.U32[4]);99 116 100 psFree(in);101 psFree(out);102 117 103 118 // Test E - Sort input vector with zero elements 104 in = psVectorAlloc(5,PS_TYPE_U8); 105 out = psVectorAlloc(5,PS_TYPE_U32); 106 in->n = 0; 107 out->n = 0; 108 tempVect = out; 109 out = psVectorSortIndex(out,in); 110 ok ( out == tempVect, "Did not return the same output vector"); 111 in->n=5; 112 out->n=5; 113 psFree(out); 114 psFree(in); 119 { 120 psMemId id = psMemGetId(); 121 in = psVectorAlloc(5,PS_TYPE_U8); 122 out = psVectorAlloc(5,PS_TYPE_U32); 123 in->n = 0; 124 out->n = 0; 125 tempVect = out; 126 out = psVectorSortIndex(out,in); 127 ok ( out == tempVect, "Did not return the same output vector"); 128 in->n=5; 129 out->n=5; 130 psFree(out); 131 psFree(in); 132 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 133 } 134 115 135 116 136 // Test F - Attempt to sort input vector with invalid type 117 in = psVectorAlloc(5,PS_TYPE_U8); 118 out = psVectorAlloc(5,PS_TYPE_U32); 119 in->n = 5; 120 out->n = 5; 121 tempVect = out; 122 in->type.type = PS_TYPE_BOOL; 123 out = psVectorSortIndex(out,in); 124 ok( out == NULL, "Did return NULL"); 125 in->type.type = PS_TYPE_U8; 126 psFree(in); 137 { 138 psMemId id = psMemGetId(); 139 in = psVectorAlloc(5,PS_TYPE_U8); 140 out = psVectorAlloc(5,PS_TYPE_U32); 141 in->n = 5; 142 out->n = 5; 143 tempVect = out; 144 in->type.type = PS_TYPE_BOOL; 145 out = psVectorSortIndex(out,in); 146 ok( out == NULL, "Did return NULL"); 147 in->type.type = PS_TYPE_U8; 148 psFree(in); 149 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 150 } 151 127 152 128 153 // Test G - Free vectors 129 psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false); 130 ok(!nLeaks, "Found %d memory leaks\n", nLeaks); 131 psS32 nBad = psMemCheckCorruption(stderr, false); 132 ok(!nBad, "Found %d bad memory blocks\n", nBad); 154 { 155 psMemId id = psMemGetId(); 156 psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false); 157 ok(!nLeaks, "Found %d memory leaks", nLeaks); 158 psS32 nBad = psMemCheckCorruption(stderr, false); 159 ok(!nBad, "Found %d bad memory blocks", nBad); 160 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 161 } 133 162 } -
trunk/psLib/test/mathtypes/tap_psVectorSort_03.c
r11265 r12781 3 3 * @brief Test driver for psVectorSort functions 4 4 * 5 * This test driver contains the following tests for psVectorSort test point 3:6 * A) Create float vectors of different sizes7 * B) Attempt to sort vectors...should get errors8 * C) Create float vector and double vector9 * D) Attempt to sort vectors...should get errors10 * E) Free float, double vectors11 *12 5 * @author Ross Harman, MHPCC 13 6 * 14 * @version $Revision: 1.2 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2007-01-24 22:14:48 $ 7 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-04-10 21:09:31 $ 9 * 10 * XXX: These tests are obsolete. psVectorSOrt no longer returns error 11 * with incorrect input vector types or sizes 16 12 * 17 13 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 28 24 char* argv[]) 29 25 { 30 plan_tests(2); 26 psLogSetFormat("HLNM"); 27 psLogSetLevel(PS_LOG_INFO); 28 plan_tests(1); 29 ok(true, "cake"); 31 30 32 psVector *in = NULL; 33 psVector *out = NULL; 34 psVector *in2 = NULL; 35 psVector *out2 = NULL; 36 37 // Test A - Create float vectors 38 in = psVectorAlloc(5, PS_TYPE_F32); 39 in->n = 5; 40 out = psVectorAlloc(6, PS_TYPE_F32); 41 out->n = 6; 42 in->n = 5; 43 for(psS32 i=0; i<5; i++) { 44 //printf("arr[%d] = %f\n", i, in->data.F32[i]); 31 // Create float vectors with incorrect sizes 32 if (0) { 33 psMemId id = psMemGetId(); 34 psVector *in = psVectorAlloc(5, PS_TYPE_F32); 35 psVector *out = psVectorAlloc(6, PS_TYPE_F32); 36 psVector *out2 = psVectorSort(out, in); 37 ok(out2 == NULL, "psVectorSort() returned() NULL with non-uniform verctor input sizes"); 38 psFree(in); 39 psFree(out); 40 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 45 41 } 46 42 47 43 48 // Test B - Sort input float vector and put results into output floatvector49 out = psVectorSort(out, in);50 51 // Test C - Create float vector and double vector52 in2 = psVectorAlloc(5, PS_TYPE_F32);53 in2->n = 5;54 out2 = psVectorAlloc(5, PS_TYPE_F64);55 out2->n = 5;56 for(psS32 j=0; j<5; j++) {57 //printf("vec[%d] = %f\n", j, in2->data.F32[j]);44 // Create float vector and double vector 45 if (0) { 46 psMemId id = psMemGetId(); 47 psVector *in2 = psVectorAlloc(5, PS_TYPE_F32); 48 psVector *out2 = psVectorAlloc(5, PS_TYPE_F64); 49 psVector *out3 = psVectorSort(out2, in2); 50 ok(out3 == NULL, "psVectorSort() returned() NULL with non-uniform verctor input types"); 51 psFree(in2); 52 psFree(out2); 53 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 58 54 } 59 60 // Test D - Attempt to sort vectors with output of different type should create error61 out2 = psVectorSort(out2, in2);62 63 // Test C - Free float vectors64 psFree(in);65 psFree(in2);66 psFree(out);67 psFree(out2);68 psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false);69 ok(!nLeaks, "Found %d memory leaks\n", nLeaks);70 psS32 nBad = psMemCheckCorruption(stderr, false);71 ok(!nBad, "Found %d bad memory blocks\n", nBad);72 55 } -
trunk/psLib/test/mathtypes/tap_psVectorSort_04.c
r11265 r12781 3 3 * @brief Test driver for psVectorSort functions 4 4 * 5 * This test driver contains the following tests for psVectorSort test point 4:6 * A) Attempt to sort with null input vector7 * B) Free vectors8 *9 5 * @author Ross Harman, MHPCC 10 6 * 11 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $12 * @date $Date: 2007-0 1-24 22:14:48$7 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-04-10 21:09:31 $ 13 9 * 14 10 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii 15 11 * 16 12 */ 17 18 13 #include <pslib.h> 19 20 14 #include "tap.h" 21 15 #include "pstap.h" … … 25 19 char* argv[]) 26 20 { 21 psLogSetFormat("HLNM"); 22 psLogSetLevel(PS_LOG_INFO); 27 23 plan_tests(2); 28 24 29 psVector *badIn = NULL;30 psVector *goodOut = psVectorAlloc(5, PS_TYPE_F32);31 25 32 // Test A - Attempt to sort with null input vector 33 goodOut = psVectorSort(goodOut, badIn); 34 35 // Test B - Free vectors 36 psFree(goodOut); 37 psS32 nLeaks = psMemCheckLeaks(0, NULL, stdout, false); 38 ok(!nLeaks, "Found %d memory blocks\n", nLeaks); 39 psS32 nBad = psMemCheckCorruption(stderr, false); 40 ok(!nBad, "Found %d bad memory blocks\n", nBad); 26 // Attempt to sort with null input vector 27 { 28 psMemId id = psMemGetId(); 29 psVector *goodOut = psVectorAlloc(5, PS_TYPE_F32); 30 goodOut = psVectorSort(goodOut, NULL); 31 ok(goodOut == NULL, "psVectorSort() returned NULL with NULL input vector"); 32 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 33 } 41 34 } -
trunk/psLib/test/sys/tap_psConfigure.c
r11685 r12781 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1. 2$ $Name: not supported by cvs2svn $14 * @date $Date: 2007-0 2-07 22:50:18$13 * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2007-04-10 21:09:31 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 24 24 25 25 26 static psS32 psLibVersion00(void);27 28 29 26 psS32 main(psS32 argc, char* argv[]) 30 27 { 31 plan_tests( 1);28 plan_tests(2); 32 29 33 psLibVersion00(); 30 // Simple test of psLibVersion() 31 // XX: Must somehow verify the output is correct. 32 { 33 psMemId id = psMemGetId(); 34 char *stringVal = NULL; 35 stringVal = psLibVersion(); 36 ok(stringVal != NULL && strlen(stringVal), "Version is cool"); 37 psFree(stringVal); 38 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 39 } 34 40 } 35 41 36 37 static psS32 psLibVersion00(void)38 {39 diag("psLibVersion00");40 41 char *stringVal = NULL;42 stringVal = psLibVersion();43 ok( stringVal != NULL && strlen(stringVal), "Version is cool");44 psFree(stringVal);45 46 return 0;47 }48 -
trunk/psLib/test/sys/tap_psError.c
r12513 r12781 3 3 * @brief Test driver for psError function 4 4 * 5 * This test driver contains the following test points for psError6 * testError00 - psError() (Testpoint #486)7 * testError01 - psErrorMsg(), psErrorStackPrint() (Testpoint #725)8 * testError02 - psErrorStackPrintV() (Testpoint #726)9 * testError03 - psErrorGet(), psErrorLast() (Testpoint #727)10 * testError04 - psErrorClear() (Testpoint #728)11 * testError05 - psErrorCodeString() (Testpoint #729)12 *13 5 * @author Eric Van Alst, MHPCC 14 6 * 15 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $16 * @date $Date: 2007-0 3-20 03:57:25$7 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-04-10 21:09:31 $ 17 9 * 18 10 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 28 20 29 21 // Function used in testError02 to verify the psErrorStackPrintV function 30 static void myErrorStackPrint(FILE *fd, 31 const char *fmt, 32 ...) 22 static void myErrorStackPrint( 23 FILE *fd, 24 const char *fmt, 25 ...) 33 26 { 34 27 va_list ap; … … 41 34 42 35 43 static psS32 testError00(void)44 {45 // diag("testError00");46 47 psS32 intval=1;48 psS64 longval = 2;49 float floatval = 3.01;50 char charval = 'E';51 char *stringval = "E R R O R";52 53 // Test point #1 Multiple type values placed in the error string54 psError(PS_ERR_UNKNOWN, true,55 "ALL TYPES intval = %d longval = %lld floatval = %f charval = %c strval = %s",56 intval,longval,floatval,charval,stringval);57 58 // Test point #2 String values in error message59 psError(PS_ERR_UNKNOWN, true, "NO VALUES");60 61 // Test point #3 Empty strings in error message62 psError(PS_ERR_UNKNOWN, true, " ");63 64 return 0;65 }66 67 68 static psS32 testError01(void)69 {70 // diag("testError01");71 72 psErrorCode code=PS_ERR_BAD_PARAMETER_VALUE;73 74 // Verify the return value of psErrorMsg is the psErrorCode passed75 ok ( psError(code, true, "Error code = %d", code) == code,76 "Failed return value verify.");77 skip_start ( psError(code, true, "Error code = %d", code) != code,78 4, "Failed return value verify.");79 80 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1A");81 82 // test1B empty string in for name argument83 ok ( psError(code+1, true, "Error code = %d", code+1) == code+1,84 "Failed return with empty string.");85 skip_start ( psError(code+1, true, "Error code = %d", code+1) != code+1,86 3, "Failed return with empty string.");87 88 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1B");89 90 // test1D undefined code91 ok ( psError(-1, true, "Error code = %d", -1) == -1,92 "Failed return with undefined code.");93 skip_start ( psError(-1, true, "Error code = %d", -1) != -1,94 2, "Failed return with undefined code.");95 96 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1D");97 98 // test1E set psErrorMsg argument to false99 ok( psError(code, false, "Error code = %d", code) == code,100 "Failed return with false new arg.");101 skip_start( psError(code, false, "Error code = %d", code) != code,102 1, "Failed return with false new arg.");103 104 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1E");105 106 // test1F psErrorMsg with a error code less then PS_ERR_BASE(256)107 ok( psError(9, true, "Errno code = %d", 9) == 9, "Error Code" );108 109 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1F");110 111 skip_end();112 skip_end();113 skip_end();114 skip_end();115 116 return 0;117 }118 119 120 static psS32 testError02(void)121 {122 // diag("testError02");123 124 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;125 126 // Generate error message and verify return value127 ok (psError(code, true, "Error code = %d", code) == code,128 "Failed return value verify.");129 130 myErrorStackPrint(stderr,"ERROR STACK PRINT Test%dA",2);131 132 return 0;133 }134 135 136 static psS32 testError03(void)137 {138 // diag("testError03");139 140 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;141 psErr *last = NULL;142 psErr *getErr = NULL;143 144 // Attempt to get last error message with an empty stack verify psErr with code PS_ERR_NONE145 last = psErrorLast();146 ok(last->code == PS_ERR_NONE,147 "psErrorLast did return PS_ERR_NONE for empty stack (%d)", last->code);148 skip_start(last->code == PS_ERR_NONE,149 9, "psErrorLast did return PS_ERR_NONE for empty stack");150 151 psFree(last);152 153 // HEY154 // Attempt to get specific error message with empty stack verify psErr with code PS_ERR_NONE155 getErr= psErrorGet(2);156 ok(getErr->code == PS_ERR_NONE,157 "psErrorGet did not return PS_ERR_NONE for empty stack (%d)", getErr->code);158 skip_start(getErr->code == PS_ERR_NONE,159 8, "psErrorGet did not return PS_ERR_NONE for empty stack");160 161 psFree(getErr);162 163 // Attempt to get error message with invalid index and an empty stack164 getErr= psErrorGet(-1);165 ok(getErr->code == PS_ERR_NONE,166 "psErrorGet with invalid index/empty stack");167 skip_start(getErr->code != PS_ERR_NONE,168 7, "psErrorGet with invalid index/empty stack");169 170 psFree(getErr);171 172 // Generate three error messages173 ok (psError(code, true, "Error code = %d", code) == code,174 "return value verify-1.");175 skip_start (psError(code, true, "Error code = %d", code != code),176 6, "return value verify-2.");177 178 ok (psError((code+1), false, "Error code = %d", (code+1)) == (code+1),179 "Failed return value verify-3.");180 skip_start (psError((code+1), false, "Error code = %d", (code+1))!=(code+1),181 5, "Failed return value verify-4.");182 183 ok (psError((code+2), false, "Error code = %d", (code+2)) == (code+2),184 "Failed return value verify-5.");185 skip_start (psError((code+2), false, "Error code = %d", (code+2))!=(code+2),186 4, "Failed return value verify-6.");187 188 last = psErrorLast();189 getErr= psErrorGet(0);190 191 // Check that last and get with 0 index are equal192 ok(last == getErr, "psErrorGet(0) equal to psErrorLast");193 skip_start(last != getErr, 3, "psErrorGet(0) equal to psErrorLast");194 195 psFree(last);196 197 // Verify the last error message was returned198 ok ( getErr->code == (code+2),199 "psErrorLast() did not retrieve last error");200 skip_start ( getErr->code != (code+2),201 2, "psErrorLast() did not retrieve last error");202 203 psFree(getErr);204 205 // Verify the middle error message can be retrieved206 getErr= psErrorGet(1);207 ok ( getErr->code == (code+1),208 "psErrorGet() did not retrieve proper error");209 skip_start ( getErr->code != (code+1),210 1, "psErrorGet() did not retrieve proper error");211 212 psFree(getErr);213 214 // Verify the psErrorGet returns NULL if an invalid index is given215 getErr= psErrorGet(-1);216 ok ( getErr->code == PS_ERR_NONE,217 "psErrorGet() did not return PS_ERR_NONE w/ invalid arg");218 219 skip_end();220 skip_end();221 skip_end();222 skip_end();223 skip_end();224 skip_end();225 skip_end();226 skip_end();227 skip_end();228 229 psFree(getErr);230 231 return 0;232 }233 234 235 static psS32 testError04(void)236 {237 //diag("testError04");238 239 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;240 psErr *last = NULL;241 psErr *lastAfterClear = NULL;242 243 // With an attemp error stack call psErrorClear244 psErrorClear();245 246 // Get the last error message and verify PS_ERR_NONE (empty stack)247 lastAfterClear = psErrorLast();248 ok(lastAfterClear->code == PS_ERR_NONE, "psErrorLast return expected.");249 skip_start(lastAfterClear->code != PS_ERR_NONE,250 5, "psErrorLast return expected.");251 252 psFree(lastAfterClear);253 254 // Generate three error messages to have messages on error stack255 ok (psError(code, true, "Error code = %d", code) == code,256 "Failed return value verify.");257 skip_start (psError(code, true, "Error code = %d", code) != code,258 4, "Failed return value verify.");259 260 ok (psError((code+1), false, "Error code = %d", (code+1)) == (code+1),261 "Failed return value verify.");262 skip_start (psError((code+1), false, "Error code = %d", (code+1))!=(code+1),263 3, "Failed return value verify.");264 265 ok (psError((code+2), false, "Error code = %d", (code+2)) == (code+2),266 "Failed return value verify.");267 skip_start (psError((code+2), false, "Error code = %d", (code+2))!=(code+2),268 2, "Failed return value verify.");269 270 // Get the last error message and verify it has the expected code271 last = psErrorLast();272 ok(last->code == (code+2), "psErrorLast return expected.");273 skip_start(last->code != (code+2), 1, "psErrorLast return expected.");274 275 psFree(last);276 277 // Clear the error stack278 psErrorClear();279 280 // Get the last error message after clear and verify is has PS_ERR_NONE code281 lastAfterClear = psErrorLast();282 ok(lastAfterClear->code == PS_ERR_NONE, "psErrorLast return expected.");283 284 skip_end();285 skip_end();286 skip_end();287 skip_end();288 skip_end();289 290 psFree(lastAfterClear);291 292 return 0;293 }294 295 296 static psS32 testError05(void)297 {298 //diag("testError05");299 300 // Verify the return value of psErrorCodeString301 // psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE;302 // psLogMsg("tst_psError05", PS_LOG_INFO, psErrorCodeString(code));303 304 // Verify the return value of psErrorCodeString if code is negative305 ok( psErrorCodeString(-1) == NULL, "error string with neg. code");306 307 return 0;308 }309 310 311 static psS32 testErrorRegister(void)312 {313 //diag("testErrorRegister");314 315 psS32 numErr = 4;316 psErrorDescription errDesc[] = { {PS_ERR_N_ERR_CLASSES+1,"first"},317 {PS_ERR_N_ERR_CLASSES+2,"second"},318 {PS_ERR_N_ERR_CLASSES+3,"third"},319 {PS_ERR_N_ERR_CLASSES+4,"fourth"} };320 /*321 1. invoke psErrorRegister with a n>1 array of psErrorDescriptions. Verify that:322 a. Each error description given is retrievable with psErrorCodeString.323 */324 psErrorRegister(errDesc,numErr);325 326 for (psS32 i = 0; i < numErr; i++) {327 const char* desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES+1+i);328 ok (desc != NULL,329 "psErrorCode didn't find registered error code.");330 331 ok (strcmp(desc,errDesc[i].description) == 0,332 "psErrorCode didn't return the proper description. Got '%s', expected '%s'.", desc,errDesc[i].description);333 }334 335 /*336 2. invoke psErrorCodeString with a static/builtin psLib error code. Verify:337 a. the result is correct.338 */339 const char* desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES);340 ok (desc != NULL, "psErrorCode didn't find static error code.");341 ok (strcmp(desc,"error classes end marker") == 0,342 "psErrorCode didn't return the proper description. Got '%s', expected '%s'.",343 desc,"error classes end marker");344 345 desc = psErrorCodeString(PS_ERR_NONE);346 ok (desc != NULL,347 "psErrorCode didn't find static error code.");348 ok (strcmp(desc,"not an error") == 0,349 "psErrorCode didn't return the proper description. Got '%s', expected '%s'.",350 desc,"not an error");351 352 /*353 3. invoke psErrorCodeString with an invalid code. Verify a NULL is returned.354 */355 desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES+numErr+1);356 ok (desc == NULL,357 "psErrorCode didn't return a NULL with a bogus input code.");358 359 /*360 4. invoke psErrorRegister with a NULL psErrorDescription. Verify that:361 a. the execution does not cease.362 b. an appropriate error is generated.363 */364 psLogMsg(__func__,PS_LOG_INFO,"Following should be an error.");365 psErrorClear();366 psErrorRegister(NULL,1);367 psErr* err = psErrorLast();368 ok (err->code == PS_ERR_BAD_PARAMETER_NULL,369 "psErrorCode didn't generate proper error code for NULL input.");370 371 psFree(err);372 373 /*374 5. invoke psErrorRegister with nerror=0. Verify that no error occurs.375 */376 psErrorClear();377 psErrorRegister(errDesc,0);378 err = psErrorLast();379 ok (err->code == PS_ERR_NONE,380 "psErrorCode generated an error for nErrors = 0.");381 382 psFree(err);383 return 0;384 }385 386 387 36 psS32 main( psS32 argc, char* argv[] ) 388 37 { 389 38 psLogSetFormat("HLNM"); 390 plan_tests(38); 391 392 // XXX: testError03() fails if we put it in sequence with the others. 393 testError03(); 394 testError00(); 395 testError01(); 396 testError02(); 397 testError04(); 398 testError05(); 399 testErrorRegister(); 39 plan_tests(60); 40 41 42 //psError() tests 43 { 44 psS32 intval=1; 45 psS64 longval = 2; 46 float floatval = 3.01; 47 char charval = 'E'; 48 char *stringval = "E R R O R"; 49 50 // Multiple type values placed in the error string 51 // XX: The output is never verified 52 { 53 psMemId id = psMemGetId(); 54 psError(PS_ERR_UNKNOWN, true, 55 "ALL TYPES intval = %d longval = %lld floatval = %f charval = %c strval = %s", 56 intval,longval,floatval,charval,stringval); 57 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 58 } 59 60 61 // String values in error message 62 // XX: The output is never verified 63 { 64 psMemId id = psMemGetId(); 65 psError(PS_ERR_UNKNOWN, true, "NO VALUES"); 66 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 67 } 68 69 70 // Empty strings in error message 71 // XX: The output is never verified 72 { 73 psMemId id = psMemGetId(); 74 psError(PS_ERR_UNKNOWN, true, " "); 75 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 76 } 77 78 79 // Verify the return value of psErrorMsg is the psErrorCode passed 80 { 81 psMemId id = psMemGetId(); 82 psErrorCode code=PS_ERR_BAD_PARAMETER_VALUE; 83 ok(psError(code, true, "Error code = %d", code) == code, "Failed return value verify."); 84 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1A"); 85 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 86 } 87 88 89 // test1B empty string in for name argument 90 { 91 psMemId id = psMemGetId(); 92 psErrorCode code=PS_ERR_BAD_PARAMETER_VALUE; 93 ok(psError(code+1, true, "Error code = %d", code+1) == code+1, 94 "Failed return with empty string."); 95 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1B"); 96 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 97 } 98 99 100 // test1D undefined code 101 { 102 psMemId id = psMemGetId(); 103 ok(psError(-1, true, "Error code = %d", -1) == -1, 104 "Failed return with undefined code."); 105 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1D"); 106 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 107 } 108 109 110 // test1E set psErrorMsg argument to false 111 { 112 psMemId id = psMemGetId(); 113 psErrorCode code=PS_ERR_BAD_PARAMETER_VALUE; 114 ok(psError(code, false, "Error code = %d", code) == code, 115 "Failed return with false new arg."); 116 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1E"); 117 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 118 } 119 120 121 // test1F psErrorMsg with a error code less then PS_ERR_BASE(256) 122 { 123 psMemId id = psMemGetId(); 124 ok(psError(9, true, "Errno code = %d", 9) == 9, "Error Code" ); 125 psErrorStackPrint(stderr,"ERROR STACK PRINT Test1F"); 126 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 127 } 128 } 129 130 131 //testError02() 132 { 133 // Generate error message and verify return value 134 { 135 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE; 136 psMemId id = psMemGetId(); 137 ok(psError(code, true, "Error code = %d", code) == code, 138 "Failed return value verify."); 139 myErrorStackPrint(stderr,"ERROR STACK PRINT Test%dA",2); 140 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 141 } 142 } 143 144 145 //psErrorGet(), psErrorLast() 146 { 147 // Attempt to get last error message with an empty stack verify 148 // psErr with code PS_ERR_NONE 149 { 150 psMemId id = psMemGetId(); 151 psErrorClear(); 152 psErr *last = psErrorLast(); 153 ok(last != NULL, "psErrorLast() returned non-NULL"); 154 skip_start(last == NULL, 1, "Skipping tests because psErrorLast() returned NULL"); 155 ok(last->code == PS_ERR_NONE, 156 "psErrorLast did return PS_ERR_NONE for empty stack(%d)", last->code); 157 skip_end(); 158 psFree(last); 159 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 160 } 161 162 // Attempt to get specific error message with empty stack verify 163 // psErr with code PS_ERR_NONE 164 { 165 psMemId id = psMemGetId(); 166 psErr *getErr= psErrorGet(2); 167 ok(getErr != NULL, "psErrorGet(2) returned non-NULL"); 168 skip_start(getErr == NULL, 1, "Skipping tests because psErrorGet() returned NULL"); 169 ok(getErr->code == PS_ERR_NONE, 170 "psErrorGet(2) did return PS_ERR_NONE for empty stack(%d)", getErr->code); 171 skip_end(); 172 psFree(getErr); 173 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 174 } 175 176 177 // Attempt to get error message with invalid index and an empty stack 178 { 179 psMemId id = psMemGetId(); 180 psErr *getErr= psErrorGet(-1); 181 ok(getErr != NULL, "psErrorGet(-1) returned non-NULL"); 182 skip_start(getErr == NULL, 1, "Skipping tests because psErrorGet(-1) returned NULL"); 183 ok(getErr->code == PS_ERR_NONE, "psErrorGet with invalid index/empty stack"); 184 skip_end(); 185 psFree(getErr); 186 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 187 } 188 189 190 // Generate three error messages, ensure they are correctly returned by psError() 191 { 192 psMemId id = psMemGetId(); 193 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE; 194 ok(psError(code, true, "Error code = %d", code) == code, 195 "psError() returned correct error code (example 1)"); 196 ok(psError((code+1), false, "Error code = %d", (code+1)) == (code+1), 197 "psError() returned correct error code (example 2)"); 198 ok(psError((code+2), false, "Error code = %d", (code+2)) == (code+2), 199 "psError() returned correct error code (example 3)"); 200 201 psErr *last = psErrorLast(); 202 psErr *getErr= psErrorGet(0); 203 204 // Check that last and get with 0 index are equal 205 ok(last == getErr, "psErrorGet(0) equal to psErrorLast()"); 206 psFree(last); 207 208 // Verify the last error message was returned 209 ok(getErr->code == (code+2), "psErrorLast() did retrieve last error"); 210 psFree(getErr); 211 psErrorClear(); 212 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 213 } 214 215 216 // Verify the middle error message can be retrieved 217 { 218 psMemId id = psMemGetId(); 219 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE; 220 psError(code, true, "Error code = %d", code); 221 psError((code+1), false, "Error code = %d", (code+1)); 222 psError((code+2), false, "Error code = %d", (code+2)); 223 psErr *getErr= psErrorGet(1); 224 ok(getErr->code == (code+1), "psErrorGet() did not retrieve proper error"); 225 psFree(getErr); 226 psErrorClear(); 227 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 228 } 229 230 // Verify the psErrorGet returns non-NULL PS_ERR_NONE if an invalid index 231 // is given with non-empty error stack 232 { 233 psMemId id = psMemGetId(); 234 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE; 235 psError(code, true, "Error code = %d", code); 236 psError((code+1), false, "Error code = %d", (code+1)); 237 psError((code+2), false, "Error code = %d", (code+2)); 238 psErr *getErr= psErrorGet(-1); 239 ok(getErr->code == PS_ERR_NONE, "psErrorGet() did not return PS_ERR_NONE w/ invalid arg"); 240 psFree(getErr); 241 psErrorClear(); 242 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 243 } 244 } 245 246 247 // psErrorClear() 248 { 249 // With an attemp error stack call psErrorClear 250 { 251 psMemId id = psMemGetId(); 252 psErrorClear(); 253 // Get the last error message and verify PS_ERR_NONE (empty stack) 254 psErr *lastAfterClear = psErrorLast(); 255 ok(lastAfterClear->code == PS_ERR_NONE, "psErrorLast return expected."); 256 psFree(lastAfterClear); 257 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 258 } 259 260 261 // Generate three error messages to have messages on error stack 262 { 263 psMemId id = psMemGetId(); 264 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE; 265 ok(psError(code, true, "Error code = %d", code) == code, 266 "Failed return value verify."); 267 ok(psError((code+1), false, "Error code = %d", (code+1)) == (code+1), 268 "Failed return value verify."); 269 ok(psError((code+2), false, "Error code = %d", (code+2)) == (code+2), 270 "Failed return value verify."); 271 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 272 } 273 274 // Get the last error message and verify it has the expected code 275 { 276 psMemId id = psMemGetId(); 277 psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE; 278 psErr *last = psErrorLast(); 279 ok(last->code == (code+2), "psErrorLast return expected."); 280 psFree(last); 281 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 282 } 283 284 // Clear the error stack 285 { 286 psMemId id = psMemGetId(); 287 psErrorClear(); 288 // Get the last error message after clear and verify is has PS_ERR_NONE code 289 psErr *lastAfterClear = psErrorLast(); 290 ok(lastAfterClear->code == PS_ERR_NONE, "psErrorLast return expected."); 291 psFree(lastAfterClear); 292 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 293 } 294 } 295 296 297 // psErrorCodeString() 298 { 299 // Verify the return value of psErrorCodeString 300 // psErrorCode code = PS_ERR_BAD_PARAMETER_VALUE; 301 // psLogMsg("tst_psError05", PS_LOG_INFO, psErrorCodeString(code)); 302 303 // Verify the return value of psErrorCodeString if code is negative 304 ok( psErrorCodeString(-1) == NULL, "error string with neg. code"); 305 } 306 307 308 //testErrorRegister() 309 { 310 psS32 numErr = 4; 311 psErrorDescription errDesc[] = { {PS_ERR_N_ERR_CLASSES+1,"first"}, 312 {PS_ERR_N_ERR_CLASSES+2,"second"}, 313 {PS_ERR_N_ERR_CLASSES+3,"third"}, 314 {PS_ERR_N_ERR_CLASSES+4,"fourth"} }; 315 /* 316 1. invoke psErrorRegister with a n>1 array of psErrorDescriptions. Verify that: 317 a. Each error description given is retrievable with psErrorCodeString. 318 */ 319 psErrorRegister(errDesc,numErr); 320 321 for (psS32 i = 0; i < numErr; i++) { 322 const char* desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES+1+i); 323 ok(desc != NULL, 324 "psErrorCode didn't find registered error code."); 325 326 ok(strcmp(desc,errDesc[i].description) == 0, 327 "psErrorCode didn't return the proper description. Got '%s', expected '%s'.", desc,errDesc[i].description); 328 } 329 330 /* 331 2. invoke psErrorCodeString with a static/builtin psLib error code. Verify: 332 a. the result is correct. 333 */ 334 const char* desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES); 335 ok(desc != NULL, "psErrorCode didn't find static error code."); 336 ok(strcmp(desc,"error classes end marker") == 0, 337 "psErrorCode didn't return the proper description. Got '%s', expected '%s'.", 338 desc,"error classes end marker"); 339 340 desc = psErrorCodeString(PS_ERR_NONE); 341 ok(desc != NULL, 342 "psErrorCode didn't find static error code."); 343 ok(strcmp(desc,"not an error") == 0, 344 "psErrorCode didn't return the proper description. Got '%s', expected '%s'.", 345 desc,"not an error"); 346 347 /* 348 3. invoke psErrorCodeString with an invalid code. Verify a NULL is returned. 349 */ 350 desc = psErrorCodeString(PS_ERR_N_ERR_CLASSES+numErr+1); 351 ok(desc == NULL, 352 "psErrorCode didn't return a NULL with a bogus input code."); 353 354 /* 355 4. invoke psErrorRegister with a NULL psErrorDescription. Verify that: 356 a. the execution does not cease. 357 b. an appropriate error is generated. 358 */ 359 psLogMsg(__func__,PS_LOG_INFO,"Following should be an error."); 360 psErrorClear(); 361 psErrorRegister(NULL,1); 362 psErr* err = psErrorLast(); 363 ok(err->code == PS_ERR_BAD_PARAMETER_NULL, 364 "psErrorCode didn't generate proper error code for NULL input."); 365 366 psFree(err); 367 368 /* 369 5. invoke psErrorRegister with nerror=0. Verify that no error occurs. 370 */ 371 psErrorClear(); 372 psErrorRegister(errDesc,0); 373 err = psErrorLast(); 374 ok(err->code == PS_ERR_NONE, 375 "psErrorCode generated an error for nErrors = 0."); 376 psFree(err); 377 } 400 378 } 401 402 379 //HERE -
trunk/psLib/test/sys/tap_psLine.c
r12550 r12781 5 5 * @author dRob, MHPCC 6 6 * 7 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $8 * @date $Date: 2007-0 3-22 22:47:07$7 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-04-10 21:09:31 $ 9 9 * 10 10 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 17 17 #include "string.h" 18 18 19 static psS32 testLineAlloc(void); 20 static psS32 testLineInit(void); 21 static psS32 testLineAdd(void); 22 static psS32 testLineChk(void); 19 psS32 main( psS32 argc, char* argv[] ) 20 { 21 plan_tests(16); 22 psLogSetFormat("HLNM"); 23 psLogSetLevel(PS_LOG_INFO); 24 25 //testLineAlloc() 26 { 27 psMemId id = psMemGetId(); 28 psLine *lineline = NULL; 29 lineline = psLineAlloc(20); 30 ok(lineline->NLINE==20, "psLine set NLINE parameter during Allocation"); 31 ok(lineline->Nline == 0, "psLine set Nline parameter during Allocation"); 32 strncpy(lineline->line, "Hello World", 20); 33 ok(!strncmp(lineline->line, "Hello World", 20), 34 "psLine was stored a simple string!"); 35 psFree(lineline); 36 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 37 } 38 39 // testLineInit() 40 { 41 psMemId id = psMemGetId(); 42 psLine *line = NULL; 43 //Return false for NULL input 44 int okay = !psLineInit(line); 45 ok(okay, "psLineInit. Expected false for NULL psLine input"); 46 //Allocate a line and return true on Init 47 line = psLineAlloc(1); 48 okay = psLineInit(line); 49 ok(okay, "psLineInit. Expected true for valid psLine input"); 50 ok(line->NLINE == 1 && line->Nline == 0, "psLineInit returned line parameters."); 51 psFree(line); 52 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 53 } 23 54 24 55 25 psS32 main( psS32 argc, char* argv[] ) 26 { 27 plan_tests(12); 28 29 testLineAlloc(); 30 testLineInit(); 31 testLineAdd(); 32 testLineChk(); 33 } 34 35 psS32 testLineAlloc(void) 36 { 37 // diag("testLineAlloc"); 38 39 psLine *lineline = NULL; 40 lineline = psLineAlloc(20); 41 42 ok (lineline->NLINE==20, "psLine set NLINE parameter during Allocation"); 43 skip_start (lineline->NLINE != 20, 44 2, "psLine set NLINE parameter during Allocation"); 45 46 ok (lineline->Nline == 0, 47 "psLine set Nline parameter during Allocation\n"); 48 skip_start (lineline->Nline == 0, 49 1, "psLine set Nline parameter during Allocation\n"); 50 51 strncpy(lineline->line, "Hello World", 20); 52 ok (!strncmp(lineline->line, "Hello World", 20), 53 "psLine was stored a simple string!\n"); 54 55 skip_end(); 56 skip_end(); 57 58 psFree(lineline); 59 60 return 0; 61 } 62 63 psS32 testLineInit(void) 64 { 65 // diag("testLineInit"); 66 67 psLine *line = NULL; 68 //Return false for NULL input 69 int okay = !psLineInit(line); 70 ok (okay, "psLineInit. Expected false for NULL psLine input.\n"); 71 skip_start (!okay, 2, "psLineInit. Expected NULL psLine input.\n"); 72 73 //Allocate a line and return true on Init 74 line = psLineAlloc(1); 75 okay = psLineInit(line); 76 ok( okay, "psLineInit. Expected true for valid psLine input.\n"); 77 skip_start( !okay, 1, "psLineInit. Expected true for valid psLine input."); 78 79 ok (line->NLINE == 1 && line->Nline == 0, 80 "psLineInit returned line parameters."); 81 82 skip_end(); 83 skip_end(); 84 85 psFree(line); 86 87 return 0; 88 } 56 // testLineAdd() 57 { 58 psMemId id = psMemGetId(); 59 psLine *line = NULL; 60 //Return false for NULL input 61 ok(!psLineAdd(line, "Hello World"), 62 "psLineAdd. Expected false for NULL psLine input."); 63 //Allocate and return true for valid input. 64 line = psLineAlloc(20); 65 int okay = psLineAdd(line, "Hello %s", "World"); 66 ok( okay, "psLineAdd. Expected true for valid psLine input"); 67 ok(line->NLINE == 20 && line->Nline == 11, 68 "psLineAdd failed to return the correct line parameters"); 69 ok(!strncmp(line->line, "Hello World", 20), 70 "psLineAdd failed to store the correct line string."); 71 psFree(line); 72 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 73 } 89 74 90 75 91 psS32 testLineAdd(void) 92 { 93 // diag("testLineAdd"); 94 95 psLine *line = NULL; 96 //Return false for NULL input 97 ok (!psLineAdd(line, "Hello World"), 98 "psLineAdd. Expected false for NULL psLine input."); 99 skip_start(psLineAdd(line, "Hello World"), 100 3, "psLineAdd. Expected false for NULL psLine input."); 101 102 //Allocate and return true for valid input. 103 line = psLineAlloc(20); 104 int okay = psLineAdd(line, "Hello %s", "World"); 105 ok( okay, "psLineAdd. Expected true for valid psLine input.\n"); 106 skip_start( !okay, 2, "psLineAdd.Expected true for valid psLine input.\n"); 107 108 ok (line->NLINE == 20 && line->Nline == 11, 109 "psLineAdd failed to return the correct line parameters.\n"); 110 skip_start (line->NLINE != 20 || line->Nline != 11, 111 1,"psLineAdd failed to return the correct line parameters.\n"); 112 113 ok (!strncmp(line->line, "Hello World", 20), 114 "psLineAdd failed to store the correct line string."); 115 116 skip_end(); 117 skip_end(); 118 skip_end(); 119 120 psFree(line); 121 122 return 0; 76 // testLineChk() 77 { 78 psMemId id = psMemGetId(); 79 psLine *line = NULL; 80 //Return false for Null input line 81 ok(!psMemCheckLine(line), 82 "psMemCheckLine return false for NULL line input"); 83 line = psLineAlloc(1); 84 ok(psMemCheckLine(line), 85 "psMemCheckLine return true for valid line input"); 86 psFree(line); 87 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 88 } 123 89 } 124 125 psS32 testLineChk(void)126 {127 // diag("testLineChk");128 129 psLine *line = NULL;130 //Return false for Null input line131 ok (!psMemCheckLine(line),132 "psMemCheckLine return false for NULL line input.\n");133 skip_start (psMemCheckLine(line),134 1, "psMemCheckLine return false for NULL line input.\n");135 136 line = psLineAlloc(1);137 ok (psMemCheckLine(line),138 "psMemCheckLine return true for valid line input.\n");139 140 psFree(line);141 142 skip_end();143 144 return 0;145 } -
trunk/psLib/test/sys/tap_psMemory.c
r12513 r12781 3 3 * @brief Contains the tests for psMemory.[ch] 4 4 * 5 *6 5 * @author Robert DeSonia, MHPCC 7 6 * 8 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $9 * @date $Date: 2007-0 3-20 03:57:25$7 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2007-04-10 21:09:31 $ 10 9 * 11 10 * XXXX: Several tests fail with an Abort and are commented out. … … 42 41 psLogSetFormat("HLNM"); 43 42 psLogSetLevel(PS_LOG_INFO); 44 plan_tests(10); 45 46 void TPFreeReferencedMemory( void ); 47 if (1) { 48 TPFreeReferencedMemory(); 49 } 50 51 void TPOutOfMemory( void ); 43 plan_tests(46); 44 45 // TPFreeReferencedMemory() 46 { 47 psMemId id = psMemGetId(); 48 psS32 *mem = ( psS32* ) psAlloc( 100 * sizeof( psS32 ) ); 49 psS32 ref = psMemGetRefCounter( mem ); 50 ok(ref == 1, "buffer reference count %d.", ref ); 51 skip_start ( ref != 1, 3, "buffer reference count %d.", ref ); 52 psMemIncrRefCounter(mem); 53 psMemIncrRefCounter(mem); 54 psMemIncrRefCounter(mem); 55 56 ref = psMemGetRefCounter( mem ); 57 ok(ref == 4, "buffer reference count was %d.", ref ); 58 skip_start ( ref != 4, 2, "buffer reference count was %d.", ref ); 59 60 psMemDecrRefCounter( mem ); 61 psMemDecrRefCounter( mem ); 62 63 ref = psMemGetRefCounter( mem ); 64 ok(ref == 2, "Found buffer reference count to be %d.", ref ); 65 skip_start ( ref != 2, 1, "Found buffer reference count to be %d.", ref ); 66 67 psMemDecrRefCounter( mem ); 68 ref = psMemGetRefCounter( mem ); 69 ok(ref == 1, "Found buffer reference count to be %d.", ref ); 70 skip_end(); 71 skip_end(); 72 skip_end(); 73 psFree(mem); 74 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 75 } 76 77 78 // Upon requesting more memory than is available, psalloc shall call 79 // the psMemExhaustedCallback. 52 80 // XXXX: Skipping TPOutOfMemory() because of test abort failure 53 81 if (0) { 54 TPOutOfMemory(); 55 } 56 57 void TPReallocOutOfMemory( void ); 82 psMemId id = psMemGetId(); 83 psS32 *mem[ 100 ]; 84 psMemExhaustedCallback cb; 85 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 86 mem[ lcv ] = NULL; 87 } 88 exhaustedCallbackCalled = 0; 89 cb = psMemExhaustedCallbackSet( TPOutOfMemoryExhaustedCallback ); 90 #ifdef COMMENTED_OUT 91 // Don't include since intentionally aborts 92 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 93 mem[ lcv ] = ( psS32* ) psAlloc( SIZE_MAX/2 - 1000 ); 94 } 95 psMemExhaustedCallbackSet( cb ); 96 ok(exhaustedCallbackCalled != 0, 97 "Called psAlloc with HUGE memory requirement and survived!"); 98 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 99 psFree( mem[ lcv ] ); 100 } 101 #endif 102 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 103 } 104 105 106 107 // Bug/Task #562 regression test. Upon requesting more memory than is available, 108 // psRealloc shall call the psMemExhaustedCallback. 58 109 // XXXX: Skipping TPReallocOutOfMemory() because of test abort failure 59 110 if (0) { 60 TPReallocOutOfMemory(); 61 } 62 63 void TPCheckBufferPositive( void ); 64 if (1) { 65 TPCheckBufferPositive(); 66 } 67 68 void TPrealloc( void ); 69 if (1) { 70 TPrealloc(); 71 } 72 73 void TPallocCallback( void ); 74 if (1) { 75 TPallocCallback(); 76 } 77 78 void TPcheckLeaks( void ); 111 psMemId id = psMemGetId(); 112 psS32 *mem[ 100 ]; 113 psMemExhaustedCallback cb; 114 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 115 mem[ lcv ] = NULL; 116 } 117 exhaustedCallbackCalled = 0; 118 cb = psMemExhaustedCallbackSet( TPOutOfMemoryExhaustedCallback ); 119 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 120 mem[ lcv ] = ( psS32* ) psAlloc( 10 ); 121 } 122 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 123 mem[ lcv ] = ( psS32* ) psRealloc( mem[ lcv ], SIZE_MAX/2 - 1000 ); 124 } 125 psMemExhaustedCallbackSet( cb ); 126 ok(exhaustedCallbackCalled != 0, 127 "Called psRealloc with HUGE memory requirement and survived in %s!", __func__ ); 128 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 129 psFree( mem[ lcv ] ); 130 } 131 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 132 } 133 134 135 // psAlloc shall allocate memory blocks writeable by caller. 136 { 137 psMemId id = psMemGetId(); 138 const psS32 size = 100; 139 psS32 *mem = ( psS32* ) psAlloc( size * sizeof( psS32 ) ); 140 ok(mem != NULL, "psAlloc returned non-NULL value" ); 141 for ( psS32 index = 0;index < size;index++ ) { 142 mem[ index ] = index; 143 } 144 psS32 failed = 0; 145 for ( psS32 index = 0;index < size;index++ ) { 146 if ( mem[ index ] != index ) { 147 failed++; 148 } 149 } 150 ok(failed == 0, "mem legit" ); 151 psFree( mem ); 152 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 153 } 154 155 156 // psRealloc shall increase/decrease memory buffer while preserving contents 157 { 158 psMemId id = psMemGetId(); 159 const psS32 initialSize = 100; 160 // allocate buffer with known values. 161 psS32 *mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 162 psS32 *mem2 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 163 psS32 *mem3 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 164 for ( psS32 lcv = 0;lcv < initialSize;lcv++ ) { 165 mem1[lcv] = mem2[lcv] = mem3[lcv] = lcv; 166 } 167 psMemCheckCorruption(stderr, false); 168 // realloc to 2x 169 mem1 = ( psS32* ) psRealloc( mem1, 2 * initialSize * sizeof( psS32 ) ); 170 mem2 = ( psS32* ) psRealloc( mem2, 2 * initialSize * sizeof( psS32 ) ); 171 mem3 = ( psS32* ) psRealloc( mem3, 2 * initialSize * sizeof( psS32 ) ); 172 // check values of initial block 173 int error = 0; 174 for ( psS32 i = 0;i < initialSize;i++ ) { 175 if ( mem1[ i ] != i || mem2[ i ] != i || mem3[ i ] != i ) { 176 error = 1; 177 break; 178 } 179 } 180 ok(error==0, "Realloc preserve the contents with expanding buffer"); 181 psMemCheckCorruption(stderr, false); 182 // realloc to 1/2 initial value. 183 mem1 = ( psS32* ) psRealloc( mem1, ( initialSize / 2 ) * sizeof( psS32 ) ); 184 mem2 = ( psS32* ) psRealloc( mem2, ( initialSize / 2 ) * sizeof( psS32 ) ); 185 mem3 = ( psS32* ) psRealloc( mem3, ( initialSize / 2 ) * sizeof( psS32 ) ); 186 // check values of initial block 187 error = 0; 188 for ( psS32 i = 0;i < initialSize / 2;i++ ) { 189 if ( mem1[ i ] != i || mem2[ i ] != i || mem3[ i ] != i ) { 190 error = 1; 191 break; 192 } 193 } 194 ok(error==0, "Realloc preserved the contents with shrinking buffer"); 195 psFree( mem1 ); 196 psFree( mem2 ); 197 psFree( mem3 ); 198 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 199 } 200 201 202 // TPallocCallback() 203 { 204 psMemId id = psMemGetId(); 205 psS32 currentId = psMemGetId(); 206 const psS32 initialSize = 100; 207 psS32 mark; 208 allocCallbackCalled = 0; 209 freeCallbackCalled = 0; 210 psMemAllocCallbackSet( memAllocCallback ); 211 psMemFreeCallbackSet( memFreeCallback ); 212 psMemAllocCallbackSetID( currentId + 1 ); 213 psMemFreeCallbackSetID( currentId + 1 ); 214 // allocate buffer with known values. 215 psS32 *mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 216 psS32 *mem2 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 217 psS32 *mem3 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 218 psFree(mem1); 219 psFree(mem2); 220 psFree(mem3); 221 ok(allocCallbackCalled == 2 && freeCallbackCalled == 2, 222 "alloc/free callbacks called the proper number of times" ); 223 allocCallbackCalled = 0; 224 freeCallbackCalled = 0; 225 mark = psMemGetId(); 226 mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 227 psMemAllocCallbackSetID( mark ); 228 mem1 = ( psS32* ) psRealloc( mem1, initialSize * 2 * sizeof( psS32 ) ); 229 psFree( mem1 ); 230 ok(allocCallbackCalled == 2, 231 "realloc callbacks were called the proper number of times" ); 232 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 233 } 234 235 236 // TPcheckLeaks() 79 237 // XXXX: Skipping TPcheckLeaks() because of test abort failure 80 238 if (0) { 81 TPcheckLeaks(); 82 } 239 const psS32 numBuffers = 5; 240 psS32* buffers[ 5 ]; 241 psS32 lcv; 242 psS32 currentId = psMemGetId(); 243 psMemBlock** blks; 244 psS32 nLeaks = 0; 245 psS32 lineMark = 0; 246 247 for ( lcv = 0;lcv < numBuffers;lcv++ ) { 248 lineMark = __LINE__ + 1; 249 buffers[ lcv ] = psAlloc( sizeof( psS32 ) ); 250 } 251 for ( lcv = 1;lcv < numBuffers;lcv++ ) { 252 psFree( buffers[ lcv ] ); 253 } 254 nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false ); 255 ok(nLeaks == 1, "psMemCheckLeaks found %d leaks", nLeaks ); 256 ok(blks[ 0 ] ->lineno == lineMark, 257 "psMemCheckLeaks found a leak other than the expected one (line %d vs %d)", lineMark, blks[ 0 ] ->lineno ); 258 psFree( buffers[ 0 ] ); 259 psFree( blks ); 260 psMemCheckLeaks(currentId,NULL,stderr, false); 261 for ( lcv = 0;lcv < numBuffers;lcv++ ) { 262 lineMark = __LINE__ + 1; 263 buffers[ lcv ] = psAlloc( sizeof( psS32 ) ); 264 } 265 for ( lcv = 0;lcv < numBuffers - 1;lcv++ ) { 266 psFree( buffers[ lcv ] ); 267 } 268 nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false ); 269 ok(nLeaks == 1, "psMemCheckLeaks found %d leaks.", nLeaks ); 270 ok(blks[ 0 ] ->lineno == lineMark, "psMemCheckLeaks found leaks"); 271 psFree( buffers[ 4 ] ); 272 psFree( blks ); 273 for ( lcv = 0;lcv < numBuffers;lcv++ ) { 274 lineMark = __LINE__ + 1; 275 buffers[ lcv ] = psAlloc( sizeof( psS32 ) ); 276 } 277 for ( lcv = 0;lcv < numBuffers;lcv++ ) { 278 if ( lcv % 2 == 0 ) { 279 psFree( buffers[ lcv ] ); 280 } 281 } 282 nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false ); 283 ok(nLeaks == 2, "psMemCheckLeaks found %d leaks.", nLeaks); 284 ok(blks[ 0 ] ->lineno == lineMark, 285 "psMemCheckLeaks found a leak other than the expected." ); 286 psFree(blks); 287 psFree(buffers[1]); 288 psFree(buffers[3]); 289 } 290 83 291 84 292 void TPmultipleFree( void ); … … 87 295 TPmultipleFree(); 88 296 } 89 } 90 91 // Testpoint #449, psAlloc shall allocate memory blocks writeable by caller. 92 void TPCheckBufferPositive( void ) 93 { 94 // diag("TPCheckBufferPositive"); 95 96 psS32 * mem; 97 const psS32 size = 100; 98 psS32 failed = 0; 99 100 mem = ( psS32* ) psAlloc( size * sizeof( psS32 ) ); 101 ok ( mem != NULL, "psAlloc returned non-NULL value" ); 102 103 for ( psS32 index = 0;index < size;index++ ) { 104 mem[ index ] = index; 105 } 106 107 for ( psS32 index = 0;index < size;index++ ) { 108 if ( mem[ index ] != index ) { 109 failed++; 110 } 111 } 112 ok( failed == 0, "mem legit" ); 113 114 psFree( mem ); 115 } 116 117 void TPFreeReferencedMemory( void ) 118 { 119 // diag("TPFreeReferencedMemory"); 120 121 // create memory 122 psS32 * mem; 123 psS32 ref = 0; 124 125 mem = ( psS32* ) psAlloc( 100 * sizeof( psS32 ) ); 126 127 ref = psMemGetRefCounter( mem ); 128 ok ( ref == 1, "buffer reference count %d.", ref ); 129 skip_start ( ref != 1, 3, "buffer reference count %d.", ref ); 130 131 psMemIncrRefCounter( mem ); 132 psMemIncrRefCounter( mem ); 133 psMemIncrRefCounter( mem ); 134 135 ref = psMemGetRefCounter( mem ); 136 ok ( ref == 4, "buffer reference count was %d.", ref ); 137 skip_start ( ref != 4, 2, "buffer reference count was %d.", ref ); 138 139 psMemDecrRefCounter( mem ); 140 psMemDecrRefCounter( mem ); 141 142 ref = psMemGetRefCounter( mem ); 143 ok ( ref == 2, "Found buffer reference count to be %d.", ref ); 144 skip_start ( ref != 2, 1, "Found buffer reference count to be %d.", ref ); 145 146 psMemDecrRefCounter( mem ); 147 148 ref = psMemGetRefCounter( mem ); 149 ok ( ref == 1, "Found buffer reference count to be %d.", ref ); 150 151 skip_end(); 152 skip_end(); 153 skip_end(); 154 155 psFree( mem ); 156 } 157 158 // Bug/Task #562 regression test. Upon requesting more memory than is available, psRealloc shall call 159 // the psMemExhaustedCallback. 160 void TPReallocOutOfMemory( void ) 161 { 162 // diag("TPReallocOutOfMemory"); 163 164 psS32 * mem[ 100 ]; 165 psMemExhaustedCallback cb; 166 167 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 168 mem[ lcv ] = NULL; 169 } 170 171 exhaustedCallbackCalled = 0; 172 173 cb = psMemExhaustedCallbackSet( TPOutOfMemoryExhaustedCallback ); 174 175 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 176 mem[ lcv ] = ( psS32* ) psAlloc( 10 ); 177 } 178 179 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 180 mem[ lcv ] = ( psS32* ) psRealloc( mem[ lcv ], SIZE_MAX/2 - 1000 ); 181 } 182 183 psMemExhaustedCallbackSet( cb ); 184 185 ok ( exhaustedCallbackCalled != 0, 186 "Called psRealloc with HUGE memory requirement and survived in %s!", __func__ ); 187 188 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 189 psFree( mem[ lcv ] ); 190 } 191 } 192 193 194 // Testpoint #450, Upon requesting more memory than is available, psalloc shall call 195 // the psMemExhaustedCallback. 196 void TPOutOfMemory( void ) 197 { 198 // diag("TPOutOfMemory"); 199 200 psS32 * mem[ 100 ]; 201 psMemExhaustedCallback cb; 202 203 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 204 mem[ lcv ] = NULL; 205 } 206 207 exhaustedCallbackCalled = 0; 208 cb = psMemExhaustedCallbackSet( TPOutOfMemoryExhaustedCallback ); 209 210 #ifdef COMMENTED_OUT 211 // Don't include since intentionally aborts 212 213 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 214 mem[ lcv ] = ( psS32* ) psAlloc( SIZE_MAX/2 - 1000 ); 215 } 216 217 psMemExhaustedCallbackSet( cb ); 218 219 ok ( exhaustedCallbackCalled != 0, 220 "Called psAlloc with HUGE memory requirement and survived!"); 221 222 for ( psS32 lcv = 0; lcv < 100; lcv++ ) { 223 psFree( mem[ lcv ] ); 224 } 225 #endif 226 } 227 228 229 // Testpoint #451, psRealloc shall increase/decrease memory buffer while preserving contents 230 void TPrealloc( void ) 231 { 232 // diag("TPrealloc"); 233 234 psS32 * mem1; 235 psS32* mem2; 236 psS32* mem3; 237 const psS32 initialSize = 100; 238 239 // allocate buffer with known values. 240 mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 241 mem2 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 242 mem3 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 243 for ( psS32 lcv = 0;lcv < initialSize;lcv++ ) { 244 mem1[ lcv ] = mem2[ lcv ] = mem3[ lcv ] = lcv; 245 } 246 247 psMemCheckCorruption(stderr, false); 248 249 // realloc to 2x 250 mem1 = ( psS32* ) psRealloc( mem1, 2 * initialSize * sizeof( psS32 ) ); 251 mem2 = ( psS32* ) psRealloc( mem2, 2 * initialSize * sizeof( psS32 ) ); 252 mem3 = ( psS32* ) psRealloc( mem3, 2 * initialSize * sizeof( psS32 ) ); 253 254 // check values of initial block 255 int error = 0; 256 for ( psS32 i = 0;i < initialSize;i++ ) { 257 if ( mem1[ i ] != i || mem2[ i ] != i || mem3[ i ] != i ) { 258 error = 1; 259 break; 260 } 261 } 262 ok(error==0, "Realloc preserve the contents with expanding buffer"); 263 264 psMemCheckCorruption(stderr, false); 265 266 // realloc to 1/2 initial value. 267 mem1 = ( psS32* ) psRealloc( mem1, ( initialSize / 2 ) * sizeof( psS32 ) ); 268 mem2 = ( psS32* ) psRealloc( mem2, ( initialSize / 2 ) * sizeof( psS32 ) ); 269 mem3 = ( psS32* ) psRealloc( mem3, ( initialSize / 2 ) * sizeof( psS32 ) ); 270 271 // check values of initial block 272 error = 0; 273 for ( psS32 i = 0;i < initialSize / 2;i++ ) { 274 if ( mem1[ i ] != i || mem2[ i ] != i || mem3[ i ] != i ) { 275 error = 1; 276 break; 277 } 278 } 279 ok(error==0, "Realloc preserved the contents with shrinking buffer"); 280 281 psFree( mem1 ); 282 psFree( mem2 ); 283 psFree( mem3 ); 284 } 285 286 287 void TPallocCallback( void ) 288 { 289 // diag("TPallocCallback"); 290 291 psS32 * mem1; 292 psS32* mem2; 293 psS32* mem3; 294 psS32 currentId = psMemGetId(); 295 const psS32 initialSize = 100; 296 psS32 mark; 297 298 allocCallbackCalled = 0; 299 freeCallbackCalled = 0; 300 psMemAllocCallbackSet( memAllocCallback ); 301 psMemFreeCallbackSet( memFreeCallback ); 302 303 psMemAllocCallbackSetID( currentId + 1 ); 304 psMemFreeCallbackSetID( currentId + 1 ); 305 306 // allocate buffer with known values. 307 mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 308 mem2 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 309 mem3 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 310 311 psFree( mem1 ); 312 psFree( mem2 ); 313 psFree( mem3 ); 314 315 ok( allocCallbackCalled == 2 && freeCallbackCalled == 2, 316 "alloc/free callbacks called the proper number of times" ); 317 skip_start( allocCallbackCalled != 2 || freeCallbackCalled != 2, 318 1, "alloc/free callbacks called the proper number of times" ); 319 320 allocCallbackCalled = 0; 321 freeCallbackCalled = 0; 322 323 mark = psMemGetId(); 324 325 mem1 = ( psS32* ) psAlloc( initialSize * sizeof( psS32 ) ); 326 327 psMemAllocCallbackSetID( mark ); 328 329 mem1 = ( psS32* ) psRealloc( mem1, initialSize * 2 * sizeof( psS32 ) ); 330 331 psFree( mem1 ); 332 333 ok ( allocCallbackCalled == 2, 334 "realloc callbacks were called the proper number of times" ); 335 336 skip_end(); 337 } 338 339 340 void TPcheckLeaks( void ) 341 { 342 const psS32 numBuffers = 5; 343 psS32* buffers[ 5 ]; 344 psS32 lcv; 345 psS32 currentId = psMemGetId(); 346 psMemBlock** blks; 347 psS32 nLeaks = 0; 348 psS32 lineMark = 0; 349 350 for ( lcv = 0;lcv < numBuffers;lcv++ ) { 351 lineMark = __LINE__ + 1; 352 buffers[ lcv ] = psAlloc( sizeof( psS32 ) ); 353 } 354 355 for ( lcv = 1;lcv < numBuffers;lcv++ ) { 356 psFree( buffers[ lcv ] ); 357 } 358 359 nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false ); 360 361 ok ( nLeaks == 1, "psMemCheckLeaks found %d leaks", nLeaks ); 362 skip_start ( nLeaks != 1, 5, "psMemCheckLeaks found %d leaks", nLeaks ); 363 364 ok ( blks[ 0 ] ->lineno == lineMark, 365 "psMemCheckLeaks found a leak other than the expected one (line %d vs %d)", lineMark, blks[ 0 ] ->lineno ); 366 skip_start ( blks[ 0 ] ->lineno != lineMark, 367 4,"psMemCheckLeaks found a leak other than the expected one (line %d vs %d)", lineMark, blks[ 0 ] ->lineno ); 368 369 psFree( buffers[ 0 ] ); 370 psFree( blks ); 371 372 psMemCheckLeaks(currentId,NULL,stderr, false); 373 374 for ( lcv = 0;lcv < numBuffers;lcv++ ) { 375 lineMark = __LINE__ + 1; 376 buffers[ lcv ] = psAlloc( sizeof( psS32 ) ); 377 } 378 379 for ( lcv = 0;lcv < numBuffers - 1;lcv++ ) { 380 psFree( buffers[ lcv ] ); 381 } 382 383 nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false ); 384 385 ok ( nLeaks == 1, "psMemCheckLeaks found %d leaks.", nLeaks ); 386 skip_start ( nLeaks != 1, 3, "psMemCheckLeaks found %d leaks.", nLeaks ); 387 388 ok ( blks[ 0 ] ->lineno == lineMark, "psMemCheckLeaks found leaks"); 389 skip_start ( blks[ 0 ] ->lineno==lineMark,2,"psMemCheckLeaks found leaks"); 390 391 psFree( buffers[ 4 ] ); 392 psFree( blks ); 393 394 for ( lcv = 0;lcv < numBuffers;lcv++ ) { 395 lineMark = __LINE__ + 1; 396 buffers[ lcv ] = psAlloc( sizeof( psS32 ) ); 397 } 398 399 for ( lcv = 0;lcv < numBuffers;lcv++ ) { 400 if ( lcv % 2 == 0 ) { 401 psFree( buffers[ lcv ] ); 402 } 403 } 404 405 nLeaks = psMemCheckLeaks( currentId, &blks, stderr, false ); 406 407 ok ( nLeaks == 2, "psMemCheckLeaks found %d leaks.", nLeaks); 408 skip_start ( nLeaks != 2, 1, "psMemCheckLeaks found %d leaks.", nLeaks); 409 410 ok ( blks[ 0 ] ->lineno == lineMark, 411 "psMemCheckLeaks found a leak other than the expected." ); 412 413 skip_end(); 414 skip_end(); 415 skip_end(); 416 skip_end(); 417 skip_end(); 418 419 psFree( blks ); 420 psFree( buffers[ 1 ] ); 421 psFree( buffers[ 3 ] ); 297 298 //HERE 299 // memCheckTypes() 300 if (1) { 301 psMemId id = psMemGetId(); 302 psArray *negative = psArrayAlloc(2); 303 psMetadata *neg = psMetadataAlloc(); 304 305 psArray *array = psArrayAlloc(100); 306 int okay = psMemCheckType(PS_DATA_ARRAY,array); 307 if (!okay) { 308 psFree(array); 309 } 310 ok(okay, "psMemCheckArray in memCheckType"); 311 312 ok(!psMemCheckType(PS_DATA_ARRAY, neg), "psMemCheckType with metadata input"); 313 psFree(array); 314 315 psBitSet *bits; 316 bits = psBitSetAlloc(100); 317 okay = psMemCheckType(PS_DATA_BITSET, bits); 318 if (!okay ) 319 psFree(bits); 320 ok(okay, "psMemCheckBitSet in memCheckType"); 321 ok(!psMemCheckType(PS_DATA_BITSET, negative), "psMemCheckType on psArray"); 322 psFree(bits); 323 324 psCube *cube; 325 cube = psCubeAlloc(); 326 okay = psMemCheckType(PS_DATA_CUBE, cube); 327 if (!okay ) 328 psFree(cube); 329 ok(okay, "psMemCheckCube in memCheckType"); 330 psFree(cube); 331 332 psFits *fits; 333 fits = psFitsOpen("test.fits","w"); 334 psImage* img = psImageAlloc(16,16,PS_TYPE_F32); 335 psFitsWriteImage(fits,NULL,img,1,NULL); 336 psFree(img); 337 okay = psMemCheckType(PS_DATA_FITS, fits); 338 if (!okay ) 339 psFree(fits); 340 ok(okay, "psMemCheckFits in memCheckType"); 341 psFitsClose(fits); 342 343 psHash *hash; 344 hash = psHashAlloc(100); 345 okay = psMemCheckType(PS_DATA_HASH, hash); 346 if (!okay ) 347 psFree(hash); 348 ok(okay, "psMemCheckHash in memCheckType"); 349 psFree(hash); 350 351 psHistogram *histogram; 352 histogram = psHistogramAlloc(1.1, 2.2, 2); 353 okay = psMemCheckType(PS_DATA_HISTOGRAM, histogram); 354 if (!okay ) 355 psFree(histogram); 356 ok(okay, "psMemCheckHistogram in memCheckType"); 357 psFree(histogram); 358 359 psImage *image; 360 image = psImageAlloc(5, 5, PS_TYPE_F32); 361 okay = psMemCheckType(PS_DATA_IMAGE, image); 362 if (!okay ) 363 psFree(image); 364 ok(okay, "psMemCheckImage in memCheckType"); 365 psFree(image); 366 367 psKernel *kernel; 368 kernel = psKernelAlloc(0, 1, 0, 1); 369 okay = psMemCheckType(PS_DATA_KERNEL, kernel); 370 if (!okay ) 371 psFree(kernel); 372 ok(okay, "psMemCheckKernel in memCheckType"); 373 psFree(kernel); 374 375 psList *list; 376 list = psListAlloc(NULL); 377 okay = psMemCheckType(PS_DATA_LIST, list); 378 if (!okay ) 379 psFree(list); 380 ok(okay, "psMemCheckList in memCheckType"); 381 psFree(list); 382 383 psLookupTable *lookup; 384 char *file = "tableF32.dat"; 385 char *format = "\%f \%lf \%d \%ld"; 386 lookup = psLookupTableAlloc(file, format, 10); 387 okay = psMemCheckType(PS_DATA_LOOKUPTABLE, lookup); 388 if (!okay ) 389 psFree(lookup); 390 ok(okay, "psMemCheckLookupTable in memCheckType"); 391 psFree(lookup); 392 393 psMetadata *metadata; 394 metadata = psMetadataAlloc(); 395 okay = psMemCheckType(PS_DATA_METADATA, metadata); 396 if (!okay ) 397 psFree(metadata); 398 ok(okay, "psMemCheckMetadata in memCheckType"); 399 psFree(metadata); 400 401 psMetadataItem *metaItem; 402 metaItem = psMetadataItemAlloc("name", PS_DATA_S32, "COMMENT", 1); 403 okay = psMemCheckType(PS_DATA_METADATAITEM, metaItem); 404 if (!okay ) 405 psFree(metaItem); 406 ok(okay, "psMemCheckMetadataItem in memCheckType"); 407 psFree(metaItem); 408 409 psMinimization *min; 410 min = psMinimizationAlloc(3, 0.1); 411 okay = psMemCheckType(PS_DATA_MINIMIZATION, min); 412 if (!okay ) 413 psFree(min); 414 ok(okay, "psMemCheckMinimization in memCheckType"); 415 psFree(min); 416 417 psPixels *pixels; 418 pixels = psPixelsAlloc(100); 419 okay = psMemCheckType(PS_DATA_PIXELS, pixels); 420 if (!okay ) 421 psFree(pixels); 422 ok(okay, "psMemCheckPixels in memCheckType"); 423 psFree(pixels); 424 425 psPlane *plane; 426 plane = psPlaneAlloc(); 427 okay = psMemCheckType(PS_DATA_PLANE, plane); 428 if (!okay ) 429 psFree(plane); 430 ok(okay, "psMemCheckPlane in memCheckType."); 431 psFree(plane); 432 433 psPlaneDistort *planeDistort; 434 planeDistort = psPlaneDistortAlloc(1, 1, 1, 1); 435 okay = psMemCheckType(PS_DATA_PLANEDISTORT, planeDistort); 436 if (!okay ) 437 psFree(planeDistort); 438 ok(okay, "psMemCheckPlaneDistort in memCheckType."); 439 psFree(planeDistort); 440 441 psPlaneTransform *planeTransform; 442 planeTransform = psPlaneTransformAlloc(1, 1); 443 okay = psMemCheckType(PS_DATA_PLANETRANSFORM, planeTransform); 444 if (!okay ) 445 psFree(planeTransform); 446 ok(okay, "psMemCheckPlaneTransform in memCheckType"); 447 psFree(planeTransform); 448 449 psPolynomial1D *poly1; 450 poly1 = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2); 451 okay = psMemCheckType(PS_DATA_POLYNOMIAL1D, poly1); 452 if (!okay ) 453 psFree(poly1); 454 ok(okay, "psMemCheckPolynomial1D in memCheckType"); 455 psFree(poly1); 456 457 psPolynomial2D *poly2; 458 poly2 = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 2, 1); 459 okay = psMemCheckType(PS_DATA_POLYNOMIAL2D, poly2); 460 if (!okay ) 461 psFree(poly2); 462 ok(okay, "psMemCheckPolynomial2D in memCheckType"); 463 psFree(poly2); 464 465 psPolynomial3D *poly3; 466 poly3 = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 2, 1, 1); 467 okay = psMemCheckType(PS_DATA_POLYNOMIAL3D, poly3); 468 if (!okay ) 469 psFree(poly3); 470 ok(okay, "psMemCheckPolynomial3D in memCheckType"); 471 psFree(poly3); 472 473 psPolynomial4D *poly4; 474 poly4 = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 2, 1, 2, 1); 475 okay = psMemCheckType(PS_DATA_POLYNOMIAL4D, poly4); 476 if (!okay ) 477 psFree(poly4); 478 ok(okay, "psMemCheckPolynomial4D in memCheckType"); 479 psFree(poly4); 480 481 psProjection *proj; 482 proj = psProjectionAlloc(1, 1, 2.1, 2.1, PS_PROJ_TAN); 483 okay = psMemCheckType(PS_DATA_PROJECTION, proj); 484 if (!okay ) 485 psFree(proj); 486 ok(okay, "psMemCheckProjection in memCheckType."); 487 psFree(proj); 488 489 psScalar *scalar; 490 psF64 f64 = 1.1; 491 scalar = psScalarAlloc(f64, PS_TYPE_F64); 492 okay = psMemCheckType(PS_DATA_SCALAR, scalar); 493 if (!okay ) 494 psFree(scalar); 495 ok(okay, "psMemCheckScalar in memCheckType"); 496 psFree(scalar); 497 498 psSphere *sphere; 499 sphere = psSphereAlloc(); 500 okay = psMemCheckType(PS_DATA_SPHERE, sphere); 501 if (!okay ) 502 psFree(sphere); 503 ok(okay, "psMemCheckSphere in memCheckType"); 504 psFree(sphere); 505 506 psSphereRot *sphereRot; 507 sphereRot = psSphereRotAlloc(0, 0, 20); 508 okay = psMemCheckType(PS_DATA_SPHEREROT, sphereRot); 509 if (!okay ) 510 psFree(sphereRot); 511 ok(okay, "psMemCheckSphereRot in memCheckType"); 512 psFree(sphereRot); 513 514 psSpline1D *spline; 515 spline = psSpline1DAlloc(2, 1, 0, 2); 516 okay = psMemCheckType(PS_DATA_SPLINE1D, spline); 517 if (!okay ) 518 psFree(spline); 519 ok(okay, "psMemCheckSpline1D in memCheckType"); 520 psFree(spline); 521 522 psStats *stats; 523 stats = psStatsAlloc(PS_STAT_MAX); 524 okay = psMemCheckType(PS_DATA_STATS, stats); 525 if (!okay ) 526 psFree(stats); 527 ok(okay, "psMemCheckStats in memCheckType"); 528 psFree(stats); 529 530 psTime *time; 531 time = psTimeAlloc(PS_TIME_UT1); 532 okay = psMemCheckType(PS_DATA_TIME, time); 533 if (!okay ) 534 psFree(time); 535 ok(okay, "psMemCheckTime in memCheckType"); 536 psFree(time); 537 538 psVector *vector; 539 vector = psVectorAlloc(100, PS_TYPE_F32); 540 okay = psMemCheckType(PS_DATA_VECTOR, vector); 541 ok(okay, "psMemCheckVector in memCheckType"); 542 psFree(vector); 543 psFree(negative); 544 psFree(neg); 545 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 546 } 422 547 } 423 548 … … 455 580 psFree( buffer ); 456 581 457 ok (corruptions == 1,582 ok(corruptions == 1, 458 583 "Expected one memory corruption but found %d", corruptions ); 459 skip_start ( corruptions != 1, 460 1, "Expected one memory corruption but found %d", corruptions ); 461 462 ok ( problemCallbackCalled == 1, "The memProblemCallback was invoked" ); 463 464 skip_end(); 584 ok(problemCallbackCalled == 1, "The memProblemCallback was invoked" ); 465 585 } 466 586 #endif … … 500 620 } 501 621 502 psS32 memCheckTypes( void ) 503 { 504 psArray *negative; 505 negative = psArrayAlloc(2); 506 psMetadata *neg; 507 neg = psMetadataAlloc(); 508 509 psArray *array; 510 array = psArrayAlloc(100); 511 int okay = psMemCheckType(PS_DATA_ARRAY,array); 512 if ( ! okay ) 513 psFree(array); 514 ok ( okay, "psMemCheckArray in memCheckType"); 515 skip_start( ! okay, 28, "psMemCheckArray in memCheckType"); 516 517 ok ( psMemCheckType(PS_DATA_ARRAY, neg), "psMemCheckArray in memCheckType"); 518 psFree(array); 519 520 psBitSet *bits; 521 bits = psBitSetAlloc(100); 522 okay = psMemCheckType(PS_DATA_BITSET, bits); 523 if ( ! okay ) 524 psFree(bits); 525 ok ( okay, "psMemCheckBitSet in memCheckType"); 526 skip_start ( !okay, 27, "psMemCheckBitSet in memCheckType"); 527 528 ok ( psMemCheckType(PS_DATA_BITSET, negative), 529 "psMemCheckBitSet in memCheckType"); 530 psFree(bits); 531 532 psCube *cube; 533 cube = psCubeAlloc(); 534 okay = psMemCheckType(PS_DATA_CUBE, cube); 535 if ( ! okay ) 536 psFree(cube); 537 ok ( okay, "psMemCheckCube in memCheckType"); 538 skip_start ( !okay, 26, "psMemCheckCube in memCheckType"); 539 psFree(cube); 540 541 psFits *fits; 542 fits = psFitsOpen("test.fits","w"); 543 psImage* img = psImageAlloc(16,16,PS_TYPE_F32); 544 psFitsWriteImage(fits,NULL,img,1,NULL); 545 psFree(img); 546 okay = psMemCheckType(PS_DATA_FITS, fits); 547 if ( ! okay ) 548 psFree(fits); 549 ok ( okay, "psMemCheckFits in memCheckType"); 550 skip_start ( !okay, 25,"psMemCheckFits in memCheckType"); 551 psFitsClose(fits); 552 553 psHash *hash; 554 hash = psHashAlloc(100); 555 okay = psMemCheckType(PS_DATA_HASH, hash); 556 if ( ! okay ) 557 psFree(hash); 558 ok ( okay, "psMemCheckHash in memCheckType"); 559 skip_start ( !okay, 24, "psMemCheckHash in memCheckType"); 560 psFree(hash); 561 562 psHistogram *histogram; 563 histogram = psHistogramAlloc(1.1, 2.2, 2); 564 okay = psMemCheckType(PS_DATA_HISTOGRAM, histogram); 565 if ( ! okay ) 566 psFree(histogram); 567 ok ( okay, "psMemCheckHistogram in memCheckType"); 568 skip_start ( !okay, 23, "psMemCheckHistogram in memCheckType"); 569 psFree(histogram); 570 571 psImage *image; 572 image = psImageAlloc(5, 5, PS_TYPE_F32); 573 okay = psMemCheckType(PS_DATA_IMAGE, image); 574 if ( ! okay ) 575 psFree(image); 576 ok ( okay, "psMemCheckImage in memCheckType"); 577 skip_start ( !okay, 22, "psMemCheckImage in memCheckType"); 578 psFree(image); 579 580 psKernel *kernel; 581 kernel = psKernelAlloc(0, 1, 0, 1); 582 okay = psMemCheckType(PS_DATA_KERNEL, kernel); 583 if ( ! okay ) 584 psFree(kernel); 585 ok ( okay, "psMemCheckKernel in memCheckType"); 586 skip_start ( !okay, 21, "psMemCheckKernel in memCheckType"); 587 psFree(kernel); 588 589 psList *list; 590 list = psListAlloc(NULL); 591 okay = psMemCheckType(PS_DATA_LIST, list); 592 if ( ! okay ) 593 psFree(list); 594 ok ( okay, "psMemCheckList in memCheckType"); 595 skip_start ( !okay, 20, "psMemCheckList in memCheckType"); 596 psFree(list); 597 598 psLookupTable *lookup; 599 char *file = "tableF32.dat"; 600 char *format = "\%f \%lf \%d \%ld"; 601 lookup = psLookupTableAlloc(file, format, 10); 602 okay = psMemCheckType(PS_DATA_LOOKUPTABLE, lookup); 603 if ( ! okay ) 604 psFree(lookup); 605 ok ( okay, "psMemCheckLookupTable in memCheckType"); 606 skip_start ( !okay, 19, "psMemCheckLookupTable in memCheckType"); 607 psFree(lookup); 608 609 psMetadata *metadata; 610 metadata = psMetadataAlloc(); 611 okay = psMemCheckType(PS_DATA_METADATA, metadata); 612 if ( ! okay ) 613 psFree(metadata); 614 ok ( okay, "psMemCheckMetadata in memCheckType"); 615 skip_start ( !okay, 18, "psMemCheckMetadata in memCheckType"); 616 psFree(metadata); 617 618 psMetadataItem *metaItem; 619 metaItem = psMetadataItemAlloc("name", PS_DATA_S32, "COMMENT", 1); 620 okay = psMemCheckType(PS_DATA_METADATAITEM, metaItem); 621 if ( ! okay ) 622 psFree(metaItem); 623 ok ( okay, "psMemCheckMetadataItem in memCheckType"); 624 skip_start ( !okay, 17, "psMemCheckMetadataItem in memCheckType"); 625 psFree(metaItem); 626 627 psMinimization *min; 628 min = psMinimizationAlloc(3, 0.1); 629 okay = psMemCheckType(PS_DATA_MINIMIZATION, min); 630 if ( ! okay ) 631 psFree(min); 632 ok ( okay, "psMemCheckMinimization in memCheckType"); 633 skip_start ( !okay, 16, "psMemCheckMinimization in memCheckType"); 634 psFree(min); 635 636 psPixels *pixels; 637 pixels = psPixelsAlloc(100); 638 okay = psMemCheckType(PS_DATA_PIXELS, pixels); 639 if ( ! okay ) 640 psFree(pixels); 641 ok ( okay, "psMemCheckPixels in memCheckType"); 642 skip_start ( !okay, 15, "psMemCheckPixels in memCheckType"); 643 psFree(pixels); 644 645 psPlane *plane; 646 plane = psPlaneAlloc(); 647 okay = psMemCheckType(PS_DATA_PLANE, plane); 648 if ( ! okay ) 649 psFree(plane); 650 ok ( okay, "psMemCheckPlane in memCheckType."); 651 skip_start ( !okay, 14, "psMemCheckPlane in memCheckType."); 652 psFree(plane); 653 654 psPlaneDistort *planeDistort; 655 planeDistort = psPlaneDistortAlloc(1, 1, 1, 1); 656 okay = psMemCheckType(PS_DATA_PLANEDISTORT, planeDistort); 657 if ( ! okay ) 658 psFree(planeDistort); 659 ok ( okay, "psMemCheckPlaneDistort in memCheckType."); 660 skip_start ( !okay, 13, "psMemCheckPlaneDistort in memCheckType."); 661 psFree(planeDistort); 662 663 psPlaneTransform *planeTransform; 664 planeTransform = psPlaneTransformAlloc(1, 1); 665 okay = psMemCheckType(PS_DATA_PLANETRANSFORM, planeTransform); 666 if ( ! okay ) 667 psFree(planeTransform); 668 ok ( okay, "psMemCheckPlaneTransform in memCheckType"); 669 skip_start ( !okay, 12, "psMemCheckPlaneTransform in memCheckType"); 670 psFree(planeTransform); 671 672 psPolynomial1D *poly1; 673 poly1 = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 2); 674 okay = psMemCheckType(PS_DATA_POLYNOMIAL1D, poly1); 675 if ( ! okay ) 676 psFree(poly1); 677 ok ( okay, "psMemCheckPolynomial1D in memCheckType"); 678 skip_start ( !okay, 11, "psMemCheckPolynomial1D in memCheckType"); 679 psFree(poly1); 680 681 psPolynomial2D *poly2; 682 poly2 = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 2, 1); 683 okay = psMemCheckType(PS_DATA_POLYNOMIAL2D, poly2); 684 if ( ! okay ) 685 psFree(poly2); 686 ok ( okay, "psMemCheckPolynomial2D in memCheckType"); 687 skip_start ( !okay, 10, "psMemCheckPolynomial2D in memCheckType"); 688 psFree(poly2); 689 690 psPolynomial3D *poly3; 691 poly3 = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 2, 1, 1); 692 okay = psMemCheckType(PS_DATA_POLYNOMIAL3D, poly3); 693 if ( ! okay ) 694 psFree(poly3); 695 ok ( okay, "psMemCheckPolynomial3D in memCheckType"); 696 skip_start ( !okay, 9, "psMemCheckPolynomial3D in memCheckType"); 697 psFree(poly3); 698 699 psPolynomial4D *poly4; 700 poly4 = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 2, 1, 2, 1); 701 okay = psMemCheckType(PS_DATA_POLYNOMIAL4D, poly4); 702 if ( ! okay ) 703 psFree(poly4); 704 ok ( okay, "psMemCheckPolynomial4D in memCheckType"); 705 skip_start ( !okay, 8, "psMemCheckPolynomial4D in memCheckType"); 706 psFree(poly4); 707 708 psProjection *proj; 709 proj = psProjectionAlloc(1, 1, 2.1, 2.1, PS_PROJ_TAN); 710 okay = psMemCheckType(PS_DATA_PROJECTION, proj); 711 if ( ! okay ) 712 psFree(proj); 713 ok ( okay, "psMemCheckProjection in memCheckType."); 714 skip_start ( !okay, 7, "psMemCheckProjection in memCheckType."); 715 psFree(proj); 716 717 psScalar *scalar; 718 psF64 f64 = 1.1; 719 scalar = psScalarAlloc(f64, PS_TYPE_F64); 720 okay = psMemCheckType(PS_DATA_SCALAR, scalar); 721 if ( ! okay ) 722 psFree(scalar); 723 ok ( okay, "psMemCheckScalar in memCheckType"); 724 skip_start ( !okay, 6, "psMemCheckScalar in memCheckType"); 725 psFree(scalar); 726 727 psSphere *sphere; 728 sphere = psSphereAlloc(); 729 okay = psMemCheckType(PS_DATA_SPHERE, sphere); 730 if ( ! okay ) 731 psFree(sphere); 732 ok ( okay, "psMemCheckSphere in memCheckType"); 733 skip_start ( !okay, 5, "psMemCheckSphere in memCheckType"); 734 psFree(sphere); 735 736 psSphereRot *sphereRot; 737 sphereRot = psSphereRotAlloc(0, 0, 20); 738 okay = psMemCheckType(PS_DATA_SPHEREROT, sphereRot); 739 if ( ! okay ) 740 psFree(sphereRot); 741 ok( okay, "psMemCheckSphereRot in memCheckType"); 742 skip_start( !okay, 4, "psMemCheckSphereRot in memCheckType"); 743 psFree(sphereRot); 744 745 psSpline1D *spline; 746 spline = psSpline1DAlloc(2, 1, 0, 2); 747 okay = psMemCheckType(PS_DATA_SPLINE1D, spline); 748 if ( ! okay ) 749 psFree(spline); 750 ok( okay, "psMemCheckSpline1D in memCheckType"); 751 skip_start( !okay, 3, "psMemCheckSpline1D in memCheckType"); 752 psFree(spline); 753 754 psStats *stats; 755 stats = psStatsAlloc(PS_STAT_MAX); 756 okay = psMemCheckType(PS_DATA_STATS, stats); 757 if ( ! okay ) 758 psFree(stats); 759 ok( okay, "psMemCheckStats in memCheckType"); 760 skip_start( !okay, 2, "psMemCheckStats in memCheckType"); 761 psFree(stats); 762 763 psTime *time; 764 time = psTimeAlloc(PS_TIME_UT1); 765 okay = psMemCheckType(PS_DATA_TIME, time); 766 if ( ! okay ) 767 psFree(time); 768 ok( okay, "psMemCheckTime in memCheckType"); 769 skip_start( !okay, 1, "psMemCheckTime in memCheckType"); 770 psFree(time); 771 772 psVector *vector; 773 vector = psVectorAlloc(100, PS_TYPE_F32); 774 okay = psMemCheckType(PS_DATA_VECTOR, vector); 775 ok( okay, "psMemCheckVector in memCheckType"); 776 psFree(vector); 777 778 skip_end(); 779 skip_end(); 780 skip_end(); 781 skip_end(); 782 skip_end(); 783 skip_end(); 784 skip_end(); 785 skip_end(); 786 skip_end(); 787 skip_end(); 788 skip_end(); 789 skip_end(); 790 skip_end(); 791 skip_end(); 792 skip_end(); 793 skip_end(); 794 skip_end(); 795 skip_end(); 796 skip_end(); 797 skip_end(); 798 skip_end(); 799 skip_end(); 800 skip_end(); 801 skip_end(); 802 skip_end(); 803 skip_end(); 804 skip_end(); 805 skip_end(); 806 807 psFree(negative); 808 psFree(neg); 809 810 return 0; 811 } 622 -
trunk/psLib/test/sys/tap_psString.c
r12607 r12781 20 20 * @author Eric Van Alst, MHPCC 21 21 * 22 * @version $Revision: 1. 7$ $Name: not supported by cvs2svn $23 * @date $Date: 2007-0 3-27 22:52:03$22 * @version $Revision: 1.8 $ $Name: not supported by cvs2svn $ 23 * @date $Date: 2007-04-10 21:09:31 $ 24 24 * 25 25 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 35 35 #define STR_0 "binky had a leeeetle lamb" 36 36 37 psS32 testStringCopy00(void);38 psS32 testStringCopy01(void);39 psS32 testStringCopy02(void);40 psS32 testStringCopy03(void);41 psS32 testStringCopy04(void);42 //psS32 testStringCopy05(void);43 psS32 testStringCopy06(void);44 45 psS32 testStrAppend00(void);46 psS32 testStrAppend01(void);47 psS32 testStrAppend02(void);48 psS32 testStrAppend03(void);49 50 psS32 testStrPrepend00(void);51 psS32 testStrPrepend01(void);52 psS32 testStrPrepend02(void);53 psS32 testStrPrepend03(void);54 55 psS32 testStrSplit00(void);56 psS32 testNULLStrings(void);57 psS32 testStrCheck(void);58 59 37 60 38 psS32 main( psS32 argc, char* argv[] ) 61 39 { 62 plan_tests(55); 63 64 testStringCopy00(); 65 testStringCopy01(); 66 testStringCopy02(); 67 testStringCopy03(); 68 testStringCopy04(); 69 testStringCopy06(); 70 71 testStrAppend00(); 72 testStrAppend01(); 73 testStrAppend02(); 74 testStrAppend03(); 75 76 testStrPrepend00(); 77 testStrPrepend01(); 78 testStrPrepend02(); 79 testStrPrepend03(); 80 81 testStrSplit00(); 82 testNULLStrings(); 83 testStrCheck(); 84 } 85 86 87 psS32 testStringCopy00(void) 88 { 89 // diag("testStringCopy00"); 90 91 char stringval[20] = "E R R O R"; 92 psS32 result = 0; 93 psS32 result1 = 0; 94 char *strResult; 95 96 // Test point #1 Verify string copy - psStringCopy 97 strResult = psStringCopy(stringval); 98 // Perform string compare 99 result = strcmp(strResult, stringval); 100 // Modify original string 101 stringval[0]='G'; 102 result1 = strcmp(strResult, stringval); 103 stringval[0]='E'; 104 ok ( ( result == 0 ) && ( result1 != 0), 105 "Failed test point #1 strcmp result = %d expected 0\n",result); 106 107 // Free memory allocated 108 psFree(strResult); 109 110 return 0; 111 } 112 113 114 psS32 testStringCopy01(void) 115 { 116 // diag("testStringCopy01"); 117 118 char *emptyval = ""; 119 psS32 result = 0; 120 char *strResult; 121 122 // Test point #2 Verify empty string copy - psStringCopy 123 strResult = psStringCopy(emptyval); 124 // Perform string compare 125 result = strcmp(strResult, emptyval); 126 ok ( result == 0, 127 "test point #2 strcmp result = %d expected 0\n",result); 128 129 // Free memory allocated 130 psFree(strResult); 131 132 return 0; 133 } 134 135 136 psS32 testStringCopy02(void) 137 { 138 // diag("testStringCopy02"); 139 140 psS32 result = 0; 141 psS32 result1 = 0; 142 char *strResult; 143 char stringval1[20] = "e r r o r"; 144 psS32 substringlen = 5; 145 char *substringval = "e r r"; 146 147 // Test point #3 Verify string copy with length - psStringNCopy 148 strResult = psStringNCopy(stringval1, substringlen); 149 // Perform string compare and get string length 150 result = strncmp(strResult, substringval, substringlen); 151 // Change original string 152 stringval1[0] = 'g'; 153 result1 = strncmp(strResult, substringval, substringlen); 154 ok ( ( result == 0 ) && ( result1 == 0 ), 155 "Failed test point #3 strcmp result = %d expected 0\n",result); 156 157 // Free memory allocated 158 psFree(strResult); 159 160 return 0; 161 } 162 163 psS32 testStringCopy03(void) 164 { 165 // diag("testStringCopy03"); 166 167 psS32 result = 0; 168 psS32 result1 = 0; 169 char *strResult; 170 char *stringvalnocopy = "F A I L"; 171 172 // Test point #4 Verify empty string copy with length - psStringNCopy 173 strResult = psStringNCopy(stringvalnocopy, 0); 174 // Perform string compare and get sting length 175 result = strcmp(strResult, stringvalnocopy); 176 result1 = strlen(strResult); 177 ok ( result != 0, 178 "test point #4 strcmp result = %d didn't expected %d\n",result,0); 179 180 // Free memory 181 psFree(strResult); 182 183 return 0; 184 } 185 186 psS32 testStringCopy04(void) 187 { 188 // diag("testStringCopy04"); 189 190 psS32 result = 0; 191 psS32 result1 = 0; 192 char *strResult; 193 char stringval[20] = "E R R O R"; 194 psS32 increaseSize = 5; 195 196 // Test point #5 Copy string to larger string - psStringNCopy 197 strResult = psStringNCopy(stringval, (strlen(stringval) + increaseSize)); 198 // Perform string compare and get string length 199 result = strcmp(strResult, stringval); 200 result1 = strlen(strResult); 201 // The strings should still compare 202 ok ( result == 0 && result1 == strlen(stringval), 203 "test point #5 strcmp result = %d expected %d\n",result,0); 204 205 // Free memory 206 psFree(strResult); 207 208 return 0; 209 } 40 psLogSetFormat("HLNM"); 41 psLogSetLevel(PS_LOG_INFO); 42 plan_tests(72); 43 44 45 //testStringCopy00() 46 { 47 psMemId id = psMemGetId(); 48 char stringval[20] = "E R R O R"; 49 psS32 result = 0; 50 psS32 result1 = 0; 51 char *strResult; 52 53 // Test point #1 Verify string copy - psStringCopy 54 strResult = psStringCopy(stringval); 55 // Perform string compare 56 result = strcmp(strResult, stringval); 57 // Modify original string 58 stringval[0]='G'; 59 result1 = strcmp(strResult, stringval); 60 stringval[0]='E'; 61 ok(( result == 0 ) && ( result1 != 0), 62 "Failed test point #1 strcmp result = %d expected 0",result); 63 // Free memory allocated 64 psFree(strResult); 65 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 66 } 67 68 69 // testStringCopy01() 70 { 71 psMemId id = psMemGetId(); 72 char *emptyval = ""; 73 psS32 result = 0; 74 char *strResult; 75 76 // Test point #2 Verify empty string copy - psStringCopy 77 strResult = psStringCopy(emptyval); 78 // Perform string compare 79 result = strcmp(strResult, emptyval); 80 ok(result == 0, 81 "test point #2 strcmp result = %d expected 0",result); 82 // Free memory allocated 83 psFree(strResult); 84 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 85 } 86 87 88 // testStringCopy02() 89 { 90 psMemId id = psMemGetId(); 91 psS32 result = 0; 92 psS32 result1 = 0; 93 char *strResult; 94 char stringval1[20] = "e r r o r"; 95 psS32 substringlen = 5; 96 char *substringval = "e r r"; 97 98 // Test point #3 Verify string copy with length - psStringNCopy 99 strResult = psStringNCopy(stringval1, substringlen); 100 // Perform string compare and get string length 101 result = strncmp(strResult, substringval, substringlen); 102 // Change original string 103 stringval1[0] = 'g'; 104 result1 = strncmp(strResult, substringval, substringlen); 105 ok(( result == 0 ) && ( result1 == 0 ), 106 "Failed test point #3 strcmp result = %d expected 0",result); 107 psFree(strResult); 108 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 109 } 110 111 112 // testStringCopy03() 113 { 114 psMemId id = psMemGetId(); 115 psS32 result = 0; 116 psS32 result1 = 0; 117 char *strResult; 118 char *stringvalnocopy = "F A I L"; 119 120 // Test point #4 Verify empty string copy with length - psStringNCopy 121 strResult = psStringNCopy(stringvalnocopy, 0); 122 // Perform string compare and get sting length 123 result = strcmp(strResult, stringvalnocopy); 124 result1 = strlen(strResult); 125 ok(result != 0, 126 "test point #4 strcmp result = %d didn't expected %d",result,0); 127 psFree(strResult); 128 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 129 } 130 131 132 // testStringCopy04() 133 { 134 psMemId id = psMemGetId(); 135 psS32 result = 0; 136 psS32 result1 = 0; 137 char *strResult; 138 char stringval[20] = "E R R O R"; 139 psS32 increaseSize = 5; 140 141 // Test point #5 Copy string to larger string - psStringNCopy 142 strResult = psStringNCopy(stringval, (strlen(stringval) + increaseSize)); 143 // Perform string compare and get string length 144 result = strcmp(strResult, stringval); 145 result1 = strlen(strResult); 146 // The strings should still compare 147 ok(result == 0 && result1 == strlen(stringval), 148 "test point #5 strcmp result = %d expected %d",result,0); 149 psFree(strResult); 150 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 151 } 210 152 211 153 // XXX This test needs to be modified to check for maximum size 212 154 // This will require a mod to psStringNCopy source to check for maximum size 213 155 // 214 //psS32 testStringCopy05( void)156 //psS32 testStringCopy05() 215 157 //{ 216 158 // char *strResult; … … 231 173 232 174 233 psS32 testStringCopy06(void) 234 { 235 // diag("testStringCopy06"); 236 237 char *strResult; 238 char stringval[20] = "E R R O R"; 239 psS32 result = 0; 240 241 // Test point #7 Verify creation of string literal - PS_STRING 242 strResult = PS_STRING(E R R O R); 243 result = strcmp(strResult, stringval); 244 ok ( result == 0, 245 "test point #7 strcmp result = %d expected %d",result,0); 246 247 // Memory should not have been allocated 248 return 0; 175 // testStringCopy06() 176 { 177 psMemId id = psMemGetId(); 178 char *strResult; 179 char stringval[20] = "E R R O R"; 180 psS32 result = 0; 181 182 // Test point #7 Verify creation of string literal - PS_STRING 183 strResult = PS_STRING(E R R O R); 184 result = strcmp(strResult, stringval); 185 ok(result == 0, 186 "test point #7 strcmp result = %d expected %d",result,0); 187 // Memory should not have been allocated 188 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 189 } 190 191 192 // testStrAppend00() 193 { 194 psMemId id = psMemGetId(); 195 char *str = psStringCopy("3.14159"); 196 psStringAppend(&str, "%d%s", 2653589, "79323846"); 197 // Test point: Verify string append 198 int result = strcmp(str, "3.14159265358979323846"); 199 ok(result == 0, "Failed test point"); 200 psFree(str); 201 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 202 } 203 204 205 // testStrAppend01() 206 { 207 psMemId id = psMemGetId(); 208 char *str=NULL; 209 // test nonsensical invocations ... 210 ssize_t sz = psStringAppend(NULL, NULL); 211 ok(sz == 0, "Failed test point"); 212 sz = psStringAppend(&str, NULL); 213 ok(sz == 0, "Failed test point"); 214 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 215 } 216 217 218 // testStrAppend02() 219 { 220 psMemId id = psMemGetId(); 221 char *str=NULL; 222 // test string creation 223 psStringAppend(&str, "%s", "fubar"); 224 int result = strcmp(str, "fubar"); 225 ok(result == 0, "Failed test point"); 226 psFree(str); 227 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 228 } 229 230 231 // testStrAppend03() 232 { 233 psMemId id = psMemGetId(); 234 char *str =psStringCopy(STR_0); 235 // test null-op 236 psStringAppend(&str, "%s", ""); 237 is_str(str, STR_0, "Failed test point"); 238 psFree(str); 239 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 240 } 241 242 243 // testStrPrepend00() 244 { 245 psMemId id = psMemGetId(); 246 char *str = psStringCopy("79323846"); 247 psStringPrepend(&str, "%s%d","3.14159", 2653589 ); 248 // Test point: Verify string append 249 int result = strcmp(str, "3.14159265358979323846"); 250 ok(result == 0, "Failed test point"); 251 psFree(str); 252 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 253 } 254 255 256 // testStrPrepend01() 257 { 258 psMemId id = psMemGetId(); 259 char *str=NULL; 260 // test nonsensical invocations ... 261 ssize_t sz = psStringPrepend(NULL, NULL); 262 ok(sz == 0, "Failed test point"); 263 sz = psStringPrepend(&str, NULL); 264 ok(sz == 0, "Failed test point"); 265 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 266 } 267 268 269 // testStrPrepend02() 270 { 271 psMemId id = psMemGetId(); 272 char *str=NULL; 273 // test string creation 274 psStringPrepend(&str, "%s", "fubar"); 275 int result = strcmp(str, "fubar"); 276 ok(result == 0, "Failed test point"); 277 psFree(str); 278 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 279 } 280 281 282 // testStrPrepend03() 283 { 284 // test null-op 285 psMemId id = psMemGetId(); 286 char *str = psStringCopy(STR_0); 287 psStringPrepend(&str, "%s", ""); 288 int result = strcmp(str, STR_0); 289 ok(result == 0, "test point str=[%s]", str); 290 psFree(str); 291 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 292 } 293 294 295 // testStrSplit00() 296 { 297 psMemId id = psMemGetId(); 298 psList *strList = NULL; 299 char str[35]; 300 char split[5]; 301 strncpy(str, "This is, a, test case, to check", 35); 302 strncpy(split, ",", 2); 303 psString psStr; 304 psString psSplit; 305 psStr = psStringCopy(str); 306 psSplit = psStringCopy(split); 307 308 //Return NULL for NULL inputs 309 strList = psStringSplit(NULL, NULL, true); 310 ok(!strList, "psStringSplit" ); 311 psFree(strList); 312 313 strList = NULL; 314 //Return empty list for NULL string input 315 strList = psStringSplit(NULL, split, true); 316 ok(!psListLength(strList), "psListLength()" ); 317 psFree(strList); 318 319 strList = NULL; 320 //Return NULL for NULL splitter input 321 strList = psStringSplit(str, NULL, true); 322 ok(!strList, "psStringSplit" ); 323 psFree(strList); 324 325 strList = NULL; 326 //Return a psList* of psStrings 327 strList = psStringSplit(str, split, true); 328 ok(strList->n == 4, 329 "psStringSplit to return the correct number of strings"); 330 ok(!strncmp((psString)(strList->head->data), "This is", 10), 331 "psStringSplit to return expected strings"); 332 ok(!strncmp((psString)(strList->head->next->data), " a", 10), 333 "psStringSplit to return expected strings"); 334 ok(!strncmp((psString)(strList->head->next->next->data), " test case",10), 335 "psStringSplit to return expected strings"); 336 ok(!strncmp((psString)(strList->head->next->next->next->data), " to check", 10), 337 "psStringSplit failed to return expected strings"); 338 339 psFree(strList); 340 //Return correct psList when using (psString, char*) 341 strList = psStringSplit(psStr, split, true); 342 ok(strList->n == 4, 343 "psStringSplit to return the correct number of strings"); 344 ok(!strncmp((psString)(strList->head->data), "This is", 10), 345 "psStringSplit to return expected strings"); 346 ok(!strncmp((psString)(strList->head->next->data), " a", 10), 347 "psStringSplit failed to return expected strings"); 348 ok(!strncmp((psString)(strList->head->next->next->data), " test case",10), 349 "psStringSplit failed to return expected strings"); 350 ok(!strncmp((psString)(strList->head->next->next->next->data), " to check", 10), 351 "psStringSplit to return expected strings"); 352 353 psFree(strList); 354 //Return correct psList when using (char*, psString) 355 strList = psStringSplit(str, psSplit, true); 356 ok(strList->n == 4, 357 "psStringSplit to return the correct number of strings"); 358 ok(!strncmp((psString)(strList->head->data), "This is", 10), 359 "psStringSplit to return expected strings"); 360 ok(!strncmp((psString)(strList->head->next->data), " a", 10), 361 "psStringSplit to return expected strings"); 362 ok(!strncmp((psString)(strList->head->next->next->data), " test case",10), 363 "psStringSplit to return expected strings"); 364 ok(!strncmp((psString)(strList->head->next->next->next->data), " to check", 10), 365 "psStringSplit to return expected strings"); 366 367 psFree(strList); 368 //Return correct psList when using (psString, psString) 369 strList = psStringSplit(psStr, psSplit, true); 370 ok(strList->n == 4, 371 "psStringSplit to return the correct number of strings"); 372 ok(!strncmp((psString)(strList->head->data), "This is", 10), 373 "psStringSplit to return expected strings"); 374 ok(!strncmp((psString)(strList->head->next->data), " a", 10), 375 "psStringSplit to return expected strings"); 376 ok(!strncmp((psString)(strList->head->next->next->data), " test case",10), 377 "psStringSplit to return expected strings"); 378 ok(!strncmp((psString)(strList->head->next->next->next->data), " to check", 10), 379 "psStringSplit to return expected strings"); 380 381 psFree(strList); 382 //Return correct psList output for string of zero length case 383 strncpy(str, "This is,, a,, test case,, to check", 35); 384 strList = psStringSplit(str, split, false); 385 ok(strList->n == 4, 386 "psStringSplit to return the correct number of strings"); 387 ok(!strncmp((psString)(strList->head->data), "This is", 10), 388 "psStringSplit to return expected strings"); 389 ok(!strncmp((psString)(strList->head->next->data), " a", 10), 390 "psStringSplit to return expected strings"); 391 ok(!strncmp((psString)(strList->head->next->next->data), " test case",10), 392 "psStringSplit to return expected strings"); 393 ok(!strncmp((psString)(strList->head->next->next->next->data), " to check", 10), 394 "psStringSplit to return expected strings"); 395 psFree(strList); 396 psFree(psStr); 397 psFree(psSplit); 398 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 399 } 400 401 402 // testNULLStrings() 403 { 404 psMemId id = psMemGetId(); 405 psString nullTest = NULL; 406 psString output = NULL; 407 ssize_t outSize = 0; 408 char** nullDest = NULL; 409 char** test = NULL; 410 //psStringCopy should return NULL for NULL input string 411 // psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message"); 412 output = psStringCopy(nullTest); 413 ok(output == NULL, "psStringCopy to return NULL for NULL input string"); 414 415 //psStringNCopy should return NULL for NULL input string 416 output = psStringNCopy(nullTest, 100); 417 ok(output == NULL, "psStringNCopy to return NULL for NULL input string"); 418 419 //psStringAppend should return 0 for NULL input destination 420 outSize = psStringAppend(nullDest, "%s", ""); 421 ok(outSize == 0, "psStringAppend to return 0 for NULL input destination"); 422 423 //psStringAppend should return 0 for NULL input format 424 outSize = psStringAppend(test, nullTest); 425 ok(outSize == 0, "psStringAppend to return 0 for NULL input format"); 426 427 //psStringPrepend should return 0 for NULL input destination 428 outSize = psStringPrepend(nullDest, " "); 429 ok(outSize == 0, "psStringPrepend to return 0 for NULL input destination"); 430 431 //psStringPrepend should return 0 for NULL input format 432 outSize = psStringPrepend(test, nullTest); 433 ok(outSize == 0, "psStringPrepend to return 0 for NULL input format"); 434 435 //psStringSplit should return empty list for NULL input string 436 psList *nullList = NULL; 437 nullList = psStringSplit(nullTest, ",", true); 438 ok(!psListLength(nullList), "psStringSplit to return NULL for NULL input string"); 439 psFree(nullList); 440 441 nullList = NULL; 442 //psStringSplit should return NULL for NULL input splitter 443 nullList = psStringSplit("Hello World", nullTest, true); 444 ok(!nullList, "psStringSplit to return NULL for NULL input splitter"); 445 psFree(nullList); 446 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 447 } 448 449 450 // testStrCheck() 451 { 452 psMemId id = psMemGetId(); 453 psString str = psStringAlloc(10); 454 strcpy(str, "Hello"); 455 ok(psMemCheckString(str), "psString allocated!"); 456 ok(psMemCheckType(PS_DATA_STRING, str), "psString allocated"); 457 psFree(str); 458 459 char charStr[10]; 460 ok(!psMemCheckType(PS_DATA_STRING, charStr), 461 "Input string is a psDataType"); 462 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 463 } 249 464 } 250 251 252 psS32 testStrAppend00(void) 253 { 254 // diag("testStrAppend00"); 255 256 char *str=NULL; 257 int result = 0; 258 259 str = psStringCopy("3.14159"); 260 261 psStringAppend(&str, "%d%s", 2653589, "79323846"); 262 263 // Test point: Verify string append 264 result = strcmp(str, "3.14159265358979323846"); 265 ok ( result == 0, "Failed test point\n"); 266 267 psFree(str); 268 269 return 0; 270 } 271 272 psS32 testStrAppend01(void) 273 { 274 // diag("testStrAppend01"); 275 276 ssize_t sz; 277 char *str=NULL; 278 279 // test nonsensical invocations ... 280 sz = psStringAppend(NULL, NULL); 281 ok ( sz == 0, "Failed test point\n"); 282 283 sz = psStringAppend(&str, NULL); 284 ok ( sz == 0, "Failed test point\n"); 285 286 return 0; 287 } 288 289 290 psS32 testStrAppend02(void) 291 { 292 // diag("testStrAppend02"); 293 294 char *str=NULL; 295 int result; 296 297 // test string creation 298 psStringAppend(&str, "%s", "fubar"); 299 result = strcmp(str, "fubar"); 300 ok ( result == 0, "Failed test point\n"); 301 302 psFree(str); 303 304 return 0; 305 } 306 307 psS32 testStrAppend03(void) 308 { 309 // diag("testStrAppend03"); 310 311 char *str =psStringCopy(STR_0); 312 313 // test null-op 314 psStringAppend(&str, "%s", ""); 315 is_str(str, STR_0, "Failed test point"); 316 psFree(str); 317 318 return 0; 319 } 320 321 322 psS32 testStrPrepend00(void) 323 { 324 // diag("testStrPrepend00"); 325 326 char *str=NULL; 327 int result = 0; 328 329 str = psStringCopy("79323846"); 330 331 psStringPrepend(&str, "%s%d","3.14159", 2653589 ); 332 333 // Test point: Verify string append 334 result = strcmp(str, "3.14159265358979323846"); 335 ok ( result == 0, "Failed test point\n"); 336 337 psFree(str); 338 339 return 0; 340 } 341 342 343 psS32 testStrPrepend01(void) 344 { 345 // diag("testStrPrepend01"); 346 347 ssize_t sz; 348 char *str=NULL; 349 350 // test nonsensical invocations ... 351 sz = psStringPrepend(NULL, NULL); 352 ok ( sz == 0, "Failed test point\n"); 353 354 sz = psStringPrepend(&str, NULL); 355 ok ( sz == 0, "Failed test point\n"); 356 357 return 0; 358 } 359 360 psS32 testStrPrepend02(void) 361 { 362 // diag("testStrPrepend02"); 363 364 char *str=NULL; 365 int result; 366 367 // test string creation 368 psStringPrepend(&str, "%s", "fubar"); 369 result = strcmp(str, "fubar"); 370 ok ( result == 0, "Failed test point\n"); 371 372 psFree(str); 373 374 return 0; 375 } 376 377 psS32 testStrPrepend03(void) 378 { 379 // diag("testStrPrepend03"); 380 381 char *str=NULL; 382 int result; 383 384 str = psStringCopy(STR_0); 385 386 // test null-op 387 psStringPrepend(&str, "%s", ""); 388 result = strcmp(str, STR_0); 389 ok ( result == 0, "test point str=[%s]\n", str); 390 391 psFree(str); 392 393 return 0; 394 } 395 396 397 psS32 testStrSplit00(void) 398 { 399 // diag("testStrSplit00"); 400 401 psList *strList = NULL; 402 char str[35]; 403 char split[5]; 404 strncpy(str, "This is, a, test case, to check.", 35); 405 strncpy(split, ",", 2); 406 psString psStr; 407 psString psSplit; 408 psStr = psStringCopy(str); 409 psSplit = psStringCopy(split); 410 411 //Return NULL for NULL inputs 412 strList = psStringSplit(NULL, NULL, true); 413 ok (!strList, "psStringSplit" ); 414 psFree(strList); 415 416 strList = NULL; 417 //Return empty list for NULL string input 418 strList = psStringSplit(NULL, split, true); 419 ok ( !psListLength(strList), "psListLength()" ); 420 psFree(strList); 421 422 strList = NULL; 423 //Return NULL for NULL splitter input 424 strList = psStringSplit(str, NULL, true); 425 ok ( !strList, "psStringSplit" ); 426 psFree(strList); 427 428 strList = NULL; 429 //Return a psList* of psStrings 430 strList = psStringSplit(str, split, true); 431 ok (strList->n == 4, 432 "psStringSplit to return the correct number of strings.\n"); 433 434 ok ( !strncmp((psString)(strList->head->data), "This is", 10), 435 "psStringSplit to return expected strings."); 436 437 ok ( !strncmp((psString)(strList->head->next->data), " a", 10), 438 "psStringSplit to return expected strings."); 439 440 ok ( !strncmp((psString)(strList->head->next->next->data), " test case",10), 441 "psStringSplit to return expected strings."); 442 443 ok ( !strncmp((psString)(strList->head->next->next->next->data), " to check.", 10), 444 "psStringSplit failed to return expected strings."); 445 446 psFree(strList); 447 //Return correct psList when using (psString, char*) 448 strList = psStringSplit(psStr, split, true); 449 ok (strList->n == 4, 450 "psStringSplit to return the correct number of strings.\n"); 451 452 ok ( !strncmp((psString)(strList->head->data), "This is", 10), 453 "psStringSplit to return expected strings."); 454 455 ok ( !strncmp((psString)(strList->head->next->data), " a", 10), 456 "psStringSplit failed to return expected strings."); 457 458 ok ( !strncmp((psString)(strList->head->next->next->data), " test case",10), 459 "psStringSplit failed to return expected strings."); 460 461 ok ( !strncmp((psString)(strList->head->next->next->next->data), " to check.", 10), 462 "psStringSplit to return expected strings."); 463 464 psFree(strList); 465 //Return correct psList when using (char*, psString) 466 strList = psStringSplit(str, psSplit, true); 467 ok (strList->n == 4, 468 "psStringSplit to return the correct number of strings.\n"); 469 470 ok ( !strncmp((psString)(strList->head->data), "This is", 10), 471 "psStringSplit to return expected strings."); 472 473 ok ( !strncmp((psString)(strList->head->next->data), " a", 10), 474 "psStringSplit to return expected strings."); 475 476 ok ( !strncmp((psString)(strList->head->next->next->data), " test case",10), 477 "psStringSplit to return expected strings."); 478 479 ok ( !strncmp((psString)(strList->head->next->next->next->data), " to check.", 10), 480 "psStringSplit to return expected strings."); 481 482 psFree(strList); 483 //Return correct psList when using (psString, psString) 484 strList = psStringSplit(psStr, psSplit, true); 485 ok (strList->n == 4, 486 "psStringSplit to return the correct number of strings.\n"); 487 488 ok ( !strncmp((psString)(strList->head->data), "This is", 10), 489 "psStringSplit to return expected strings."); 490 491 ok ( !strncmp((psString)(strList->head->next->data), " a", 10), 492 "psStringSplit to return expected strings."); 493 494 ok ( !strncmp((psString)(strList->head->next->next->data), " test case",10), 495 "psStringSplit to return expected strings."); 496 497 ok ( !strncmp((psString)(strList->head->next->next->next->data), " to check.", 10), 498 "psStringSplit to return expected strings."); 499 500 psFree(strList); 501 //Return correct psList output for string of zero length case 502 strncpy(str, "This is,, a,, test case,, to check.", 35); 503 strList = psStringSplit(str, split, false); 504 ok (strList->n == 4, 505 "psStringSplit to return the correct number of strings.\n"); 506 507 ok ( !strncmp((psString)(strList->head->data), "This is", 10), 508 "psStringSplit to return expected strings."); 509 510 ok ( !strncmp((psString)(strList->head->next->data), " a", 10), 511 "psStringSplit to return expected strings."); 512 513 ok ( !strncmp((psString)(strList->head->next->next->data), " test case",10), 514 "psStringSplit to return expected strings."); 515 516 ok ( !strncmp((psString)(strList->head->next->next->next->data), " to check.", 10), 517 "psStringSplit to return expected strings."); 518 519 psFree(strList); 520 psFree(psStr); 521 psFree(psSplit); 522 return 0; 523 } 524 525 psS32 testNULLStrings(void) 526 { 527 // diag("test""s"); 528 529 psString nullTest = NULL; 530 psString output = NULL; 531 ssize_t outSize = 0; 532 char** nullDest = NULL; 533 char** test = NULL; 534 //psStringCopy should return NULL for NULL input string 535 // psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message"); 536 output = psStringCopy(nullTest); 537 ok (output == NULL, 538 "psStringCopy to return NULL for NULL input string.\n"); 539 540 //psStringNCopy should return NULL for NULL input string 541 output = psStringNCopy(nullTest, 100); 542 ok (output == NULL, 543 "psStringNCopy to return NULL for NULL input string.\n"); 544 545 //psStringAppend should return 0 for NULL input destination 546 outSize = psStringAppend(nullDest, "%s", ""); 547 ok (outSize == 0, 548 "psStringAppend to return 0 for NULL input destination.\n"); 549 550 //psStringAppend should return 0 for NULL input format 551 outSize = psStringAppend(test, nullTest); 552 ok (outSize == 0, 553 "psStringAppend to return 0 for NULL input format.\n"); 554 555 //psStringPrepend should return 0 for NULL input destination 556 outSize = psStringPrepend(nullDest, " "); 557 ok (outSize == 0, 558 "psStringPrepend to return 0 for NULL input destination.\n"); 559 560 //psStringPrepend should return 0 for NULL input format 561 outSize = psStringPrepend(test, nullTest); 562 ok (outSize == 0, 563 "psStringPrepend to return 0 for NULL input format.\n"); 564 565 //psStringSplit should return empty list for NULL input string 566 psList *nullList = NULL; 567 nullList = psStringSplit(nullTest, ",", true); 568 ok ( !psListLength(nullList), 569 "psStringSplit to return NULL for NULL input string.\n"); 570 psFree(nullList); 571 572 nullList = NULL; 573 //psStringSplit should return NULL for NULL input splitter 574 nullList = psStringSplit("Hello World", nullTest, true); 575 ok ( !nullList, 576 "psStringSplit to return NULL for NULL input splitter.\n"); 577 psFree(nullList); 578 579 return 0; 580 } 581 582 psS32 testStrCheck(void) 583 { 584 // diag("testStrCheck"); 585 586 psString str = NULL; 587 str = psStringAlloc(10); 588 strcpy(str, "Hello"); 589 ok (psMemCheckString(str), "psString allocated!\n"); 590 591 ok (psMemCheckType(PS_DATA_STRING, str), "psString allocated!\n"); 592 psFree(str); 593 594 char charStr[10]; 595 ok (!psMemCheckType(PS_DATA_STRING, charStr), 596 "Input string is a psDataType"); 597 598 return 0; 599 } 465 // HERE -
trunk/psLib/test/sys/tap_psStringSubstitute.c
r10446 r12781 11 11 int main (void) 12 12 { 13 psLogSetFormat("HLNM"); 14 psLogSetLevel(PS_LOG_INFO); 13 15 plan_tests(16); 14 16 15 diag("psStringSubstitute() tests");16 17 17 18 // Return input for NULL key 18 19 { 20 psMemId id = psMemGetId(); 19 21 psString input = psStringCopy(ORIGINAL); 20 22 psStringSubstitute(&input, ",", NULL); 21 23 ok(input && strcmp(input, ORIGINAL) == 0, "output = %s", input); 22 24 psFree(input); 23 // ok(psMemCheckLeaks(0, NULL, stdout, false) == 0, "Memory Leaks"); 24 mem(); 25 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 25 26 } 27 26 28 27 29 // Return input for empty key 28 30 { 31 psMemId id = psMemGetId(); 29 32 psString input = psStringCopy(ORIGINAL); 30 33 psStringSubstitute(&input, "XXX", ""); 31 34 ok(input && strcmp(input, ORIGINAL) == 0, "output = %s", input); 32 35 psFree(input); 33 // ok(psMemCheckLeaks(0, NULL, stdout, false) == 0, "Memory Leaks"); 34 mem(); 36 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 35 37 } 38 36 39 37 40 // Return corrected version for NULL replace 38 41 { 42 psMemId id = psMemGetId(); 39 43 psString input = psStringCopy(ORIGINAL); 40 44 psStringSubstitute(&input, NULL, ","); 41 45 ok(input && strcmp(input, CORRECTED) == 0, "output = %s", input); 42 46 psFree(input); 43 mem();47 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 44 48 } 49 45 50 46 51 // Return corrected version for empty replace 47 52 { 53 psMemId id = psMemGetId(); 48 54 psString input = psStringCopy(ORIGINAL); 49 55 psStringSubstitute(&input, "", ","); 50 56 ok(input && strcmp(input, CORRECTED) == 0, "output = %s", input); 51 57 psFree(input); 52 mem();58 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 53 59 } 60 54 61 55 62 // Return NULL for NULL input 56 63 { 64 psMemId id = psMemGetId(); 57 65 int status = psStringSubstitute(NULL, "XXX", ","); 58 66 ok(status == 0, "status = %d", status); 59 mem();67 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 60 68 } 69 61 70 62 71 // Return emptry string for empty input 63 72 { 73 psMemId id = psMemGetId(); 64 74 psString input = psStringCopy(""); 65 75 psStringSubstitute(&input, "XXX", ","); 66 76 ok(input && strcmp(input, "") == 0, "output = %s", input); 67 77 psFree(input); 68 mem();78 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 69 79 } 80 70 81 71 82 // Change commas to bangs 72 83 { 84 psMemId id = psMemGetId(); 73 85 psString input = psStringCopy(ORIGINAL); 74 86 psStringSubstitute(&input, "!", ","); 75 87 ok(input && strcmp(input, "This is! a! test case! to check.") == 0, "output = %s", input); 76 88 psFree(input); 77 mem();89 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 78 90 } 91 79 92 80 93 // Long replacement text --- should allocate new space 81 94 { 95 psMemId id = psMemGetId(); 82 96 psString input = psStringCopy(ORIGINAL); 83 97 psStringSubstitute(&input, "; This string is too long to fit in input(35 chars)", "."); … … 86 100 "output = %s", input); 87 101 psFree(input); 88 mem();102 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 89 103 } 90 91 92 return exit_status();93 104 } -
trunk/psLib/test/sys/tap_psTrace.c
r12513 r12781 8 8 #include <fcntl.h> 9 9 #include <unistd.h> 10 11 10 #include "pslib.h" 12 11 #include "tap.h" … … 14 13 15 14 16 static psS32 testTrace00(void);17 static psS32 testTrace01(void);18 static psS32 testTrace02(void);19 static psS32 testTrace03(void);20 static psS32 testTrace04(void);21 static psS32 testTrace05(void);22 static psS32 testTrace05a(void);23 static psS32 testTrace06(void);24 static psS32 testTrace08(void);25 26 27 15 psS32 main( psS32 argc, char* argv[] ) 28 16 { 29 plan_tests(45); 30 31 testTrace00(); 32 testTrace01(); 33 testTrace02(); 34 testTrace03(); 35 testTrace04(); 36 testTrace05(); 37 testTrace05a(); 38 testTrace06(); 39 testTrace08(); 40 } 41 42 43 static psS32 testTrace00(void) 44 { 45 // diag("testTrace00"); 46 47 psS32 i; 48 psS32 lev = 0; 49 50 // psTraceSetDestination(stderr); 51 (void)psTraceSetDestination(2); 52 53 for (i=0;i<10;i++) { 54 (void)psTraceSetLevel(".", i); 55 lev = psTraceGetLevel("."); 56 ok(lev == i, "trace level was %d, actual was %d\n", i, lev); 57 } 58 59 (void)psTraceSetLevel(".", 3); 60 61 for (i=5;i<10;i++) { 62 (void)psTraceSetLevel(".NODE00", i); 63 lev = psTraceGetLevel(".NODE00"); 64 ok (lev == i,"(.NODE00) expected trace level was %d, actual was %d\n", 65 i, lev); 66 67 lev = psTraceGetLevel("."); 68 ok (lev == 3, 69 "expected trace level was %d, actual was %d\n", i, 3); 70 } 71 72 73 (void)psTraceSetLevel(".NODE00.NODE01", 4); 74 for (i=0;i<10;i++) { 75 (void)psTraceSetLevel(".NODE00.NODE01", i); 76 lev = psTraceGetLevel(".NODE00.NODE01"); 77 ok (lev == i, 78 "(.NODE00.NODE01) expected trace level was %d, actual was %d\n", 79 i, lev); 80 } 81 82 return 0; 83 } 84 85 86 static psS32 testTrace01(void) 87 { 88 // diag("testTrace01"); 89 90 // psTraceSetDestination(stderr); 91 (void)psTraceSetDestination(2); 92 (void)psTraceSetLevel(".A.B.C.D.E", 5); 93 94 psTrace(".A.C.D.C",1,"You should not see this.\n"); 95 psTrace(".A.B.C.D.E",2,"You should see this.\n"); 96 psTrace(".A.B.C.D.E.F",3,"You should see this too.\n"); 97 98 psTracePrintLevels(); 99 100 return 0; 101 } 102 103 static psS32 testTrace02(void) 104 { 105 // diag("testTrace02"); 106 107 psTraceReset(); 108 // psTraceSetDestination(stderr); 109 (void)psTraceSetDestination(2); 110 (void)psTraceSetLevel(".A.B", 2); 111 (void)psTraceSetLevel(".A.B.C.D.E", 5); 112 psTracePrintLevels(); 113 (void)psTraceSetLevel(".A.B", 10); 114 psTracePrintLevels(); 115 116 ok (10 == psTraceGetLevel(".A.B.C"), 117 ".A.B.C did not dynamically inherit a trace level (%d)\n", 118 psTraceGetLevel(".A.B.C")); 119 120 ok (10 == psTraceGetLevel(".A.B.C.D"), 121 ".A.B.C.D did not dynamically inherit a trace level (%d)\n", 122 psTraceGetLevel(".A.B.C.D")); 123 124 ok (5 == psTraceGetLevel(".A.B.C.D.E"), 125 ".A.B.C.D.E did dynamically inherit a trace level (%d)\n", 126 psTraceGetLevel(".A.B.C.D.E")); 127 128 return 0; 129 } 130 131 static psS32 testTrace03(void) 132 { 133 // diag("testTrace03"); 134 135 psS32 i = 0; 136 psS32 lev = 0; 137 138 // psTraceSetDestination(stderr); 139 (void)psTraceSetDestination(2); 140 141 for (i=0;i<10;i++) { 142 (void)psTraceSetLevel(".", i); 143 psTraceReset(); 144 145 lev = psTraceGetLevel("."); 146 ok (lev == PS_UNKNOWN_TRACE_LEVEL, 147 "expected trace level was %d, actual was %d\n", 148 PS_UNKNOWN_TRACE_LEVEL, lev); 149 } 150 151 (void)psTraceSetLevel(".", 5); 152 (void)psTraceSetLevel(".a", 4); 153 (void)psTraceSetLevel(".a.b", 3); 154 (void)psTraceSetLevel(".a.b.c", 2); 155 ok (!((5 != psTraceGetLevel(".")) || 156 (4 != psTraceGetLevel(".a")) || 157 (3 != psTraceGetLevel(".a.b")) || 158 (2 != psTraceGetLevel(".a.b.c"))), 159 "trace successFlag = false;levels were not settable?\n"); 160 161 psTraceReset(); 162 ok (!((PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".")) || 163 (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a")) || 164 (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a.b")) || 165 (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a.b.c"))), 166 "trace levels were not reset properly\n"); 167 168 return 0; 169 } 170 171 172 static psS32 testTrace04(void) 173 { 174 // diag("testTrace04"); 175 176 int FD; 177 psS32 nb = 0; 178 FD = creat("tst_psTrace02_OUT", 0666); 179 // printf("\nFD = %d\n", FD); 180 // fp = fopen("tst_psTrace02_OUT", "w"); 181 for (nb = 0 ; nb<4;nb++) { 182 if (nb == 0) 183 // psTraceSetDestination(stdout); 184 (void)psTraceSetDestination(1); 185 if (nb == 1) 186 // psTraceSetDestination(stderr); 187 (void)psTraceSetDestination(2); 188 if (nb == 2) 189 (void)psTraceSetDestination(0); //NULL 190 if (nb == 3) 191 (void)psTraceSetDestination(FD); 192 193 (void)psTraceSetLevel(".", 4); 194 psTrace(".", 5, "(0) This message should not be displayed (%x)\n", 195 0xbeefface); 196 (void)psTraceSetLevel(".", 7); 197 psTrace(".", 5, "(0) This message should be displayed (%x)\n", 198 0xbeefface); 199 17 psLogSetFormat("HLNM"); 18 psLogSetLevel(PS_LOG_INFO); 19 plan_tests(54); 20 21 // testTrace00() 22 { 23 psMemId id = psMemGetId(); 24 psS32 lev = 0; 25 (void)psTraceSetDestination(2); 26 for (int i=0;i<10;i++) { 27 (void)psTraceSetLevel(".", i); 28 lev = psTraceGetLevel("."); 29 ok(lev == i, "trace level was %d, actual was %d", i, lev); 30 } 31 32 (void)psTraceSetLevel(".", 3); 33 for (int i=5;i<10;i++) { 34 (void)psTraceSetLevel(".NODE00", i); 35 lev = psTraceGetLevel(".NODE00"); 36 ok (lev == i,"(.NODE00) expected trace level was %d, actual was %d", 37 i, lev); 38 39 lev = psTraceGetLevel("."); 40 ok (lev == 3, 41 "expected trace level was %d, actual was %d", i, 3); 42 } 43 44 (void)psTraceSetLevel(".NODE00.NODE01", 4); 45 for (int i=0;i<10;i++) { 46 (void)psTraceSetLevel(".NODE00.NODE01", i); 47 lev = psTraceGetLevel(".NODE00.NODE01"); 48 ok (lev == i, 49 "(.NODE00.NODE01) expected trace level was %d, actual was %d", 50 i, lev); 51 } 52 53 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 54 } 55 56 57 // testTrace01() 58 { 59 psMemId id = psMemGetId(); 60 (void)psTraceSetDestination(2); 61 (void)psTraceSetLevel(".A.B.C.D.E", 5); 62 psTrace(".A.C.D.C",1,"You should not see this"); 63 psTrace(".A.B.C.D.E",2,"You should see this"); 64 psTrace(".A.B.C.D.E.F",3,"You should see this too"); 65 psTracePrintLevels(); 66 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 67 } 68 69 70 // testTrace02() 71 { 72 psMemId id = psMemGetId(); 73 psTraceReset(); 74 (void)psTraceSetDestination(2); 75 (void)psTraceSetLevel(".A.B", 2); 76 (void)psTraceSetLevel(".A.B.C.D.E", 5); 77 psTracePrintLevels(); 78 (void)psTraceSetLevel(".A.B", 10); 79 psTracePrintLevels(); 80 81 ok (10 == psTraceGetLevel(".A.B.C"), 82 ".A.B.C did not dynamically inherit a trace level (%d)", 83 psTraceGetLevel(".A.B.C")); 84 85 ok (10 == psTraceGetLevel(".A.B.C.D"), 86 ".A.B.C.D did not dynamically inherit a trace level (%d)", 87 psTraceGetLevel(".A.B.C.D")); 88 89 ok (5 == psTraceGetLevel(".A.B.C.D.E"), 90 ".A.B.C.D.E did dynamically inherit a trace level (%d)", 91 psTraceGetLevel(".A.B.C.D.E")); 92 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 93 } 94 95 96 // testTrace03() 97 { 98 psMemId id = psMemGetId(); 99 (void)psTraceSetDestination(2); 100 101 for (int i=0;i<10;i++) { 102 (void)psTraceSetLevel(".", i); 103 psTraceReset(); 104 int lev = psTraceGetLevel("."); 105 ok (lev == PS_UNKNOWN_TRACE_LEVEL, 106 "expected trace level was %d, actual was %d", 107 PS_UNKNOWN_TRACE_LEVEL, lev); 108 } 109 110 (void)psTraceSetLevel(".", 5); 200 111 (void)psTraceSetLevel(".a", 4); 201 psTrace(".a", 5, "(1) This message should not be displayed (%x)\n", 202 0xbeefface); 203 (void)psTraceSetLevel(".a", 7); 204 psTrace(".a", 5, "(1) This message should be displayed (%x)\n", 205 0xbeefface); 206 207 208 (void)psTraceSetLevel(".a.b", 4); 209 psTrace(".a.b", 5, "(2) This message should not be displayed (%x)\n", 210 0xbeefface); 211 (void)psTraceSetLevel(".a.b", 7); 212 psTrace(".a.b", 5, "(2) This message should be displayed (%x)\n", 213 0xbeefface); 214 (void)psTraceSetLevel(".a.b.c", 12); 215 psTrace(".a.b.c", 11, "(3) This message should be displayed (%x)\n", 216 0xbeefface); 217 218 } 219 220 close(FD); 221 222 return(0); 223 } 224 225 static psS32 testTrace05(void) 226 { 227 // psTraceSetDestination(stderr); 228 (void)psTraceSetDestination(2); 229 230 (void)psTraceSetLevel(".", 9); 231 232 (void)psTraceSetLevel(".a", 8); 233 (void)psTraceSetLevel(".b", 7); 234 (void)psTraceSetLevel(".c", 5); 235 236 (void)psTraceSetLevel(".a.a", 4); 237 (void)psTraceSetLevel(".a.b", 3); 238 239 (void)psTraceSetLevel(".b.a", 2); 240 (void)psTraceSetLevel(".b.b", 1); 241 242 (void)psTraceSetLevel(".c.a", 0); 243 (void)psTraceSetLevel(".c.b", 3); 244 (void)psTraceSetLevel(".c.c", 5); 245 246 psTracePrintLevels(); 247 248 return 0; 249 250 } 251 252 static psS32 testTrace05a(void) 253 { 254 (void)psTraceSetLevel(".", 9); 255 256 (void)psTraceSetLevel("a", 8); 257 (void)psTraceSetLevel("b", 7); 258 (void)psTraceSetLevel("c", 5); 259 260 (void)psTraceSetLevel("a.a", 4); 261 (void)psTraceSetLevel("a.b", 3); 262 263 (void)psTraceSetLevel("b.a", 2); 264 (void)psTraceSetLevel("b.b", 1); 265 266 (void)psTraceSetLevel("c.a", 0); 267 (void)psTraceSetLevel("c.b", 3); 268 (void)psTraceSetLevel("c.c", 5); 269 270 psTracePrintLevels(); 271 272 return 0; 273 274 } 275 276 static psS32 testTrace06(void) 277 { 278 // psTraceSetDestination(stderr); 279 (void)psTraceSetDestination(2); 280 281 (void)psTraceSetLevel(".", 9); 282 283 (void)psTraceSetLevel(".a", 8); 284 (void)psTraceSetLevel(".b", 7); 285 (void)psTraceSetLevel(".c", 5); 286 287 (void)psTraceSetLevel(".a.a", 4); 288 (void)psTraceSetLevel(".a.b", 3); 289 290 (void)psTraceSetLevel(".b.a", 2); 291 (void)psTraceSetLevel(".b.b", 1); 292 293 (void)psTraceSetLevel(".c.a", 0); 294 (void)psTraceSetLevel(".c.b", 3); 295 (void)psTraceSetLevel(".c.c", 5); 296 297 psTraceReset(); 298 299 if ((psTraceGetLevel(".")!=PS_UNKNOWN_TRACE_LEVEL) || 112 (void)psTraceSetLevel(".a.b", 3); 113 (void)psTraceSetLevel(".a.b.c", 2); 114 ok (!((5 != psTraceGetLevel(".")) || 115 (4 != psTraceGetLevel(".a")) || 116 (3 != psTraceGetLevel(".a.b")) || 117 (2 != psTraceGetLevel(".a.b.c"))), 118 "trace successFlag = false;levels were not settable?"); 119 120 psTraceReset(); 121 ok (!((PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".")) || 122 (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a")) || 123 (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a.b")) || 124 (PS_UNKNOWN_TRACE_LEVEL != psTraceGetLevel(".a.b.c"))), 125 "trace levels were not reset properly"); 126 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 127 } 128 129 130 // testTrace04() 131 { 132 psMemId id = psMemGetId(); 133 int FD = creat("tst_psTrace02_OUT", 0666); 134 for (int nb = 0 ; nb<4;nb++) { 135 if (nb == 0) 136 (void)psTraceSetDestination(1); 137 if (nb == 1) 138 (void)psTraceSetDestination(2); 139 if (nb == 2) 140 (void)psTraceSetDestination(0); 141 if (nb == 3) 142 (void)psTraceSetDestination(FD); 143 144 (void)psTraceSetLevel(".", 4); 145 psTrace(".", 5, "(0) This message should not be displayed (%x)", 146 0xbeefface); 147 (void)psTraceSetLevel(".", 7); 148 psTrace(".", 5, "(0) This message should be displayed (%x)", 149 0xbeefface); 150 151 (void)psTraceSetLevel(".a", 4); 152 psTrace(".a", 5, "(1) This message should not be displayed (%x)", 153 0xbeefface); 154 (void)psTraceSetLevel(".a", 7); 155 psTrace(".a", 5, "(1) This message should be displayed (%x)", 156 0xbeefface); 157 158 (void)psTraceSetLevel(".a.b", 4); 159 psTrace(".a.b", 5, "(2) This message should not be displayed (%x)", 160 0xbeefface); 161 (void)psTraceSetLevel(".a.b", 7); 162 psTrace(".a.b", 5, "(2) This message should be displayed (%x)", 163 0xbeefface); 164 (void)psTraceSetLevel(".a.b.c", 12); 165 psTrace(".a.b.c", 11, "(3) This message should be displayed (%x)", 166 0xbeefface); 167 } 168 close(FD); 169 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 170 } 171 172 173 // testTrace05() 174 { 175 psMemId id = psMemGetId(); 176 (void)psTraceSetDestination(2); 177 (void)psTraceSetLevel(".", 9); 178 (void)psTraceSetLevel(".a", 8); 179 (void)psTraceSetLevel(".b", 7); 180 (void)psTraceSetLevel(".c", 5); 181 (void)psTraceSetLevel(".a.a", 4); 182 (void)psTraceSetLevel(".a.b", 3); 183 (void)psTraceSetLevel(".b.a", 2); 184 (void)psTraceSetLevel(".b.b", 1); 185 (void)psTraceSetLevel(".c.a", 0); 186 (void)psTraceSetLevel(".c.b", 3); 187 (void)psTraceSetLevel(".c.c", 5); 188 psTracePrintLevels(); 189 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 190 } 191 192 193 // testTrace05a() 194 { 195 psMemId id = psMemGetId(); 196 (void)psTraceSetLevel(".", 9); 197 (void)psTraceSetLevel("a", 8); 198 (void)psTraceSetLevel("b", 7); 199 (void)psTraceSetLevel("c", 5); 200 (void)psTraceSetLevel("a.a", 4); 201 (void)psTraceSetLevel("a.b", 3); 202 (void)psTraceSetLevel("b.a", 2); 203 (void)psTraceSetLevel("b.b", 1); 204 (void)psTraceSetLevel("c.a", 0); 205 (void)psTraceSetLevel("c.b", 3); 206 (void)psTraceSetLevel("c.c", 5); 207 psTracePrintLevels(); 208 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 209 } 210 211 212 // testTrace06() 213 { 214 psMemId id = psMemGetId(); 215 (void)psTraceSetDestination(2); 216 (void)psTraceSetLevel(".", 9); 217 (void)psTraceSetLevel(".a", 8); 218 (void)psTraceSetLevel(".b", 7); 219 (void)psTraceSetLevel(".c", 5); 220 (void)psTraceSetLevel(".a.a", 4); 221 (void)psTraceSetLevel(".a.b", 3); 222 (void)psTraceSetLevel(".b.a", 2); 223 (void)psTraceSetLevel(".b.b", 1); 224 (void)psTraceSetLevel(".c.a", 0); 225 (void)psTraceSetLevel(".c.b", 3); 226 (void)psTraceSetLevel(".c.c", 5); 227 psTraceReset(); 228 229 if ((psTraceGetLevel(".")!=PS_UNKNOWN_TRACE_LEVEL) || 300 230 (psTraceGetLevel(".a")!=PS_UNKNOWN_TRACE_LEVEL) || 301 231 (psTraceGetLevel(".b")!=PS_UNKNOWN_TRACE_LEVEL) || … … 308 238 (psTraceGetLevel(".c.b")!=PS_UNKNOWN_TRACE_LEVEL) || 309 239 (psTraceGetLevel(".c.c")!=PS_UNKNOWN_TRACE_LEVEL)) { 310 return 1; 311 } 312 313 return 0; 314 } 315 316 // Ensure that the leading dot in the component names are optional. 317 static psS32 testTrace08(void) 318 { 319 psTraceReset(); 320 (void)psTraceSetLevel(".", 9); 321 322 (void)psTraceSetLevel(".a", 8); 323 (void)psTraceSetLevel(".b", 7); 324 (void)psTraceSetLevel(".c", 5); 325 326 (void)psTraceSetLevel(".a.a", 4); 327 (void)psTraceSetLevel(".a.b", 3); 328 329 (void)psTraceSetLevel(".b.a", 2); 330 (void)psTraceSetLevel(".b.b", 1); 331 332 (void)psTraceSetLevel(".c.a", 0); 333 (void)psTraceSetLevel(".c.b", 3); 334 (void)psTraceSetLevel(".c.c", 5); 335 336 psTracePrintLevels(); 337 338 if ((psTraceGetLevel(".")!=9) || 240 return 1; 241 } 242 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 243 } 244 245 246 // Ensure that the leading dot in the component names are optional. 247 // testTrace08() 248 { 249 psMemId id = psMemGetId(); 250 psTraceReset(); 251 (void)psTraceSetLevel(".", 9); 252 (void)psTraceSetLevel(".a", 8); 253 (void)psTraceSetLevel(".b", 7); 254 (void)psTraceSetLevel(".c", 5); 255 (void)psTraceSetLevel(".a.a", 4); 256 (void)psTraceSetLevel(".a.b", 3); 257 (void)psTraceSetLevel(".b.a", 2); 258 (void)psTraceSetLevel(".b.b", 1); 259 (void)psTraceSetLevel(".c.a", 0); 260 (void)psTraceSetLevel(".c.b", 3); 261 (void)psTraceSetLevel(".c.c", 5); 262 psTracePrintLevels(); 263 if ((psTraceGetLevel(".")!=9) || 339 264 (psTraceGetLevel("a")!=8) || 340 265 (psTraceGetLevel("b")!=7) || … … 347 272 (psTraceGetLevel("c.b")!=3) || 348 273 (psTraceGetLevel("c.c")!=5)) { 349 printf("psTraceGetLevel(.) is %d\n", psTraceGetLevel(".")); 350 printf("psTraceGetLevel(a) is %d\n", psTraceGetLevel("a")); 351 printf("psTraceGetLevel(b) is %d\n", psTraceGetLevel("b")); 352 printf("psTraceGetLevel(c) is %d\n", psTraceGetLevel("c")); 353 printf("psTraceGetLevel(a.a) is %d\n", psTraceGetLevel("a.a")); 354 printf("psTraceGetLevel(a.b) is %d\n", psTraceGetLevel("a.b")); 355 printf("psTraceGetLevel(b.a) is %d\n", psTraceGetLevel("b.a")); 356 printf("psTraceGetLevel(b.b) is %d\n", psTraceGetLevel("b.b")); 357 printf("psTraceGetLevel(c.a) is %d\n", psTraceGetLevel("c.a")); 358 printf("psTraceGetLevel(c.b) is %d\n", psTraceGetLevel("c.b")); 359 printf("psTraceGetLevel(c.c) is %d\n", psTraceGetLevel("c.c")); 360 361 return 1; 362 } 363 364 return 0; 274 printf("psTraceGetLevel(.) is %d", psTraceGetLevel(".")); 275 printf("psTraceGetLevel(a) is %d", psTraceGetLevel("a")); 276 printf("psTraceGetLevel(b) is %d", psTraceGetLevel("b")); 277 printf("psTraceGetLevel(c) is %d", psTraceGetLevel("c")); 278 printf("psTraceGetLevel(a.a) is %d", psTraceGetLevel("a.a")); 279 printf("psTraceGetLevel(a.b) is %d", psTraceGetLevel("a.b")); 280 printf("psTraceGetLevel(b.a) is %d", psTraceGetLevel("b.a")); 281 printf("psTraceGetLevel(b.b) is %d", psTraceGetLevel("b.b")); 282 printf("psTraceGetLevel(c.a) is %d", psTraceGetLevel("c.a")); 283 printf("psTraceGetLevel(c.b) is %d", psTraceGetLevel("c.b")); 284 printf("psTraceGetLevel(c.c) is %d", psTraceGetLevel("c.c")); 285 return 1; 286 } 287 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 288 } 365 289 } -
trunk/psLib/test/types/tap_psArguments_all.c
r12239 r12781 11 11 * 12 12 */ 13 14 13 #include <pslib.h> 15 16 14 #include "tap.h" 17 15 #include "pstap.h" 18 19 void testArgumentGetParse(void);20 void testArgumentVerbosity(void);21 //void testLogTraceArguments(void);22 16 23 17 int main(void) … … 25 19 psLogSetFormat("HLNM"); 26 20 psLogSetLevel(PS_LOG_INFO); 27 plan_tests(27); 28 29 note("Tests for psArguments Functions"); 30 31 testArgumentGetParse(); 32 testArgumentVerbosity(); 33 // testLogTraceArguments(); 34 35 done(); 21 plan_tests(28); 22 23 // testArgumentGetParse() 24 { 25 psMemId id = psMemGetId(); 26 psMetadata *arg = NULL; 27 char *argv[25]; 28 argv[0] = "./program"; 29 argv[1] = "-string"; 30 argv[2] = "new"; 31 argv[3] = "-float"; 32 argv[4] = "6.66"; 33 argv[5] = "-double"; 34 argv[6] = "0.666"; 35 argv[7] = "-int"; 36 argv[8] = "8"; 37 argv[9] = "-int"; 38 argv[10] = "16"; 39 argv[11] = "-int"; 40 argv[12] = "32"; 41 argv[13] = "-int"; 42 argv[14] = "64"; 43 argv[15] = "-U8"; 44 argv[16] = "1"; 45 argv[17] = "-U16"; 46 argv[18] = "666"; 47 argv[19] = "-U32"; 48 argv[20] = "666"; 49 argv[21] = "-Bool"; 50 argv[22] = "true"; 51 argv[23] = "-int"; 52 // argv[24] = "32"; 53 argv[24] = "-vvv"; 54 int argc = 25; 55 56 //Try to get an argument's position 57 int i = psArgumentGet(argc, argv, "-float"); 58 { 59 ok( i == 3, 60 "psArgumentGet: return correct location of input argument."); 61 } 62 63 //Return 0 for attempting to get from a NULL input argument. 64 { 65 ok( psArgumentGet(argc, NULL, "-float") == 0, 66 "psArgumentGet: return 0 for a NULL input argument."); 67 } 68 69 //Return 0 for attempting to find a NULL string 70 { 71 ok( psArgumentGet(argc, argv, NULL) == 0, 72 "psArgumentGet: return 0 for a NULL input string."); 73 } 74 75 //Return 0 for attempting to find an empty string 76 { 77 ok( psArgumentGet(argc, argv, "") == 0, 78 "psArgumentGet: return 0 for an empty input string."); 79 } 80 81 //Return 0 for attempting to get an argument that doesn't match 82 { 83 ok( psArgumentGet(argc, argv, "-xxx") == 0, 84 "psArgumentGet: return 0 for an empty input string."); 85 } 86 87 //Return false for attempting to remove argnum = 0 88 { 89 ok( !psArgumentRemove(0, &argc, argv), 90 "psArgumentRemove: return false for argnum = 0."); 91 } 92 93 //Return false for attempting to remove NULL argc 94 { 95 ok( !psArgumentRemove(0, NULL, argv), 96 "psArgumentRemove: return false for NULL argc."); 97 } 98 99 //Setup the argument list for comparison 100 psMetadata *args = psMetadataAlloc(); 101 psMetadataAdd(args, PS_LIST_TAIL, "-string", PS_DATA_STRING, "Test String", "SomeString"); 102 psMetadataAdd(args, PS_LIST_TAIL, "-float", PS_DATA_F32, "Test Float", 0.666); 103 psMetadataAdd(args, PS_LIST_TAIL, "-double", PS_DATA_F64, "Test Double", 0.666); 104 psMetadata *ints = psMetadataAlloc(); 105 psMetadataAdd(ints, PS_LIST_TAIL, "int1", PS_DATA_S8, "Int1", 8); 106 psMetadataAdd(ints, PS_LIST_TAIL, "int2", PS_DATA_S16, "Int2", 16); 107 psMetadataAdd(ints, PS_LIST_TAIL, "int3", PS_DATA_S32, "Int3", 32); 108 psMetadataAdd(ints, PS_LIST_TAIL, "int4", PS_DATA_S64, "Int4", 64); 109 psMetadataAdd(args, PS_LIST_TAIL, "-int", PS_DATA_METADATA, "Integers", ints); 110 psFree(ints); // Drop reference 111 psMetadataAddS32(args, PS_LIST_TAIL, "-multi", 0, "666", 2); 112 psMetadataAddS32(args, PS_LIST_TAIL, "-multi", PS_META_DUPLICATE_OK, "hello kitty", 1); 113 114 psMetadataAddU8(args, PS_LIST_TAIL, "-U8", 0, "U8", 1); 115 psMetadataAddU16(args, PS_LIST_TAIL, "-U16", 0, "U16", 666); 116 psMetadataAddU32(args, PS_LIST_TAIL, "-U32", 0, "U32", 666); 117 psMetadataAddU64(args, PS_LIST_TAIL, "-U64", 0, "U64", 666); 118 psMetadataAddBool(args, PS_LIST_TAIL, "-Bool", 0, "boolean", true); 119 psMetadataAddBool(args, PS_LIST_TAIL, "-Bool2", 0, "boolean", false); 120 psSphere *sphere = psSphereAlloc(); 121 sphere->r = 6.66; 122 sphere->d = 666.666; 123 psMetadataAddPtr(args, PS_LIST_TAIL, "ptr", PS_DATA_SPHERE, "", sphere); 124 psFree(sphere); 125 126 //psArgumentHelp test 127 //Do nothing for NULL input (exit gracefully) 128 psArgumentHelp(NULL); 129 //Print the Argument help for valid metadata 130 psArgumentHelp(args); 131 132 //psArgumentParse tests 133 //Return false for NULL input arguments 134 { 135 ok( !psArgumentParse(NULL, &argc, argv), 136 "psArgumentParse: return false for NULL argument metadata input."); 137 } 138 139 //Return false for NULL input argc 140 { 141 ok( !psArgumentParse(args, NULL, argv), 142 "psArgumentParse: return false for NULL argc input."); 143 } 144 145 //Return false for NULL input argv 146 { 147 ok( !psArgumentParse(args, &argc, NULL), 148 "psArgumentParse: return false for NULL argv input."); 149 } 150 151 //Return false for argc = 0 152 { 153 int tempc = 0; 154 ok( !psArgumentParse(args, &tempc, argv), 155 "psArgumentParse: return false for argc = 1 input."); 156 } 157 158 //Return false for string not found in metadata arguments 159 { 160 ok( !psArgumentParse(args, &argc, argv), 161 "psArgumentParse: return false for argv containing unspecified input."); 162 } 163 164 //Return true for valid case 165 { 166 psArgumentRemove(25, &argc, argv); 167 ok( psArgumentParse(args, &argc, argv), 168 "psArgumentParse: return true for valid inputs."); 169 } 170 171 //Return false for inconsistent argc in metadata 172 { 173 psMetadata *tempArg = psMetadataAlloc(); 174 psMetadata *mdtemp = psMetadataAlloc(); 175 psMetadataAdd(mdtemp, PS_LIST_TAIL, "int1", PS_DATA_S8, "Int1", 8); 176 psMetadataAdd(mdtemp, PS_LIST_TAIL, "int2", PS_DATA_S16, "Int2", 16); 177 psMetadataAdd(mdtemp, PS_LIST_TAIL, "int3", PS_DATA_S32, "Int3", 32); 178 psMetadataAdd(tempArg, PS_LIST_TAIL, "-int", PS_DATA_METADATA, "Integers", mdtemp); 179 psFree(mdtemp); 180 int argcc = 2; 181 char *argvv[2]; 182 argvv[0] = "./program"; 183 argvv[1] = "-string"; 184 ok( !psArgumentParse(tempArg, &argcc, argvv), 185 "psArgumentParse: return false for inconsistent argc."); 186 psFree(tempArg); 187 } 188 189 //Return false for argc = 1 190 { 191 int argcc = 2; 192 char *argvv[2]; 193 argvv[0] = "./program"; 194 argvv[1] = "-string"; 195 ok( !psArgumentParse(args, &argcc, argvv), 196 "psArgumentParse: return false for incomplete string syntax."); 197 } 198 199 //Return true for an unfound MULTI match 200 { 201 int argcc = 3; 202 char *argvv[3]; 203 argvv[0] = "./program"; 204 argvv[1] = "-multi"; 205 argvv[2] = "2"; 206 ok( psArgumentParse(args, &argcc, argvv), 207 "psArgumentParse: return true for MULTI."); 208 } 209 210 //Check for Memory leaks 211 { 212 psFree(args); 213 psFree(arg); 214 checkMem(); 215 } 216 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 217 } 218 219 220 // testArgumentVerbosity() 221 { 222 psMemId id = psMemGetId(); 223 //Return 2 (default) for NULL input argument 224 { 225 int argc = 1; 226 ok( psArgumentVerbosity(&argc, NULL) == 2, 227 "psArgumentVerbosity: return 2 for NULL argument input."); 228 } 229 230 //Return 2 for NULL argc input 231 { 232 char *argv[1]; 233 argv[0] = "./program"; 234 ok( psArgumentVerbosity(NULL, argv) == 2, 235 "psArgumentVerbosity: return 2 for NULL argument input."); 236 } 237 238 //Return 3 for "-v" option 239 { 240 int argc = 2; 241 char *argv[2]; 242 argv[0] = "./program"; 243 argv[1] = "-v"; 244 ok( psArgumentVerbosity(&argc, argv) == 3, 245 "psArgumentVerbosity: return 3 for '-v' argument input."); 246 } 247 248 //Return 4 for "-vv" option 249 { 250 int argc = 2; 251 char *argv[2]; 252 argv[0] = "./program"; 253 argv[1] = "-vv"; 254 ok( psArgumentVerbosity(&argc, argv) == 4, 255 "psArgumentVerbosity: return 4 for '-vv' argument input."); 256 } 257 258 //Return 5 for "-vvv" option 259 { 260 int argc = 2; 261 char *argv[2]; 262 argv[0] = "./program"; 263 argv[1] = "-vvv"; 264 ok( psArgumentVerbosity(&argc, argv) == 5, 265 "psArgumentVerbosity: return 5 for '-vvv' argument input."); 266 } 267 268 //These routines should return 5 since that was the last level set above with -vvv 269 //Return 5 for "-logfmt" option 270 { 271 int argc = 2; 272 char *argv[2]; 273 argv[0] = "./program"; 274 argv[1] = "-logfmt"; 275 int rc = psArgumentVerbosity(&argc, argv); 276 ok(rc == 5, "psArgumentVerbosity: return 5 for '-logfmt' argument input (was %d)", rc); 277 } 278 279 //Return 5 for "-logfmt" option with "H" 280 { 281 int argc = 3; 282 char *argv[3]; 283 argv[0] = "./program"; 284 argv[1] = "-logfmt"; 285 argv[2] = "H"; 286 int rc = psArgumentVerbosity(&argc, argv); 287 ok(rc == 5, "psArgumentVerbosity: return 5 for '-logfmt H' argument inputs (was %d)", rc); 288 } 289 290 //Return 5 for "-trace" option 291 { 292 int argc = 2; 293 char *argv[2]; 294 argv[0] = "./program"; 295 argv[1] = "-trace"; 296 int rc = psArgumentVerbosity(&argc, argv); 297 ok(rc == 5, "psArgumentVerbosity: return 5 for '-trace' argument input (was %d)", rc); 298 } 299 300 //Return 5 for "-trace 1 2" option 301 { 302 int argc = 4; 303 char *argv[4]; 304 argv[0] = "./program"; 305 argv[1] = "-trace"; 306 argv[2] = "1"; 307 argv[3] = "2"; 308 int rc = psArgumentVerbosity(&argc, argv); 309 ok(rc == 5, "psArgumentVerbosity: return 5 for '-trace 1 2' argument inputs (was %d", rc); 310 } 311 312 //Return 5 for "-trace-levels" option 313 { 314 int argc = 2; 315 char *argv[2]; 316 argv[0] = "./program"; 317 argv[1] = "-trace-levels"; 318 int rc = psArgumentVerbosity(&argc, argv); 319 ok(rc == 5, "psArgumentVerbosity: return 5 for '-trace-levels' argument input (was %d)", rc); 320 } 321 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 322 } 36 323 } 37 324 38 void testArgumentGetParse(void) 39 { 40 note(" >>>Test 1: psArgument Get, Remove, Parse, and Help Fxns"); 41 psMetadata *arg = NULL; 42 char *argv[25]; 43 argv[0] = "./program"; 44 argv[1] = "-string"; 45 argv[2] = "new"; 46 argv[3] = "-float"; 47 argv[4] = "6.66"; 48 argv[5] = "-double"; 49 argv[6] = "0.666"; 50 argv[7] = "-int"; 51 argv[8] = "8"; 52 argv[9] = "-int"; 53 argv[10] = "16"; 54 argv[11] = "-int"; 55 argv[12] = "32"; 56 argv[13] = "-int"; 57 argv[14] = "64"; 58 argv[15] = "-U8"; 59 argv[16] = "1"; 60 argv[17] = "-U16"; 61 argv[18] = "666"; 62 argv[19] = "-U32"; 63 argv[20] = "666"; 64 argv[21] = "-Bool"; 65 argv[22] = "true"; 66 argv[23] = "-int"; 67 // argv[24] = "32"; 68 argv[24] = "-vvv"; 69 int argc = 25; 70 71 //Try to get an argument's position 72 int i = psArgumentGet(argc, argv, "-float"); 73 { 74 ok( i == 3, 75 "psArgumentGet: return correct location of input argument."); 76 } 77 //Return 0 for attempting to get from a NULL input argument. 78 { 79 ok( psArgumentGet(argc, NULL, "-float") == 0, 80 "psArgumentGet: return 0 for a NULL input argument."); 81 } 82 //Return 0 for attempting to find a NULL string 83 { 84 ok( psArgumentGet(argc, argv, NULL) == 0, 85 "psArgumentGet: return 0 for a NULL input string."); 86 } 87 //Return 0 for attempting to find an empty string 88 { 89 ok( psArgumentGet(argc, argv, "") == 0, 90 "psArgumentGet: return 0 for an empty input string."); 91 } 92 //Return 0 for attempting to get an argument that doesn't match 93 { 94 ok( psArgumentGet(argc, argv, "-xxx") == 0, 95 "psArgumentGet: return 0 for an empty input string."); 96 } 97 //Return false for attempting to remove argnum = 0 98 { 99 ok( !psArgumentRemove(0, &argc, argv), 100 "psArgumentRemove: return false for argnum = 0."); 101 } 102 //Return false for attempting to remove NULL argc 103 { 104 ok( !psArgumentRemove(0, NULL, argv), 105 "psArgumentRemove: return false for NULL argc."); 106 } 107 108 //Setup the argument list for comparison 109 psMetadata *args = psMetadataAlloc(); 110 psMetadataAdd(args, PS_LIST_TAIL, "-string", PS_DATA_STRING, "Test String", "SomeString"); 111 psMetadataAdd(args, PS_LIST_TAIL, "-float", PS_DATA_F32, "Test Float", 0.666); 112 psMetadataAdd(args, PS_LIST_TAIL, "-double", PS_DATA_F64, "Test Double", 0.666); 113 psMetadata *ints = psMetadataAlloc(); 114 psMetadataAdd(ints, PS_LIST_TAIL, "int1", PS_DATA_S8, "Int1", 8); 115 psMetadataAdd(ints, PS_LIST_TAIL, "int2", PS_DATA_S16, "Int2", 16); 116 psMetadataAdd(ints, PS_LIST_TAIL, "int3", PS_DATA_S32, "Int3", 32); 117 psMetadataAdd(ints, PS_LIST_TAIL, "int4", PS_DATA_S64, "Int4", 64); 118 psMetadataAdd(args, PS_LIST_TAIL, "-int", PS_DATA_METADATA, "Integers", ints); 119 psFree(ints); // Drop reference 120 psMetadataAddS32(args, PS_LIST_TAIL, "-multi", 0, "666", 2); 121 psMetadataAddS32(args, PS_LIST_TAIL, "-multi", PS_META_DUPLICATE_OK, "hello kitty", 1); 122 123 psMetadataAddU8(args, PS_LIST_TAIL, "-U8", 0, "U8", 1); 124 psMetadataAddU16(args, PS_LIST_TAIL, "-U16", 0, "U16", 666); 125 psMetadataAddU32(args, PS_LIST_TAIL, "-U32", 0, "U32", 666); 126 psMetadataAddU64(args, PS_LIST_TAIL, "-U64", 0, "U64", 666); 127 psMetadataAddBool(args, PS_LIST_TAIL, "-Bool", 0, "boolean", true); 128 psMetadataAddBool(args, PS_LIST_TAIL, "-Bool2", 0, "boolean", false); 129 psSphere *sphere = psSphereAlloc(); 130 sphere->r = 6.66; 131 sphere->d = 666.666; 132 psMetadataAddPtr(args, PS_LIST_TAIL, "ptr", PS_DATA_SPHERE, "", sphere); 133 psFree(sphere); 134 135 //psArgumentHelp test 136 //Do nothing for NULL input (exit gracefully) 137 psArgumentHelp(NULL); 138 //Print the Argument help for valid metadata 139 psArgumentHelp(args); 140 141 //psArgumentParse tests 142 //Return false for NULL input arguments 143 { 144 ok( !psArgumentParse(NULL, &argc, argv), 145 "psArgumentParse: return false for NULL argument metadata input."); 146 } 147 //Return false for NULL input argc 148 { 149 ok( !psArgumentParse(args, NULL, argv), 150 "psArgumentParse: return false for NULL argc input."); 151 } 152 //Return false for NULL input argv 153 { 154 ok( !psArgumentParse(args, &argc, NULL), 155 "psArgumentParse: return false for NULL argv input."); 156 } 157 //Return false for argc = 0 158 { 159 int tempc = 0; 160 ok( !psArgumentParse(args, &tempc, argv), 161 "psArgumentParse: return false for argc = 1 input."); 162 } 163 //Return false for string not found in metadata arguments 164 { 165 ok( !psArgumentParse(args, &argc, argv), 166 "psArgumentParse: return false for argv containing unspecified input."); 167 } 168 //Return true for valid case 169 { 170 psArgumentRemove(25, &argc, argv); 171 ok( psArgumentParse(args, &argc, argv), 172 "psArgumentParse: return true for valid inputs."); 173 } 174 //Return false for inconsistent argc in metadata 175 { 176 psMetadata *tempArg = psMetadataAlloc(); 177 psMetadata *mdtemp = psMetadataAlloc(); 178 psMetadataAdd(mdtemp, PS_LIST_TAIL, "int1", PS_DATA_S8, "Int1", 8); 179 psMetadataAdd(mdtemp, PS_LIST_TAIL, "int2", PS_DATA_S16, "Int2", 16); 180 psMetadataAdd(mdtemp, PS_LIST_TAIL, "int3", PS_DATA_S32, "Int3", 32); 181 psMetadataAdd(tempArg, PS_LIST_TAIL, "-int", PS_DATA_METADATA, "Integers", mdtemp); 182 psFree(mdtemp); 183 int argcc = 2; 184 char *argvv[2]; 185 argvv[0] = "./program"; 186 argvv[1] = "-string"; 187 ok( !psArgumentParse(tempArg, &argcc, argvv), 188 "psArgumentParse: return false for inconsistent argc."); 189 psFree(tempArg); 190 } 191 //Return false for argc = 1 192 { 193 int argcc = 2; 194 char *argvv[2]; 195 argvv[0] = "./program"; 196 argvv[1] = "-string"; 197 ok( !psArgumentParse(args, &argcc, argvv), 198 "psArgumentParse: return false for incomplete string syntax."); 199 } 200 //Return true for an unfound MULTI match 201 { 202 int argcc = 3; 203 char *argvv[3]; 204 argvv[0] = "./program"; 205 argvv[1] = "-multi"; 206 argvv[2] = "2"; 207 ok( psArgumentParse(args, &argcc, argvv), 208 "psArgumentParse: return true for MULTI."); 209 } 210 211 //Check for Memory leaks 212 { 213 psFree(args); 214 psFree(arg); 215 checkMem(); 216 } 217 } 218 219 220 221 222 223 224 225 void testArgumentVerbosity(void) 226 { 227 note(" >>>Test 2: psArgumentRemove & psArgumentVerbosity Fxns"); 228 229 //Return 2 (default) for NULL input argument 230 { 231 int argc = 1; 232 ok( psArgumentVerbosity(&argc, NULL) == 2, 233 "psArgumentVerbosity: return 2 for NULL argument input."); 234 } 235 //Return 2 for NULL argc input 236 { 237 char *argv[1]; 238 argv[0] = "./program"; 239 ok( psArgumentVerbosity(NULL, argv) == 2, 240 "psArgumentVerbosity: return 2 for NULL argument input."); 241 } 242 //Return 3 for "-v" option 243 { 244 int argc = 2; 245 char *argv[2]; 246 argv[0] = "./program"; 247 argv[1] = "-v"; 248 ok( psArgumentVerbosity(&argc, argv) == 3, 249 "psArgumentVerbosity: return 3 for '-v' argument input."); 250 } 251 //Return 4 for "-vv" option 252 { 253 int argc = 2; 254 char *argv[2]; 255 argv[0] = "./program"; 256 argv[1] = "-vv"; 257 ok( psArgumentVerbosity(&argc, argv) == 4, 258 "psArgumentVerbosity: return 4 for '-vv' argument input."); 259 } 260 //Return 5 for "-vvv" option 261 { 262 int argc = 2; 263 char *argv[2]; 264 argv[0] = "./program"; 265 argv[1] = "-vvv"; 266 ok( psArgumentVerbosity(&argc, argv) == 5, 267 "psArgumentVerbosity: return 5 for '-vvv' argument input."); 268 } 269 //These routines should return 5 since that was the last level set above with -vvv 270 //Return 5 for "-logfmt" option 271 { 272 int argc = 2; 273 char *argv[2]; 274 argv[0] = "./program"; 275 argv[1] = "-logfmt"; 276 int rc = psArgumentVerbosity(&argc, argv); 277 ok(rc == 5, "psArgumentVerbosity: return 5 for '-logfmt' argument input (was %d)", rc); 278 } 279 //Return 5 for "-logfmt" option with "H" 280 { 281 int argc = 3; 282 char *argv[3]; 283 argv[0] = "./program"; 284 argv[1] = "-logfmt"; 285 argv[2] = "H"; 286 int rc = psArgumentVerbosity(&argc, argv); 287 ok(rc == 5, "psArgumentVerbosity: return 5 for '-logfmt H' argument inputs (was %d)", rc); 288 } 289 //Return 5 for "-trace" option 290 { 291 int argc = 2; 292 char *argv[2]; 293 argv[0] = "./program"; 294 argv[1] = "-trace"; 295 int rc = psArgumentVerbosity(&argc, argv); 296 ok(rc == 5, "psArgumentVerbosity: return 5 for '-trace' argument input (was %d)", rc); 297 } 298 //Return 5 for "-trace 1 2" option 299 { 300 int argc = 4; 301 char *argv[4]; 302 argv[0] = "./program"; 303 argv[1] = "-trace"; 304 argv[2] = "1"; 305 argv[3] = "2"; 306 int rc = psArgumentVerbosity(&argc, argv); 307 ok(rc == 5, "psArgumentVerbosity: return 5 for '-trace 1 2' argument inputs (was %d", rc); 308 } 309 //Return 5 for "-trace-levels" option 310 { 311 int argc = 2; 312 char *argv[2]; 313 argv[0] = "./program"; 314 argv[1] = "-trace-levels"; 315 int rc = psArgumentVerbosity(&argc, argv); 316 ok(rc == 5, "psArgumentVerbosity: return 5 for '-trace-levels' argument input (was %d)", rc); 317 } 318 319 //Check for Memory leaks 320 { 321 checkMem(); 322 } 323 } 324 325 /* 325 326 /* XXX: Why is this commented out? 326 327 void testLogTraceArguments(void) 327 328 { -
trunk/psLib/test/types/tap_psArray_all.c
r10822 r12781 11 11 * 12 12 */ 13 14 13 #include <pslib.h> 15 16 14 #include "tap.h" 17 15 #include "pstap.h" 18 16 19 void testArrayAllocs(void);20 void testArrayAddRemove(void);21 void testArraySetGet(void);22 void testArraySort(void);23 17 24 18 int main(void) 25 19 { 26 plan_tests(29); 27 28 note("Tests for psArray Functions"); 29 30 testArrayAllocs(); 31 testArrayAddRemove( ); 32 testArraySetGet( ); 33 testArraySort(); 34 35 done(); 36 } 37 38 void testArrayAllocs(void) 39 { 40 note(" >>>Test 1: psArrayAlloc, Realloc, & Free Fxns"); 41 psArray *a = NULL; 42 43 //Tests for psArrayAlloc 44 //Return NULL on attempting to allocate a negative size array 20 psLogSetFormat("HLNM"); 21 psLogSetLevel(PS_LOG_INFO); 22 plan_tests(32); 23 24 // testArrayAllocs() 45 25 { 46 a = psArrayAlloc(-2); 47 ok( a == NULL, 48 "psArrayAlloc: return NULL for negative array-size input."); 26 psMemId id = psMemGetId(); 27 psArray *a = NULL; 28 29 //Tests for psArrayAlloc 30 //Return NULL on attempting to allocate a negative size array 31 { 32 a = psArrayAlloc(-2); 33 ok( a == NULL, 34 "psArrayAlloc: return NULL for negative array-size input."); 35 } 36 //Return NULL for negative array size - psArrayAllocEmpty 37 { 38 a = psArrayAllocEmpty(-2); 39 ok( a == NULL, 40 "psArrayAllocEmpty: return NULL for negative array-size input."); 41 } 42 //Return properly allocated psArray 43 { 44 a = psArrayAlloc(0); 45 ok( a != NULL && psMemCheckArray(a), 46 "psArrayAlloc: return properly allocated psArray."); 47 } 48 49 //Tests for psMemCheckArray 50 //Make sure psMemCheckArray works correctly - return false 51 { 52 int j = 2; 53 ok( !psMemCheckArray(&j), 54 "psMemCheckArray: return false for non-Array input."); 55 } 56 //Tests for psArrayRealloc 57 //Now try to reallocate the psArray - bigger 58 { 59 a = psArrayRealloc(a, 2); 60 ok ( psArrayLength(a) == 0 && a->nalloc == 2, 61 "psArrayRealloc: return properly reallocated psArray."); 62 } 63 //Return NULL when trying to reallocate a NULL psArray 64 { 65 psArray *temp = NULL; 66 temp = psArrayRealloc(temp, 1); 67 ok( temp == NULL, 68 "psArrayRealloc: return NULL for NULL input psArray."); 69 } 70 //Attempt to reallocate the psArray - smaller 71 { 72 psS32 *s32 = (psS32*)psAlloc(sizeof(psS32)); 73 *s32 = 1; 74 psS32 *s32_2 = (psS32*)psAlloc(sizeof(psS32)); 75 *s32_2 = 2; 76 skip_start( !psArraySet(a, 0, s32) || !psArraySet(a, 1, s32), 1, 77 "Skipping 1 tests because psArraySet failed"); 78 a = psArrayRealloc(a, 1); 79 *s32_2 = *((psS32*)(a->data[0])); 80 ok( a->n == 1 && a->nalloc == 1 && *s32_2 == 1, 81 "psArrayRealloc: return properly reallocated psArray."); 82 skip_end(); 83 psFree(s32); 84 psFree(s32_2); 85 } 86 //Attempt to reallocate the psArray to negative size 87 { 88 a = psArrayRealloc(a, -1); 89 psS32 *s32 = (psS32*)psAlloc(sizeof(psS32)); 90 *s32 = 2; 91 *s32 = *((psS32*)(a->data[0])); 92 ok( a->n == 1 && a->nalloc == 1 && *s32 == 1, 93 "psArrayRealloc: return same psArray for negative-size input."); 94 psFree(s32); 95 } 96 97 //Attempt to free a NULL psArray 98 psArrayElementsFree(NULL); 99 //Check the length of a NULL array 100 { 101 psArray *emptyArray = NULL; 102 ok( psArrayLength(emptyArray) == -1, 103 "psArrayLength: return -1 for NULL input psArray."); 104 } 105 psFree(a); 106 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 49 107 } 50 //Return NULL for negative array size - psArrayAllocEmpty 108 109 110 // testArrayAddRemove() 51 111 { 52 a = psArrayAllocEmpty(-2); 53 ok( a == NULL, 54 "psArrayAllocEmpty: return NULL for negative array-size input."); 55 } 56 //Return properly allocated psArray 57 { 58 a = psArrayAlloc(0); 59 ok( a != NULL && psMemCheckArray(a), 60 "psArrayAlloc: return properly allocated psArray."); 61 } 62 63 //Tests for psMemCheckArray 64 //Make sure psMemCheckArray works correctly - return false 65 { 66 int j = 2; 67 ok( !psMemCheckArray(&j), 68 "psMemCheckArray: return false for non-Array input."); 69 } 70 //Tests for psArrayRealloc 71 //Now try to reallocate the psArray - bigger 72 { 73 a = psArrayRealloc(a, 2); 74 ok ( psArrayLength(a) == 0 && a->nalloc == 2, 75 "psArrayRealloc: return properly reallocated psArray."); 76 } 77 //Return NULL when trying to reallocate a NULL psArray 78 { 79 psArray *temp = NULL; 80 temp = psArrayRealloc(temp, 1); 81 ok( temp == NULL, 82 "psArrayRealloc: return NULL for NULL input psArray."); 83 } 84 //Attempt to reallocate the psArray - smaller 85 { 86 psS32 *s32 = (psS32*)psAlloc(sizeof(psS32)); 87 *s32 = 1; 88 psS32 *s32_2 = (psS32*)psAlloc(sizeof(psS32)); 89 *s32_2 = 2; 90 skip_start( !psArraySet(a, 0, s32) || !psArraySet(a, 1, s32), 1, 91 "Skipping 1 tests because psArraySet failed"); 92 a = psArrayRealloc(a, 1); 93 *s32_2 = *((psS32*)(a->data[0])); 94 ok( a->n == 1 && a->nalloc == 1 && *s32_2 == 1, 95 "psArrayRealloc: return properly reallocated psArray."); 96 skip_end(); 97 psFree(s32); 98 psFree(s32_2); 99 } 100 //Attempt to reallocate the psArray to negative size 101 { 102 a = psArrayRealloc(a, -1); 103 psS32 *s32 = (psS32*)psAlloc(sizeof(psS32)); 104 *s32 = 2; 105 *s32 = *((psS32*)(a->data[0])); 106 ok( a->n == 1 && a->nalloc == 1 && *s32 == 1, 107 "psArrayRealloc: return same psArray for negative-size input."); 108 psFree(s32); 109 } 110 111 //Attempt to free a NULL psArray 112 psArrayElementsFree(NULL); 113 //Check the length of a NULL array 114 { 115 psArray *emptyArray = NULL; 116 ok( psArrayLength(emptyArray) == -1, 117 "psArrayLength: return -1 for NULL input psArray."); 118 } 119 120 //Check for Memory leaks 121 { 122 psFree(a); 123 checkMem(); 124 } 125 } 126 127 void testArrayAddRemove(void) 128 { 129 note(" >>>Test 2: psArrayAdd & psArrayRemove Fxns"); 130 psArray *a = psArrayAlloc(0); 131 psS32 *s1 = (psS32*)psAlloc(sizeof(psS32)); 132 *s1 = 2; 133 psS32 *s2 = (psS32*)psAlloc(sizeof(psS32)); 134 psS32 *s3 = (psS32*)psAlloc(sizeof(psS32)); 135 136 //Tests for psArrayAdd 137 //Attempt to add element to NULL psArray. 138 { 139 psArray *temp = NULL; 140 temp = psArrayAdd(temp, 1, (psPtr)s1); 141 *s3 = *((psS32*)(temp->data[0])); 142 ok( temp->n == 1 && temp->nalloc == 1 && *s3 == 2, 143 "psArrayAdd: return array with newly added data."); 144 psFree(temp); 145 } 146 //Attempt to add an element to empty array. 147 { 148 a = psArrayAdd(a, 1, (psPtr)s1); 149 *s2 = 666; 150 *s3 = 212; 151 a = psArrayAdd(a, 1, s2); 152 a = psArrayAdd(a, 1, s3); 153 *s2 = *((psS32*)(a->data[0])); 154 ok ( a->n == 3 && a->nalloc == 3 && *s2 == 2, 155 "psArrayAdd: return array with newly added data."); 156 } 157 158 //Tests for psArrayRemoveData 159 //Setup array with 3 elements to test remove function 160 //Return false for attempting to remove from a NULL array 161 { 162 psArray *temp = NULL; 163 ok( !psArrayRemoveData(temp, s2), 164 "psArrayRemoveData: return false for NULL input psArray."); 165 } 166 //Return true for successful removal 167 { 168 ok( psArrayRemoveData(a, s2) && a->n == 2, 169 "psArrayRemoveData: return true for successful removal."); 170 } 171 172 //Tests for psArrayRemoveIndex 173 //Return false for NULL array input 174 { 175 ok( !psArrayRemoveIndex(NULL, 0), 176 "psArrayRemoveIndex: return false for NULL input psArray."); 177 } 178 //Return false for out-of-range index 179 { 180 ok( !psArrayRemoveIndex(a, 5), 181 "psArrayRemoveIndex: return false for out-of-range location."); 182 } 183 //Return true for successful removal 184 { 185 ok( psArrayRemoveIndex(a, 1) && a->n == 1, 186 "psArrayRemoveIndex: return true for successful removal."); 187 } 188 189 //Check for Memory leaks 190 { 112 psMemId id = psMemGetId(); 113 psArray *a = psArrayAlloc(0); 114 psS32 *s1 = (psS32*)psAlloc(sizeof(psS32)); 115 *s1 = 2; 116 psS32 *s2 = (psS32*)psAlloc(sizeof(psS32)); 117 psS32 *s3 = (psS32*)psAlloc(sizeof(psS32)); 118 119 //Tests for psArrayAdd 120 //Attempt to add element to NULL psArray. 121 { 122 psArray *temp = NULL; 123 temp = psArrayAdd(temp, 1, (psPtr)s1); 124 *s3 = *((psS32*)(temp->data[0])); 125 ok( temp->n == 1 && temp->nalloc == 1 && *s3 == 2, 126 "psArrayAdd: return array with newly added data."); 127 psFree(temp); 128 } 129 //Attempt to add an element to empty array. 130 { 131 a = psArrayAdd(a, 1, (psPtr)s1); 132 *s2 = 666; 133 *s3 = 212; 134 a = psArrayAdd(a, 1, s2); 135 a = psArrayAdd(a, 1, s3); 136 *s2 = *((psS32*)(a->data[0])); 137 ok ( a->n == 3 && a->nalloc == 3 && *s2 == 2, 138 "psArrayAdd: return array with newly added data."); 139 } 140 141 //Tests for psArrayRemoveData 142 //Setup array with 3 elements to test remove function 143 //Return false for attempting to remove from a NULL array 144 { 145 psArray *temp = NULL; 146 ok( !psArrayRemoveData(temp, s2), 147 "psArrayRemoveData: return false for NULL input psArray."); 148 } 149 //Return true for successful removal 150 { 151 ok( psArrayRemoveData(a, s2) && a->n == 2, 152 "psArrayRemoveData: return true for successful removal."); 153 } 154 155 //Tests for psArrayRemoveIndex 156 //Return false for NULL array input 157 { 158 ok( !psArrayRemoveIndex(NULL, 0), 159 "psArrayRemoveIndex: return false for NULL input psArray."); 160 } 161 //Return false for out-of-range index 162 { 163 ok( !psArrayRemoveIndex(a, 5), 164 "psArrayRemoveIndex: return false for out-of-range location."); 165 } 166 //Return true for successful removal 167 { 168 ok( psArrayRemoveIndex(a, 1) && a->n == 1, 169 "psArrayRemoveIndex: return true for successful removal."); 170 } 171 191 172 psFree(s1); 192 173 psFree(s2); 193 174 psFree(s3); 194 175 psFree(a); 195 checkMem();176 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 196 177 } 197 178 198 } 199 200 void testArraySetGet(void) 201 { 202 note(" >>>Test 3: psArraySet & psArrayGet Fxns"); 203 psArray *a = NULL; 204 psArray *b = NULL; 205 psS32 *s1 = (psS32*)psAlloc(sizeof(psS32)); 206 *s1 = 2; 207 psS32 *s2 = (psS32*)psAlloc(sizeof(psS32)); 208 *s2 = 1; 209 psS32 *s3 = (psS32*)psAlloc(sizeof(psS32)); 210 *s3 = 3; 211 212 //Tests for psArraySet 213 //Return false for trying to set a NULL psArray 179 180 // testArraySetGet() 214 181 { 215 ok( !psArraySet(a, 0, (psPtr)s1), 216 "psArraySet: return false for NULL input psArray."); 217 } 218 //Return false for trying to set an invalid position 219 a = psArrayAlloc(1); 220 { 221 ok( !psArraySet(a, 2, (psPtr)s1), 222 "psArraySet: return false for invalid input position."); 223 } 224 //Return false for trying to set nalloc position 225 psArraySet(a, 0, (psPtr)s1); 226 { 227 ok( !psArraySet(a, a->nalloc, (psPtr)s2), 228 "psArraySet: return false for out-of-range position."); 229 } 230 //Return false for an invalid position (-2 = out-of-range neg. index) 231 { 232 ok( !psArraySet(a, -2, (psPtr)s2), 233 "psArraySet: return false for out-of-range negative position."); 234 } 235 //Return true for set to a->n position (< nalloc) 236 a = psArrayRealloc(a, 10); 237 { 238 ok( psArraySet(a, a->n, (psPtr)s2) && a->n == 2, 239 "psArraySet: return true for valid input position."); 240 } 241 //Return true for a negative index input 242 { 243 ok( psArraySet(a, -2, (psPtr)s3) && a->n == 2 && 244 *((psS32*)(a->data[0])) == 3, 245 "psArraySet: return true for valid negative input position."); 246 } 247 248 //Tests for psArrayGet 249 //Return NULL for NULL array input 250 psS32 *s4 = NULL; 251 { 252 s4 = (psS32*)psArrayGet(b, 0); 253 ok( s4 == NULL, 254 "psArrayGet: return NULL for NULL input psArray."); 255 } 256 //Return NULL for an out-of-range index 257 { 258 s4 = (psS32*)psArrayGet(a, a->n); 259 ok( s4 == NULL, 260 "psArrayGet: return NULL for out-of-range position."); 261 } 262 //Return NULL for an out-of-range negative index 263 { 264 s4 = (psS32*)psArrayGet(a, -1-a->n); 265 ok( s4 == NULL, 266 "psArrayGet: return NULL for out-of-range negative position."); 267 } 268 //Return valid case 269 { 270 s4 = (psS32*)psArrayGet(a, 1); 271 ok( *s4 == 1, 272 "psArrayGet: return correct value for valid position."); 273 } 274 275 //Check for Memory leaks 276 { 182 psMemId id = psMemGetId(); 183 psArray *a = NULL; 184 psArray *b = NULL; 185 psS32 *s1 = (psS32*)psAlloc(sizeof(psS32)); 186 *s1 = 2; 187 psS32 *s2 = (psS32*)psAlloc(sizeof(psS32)); 188 *s2 = 1; 189 psS32 *s3 = (psS32*)psAlloc(sizeof(psS32)); 190 *s3 = 3; 191 192 //Tests for psArraySet 193 //Return false for trying to set a NULL psArray 194 { 195 ok( !psArraySet(a, 0, (psPtr)s1), 196 "psArraySet: return false for NULL input psArray."); 197 } 198 //Return false for trying to set an invalid position 199 a = psArrayAlloc(1); 200 { 201 ok( !psArraySet(a, 2, (psPtr)s1), 202 "psArraySet: return false for invalid input position."); 203 } 204 //Return false for trying to set nalloc position 205 psArraySet(a, 0, (psPtr)s1); 206 { 207 ok( !psArraySet(a, a->nalloc, (psPtr)s2), 208 "psArraySet: return false for out-of-range position."); 209 } 210 //Return false for an invalid position (-2 = out-of-range neg. index) 211 { 212 ok( !psArraySet(a, -2, (psPtr)s2), 213 "psArraySet: return false for out-of-range negative position."); 214 } 215 //Return true for set to a->n position (< nalloc) 216 a = psArrayRealloc(a, 10); 217 { 218 ok( psArraySet(a, a->n, (psPtr)s2) && a->n == 2, 219 "psArraySet: return true for valid input position."); 220 } 221 //Return true for a negative index input 222 { 223 ok( psArraySet(a, -2, (psPtr)s3) && a->n == 2 && 224 *((psS32*)(a->data[0])) == 3, 225 "psArraySet: return true for valid negative input position."); 226 } 227 228 //Tests for psArrayGet 229 //Return NULL for NULL array input 230 psS32 *s4 = NULL; 231 { 232 s4 = (psS32*)psArrayGet(b, 0); 233 ok( s4 == NULL, 234 "psArrayGet: return NULL for NULL input psArray."); 235 } 236 //Return NULL for an out-of-range index 237 { 238 s4 = (psS32*)psArrayGet(a, a->n); 239 ok( s4 == NULL, 240 "psArrayGet: return NULL for out-of-range position."); 241 } 242 //Return NULL for an out-of-range negative index 243 { 244 s4 = (psS32*)psArrayGet(a, -1-a->n); 245 ok( s4 == NULL, 246 "psArrayGet: return NULL for out-of-range negative position."); 247 } 248 //Return valid case 249 { 250 s4 = (psS32*)psArrayGet(a, 1); 251 ok( *s4 == 1, 252 "psArrayGet: return correct value for valid position."); 253 } 254 277 255 psFree(a); 278 256 psFree(s1); 279 257 psFree(s2); 280 258 psFree(s3); 281 checkMem();259 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 282 260 } 283 } 284 285 void testArraySort(void) 286 { 287 note(" >>>Test 4: psArray Sort Function"); 288 psArray *a = NULL; 289 a = psArrayAlloc(3); 290 a->n = 0; 291 psS32 *s1 = (psS32*)psAlloc(sizeof(psS32)); 292 *s1 = 2; 293 psS32 *s2 = (psS32*)psAlloc(sizeof(psS32)); 294 *s2 = 1; 295 psS32 *s3 = (psS32*)psAlloc(sizeof(psS32)); 296 *s3 = 3; 297 psArraySet(a, a->n, (psPtr)s1); 298 psArraySet(a, a->n, (psPtr)s2); 299 psArraySet(a, a->n, (psPtr)s3); 300 psS32 *s4 = (psS32*)psAlloc(sizeof(psS32)); 301 psS32 *s5 = (psS32*)psAlloc(sizeof(psS32)); 302 psS32 *s6 = (psS32*)psAlloc(sizeof(psS32)); 303 304 //Tests for psArraySort 305 //Return NULL for attempt to sort NULL psArray input. 261 262 263 // testArraySort() 306 264 { 307 psArray *temp = NULL; 308 temp = psArraySort(temp, (psComparePtrFunc)psCompareDescendingS32Ptr); 309 ok( temp == NULL, 310 "psArraySort: return NULL for NULL input psArray."); 311 } 312 //Return properly sorted psArray with descending psS32 elements - 3,2,1 313 { 314 a = psArraySort(a, (psComparePtrFunc)psCompareDescendingS32Ptr); 315 *s4 = *((psS32*)(a->data[0])); 316 *s5 = *((psS32*)(a->data[1])); 317 *s6 = *((psS32*)(a->data[2])); 318 ok( *s4 == 3 && *s5 == 2 && *s6 == 1, 319 "psArraySort: return properly sorted psArray."); 320 } 321 322 //Check for Memory leaks 323 { 265 psMemId id = psMemGetId(); 266 psArray *a = NULL; 267 a = psArrayAlloc(3); 268 a->n = 0; 269 psS32 *s1 = (psS32*)psAlloc(sizeof(psS32)); 270 *s1 = 2; 271 psS32 *s2 = (psS32*)psAlloc(sizeof(psS32)); 272 *s2 = 1; 273 psS32 *s3 = (psS32*)psAlloc(sizeof(psS32)); 274 *s3 = 3; 275 psArraySet(a, a->n, (psPtr)s1); 276 psArraySet(a, a->n, (psPtr)s2); 277 psArraySet(a, a->n, (psPtr)s3); 278 psS32 *s4 = (psS32*)psAlloc(sizeof(psS32)); 279 psS32 *s5 = (psS32*)psAlloc(sizeof(psS32)); 280 psS32 *s6 = (psS32*)psAlloc(sizeof(psS32)); 281 282 //Tests for psArraySort 283 //Return NULL for attempt to sort NULL psArray input. 284 { 285 psArray *temp = NULL; 286 temp = psArraySort(temp, (psComparePtrFunc)psCompareDescendingS32Ptr); 287 ok( temp == NULL, 288 "psArraySort: return NULL for NULL input psArray."); 289 } 290 //Return properly sorted psArray with descending psS32 elements - 3,2,1 291 { 292 a = psArraySort(a, (psComparePtrFunc)psCompareDescendingS32Ptr); 293 *s4 = *((psS32*)(a->data[0])); 294 *s5 = *((psS32*)(a->data[1])); 295 *s6 = *((psS32*)(a->data[2])); 296 ok( *s4 == 3 && *s5 == 2 && *s6 == 1, 297 "psArraySort: return properly sorted psArray."); 298 } 299 324 300 psFree(s1); 325 301 psFree(s2); … … 329 305 psFree(s6); 330 306 psFree(a); 331 checkMem();307 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 332 308 } 333 334 309 } 335 310 -
trunk/psLib/test/types/tap_psBitSet_all.c
r12210 r12781 10 10 * 11 11 */ 12 13 12 #include <pslib.h> 14 13 #include <string.h> 15 16 14 #include "tap.h" 17 15 #include "pstap.h" 18 16 19 void testBitSetBasics(void);20 void testBitSetOps(void);21 17 22 18 int main(void) 23 19 { 24 plan_tests(31); 25 26 note("Tests for psBitSet Functions"); 27 28 testBitSetBasics(); 29 testBitSetOps(); 30 31 done(); 32 } 33 34 void testBitSetBasics(void) 35 { 36 note(" >>>Test 1: psBitSet Basic Fxns"); 37 38 psBitSet *noBits = NULL; 39 psBitSet *bs = NULL; 40 41 //Return NULL for attempt to Allocate BitSet of negative size. 20 psLogSetFormat("HLNM"); 21 psLogSetLevel(PS_LOG_INFO); 22 plan_tests(32); 23 24 25 // testBitSetBasics() 42 26 { 43 noBits = psBitSetAlloc(-1); 44 ok( noBits == NULL, 45 "psBitSetAlloc: return NULL for negative BitSet-size input."); 27 psMemId id = psMemGetId(); 28 psBitSet *noBits = NULL; 29 psBitSet *bs = NULL; 30 31 //Return NULL for attempt to Allocate BitSet of negative size. 32 { 33 noBits = psBitSetAlloc(-1); 34 ok( noBits == NULL, 35 "psBitSetAlloc: return NULL for negative BitSet-size input."); 36 } 37 //Return properly allocated 0-size psBitSet 38 { 39 bs = psBitSetAlloc(0); 40 ok( bs != NULL && psMemCheckBitSet(bs) && bs->n == 0, 41 "psBitSetAlloc: return properly allocated psBitSet."); 42 } 43 //Return properly allocated psBitSet 44 { 45 psFree(bs); 46 bs = psBitSetAlloc(8); 47 ok( bs != NULL && psMemCheckBitSet(bs) && bs->n == 1, 48 "psBitSetAlloc: return properly allocated psBitSet."); 49 } 50 //Make sure psMemCheckBitSet works correctly - return false 51 { 52 int j = 2; 53 ok( !psMemCheckBitSet(&j), 54 "psMemCheckBitSet: return false for non-BitSet input."); 55 } 56 57 //BitSetSet Tests 58 //Return FALSE for NULL input psBitSet 59 { 60 bool rc = psBitSetSet(NULL, 0); 61 ok(rc == false, 62 "psBitSetSet: return FALSE for NULL BitSet input."); 63 } 64 //Return FALSE for negative bit input 65 { 66 bool rc = psBitSetSet(bs, -1); 67 ok( rc == false, 68 "psBitSetSet: return TRUE for negative bits input."); 69 noBits = NULL; 70 } 71 //Return FALSE for out-of-range bits 72 { 73 psFree(bs); 74 bs = psBitSetAlloc(8); 75 bool rc = psBitSetSet(bs, 8); 76 ok( rc == false, 77 "psBitSetSet: return TRUE for out-of-range bits input."); 78 noBits = NULL; 79 } 80 81 //Return set BitSet for valid inputs 82 { 83 psBitSetSet(bs, 2); 84 ok( bs->bits[0] == 4, 85 "psBitSetSet: return properly set BitSet for valid inputs."); 86 } 87 88 //BitSetClear Tests 89 //Return FALSE for NULL input psBitSet 90 { 91 bool rc = psBitSetClear(noBits, 0); 92 ok( rc == false, 93 "psBitSetClear: return FALSE for NULL BitSet input."); 94 } 95 //Return FALSE for negative bit input 96 { 97 bool rc = psBitSetClear(bs, -1); 98 ok( rc == false, 99 "psBitSetClear: return TRUE for negative bits input."); 100 noBits = NULL; 101 } 102 //Return FALSE for out-of-range bits 103 { 104 bool rc = psBitSetClear(bs, 8); 105 ok( rc == false, 106 "psBitSetClear: return FALSE for out-of-range bits input."); 107 noBits = NULL; 108 } 109 110 //Return cleared BitSet for valid inputs 111 { 112 psBitSetClear(bs, 2); 113 ok( bs->bits[0] == 0, 114 "psBitSetClear: return properly cleared BitSet for valid inputs."); 115 } 116 117 //BitSetTest Tests 118 //Return false for NULL input psBitSet 119 { 120 ok( !psBitSetTest(noBits, 0), 121 "psBitSetTest: return false for NULL BitSet input."); 122 } 123 //Return false for negative bit input 124 { 125 ok( !psBitSetTest(bs, -1), 126 "psBitSetTest: return false for negative bits input."); 127 } 128 //Return false for out-of-range bits 129 { 130 ok( !psBitSetTest(bs, 8), 131 "psBitSetTest: return false for out-of-range bits input."); 132 } 133 //Return false for non-matching bit in BitSet 134 { 135 ok( !psBitSetTest(bs, 2), 136 "psBitSetTest: return false for non-matching bit in BitSet."); 137 } 138 //Return false for non-matching bit in BitSet 139 { 140 psBitSetSet(bs, 2); 141 ok( psBitSetTest(bs, 2), 142 "psBitSetTest: return true for matching bit in BitSet."); 143 } 144 145 psFree(bs); 146 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 46 147 } 47 //Return properly allocated 0-size psBitSet 148 149 150 // testBitSetOps() 48 151 { 49 bs = psBitSetAlloc(0); 50 ok( bs != NULL && psMemCheckBitSet(bs) && bs->n == 0, 51 "psBitSetAlloc: return properly allocated psBitSet."); 52 } 53 //Return properly allocated psBitSet 54 { 55 psFree(bs); 56 bs = psBitSetAlloc(8); 57 ok( bs != NULL && psMemCheckBitSet(bs) && bs->n == 1, 58 "psBitSetAlloc: return properly allocated psBitSet."); 59 } 60 //Make sure psMemCheckBitSet works correctly - return false 61 { 62 int j = 2; 63 ok( !psMemCheckBitSet(&j), 64 "psMemCheckBitSet: return false for non-BitSet input."); 65 } 66 67 //BitSetSet Tests 68 //Return FALSE for NULL input psBitSet 69 { 70 bool rc = psBitSetSet(NULL, 0); 71 ok(rc == false, 72 "psBitSetSet: return FALSE for NULL BitSet input."); 73 } 74 //Return FALSE for negative bit input 75 { 76 bool rc = psBitSetSet(bs, -1); 77 ok( rc == false, 78 "psBitSetSet: return TRUE for negative bits input."); 79 noBits = NULL; 80 } 81 //Return FALSE for out-of-range bits 82 { 83 psFree(bs); 84 bs = psBitSetAlloc(8); 85 bool rc = psBitSetSet(bs, 8); 86 ok( rc == false, 87 "psBitSetSet: return TRUE for out-of-range bits input."); 88 noBits = NULL; 89 } 90 91 //Return set BitSet for valid inputs 92 { 93 psBitSetSet(bs, 2); 94 ok( bs->bits[0] == 4, 95 "psBitSetSet: return properly set BitSet for valid inputs."); 96 } 97 98 //BitSetClear Tests 99 //Return FALSE for NULL input psBitSet 100 { 101 bool rc = psBitSetClear(noBits, 0); 102 ok( rc == false, 103 "psBitSetClear: return FALSE for NULL BitSet input."); 104 } 105 //Return FALSE for negative bit input 106 { 107 bool rc = psBitSetClear(bs, -1); 108 ok( rc == false, 109 "psBitSetClear: return TRUE for negative bits input."); 110 noBits = NULL; 111 } 112 //Return FALSE for out-of-range bits 113 { 114 bool rc = psBitSetClear(bs, 8); 115 ok( rc == false, 116 "psBitSetClear: return FALSE for out-of-range bits input."); 117 noBits = NULL; 118 } 119 120 //Return cleared BitSet for valid inputs 121 { 122 psBitSetClear(bs, 2); 123 ok( bs->bits[0] == 0, 124 "psBitSetClear: return properly cleared BitSet for valid inputs."); 125 } 126 127 //BitSetTest Tests 128 //Return false for NULL input psBitSet 129 { 130 ok( !psBitSetTest(noBits, 0), 131 "psBitSetTest: return false for NULL BitSet input."); 132 } 133 //Return false for negative bit input 134 { 135 ok( !psBitSetTest(bs, -1), 136 "psBitSetTest: return false for negative bits input."); 137 } 138 //Return false for out-of-range bits 139 { 140 ok( !psBitSetTest(bs, 8), 141 "psBitSetTest: return false for out-of-range bits input."); 142 } 143 //Return false for non-matching bit in BitSet 144 { 145 ok( !psBitSetTest(bs, 2), 146 "psBitSetTest: return false for non-matching bit in BitSet."); 147 } 148 //Return false for non-matching bit in BitSet 149 { 150 psBitSetSet(bs, 2); 151 ok( psBitSetTest(bs, 2), 152 "psBitSetTest: return true for matching bit in BitSet."); 153 } 154 155 156 //Check for Memory leaks 157 { 158 psFree(bs); 159 checkMem(); 160 } 161 } 162 163 void testBitSetOps(void) 164 { 165 note(" >>>Test 2: psBitSet Operation Fxns"); 166 psBitSet *noBits = NULL; 167 psBitSet *bs = NULL; 168 bs = psBitSetAlloc(8); 169 psBitSetSet(bs, 2); // 0000 0100 == 4 170 psBitSetSet(bs, 3); // 0000 1100 == 12 171 psBitSetSet(bs, 4); // 0001 1100 == 28 172 psBitSetSet(bs, 5); // 0011 1100 == 60 173 psBitSetSet(bs, 6); // 0111 1100 == 124 174 psBitSetSet(bs, 7); // 1111 1100 == 252 175 psBitSet *out = NULL; 176 177 //psBitSetNot Tests 178 //Return NULL for NULL BitSet input 179 { 180 out = psBitSetNot(out, noBits); 181 ok( out == NULL, 182 "psBitSetNot: return NULL for NULL BitSet input."); 183 } 184 //Return correct BitSet for valid BitSet input 185 { 186 out = psBitSetNot(out, bs); //bs = 1111 1100 so out should = 0000 0011 = 3 187 ok( out->bits[0] == 3, 188 "psBitSetNot: return correct BitSet for valid BitSet input."); 189 } 190 191 //psBitSetOp Tests out = psBitSetOp(out, bs1, "op", bs2); 192 //Return NULL for NULL BitSet input 193 { 194 psFree(out); 195 out = NULL; 196 out = psBitSetOp(out, noBits, "op", noBits); 197 ok( out == NULL, 198 "psBitSetOp: return NULL for NULL BitSet input."); 199 } 200 //Return NULL for NULL operator input 201 { 202 out = psBitSetOp(out, bs, NULL, noBits); 203 ok( out == NULL, 204 "psBitSetOp: return NULL for NULL operator input."); 205 } 206 //Return NULL for invalid operator input 207 { 208 out = psBitSetOp(out, bs, "XAND", noBits); 209 ok( out == NULL, 210 "psBitSetOp: return NULL for invalid operator input."); 211 } 212 //Return NULL for AND operator with NULL second BitSet input 213 { 214 out = psBitSetOp(out, bs, "AND", noBits); 215 ok( out == NULL, 216 "psBitSetOp: return NULL for AND operator with NULL second BitSet input."); 217 } 218 //Return NULL for AND operator with BitSet inputs of differing size. 219 psBitSet *bs2 = psBitSetAlloc(16); 220 { 221 out = psBitSetOp(out, bs, "AND", bs2); 222 ok( out == NULL, 223 "psBitSetOp: return NULL for AND operator with BitSet inputs of" 224 " differing size."); 225 } 226 psFree(bs); 227 bs = psBitSetAlloc(16); 228 psBitSetSet(bs, 1); // 0000 0010 == 2 229 psBitSetSet(bs2, 2); // 0000 0100 == 4 230 //Return correct psBitSet output for valid inputs with AND operator 231 { 232 out = psBitSetOp(out, bs, "AND", bs2); 233 ok( out->bits[0] == 0, 234 "psBitSetOp: return correct psBitSet output for valid inputs" 235 " with AND operator."); 236 } 237 //Return correct psBitSet output for valid inputs with OR operator 238 { 239 out = psBitSetOp(out, bs, "OR", bs2); 240 ok( out->bits[0] == 6, 241 "psBitSetOp: return correct psBitSet output for valid inputs" 242 " with OR operator."); 243 } 244 //Return correct psBitSet output for valid inputs with XOR operator 245 psBitSetSet(bs2, 1); // 0000 0110 == 6 246 { 247 out = psBitSetOp(out, bs, "XOR", bs2); 248 ok( out->bits[0] == 4, 249 "psBitSetOp: return correct psBitSet output for valid inputs" 250 " with XOR operator."); 251 } 252 //Return correct psBitSet output for valid inputs with NOT operator 253 { 254 psFree(out); 255 out = psBitSetAlloc(0); 256 psBitSetSet(bs, 2); // 0000 0110 == 4 257 psBitSetSet(bs, 3); // 0000 1110 == 12 258 psBitSetSet(bs, 4); // 0001 1110 == 28 259 psBitSetSet(bs, 5); // 0011 1110 == 60 260 psBitSetSet(bs, 6); // 0111 1110 == 124 261 psBitSetSet(bs, 7); // 1111 1110 == 252 262 out = psBitSetOp(out, bs, "NOT", bs2); 263 ok( out->bits[0] == 1, 264 "psBitSetOp: return correct psBitSet output for valid inputs" 265 " with NOT operator."); 266 } 267 268 //psBitSetToString Tests 269 //Return NULL for NULL BitSet input 270 psString bitStr = NULL; 271 { 272 bitStr = psBitSetToString(noBits); 273 ok( bitStr == NULL, 274 "psBitSetToString: return NULL for NULL BitSet input."); 275 } 276 //Return correct string for valid BitSet input 277 { 278 psFree(bs); 152 psMemId id = psMemGetId(); 153 psBitSet *noBits = NULL; 154 psBitSet *bs = NULL; 279 155 bs = psBitSetAlloc(8); 280 156 psBitSetSet(bs, 2); // 0000 0100 == 4 281 bitStr = psBitSetToString(bs); 282 ok( !strncmp(bitStr, "00000100", 10), 283 "psBitSetToString: return correct string for valid BitSet input."); 284 } 285 286 287 //Check for Memory leaks 288 { 157 psBitSetSet(bs, 3); // 0000 1100 == 12 158 psBitSetSet(bs, 4); // 0001 1100 == 28 159 psBitSetSet(bs, 5); // 0011 1100 == 60 160 psBitSetSet(bs, 6); // 0111 1100 == 124 161 psBitSetSet(bs, 7); // 1111 1100 == 252 162 psBitSet *out = NULL; 163 164 //psBitSetNot Tests 165 //Return NULL for NULL BitSet input 166 { 167 out = psBitSetNot(out, noBits); 168 ok( out == NULL, 169 "psBitSetNot: return NULL for NULL BitSet input."); 170 } 171 //Return correct BitSet for valid BitSet input 172 { 173 out = psBitSetNot(out, bs); //bs = 1111 1100 so out should = 0000 0011 = 3 174 ok( out->bits[0] == 3, 175 "psBitSetNot: return correct BitSet for valid BitSet input."); 176 } 177 178 //psBitSetOp Tests out = psBitSetOp(out, bs1, "op", bs2); 179 //Return NULL for NULL BitSet input 180 { 181 psFree(out); 182 out = NULL; 183 out = psBitSetOp(out, noBits, "op", noBits); 184 ok( out == NULL, 185 "psBitSetOp: return NULL for NULL BitSet input."); 186 } 187 //Return NULL for NULL operator input 188 { 189 out = psBitSetOp(out, bs, NULL, noBits); 190 ok( out == NULL, 191 "psBitSetOp: return NULL for NULL operator input."); 192 } 193 //Return NULL for invalid operator input 194 { 195 out = psBitSetOp(out, bs, "XAND", noBits); 196 ok( out == NULL, 197 "psBitSetOp: return NULL for invalid operator input."); 198 } 199 //Return NULL for AND operator with NULL second BitSet input 200 { 201 out = psBitSetOp(out, bs, "AND", noBits); 202 ok( out == NULL, 203 "psBitSetOp: return NULL for AND operator with NULL second BitSet input."); 204 } 205 //Return NULL for AND operator with BitSet inputs of differing size. 206 psBitSet *bs2 = psBitSetAlloc(16); 207 { 208 out = psBitSetOp(out, bs, "AND", bs2); 209 ok( out == NULL, 210 "psBitSetOp: return NULL for AND operator with BitSet inputs of" 211 " differing size."); 212 } 213 psFree(bs); 214 bs = psBitSetAlloc(16); 215 psBitSetSet(bs, 1); // 0000 0010 == 2 216 psBitSetSet(bs2, 2); // 0000 0100 == 4 217 //Return correct psBitSet output for valid inputs with AND operator 218 { 219 out = psBitSetOp(out, bs, "AND", bs2); 220 ok( out->bits[0] == 0, 221 "psBitSetOp: return correct psBitSet output for valid inputs" 222 " with AND operator."); 223 } 224 //Return correct psBitSet output for valid inputs with OR operator 225 { 226 out = psBitSetOp(out, bs, "OR", bs2); 227 ok( out->bits[0] == 6, 228 "psBitSetOp: return correct psBitSet output for valid inputs" 229 " with OR operator."); 230 } 231 //Return correct psBitSet output for valid inputs with XOR operator 232 psBitSetSet(bs2, 1); // 0000 0110 == 6 233 { 234 out = psBitSetOp(out, bs, "XOR", bs2); 235 ok( out->bits[0] == 4, 236 "psBitSetOp: return correct psBitSet output for valid inputs" 237 " with XOR operator."); 238 } 239 //Return correct psBitSet output for valid inputs with NOT operator 240 { 241 psFree(out); 242 out = psBitSetAlloc(0); 243 psBitSetSet(bs, 2); // 0000 0110 == 4 244 psBitSetSet(bs, 3); // 0000 1110 == 12 245 psBitSetSet(bs, 4); // 0001 1110 == 28 246 psBitSetSet(bs, 5); // 0011 1110 == 60 247 psBitSetSet(bs, 6); // 0111 1110 == 124 248 psBitSetSet(bs, 7); // 1111 1110 == 252 249 out = psBitSetOp(out, bs, "NOT", bs2); 250 ok( out->bits[0] == 1, 251 "psBitSetOp: return correct psBitSet output for valid inputs" 252 " with NOT operator."); 253 } 254 255 //psBitSetToString Tests 256 //Return NULL for NULL BitSet input 257 psString bitStr = NULL; 258 { 259 bitStr = psBitSetToString(noBits); 260 ok( bitStr == NULL, 261 "psBitSetToString: return NULL for NULL BitSet input."); 262 } 263 //Return correct string for valid BitSet input 264 { 265 psFree(bs); 266 bs = psBitSetAlloc(8); 267 psBitSetSet(bs, 2); // 0000 0100 == 4 268 bitStr = psBitSetToString(bs); 269 ok( !strncmp(bitStr, "00000100", 10), 270 "psBitSetToString: return correct string for valid BitSet input."); 271 } 272 289 273 psFree(bitStr); 290 274 psFree(out); 291 275 psFree(bs); 292 276 psFree(bs2); 293 checkMem();277 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 294 278 } 295 279 } -
trunk/psLib/test/types/tap_psHash_845.c
r10123 r12781 2 2 #include "pslib.h" 3 3 #include "pstap.h" 4 5 4 #define SIZE 128 6 7 5 8 6 int main(int argc, char *argv[]) 9 7 { 8 psLogSetFormat("HLNM"); 9 psLogSetLevel(PS_LOG_INFO); 10 10 plan_tests(5); 11 11 12 char *stuff1 = psAlloc(SIZE); // Stuff to put on hash 13 char *stuff2 = psAlloc(SIZE); // Stuff to put on hash 12 // Very basic test: create a psHash, then add data to it. 13 // XXX: Remove this test, or mearge it with another file. 14 { 15 psMemId id = psMemGetId(); 16 char *stuff1 = psAlloc(SIZE); // Stuff to put on hash 17 char *stuff2 = psAlloc(SIZE); // Stuff to put on hash 14 18 15 psHash *hash = psHashAlloc(16); // Hash to test 16 ok(hash, "Hash allocated"); 19 psHash *hash = psHashAlloc(16); // Hash to test 20 ok(hash, "Hash allocated"); 21 bool status1 = psHashAdd(hash, "stuff", stuff1); 22 ok(status1, "Added 1 to hash"); 23 psFree(stuff1); // Drop reference 24 psMemId last = psMemGetId(); // Last memory I.D. 25 bool status2 = psHashAdd(hash, "stuff", stuff2); 26 ok(status2, "Added 2 to hash"); 27 psFree(stuff2); // Drop reference 28 int numLeaks = psMemCheckLeaks(last, NULL, NULL, false); // Number of leaks 29 ok(numLeaks == 0, "No leaks."); 30 psFree(hash); 31 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 32 } 17 33 18 bool status1 = psHashAdd(hash, "stuff", stuff1);19 ok(status1, "Added 1 to hash");20 psFree(stuff1); // Drop reference21 22 psMemId last = psMemGetId(); // Last memory I.D.23 bool status2 = psHashAdd(hash, "stuff", stuff2);24 ok(status2, "Added 2 to hash");25 psFree(stuff2); // Drop reference26 27 int numLeaks = psMemCheckLeaks(last, NULL, NULL, false); // Number of leaks28 ok(numLeaks == 0, "No leaks.");29 30 psFree(hash);31 32 done();33 34 } -
trunk/psLib/test/types/tap_psListIterator.c
r10822 r12781 2 2 #include <pslib.h> 3 3 #include <string.h> 4 5 4 #include "tap.h" 6 5 #include "pstap.h" … … 72 71 int main (void) 73 72 { 74 plan_tests(66); 73 psLogSetFormat("HLNM"); 74 psLogSetLevel(PS_LOG_INFO); 75 plan_tests(72); 75 76 76 77 note("psListIterator tests"); 77 78 { 79 note("Forwards");78 // Forwards 79 { 80 psMemId id = psMemGetId(); 80 81 psList *list = listGenerate(); 81 82 psListIterator *iter = psListIteratorAlloc(list, PS_LIST_HEAD, false); … … 94 95 psFree(iter); 95 96 psFree(list); 96 } 97 98 { 99 note("Backwards"); 97 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 98 } 99 100 101 // Backwards 102 { 103 psMemId id = psMemGetId(); 100 104 psList *list = listGenerate(); 101 105 psListIterator *iter = psListIteratorAlloc(list, PS_LIST_TAIL, NULL); … … 114 118 psFree(iter); 115 119 psFree(list); 116 } 117 118 { 119 note("Jumping in halfway through (using allocator), forwards"); 120 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 121 } 122 123 124 // Jumping in halfway through (using allocator), forwards 125 { 126 psMemId id = psMemGetId(); 120 127 psList *list = listGenerate(); 121 128 psListIterator *iter = psListIteratorAlloc(list, 3, NULL); … … 131 138 psFree(iter); 132 139 psFree(list); 133 } 134 135 { 136 note("Jumping in halfway through (using allocator), backwards"); 140 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 141 } 142 143 144 // Jumping in halfway through (using allocator), backwards 145 { 146 psMemId id = psMemGetId(); 137 147 psList *list = listGenerate(); 138 148 psListIterator *iter = psListIteratorAlloc(list, -4, NULL); … … 148 158 psFree(iter); 149 159 psFree(list); 150 } 151 152 { 153 note("Jumping in halfway through (using set), forwards"); 160 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 161 } 162 163 164 // Jumping in halfway through (using set), forwards 165 { 166 psMemId id = psMemGetId(); 154 167 psList *list = listGenerate(); 155 168 psListIterator *iter = psListIteratorAlloc(list, PS_LIST_HEAD, NULL); … … 166 179 psFree(iter); 167 180 psFree(list); 168 } 169 170 { 171 note("Jumping in halfway through (using set), backwards"); 181 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 182 } 183 184 185 // Jumping in halfway through (using set), backwards 186 { 187 psMemId id = psMemGetId(); 172 188 psList *list = listGenerate(); 173 189 psListIterator *iter = psListIteratorAlloc(list, PS_LIST_HEAD, NULL); … … 184 200 psFree(iter); 185 201 psFree(list); 186 } 187 188 return exit_status(); 202 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 203 } 189 204 } -
trunk/psLib/test/types/tap_psList_all.c
r12318 r12781 13 13 * 14 14 */ 15 16 15 #include <pslib.h> 17 16 #include <string.h> 18 19 17 #include "tap.h" 20 18 #include "pstap.h" 21 19 22 void testListCreate(void);23 void testListManip(void);24 void testListConvertSort(void);25 26 20 int main(void) 27 21 { 28 plan_tests(60); 29 30 note("Tests for psList Functions"); 31 32 testListCreate(); 33 testListManip(); 34 testListConvertSort(); 35 36 done(); 37 } 38 39 void testListCreate(void) 40 { 41 note(" >>>Test 1: psList Creation Fxns"); 42 psList *noList = NULL; 43 psListIterator *noIter = NULL; 44 psList *list = psListAlloc(NULL); 45 psMetadata *md = psMetadataAlloc(); 46 psListIterator *iter1 = NULL; 47 psListIterator *iter2 = NULL; 48 49 //Tests for psListAlloc & psMemCheckList 50 //Return empty list for NULL data input. 22 psLogSetFormat("HLNM"); 23 psLogSetLevel(PS_LOG_INFO); 24 plan_tests(62); 25 26 // Test 1: psList Creation Fxns"); 27 // testListCreate(void) 51 28 { 52 noList = psListAlloc(NULL); 53 ok( psListLength(noList) == 0 && psMemCheckList(noList), 54 "psListAlloc: return empty list for NULL data input."); 55 } 56 //Return allocated list for non-NULL data input. 57 psFree(noList); 58 { 59 60 noList = psListAlloc(md); 61 ok( psListLength(noList) == 1, 29 psMemId id = psMemGetId(); 30 psList *noList = NULL; 31 psListIterator *noIter = NULL; 32 psList *list = psListAlloc(NULL); 33 psMetadata *md = psMetadataAlloc(); 34 psListIterator *iter1 = NULL; 35 psListIterator *iter2 = NULL; 36 37 //Tests for psListAlloc & psMemCheckList 38 //Return empty list for NULL data input. 39 { 40 noList = psListAlloc(NULL); 41 ok( psListLength(noList) == 0 && psMemCheckList(noList), 42 "psListAlloc: return empty list for NULL data input."); 43 } 44 //Return allocated list for non-NULL data input. 45 psFree(noList); 46 { 47 noList = psListAlloc(md); 48 ok( psListLength(noList) == 1, 62 49 "psListAlloc: return correct list for non-NULL data input."); 63 } 64 //Make sure psMemCheckList works correctly - return false 65 { 66 int j = 2; 67 ok( !psMemCheckList(&j), 68 "psMemCheckList: return false for non-List input."); 69 } 70 71 //Tests for ListIteratorAlloc 72 //Return NULL for attempt to allocate iterator with NULL list input 73 { 74 noIter = psListIteratorAlloc(NULL, 0, true); 75 ok( noIter == NULL, 76 "psListIteratorAlloc: return false for NULL data input."); 77 } 78 //Attempt to Allocate a psListIterator with out-of-range location 79 { 80 iter1 = psListIteratorAlloc(noList, 10, false); 81 ok( iter1 == NULL, 82 "psListIteratorAlloc: return NULL for out-of-range location."); 83 } 84 //Return valid iterator for valid inputs 85 { 86 iter1 = psListIteratorAlloc(noList, 0, true); 87 ok( iter1 != NULL, 88 "psListIteratorAlloc: return valid iterator for valid inputs."); 89 } 90 91 //Tests For ListAdd Fxns 92 //Return false for NULL list input 93 { 94 ok( !psListAdd(NULL, 0, md), 95 "psListAdd: return false for NULL list input."); 96 } 97 //Return false for NULL data input 98 { 99 ok( !psListAdd(list, 0, NULL), 100 "psListAdd: return false for NULL data input."); 101 } 102 //Return false for list with NULL data 103 { 104 psFree(list->iterators->data[0]); 105 list->iterators->data[0] = NULL; 106 ok( !psListAdd(list, 0, md), 107 "psListAdd: return false for list with NULL iterators."); 108 psFree(list); 109 list = psListAlloc(md); 110 } 111 //Return true for valid inputs - tail location 112 { 113 ok( psListAdd(list, 2, md), 114 "psListAdd: return true for valid inputs - Tail Location."); 115 } 116 //Return true for valid inputs - head location 117 { 118 ok( psListAdd(list, 0, md), 119 "psListAdd: return true for valid inputs - head Location."); 120 } 121 122 //psListAddAfter Tests 123 //psListAddAfter - Return false for NULL data input 124 { 125 ok( !psListAddAfter(iter1, NULL), 126 "psListAddAfter: return false for NULL data input."); 127 } 128 //psListAddAfter - Return false for NULL iterator input 129 { 130 ok( !psListAddAfter(NULL, md), 131 "psListAddAfter: return false for NULL iterator input."); 132 } 133 //psListAddAfter - Return false for non-mutable iterator input 134 { 135 iter1->mutable = false; 136 ok( !psListAddAfter(iter1, md), 137 "psListAddAfter: return false for non-mutable iterator input."); 138 iter1->mutable = true; 139 psFree(iter1); 140 } 141 //psListAddAfter - Return false for iterator with NULL cursor 142 psList *newList = psListAlloc(md); 143 iter1 = psListIteratorAlloc(newList, 0, true); 144 psListElem *cursor = iter1->cursor; 145 { 146 iter1->cursor = NULL; 147 ok( !psListAddAfter(iter1, md), 148 "psListAddAfter: return false for iterator with headptr but no cursor."); 149 iter1->cursor = cursor; 150 } 151 //Set the iterator to a middle element, then add after 152 { 153 iter2 = psListIteratorAlloc(list, 1, true); 154 ok( psListAddAfter(iter2, md), 155 "psListAddAfter: return true for adding a list element to the middle."); 156 } 157 //Set the iterator to the head element, then add after a wrong index. return true 158 { 159 if (!psListIteratorSet(iter2, PS_LIST_HEAD) ) 160 printf("\nerror in set\n\n"); 161 ((psListIterator*)(iter2->list->iterators->data[0]))->index = 10; 162 ok( psListAddAfter(iter2, md), 163 "psListAddAfter: return true for adding a list element to the head."); 164 } 165 //Return true for adding to an empty list 166 psFree(noList); 167 noList = psListAlloc(NULL); 168 psListIterator *iter3 = psListIteratorAlloc(noList, 0, true); 169 { 170 ok( psListAddAfter(iter3, md), 171 "psListAddAfter: return true for adding to an empty list."); 172 } 173 174 //psListAddBefore Tests 175 //psListAddBefore - Return false for NULL data input 176 { 177 ok( !psListAddBefore(iter1, NULL), 178 "psListAddBefore: return false for NULL data input."); 179 } 180 //psListAddBefore - Return false for NULL iterator input 181 { 182 ok( !psListAddBefore(NULL, md), 183 "psListAddBefore: return false for NULL iterator input."); 184 } 185 //psListAddBefore - Return false for non-mutable iterator input 186 { 187 iter1->mutable = false; 188 ok( !psListAddBefore(iter1, md), 189 "psListAddBefore: return false for non-mutable iterator input."); 190 iter1->mutable = true; 191 } 192 { 193 cursor = iter1->cursor; 194 iter1->cursor = NULL; 195 ok( !psListAddBefore(iter1, md), 196 "psListAddBefore: return false for iterator with headptr but no cursor."); 197 iter1->cursor = cursor; 198 } 199 //Add before a middle list element 200 { 201 psListIteratorSet(iter2, -2); 202 ok( psListAddBefore(iter2, md), 203 "psListAddBefore: return true for adding a list element to the middle."); 204 } 205 //Set the iterator to the 2nd element, then add after a wrong index. return true 206 { 207 skip_start( !psListIteratorSet(iter2, 1), 1, 208 "Skipping 1 tests because psListIteratorSet failed"); 209 ((psListIterator*)(iter2->list->iterators->data[0]))->index = 10; 210 ok( psListAddBefore(iter2, md), 211 "psListAddBefore: return true for adding a list element to the head."); 212 skip_end(); 213 } 214 //Return true for adding to an empty list 215 { 50 } 51 //Make sure psMemCheckList works correctly - return false 52 { 53 int j = 2; 54 ok( !psMemCheckList(&j), 55 "psMemCheckList: return false for non-List input."); 56 } 57 58 //Tests for ListIteratorAlloc 59 //Return NULL for attempt to allocate iterator with NULL list input 60 { 61 noIter = psListIteratorAlloc(NULL, 0, true); 62 ok( noIter == NULL, 63 "psListIteratorAlloc: return false for NULL data input."); 64 } 65 //Attempt to Allocate a psListIterator with out-of-range location 66 { 67 iter1 = psListIteratorAlloc(noList, 10, false); 68 ok( iter1 == NULL, 69 "psListIteratorAlloc: return NULL for out-of-range location."); 70 } 71 //Return valid iterator for valid inputs 72 { 73 iter1 = psListIteratorAlloc(noList, 0, true); 74 ok( iter1 != NULL, 75 "psListIteratorAlloc: return valid iterator for valid inputs."); 76 } 77 78 //Tests For ListAdd Fxns 79 //Return false for NULL list input 80 { 81 ok( !psListAdd(NULL, 0, md), 82 "psListAdd: return false for NULL list input."); 83 } 84 //Return false for NULL data input 85 { 86 ok( !psListAdd(list, 0, NULL), 87 "psListAdd: return false for NULL data input."); 88 } 89 //Return false for list with NULL data 90 { 91 psFree(list->iterators->data[0]); 92 list->iterators->data[0] = NULL; 93 ok( !psListAdd(list, 0, md), 94 "psListAdd: return false for list with NULL iterators."); 95 psFree(list); 96 list = psListAlloc(md); 97 } 98 //Return true for valid inputs - tail location 99 { 100 ok( psListAdd(list, 2, md), 101 "psListAdd: return true for valid inputs - Tail Location."); 102 } 103 //Return true for valid inputs - head location 104 { 105 ok( psListAdd(list, 0, md), 106 "psListAdd: return true for valid inputs - head Location."); 107 } 108 109 //psListAddAfter Tests 110 //psListAddAfter - Return false for NULL data input 111 { 112 ok( !psListAddAfter(iter1, NULL), 113 "psListAddAfter: return false for NULL data input."); 114 } 115 //psListAddAfter - Return false for NULL iterator input 116 { 117 ok( !psListAddAfter(NULL, md), 118 "psListAddAfter: return false for NULL iterator input."); 119 } 120 //psListAddAfter - Return false for non-mutable iterator input 121 { 122 iter1->mutable = false; 123 ok( !psListAddAfter(iter1, md), 124 "psListAddAfter: return false for non-mutable iterator input."); 125 iter1->mutable = true; 126 psFree(iter1); 127 } 128 //psListAddAfter - Return false for iterator with NULL cursor 129 psList *newList = psListAlloc(md); 130 iter1 = psListIteratorAlloc(newList, 0, true); 131 psListElem *cursor = iter1->cursor; 132 { 133 iter1->cursor = NULL; 134 ok( !psListAddAfter(iter1, md), 135 "psListAddAfter: return false for iterator with headptr but no cursor."); 136 iter1->cursor = cursor; 137 } 138 //Set the iterator to a middle element, then add after 139 { 140 iter2 = psListIteratorAlloc(list, 1, true); 141 ok( psListAddAfter(iter2, md), 142 "psListAddAfter: return true for adding a list element to the middle."); 143 } 144 //Set the iterator to the head element, then add after a wrong index. return true 145 { 146 if (!psListIteratorSet(iter2, PS_LIST_HEAD) ) 147 printf("\nerror in set\n\n"); 148 ((psListIterator*)(iter2->list->iterators->data[0]))->index = 10; 149 ok( psListAddAfter(iter2, md), 150 "psListAddAfter: return true for adding a list element to the head."); 151 } 152 //Return true for adding to an empty list 216 153 psFree(noList); 217 154 noList = psListAlloc(NULL); 218 iter3 = psListIteratorAlloc(noList, 0, true); 219 psFree(iter3); 220 ok( psListAddBefore(iter3, md), 221 "psListAddBefore: return true for adding to an empty list."); 222 } 223 224 //Check the length of a NULL list 225 { 226 psList *emptyList = NULL; 227 ok( psListLength(emptyList) == -1, 228 "psListLength: return -1 for NULL input psList."); 229 } 230 231 //Check for Memory leaks 232 { 155 psListIterator *iter3 = psListIteratorAlloc(noList, 0, true); 156 { 157 ok( psListAddAfter(iter3, md), 158 "psListAddAfter: return true for adding to an empty list."); 159 } 160 161 //psListAddBefore Tests 162 //psListAddBefore - Return false for NULL data input 163 { 164 ok( !psListAddBefore(iter1, NULL), 165 "psListAddBefore: return false for NULL data input."); 166 } 167 //psListAddBefore - Return false for NULL iterator input 168 { 169 ok( !psListAddBefore(NULL, md), 170 "psListAddBefore: return false for NULL iterator input."); 171 } 172 //psListAddBefore - Return false for non-mutable iterator input 173 { 174 iter1->mutable = false; 175 ok( !psListAddBefore(iter1, md), 176 "psListAddBefore: return false for non-mutable iterator input."); 177 iter1->mutable = true; 178 } 179 { 180 cursor = iter1->cursor; 181 iter1->cursor = NULL; 182 ok( !psListAddBefore(iter1, md), 183 "psListAddBefore: return false for iterator with headptr but no cursor."); 184 iter1->cursor = cursor; 185 } 186 //Add before a middle list element 187 { 188 psListIteratorSet(iter2, -2); 189 ok( psListAddBefore(iter2, md), 190 "psListAddBefore: return true for adding a list element to the middle."); 191 } 192 //Set the iterator to the 2nd element, then add after a wrong index. return true 193 { 194 skip_start( !psListIteratorSet(iter2, 1), 1, 195 "Skipping 1 tests because psListIteratorSet failed"); 196 ((psListIterator*)(iter2->list->iterators->data[0]))->index = 10; 197 ok( psListAddBefore(iter2, md), 198 "psListAddBefore: return true for adding a list element to the head."); 199 skip_end(); 200 } 201 //Return true for adding to an empty list 202 { 203 psFree(noList); 204 noList = psListAlloc(NULL); 205 iter3 = psListIteratorAlloc(noList, 0, true); 206 psFree(iter3); 207 ok( psListAddBefore(iter3, md), 208 "psListAddBefore: return true for adding to an empty list."); 209 } 210 211 //Check the length of a NULL list 212 { 213 psList *emptyList = NULL; 214 ok( psListLength(emptyList) == -1, 215 "psListLength: return -1 for NULL input psList."); 216 } 217 233 218 psFree(iter2); 234 219 psFree(list); … … 237 222 psFree(md); 238 223 psFree(noList); 239 checkMem();224 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 240 225 } 241 } 242 243 void testListManip(void) 244 { 245 note(" >>>Test 2: psList Manipulation Fxns"); 246 psMetadata *md = psMetadataAlloc(); 247 psList *emptyList = psListAlloc(NULL); 248 psList *list = psListAlloc(md); 249 psSphere *sphere = psSphereAlloc(); 250 psCube *cube = psCubeAlloc(); 251 psArray *array = psArrayAlloc(0); 252 psListAdd(list, PS_LIST_TAIL, sphere); 253 psListAdd(list, PS_LIST_TAIL, cube); 254 psListAdd(list, PS_LIST_TAIL, array); 255 psListIterator *emptyIter = psListIteratorAlloc(emptyList, 0, true); 256 psListIterator *iter1 = psListIteratorAlloc(list, PS_LIST_TAIL, true); 257 258 //Tests for psListGet 259 //Return NULL for NULL list input 226 227 228 // testListManip() 229 // psList Manipulation Fxns"); 260 230 { 261 psMetadata *out = NULL; 262 out = (psMetadata*)psListGet(NULL, PS_LIST_HEAD); 263 ok( out == NULL, 264 "psListGet: return NULL for NULL list input."); 265 } 266 //Return NULL for empty list 267 { 268 psMetadata *out = NULL; 269 out = (psMetadata*)psListGet(emptyList, PS_LIST_HEAD); 270 ok( out == NULL, 271 "psListGet: return NULL for empty list."); 272 } 273 //Return NULL for out-of-range location 274 { 275 psMetadata *out = NULL; 276 out = (psMetadata*)psListGet(list, -10); 277 ok( out == NULL, 278 "psListGet: return NULL for out-of-range location."); 279 } 280 //Return correct head item for valid inputs 281 { 282 psMetadata *out = NULL; 283 out = (psMetadata*)psListGet(list, PS_LIST_HEAD); 284 ok( out != NULL && psMemCheckMetadata(out), 285 "psListGet: return correct head item for valid inputs."); 286 } 287 288 //Tests for psListGetAndIncrement 289 //Return NULL for NULL iterator input 290 { 291 psMetadata *out = NULL; 292 out = (psMetadata*)psListGetAndIncrement(NULL); 293 ok( out == NULL, 294 "psListGetAndIncrement: return NULL for NULL iterator input."); 295 } 296 //Return NULL for empty iterator with offend = false 297 { 298 psMetadata *out = NULL; 299 out = (psMetadata*)psListGetAndIncrement(emptyIter); 300 ok( out == NULL, 301 "psListGetAndIncrement: return NULL for empty iterator input."); 302 } 303 //Return NULL for empty iterator with offend = true 304 { 305 emptyIter->offEnd = true; 306 psMetadata *out = NULL; 307 out = (psMetadata*)psListGetAndIncrement(emptyIter); 308 ok( out == NULL, 309 "psListGetAndIncrement: return NULL for empty iterator input."); 310 emptyIter->offEnd = false; 311 } 312 //Return correct tail item for valid inputs 313 { 314 psArray *out = NULL; 315 out = (psArray*)psListGetAndIncrement(iter1); 316 ok( out != NULL && psMemCheckArray(out), 317 "psListGetAndIncrement: return correct tail item for valid inputs."); 318 } 319 320 //Tests for psListGetAndDecrement 321 //Return NULL for NULL iterator input 322 { 323 psMetadata *out = NULL; 324 out = (psMetadata*)psListGetAndDecrement(NULL); 325 ok( out == NULL, 326 "psListGetAndDecrement: return NULL for NULL iterator input."); 327 } 328 //Return NULL for empty iterator with offend = false 329 { 330 psMetadata *out = NULL; 331 out = (psMetadata*)psListGetAndDecrement(emptyIter); 332 ok( out == NULL, 333 "psListGetAndDecrement: return NULL for empty iterator input."); 334 } 335 //Return NULL for empty iterator with offend = true 336 { 337 emptyIter->offEnd = true; 338 psMetadata *out = NULL; 339 out = (psMetadata*)psListGetAndDecrement(emptyIter); 340 ok( out == NULL, 341 "psListGetAndDecrement: return NULL for empty iterator input."); 342 emptyIter->offEnd = false; 343 } 344 //Return correct tail item for valid inputs 345 { 346 psArray *out = NULL; 347 skip_start( !psListIteratorSet(iter1, PS_LIST_TAIL), 1, 348 "Skipping 1 tests because psListIteratorSet failed"); 349 out = (psArray*)psListGetAndDecrement(iter1); 350 ok( out != NULL && psMemCheckArray(out), 351 "psListGetAndDecrement: return correct tail item for valid inputs."); 352 skip_end(); 353 } 354 355 //Tests for psListRemove 356 //Return false for NULL list input 357 { 358 ok( !psListRemove(NULL, PS_LIST_HEAD), 359 "psListRemove: return false for NULL list input."); 360 } 361 //Return false for invalid location 362 { 363 ok( !psListRemove(list, -10), 364 "psListRemove: return false for invalid location."); 365 } 366 //Return false for empty list 367 { 368 ok( !psListRemove(emptyList, PS_LIST_HEAD), 369 "psListRemove: return false for remove from empty list."); 370 } 371 //Return true for remove from middle of list 372 { 373 ok( psListRemove(list, 2) && list->n == 3, 374 "psListRemove: return true for remove from middle of list."); 375 } 376 //Return true for remove from head of list 377 { 378 ok( psListRemove(list, PS_LIST_HEAD) && list->n ==2, 379 "psListRemove: return true for remove from head of list."); 380 } 381 //Return true for remove from tail of list 382 { 383 ok( psListRemove(list, PS_LIST_TAIL) && list->n == 1, 384 "psListRemove: return true for remove from tail of list."); 385 } 386 //Tests for psListRemoveData 387 //Return false for NULL list input 388 { 389 ok( !psListRemoveData(NULL, md), 390 "psListRemoveData: return false for NULL list input."); 391 } 392 //Return false for NULL data input 393 { 394 ok( !psListRemoveData(list, NULL), 395 "psListRemoveData: return false for NULL data input."); 396 } 397 //Return false for non-matching data 398 { 399 ok( !psListRemoveData(list, md), 400 "psListRemoveData: return false for non-matching data."); 401 } 402 //Return false for trying to remove from an empty list 403 { 404 ok( !psListRemoveData(emptyList, md), 405 "psListRemoveData: return false for trying to remove from an empty list."); 406 } 407 //Return true for remove of valid data 408 psListAdd(list, PS_LIST_HEAD, cube); 409 psListAdd(list, PS_LIST_HEAD, array); 410 { 411 ok( psListRemoveData(list, sphere), 412 "psListRemoveData: return true for remove of valid data."); 413 } 414 415 //Check for Memory leaks 416 { 231 psMemId id = psMemGetId(); 232 psMetadata *md = psMetadataAlloc(); 233 psList *emptyList = psListAlloc(NULL); 234 psList *list = psListAlloc(md); 235 psSphere *sphere = psSphereAlloc(); 236 psCube *cube = psCubeAlloc(); 237 psArray *array = psArrayAlloc(0); 238 psListAdd(list, PS_LIST_TAIL, sphere); 239 psListAdd(list, PS_LIST_TAIL, cube); 240 psListAdd(list, PS_LIST_TAIL, array); 241 psListIterator *emptyIter = psListIteratorAlloc(emptyList, 0, true); 242 psListIterator *iter1 = psListIteratorAlloc(list, PS_LIST_TAIL, true); 243 244 //Tests for psListGet 245 //Return NULL for NULL list input 246 { 247 psMetadata *out = NULL; 248 out = (psMetadata*)psListGet(NULL, PS_LIST_HEAD); 249 ok( out == NULL, 250 "psListGet: return NULL for NULL list input."); 251 } 252 //Return NULL for empty list 253 { 254 psMetadata *out = NULL; 255 out = (psMetadata*)psListGet(emptyList, PS_LIST_HEAD); 256 ok( out == NULL, 257 "psListGet: return NULL for empty list."); 258 } 259 //Return NULL for out-of-range location 260 { 261 psMetadata *out = NULL; 262 out = (psMetadata*)psListGet(list, -10); 263 ok( out == NULL, 264 "psListGet: return NULL for out-of-range location."); 265 } 266 //Return correct head item for valid inputs 267 { 268 psMetadata *out = NULL; 269 out = (psMetadata*)psListGet(list, PS_LIST_HEAD); 270 ok( out != NULL && psMemCheckMetadata(out), 271 "psListGet: return correct head item for valid inputs."); 272 } 273 274 //Tests for psListGetAndIncrement 275 //Return NULL for NULL iterator input 276 { 277 psMetadata *out = NULL; 278 out = (psMetadata*)psListGetAndIncrement(NULL); 279 ok( out == NULL, 280 "psListGetAndIncrement: return NULL for NULL iterator input."); 281 } 282 //Return NULL for empty iterator with offend = false 283 { 284 psMetadata *out = NULL; 285 out = (psMetadata*)psListGetAndIncrement(emptyIter); 286 ok( out == NULL, 287 "psListGetAndIncrement: return NULL for empty iterator input."); 288 } 289 //Return NULL for empty iterator with offend = true 290 { 291 emptyIter->offEnd = true; 292 psMetadata *out = NULL; 293 out = (psMetadata*)psListGetAndIncrement(emptyIter); 294 ok( out == NULL, 295 "psListGetAndIncrement: return NULL for empty iterator input."); 296 emptyIter->offEnd = false; 297 } 298 //Return correct tail item for valid inputs 299 { 300 psArray *out = NULL; 301 out = (psArray*)psListGetAndIncrement(iter1); 302 ok( out != NULL && psMemCheckArray(out), 303 "psListGetAndIncrement: return correct tail item for valid inputs."); 304 } 305 306 //Tests for psListGetAndDecrement 307 //Return NULL for NULL iterator input 308 { 309 psMetadata *out = NULL; 310 out = (psMetadata*)psListGetAndDecrement(NULL); 311 ok( out == NULL, 312 "psListGetAndDecrement: return NULL for NULL iterator input."); 313 } 314 //Return NULL for empty iterator with offend = false 315 { 316 psMetadata *out = NULL; 317 out = (psMetadata*)psListGetAndDecrement(emptyIter); 318 ok( out == NULL, 319 "psListGetAndDecrement: return NULL for empty iterator input."); 320 } 321 //Return NULL for empty iterator with offend = true 322 { 323 emptyIter->offEnd = true; 324 psMetadata *out = NULL; 325 out = (psMetadata*)psListGetAndDecrement(emptyIter); 326 ok( out == NULL, 327 "psListGetAndDecrement: return NULL for empty iterator input."); 328 emptyIter->offEnd = false; 329 } 330 //Return correct tail item for valid inputs 331 { 332 psArray *out = NULL; 333 skip_start( !psListIteratorSet(iter1, PS_LIST_TAIL), 1, 334 "Skipping 1 tests because psListIteratorSet failed"); 335 out = (psArray*)psListGetAndDecrement(iter1); 336 ok( out != NULL && psMemCheckArray(out), 337 "psListGetAndDecrement: return correct tail item for valid inputs."); 338 skip_end(); 339 } 340 341 //Tests for psListRemove 342 //Return false for NULL list input 343 { 344 ok( !psListRemove(NULL, PS_LIST_HEAD), 345 "psListRemove: return false for NULL list input."); 346 } 347 //Return false for invalid location 348 { 349 ok( !psListRemove(list, -10), 350 "psListRemove: return false for invalid location."); 351 } 352 //Return false for empty list 353 { 354 ok( !psListRemove(emptyList, PS_LIST_HEAD), 355 "psListRemove: return false for remove from empty list."); 356 } 357 //Return true for remove from middle of list 358 { 359 ok( psListRemove(list, 2) && list->n == 3, 360 "psListRemove: return true for remove from middle of list."); 361 } 362 //Return true for remove from head of list 363 { 364 ok( psListRemove(list, PS_LIST_HEAD) && list->n ==2, 365 "psListRemove: return true for remove from head of list."); 366 } 367 //Return true for remove from tail of list 368 { 369 ok( psListRemove(list, PS_LIST_TAIL) && list->n == 1, 370 "psListRemove: return true for remove from tail of list."); 371 } 372 //Tests for psListRemoveData 373 //Return false for NULL list input 374 { 375 ok( !psListRemoveData(NULL, md), 376 "psListRemoveData: return false for NULL list input."); 377 } 378 //Return false for NULL data input 379 { 380 ok( !psListRemoveData(list, NULL), 381 "psListRemoveData: return false for NULL data input."); 382 } 383 //Return false for non-matching data 384 { 385 ok( !psListRemoveData(list, md), 386 "psListRemoveData: return false for non-matching data."); 387 } 388 //Return false for trying to remove from an empty list 389 { 390 ok( !psListRemoveData(emptyList, md), 391 "psListRemoveData: return false for trying to remove from an empty list."); 392 } 393 //Return true for remove of valid data 394 psListAdd(list, PS_LIST_HEAD, cube); 395 psListAdd(list, PS_LIST_HEAD, array); 396 { 397 ok( psListRemoveData(list, sphere), 398 "psListRemoveData: return true for remove of valid data."); 399 } 400 417 401 psFree(md); 418 402 psFree(emptyList); … … 421 405 psFree(cube); 422 406 psFree(array); 423 checkMem();407 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 424 408 } 425 } 426 427 void testListConvertSort(void) 428 { 429 note(" >>>Test 3: psList Conversion and Sorting Fxns"); 430 psList *emptyList = psListAlloc(NULL); 431 psS32 *s1 = (psS32*)psAlloc(sizeof(psS32)); 432 *s1 = 2; 433 psS32 *s2 = (psS32*)psAlloc(sizeof(psS32)); 434 *s2 = 3; 435 psS32 *s3 = (psS32*)psAlloc(sizeof(psS32)); 436 *s3 = 1; 437 psList *list = psListAlloc(s1); 438 psListAdd(list, PS_LIST_TAIL, s2); 439 psListAdd(list, PS_LIST_TAIL, s3); 440 psArray *array = NULL; 441 psArray *emptyArray = psArrayAlloc(0); 442 psList *out = NULL; 443 444 //Tests for psListToArray 445 //Return NULL for NULL list input 409 410 411 // testListConvertSort() 412 // psList Conversion and Sorting Fxns"); 446 413 { 447 array = psListToArray(NULL); 448 ok( array == NULL, 449 "psListToArray: return NULL for NULL list input."); 450 } 451 //Return empty array for empty list input 452 { 453 array = psListToArray(emptyList); 454 ok( array->n == 0 && psMemCheckArray(array), 455 "psListToArray: return empty array for empty list input."); 456 psFree(array); 457 array = NULL; 458 } 459 //Return correct array for valid list input 460 { 461 array = psListToArray(list); 462 ok( array->n == 3 && *((psS32*)(array->data[0])) == 2, 463 "psListToArray: return correct array for valid list input."); 464 } 465 466 //Tests for psArrayToList 467 //Return NULL for NULL array input 468 { 469 out = psArrayToList(NULL); 470 ok( out == NULL, 471 "psArrayToList: return NULL for NULL array input."); 472 } 473 //Return empty list for empty array input 474 { 475 out = psArrayToList(emptyArray); 476 ok( out->n == 0 && psMemCheckList(out), 477 "psArrayToList: return empty list for empty array input."); 478 psFree(out); 479 out = NULL; 480 } 481 //Return correct list for valid array input 482 { 483 out = psArrayToList(array); 484 ok( out->n == 3 && *((psS32*)psListGet(out, PS_LIST_HEAD)) == 2, 485 "psArrayToList: return correct list for valid array input."); 486 } 487 488 //Tests for psListSort 489 //Return NULL for NULL list input 490 { 491 psList *none = NULL; 492 none = psListSort(none, (psComparePtrFunc)psCompareDescendingS32Ptr); 493 ok( none == NULL, 494 "psListSort: return NULL for NULL list input."); 495 } 496 //Return empty list for empty list input 497 { 498 emptyList = psListSort(emptyList, (psComparePtrFunc)psCompareDescendingS32Ptr); 499 ok( emptyList != NULL, 500 "psListSort: return empty list for empty list input."); 501 } 502 //Return properly sorted list for valid inputs 503 { 504 list = psListSort(list, (psComparePtrFunc)psCompareS32Ptr); 505 ok( *((psS32*)psListGet(list, 0)) == 1 && *((psS32*)psListGet(list, 1)) == 2, 506 "psListSort: return properly sorted list for valid inputs."); 507 } 508 //Return unchanged list for NULL psComparePtrFunc 509 { 510 psList *tempList = NULL; 511 tempList = psListSort(list, NULL); 512 ok( tempList == NULL, 513 "psListSort: return NULL for NULL psComparePtrFunc."); 514 } 515 516 517 //Check for Memory leaks 518 { 414 psMemId id = psMemGetId(); 415 psList *emptyList = psListAlloc(NULL); 416 psS32 *s1 = (psS32*)psAlloc(sizeof(psS32)); 417 *s1 = 2; 418 psS32 *s2 = (psS32*)psAlloc(sizeof(psS32)); 419 *s2 = 3; 420 psS32 *s3 = (psS32*)psAlloc(sizeof(psS32)); 421 *s3 = 1; 422 psList *list = psListAlloc(s1); 423 psListAdd(list, PS_LIST_TAIL, s2); 424 psListAdd(list, PS_LIST_TAIL, s3); 425 psArray *array = NULL; 426 psArray *emptyArray = psArrayAlloc(0); 427 psList *out = NULL; 428 429 //Tests for psListToArray 430 //Return NULL for NULL list input 431 { 432 array = psListToArray(NULL); 433 ok( array == NULL, 434 "psListToArray: return NULL for NULL list input."); 435 } 436 //Return empty array for empty list input 437 { 438 array = psListToArray(emptyList); 439 ok( array->n == 0 && psMemCheckArray(array), 440 "psListToArray: return empty array for empty list input."); 441 psFree(array); 442 array = NULL; 443 } 444 //Return correct array for valid list input 445 { 446 array = psListToArray(list); 447 ok( array->n == 3 && *((psS32*)(array->data[0])) == 2, 448 "psListToArray: return correct array for valid list input."); 449 } 450 451 //Tests for psArrayToList 452 //Return NULL for NULL array input 453 { 454 out = psArrayToList(NULL); 455 ok( out == NULL, 456 "psArrayToList: return NULL for NULL array input."); 457 } 458 //Return empty list for empty array input 459 { 460 out = psArrayToList(emptyArray); 461 ok( out->n == 0 && psMemCheckList(out), 462 "psArrayToList: return empty list for empty array input."); 463 psFree(out); 464 out = NULL; 465 } 466 //Return correct list for valid array input 467 { 468 out = psArrayToList(array); 469 ok( out->n == 3 && *((psS32*)psListGet(out, PS_LIST_HEAD)) == 2, 470 "psArrayToList: return correct list for valid array input."); 471 } 472 473 //Tests for psListSort 474 //Return NULL for NULL list input 475 { 476 psList *none = NULL; 477 none = psListSort(none, (psComparePtrFunc)psCompareDescendingS32Ptr); 478 ok( none == NULL, 479 "psListSort: return NULL for NULL list input."); 480 } 481 //Return empty list for empty list input 482 { 483 emptyList = psListSort(emptyList, (psComparePtrFunc)psCompareDescendingS32Ptr); 484 ok( emptyList != NULL, 485 "psListSort: return empty list for empty list input."); 486 } 487 //Return properly sorted list for valid inputs 488 { 489 list = psListSort(list, (psComparePtrFunc)psCompareS32Ptr); 490 ok( *((psS32*)psListGet(list, 0)) == 1 && *((psS32*)psListGet(list, 1)) == 2, 491 "psListSort: return properly sorted list for valid inputs."); 492 } 493 //Return unchanged list for NULL psComparePtrFunc 494 { 495 psList *tempList = NULL; 496 tempList = psListSort(list, NULL); 497 ok( tempList == NULL, 498 "psListSort: return NULL for NULL psComparePtrFunc."); 499 } 500 519 501 psFree(array); 520 502 psFree(out); … … 525 507 psFree(s2); 526 508 psFree(s3); 527 checkMem();509 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 528 510 } 529 530 511 } -
trunk/psLib/test/types/tap_psLookupTable_all.c
r12607 r12781 8 8 * Author: dRob <David.Robbins@mhpcc.hpc.mil>, (C) 2006 9 9 * 10 * XXX: Must add correct build directories. This file reads a file in the 11 * types/ subdirectory and will not execute directly if not run from psLib/test 12 * 10 13 * Copyright: See COPYING file that comes with this distribution 11 14 * 12 15 */ 13 14 16 #include <pslib.h> 15 17 #include <string.h> 16 17 18 #include "tap.h" 18 19 #include "pstap.h" 19 20 20 void testLookupTableAlloc(void);21 void testLookupTableReadImport(void);22 void testLookupTableInterpolates(void);23 21 24 22 int main(void) … … 26 24 psLogSetFormat("HLNM"); 27 25 psLogSetLevel(PS_LOG_INFO); 28 plan_tests(29); 29 30 // note("Tests for psLookupTable Functions"); 31 32 testLookupTableAlloc(); 33 testLookupTableReadImport(); 34 testLookupTableInterpolates(); 35 36 done(); 37 } 38 39 void testLookupTableAlloc(void) 40 { 41 // note(" >>>Test 1: psLookupTableAlloc & psMemCheckLookupTable Fxns"); 42 43 psLookupTable *lt = NULL; 44 45 //Tests for psLookupTableAlloc 46 //Return NULL for NULL filename input 26 plan_tests(31); 27 28 // Tests for psLookupTable Functions 29 30 31 // testLookupTableAlloc() 32 // psLookupTableAlloc & psMemCheckLookupTable Fxns 47 33 { 48 lt = psLookupTableAlloc(NULL, "\%f \%lf \%d \%ld", 10); 49 ok( lt == NULL, 50 "psLookupTableAlloc: return NULL for NULL filename input."); 34 psMemId id = psMemGetId(); 35 psLookupTable *lt = NULL; 36 //Tests for psLookupTableAlloc 37 //Return NULL for NULL filename input 38 { 39 lt = psLookupTableAlloc(NULL, "\%f \%lf \%d \%ld", 10); 40 ok( lt == NULL, 41 "psLookupTableAlloc: return NULL for NULL filename input."); 42 } 43 //Return NULL for NULL format input 44 { 45 lt = psLookupTableAlloc("table.dat", NULL, 10); 46 ok( lt == NULL, 47 "psLookupTableAlloc: return NULL for NULL format input."); 48 } 49 //Return properly allocated lookupTable for valid inputs 50 { 51 lt = psLookupTableAlloc("table.dat", "\%f \%lf \%d \%ld", 10); 52 ok( lt != NULL && psMemCheckLookupTable(lt), 53 "psLookupTableAlloc: " 54 "return properly allocated lookupTable for valid inputs."); 55 } 56 57 //Tests for psMemCheckArray 58 //Make sure psMemCheckArray works correctly - return false 59 { 60 int j = 2; 61 ok( !psMemCheckLookupTable(&j), 62 "psMemCheckLookupTable: return false for non-LookupTable input."); 63 } 64 65 psFree(lt); 66 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 51 67 } 52 //Return NULL for NULL format input 68 69 70 // testLookupTableReadImport() 71 // psVectorsReadFromFile, psLookupTableImport, psLookupTableRead Fxns"); 53 72 { 54 lt = psLookupTableAlloc("table.dat", NULL, 10); 55 ok( lt == NULL, 56 "psLookupTableAlloc: return NULL for NULL format input."); 57 } 58 //Return properly allocated lookupTable for valid inputs 59 { 60 lt = psLookupTableAlloc("table.dat", "\%f \%lf \%d \%ld", 10); 61 ok( lt != NULL && psMemCheckLookupTable(lt), 62 "psLookupTableAlloc: " 63 "return properly allocated lookupTable for valid inputs."); 64 } 65 66 //Tests for psMemCheckArray 67 //Make sure psMemCheckArray works correctly - return false 68 { 69 int j = 2; 70 ok( !psMemCheckLookupTable(&j), 71 "psMemCheckLookupTable: return false for non-LookupTable input."); 72 } 73 74 //Check for Memory leaks 75 { 76 psFree(lt); 77 checkMem(); 78 } 79 80 } 81 82 void testLookupTableReadImport(void) 83 { 84 // diag(" >>>Test 2: psVectorsReadFromFile, psLookupTableImport, psLookupTableRead Fxns"); 85 psArray *outVec = NULL; 86 psArray *vectors = NULL; 87 psLookupTable* table1 = NULL; 88 long numRows = 0; 89 90 //Tests for psVectorReadFromFile 91 // Attempt to read from NULL filename input 92 { 93 outVec = psVectorsReadFromFile(NULL, 94 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 95 ok( outVec == NULL, 96 "psVectorsReadFromFile: return NULL for NULL filename input."); 97 } 98 // Attempt to read from NULL format input 99 { 100 outVec = psVectorsReadFromFile("table.dat", NULL); 101 ok( outVec == NULL, 102 "psVectorsReadFromFile: return NULL for NULL format input."); 103 } 104 // Attempt to read from invalid filename input 105 { 106 outVec = psVectorsReadFromFile("tableS32.dat", 107 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 108 ok( outVec == NULL, 109 "psVectorsReadFromFile: return NULL for invalid filename input."); 110 } 111 // Attempt to read from invalid format input 112 { 113 outVec = psVectorsReadFromFile("table.dat", "\%s"); 114 ok( outVec == NULL, 115 "psVectorsReadFromFile: return NULL for invalid format input."); 116 } 117 // Attempt to read from table containing invalid entry - F32 118 { 119 outVec = psVectorsReadFromFile("tableF32_err.dat", 120 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 121 ok( outVec == NULL, 122 "psVectorsReadFromFile: return NULL for table containing invalid entry."); 123 } 124 // Attempt to read from table containing invalid entry - F64 125 { 126 outVec = psVectorsReadFromFile("tableF64_err.dat", 127 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 128 ok( outVec == NULL, 129 "psVectorsReadFromFile: return NULL for table containing invalid entry."); 130 } 131 // Attempt to read from table containing invalid entry - S32 132 { 133 outVec = psVectorsReadFromFile("tableS32_err.dat", 134 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 135 ok( outVec == NULL, 136 "psVectorsReadFromFile: return NULL for table containing invalid entry."); 137 } 138 // Attempt to read from table containing invalid entry - S64 139 { 140 outVec = psVectorsReadFromFile("tableS64_err.dat", 141 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 142 ok( outVec == NULL, 143 "psVectorsReadFromFile: return NULL for table containing invalid entry."); 144 } 145 // Attempt to read from empty table 146 { 147 outVec = psVectorsReadFromFile("tableF32_2.dat", 148 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 149 ok( outVec == NULL, 150 "psVectorsReadFromFile: return NULL for empty table."); 151 } 152 // Attempt to read from file with partially constructed row 153 { 154 outVec = psVectorsReadFromFile("table3.dat", 155 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 156 ok( outVec == NULL, 157 "psVectorsReadFromFile: return NULL for table with partially" 158 " constructed row."); 159 } 160 //Attempt to read with valid inputs 161 { 162 outVec = psVectorsReadFromFile("types/table.dat", 163 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 164 ok( outVec != NULL && outVec->n == 9 && 165 ((psVector*)(outVec->data[6]))->data.S32[1] == -8, 166 "psVectorsReadFromFile: return correct array for valid format input."); 167 } 168 169 //Tests for psLookupTableRead 170 // Attempt to read table with NULL input table specified 171 numRows = psLookupTableRead(table1); 172 { 173 ok( numRows == 0, 174 "psLookupTableRead: return NULL for NULL filename input."); 175 } 176 // Attempt to read table with bad filename specified 177 table1 = psLookupTableAlloc("psTable.dat", "\%f \%lf \%d \%ld", 10); 178 numRows = psLookupTableRead(table1); 179 { 180 ok( numRows == 0, 181 "psLookupTableRead: return NULL for table with invalid filename."); 182 } 183 184 // Attempt to read valid table with wrong indexCol 185 psFree(table1); 186 table1 = psLookupTableAlloc("table.dat", 73 psMemId id = psMemGetId(); 74 psArray *outVec = NULL; 75 psArray *vectors = NULL; 76 psLookupTable* table1 = NULL; 77 long numRows = 0; 78 79 //Tests for psVectorReadFromFile 80 // Attempt to read from NULL filename input 81 { 82 outVec = psVectorsReadFromFile(NULL, 83 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 84 ok( outVec == NULL, 85 "psVectorsReadFromFile: return NULL for NULL filename input."); 86 } 87 // Attempt to read from NULL format input 88 { 89 outVec = psVectorsReadFromFile("table.dat", NULL); 90 ok( outVec == NULL, 91 "psVectorsReadFromFile: return NULL for NULL format input."); 92 } 93 // Attempt to read from invalid filename input 94 { 95 outVec = psVectorsReadFromFile("tableS32.dat", 96 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 97 ok( outVec == NULL, 98 "psVectorsReadFromFile: return NULL for invalid filename input."); 99 } 100 // Attempt to read from invalid format input 101 { 102 outVec = psVectorsReadFromFile("table.dat", "\%s"); 103 ok( outVec == NULL, 104 "psVectorsReadFromFile: return NULL for invalid format input."); 105 } 106 // Attempt to read from table containing invalid entry - F32 107 { 108 outVec = psVectorsReadFromFile("tableF32_err.dat", 109 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 110 ok( outVec == NULL, 111 "psVectorsReadFromFile: return NULL for table containing invalid entry."); 112 } 113 // Attempt to read from table containing invalid entry - F64 114 { 115 outVec = psVectorsReadFromFile("tableF64_err.dat", 116 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 117 ok( outVec == NULL, 118 "psVectorsReadFromFile: return NULL for table containing invalid entry."); 119 } 120 // Attempt to read from table containing invalid entry - S32 121 { 122 outVec = psVectorsReadFromFile("tableS32_err.dat", 123 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 124 ok( outVec == NULL, 125 "psVectorsReadFromFile: return NULL for table containing invalid entry."); 126 } 127 // Attempt to read from table containing invalid entry - S64 128 { 129 outVec = psVectorsReadFromFile("tableS64_err.dat", 130 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 131 ok( outVec == NULL, 132 "psVectorsReadFromFile: return NULL for table containing invalid entry."); 133 } 134 // Attempt to read from empty table 135 { 136 outVec = psVectorsReadFromFile("tableF32_2.dat", 137 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 138 ok( outVec == NULL, 139 "psVectorsReadFromFile: return NULL for empty table."); 140 } 141 // Attempt to read from file with partially constructed row 142 { 143 outVec = psVectorsReadFromFile("table3.dat", 144 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 145 ok( outVec == NULL, 146 "psVectorsReadFromFile: return NULL for table with partially" 147 " constructed row."); 148 } 149 //Attempt to read with valid inputs 150 { 151 outVec = psVectorsReadFromFile("types/table.dat", 152 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf"); 153 ok( outVec != NULL && outVec->n == 9 && 154 ((psVector*)(outVec->data[6]))->data.S32[1] == -8, 155 "psVectorsReadFromFile: return correct array for valid format input."); 156 } 157 158 //Tests for psLookupTableRead 159 // Attempt to read table with NULL input table specified 160 numRows = psLookupTableRead(table1); 161 { 162 ok( numRows == 0, 163 "psLookupTableRead: return NULL for NULL filename input."); 164 } 165 // Attempt to read table with bad filename specified 166 table1 = psLookupTableAlloc("psTable.dat", "\%f \%lf \%d \%ld", 10); 167 numRows = psLookupTableRead(table1); 168 { 169 ok( numRows == 0, 170 "psLookupTableRead: return NULL for table with invalid filename."); 171 } 172 173 // Attempt to read valid table with wrong indexCol 174 psFree(table1); 175 table1 = psLookupTableAlloc("table.dat", 187 176 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 10); 188 numRows = psLookupTableRead(table1); 189 { 190 ok( numRows == 0, 191 "psLookupTableRead: return correct number of rows for valid inputs."); 192 } 193 // Attempt to read valid table 194 psFree(table1); 195 table1 = psLookupTableAlloc("types/table.dat", 196 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 197 numRows = psLookupTableRead(table1); 198 { 199 ok( numRows == 4, 200 "psLookupTableRead: return correct number of rows for valid inputs."); 201 } 202 203 //Tests for psLookupTableImport (remaining cases) 204 // Attempt to import table with negative indexCol 205 vectors = psVectorsReadFromFile(table1->filename, table1->format); 206 { 207 ok( !psLookupTableImport(table1, vectors, -1 ), 208 "psLookupTableImport: return false for negative indexCol input."); 209 } 210 //Attempt to import table with unsorted array column 211 psFree(table1); 212 table1 = psLookupTableAlloc("types/table.dat", 213 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 214 { 215 ok( psLookupTableImport(table1, vectors, 7 ), 216 "psLookupTableImport: return true for array with unsorted column"); 217 } 218 219 //Check for Memory leaks 220 { 177 numRows = psLookupTableRead(table1); 178 { 179 ok( numRows == 0, 180 "psLookupTableRead: return correct number of rows for valid inputs."); 181 } 182 // Attempt to read valid table 183 psFree(table1); 184 table1 = psLookupTableAlloc("types/table.dat", 185 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 186 numRows = psLookupTableRead(table1); 187 { 188 ok( numRows == 4, 189 "psLookupTableRead: return correct number of rows for valid inputs."); 190 } 191 192 //Tests for psLookupTableImport (remaining cases) 193 // Attempt to import table with negative indexCol 194 vectors = psVectorsReadFromFile(table1->filename, table1->format); 195 { 196 ok( !psLookupTableImport(table1, vectors, -1 ), 197 "psLookupTableImport: return false for negative indexCol input."); 198 } 199 //Attempt to import table with unsorted array column 200 psFree(table1); 201 table1 = psLookupTableAlloc("types/table.dat", 202 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 203 { 204 ok( psLookupTableImport(table1, vectors, 7 ), 205 "psLookupTableImport: return true for array with unsorted column"); 206 } 207 221 208 psFree(vectors); 222 209 psFree(outVec); 223 210 psFree(table1); 224 checkMem();211 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 225 212 } 226 } 227 228 void testLookupTableInterpolates(void) 229 { 230 // diag(" >>>Test 3: psLookupTableInterpolate & psLookupTableInterpolateAll Fxns"); 231 psLookupTable *table1 = NULL; 232 psVector *vec = NULL; 233 table1 = psLookupTableAlloc("types/table.dat", 234 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 235 psLookupTable *table2 = NULL; 236 table2 = psLookupTableAlloc("types/table.dat", 237 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 238 psLookupTableRead(table2); 239 240 //Tests for psLookupTableInterpolateAll 241 //Return NULL for NULL table input 213 214 215 // testLookupTableInterpolates() 216 // psLookupTableInterpolate & psLookupTableInterpolateAll Fxns 242 217 { 243 vec = psLookupTableInterpolateAll(NULL, 0); 244 ok( vec == NULL, 245 "psLookupTableInterpolateAll: return NULL for NULL table input."); 246 } 247 //Return NULL for NULL table values 248 { 249 vec = psLookupTableInterpolateAll(table1, 0); 250 ok( vec == NULL, 251 "psLookupTableInterpolateAll: return NULL for NULL table values."); 252 } 253 254 ok(table2->values != NULL, "table->values not NULL"); 255 //Return NULL for table with table->values->n == 0 256 { 257 long n = table2->values->n; 258 table2->values->n = 0; 259 vec = psLookupTableInterpolateAll(table2, 0); 260 ok( vec == NULL, 261 "psLookupTableInterpolateAll: return NULL for table with no columns."); 262 table2->values->n = n; 263 } 264 //Return NULL for invalid index input 265 { 266 vec = psLookupTableInterpolateAll(table2, -10.5); 267 ok( vec == NULL, 268 "psLookupTableInterpolateAll: return NULL for invalid index input."); 269 } 270 //Return correct vector output for valid inputs 271 { 272 vec = psLookupTableInterpolateAll(table2, 1); 273 skip_start( vec == NULL, 1, 274 "Skipping 1 tests because psLookupTableInterpolateAll failed"); 275 is_double(vec->data.F64[0], 1.0, 276 "psLookupTableInterpolateAll: return correct output vector for valid inputs."); 277 skip_end(); 278 } 279 280 //Remaining tests for psLookupTableInterpolate 281 //Return NAN for invalid index - divide by zero error 282 psLookupTable *table3 = NULL; 283 table3 = psLookupTableAlloc("table2.dat", 284 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 285 psLookupTableRead(table3); 286 { 287 double retVal; 288 retVal = psLookupTableInterpolate(table3, 1.5e-20, 0); 289 ok( isnan(retVal), 290 "psLookupTableInterpolateAll: return NAN for invalid index input."); 291 } 292 293 //Check for Memory leaks 294 { 218 psMemId id = psMemGetId(); 219 psLookupTable *table1 = NULL; 220 psVector *vec = NULL; 221 // XXX: Remove the "types" path here 222 table1 = psLookupTableAlloc("types/table.dat", 223 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 224 psLookupTable *table2 = NULL; 225 // XXX: Remove the "types" path here 226 table2 = psLookupTableAlloc("types/table.dat", 227 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 228 psLookupTableRead(table2); 229 230 //Tests for psLookupTableInterpolateAll 231 //Return NULL for NULL table input 232 { 233 vec = psLookupTableInterpolateAll(NULL, 0); 234 ok( vec == NULL, 235 "psLookupTableInterpolateAll: return NULL for NULL table input."); 236 } 237 //Return NULL for NULL table values 238 { 239 vec = psLookupTableInterpolateAll(table1, 0); 240 ok( vec == NULL, 241 "psLookupTableInterpolateAll: return NULL for NULL table values."); 242 } 243 244 ok(table2->values != NULL, "table->values not NULL"); 245 //Return NULL for table with table->values->n == 0 246 { 247 long n = table2->values->n; 248 table2->values->n = 0; 249 vec = psLookupTableInterpolateAll(table2, 0); 250 ok( vec == NULL, 251 "psLookupTableInterpolateAll: return NULL for table with no columns."); 252 table2->values->n = n; 253 } 254 //Return NULL for invalid index input 255 { 256 vec = psLookupTableInterpolateAll(table2, -10.5); 257 ok( vec == NULL, 258 "psLookupTableInterpolateAll: return NULL for invalid index input."); 259 } 260 //Return correct vector output for valid inputs 261 { 262 vec = psLookupTableInterpolateAll(table2, 1); 263 skip_start( vec == NULL, 1, 264 "Skipping 1 tests because psLookupTableInterpolateAll failed"); 265 is_double(vec->data.F64[0], 1.0, 266 "psLookupTableInterpolateAll: return correct output vector for valid inputs."); 267 skip_end(); 268 } 269 270 //Remaining tests for psLookupTableInterpolate 271 //Return NAN for invalid index - divide by zero error 272 psLookupTable *table3 = NULL; 273 table3 = psLookupTableAlloc("table2.dat", 274 "\%f \%d \%d \%ld \%d \%d \%d \%ld \%*d \%lf", 0); 275 psLookupTableRead(table3); 276 { 277 double retVal; 278 retVal = psLookupTableInterpolate(table3, 1.5e-20, 0); 279 ok( isnan(retVal), 280 "psLookupTableInterpolateAll: return NAN for invalid index input."); 281 } 282 295 283 psFree(table3); 296 284 psFree(vec); 297 285 psFree(table2); 298 286 psFree(table1); 299 checkMem();287 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 300 288 } 301 302 289 } -
trunk/psLib/test/types/tap_psMetadataConfigFormat.c
r12607 r12781 9 9 * 10 10 */ 11 12 11 #include <pslib.h> 13 12 #include <string.h> 14 15 13 #include "tap.h" 16 14 #include "pstap.h" … … 18 16 int main(void) 19 17 { 18 psLogSetFormat("HLNM"); 19 psLogSetLevel(PS_LOG_INFO); 20 20 plan_tests(16 + 1); 21 21 22 22 psMetadata *md = NULL; 23 23 psString out = NULL; 24 25 24 //psString psMetadataConfigFormat(psMetadata *md); 26 27 25 //Return NULL for NULL metadata input 28 26 { -
trunk/psLib/test/types/tap_psMetadataConfigParse.c
r12607 r12781 10 10 * 11 11 */ 12 13 12 #include <pslib.h> 14 13 #include <string.h> 15 14 #include <fcntl.h> 16 15 #include <unistd.h> 17 18 16 #include "tap.h" 19 17 #include "pstap.h" … … 21 19 int main(void) 22 20 { 23 plan_tests(35 + 1);24 25 21 psLogSetFormat("HLNM"); 26 // psTraceSetLevel("err", 10); 22 psLogSetLevel(PS_LOG_INFO); 23 plan_tests(35); 27 24 28 25 … … 38 35 } 39 36 37 40 38 // Return empty metadata for incorrect string input 41 39 { … … 48 46 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 49 47 } 48 50 49 51 50 // Return correct metadata for correct string input - S32 … … 69 68 } 70 69 70 71 71 // Return correct metadata for correct string input - F64 72 72 { … … 89 89 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 90 90 } 91 91 92 92 93 // Return correct metadata for string with duplicate entry - S8 … … 114 115 } 115 116 117 116 118 // Return correct metadata for correct string input - Vector 117 119 { … … 137 139 } 138 140 141 139 142 // Return empty metadata for incorrect string input 140 143 { … … 148 151 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 149 152 } 150 151 done();152 153 } 153 154 -
trunk/psLib/test/types/tap_psMetadataConfigParse_time.c
r12478 r12781 1 1 #include <stdio.h> 2 2 #include <pslib.h> 3 4 3 #include "tap.h" 5 4 #include "pstap.h" … … 7 6 int main (void) 8 7 { 8 psLogSetFormat("HLNM"); 9 psLogSetLevel(PS_LOG_INFO); 9 10 plan_tests(39 + 1); 11 10 12 11 13 { 12 14 psMemId id = psMemGetId(); 13 14 15 char *testStr = "time UTC 2005-03-18T16:05:00Z\n"; 15 16 16 psU32 nBad = 0; 17 17 psMetadata *md = psMetadataConfigParse(NULL, &nBad, testStr, false); … … 28 28 29 29 psFree(md); 30 31 30 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 32 31 } 33 32 33 34 34 { 35 35 psMemId id = psMemGetId(); 36 37 36 char *testStr = "time UT1 2005-03-18T16:05:00Z\n"; 38 39 37 psU32 nBad = 0; 40 38 psMetadata *md = psMetadataConfigParse(NULL, &nBad, testStr, false); … … 51 49 52 50 psFree(md); 53 54 51 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 55 52 } 56 53 54 57 55 { 58 56 psMemId id = psMemGetId(); 59 60 57 char *testStr = "time TAI 2005-03-18T16:05:00Z\n"; 61 62 58 psU32 nBad = 0; 63 59 psMetadata *md = psMetadataConfigParse(NULL, &nBad, testStr, false); … … 74 70 75 71 psFree(md); 76 77 72 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 78 73 } 79 74 75 80 76 { 81 77 psMemId id = psMemGetId(); 82 83 78 char *testStr = "time TT 2005-03-18T16:05:00Z"; 84 85 79 psU32 nBad = 0; 86 80 psMetadata *md = psMetadataConfigParse(NULL, &nBad, testStr, false); … … 97 91 98 92 psFree(md); 99 100 93 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 101 94 } 102 95 96 103 97 { 104 98 psMemId id = psMemGetId(); 105 106 99 // missing Z 107 100 char *testStr = "broken UTC 2005-03-18T16:05:00"; 108 109 101 psU32 nBad = 0; 110 102 psMetadata *md = psMetadataConfigParse(NULL, &nBad, testStr, false); … … 120 112 { 121 113 psMemId id = psMemGetId(); 122 123 114 // missing Z 124 115 char *testStr = "broken UT1 2005-03-18T16:05:00"; 125 126 116 psU32 nBad = 0; 127 117 psMetadata *md = psMetadataConfigParse(NULL, &nBad, testStr, false); … … 137 127 { 138 128 psMemId id = psMemGetId(); 139 140 129 // missing Z 141 130 char *testStr = "broken TAI 2005-03-18T16:05:00"; 142 143 131 psU32 nBad = 0; 144 132 psMetadata *md = psMetadataConfigParse(NULL, &nBad, testStr, false); … … 149 137 150 138 psFree(md); 151 152 139 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 153 140 } 154 141 142 155 143 { 156 144 psMemId id = psMemGetId(); 157 158 145 // missing Z 159 146 char *testStr = "broken TT 2005-03-18T16:05:00"; 160 161 147 psU32 nBad = 0; 162 148 psMetadata *md = psMetadataConfigParse(NULL, &nBad, testStr, false); … … 167 153 168 154 psFree(md); 169 170 155 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 171 156 } 172 173 return exit_status();174 157 } -
trunk/psLib/test/types/tap_psMetadataConfigPrint.c
r12607 r12781 9 9 * 10 10 */ 11 12 11 #include <pslib.h> 13 12 #include <string.h> 14 15 13 #include "tap.h" 16 14 #include "pstap.h" … … 18 16 int main(void) 19 17 { 20 plan_tests(7); 18 psLogSetFormat("HLNM"); 19 psLogSetLevel(PS_LOG_INFO); 20 plan_tests(11); 21 21 22 22 23 //Return false for NULL metadata input 23 24 { 25 psMemId id = psMemGetId(); 24 26 FILE *openfile = fopen("mdcfg.prt", "w+"); 25 27 … … 28 30 29 31 fclose(openfile); 30 remove 31 ("mdcfg.prt");32 remove("mdcfg.prt"); 33 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 32 34 } 35 33 36 34 37 //Return false for empty metadata input 35 38 { 39 psMemId id = psMemGetId(); 36 40 FILE *openfile = fopen("mdcfg.prt", "w+"); 37 41 psMetadata *md = psMetadataAlloc(); … … 42 46 psFree(md); 43 47 fclose(openfile); 44 remove 45 ("mdcfg.prt");48 remove("mdcfg.prt"); 49 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 46 50 } 51 47 52 48 53 //Return false for NULL file input 49 54 { 55 psMemId id = psMemGetId(); 50 56 psMetadata *md = psMetadataAlloc(); 51 57 psMetadataAddS32(md, PS_LIST_HEAD, "new S32", 0, "", 666); … … 55 61 56 62 psFree(md); 63 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 57 64 } 65 58 66 59 67 // Return false for read-only file input 60 68 { 69 psMemId id = psMemGetId(); 61 70 // create an empty file to open read only later 62 71 { … … 74 83 psFree(md); 75 84 fclose(openfile); 76 remove 77 ("mdcfg.prt");85 remove("mdcfg.prt"); 86 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 78 87 } 88 79 89 80 90 // Return true for valid inputs 81 91 { 92 psMemId id = psMemGetId(); 82 93 FILE *openfile = fopen("mdcfg.prt", "w+"); 83 94 psMetadata *md = psMetadataAlloc(); … … 100 111 101 112 fclose(mdcfg); 102 remove 103 ("mdcfg.prt");113 remove("mdcfg.prt"); 114 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 104 115 } 105 106 done();107 116 } -
trunk/psLib/test/types/tap_psMetadataConfigRead.c
r12474 r12781 109 109 ) 110 110 { 111 psMemId id = psMemGetId(); 111 112 skip_start(!item, 3, "Skipping 4 tests because !item"); 112 113 ok(strcmp(item->name, name) == 0, "item->name = %s", item->name); … … 142 143 } 143 144 skip_end(); 145 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 144 146 return NULL; 145 147 } 146 148 147 149 148 int main (void)150 int main(void) 149 151 { 150 plan_tests(52); 152 psLogSetFormat("HLNM"); 153 psLogSetLevel(PS_LOG_INFO); 154 plan_tests(62); 151 155 152 156 generateMDConfig(); -
trunk/psLib/test/types/tap_psMetadataConfigWrite.c
r12607 r12781 9 9 * 10 10 */ 11 12 11 #include <pslib.h> 13 12 #include <string.h> 14 15 13 #include "tap.h" 16 14 #include "pstap.h" 17 15 16 18 17 int main(void) 19 18 { 20 plan_tests(7); 19 psLogSetFormat("HLNM"); 20 psLogSetLevel(PS_LOG_INFO); 21 plan_tests(11); 22 21 23 22 24 //Return false for NULL metadata input 23 25 { 26 psMemId id = psMemGetId(); 24 27 ok( !psMetadataConfigWrite(NULL, "mdcfg.wrt"), 25 28 "return false for NULL metadata input."); 29 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 26 30 } 31 27 32 28 33 //Return false for NULL filename input 29 34 { 35 psMemId id = psMemGetId(); 30 36 psMetadata *md = psMetadataAlloc(); 31 37 ok( !psMetadataConfigWrite(md, NULL), 32 38 "return false for NULL filename input."); 33 39 psFree(md); 40 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 34 41 } 42 35 43 36 44 //Return false for invalid filename input 37 45 { 46 psMemId id = psMemGetId(); 38 47 psMetadata *md = psMetadataAlloc(); 39 48 ok( !psMetadataConfigWrite(md, "."), 40 49 "return false for invalid filename input."); 41 50 psFree(md); 51 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 42 52 } 53 43 54 44 55 //Return false for empty metadata input 45 56 { 57 psMemId id = psMemGetId(); 46 58 psMetadata *md = psMetadataAlloc(); 47 59 ok( !psMetadataConfigWrite(md, "mdcfg.wrt"), 48 60 "return false for empty metadata input."); 49 61 psFree(md); 62 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 50 63 } 64 51 65 52 66 //Return true for valid inputs 53 67 { 68 psMemId id = psMemGetId(); 54 69 psMetadata *md = psMetadataAlloc(); 55 70 psMetadataAddBool(md, PS_LIST_TAIL, "item1-1", 0, "I am a boolean", true); … … 68 83 ("mdcfg.wrt"); 69 84 psFree(md); 85 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 70 86 } 71 72 done();73 87 } -
trunk/psLib/test/types/tap_psMetadataConfig_input.c
r12607 r12781 10 10 * 11 11 */ 12 13 12 #include <pslib.h> 14 13 #include <string.h> 15 14 #include <fcntl.h> 16 15 #include <unistd.h> 17 18 19 16 #include "tap.h" 20 17 #include "pstap.h" … … 22 19 int main(void) 23 20 { 24 plan_tests(30 + 1);25 26 21 psLogSetFormat("HLNM"); 27 // psTraceSetLevel("err", 10); 22 psLogSetLevel(PS_LOG_INFO); 23 plan_tests(30); 28 24 29 25 … … 33 29 unsigned int nfail = 0; 34 30 psMetadata *md = psMetadataConfigRead(NULL, &nfail, NULL, false); 35 36 31 ok(md == NULL, "return NULL for NULL filename input."); 37 38 32 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 39 33 } 34 40 35 41 36 // Return NULL for invalid filename input … … 44 39 unsigned int nfail = 0; 45 40 psMetadata *md = psMetadataConfigRead(NULL, &nfail, ".", false); 46 47 41 ok(md == NULL, "return NULL for invalid filename input."); 48 49 42 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 50 43 } 44 51 45 52 46 // Return NULL for missing file input … … 56 50 psMetadata *md = psMetadataConfigRead(NULL, &nfail, "table4.dat", false); 57 51 ok(md == NULL, "return NULL for missing file input."); 58 59 52 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 60 53 } 54 61 55 62 56 // Return NULL for read-only file with comments, bad syntax, and no good … … 68 62 ok(md == NULL, "return NULL for all bad syntax"); 69 63 is_int(nfail, 0, "correct nfail"); 70 71 64 psFree(md); 72 65 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 73 66 } 67 74 68 75 69 // Return true for valid inputs - overwrite = false … … 100 94 is_int(item->data.S32, 666, "metdataItem value"); 101 95 is_str(item->comment, "this line is \"GOOD\" but parsed in the top level", "metadataItem comment."); 102 103 96 skip_end(); 104 97 psFree(md); 105 98 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 106 99 } 100 107 101 108 102 // Return true for valid inputs - overwrite = true … … 136 130 137 131 is_str(item->comment, "", "metadataItem comment"); 138 139 132 skip_end(); 140 133 psFree(md); 141 134 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 142 135 } 143 144 done();145 136 } -
trunk/psLib/test/types/tap_psMetadataItemCompare.c
r10822 r12781 9 9 * 10 10 */ 11 12 11 #include <pslib.h> 13 14 12 #include "tap.h" 15 13 #include "pstap.h" 16 14 17 void testItemCompare(void);18 15 19 int main (void)16 int main(void) 20 17 { 18 psLogSetFormat("HLNM"); 19 psLogSetLevel(PS_LOG_INFO); 21 20 plan_tests(22); 22 21 23 note("psMetadataItemCompare() tests"); 22 // psMetadataItemCompare() tests 23 { 24 psMemId id = psMemGetId(); 25 psMetadataItem *compare = NULL; 26 psMetadataItem *template = NULL; 27 psMetadataItem *itemCopy = NULL; 28 psMetadataItem *item = psMetadataItemAlloc("Snickers", PS_DATA_BOOL, "No Comment", true) 29 ; 30 31 //Return false for NULL compare psMetadataItem 32 { 33 ok( !psMetadataItemCompare(compare, item), 34 "psMetadataItemCompare: return false for NULL compare input." ); 35 } 36 //Return false for NULL template psMetadataItem 37 { 38 ok( !psMetadataItemCompare(item, template), 39 "psMetadataItemCompare: return false for NULL template input." ); 40 } 41 42 //Return false for psMetadataItem's with different names 43 { 44 template = psMetadataItemAlloc("Milky Way", PS_DATA_BOOL, "No Comment", true) 45 ; 46 compare = psMetadataItemAlloc("Snickers", PS_DATA_S32, "No Comment", 1); 47 ok( !psMetadataItemCompare(template, item), 48 "psMetadataItemCompare: return false for input with different names."); 49 } 24 50 25 testItemCompare(); 51 //Return true for an exact match (copied psMetadataItem) 52 { 53 itemCopy = psMetadataItemCopy(item); 54 ok( psMetadataItemCompare(itemCopy, item), 55 "psMetadataItemCompare: return true for comparison of identical psMetadataItem's."); 56 } 57 58 //Return true for psMetadataItem's with different types but otherwise identical 59 { 60 ok( psMetadataItemCompare(compare, item), 61 "psMetadataItemCompare: return true for valid compare of different type."); 62 } 63 64 //Return true for comparing Bool with F64 65 { 66 psFree(compare); 67 compare = psMetadataItemAlloc("Snickers", PS_DATA_F64, "No Comment", 1.0000); 68 ok( psMetadataItemCompare(compare, item), 69 "psMetadataItemCompare: return false for comparison of F64 to bool." ); 70 } 26 71 27 done(); 28 } 72 //Return true for comparing F64 with Bool 73 { 74 ok( psMetadataItemCompare(item, compare), 75 "psMetadataItemCompare: return false for comparison of bool to F64." ); 76 } 77 78 //Return true for comparing S32 with F32 of same value 79 { 80 psFree(template); 81 template = psMetadataItemAlloc("Snickers", PS_DATA_S32, "No Comment", 1); 82 psFree(compare); 83 compare = psMetadataItemAlloc("Snickers", PS_DATA_F32, "No Comment", 1.00); 84 ok( psMetadataItemCompare(compare, template), 85 "psMetadataItemCompare: return true for comparison of S32 to F32." ); 86 } 29 87 30 void testItemCompare(void) 31 { 32 note(" >>>Test 1: psMetadataItemCompare"); 88 //Return true for comparing F32 with S32 of same value 89 { 90 ok( psMetadataItemCompare(template, compare), 91 "psMetadataItemCompare: return true for comparison of F32 to S32." ); 92 } 93 94 //Return true for comparing U32 with S16 of same value 95 { 96 psFree(template); 97 template = psMetadataItemAlloc("Snickers", PS_DATA_S16, "No Comment", 1); 98 psFree(compare); 99 compare = psMetadataItemAlloc("Snickers", PS_DATA_U32, "No Comment", 1); 100 ok( psMetadataItemCompare(compare, template), 101 "psMetadataItemCompare: return true for comparison of S16 to U32." ); 102 } 33 103 34 psMetadataItem *compare = NULL; 35 psMetadataItem *template = NULL; 36 psMetadataItem *itemCopy = NULL; 37 psMetadataItem *item = psMetadataItemAlloc("Snickers", PS_DATA_BOOL, "No Comment", true) 38 ; 104 //Return true for comparing S16 with U32 of same value 105 { 106 ok( psMetadataItemCompare(template, compare), 107 "psMetadataItemCompare: return true for comparison of U32 to S16." ); 108 } 109 110 //Return true for comparing U8 with U16 of same value 111 { 112 psFree(template); 113 template = psMetadataItemAlloc("Snickers", PS_DATA_U8, "No Comment", 1); 114 psFree(compare); 115 compare = psMetadataItemAlloc("Snickers", PS_DATA_U16, "No Comment", 1); 116 ok( psMetadataItemCompare(compare, template), 117 "psMetadataItemCompare: return true for comparison of U8 to U16." ); 118 } 39 119 40 //Return false for NULL compare psMetadataItem 41 { 42 ok( !psMetadataItemCompare(compare, item), 43 "psMetadataItemCompare: return false for NULL compare input." ); 44 } 45 //Return false for NULL template psMetadataItem 46 { 47 ok( !psMetadataItemCompare(item, template), 48 "psMetadataItemCompare: return false for NULL template input." ) 49 ; 50 } 120 //Return true for comparing U16 with U8 of same value 121 { 122 ok( psMetadataItemCompare(template, compare), 123 "psMetadataItemCompare: return true for comparison of U16 to U8." ); 124 } 125 126 //Return true for comparing U8 with S8 of same value 127 { 128 psFree(compare); 129 compare = psMetadataItemAlloc("Snickers", PS_DATA_S8, "No Comment", 1); 130 ok( psMetadataItemCompare(compare, template), 131 "psMetadataItemCompare: return true for comparison of U8 to S8." ); 132 } 51 133 52 //Return false for psMetadataItem's with different names 53 { 54 template = psMetadataItemAlloc("Milky Way", PS_DATA_BOOL, "No Comment", true) 55 ; 56 compare = psMetadataItemAlloc("Snickers", PS_DATA_S32, "No Comment", 1); 57 ok( !psMetadataItemCompare(template, item), 58 "psMetadataItemCompare: return false for input with different names.") 59 ; 60 } 61 //Return true for an exact match (copied psMetadataItem) 62 { 63 itemCopy = psMetadataItemCopy(item); 64 ok( psMetadataItemCompare(itemCopy, item), 65 "psMetadataItemCompare: return true for comparison of identical psMetadataItem's."); 66 } 134 //Return true for comparing S8 with U8 of same value 135 { 136 ok( psMetadataItemCompare(template, compare), 137 "psMetadataItemCompare: return true for comparison of S8 to U8." ); 138 } 139 140 //Return false for comparing U8 with S64 of same value 141 { 142 psFree(compare); 143 compare = psMetadataItemAlloc("Snickers", PS_DATA_S64, "No Comment", 1); 144 ok( !psMetadataItemCompare(compare, template), 145 "psMetadataItemCompare: return false for comparison of U8 to S64*. " 146 "*not yet implemented" ); 147 } 67 148 68 //Return true for psMetadataItem's with different types but otherwise identical 69 { 70 ok( psMetadataItemCompare(compare, item), 71 "psMetadataItemCompare: return true for valid compare of different type."); 72 } 149 //Return false for comparing S64 with U8 of same value 150 { 151 ok( !psMetadataItemCompare(template, compare), 152 "psMetadataItemCompare: return false for comparison of S64* to U8. " 153 "*not yet implemented" ); 154 } 155 156 //Return false for comparing string of different value 157 { 158 psFree(compare); 159 compare = psMetadataItemAlloc("Snickers", PS_DATA_STRING, "No Comment", 160 "Not Going Anywhere?"); 161 psFree(template); 162 template = psMetadataItemAlloc("Snickers", PS_DATA_STRING, "No Comment", "For a While?"); 163 ok( !psMetadataItemCompare(compare, template), 164 "psMetadataItemCompare: return false for comparison of different psString's."); 165 } 166 167 //Return true for comparing string of same value 168 { 169 psFree(template); 170 template = psMetadataItemAlloc("Snickers", PS_DATA_STRING, "No Comment", 171 "Not Going Anywhere?"); 172 ok( psMetadataItemCompare(compare, template), 173 "psMetadataItemCompare: return true for comparison of identical psString's."); 174 } 175 176 //Return false for comparing string with bool 177 { 178 psFree(template); 179 template = psMetadataItemAlloc("Snickers", PS_DATA_BOOL, "No Comment", false); 180 ok( !psMetadataItemCompare(compare, template), 181 "psMetadataItemCompare: return false for comparison of psString with bool."); 182 } 73 183 74 //Return true for comparing Bool with F64 75 { 184 //Return false for comparing bool with string 185 { 186 psFree(template); 187 template = psMetadataItemAlloc("Snickers", PS_DATA_BOOL, "No Comment", false); 188 ok( !psMetadataItemCompare(template, compare), 189 "psMetadataItemCompare: return false for comparison of psString with bool."); 190 } 191 76 192 psFree(compare); 77 compare = psMetadataItemAlloc("Snickers", PS_DATA_F64, "No Comment", 1.0000); 78 ok( psMetadataItemCompare(compare, item), 79 "psMetadataItemCompare: return false for comparison of F64 to bool." ); 80 } 81 //Return true for comparing F64 with Bool 82 { 83 ok( psMetadataItemCompare(item, compare), 84 "psMetadataItemCompare: return false for comparison of bool to F64." ); 85 } 86 87 //Return true for comparing S32 with F32 of same value 88 { 89 psFree(template) 90 ; 91 template = psMetadataItemAlloc("Snickers", PS_DATA_S32, "No Comment", 1) 92 ; 93 psFree(compare); 94 compare = psMetadataItemAlloc("Snickers", PS_DATA_F32, "No Comment", 1.00); 95 ok( psMetadataItemCompare(compare, template), 96 "psMetadataItemCompare: return true for comparison of S32 to F32." ) 97 ; 98 } 99 //Return true for comparing F32 with S32 of same value 100 { 101 ok( psMetadataItemCompare(template, compare), 102 "psMetadataItemCompare: return true for comparison of F32 to S32." ) 103 ; 104 } 105 106 //Return true for comparing U32 with S16 of same value 107 { 108 psFree(template) 109 ; 110 template = psMetadataItemAlloc("Snickers", PS_DATA_S16, "No Comment", 1) 111 ; 112 psFree(compare); 113 compare = psMetadataItemAlloc("Snickers", PS_DATA_U32, "No Comment", 1); 114 ok( psMetadataItemCompare(compare, template), 115 "psMetadataItemCompare: return true for comparison of S16 to U32." ) 116 ; 117 } 118 //Return true for comparing S16 with U32 of same value 119 { 120 ok( psMetadataItemCompare(template, compare), 121 "psMetadataItemCompare: return true for comparison of U32 to S16." ) 122 ; 123 } 124 125 //Return true for comparing U8 with U16 of same value 126 { 127 psFree(template) 128 ; 129 template = psMetadataItemAlloc("Snickers", PS_DATA_U8, "No Comment", 1) 130 ; 131 psFree(compare); 132 compare = psMetadataItemAlloc("Snickers", PS_DATA_U16, "No Comment", 1); 133 ok( psMetadataItemCompare(compare, template), 134 "psMetadataItemCompare: return true for comparison of U8 to U16." ) 135 ; 136 } 137 //Return true for comparing U16 with U8 of same value 138 { 139 ok( psMetadataItemCompare(template, compare), 140 "psMetadataItemCompare: return true for comparison of U16 to U8." ) 141 ; 142 } 143 144 //Return true for comparing U8 with S8 of same value 145 { 146 psFree(compare); 147 compare = psMetadataItemAlloc("Snickers", PS_DATA_S8, "No Comment", 1); 148 ok( psMetadataItemCompare(compare, template), 149 "psMetadataItemCompare: return true for comparison of U8 to S8." ) 150 ; 151 } 152 //Return true for comparing S8 with U8 of same value 153 { 154 ok( psMetadataItemCompare(template, compare), 155 "psMetadataItemCompare: return true for comparison of S8 to U8." ) 156 ; 157 } 158 159 //Return false for comparing U8 with S64 of same value 160 { 161 psFree(compare); 162 compare = psMetadataItemAlloc("Snickers", PS_DATA_S64, "No Comment", 1); 163 ok( !psMetadataItemCompare(compare, template), 164 "psMetadataItemCompare: return false for comparison of U8 to S64*. " 165 "*not yet implemented" ) 166 ; 167 } 168 //Return false for comparing S64 with U8 of same value 169 { 170 ok( !psMetadataItemCompare(template, compare), 171 "psMetadataItemCompare: return false for comparison of S64* to U8. " 172 "*not yet implemented" ) 173 ; 174 } 175 176 //Return false for comparing string of different value 177 { 178 psFree(compare); 179 compare = psMetadataItemAlloc("Snickers", PS_DATA_STRING, "No Comment", 180 "Not Going Anywhere?"); 181 psFree(template) 182 ; 183 template = psMetadataItemAlloc("Snickers", PS_DATA_STRING, "No Comment", "For a While?") 184 ; 185 ok( !psMetadataItemCompare(compare, template), 186 "psMetadataItemCompare: return false for comparison of different psString's.") 187 ; 188 } 189 190 //Return true for comparing string of same value 191 { 192 psFree(template) 193 ; 194 template = psMetadataItemAlloc("Snickers", PS_DATA_STRING, "No Comment", 195 "Not Going Anywhere?") 196 ; 197 ok( psMetadataItemCompare(compare, template), 198 "psMetadataItemCompare: return true for comparison of identical psString's.") 199 ; 200 } 201 202 //Return false for comparing string with bool 203 { 204 psFree(template) 205 ; 206 template = psMetadataItemAlloc("Snickers", PS_DATA_BOOL, "No Comment", false) 207 ; 208 ok( !psMetadataItemCompare(compare, template), 209 "psMetadataItemCompare: return false for comparison of psString with bool.") 210 ; 211 } 212 //Return false for comparing bool with string 213 { 214 psFree(template) 215 ; 216 template = psMetadataItemAlloc("Snickers", PS_DATA_BOOL, "No Comment", false) 217 ; 218 ok( !psMetadataItemCompare(template, compare), 219 "psMetadataItemCompare: return false for comparison of psString with bool.") 220 ; 221 } 222 223 //Check for Memory leaks 224 { 225 psFree(compare); 226 psFree(template) 227 ; 193 psFree(template); 228 194 psFree(itemCopy); 229 195 psFree(item); 230 checkMem();196 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 231 197 } 232 198 } 233 234 -
trunk/psLib/test/types/tap_psMetadataItemParse.c
r12607 r12781 9 9 * 10 10 */ 11 12 11 #include <pslib.h> 13 12 #include <string.h> 14 15 13 #include "tap.h" 16 14 #include "pstap.h" 17 18 15 void testItemParse(void); 19 16 20 17 int main (void) 21 18 { 19 psLogSetFormat("HLNM"); 20 psLogSetLevel(PS_LOG_INFO); 22 21 plan_tests(112); 23 22 24 note("psMetadataItemParse() tests"); 25 26 testItemParse(); 27 28 done(); 29 } 30 31 void testItemParse(void) 32 { 33 note(" >>>Test 1: psMetadataItemParse"); 34 35 psMetadataItem *itemBool = psMetadataItemAlloc("bool", PS_DATA_BOOL, "No Comment", true); 36 psMetadataItem *itemF32 = psMetadataItemAlloc("f32", PS_DATA_F32, "No Comment", 0.00); 37 psMetadataItem *itemF64 = psMetadataItemAlloc("f64", PS_DATA_F64, "No Comment", 0.50); 38 psMetadataItem *itemS8 = psMetadataItemAlloc("s8", PS_DATA_S8, "No Comment", 1); 39 psMetadataItem *itemS16 = psMetadataItemAlloc("s16", PS_DATA_S16, "No Comment", 0); 40 psMetadataItem *itemS32 = psMetadataItemAlloc("s32", PS_DATA_S32, "No Comment", 1); 41 psMetadataItem *itemU8 = psMetadataItemAlloc("u8", PS_DATA_U8, "No Comment", 2); 42 psMetadataItem *itemU16 = psMetadataItemAlloc("u16", PS_DATA_U16, "No Comment", 0); 43 psMetadataItem *itemU32 = psMetadataItemAlloc("u32", PS_DATA_U32, "No Comment", 1); 44 psMetadataItem *itemString1 = psMetadataItemAlloc("String", PS_DATA_STRING, "", "true"); 45 psMetadataItem *itemString2 = psMetadataItemAlloc("String", PS_DATA_STRING, "", "1.666"); 46 psMetadataItem *itemString11 = psMetadataItemAlloc("String", PS_DATA_STRING, "", "false"); 47 psMetadataItem *itemUnsupported = psMetadataItemAlloc("s64", PS_DATA_S64, "", 1); 48 49 //TESTS: Bool, F32, F64, S8, S16, S32, U8, U16, U32, String 50 //BOOL Test 23 // psMetadataItemParse() tests 51 24 { 52 //Return false for NULL item 53 ok ( !psMetadataItemParseBool(NULL), 54 "psMetadataItemParse: return false in BOOL for NULL psMetadataItem " 55 "input." ); 56 //Return false for non-supported type S64 57 ok ( !psMetadataItemParseBool(itemUnsupported), 58 "psMetadataItemParse: return false in BOOL for S64 (unsupported) " 59 "psMetadataItem input." ); 60 //Return true for string with "true" 61 ok ( psMetadataItemParseBool(itemString1), 62 "psMetadataItemParse: return true in BOOL for string-item with " 63 "value 'true'." ); 64 //Return false for string with "false" 65 ok ( !psMetadataItemParseBool(itemString11), 66 "psMetadataItemParse: return false in BOOL for string-item with " 67 "value 'false'." ); 68 //Return false for F32 value 0.0 69 ok ( !psMetadataItemParseBool(itemF32), 70 "psMetadataItemParse: return false in BOOL for F32-item with " 71 "value '0.0'." ); 72 //Return true for F64 value 0.5 73 ok ( psMetadataItemParseBool(itemF64), 74 "psMetadataItemParse: return true in BOOL for F64-item with " 75 "value '0.5'." ); 76 //Return true for S8 value 1 77 ok ( psMetadataItemParseBool(itemS8), 78 "psMetadataItemParse: return true in BOOL for S8-item with " 79 "value '1'." ); 80 //Return false for S16 value 0 81 ok ( !psMetadataItemParseBool(itemS16), 82 "psMetadataItemParse: return false in BOOL for S16-item with " 83 "value '0'." ); 84 //Return true for S32 value 1 85 ok ( psMetadataItemParseBool(itemS32), 86 "psMetadataItemParse: return true in BOOL for S32-item with " 87 "value '1'." ); 88 //Return true for U8 value 2 89 ok ( psMetadataItemParseBool(itemU8), 90 "psMetadataItemParse: return true in BOOL for U8-item with " 91 "value '2'." ); 92 //Return false for U16 value 0 93 ok ( !psMetadataItemParseBool(itemU16), 94 "psMetadataItemParse: return false in BOOL for U16-item with " 95 "value '0'." ); 96 //Return true for U32 value 1 97 ok ( psMetadataItemParseBool(itemU32), 98 "psMetadataItemParse: return true in BOOL for U32-item with " 99 "value '1'." ); 100 } 101 102 //F32 Test 103 { 104 //Return NaN for NULL item 105 ok ( isnan(psMetadataItemParseF32(NULL)), 106 "psMetadataItemParse: return NaN for NULL psMetadataItem input." ); 107 //Return NaN for non-supported type S64 108 ok ( isnan(psMetadataItemParseF32(itemUnsupported)), 109 "psMetadataItemParse: return NaN in F32 for S64 (unsupported) " 110 "psMetadataItem input." ); 111 //Return 1.666 for string with "1.666" 112 is_float( psMetadataItemParseF32(itemString2), 1.666, 113 "psMetadataItemParse: return 1.666 in F32 for string-item with " 114 "value '1.666'." ); 115 //Return 0.0 for F32 value 0.0 116 is_float( psMetadataItemParseF32(itemF32), 0.0, 117 "psMetadataItemParse: return 0.0 in F32 for F32-item with " 118 "value '0.0'." ); 119 //Return 0.5 for F64 value 0.5 120 is_float( psMetadataItemParseF32(itemF64), 0.5, 121 "psMetadataItemParse: return 0.5 in F32 for F64-item with " 122 "value '0.5'." ); 123 //Return 1.0 for S8 value 1 124 is_float( psMetadataItemParseF32(itemS8), 1.0, 125 "psMetadataItemParse: return 1.0 in F32 for S8-item with " 126 "value '1'." ); 127 //Return 0.0 for S16 value 0 128 is_float( psMetadataItemParseF32(itemS16), 0.0, 129 "psMetadataItemParse: return 0.0 in F32 for S16-item with " 130 "value '0'." ); 131 //Return 1.0 for S32 value 1 132 is_float( psMetadataItemParseF32(itemS32), 1.0, 133 "psMetadataItemParse: return 1.0 in F32 for S32-item with " 134 "value '1'." ); 135 //Return 2.0 for U8 value 2 136 is_float( psMetadataItemParseF32(itemU8), 2.0, 137 "psMetadataItemParse: return 2.0 in F32 for U8-item with " 138 "value '2'." ); 139 //Return 0.0 for U16 value 0 140 is_float( psMetadataItemParseF32(itemU16), 0.0, 141 "psMetadataItemParse: return 0.0 in F32 for U16-item with " 142 "value '0'." ); 143 //Return 1.0 for U32 value 1 144 is_float( psMetadataItemParseF32(itemU32), 1.0, 145 "psMetadataItemParse: return 1.0 in F32 for U32-item with " 146 "value '1'." ); 147 } 148 149 //F64 Test 150 { 151 //Return NaN for NULL item 152 ok ( isnan(psMetadataItemParseF64(NULL)), 153 "psMetadataItemParse: return NaN for NULL psMetadataItem input." ); 154 //Return NaN for non-supported type S64 155 ok ( isnan(psMetadataItemParseF64(itemUnsupported)), 156 "psMetadataItemParse: return NaN in F64 for S64 (unsupported) " 157 "psMetadataItem input." ); 158 //Return 1.666 for string with "1.666" 159 is_double_tol( psMetadataItemParseF64(itemString2), 1.666, 0.00001, 160 "psMetadataItemParse: return 1.666 in F64 for string-item with " 161 "value '1.666'." ); 162 //Return 0.0 for F32 value 0.0 163 is_double( psMetadataItemParseF64(itemF32), 0.0, 164 "psMetadataItemParse: return 0.0 in F64 for F32-item with " 165 "value '0.0'." ); 166 //Return 0.5 for F64 value 0.5 167 is_double( psMetadataItemParseF64(itemF64), 0.5, 168 "psMetadataItemParse: return 0.5 in F64 for F64-item with " 169 "value '0.5'." ); 170 //Return 1.0 for S8 value 1 171 is_double( psMetadataItemParseF64(itemS8), 1.0, 172 "psMetadataItemParse: return 1.0 in F64 for S8-item with " 173 "value '1'." ); 174 //Return 0.0 for S16 value 0 175 is_double( psMetadataItemParseF64(itemS16), 0.0, 176 "psMetadataItemParse: return 0.0 in F64 for S16-item with " 177 "value '0'." ); 178 //Return 1.0 for S32 value 1 179 is_double( psMetadataItemParseF64(itemS32), 1.0, 180 "psMetadataItemParse: return 1.0 in F64 for S32-item with " 181 "value '1'." ); 182 //Return 2.0 for U8 value 2 183 is_double( psMetadataItemParseF64(itemU8), 2.0, 184 "psMetadataItemParse: return 2.0 in F64 for U8-item with " 185 "value '2'." ); 186 //Return 0.0 for U16 value 0 187 is_double( psMetadataItemParseF64(itemU16), 0.0, 188 "psMetadataItemParse: return 0.0 in F64 for U16-item with " 189 "value '0'." ); 190 //Return 1.0 for U32 value 1 191 is_double( psMetadataItemParseF64(itemU32), 1.0, 192 "psMetadataItemParse: return 1.0 in F64 for U32-item with " 193 "value '1'." ); 194 } 195 196 //S8 Test 197 { 198 //Return 0 for NULL item 199 ok ( psMetadataItemParseS8(NULL) == 0, 200 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 201 //Return 0 for non-supported type S64 202 ok ( psMetadataItemParseS8(itemUnsupported) == 0, 203 "psMetadataItemParse: return 0 in S8 for S64 (unsupported) " 204 "psMetadataItem input." ); 205 //Return 2 for string with "1.666" 206 ok ( psMetadataItemParseS8(itemString2) == 1, 207 "psMetadataItemParse: return 1 in S8 for string-item with " 208 "value '1.666'." ); 209 //Return 0 for F32 value 0.0 210 ok ( psMetadataItemParseS8(itemF32) == 0, 211 "psMetadataItemParse: return 0 in S8 for F32-item with " 212 "value '0.0'." ); 213 //Return 1 for F64 value 0.5 214 ok ( psMetadataItemParseS8(itemF64) == 0, 215 "psMetadataItemParse: return 0 in S8 for F64-item with " 216 "value '0.5'." ); 217 //Return 1 for S8 value 1 218 ok ( psMetadataItemParseS8(itemS8) == 1, 219 "psMetadataItemParse: return 1 in S8 for S8-item with " 220 "value '1'." ); 221 //Return 0 for S16 value 0 222 ok ( psMetadataItemParseS8(itemS16) == 0, 223 "psMetadataItemParse: return 0 in S8 for S16-item with " 224 "value '0'." ); 225 //Return 1 for S32 value 1 226 ok ( psMetadataItemParseS8(itemS32) == 1, 227 "psMetadataItemParse: return 1 in S8 for S32-item with " 228 "value '1'." ); 229 //Return 2 for U8 value 2 230 ok ( psMetadataItemParseS8(itemU8) == 2, 231 "psMetadataItemParse: return 2 in S8 for U8-item with " 232 "value '2'." ); 233 //Return 0 for U16 value 0 234 ok ( psMetadataItemParseS8(itemU16) == 0, 235 "psMetadataItemParse: return 0 in S8 for U16-item with " 236 "value '0'." ); 237 //Return 1 for U32 value 1 238 ok ( psMetadataItemParseS8(itemU32) == 1, 239 "psMetadataItemParse: return 1 in S8 for U32-item with " 240 "value '1'." ); 241 } 242 243 //S16 Test 244 { 245 //Return 0 for NULL item 246 ok ( psMetadataItemParseS16(NULL) == 0, 247 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 248 //Return 0 for non-supported type S64 249 ok ( psMetadataItemParseS16(itemUnsupported) == 0, 250 "psMetadataItemParse: return 0 in S16 for S64 (unsupported) " 251 "psMetadataItem input." ); 252 //Return 2 for string with "1.666" 253 ok ( psMetadataItemParseS16(itemString2) == 1, 254 "psMetadataItemParse: return 1 in S16 for string-item with " 255 "value '1.666'." ); 256 //Return 0 for F32 value 0.0 257 ok ( psMetadataItemParseS16(itemF32) == 0, 258 "psMetadataItemParse: return 0 in S16 for F32-item with value '0.0'." ); 259 //Return 1 for F64 value 0.5 260 ok ( psMetadataItemParseS16(itemF64) == 0, 261 "psMetadataItemParse: return 0 in S16 for F64-item with value '0.5'." ); 262 //Return 1 for S8 value 1 263 ok ( psMetadataItemParseS16(itemS8) == 1, 264 "psMetadataItemParse: return 1 in S16 for S8-item with value '1'." ); 265 //Return 0 for S16 value 0 266 ok ( psMetadataItemParseS16(itemS16) == 0, 267 "psMetadataItemParse: return 0 in S16 for S16-item with value '0'." ); 268 //Return 1 for S32 value 1 269 ok ( psMetadataItemParseS16(itemS32) == 1, 270 "psMetadataItemParse: return 1 in S16 for S32-item with value '1'." ); 271 //Return 2 for U8 value 2 272 ok ( psMetadataItemParseS16(itemU8) == 2, 273 "psMetadataItemParse: return 2 in S16 for U8-item with value '2'." ); 274 //Return 0 for U16 value 0 275 ok ( psMetadataItemParseS16(itemU16) == 0, 276 "psMetadataItemParse: return 0 in S16 for U16-item with value '0'." ); 277 //Return 1 for U32 value 1 278 ok ( psMetadataItemParseS16(itemU32) == 1, 279 "psMetadataItemParse: return 1 in S16 for U32-item with value '1'." ); 280 } 281 282 //S32 Test 283 { 284 //Return 0 for NULL item 285 ok ( psMetadataItemParseS32(NULL) == 0, 286 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 287 //Return 0 for non-supported type S64 288 ok ( psMetadataItemParseS32(itemUnsupported) == 0, 289 "psMetadataItemParse: return 0 in S32 for S64 (unsupported) " 290 "psMetadataItem input." ); 291 //Return 2 for string with "1.666" 292 ok ( psMetadataItemParseS32(itemString2) == 1, 293 "psMetadataItemParse: return 1 in S32 for string-item with " 294 "value '1.666'." ); 295 //Return 0 for F32 value 0.0 296 ok ( psMetadataItemParseS32(itemF32) == 0, 297 "psMetadataItemParse: return 0 in S32 for F32-item with value '0.0'." ); 298 //Return 1 for F64 value 0.5 299 ok ( psMetadataItemParseS32(itemF64) == 0, 300 "psMetadataItemParse: return 0 in S32 for F64-item with value '0.5'." ); 301 //Return 1 for S8 value 1 302 ok ( psMetadataItemParseS32(itemS8) == 1, 303 "psMetadataItemParse: return 1 in S32 for S8-item with value '1'." ); 304 //Return 0 for S16 value 0 305 ok ( psMetadataItemParseS32(itemS16) == 0, 306 "psMetadataItemParse: return 0 in S32 for S16-item with value '0'." ); 307 //Return 1 for S32 value 1 308 ok ( psMetadataItemParseS32(itemS32) == 1, 309 "psMetadataItemParse: return 1 in S32 for S32-item with value '1'." ); 310 //Return 2 for U8 value 2 311 ok ( psMetadataItemParseS32(itemU8) == 2, 312 "psMetadataItemParse: return 2 in S32 for U8-item with value '2'." ); 313 //Return 0 for U16 value 0 314 ok ( psMetadataItemParseS32(itemU16) == 0, 315 "psMetadataItemParse: return 0 in S32 for U16-item with value '0'." ); 316 //Return 1 for U32 value 1 317 ok ( psMetadataItemParseS32(itemU32) == 1, 318 "psMetadataItemParse: return 1 in S32 for U32-item with value '1'." ); 319 } 320 321 //U8 Test 322 { 323 //Return 0 for NULL item 324 ok ( psMetadataItemParseU8(NULL) == 0, 325 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 326 //Return 0 for non-supported type S64 327 ok ( psMetadataItemParseU8(itemUnsupported) == 0, 328 "psMetadataItemParse: return 0 in U8 for S64 (unsupported) " 329 "psMetadataItem input." ); 330 //Return 2 for string with "1.666" 331 ok ( psMetadataItemParseU8(itemString2) == 1, 332 "psMetadataItemParse: return 1 in U8 for string-item with " 333 "value '1.666'." ); 334 //Return 0 for F32 value 0.0 335 ok ( psMetadataItemParseU8(itemF32) == 0, 336 "psMetadataItemParse: return 0 in U8 for F32-item with value '0.0'." ); 337 //Return 1 for F64 value 0.5 338 ok ( psMetadataItemParseU8(itemF64) == 0, 339 "psMetadataItemParse: return 0 in U8 for F64-item with value '0.5'." ); 340 //Return 1 for S8 value 1 341 ok ( psMetadataItemParseU8(itemS8) == 1, 342 "psMetadataItemParse: return 1 in U8 for S8-item with value '1'." ); 343 //Return 0 for S16 value 0 344 ok ( psMetadataItemParseU8(itemS16) == 0, 345 "psMetadataItemParse: return 0 in U8 for S16-item with value '0'." ); 346 //Return 1 for S32 value 1 347 ok ( psMetadataItemParseU8(itemS32) == 1, 348 "psMetadataItemParse: return 1 in U8 for S32-item with value '1'." ); 349 //Return 2 for U8 value 2 350 ok ( psMetadataItemParseU8(itemU8) == 2, 351 "psMetadataItemParse: return 2 in U8 for U8-item with value '2'." ); 352 //Return 0 for U16 value 0 353 ok ( psMetadataItemParseU8(itemU16) == 0, 354 "psMetadataItemParse: return 0 in U8 for U16-item with value '0'." ); 355 //Return 1 for U32 value 1 356 ok ( psMetadataItemParseU8(itemU32) == 1, 357 "psMetadataItemParse: return 1 in U8 for U32-item with value '1'." ); 358 } 359 360 //U16 Test 361 { 362 //Return 0 for NULL item 363 ok ( psMetadataItemParseU16(NULL) == 0, 364 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 365 //Return 0 for non-supported type S64 366 ok ( psMetadataItemParseU16(itemUnsupported) == 0, 367 "psMetadataItemParse: return 0 in U16 for S64 (unsupported) " 368 "psMetadataItem input." ); 369 //Return 2 for string with "1.666" 370 ok ( psMetadataItemParseU16(itemString2) == 1, 371 "psMetadataItemParse: return 1 in U16 for string-item with " 372 "value '1.666'." ); 373 //Return 0 for F32 value 0.0 374 ok ( psMetadataItemParseU16(itemF32) == 0, 375 "psMetadataItemParse: return 0 in U16 for F32-item with value '0.0'." ); 376 //Return 1 for F64 value 0.5 377 ok ( psMetadataItemParseU16(itemF64) == 0, 378 "psMetadataItemParse: return 0 in U16 for F64-item with value '0.5'." ); 379 //Return 1 for S8 value 1 380 ok ( psMetadataItemParseU16(itemS8) == 1, 381 "psMetadataItemParse: return 1 in U16 for S8-item with value '1'." ); 382 //Return 0 for S16 value 0 383 ok ( psMetadataItemParseU16(itemS16) == 0, 384 "psMetadataItemParse: return 0 in S8 for S16-item with value '0'." ); 385 //Return 1 for S32 value 1 386 ok ( psMetadataItemParseU16(itemS32) == 1, 387 "psMetadataItemParse: return 1 in U16 for S32-item with value '1'." ); 388 //Return 2 for U8 value 2 389 ok ( psMetadataItemParseU16(itemU8) == 2, 390 "psMetadataItemParse: return 2 in U16 for U8-item with value '2'." ); 391 //Return 0 for U16 value 0 392 ok ( psMetadataItemParseU16(itemU16) == 0, 393 "psMetadataItemParse: return 0 in U16 for U16-item with value '0'." ); 394 //Return 1 for U32 value 1 395 ok ( psMetadataItemParseU16(itemU32) == 1, 396 "psMetadataItemParse: return 1 in U16 for U32-item with value '1'." ); 397 } 398 399 //U32 Test 400 { 401 //Return 0 for NULL item 402 ok ( psMetadataItemParseU32(NULL) == 0, 403 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 404 //Return 0 for non-supported type S64 405 ok ( psMetadataItemParseU32(itemUnsupported) == 0, 406 "psMetadataItemParse: return 0 in U32 for S64 (unsupported) " 407 "psMetadataItem input." ); 408 //Return 2 for string with "1.666" 409 ok ( psMetadataItemParseU32(itemString2) == 1, 410 "psMetadataItemParse: return 1 in U32 for string-item with " 411 "value '1.666'." ); 412 //Return 0 for F32 value 0.0 413 ok ( psMetadataItemParseU32(itemF32) == 0, 414 "psMetadataItemParse: return 0 in U32 for F32-item with value '0.0'." ); 415 //Return 1 for F64 value 0.5 416 ok ( psMetadataItemParseU32(itemF64) == 0, 417 "psMetadataItemParse: return 0 in U32 for F64-item with value '0.5'." ); 418 //Return 1 for S8 value 1 419 ok ( psMetadataItemParseU32(itemS8) == 1, 420 "psMetadataItemParse: return 1 in U32 for S8-item with value '1'." ); 421 //Return 0 for S16 value 0 422 ok ( psMetadataItemParseU32(itemS16) == 0, 423 "psMetadataItemParse: return 0 in U32 for S16-item with value '0'." ); 424 //Return 1 for S32 value 1 425 ok ( psMetadataItemParseU32(itemS32) == 1, 426 "psMetadataItemParse: return 1 in U32 for S32-item with value '1'." ); 427 //Return 2 for U8 value 2 428 ok ( psMetadataItemParseU32(itemU8) == 2, 429 "psMetadataItemParse: return 2 in U32 for U8-item with value '2'." ); 430 //Return 0 for U16 value 0 431 ok ( psMetadataItemParseU32(itemU16) == 0, 432 "psMetadataItemParse: return 0 in U32 for U16-item with value '0'." ); 433 //Return 1 for U32 value 1 434 ok ( psMetadataItemParseU32(itemU32) == 1, 435 "psMetadataItemParse: return 1 in U32 for U32-item with value '1'." ); 436 } 437 438 //STRING Test 439 { 440 //Return NULL for NULL item 441 ok ( psMetadataItemParseString(NULL) == NULL, 442 "psMetadataItemParse: return NULL for NULL STRING psMetadataItem " 443 "input." ); 444 //Return NULL for non-supported type S64 445 ok ( psMetadataItemParseString(itemUnsupported) == NULL, 446 "psMetadataItemParse: return NULL in STRING for S64 (unsupported)" 447 " psMetadataItem input." ); 448 //Return "true" for STRING of value "true" 449 psString tempString = psMetadataItemParseString(itemString1); 450 is_strn( tempString, "true", 6, 451 "psMetadataItemParse: return 'true' in STRING for STRING with " 25 psMemId id = psMemGetId(); 26 psMetadataItem *itemBool = psMetadataItemAlloc("bool", PS_DATA_BOOL, "No Comment", true); 27 psMetadataItem *itemF32 = psMetadataItemAlloc("f32", PS_DATA_F32, "No Comment", 0.00); 28 psMetadataItem *itemF64 = psMetadataItemAlloc("f64", PS_DATA_F64, "No Comment", 0.50); 29 psMetadataItem *itemS8 = psMetadataItemAlloc("s8", PS_DATA_S8, "No Comment", 1); 30 psMetadataItem *itemS16 = psMetadataItemAlloc("s16", PS_DATA_S16, "No Comment", 0); 31 psMetadataItem *itemS32 = psMetadataItemAlloc("s32", PS_DATA_S32, "No Comment", 1); 32 psMetadataItem *itemU8 = psMetadataItemAlloc("u8", PS_DATA_U8, "No Comment", 2); 33 psMetadataItem *itemU16 = psMetadataItemAlloc("u16", PS_DATA_U16, "No Comment", 0); 34 psMetadataItem *itemU32 = psMetadataItemAlloc("u32", PS_DATA_U32, "No Comment", 1); 35 psMetadataItem *itemString1 = psMetadataItemAlloc("String", PS_DATA_STRING, "", "true"); 36 psMetadataItem *itemString2 = psMetadataItemAlloc("String", PS_DATA_STRING, "", "1.666"); 37 psMetadataItem *itemString11 = psMetadataItemAlloc("String", PS_DATA_STRING, "", "false"); 38 psMetadataItem *itemUnsupported = psMetadataItemAlloc("s64", PS_DATA_S64, "", 1); 39 40 //TESTS: Bool, F32, F64, S8, S16, S32, U8, U16, U32, String 41 //BOOL Test 42 { 43 //Return false for NULL item 44 ok ( !psMetadataItemParseBool(NULL), 45 "psMetadataItemParse: return false in BOOL for NULL psMetadataItem " 46 "input." ); 47 //Return false for non-supported type S64 48 ok ( !psMetadataItemParseBool(itemUnsupported), 49 "psMetadataItemParse: return false in BOOL for S64 (unsupported) " 50 "psMetadataItem input." ); 51 //Return true for string with "true" 52 ok ( psMetadataItemParseBool(itemString1), 53 "psMetadataItemParse: return true in BOOL for string-item with " 452 54 "value 'true'." ); 453 psFree(tempString); 454 455 //Return 0.000000 for F32 of value 0.000000 456 tempString = psMetadataItemParseString(itemF32); 457 is_strn( tempString, "0.000000", 4, 458 "psMetadataItemParse: return '0.000000' in STRING for F32 with " 459 "value '0.000000'. (actual result=%s)", tempString); 460 psFree(tempString); 461 462 //Return 0.500000 for F64 value 0.5 463 tempString = psMetadataItemParseString(itemF64); 464 is_strn( tempString, "0.500000", 10, 465 "psMetadataItemParse: return '0.500000' in STRING for F64 with " 466 "value '0.5'. (actual result=%s)", tempString); 467 psFree(tempString); 468 469 //Return 1 for S8 value 1 470 tempString = psMetadataItemParseString(itemS8); 471 is_strn( tempString, "1", 3, 472 "psMetadataItemParse: return '1' in STRING for S8 with " 473 "value '1'. (actual result=%s)", tempString); 474 psFree(tempString); 475 476 //Return 0 for S16 value 0 477 tempString = psMetadataItemParseString(itemS16); 478 is_strn( tempString, "0", 3, 479 "psMetadataItemParse: return '0' in STRING for S8 with " 480 "value '0'. (actual result=%s)", tempString); 481 psFree(tempString); 482 483 //Return 1 for S32 value 1 484 tempString = psMetadataItemParseString(itemS32); 485 is_strn( tempString, "1", 3, 486 "psMetadataItemParse: return '1' in STRING for S8 with " 487 "value '1'. (actual result=%s)", tempString); 488 psFree(tempString); 489 490 //Return 2 for U8 value 2 491 tempString = psMetadataItemParseString(itemU8); 492 is_strn( tempString, "2", 3, 493 "psMetadataItemParse: return '2' in STRING for S8 with " 494 "value '2'. (actual result=%s)", tempString); 495 psFree(tempString); 496 497 //Return 0 for U16 value 0 498 tempString = psMetadataItemParseString(itemU16); 499 is_strn( tempString, "0", 3, 500 "psMetadataItemParse: return '0' in STRING for S8 with " 501 "value '0'. (actual result=%s)", tempString); 502 psFree(tempString); 503 504 //Return 1 for U32 value 1 505 tempString = psMetadataItemParseString(itemU32); 506 is_strn( tempString, "1", 3, 507 "psMetadataItemParse: return '1' in STRING for S8 with " 508 "value '1'. (actual result=%s)", tempString); 509 psFree(tempString); 510 } 511 512 //Check for Memory leaks 513 { 55 //Return false for string with "false" 56 ok ( !psMetadataItemParseBool(itemString11), 57 "psMetadataItemParse: return false in BOOL for string-item with " 58 "value 'false'." ); 59 //Return false for F32 value 0.0 60 ok ( !psMetadataItemParseBool(itemF32), 61 "psMetadataItemParse: return false in BOOL for F32-item with " 62 "value '0.0'." ); 63 //Return true for F64 value 0.5 64 ok ( psMetadataItemParseBool(itemF64), 65 "psMetadataItemParse: return true in BOOL for F64-item with " 66 "value '0.5'." ); 67 //Return true for S8 value 1 68 ok ( psMetadataItemParseBool(itemS8), 69 "psMetadataItemParse: return true in BOOL for S8-item with " 70 "value '1'." ); 71 //Return false for S16 value 0 72 ok ( !psMetadataItemParseBool(itemS16), 73 "psMetadataItemParse: return false in BOOL for S16-item with " 74 "value '0'." ); 75 //Return true for S32 value 1 76 ok ( psMetadataItemParseBool(itemS32), 77 "psMetadataItemParse: return true in BOOL for S32-item with " 78 "value '1'." ); 79 //Return true for U8 value 2 80 ok ( psMetadataItemParseBool(itemU8), 81 "psMetadataItemParse: return true in BOOL for U8-item with " 82 "value '2'." ); 83 //Return false for U16 value 0 84 ok ( !psMetadataItemParseBool(itemU16), 85 "psMetadataItemParse: return false in BOOL for U16-item with " 86 "value '0'." ); 87 //Return true for U32 value 1 88 ok ( psMetadataItemParseBool(itemU32), 89 "psMetadataItemParse: return true in BOOL for U32-item with " 90 "value '1'." ); 91 } 92 93 //F32 Test 94 { 95 //Return NaN for NULL item 96 ok ( isnan(psMetadataItemParseF32(NULL)), 97 "psMetadataItemParse: return NaN for NULL psMetadataItem input." ); 98 //Return NaN for non-supported type S64 99 ok ( isnan(psMetadataItemParseF32(itemUnsupported)), 100 "psMetadataItemParse: return NaN in F32 for S64 (unsupported) " 101 "psMetadataItem input." ); 102 //Return 1.666 for string with "1.666" 103 is_float( psMetadataItemParseF32(itemString2), 1.666, 104 "psMetadataItemParse: return 1.666 in F32 for string-item with " 105 "value '1.666'." ); 106 //Return 0.0 for F32 value 0.0 107 is_float( psMetadataItemParseF32(itemF32), 0.0, 108 "psMetadataItemParse: return 0.0 in F32 for F32-item with " 109 "value '0.0'." ); 110 //Return 0.5 for F64 value 0.5 111 is_float( psMetadataItemParseF32(itemF64), 0.5, 112 "psMetadataItemParse: return 0.5 in F32 for F64-item with " 113 "value '0.5'." ); 114 //Return 1.0 for S8 value 1 115 is_float( psMetadataItemParseF32(itemS8), 1.0, 116 "psMetadataItemParse: return 1.0 in F32 for S8-item with " 117 "value '1'." ); 118 //Return 0.0 for S16 value 0 119 is_float( psMetadataItemParseF32(itemS16), 0.0, 120 "psMetadataItemParse: return 0.0 in F32 for S16-item with " 121 "value '0'." ); 122 //Return 1.0 for S32 value 1 123 is_float( psMetadataItemParseF32(itemS32), 1.0, 124 "psMetadataItemParse: return 1.0 in F32 for S32-item with " 125 "value '1'." ); 126 //Return 2.0 for U8 value 2 127 is_float( psMetadataItemParseF32(itemU8), 2.0, 128 "psMetadataItemParse: return 2.0 in F32 for U8-item with " 129 "value '2'." ); 130 //Return 0.0 for U16 value 0 131 is_float( psMetadataItemParseF32(itemU16), 0.0, 132 "psMetadataItemParse: return 0.0 in F32 for U16-item with " 133 "value '0'." ); 134 //Return 1.0 for U32 value 1 135 is_float( psMetadataItemParseF32(itemU32), 1.0, 136 "psMetadataItemParse: return 1.0 in F32 for U32-item with " 137 "value '1'." ); 138 } 139 140 //F64 Test 141 { 142 //Return NaN for NULL item 143 ok ( isnan(psMetadataItemParseF64(NULL)), 144 "psMetadataItemParse: return NaN for NULL psMetadataItem input." ); 145 //Return NaN for non-supported type S64 146 ok ( isnan(psMetadataItemParseF64(itemUnsupported)), 147 "psMetadataItemParse: return NaN in F64 for S64 (unsupported) " 148 "psMetadataItem input." ); 149 //Return 1.666 for string with "1.666" 150 is_double_tol( psMetadataItemParseF64(itemString2), 1.666, 0.00001, 151 "psMetadataItemParse: return 1.666 in F64 for string-item with " 152 "value '1.666'." ); 153 //Return 0.0 for F32 value 0.0 154 is_double( psMetadataItemParseF64(itemF32), 0.0, 155 "psMetadataItemParse: return 0.0 in F64 for F32-item with " 156 "value '0.0'." ); 157 //Return 0.5 for F64 value 0.5 158 is_double( psMetadataItemParseF64(itemF64), 0.5, 159 "psMetadataItemParse: return 0.5 in F64 for F64-item with " 160 "value '0.5'." ); 161 //Return 1.0 for S8 value 1 162 is_double( psMetadataItemParseF64(itemS8), 1.0, 163 "psMetadataItemParse: return 1.0 in F64 for S8-item with " 164 "value '1'." ); 165 //Return 0.0 for S16 value 0 166 is_double( psMetadataItemParseF64(itemS16), 0.0, 167 "psMetadataItemParse: return 0.0 in F64 for S16-item with " 168 "value '0'." ); 169 //Return 1.0 for S32 value 1 170 is_double( psMetadataItemParseF64(itemS32), 1.0, 171 "psMetadataItemParse: return 1.0 in F64 for S32-item with " 172 "value '1'." ); 173 //Return 2.0 for U8 value 2 174 is_double( psMetadataItemParseF64(itemU8), 2.0, 175 "psMetadataItemParse: return 2.0 in F64 for U8-item with " 176 "value '2'." ); 177 //Return 0.0 for U16 value 0 178 is_double( psMetadataItemParseF64(itemU16), 0.0, 179 "psMetadataItemParse: return 0.0 in F64 for U16-item with " 180 "value '0'." ); 181 //Return 1.0 for U32 value 1 182 is_double( psMetadataItemParseF64(itemU32), 1.0, 183 "psMetadataItemParse: return 1.0 in F64 for U32-item with " 184 "value '1'." ); 185 } 186 187 //S8 Test 188 { 189 //Return 0 for NULL item 190 ok ( psMetadataItemParseS8(NULL) == 0, 191 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 192 //Return 0 for non-supported type S64 193 ok ( psMetadataItemParseS8(itemUnsupported) == 0, 194 "psMetadataItemParse: return 0 in S8 for S64 (unsupported) " 195 "psMetadataItem input." ); 196 //Return 2 for string with "1.666" 197 ok ( psMetadataItemParseS8(itemString2) == 1, 198 "psMetadataItemParse: return 1 in S8 for string-item with " 199 "value '1.666'." ); 200 //Return 0 for F32 value 0.0 201 ok ( psMetadataItemParseS8(itemF32) == 0, 202 "psMetadataItemParse: return 0 in S8 for F32-item with " 203 "value '0.0'." ); 204 //Return 1 for F64 value 0.5 205 ok ( psMetadataItemParseS8(itemF64) == 0, 206 "psMetadataItemParse: return 0 in S8 for F64-item with " 207 "value '0.5'." ); 208 //Return 1 for S8 value 1 209 ok ( psMetadataItemParseS8(itemS8) == 1, 210 "psMetadataItemParse: return 1 in S8 for S8-item with " 211 "value '1'." ); 212 //Return 0 for S16 value 0 213 ok ( psMetadataItemParseS8(itemS16) == 0, 214 "psMetadataItemParse: return 0 in S8 for S16-item with " 215 "value '0'." ); 216 //Return 1 for S32 value 1 217 ok ( psMetadataItemParseS8(itemS32) == 1, 218 "psMetadataItemParse: return 1 in S8 for S32-item with " 219 "value '1'." ); 220 //Return 2 for U8 value 2 221 ok ( psMetadataItemParseS8(itemU8) == 2, 222 "psMetadataItemParse: return 2 in S8 for U8-item with " 223 "value '2'." ); 224 //Return 0 for U16 value 0 225 ok ( psMetadataItemParseS8(itemU16) == 0, 226 "psMetadataItemParse: return 0 in S8 for U16-item with " 227 "value '0'." ); 228 //Return 1 for U32 value 1 229 ok ( psMetadataItemParseS8(itemU32) == 1, 230 "psMetadataItemParse: return 1 in S8 for U32-item with " 231 "value '1'." ); 232 } 233 234 //S16 Test 235 { 236 //Return 0 for NULL item 237 ok ( psMetadataItemParseS16(NULL) == 0, 238 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 239 //Return 0 for non-supported type S64 240 ok ( psMetadataItemParseS16(itemUnsupported) == 0, 241 "psMetadataItemParse: return 0 in S16 for S64 (unsupported) " 242 "psMetadataItem input." ); 243 //Return 2 for string with "1.666" 244 ok ( psMetadataItemParseS16(itemString2) == 1, 245 "psMetadataItemParse: return 1 in S16 for string-item with " 246 "value '1.666'." ); 247 //Return 0 for F32 value 0.0 248 ok ( psMetadataItemParseS16(itemF32) == 0, 249 "psMetadataItemParse: return 0 in S16 for F32-item with value '0.0'." ); 250 //Return 1 for F64 value 0.5 251 ok ( psMetadataItemParseS16(itemF64) == 0, 252 "psMetadataItemParse: return 0 in S16 for F64-item with value '0.5'." ); 253 //Return 1 for S8 value 1 254 ok ( psMetadataItemParseS16(itemS8) == 1, 255 "psMetadataItemParse: return 1 in S16 for S8-item with value '1'." ); 256 //Return 0 for S16 value 0 257 ok ( psMetadataItemParseS16(itemS16) == 0, 258 "psMetadataItemParse: return 0 in S16 for S16-item with value '0'." ); 259 //Return 1 for S32 value 1 260 ok ( psMetadataItemParseS16(itemS32) == 1, 261 "psMetadataItemParse: return 1 in S16 for S32-item with value '1'." ); 262 //Return 2 for U8 value 2 263 ok ( psMetadataItemParseS16(itemU8) == 2, 264 "psMetadataItemParse: return 2 in S16 for U8-item with value '2'." ); 265 //Return 0 for U16 value 0 266 ok ( psMetadataItemParseS16(itemU16) == 0, 267 "psMetadataItemParse: return 0 in S16 for U16-item with value '0'." ); 268 //Return 1 for U32 value 1 269 ok ( psMetadataItemParseS16(itemU32) == 1, 270 "psMetadataItemParse: return 1 in S16 for U32-item with value '1'." ); 271 } 272 273 //S32 Test 274 { 275 //Return 0 for NULL item 276 ok ( psMetadataItemParseS32(NULL) == 0, 277 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 278 //Return 0 for non-supported type S64 279 ok ( psMetadataItemParseS32(itemUnsupported) == 0, 280 "psMetadataItemParse: return 0 in S32 for S64 (unsupported) " 281 "psMetadataItem input." ); 282 //Return 2 for string with "1.666" 283 ok ( psMetadataItemParseS32(itemString2) == 1, 284 "psMetadataItemParse: return 1 in S32 for string-item with " 285 "value '1.666'." ); 286 //Return 0 for F32 value 0.0 287 ok ( psMetadataItemParseS32(itemF32) == 0, 288 "psMetadataItemParse: return 0 in S32 for F32-item with value '0.0'." ); 289 //Return 1 for F64 value 0.5 290 ok ( psMetadataItemParseS32(itemF64) == 0, 291 "psMetadataItemParse: return 0 in S32 for F64-item with value '0.5'." ); 292 //Return 1 for S8 value 1 293 ok ( psMetadataItemParseS32(itemS8) == 1, 294 "psMetadataItemParse: return 1 in S32 for S8-item with value '1'." ); 295 //Return 0 for S16 value 0 296 ok ( psMetadataItemParseS32(itemS16) == 0, 297 "psMetadataItemParse: return 0 in S32 for S16-item with value '0'." ); 298 //Return 1 for S32 value 1 299 ok ( psMetadataItemParseS32(itemS32) == 1, 300 "psMetadataItemParse: return 1 in S32 for S32-item with value '1'." ); 301 //Return 2 for U8 value 2 302 ok ( psMetadataItemParseS32(itemU8) == 2, 303 "psMetadataItemParse: return 2 in S32 for U8-item with value '2'." ); 304 //Return 0 for U16 value 0 305 ok ( psMetadataItemParseS32(itemU16) == 0, 306 "psMetadataItemParse: return 0 in S32 for U16-item with value '0'." ); 307 //Return 1 for U32 value 1 308 ok ( psMetadataItemParseS32(itemU32) == 1, 309 "psMetadataItemParse: return 1 in S32 for U32-item with value '1'." ); 310 } 311 312 //U8 Test 313 { 314 //Return 0 for NULL item 315 ok ( psMetadataItemParseU8(NULL) == 0, 316 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 317 //Return 0 for non-supported type S64 318 ok ( psMetadataItemParseU8(itemUnsupported) == 0, 319 "psMetadataItemParse: return 0 in U8 for S64 (unsupported) " 320 "psMetadataItem input." ); 321 //Return 2 for string with "1.666" 322 ok ( psMetadataItemParseU8(itemString2) == 1, 323 "psMetadataItemParse: return 1 in U8 for string-item with " 324 "value '1.666'." ); 325 //Return 0 for F32 value 0.0 326 ok ( psMetadataItemParseU8(itemF32) == 0, 327 "psMetadataItemParse: return 0 in U8 for F32-item with value '0.0'." ); 328 //Return 1 for F64 value 0.5 329 ok ( psMetadataItemParseU8(itemF64) == 0, 330 "psMetadataItemParse: return 0 in U8 for F64-item with value '0.5'." ); 331 //Return 1 for S8 value 1 332 ok ( psMetadataItemParseU8(itemS8) == 1, 333 "psMetadataItemParse: return 1 in U8 for S8-item with value '1'." ); 334 //Return 0 for S16 value 0 335 ok ( psMetadataItemParseU8(itemS16) == 0, 336 "psMetadataItemParse: return 0 in U8 for S16-item with value '0'." ); 337 //Return 1 for S32 value 1 338 ok ( psMetadataItemParseU8(itemS32) == 1, 339 "psMetadataItemParse: return 1 in U8 for S32-item with value '1'." ); 340 //Return 2 for U8 value 2 341 ok ( psMetadataItemParseU8(itemU8) == 2, 342 "psMetadataItemParse: return 2 in U8 for U8-item with value '2'." ); 343 //Return 0 for U16 value 0 344 ok ( psMetadataItemParseU8(itemU16) == 0, 345 "psMetadataItemParse: return 0 in U8 for U16-item with value '0'." ); 346 //Return 1 for U32 value 1 347 ok ( psMetadataItemParseU8(itemU32) == 1, 348 "psMetadataItemParse: return 1 in U8 for U32-item with value '1'." ); 349 } 350 351 //U16 Test 352 { 353 //Return 0 for NULL item 354 ok ( psMetadataItemParseU16(NULL) == 0, 355 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 356 //Return 0 for non-supported type S64 357 ok ( psMetadataItemParseU16(itemUnsupported) == 0, 358 "psMetadataItemParse: return 0 in U16 for S64 (unsupported) " 359 "psMetadataItem input." ); 360 //Return 2 for string with "1.666" 361 ok ( psMetadataItemParseU16(itemString2) == 1, 362 "psMetadataItemParse: return 1 in U16 for string-item with " 363 "value '1.666'." ); 364 //Return 0 for F32 value 0.0 365 ok ( psMetadataItemParseU16(itemF32) == 0, 366 "psMetadataItemParse: return 0 in U16 for F32-item with value '0.0'." ); 367 //Return 1 for F64 value 0.5 368 ok ( psMetadataItemParseU16(itemF64) == 0, 369 "psMetadataItemParse: return 0 in U16 for F64-item with value '0.5'." ); 370 //Return 1 for S8 value 1 371 ok ( psMetadataItemParseU16(itemS8) == 1, 372 "psMetadataItemParse: return 1 in U16 for S8-item with value '1'." ); 373 //Return 0 for S16 value 0 374 ok ( psMetadataItemParseU16(itemS16) == 0, 375 "psMetadataItemParse: return 0 in S8 for S16-item with value '0'." ); 376 //Return 1 for S32 value 1 377 ok ( psMetadataItemParseU16(itemS32) == 1, 378 "psMetadataItemParse: return 1 in U16 for S32-item with value '1'." ); 379 //Return 2 for U8 value 2 380 ok ( psMetadataItemParseU16(itemU8) == 2, 381 "psMetadataItemParse: return 2 in U16 for U8-item with value '2'." ); 382 //Return 0 for U16 value 0 383 ok ( psMetadataItemParseU16(itemU16) == 0, 384 "psMetadataItemParse: return 0 in U16 for U16-item with value '0'." ); 385 //Return 1 for U32 value 1 386 ok ( psMetadataItemParseU16(itemU32) == 1, 387 "psMetadataItemParse: return 1 in U16 for U32-item with value '1'." ); 388 } 389 390 //U32 Test 391 { 392 //Return 0 for NULL item 393 ok ( psMetadataItemParseU32(NULL) == 0, 394 "psMetadataItemParse: return 0 for NULL psMetadataItem input." ); 395 //Return 0 for non-supported type S64 396 ok ( psMetadataItemParseU32(itemUnsupported) == 0, 397 "psMetadataItemParse: return 0 in U32 for S64 (unsupported) " 398 "psMetadataItem input." ); 399 //Return 2 for string with "1.666" 400 ok ( psMetadataItemParseU32(itemString2) == 1, 401 "psMetadataItemParse: return 1 in U32 for string-item with " 402 "value '1.666'." ); 403 //Return 0 for F32 value 0.0 404 ok ( psMetadataItemParseU32(itemF32) == 0, 405 "psMetadataItemParse: return 0 in U32 for F32-item with value '0.0'." ); 406 //Return 1 for F64 value 0.5 407 ok ( psMetadataItemParseU32(itemF64) == 0, 408 "psMetadataItemParse: return 0 in U32 for F64-item with value '0.5'." ); 409 //Return 1 for S8 value 1 410 ok ( psMetadataItemParseU32(itemS8) == 1, 411 "psMetadataItemParse: return 1 in U32 for S8-item with value '1'." ); 412 //Return 0 for S16 value 0 413 ok ( psMetadataItemParseU32(itemS16) == 0, 414 "psMetadataItemParse: return 0 in U32 for S16-item with value '0'." ); 415 //Return 1 for S32 value 1 416 ok ( psMetadataItemParseU32(itemS32) == 1, 417 "psMetadataItemParse: return 1 in U32 for S32-item with value '1'." ); 418 //Return 2 for U8 value 2 419 ok ( psMetadataItemParseU32(itemU8) == 2, 420 "psMetadataItemParse: return 2 in U32 for U8-item with value '2'." ); 421 //Return 0 for U16 value 0 422 ok ( psMetadataItemParseU32(itemU16) == 0, 423 "psMetadataItemParse: return 0 in U32 for U16-item with value '0'." ); 424 //Return 1 for U32 value 1 425 ok ( psMetadataItemParseU32(itemU32) == 1, 426 "psMetadataItemParse: return 1 in U32 for U32-item with value '1'." ); 427 } 428 429 //STRING Test 430 { 431 //Return NULL for NULL item 432 ok ( psMetadataItemParseString(NULL) == NULL, 433 "psMetadataItemParse: return NULL for NULL STRING psMetadataItem " 434 "input." ); 435 //Return NULL for non-supported type S64 436 ok ( psMetadataItemParseString(itemUnsupported) == NULL, 437 "psMetadataItemParse: return NULL in STRING for S64 (unsupported)" 438 " psMetadataItem input." ); 439 //Return "true" for STRING of value "true" 440 psString tempString = psMetadataItemParseString(itemString1); 441 is_strn( tempString, "true", 6, 442 "psMetadataItemParse: return 'true' in STRING for STRING with " 443 "value 'true'." ); 444 psFree(tempString); 445 446 //Return 0.000000 for F32 of value 0.000000 447 tempString = psMetadataItemParseString(itemF32); 448 is_strn( tempString, "0.000000", 4, 449 "psMetadataItemParse: return '0.000000' in STRING for F32 with " 450 "value '0.000000'. (actual result=%s)", tempString); 451 psFree(tempString); 452 453 //Return 0.500000 for F64 value 0.5 454 tempString = psMetadataItemParseString(itemF64); 455 is_strn( tempString, "0.500000", 10, 456 "psMetadataItemParse: return '0.500000' in STRING for F64 with " 457 "value '0.5'. (actual result=%s)", tempString); 458 psFree(tempString); 459 460 //Return 1 for S8 value 1 461 tempString = psMetadataItemParseString(itemS8); 462 is_strn( tempString, "1", 3, 463 "psMetadataItemParse: return '1' in STRING for S8 with " 464 "value '1'. (actual result=%s)", tempString); 465 psFree(tempString); 466 467 //Return 0 for S16 value 0 468 tempString = psMetadataItemParseString(itemS16); 469 is_strn( tempString, "0", 3, 470 "psMetadataItemParse: return '0' in STRING for S8 with " 471 "value '0'. (actual result=%s)", tempString); 472 psFree(tempString); 473 474 //Return 1 for S32 value 1 475 tempString = psMetadataItemParseString(itemS32); 476 is_strn( tempString, "1", 3, 477 "psMetadataItemParse: return '1' in STRING for S8 with " 478 "value '1'. (actual result=%s)", tempString); 479 psFree(tempString); 480 481 //Return 2 for U8 value 2 482 tempString = psMetadataItemParseString(itemU8); 483 is_strn( tempString, "2", 3, 484 "psMetadataItemParse: return '2' in STRING for S8 with " 485 "value '2'. (actual result=%s)", tempString); 486 psFree(tempString); 487 488 //Return 0 for U16 value 0 489 tempString = psMetadataItemParseString(itemU16); 490 is_strn( tempString, "0", 3, 491 "psMetadataItemParse: return '0' in STRING for S8 with " 492 "value '0'. (actual result=%s)", tempString); 493 psFree(tempString); 494 495 //Return 1 for U32 value 1 496 tempString = psMetadataItemParseString(itemU32); 497 is_strn( tempString, "1", 3, 498 "psMetadataItemParse: return '1' in STRING for S8 with " 499 "value '1'. (actual result=%s)", tempString); 500 psFree(tempString); 501 } 502 514 503 psFree(itemBool); 515 504 psFree(itemF32); … … 525 514 psFree(itemString11); 526 515 psFree(itemUnsupported); 527 checkMem();516 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 528 517 } 529 518 } -
trunk/psLib/test/types/tap_psMetadataIterator.c
r10822 r12781 2 2 #include <pslib.h> 3 3 #include <string.h> 4 5 4 #include "tap.h" 6 5 #include "pstap.h" 7 8 6 9 7 #define NAME1 "SIMPLE" … … 102 100 int main (void) 103 101 { 104 plan_tests(242); 105 106 note("psMetadataIterator tests"); 107 108 { 109 note("No regular expressions, forwards"); 102 psLogSetFormat("HLNM"); 103 psLogSetLevel(PS_LOG_INFO); 104 plan_tests(254); 105 106 // psMetadataIterator tests 107 // No regular expressions, forwards 108 { 109 psMemId id = psMemGetId(); 110 110 psMetadata *md = mdGenerate(); 111 111 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); … … 124 124 psFree(iter); 125 125 psFree(md); 126 } 127 128 { 129 note("No regular expressions, backwards"); 126 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 127 } 128 129 130 // No regular expressions, backwards 131 { 132 psMemId id = psMemGetId(); 130 133 psMetadata *md = mdGenerate(); 131 134 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_TAIL, NULL); … … 144 147 psFree(iter); 145 148 psFree(md); 146 } 147 148 { 149 note("No regular expressions, jumping in halfway through (using allocator), forwards"); 149 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 150 } 151 152 153 // No regular expressions, jumping in halfway through (using allocator), forwards 154 { 155 psMemId id = psMemGetId(); 150 156 psMetadata *md = mdGenerate(); 151 157 psMetadataIterator *iter = psMetadataIteratorAlloc(md, 3, NULL); … … 161 167 psFree(iter); 162 168 psFree(md); 163 } 164 165 { 166 note("No regular expressions, jumping in halfway through (using allocator), backwards"); 169 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 170 } 171 172 173 // No regular expressions, jumping in halfway through (using allocator), backwards 174 { 175 psMemId id = psMemGetId(); 167 176 psMetadata *md = mdGenerate(); 168 177 psMetadataIterator *iter = psMetadataIteratorAlloc(md, -4, NULL); … … 178 187 psFree(iter); 179 188 psFree(md); 180 } 181 182 { 183 note("No regular expressions, jumping in halfway through (using set), forwards"); 189 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 190 } 191 192 193 // No regular expressions, jumping in halfway through (using set), forwards"); 194 { 195 psMemId id = psMemGetId(); 184 196 psMetadata *md = mdGenerate(); 185 197 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); … … 196 208 psFree(iter); 197 209 psFree(md); 198 } 199 200 { 201 note("No regular expressions, jumping in halfway through (using set), backwards"); 210 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 211 } 212 213 214 // No regular expressions, jumping in halfway through (using set), backwards"); 215 { 216 psMemId id = psMemGetId(); 202 217 psMetadata *md = mdGenerate(); 203 218 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); … … 214 229 psFree(iter); 215 230 psFree(md); 216 } 217 218 { 219 note("With regular expressions, forwards"); 231 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 232 } 233 234 235 // With regular expressions, forwards"); 236 { 237 psMemId id = psMemGetId(); 220 238 psMetadata *md = mdGenerate(); 221 239 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "^" MULTI_NAME "$"); … … 231 249 psFree(iter); 232 250 psFree(md); 233 } 234 235 { 236 note("With regular expressions, backwards"); 251 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 252 } 253 254 255 // With regular expressions, backwards"); 256 { 257 psMemId id = psMemGetId(); 237 258 psMetadata *md = mdGenerate(); 238 259 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_TAIL, "^" MULTI_NAME "$"); … … 248 269 psFree(iter); 249 270 psFree(md); 250 } 251 252 { 253 note("With regular expressions, jumping in halfway through (using allocator), forwards"); 271 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 272 } 273 274 275 // With regular expressions, jumping in halfway through (using allocator), forwards"); 276 { 277 psMemId id = psMemGetId(); 254 278 psMetadata *md = mdGenerate(); 255 279 psMetadataIterator *iter = psMetadataIteratorAlloc(md, 2, "^" MULTI_NAME "$"); … … 263 287 psFree(iter); 264 288 psFree(md); 265 } 266 267 { 268 note("With regular expressions, jumping in halfway through (using allocator), backwards"); 289 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 290 } 291 292 293 // With regular expressions, jumping in halfway through (using allocator), backwards"); 294 { 295 psMemId id = psMemGetId(); 269 296 psMetadata *md = mdGenerate(); 270 297 psMetadataIterator *iter = psMetadataIteratorAlloc(md, -3, "^" MULTI_NAME "$"); … … 278 305 psFree(iter); 279 306 psFree(md); 280 } 281 282 { 283 note("With regular expressions, jumping in halfway through (using set), forwards"); 307 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 308 } 309 310 311 // With regular expressions, jumping in halfway through (using set), forwards"); 312 { 313 psMemId id = psMemGetId(); 284 314 psMetadata *md = mdGenerate(); 285 315 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "^" MULTI_NAME "$"); … … 294 324 psFree(iter); 295 325 psFree(md); 296 } 297 298 { 299 note("With regular expressions, jumping in halfway through (using set), backwards"); 326 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 327 } 328 329 330 // With regular expressions, jumping in halfway through (using set), backwards"); 331 { 332 psMemId id = psMemGetId(); 300 333 psMetadata *md = mdGenerate(); 301 334 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "^" MULTI_NAME "$"); … … 310 343 psFree(iter); 311 344 psFree(md); 312 } 313 314 315 return exit_status(); 345 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 346 } 316 347 } -
trunk/psLib/test/types/tap_psMetadataUpdate.c
r12532 r12781 9 9 * 10 10 */ 11 12 11 #include <pslib.h> 13 12 #include <string.h> 14 15 13 #include "tap.h" 16 14 #include "pstap.h" … … 18 16 int main(void) 19 17 { 18 psLogSetFormat("HLNM"); 19 psLogSetLevel(PS_LOG_INFO); 20 20 plan_tests(16); 21 // psMetadataUpdate Tests 21 22 22 note("psMetadataUpdate Tests");23 23 24 24 { 25 25 psMemId id = psMemGetId(); 26 27 26 psMetadata *md = psMetadataAlloc(); 28 27 psMetadataAddS32 (md, PS_LIST_TAIL, "TEST1", 0, "", 1); … … 33 32 } 34 33 34 35 35 { 36 36 psMemId id = psMemGetId(); 37 38 37 psMetadata *md = psMetadataAlloc(); 39 38 psMetadataAddS32 (md, PS_LIST_TAIL, "TEST1", 0, "", 1); … … 44 43 } 45 44 45 46 46 { 47 47 psMemId id = psMemGetId(); 48 49 48 psMetadata *md = psMetadataAlloc(); 50 49 psMetadataAddS32 (md, PS_LIST_TAIL, "TEST1", 0, "", 1); … … 55 54 } 56 55 56 57 57 { 58 58 psMemId id = psMemGetId(); 59 60 59 psMetadata *md = psMetadataAlloc(); 61 60 psMetadataAddS32 (md, PS_LIST_TAIL, "TEST1", 0, "", 1); … … 66 65 } 67 66 67 68 68 { 69 69 psMemId id = psMemGetId(); 70 71 70 psMetadata *md = psMetadataAlloc(); 72 71 psMetadataAddS32 (md, PS_LIST_TAIL, "TEST1", 0, "", 1); … … 77 76 } 78 77 78 79 79 { 80 80 psMemId id = psMemGetId(); 81 82 81 psMetadata *input = psMetadataAlloc(); 83 82 psMetadata *output = psMetadataAlloc(); … … 86 85 psMetadataAddS32 (input, PS_LIST_TAIL, "TEST2", 0, "", 2); 87 86 psMetadataAddS32 (input, PS_LIST_TAIL, "TEST3", 0, "", 2); 88 89 87 psMetadataAddS32 (output, PS_LIST_TAIL, "TEST1", 0, "", 1); 90 88 psMetadataAddS32 (output, PS_LIST_TAIL, "TEST2", 0, "", 1); … … 98 96 } 99 97 98 100 99 { 101 100 psMemId id = psMemGetId(); 102 103 101 psMetadata *input = psMetadataAlloc(); 104 102 psMetadata *output = psMetadataAlloc(); … … 107 105 psMetadataAddS32 (input, PS_LIST_TAIL, "TEST2", 0, "", 2); 108 106 psMetadataAddS32 (input, PS_LIST_TAIL, "TEST3", 0, "", 2); 109 110 107 psMetadataAddS32 (output, PS_LIST_TAIL, "TEST1", 0, "", 1); 111 108 psMetadataAddS32 (output, PS_LIST_TAIL, "TEST3", 0, "", 1); … … 118 115 } 119 116 117 120 118 { 121 119 psMemId id = psMemGetId(); 122 123 120 psMetadata *input = psMetadataAlloc(); 124 121 psMetadata *output = psMetadataAlloc(); -
trunk/psLib/test/types/tap_psMetadata_copying.c
r12607 r12781 10 10 * 11 11 */ 12 13 12 #include <pslib.h> 14 13 #include <string.h> 15 16 14 #include "tap.h" 17 15 #include "pstap.h" 18 16 19 void testMetadataCopy(void);20 void testMetadataItemCopy(void);21 void testMetadataItemTransfer(void);22 17 23 18 int main(void) 24 19 { 25 20 psLogSetFormat("HLNM"); 26 plan_tests(39); 27 28 testMetadataCopy(); 29 testMetadataItemCopy(); 30 testMetadataItemTransfer(); 31 32 done(); 33 } 34 35 void testMetadataCopy(void) 36 { 37 psMetadata *in = NULL; 38 psMetadata *out = NULL; 39 psMetadataItem *tempItem = NULL; 40 psMetadataItem *outItem = NULL; 41 psMetadataItem *inItem = NULL; 42 psMetadata *outTest = NULL; 43 44 //Return NULL for NULL psMetadata input 21 psLogSetLevel(PS_LOG_INFO); 22 plan_tests(41); 23 24 25 // testMetadataCopy() 45 26 { 46 outTest = psMetadataCopy(out, NULL); 47 ok( outTest == NULL, 48 "psMetadataCopy: return NULL for NULL input metadata."); 49 } 50 //Return allocated out for NULL psMetadata input (with allocated out) 51 { 52 out = psMetadataAlloc(); 53 outTest = psMetadataCopy(out, NULL); 54 ok( outTest == NULL, 55 "psMetadataCopy: return out for NULL input metadata."); 27 psMemId id = psMemGetId(); 28 psMetadata *in = NULL; 29 psMetadata *out = NULL; 30 psMetadataItem *tempItem = NULL; 31 psMetadataItem *outItem = NULL; 32 psMetadataItem *inItem = NULL; 33 psMetadata *outTest = NULL; 34 35 //Return NULL for NULL psMetadata input 36 { 37 outTest = psMetadataCopy(out, NULL); 38 ok( outTest == NULL, 39 "psMetadataCopy: return NULL for NULL input metadata."); 40 } 41 //Return allocated out for NULL psMetadata input (with allocated out) 42 { 43 out = psMetadataAlloc(); 44 outTest = psMetadataCopy(out, NULL); 45 ok( outTest == NULL, 46 "psMetadataCopy: return out for NULL input metadata."); 47 psFree(out); 48 out = NULL; 49 } 50 //Return NULL for attempt to copy item of unsupported data type - NULL out metadata 51 psMetadataItem *notype = NULL; 52 { 53 in = psMetadataAlloc(); 54 psMetadataAddS32(in, PS_LIST_HEAD, "S32", 0, "", 1); 55 notype = psMetadataGet(in, PS_LIST_HEAD); 56 notype->type = -1; 57 outTest = psMetadataCopy(out, in); 58 ok( outTest == NULL, 59 "psMetadataCopy: return NULL for metadata with item of bad type."); 60 psFree(out); 61 out = NULL; 62 } 63 //Return NULL for attempt to copy item of unsupported data type - allocated out metadata 64 { 65 out = psMetadataAlloc(); 66 psMetadataAddS32(out, PS_LIST_TAIL, "S32", 0, "", 2); 67 outTest = psMetadataCopy(out, in); 68 ok( outTest == NULL, 69 "psMetadataCopy: return NULL for metadata with item of bad type."); 70 notype->type = PS_DATA_S32; 71 psFree(out); 72 out = NULL; 73 psFree(in); 74 in = NULL; 75 } 76 77 //Return NULL for NULL psMetadata input->list 78 in = psMetadataAlloc(); 79 if (in->list != NULL) { 80 psFree(in->list); 81 in->list = NULL; 82 } 83 { 84 outTest = psMetadataCopy(out, in); 85 ok( outTest == NULL, 86 "psMetadataCopy: return NULL for NULL metadata input->list."); 87 } 88 /* //Return NULL for NULL psMetadata input->list (with allocated out) 89 { 90 out = psMetadataAlloc(); 91 out = psMetadataCopy(out, in); 92 ok( out == NULL, 93 "psMetadataCopy: return NULL for NULL metadata input->list."); 94 } 95 */ 96 //Return valid (but empty) metadata for NULL out input and empty input metadata. 97 in->list = psListAlloc(NULL); 98 psFree(in); 99 in = psMetadataAlloc(); 100 if (out != NULL) { 101 psFree(out); 102 out = NULL; 103 } 104 outTest = psMetadataCopy(out, in); 105 tempItem = psMetadataGet(in, PS_LIST_HEAD); 106 { 107 ok( outTest != NULL && tempItem == NULL, 108 "psMetadataCopy: return empty copy with no items for empty input metadata."); 109 psFree(out); 110 psFree(outTest); 111 out = NULL; 112 outTest = NULL; 113 } 114 115 //Test case: multiCheckItem->type == PS_DATA_METADATA_MULTI 116 psMetadataAddS32(in, PS_LIST_HEAD, "S32", 0, "", 1); 117 psMetadataAddS32(in, PS_LIST_TAIL, "S32", PS_META_DUPLICATE_OK, "", 1); 118 outTest = psMetadataCopy(out, in); 119 tempItem = psMetadataGet(outTest, PS_LIST_HEAD); 120 { 121 ok( tempItem->type == PS_DATA_S32 && tempItem->data.S32 == 1, 122 "psMetadataCopy: return valid copy for a PS_DATA_METADATA_MULTI entry."); 123 psFree(outTest); 124 outTest = NULL; 125 } 126 127 //Test case: !psMetadataAddItem(out, newItem, PS_LIST_TAIL, flag) 128 //XXX: doesn't seem to be easily reachable, certainly by the user... Skipping. 129 130 //Test case: simple valid test 131 psFree(in); 56 132 psFree(out); 57 133 out = NULL; 58 }59 //Return NULL for attempt to copy item of unsupported data type - NULL out metadata60 psMetadataItem *notype = NULL;61 {62 134 in = psMetadataAlloc(); 63 psMetadataAddS32(in, PS_LIST_HEAD, "S32", 0, "", 1); 64 notype = psMetadataGet(in, PS_LIST_HEAD); 65 notype->type = -1; 135 psMetadataAddS32(in, PS_LIST_HEAD, "S32", 0, "", 666); 66 136 outTest = psMetadataCopy(out, in); 67 ok( outTest == NULL, 68 "psMetadataCopy: return NULL for metadata with item of bad type."); 69 psFree(out); 70 out = NULL; 71 } 72 //Return NULL for attempt to copy item of unsupported data type - allocated out metadata 73 { 74 out = psMetadataAlloc(); 75 psMetadataAddS32(out, PS_LIST_TAIL, "S32", 0, "", 2); 76 outTest = psMetadataCopy(out, in); 77 ok( outTest == NULL, 78 "psMetadataCopy: return NULL for metadata with item of bad type."); 79 notype->type = PS_DATA_S32; 80 psFree(out); 81 out = NULL; 82 psFree(in); 83 in = NULL; 84 } 85 86 //Return NULL for NULL psMetadata input->list 87 in = psMetadataAlloc(); 88 if (in->list != NULL) { 89 psFree(in->list); 90 in->list = NULL; 91 } 92 { 93 outTest = psMetadataCopy(out, in); 94 ok( outTest == NULL, 95 "psMetadataCopy: return NULL for NULL metadata input->list."); 96 } 97 /* //Return NULL for NULL psMetadata input->list (with allocated out) 98 { 99 out = psMetadataAlloc(); 100 out = psMetadataCopy(out, in); 101 ok( out == NULL, 102 "psMetadataCopy: return NULL for NULL metadata input->list."); 103 } 104 */ 105 //Return valid (but empty) metadata for NULL out input and empty input metadata. 106 in->list = psListAlloc(NULL); 107 psFree(in); 108 in = psMetadataAlloc(); 109 if (out != NULL) { 110 psFree(out); 111 out = NULL; 112 } 113 outTest = psMetadataCopy(out, in); 114 tempItem = psMetadataGet(in, PS_LIST_HEAD); 115 { 116 ok( outTest != NULL && tempItem == NULL, 117 "psMetadataCopy: return empty copy with no items for empty input metadata."); 118 psFree(out); 137 outItem = psMetadataGet(outTest, PS_LIST_HEAD); 138 inItem = psMetadataGet(in, PS_LIST_HEAD); 139 { 140 ok( outItem->type == PS_DATA_S32 && outItem->data.S32 == inItem->data.S32 && 141 (strncmp(inItem->name, outItem->name, 10) == 0), 142 "psMetadataCopy: return valid copy of metadata with 1 S32 entry."); 143 } 119 144 psFree(outTest); 120 out = NULL;121 outTest = NULL;122 }123 124 //Test case: multiCheckItem->type == PS_DATA_METADATA_MULTI125 psMetadataAddS32(in, PS_LIST_HEAD, "S32", 0, "", 1);126 psMetadataAddS32(in, PS_LIST_TAIL, "S32", PS_META_DUPLICATE_OK, "", 1);127 outTest = psMetadataCopy(out, in);128 tempItem = psMetadataGet(outTest, PS_LIST_HEAD);129 {130 ok( tempItem->type == PS_DATA_S32 && tempItem->data.S32 == 1,131 "psMetadataCopy: return valid copy for a PS_DATA_METADATA_MULTI entry.");132 psFree(outTest);133 outTest = NULL;134 }135 136 //Test case: !psMetadataAddItem(out, newItem, PS_LIST_TAIL, flag)137 //XXX: doesn't seem to be easily reachable, certainly by the user... Skipping.138 139 //Test case: simple valid test140 psFree(in);141 psFree(out);142 out = NULL;143 in = psMetadataAlloc();144 psMetadataAddS32(in, PS_LIST_HEAD, "S32", 0, "", 666);145 outTest = psMetadataCopy(out, in);146 outItem = psMetadataGet(outTest, PS_LIST_HEAD);147 inItem = psMetadataGet(in, PS_LIST_HEAD);148 {149 ok( outItem->type == PS_DATA_S32 && outItem->data.S32 == inItem->data.S32 &&150 (strncmp(inItem->name, outItem->name, 10) == 0),151 "psMetadataCopy: return valid copy of metadata with 1 S32 entry.");152 }153 psFree(outTest);154 //Check for Memory Leaks155 {156 145 psFree(in); 157 146 psFree(out); 158 checkMem();147 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 159 148 } 160 149 161 } 162 163 void testMetadataItemCopy(void) 164 { 165 //Return NULL for NULL input psMetadataItem 150 151 // testMetadataItemCopy() 166 152 { 167 ok( psMetadataItemCopy(NULL) == NULL, 168 "psMetadataItemCopy: return NULL for NULL input metadataItem."); 169 } 170 171 //Test Simple types: Bool, S8, S16, S32, S64, U8, U16, U32, U64, F32, F64, STRING 172 psMetadataItem *itemBool = psMetadataItemAlloc("itemBool", PS_DATA_BOOL, "", false); 173 psMetadataItem *itemS8 = psMetadataItemAlloc("itemS8", PS_DATA_S8, "", 1); 174 psMetadataItem *itemS16 = psMetadataItemAlloc("itemS16", PS_DATA_S16, "", 2); 175 psMetadataItem *itemS32 = psMetadataItemAlloc("itemS32", PS_DATA_S32, "", 3); 176 psMetadataItem *itemS64 = psMetadataItemAlloc("itemS64", PS_DATA_S64, "", (psS64)4); 177 psMetadataItem *itemU8 = psMetadataItemAlloc("itemU8", PS_DATA_U8, "", 1); 178 psMetadataItem *itemU16 = psMetadataItemAlloc("itemU16", PS_DATA_U16, "", 2); 179 psMetadataItem *itemU32 = psMetadataItemAlloc("itemU32", PS_DATA_U32, "", 3); 180 psMetadataItem *itemU64 = psMetadataItemAlloc("itemU64", PS_DATA_U64, "", 4); 181 psMetadataItem *itemF32 = psMetadataItemAlloc("itemF32", PS_DATA_F32, "", 3.0); 182 psMetadataItem *itemF64 = psMetadataItemAlloc("itemF64", PS_DATA_F64, "", 4.0); 183 psMetadataItem *itemString = psMetadataItemAlloc("itemString", PS_DATA_STRING, "", "I M STRiNG"); 184 psMetadataItem *copy = NULL; 185 //Bool case 186 { 187 copy = psMetadataItemCopy(itemBool); 188 ok( (copy->type == PS_DATA_BOOL && (strncmp(copy->name, "itemBool", 10) == 0) && 189 !copy->data.B && strncmp(copy->comment, "", 2) == 0), 190 "psMetadataItemCopy: return valid copy of BOOL item."); 191 psFree(copy); 192 } 193 //S8 case 194 { 195 copy = psMetadataItemCopy(itemS8); 196 ok( (copy->type == PS_DATA_S8 && (strncmp(copy->name, "itemS8", 10) == 0) && 197 copy->data.S8 == 1 && strncmp(copy->comment, "", 2) == 0), 198 "psMetadataItemCopy: return valid copy of S8 item."); 199 psFree(copy); 200 } 201 //S16 case 202 { 203 copy = psMetadataItemCopy(itemS16); 204 ok( (copy->type == PS_DATA_S16 && (strncmp(copy->name, "itemS16", 10) == 0) && 205 copy->data.S16 == 2 && strncmp(copy->comment, "", 2) == 0), 206 "psMetadataItemCopy: return valid copy of S16 item."); 207 psFree(copy); 208 } 209 //S32 case 210 { 211 copy = psMetadataItemCopy(itemS32); 212 ok( (copy->type == PS_DATA_S32 && (strncmp(copy->name, "itemS32", 10) == 0) && 213 copy->data.S32 == 3 && strncmp(copy->comment, "", 2) == 0), 214 "psMetadataItemCopy: return valid copy of S32 item."); 215 psFree(copy); 216 } 217 218 // S64 case 219 { 220 psMetadataItem *copy = psMetadataItemCopy(itemS64); 221 222 ok(copy->type == PS_DATA_S64, "item type"); 223 is_str(copy->name, "itemS64", "item name"); 224 is_long(copy->data.S64, 4, "item data"); 225 is_str(copy->comment, "", "item comment"); 226 227 psFree(copy); 228 } 229 230 //U8 case 231 { 232 copy = psMetadataItemCopy(itemU8); 233 ok( (copy->type == PS_DATA_U8 && (strncmp(copy->name, "itemU8", 10) == 0) && 234 copy->data.U8 == 1 && strncmp(copy->comment, "", 2) == 0), 235 "psMetadataItemCopy: return valid copy of U8 item."); 236 psFree(copy); 237 } 238 //U16 case 239 { 240 copy = psMetadataItemCopy(itemU16); 241 ok( (copy->type == PS_DATA_U16 && (strncmp(copy->name, "itemU16", 10) == 0) && 242 copy->data.U16 == 2 && strncmp(copy->comment, "", 2) == 0), 243 "psMetadataItemCopy: return valid copy of U16 item."); 244 psFree(copy); 245 } 246 //U32 case 247 { 248 copy = psMetadataItemCopy(itemU32); 249 ok( (copy->type == PS_DATA_U32 && (strncmp(copy->name, "itemU32", 10) == 0) && 250 copy->data.U32 == 3 && strncmp(copy->comment, "", 2) == 0), 251 "psMetadataItemCopy: return valid copy of U32 item."); 252 psFree(copy); 253 } 254 //U64 case 255 { 256 copy = psMetadataItemCopy(itemU64); 257 ok( (copy->type == PS_DATA_U64 && (strncmp(copy->name, "itemU64", 10) == 0) && 258 copy->data.U64 == 4 && strncmp(copy->comment, "", 2) == 0), 259 "psMetadataItemCopy: return valid copy of U64 item."); 260 psFree(copy); 261 } 262 //F32 case 263 { 264 copy = psMetadataItemCopy(itemF32); 265 ok( (copy->type == PS_DATA_F32 && (strncmp(copy->name, "itemF32", 10) == 0) && 266 abs(copy->data.F32-3.0) < FLT_EPSILON && strncmp(copy->comment, "", 2) == 0), 267 "psMetadataItemCopy: return valid copy of F32 item."); 268 psFree(copy); 269 } 270 //F64 case 271 { 272 copy = psMetadataItemCopy(itemF64); 273 ok( (copy->type == PS_DATA_F64 && (strncmp(copy->name, "itemF64", 10) == 0) && 274 abs(copy->data.F64-4.0) < DBL_EPSILON && strncmp(copy->comment, "", 2) == 0), 275 "psMetadataItemCopy: return valid copy of F64 item."); 276 psFree(copy); 277 } 278 //STRING case 279 { 280 copy = psMetadataItemCopy(itemString); 281 ok( (copy->type == PS_DATA_STRING && (strncmp(copy->name, "itemString", 12) == 0) && 282 strncmp(copy->data.str,"I M STRiNG",12) == 0 && strncmp(copy->comment,"",2) == 0), 283 "psMetadataItemCopy: return valid copy of STRING item."); 284 psFree(copy); 285 } 286 287 //Test Remaining types: Vector, Time, Metadata, Region 288 psVector *inV = psVectorAlloc(2, PS_TYPE_S32); 289 psVectorSet(inV, 0, 666); 290 psVectorSet(inV, 1, 667); 291 psMetadataItem *itemVector = psMetadataItemAlloc("itemVector", PS_DATA_VECTOR, "", inV); 292 psTime *teaTime = psTimeAlloc(PS_TIME_TAI); 293 teaTime->sec = 1; 294 teaTime->nsec = 0; 295 teaTime->leapsecond = true; 296 psMetadataItem *itemTime = psMetadataItemAlloc("itemTime", PS_DATA_TIME, "", teaTime); 297 psMetadata *md = psMetadataAlloc(); 298 psMetadataAddS32(md, PS_LIST_HEAD, "mdS32", 0, "", 666); 299 psMetadataItem *itemMD = psMetadataItemAlloc("itemMD", PS_DATA_METADATA, "", md); 300 psRegion *reg = psRegionAlloc(0.0, 2.0, 1.0, 3.0); 301 psMetadataItem *itemRegion = psMetadataItemAlloc("itemRegion", PS_DATA_REGION, "", reg); 302 //Vector case 303 { 304 copy = psMetadataItemCopy(itemVector); 305 int int0 = ((psVector*)(copy->data.V))->data.S32[0]; 306 int int1 = ((psVector*)(copy->data.V))->data.S32[1]; 307 ok( (copy->type == PS_DATA_VECTOR && (strncmp(copy->name, "itemVector", 12) == 0) 308 && int0 == 666 && int1 == 667 && strncmp(copy->comment,"",2) == 0), 309 "psMetadataItemCopy: return valid copy of Vector item."); 310 psFree(copy); 311 } 312 //Vector case - invalid vector item 313 { 314 psFree(itemVector->data.V); 315 itemVector->data.V = NULL; 316 copy = psMetadataItemCopy(itemVector); 317 ok( copy == NULL, "psMetadataItemCopy: return NULL for invalid vector item"); 318 // itemVector->data.V = psVectorAlloc(1, PS_TYPE_S32); 319 } 320 //Time case 321 { 322 copy = psMetadataItemCopy(itemTime); 323 int int0 = (int)((psTime*)(copy->data.V))->sec; 324 int int1 = (int)((psTime*)(copy->data.V))->nsec; 325 bool leap = ((psTime*)(copy->data.V))->leapsecond; 326 ok( (copy->type == PS_DATA_TIME && (strncmp(copy->name, "itemTime", 12) == 0) 327 && int0 == 1 && int1 == 0 && strncmp(copy->comment,"",2) == 0) && leap, 328 "psMetadataItemCopy: return valid copy of Time item."); 329 psFree(copy); 330 } 331 //Time case - invalid time item 332 { 333 psTime *t = psTimeAlloc(PS_TIME_TT); 334 t->type += 1; 335 psMetadataItem *itemTime2 = psMetadataItemAlloc("itemTime", PS_DATA_TIME, "", t); 336 copy = psMetadataItemCopy(itemTime2); 337 ok( copy != NULL && copy->data.V == NULL, 338 "psMetadataItemCopy: return non-NULL item for invalid input time item"); 339 psFree(t); 340 psFree(copy); 341 psFree(itemTime2); 342 } 343 //Time case - NULL time item 344 { 345 psFree(itemTime->data.V); 346 itemTime->data.V = NULL; 347 copy = psMetadataItemCopy(itemTime); 348 ok( copy != NULL && copy->data.V == NULL, 349 "psMetadataItemCopy: return non-NULL item for NULL input time item"); 350 // (itemTime->data.V) = psTimeAlloc(PS_TIME_TAI); 351 psFree(copy); 352 } 353 //Metadata case 354 { 355 copy = psMetadataItemCopy(itemMD); 356 psMetadataItem *testItem = NULL; 357 testItem = psMetadataGet(((psMetadata*)(copy->data.V)), PS_LIST_HEAD); 358 if (testItem == NULL) 359 printf("\nError in psMetadataGet.\n"); 360 ok( copy->type == PS_DATA_METADATA && strncmp(copy->name, "itemMD", 8) == 0 361 && (strncmp(copy->comment, "",2) == 0) && testItem->type == PS_DATA_S32 362 && (strncmp(testItem->name, "mdS32", 10) == 0) && testItem->data.S32 == 666 363 && (strncmp(testItem->comment,"",2) == 0), 364 "psMetadataItemCopy: return valid copy of Metadata item."); 365 psFree(copy); 366 } 367 //Region case 368 { 369 copy = psMetadataItemCopy(itemRegion); 370 float x0 = ((psRegion*)(copy->data.V))->x0; 371 float x1 = ((psRegion*)(copy->data.V))->x1; 372 float y0 = ((psRegion*)(copy->data.V))->y0; 373 float y1 = ((psRegion*)(copy->data.V))->y1; 374 ok( (copy->type == PS_DATA_REGION && (strncmp(copy->name, "itemRegion", 12) == 0) 375 && abs(x0-0.0) < FLT_EPSILON && abs(x1-2.0) < FLT_EPSILON 376 && abs(y0-1.0) < FLT_EPSILON && abs(y1-3.0) < FLT_EPSILON 377 && strncmp(copy->comment,"",2) == 0), 378 "psMetadataItemCopy: return valid copy of Region item."); 379 psFree(copy); 380 } 381 382 //Test Unsupported type - (sphere for example) 383 psSphere *sphere = psSphereAlloc(); 384 sphere->r = 1.0; 385 sphere->d = 6.66; 386 psMetadataItem *itemSphere = psMetadataItemAlloc("itemSphere", PS_DATA_SPHERE, "", sphere); 387 psFree(sphere); 388 { 389 copy = psMetadataItemCopy(itemSphere); 390 float R = ((psSphere*)(copy->data.V))->r; 391 float D = ((psSphere*)(copy->data.V))->d; 392 ok( (copy->type == PS_DATA_SPHERE && (strncmp(copy->name, "itemSphere", 12) == 0) && 393 abs(R - 1.0) < FLT_EPSILON && abs(D - 6.66) < FLT_EPSILON && 394 strncmp(copy->comment,"",2) == 0), 395 "psMetadataItemCopy: return valid copy of SPHERE item."); 396 psFree(copy); 397 } 398 399 //Check for Memory Leaks before exit 400 { 153 psMemId id = psMemGetId(); 154 //Return NULL for NULL input psMetadataItem 155 { 156 ok( psMetadataItemCopy(NULL) == NULL, 157 "psMetadataItemCopy: return NULL for NULL input metadataItem."); 158 } 159 160 //Test Simple types: Bool, S8, S16, S32, S64, U8, U16, U32, U64, F32, F64, STRING 161 psMetadataItem *itemBool = psMetadataItemAlloc("itemBool", PS_DATA_BOOL, "", false); 162 psMetadataItem *itemS8 = psMetadataItemAlloc("itemS8", PS_DATA_S8, "", 1); 163 psMetadataItem *itemS16 = psMetadataItemAlloc("itemS16", PS_DATA_S16, "", 2); 164 psMetadataItem *itemS32 = psMetadataItemAlloc("itemS32", PS_DATA_S32, "", 3); 165 psMetadataItem *itemS64 = psMetadataItemAlloc("itemS64", PS_DATA_S64, "", (psS64)4); 166 psMetadataItem *itemU8 = psMetadataItemAlloc("itemU8", PS_DATA_U8, "", 1); 167 psMetadataItem *itemU16 = psMetadataItemAlloc("itemU16", PS_DATA_U16, "", 2); 168 psMetadataItem *itemU32 = psMetadataItemAlloc("itemU32", PS_DATA_U32, "", 3); 169 psMetadataItem *itemU64 = psMetadataItemAlloc("itemU64", PS_DATA_U64, "", 4); 170 psMetadataItem *itemF32 = psMetadataItemAlloc("itemF32", PS_DATA_F32, "", 3.0); 171 psMetadataItem *itemF64 = psMetadataItemAlloc("itemF64", PS_DATA_F64, "", 4.0); 172 psMetadataItem *itemString = psMetadataItemAlloc("itemString", PS_DATA_STRING, "", "I M STRiNG"); 173 psMetadataItem *copy = NULL; 174 //Bool case 175 { 176 copy = psMetadataItemCopy(itemBool); 177 ok( (copy->type == PS_DATA_BOOL && (strncmp(copy->name, "itemBool", 10) == 0) && 178 !copy->data.B && strncmp(copy->comment, "", 2) == 0), 179 "psMetadataItemCopy: return valid copy of BOOL item."); 180 psFree(copy); 181 } 182 //S8 case 183 { 184 copy = psMetadataItemCopy(itemS8); 185 ok( (copy->type == PS_DATA_S8 && (strncmp(copy->name, "itemS8", 10) == 0) && 186 copy->data.S8 == 1 && strncmp(copy->comment, "", 2) == 0), 187 "psMetadataItemCopy: return valid copy of S8 item."); 188 psFree(copy); 189 } 190 //S16 case 191 { 192 copy = psMetadataItemCopy(itemS16); 193 ok( (copy->type == PS_DATA_S16 && (strncmp(copy->name, "itemS16", 10) == 0) && 194 copy->data.S16 == 2 && strncmp(copy->comment, "", 2) == 0), 195 "psMetadataItemCopy: return valid copy of S16 item."); 196 psFree(copy); 197 } 198 //S32 case 199 { 200 copy = psMetadataItemCopy(itemS32); 201 ok( (copy->type == PS_DATA_S32 && (strncmp(copy->name, "itemS32", 10) == 0) && 202 copy->data.S32 == 3 && strncmp(copy->comment, "", 2) == 0), 203 "psMetadataItemCopy: return valid copy of S32 item."); 204 psFree(copy); 205 } 206 207 // S64 case 208 { 209 psMetadataItem *copy = psMetadataItemCopy(itemS64); 210 211 ok(copy->type == PS_DATA_S64, "item type"); 212 is_str(copy->name, "itemS64", "item name"); 213 is_long(copy->data.S64, 4, "item data"); 214 is_str(copy->comment, "", "item comment"); 215 216 psFree(copy); 217 } 218 219 //U8 case 220 { 221 copy = psMetadataItemCopy(itemU8); 222 ok( (copy->type == PS_DATA_U8 && (strncmp(copy->name, "itemU8", 10) == 0) && 223 copy->data.U8 == 1 && strncmp(copy->comment, "", 2) == 0), 224 "psMetadataItemCopy: return valid copy of U8 item."); 225 psFree(copy); 226 } 227 //U16 case 228 { 229 copy = psMetadataItemCopy(itemU16); 230 ok( (copy->type == PS_DATA_U16 && (strncmp(copy->name, "itemU16", 10) == 0) && 231 copy->data.U16 == 2 && strncmp(copy->comment, "", 2) == 0), 232 "psMetadataItemCopy: return valid copy of U16 item."); 233 psFree(copy); 234 } 235 //U32 case 236 { 237 copy = psMetadataItemCopy(itemU32); 238 ok( (copy->type == PS_DATA_U32 && (strncmp(copy->name, "itemU32", 10) == 0) && 239 copy->data.U32 == 3 && strncmp(copy->comment, "", 2) == 0), 240 "psMetadataItemCopy: return valid copy of U32 item."); 241 psFree(copy); 242 } 243 //U64 case 244 { 245 copy = psMetadataItemCopy(itemU64); 246 ok( (copy->type == PS_DATA_U64 && (strncmp(copy->name, "itemU64", 10) == 0) && 247 copy->data.U64 == 4 && strncmp(copy->comment, "", 2) == 0), 248 "psMetadataItemCopy: return valid copy of U64 item."); 249 psFree(copy); 250 } 251 //F32 case 252 { 253 copy = psMetadataItemCopy(itemF32); 254 ok( (copy->type == PS_DATA_F32 && (strncmp(copy->name, "itemF32", 10) == 0) && 255 abs(copy->data.F32-3.0) < FLT_EPSILON && strncmp(copy->comment, "", 2) == 0), 256 "psMetadataItemCopy: return valid copy of F32 item."); 257 psFree(copy); 258 } 259 //F64 case 260 { 261 copy = psMetadataItemCopy(itemF64); 262 ok( (copy->type == PS_DATA_F64 && (strncmp(copy->name, "itemF64", 10) == 0) && 263 abs(copy->data.F64-4.0) < DBL_EPSILON && strncmp(copy->comment, "", 2) == 0), 264 "psMetadataItemCopy: return valid copy of F64 item."); 265 psFree(copy); 266 } 267 //STRING case 268 { 269 copy = psMetadataItemCopy(itemString); 270 ok( (copy->type == PS_DATA_STRING && (strncmp(copy->name, "itemString", 12) == 0) && 271 strncmp(copy->data.str,"I M STRiNG",12) == 0 && strncmp(copy->comment,"",2) == 0), 272 "psMetadataItemCopy: return valid copy of STRING item."); 273 psFree(copy); 274 } 275 276 //Test Remaining types: Vector, Time, Metadata, Region 277 psVector *inV = psVectorAlloc(2, PS_TYPE_S32); 278 psVectorSet(inV, 0, 666); 279 psVectorSet(inV, 1, 667); 280 psMetadataItem *itemVector = psMetadataItemAlloc("itemVector", PS_DATA_VECTOR, "", inV); 281 psTime *teaTime = psTimeAlloc(PS_TIME_TAI); 282 teaTime->sec = 1; 283 teaTime->nsec = 0; 284 teaTime->leapsecond = true; 285 psMetadataItem *itemTime = psMetadataItemAlloc("itemTime", PS_DATA_TIME, "", teaTime); 286 psMetadata *md = psMetadataAlloc(); 287 psMetadataAddS32(md, PS_LIST_HEAD, "mdS32", 0, "", 666); 288 psMetadataItem *itemMD = psMetadataItemAlloc("itemMD", PS_DATA_METADATA, "", md); 289 psRegion *reg = psRegionAlloc(0.0, 2.0, 1.0, 3.0); 290 psMetadataItem *itemRegion = psMetadataItemAlloc("itemRegion", PS_DATA_REGION, "", reg); 291 //Vector case 292 { 293 copy = psMetadataItemCopy(itemVector); 294 int int0 = ((psVector*)(copy->data.V))->data.S32[0]; 295 int int1 = ((psVector*)(copy->data.V))->data.S32[1]; 296 ok( (copy->type == PS_DATA_VECTOR && (strncmp(copy->name, "itemVector", 12) == 0) 297 && int0 == 666 && int1 == 667 && strncmp(copy->comment,"",2) == 0), 298 "psMetadataItemCopy: return valid copy of Vector item."); 299 psFree(copy); 300 } 301 //Vector case - invalid vector item 302 { 303 psFree(itemVector->data.V); 304 itemVector->data.V = NULL; 305 copy = psMetadataItemCopy(itemVector); 306 ok( copy == NULL, "psMetadataItemCopy: return NULL for invalid vector item"); 307 // itemVector->data.V = psVectorAlloc(1, PS_TYPE_S32); 308 } 309 //Time case 310 { 311 copy = psMetadataItemCopy(itemTime); 312 int int0 = (int)((psTime*)(copy->data.V))->sec; 313 int int1 = (int)((psTime*)(copy->data.V))->nsec; 314 bool leap = ((psTime*)(copy->data.V))->leapsecond; 315 ok( (copy->type == PS_DATA_TIME && (strncmp(copy->name, "itemTime", 12) == 0) 316 && int0 == 1 && int1 == 0 && strncmp(copy->comment,"",2) == 0) && leap, 317 "psMetadataItemCopy: return valid copy of Time item."); 318 psFree(copy); 319 } 320 //Time case - invalid time item 321 { 322 psTime *t = psTimeAlloc(PS_TIME_TT); 323 t->type += 1; 324 psMetadataItem *itemTime2 = psMetadataItemAlloc("itemTime", PS_DATA_TIME, "", t); 325 copy = psMetadataItemCopy(itemTime2); 326 ok( copy != NULL && copy->data.V == NULL, 327 "psMetadataItemCopy: return non-NULL item for invalid input time item"); 328 psFree(t); 329 psFree(copy); 330 psFree(itemTime2); 331 } 332 //Time case - NULL time item 333 { 334 psFree(itemTime->data.V); 335 itemTime->data.V = NULL; 336 copy = psMetadataItemCopy(itemTime); 337 ok( copy != NULL && copy->data.V == NULL, 338 "psMetadataItemCopy: return non-NULL item for NULL input time item"); 339 // (itemTime->data.V) = psTimeAlloc(PS_TIME_TAI); 340 psFree(copy); 341 } 342 //Metadata case 343 { 344 copy = psMetadataItemCopy(itemMD); 345 psMetadataItem *testItem = NULL; 346 testItem = psMetadataGet(((psMetadata*)(copy->data.V)), PS_LIST_HEAD); 347 if (testItem == NULL) 348 printf("\nError in psMetadataGet.\n"); 349 ok( copy->type == PS_DATA_METADATA && strncmp(copy->name, "itemMD", 8) == 0 350 && (strncmp(copy->comment, "",2) == 0) && testItem->type == PS_DATA_S32 351 && (strncmp(testItem->name, "mdS32", 10) == 0) && testItem->data.S32 == 666 352 && (strncmp(testItem->comment,"",2) == 0), 353 "psMetadataItemCopy: return valid copy of Metadata item."); 354 psFree(copy); 355 } 356 //Region case 357 { 358 copy = psMetadataItemCopy(itemRegion); 359 float x0 = ((psRegion*)(copy->data.V))->x0; 360 float x1 = ((psRegion*)(copy->data.V))->x1; 361 float y0 = ((psRegion*)(copy->data.V))->y0; 362 float y1 = ((psRegion*)(copy->data.V))->y1; 363 ok( (copy->type == PS_DATA_REGION && (strncmp(copy->name, "itemRegion", 12) == 0) 364 && abs(x0-0.0) < FLT_EPSILON && abs(x1-2.0) < FLT_EPSILON 365 && abs(y0-1.0) < FLT_EPSILON && abs(y1-3.0) < FLT_EPSILON 366 && strncmp(copy->comment,"",2) == 0), 367 "psMetadataItemCopy: return valid copy of Region item."); 368 psFree(copy); 369 } 370 371 //Test Unsupported type - (sphere for example) 372 psSphere *sphere = psSphereAlloc(); 373 sphere->r = 1.0; 374 sphere->d = 6.66; 375 psMetadataItem *itemSphere = psMetadataItemAlloc("itemSphere", PS_DATA_SPHERE, "", sphere); 376 psFree(sphere); 377 { 378 copy = psMetadataItemCopy(itemSphere); 379 float R = ((psSphere*)(copy->data.V))->r; 380 float D = ((psSphere*)(copy->data.V))->d; 381 ok( (copy->type == PS_DATA_SPHERE && (strncmp(copy->name, "itemSphere", 12) == 0) && 382 abs(R - 1.0) < FLT_EPSILON && abs(D - 6.66) < FLT_EPSILON && 383 strncmp(copy->comment,"",2) == 0), 384 "psMetadataItemCopy: return valid copy of SPHERE item."); 385 psFree(copy); 386 } 387 401 388 psFree(itemSphere); 402 389 psFree(inV); … … 420 407 psFree(itemMD); 421 408 psFree(itemRegion); 422 checkMem();409 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 423 410 } 424 411 425 } 426 427 void testMetadataItemTransfer(void) 428 { 429 psMetadata *out = psMetadataAlloc(); 430 psMetadata *in = psMetadataAlloc(); 431 psString key = psStringAlloc(30); 432 strncpy(key, "key", 4); 433 434 //Return false for NULL in input 412 413 // testMetadataItemTransfer() 435 414 { 436 ok( !psMetadataItemSupplement(out, NULL, key), 437 "psMetadataItemSupplement: return false for NULL in metadata."); 438 } 439 //Return false for NULL out input 440 { 441 ok( !psMetadataItemSupplement(NULL, in, key), 442 "psMetadataItemSupplement: return false for NULL out metadata."); 443 } 444 //Return false for NULL key input 445 { 446 ok( !psMetadataItemSupplement(out, in, NULL), 447 "psMetadataItemSupplement: return false for NULL key string."); 448 } 449 psMetadataAddS32(in, PS_LIST_HEAD, "key", PS_META_NO_REPLACE, "", 666); 450 psMetadataAddF32(out, PS_LIST_HEAD, "out", 0, "", 6.66); 451 452 //Return true for valid inputs 453 { 454 bool transfered = psMetadataItemSupplement(out, in, key); 455 psMetadataItem *item = NULL; 456 if (transfered) 457 item = psMetadataGet(out, PS_LIST_TAIL); 458 ok(transfered && item->type == PS_DATA_S32 && strncmp(item->name, "key", 4) == 0 459 && item->data.S32 == 666 && strncmp(item->comment, "", 2) == 0, 460 "psMetadataItemSupplement: return true for valid inputs."); 461 } 462 /* Attempt here was to return false inside of ItemTransfer at psMetadataAddItem. 463 //Return false for duplicate entry with PS_META_DEFAULT (no duplicates) 464 { 465 psMetadataRemoveKey(out, key); 466 psMetadataItem *item = psMetadataGet(in, PS_LIST_HEAD); 467 psMetadataAddItem(out, item, PS_LIST_TAIL, PS_META_NO_REPLACE); 468 ok( !psMetadataItemSupplement(out, in, key), 469 "psMetadataItemSupplement: return false for duplicate metadataItem."); 470 } 471 */ 472 //Return false for invalid key 473 { 474 strncpy(key, "not MY key", 15); 475 ok( !psMetadataItemSupplement(out, in, key), 476 "psMetadataItemSupplement: return false for invalid key."); 477 } 478 //Return false for invalid metadata 479 psMetadata *invalid = psMetadataAlloc(); 480 psFree(invalid->hash); 481 invalid->hash = NULL; 482 { 483 ok( !psMetadataItemSupplement(invalid, in, "key"), 484 "psMetadataItemSupplement: return false for invalid metadata."); 485 } 486 psFree(invalid); 487 488 //Check for Memory Leaks 489 { 415 psMemId id = psMemGetId(); 416 psMetadata *out = psMetadataAlloc(); 417 psMetadata *in = psMetadataAlloc(); 418 psString key = psStringAlloc(30); 419 strncpy(key, "key", 4); 420 421 //Return false for NULL in input 422 { 423 ok( !psMetadataItemSupplement(out, NULL, key), 424 "psMetadataItemSupplement: return false for NULL in metadata."); 425 } 426 //Return false for NULL out input 427 { 428 ok( !psMetadataItemSupplement(NULL, in, key), 429 "psMetadataItemSupplement: return false for NULL out metadata."); 430 } 431 //Return false for NULL key input 432 { 433 ok( !psMetadataItemSupplement(out, in, NULL), 434 "psMetadataItemSupplement: return false for NULL key string."); 435 } 436 psMetadataAddS32(in, PS_LIST_HEAD, "key", PS_META_NO_REPLACE, "", 666); 437 psMetadataAddF32(out, PS_LIST_HEAD, "out", 0, "", 6.66); 438 439 //Return true for valid inputs 440 { 441 bool transfered = psMetadataItemSupplement(out, in, key); 442 psMetadataItem *item = NULL; 443 if (transfered) 444 item = psMetadataGet(out, PS_LIST_TAIL); 445 ok(transfered && item->type == PS_DATA_S32 && strncmp(item->name, "key", 4) == 0 446 && item->data.S32 == 666 && strncmp(item->comment, "", 2) == 0, 447 "psMetadataItemSupplement: return true for valid inputs."); 448 } 449 /* Attempt here was to return false inside of ItemTransfer at psMetadataAddItem. 450 //Return false for duplicate entry with PS_META_DEFAULT (no duplicates) 451 { 452 psMetadataRemoveKey(out, key); 453 psMetadataItem *item = psMetadataGet(in, PS_LIST_HEAD); 454 psMetadataAddItem(out, item, PS_LIST_TAIL, PS_META_NO_REPLACE); 455 ok( !psMetadataItemSupplement(out, in, key), 456 "psMetadataItemSupplement: return false for duplicate metadataItem."); 457 } 458 */ 459 //Return false for invalid key 460 { 461 strncpy(key, "not MY key", 15); 462 ok( !psMetadataItemSupplement(out, in, key), 463 "psMetadataItemSupplement: return false for invalid key."); 464 } 465 //Return false for invalid metadata 466 psMetadata *invalid = psMetadataAlloc(); 467 psFree(invalid->hash); 468 invalid->hash = NULL; 469 { 470 ok( !psMetadataItemSupplement(invalid, in, "key"), 471 "psMetadataItemSupplement: return false for invalid metadata."); 472 } 473 psFree(invalid); 474 490 475 psFree(out); 491 476 psFree(in); 492 477 psFree(key); 493 checkMem();478 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 494 479 } 495 496 480 } -
trunk/psLib/test/types/tap_psMetadata_creating.c
r10822 r12781 12 12 * 13 13 */ 14 15 14 #include <pslib.h> 16 15 #include <string.h> 17 18 16 #include "tap.h" 19 17 #include "pstap.h" 20 18 21 void testItemAllocs(void);22 void testMDAlloc_AddItem(void);23 void testIterAlloc(void);24 19 25 20 int main(void) 26 21 { 27 plan_tests(42); 28 29 note("psMetadata & psMetadataItem Creation Functions"); 30 31 testItemAllocs(); 32 testMDAlloc_AddItem(); 33 testIterAlloc(); 34 35 done(); 36 } 37 38 void testItemAllocs(void) 39 { 40 note(" >>>Test 1: psMetadataItemAlloc Fxns"); 41 psMetadataItem *itemStr = psMetadataItemAllocStr("itemStr", "", "itemStr"); 42 psMetadataItem *itemF32 = psMetadataItemAllocF32("itemF32", "", 6.66); 43 psMetadataItem *itemF64 = psMetadataItemAllocF64("itemF64", "", 0.666); 44 psMetadataItem *itemS8 = psMetadataItemAllocS8("itemS8", "", 0); 45 psMetadataItem *itemS16 = psMetadataItemAllocS16("itemS16", "", 1); 46 psMetadataItem *itemS32 = psMetadataItemAllocS32("itemS32", "", 2); 47 psMetadataItem *itemS64 = psMetadataItemAllocS64("itemS64", "", 3); 48 psMetadataItem *itemU8 = psMetadataItemAllocU8("itemU8", "", 0); 49 psMetadataItem *itemU16 = psMetadataItemAllocU16("itemU16", "", 1); 50 psMetadataItem *itemU32 = psMetadataItemAllocU32("itemU32", "", 2); 51 psMetadataItem *itemU64 = psMetadataItemAllocU64("itemU64", "", 3); 52 psMetadataItem *itemBool = psMetadataItemAllocBool("itemBool", "", true); 53 54 //First try to free a NULL item 55 psMetadataItem *nullItem = NULL; 56 psFree(nullItem); 57 //Verify correct allocation 58 //String 22 psLogSetFormat("HLNM"); 23 psLogSetLevel(PS_LOG_INFO); 24 plan_tests(44); 25 // psMetadata & psMetadataItem Creation Functions 26 27 28 // testItemAllocs(void) 29 // psMetadataItemAlloc Fxns 59 30 { 60 skip_start(itemStr == NULL, 1, 61 "Skipping 1 tests because psMetadataItemAllocStr() failed"); 62 ok(itemStr->type == PS_DATA_STRING 63 && !strncmp(itemStr->name, "itemStr", 10) 64 && !strncmp(itemStr->data.V, "itemStr", 10) 65 && !strncmp(itemStr->comment, "", 2), 66 "psMetadataItemAllocStr: create valid string item."); 67 skip_end(); 68 } 69 //F32 70 { 71 skip_start(itemF32 == NULL, 1, 72 "Skipping 1 tests because psMetadataItemAllocF32() failed"); 73 ok(itemF32->type == PS_DATA_F32 74 && !strncmp(itemF32->name, "itemF32", 10) 75 && abs(itemF32->data.F32 - 6.66) < FLT_EPSILON 76 && !strncmp(itemF32->comment, "", 2), 77 "psMetadataItemAllocF32: create valid F32 item."); 78 skip_end(); 79 } 80 //F64 81 { 82 skip_start(itemF64 == NULL, 1, 83 "Skipping 1 tests because psMetadataItemAllocF64() failed"); 84 ok(itemF64->type == PS_DATA_F64 85 && !strncmp(itemF64->name, "itemF64", 10) 86 && abs(itemF64->data.F64 - 0.666) < DBL_EPSILON 87 && !strncmp(itemF64->comment, "", 2), 88 "psMetadataItemAllocF64: create valid F64 item."); 89 skip_end(); 90 } 91 //S8 92 { 93 skip_start(itemS8 == NULL, 1, 94 "Skipping 1 tests because psMetadataItemAllocS8() failed"); 95 ok(itemS8->type == PS_DATA_S8 96 && !strncmp(itemS8->name, "itemS8", 10) 97 && itemS8->data.S8 == 0 98 && !strncmp(itemS8->comment, "", 2), 99 "psMetadataItemAllocS8: create valid S8 item."); 100 skip_end(); 101 } 102 //S16 103 { 104 skip_start(itemS16 == NULL, 1, 105 "Skipping 1 tests because psMetadataItemAllocS16() failed"); 106 ok(itemS16->type == PS_DATA_S16 107 && !strncmp(itemS16->name, "itemS16", 10) 108 && itemS16->data.S16 == 1 109 && !strncmp(itemS16->comment, "", 2), 110 "psMetadataItemAllocS16: create valid S16 item."); 111 skip_end(); 112 } 113 //S32 114 { 115 skip_start(itemS32 == NULL, 1, 116 "Skipping 1 tests because psMetadataItemAllocS32() failed"); 117 ok(itemS32->type == PS_DATA_S32 118 && !strncmp(itemS32->name, "itemS32", 10) 119 && itemS32->data.S32 == 2 120 && !strncmp(itemS32->comment, "", 2), 121 "psMetadataItemAllocS32: create valid S32 item."); 122 skip_end(); 123 } 124 //S64 125 { 126 skip_start(itemS64 == NULL, 1, 127 "Skipping 1 tests because psMetadataItemAllocS64() failed"); 128 ok(itemS64->type == PS_DATA_S64 129 && !strncmp(itemS64->name, "itemS64", 10) 130 && itemS64->data.S64 == 3 131 && !strncmp(itemS64->comment, "", 2), 132 "psMetadataItemAllocS64: create valid S64 item."); 133 skip_end(); 134 } 135 //U8 136 { 137 skip_start(itemU8 == NULL, 1, 138 "Skipping 1 tests because psMetadataItemAllocU8() failed"); 139 ok(itemU8->type == PS_DATA_U8 140 && !strncmp(itemU8->name, "itemU8", 10) 141 && itemU8->data.U8 == 0 142 && !strncmp(itemU8->comment, "", 2), 143 "psMetadataItemAllocU8: create valid U8 item."); 144 skip_end(); 145 } 146 //U16 147 { 148 skip_start(itemU16 == NULL, 1, 149 "Skipping 1 tests because psMetadataItemAllocU16() failed"); 150 ok(itemU16->type == PS_DATA_U16 151 && !strncmp(itemU16->name, "itemU16", 10) 152 && itemU16->data.U16 == 1 153 && !strncmp(itemU16->comment, "", 2), 154 "psMetadataItemAllocU16: create valid U16 item."); 155 skip_end(); 156 } 157 //U32 158 { 159 skip_start(itemU32 == NULL, 1, 160 "Skipping 1 tests because psMetadataItemAllocU32() failed"); 161 ok(itemU32->type == PS_DATA_U32 162 && !strncmp(itemU32->name, "itemU32", 10) 163 && itemU32->data.U32 == 2 164 && !strncmp(itemU32->comment, "", 2), 165 "psMetadataItemAllocU32: create valid U32 item."); 166 skip_end(); 167 } 168 //U64 169 { 170 skip_start(itemU64 == NULL, 1, 171 "Skipping 1 tests because psMetadataItemAllocU64() failed"); 172 ok(itemU64->type == PS_DATA_U64 173 && !strncmp(itemU64->name, "itemU64", 10) 174 && itemU64->data.U64 == 3 175 && !strncmp(itemU64->comment, "", 2), 176 "psMetadataItemAllocU64: create valid U64 item."); 177 skip_end(); 178 } 179 //Bool 180 { 181 skip_start(itemBool == NULL, 1, 182 "Skipping 1 tests because psMetadataItemAllocBool() failed"); 183 ok(itemBool->type == PS_DATA_BOOL 184 && !strncmp(itemBool->name, "itemBool", 10) 185 && itemBool->data.B 186 && !strncmp(itemBool->comment, "", 2), 187 "psMetadataItemAllocBool: create valid Bool item."); 188 skip_end(); 189 } 190 191 //Allocate a pointer. Example= psSphere 192 { 193 psSphere *s = psSphereAlloc(); 194 s->r = 1.1; 195 s->d = 2.1; 196 psMetadataItem *itemPtr = psMetadataItemAllocPtr("itemPtr", PS_DATA_SPHERE, "", s); 197 skip_start(itemPtr == NULL, 1, 198 "Skipping 1 tests because psMetadataItemAllocPtr() failed"); 199 float r = ((psSphere*)(itemPtr->data.V))->r; 200 float d = ((psSphere*)(itemPtr->data.V))->d; 201 ok( itemPtr->type == PS_DATA_SPHERE 202 && !strncmp(itemPtr->name, "itemPtr", 10) 203 && abs(r-1.1) < FLT_EPSILON && abs(d-2.1) < FLT_EPSILON 204 && !strncmp(itemPtr->comment, "", 2), 205 "psMetadataItemAllocPtr: create valid ptr (psSphere) item."); 206 skip_end(); 207 psFree(s); 208 psFree(itemPtr); 209 } 210 211 //Try to Allocate an unsupported type with AllocV 212 { 213 psMetadataItem *itemNULL = NULL; 214 psLine *line = psLineAlloc(2); 215 itemNULL = psMetadataItemAlloc("itemNULL", PS_DATA_LINE, NULL, line); 216 ok( itemNULL == NULL, 217 "psMetadataItemAlloc: return NULL for unsupported type."); 218 psFree(line); 219 } 220 221 //Now Allocate the item with Alloc and test MemCheck for it's type. 222 { 223 psMetadataItem *itemAllocV = psMetadataItemAlloc("itemAllocV", PS_DATA_S32, NULL, 4); 224 skip_start(itemAllocV == NULL, 2, 225 "Skipping 2 tests because psMetadataItemAllocV() failed"); 226 ok (itemAllocV->type == PS_DATA_S32 227 && !strncmp(itemAllocV->name, "itemAllocV", 10) 228 && itemAllocV->data.S32 == 4 229 && !strncmp(itemAllocV->comment, "", 2), 230 "psMetadataItemAlloc: create valid S32 item."); 231 ok ( psMemCheckMetadataItem(itemAllocV), 232 "psMemCheckMetadataItem: return true for valid MetadataItem."); 233 skip_end(); 234 psFree(itemAllocV); 235 } 236 237 //Make sure MemCheckItem worked. Try primitive type. Expect false. 238 { 239 int j = 2; 240 ok( !psMemCheckMetadataItem(&j), 241 "psMemCheckMetadataItem: return false for non-MetadataItem input."); 242 } 243 244 //Check for Memory Leaks 245 { 31 psMemId id = psMemGetId(); 32 psMetadataItem *itemStr = psMetadataItemAllocStr("itemStr", "", "itemStr"); 33 psMetadataItem *itemF32 = psMetadataItemAllocF32("itemF32", "", 6.66); 34 psMetadataItem *itemF64 = psMetadataItemAllocF64("itemF64", "", 0.666); 35 psMetadataItem *itemS8 = psMetadataItemAllocS8("itemS8", "", 0); 36 psMetadataItem *itemS16 = psMetadataItemAllocS16("itemS16", "", 1); 37 psMetadataItem *itemS32 = psMetadataItemAllocS32("itemS32", "", 2); 38 psMetadataItem *itemS64 = psMetadataItemAllocS64("itemS64", "", 3); 39 psMetadataItem *itemU8 = psMetadataItemAllocU8("itemU8", "", 0); 40 psMetadataItem *itemU16 = psMetadataItemAllocU16("itemU16", "", 1); 41 psMetadataItem *itemU32 = psMetadataItemAllocU32("itemU32", "", 2); 42 psMetadataItem *itemU64 = psMetadataItemAllocU64("itemU64", "", 3); 43 psMetadataItem *itemBool = psMetadataItemAllocBool("itemBool", "", true); 44 45 //First try to free a NULL item 46 psMetadataItem *nullItem = NULL; 47 psFree(nullItem); 48 //Verify correct allocation 49 //String 50 { 51 skip_start(itemStr == NULL, 1, 52 "Skipping 1 tests because psMetadataItemAllocStr() failed"); 53 ok(itemStr->type == PS_DATA_STRING 54 && !strncmp(itemStr->name, "itemStr", 10) 55 && !strncmp(itemStr->data.V, "itemStr", 10) 56 && !strncmp(itemStr->comment, "", 2), 57 "psMetadataItemAllocStr: create valid string item."); 58 skip_end(); 59 } 60 //F32 61 { 62 skip_start(itemF32 == NULL, 1, 63 "Skipping 1 tests because psMetadataItemAllocF32() failed"); 64 ok(itemF32->type == PS_DATA_F32 65 && !strncmp(itemF32->name, "itemF32", 10) 66 && abs(itemF32->data.F32 - 6.66) < FLT_EPSILON 67 && !strncmp(itemF32->comment, "", 2), 68 "psMetadataItemAllocF32: create valid F32 item."); 69 skip_end(); 70 } 71 //F64 72 { 73 skip_start(itemF64 == NULL, 1, 74 "Skipping 1 tests because psMetadataItemAllocF64() failed"); 75 ok(itemF64->type == PS_DATA_F64 76 && !strncmp(itemF64->name, "itemF64", 10) 77 && abs(itemF64->data.F64 - 0.666) < DBL_EPSILON 78 && !strncmp(itemF64->comment, "", 2), 79 "psMetadataItemAllocF64: create valid F64 item."); 80 skip_end(); 81 } 82 //S8 83 { 84 skip_start(itemS8 == NULL, 1, 85 "Skipping 1 tests because psMetadataItemAllocS8() failed"); 86 ok(itemS8->type == PS_DATA_S8 87 && !strncmp(itemS8->name, "itemS8", 10) 88 && itemS8->data.S8 == 0 89 && !strncmp(itemS8->comment, "", 2), 90 "psMetadataItemAllocS8: create valid S8 item."); 91 skip_end(); 92 } 93 //S16 94 { 95 skip_start(itemS16 == NULL, 1, 96 "Skipping 1 tests because psMetadataItemAllocS16() failed"); 97 ok(itemS16->type == PS_DATA_S16 98 && !strncmp(itemS16->name, "itemS16", 10) 99 && itemS16->data.S16 == 1 100 && !strncmp(itemS16->comment, "", 2), 101 "psMetadataItemAllocS16: create valid S16 item."); 102 skip_end(); 103 } 104 //S32 105 { 106 skip_start(itemS32 == NULL, 1, 107 "Skipping 1 tests because psMetadataItemAllocS32() failed"); 108 ok(itemS32->type == PS_DATA_S32 109 && !strncmp(itemS32->name, "itemS32", 10) 110 && itemS32->data.S32 == 2 111 && !strncmp(itemS32->comment, "", 2), 112 "psMetadataItemAllocS32: create valid S32 item."); 113 skip_end(); 114 } 115 //S64 116 { 117 skip_start(itemS64 == NULL, 1, 118 "Skipping 1 tests because psMetadataItemAllocS64() failed"); 119 ok(itemS64->type == PS_DATA_S64 120 && !strncmp(itemS64->name, "itemS64", 10) 121 && itemS64->data.S64 == 3 122 && !strncmp(itemS64->comment, "", 2), 123 "psMetadataItemAllocS64: create valid S64 item."); 124 skip_end(); 125 } 126 //U8 127 { 128 skip_start(itemU8 == NULL, 1, 129 "Skipping 1 tests because psMetadataItemAllocU8() failed"); 130 ok(itemU8->type == PS_DATA_U8 131 && !strncmp(itemU8->name, "itemU8", 10) 132 && itemU8->data.U8 == 0 133 && !strncmp(itemU8->comment, "", 2), 134 "psMetadataItemAllocU8: create valid U8 item."); 135 skip_end(); 136 } 137 //U16 138 { 139 skip_start(itemU16 == NULL, 1, 140 "Skipping 1 tests because psMetadataItemAllocU16() failed"); 141 ok(itemU16->type == PS_DATA_U16 142 && !strncmp(itemU16->name, "itemU16", 10) 143 && itemU16->data.U16 == 1 144 && !strncmp(itemU16->comment, "", 2), 145 "psMetadataItemAllocU16: create valid U16 item."); 146 skip_end(); 147 } 148 //U32 149 { 150 skip_start(itemU32 == NULL, 1, 151 "Skipping 1 tests because psMetadataItemAllocU32() failed"); 152 ok(itemU32->type == PS_DATA_U32 153 && !strncmp(itemU32->name, "itemU32", 10) 154 && itemU32->data.U32 == 2 155 && !strncmp(itemU32->comment, "", 2), 156 "psMetadataItemAllocU32: create valid U32 item."); 157 skip_end(); 158 } 159 //U64 160 { 161 skip_start(itemU64 == NULL, 1, 162 "Skipping 1 tests because psMetadataItemAllocU64() failed"); 163 ok(itemU64->type == PS_DATA_U64 164 && !strncmp(itemU64->name, "itemU64", 10) 165 && itemU64->data.U64 == 3 166 && !strncmp(itemU64->comment, "", 2), 167 "psMetadataItemAllocU64: create valid U64 item."); 168 skip_end(); 169 } 170 //Bool 171 { 172 skip_start(itemBool == NULL, 1, 173 "Skipping 1 tests because psMetadataItemAllocBool() failed"); 174 ok(itemBool->type == PS_DATA_BOOL 175 && !strncmp(itemBool->name, "itemBool", 10) 176 && itemBool->data.B 177 && !strncmp(itemBool->comment, "", 2), 178 "psMetadataItemAllocBool: create valid Bool item."); 179 skip_end(); 180 } 181 182 //Allocate a pointer. Example= psSphere 183 { 184 psSphere *s = psSphereAlloc(); 185 s->r = 1.1; 186 s->d = 2.1; 187 psMetadataItem *itemPtr = psMetadataItemAllocPtr("itemPtr", PS_DATA_SPHERE, "", s); 188 skip_start(itemPtr == NULL, 1, 189 "Skipping 1 tests because psMetadataItemAllocPtr() failed"); 190 float r = ((psSphere*)(itemPtr->data.V))->r; 191 float d = ((psSphere*)(itemPtr->data.V))->d; 192 ok( itemPtr->type == PS_DATA_SPHERE 193 && !strncmp(itemPtr->name, "itemPtr", 10) 194 && abs(r-1.1) < FLT_EPSILON && abs(d-2.1) < FLT_EPSILON 195 && !strncmp(itemPtr->comment, "", 2), 196 "psMetadataItemAllocPtr: create valid ptr (psSphere) item."); 197 skip_end(); 198 psFree(s); 199 psFree(itemPtr); 200 } 201 202 //Try to Allocate an unsupported type with AllocV 203 { 204 psMetadataItem *itemNULL = NULL; 205 psLine *line = psLineAlloc(2); 206 itemNULL = psMetadataItemAlloc("itemNULL", PS_DATA_LINE, NULL, line); 207 ok( itemNULL == NULL, 208 "psMetadataItemAlloc: return NULL for unsupported type."); 209 psFree(line); 210 } 211 212 //Now Allocate the item with Alloc and test MemCheck for it's type. 213 { 214 psMetadataItem *itemAllocV = psMetadataItemAlloc("itemAllocV", PS_DATA_S32, NULL, 4); 215 skip_start(itemAllocV == NULL, 2, 216 "Skipping 2 tests because psMetadataItemAllocV() failed"); 217 ok (itemAllocV->type == PS_DATA_S32 218 && !strncmp(itemAllocV->name, "itemAllocV", 10) 219 && itemAllocV->data.S32 == 4 220 && !strncmp(itemAllocV->comment, "", 2), 221 "psMetadataItemAlloc: create valid S32 item."); 222 ok ( psMemCheckMetadataItem(itemAllocV), 223 "psMemCheckMetadataItem: return true for valid MetadataItem."); 224 skip_end(); 225 psFree(itemAllocV); 226 } 227 228 //Make sure MemCheckItem worked. Try primitive type. Expect false. 229 { 230 int j = 2; 231 ok( !psMemCheckMetadataItem(&j), 232 "psMemCheckMetadataItem: return false for non-MetadataItem input."); 233 } 234 246 235 psFree(itemStr); 247 236 psFree(itemF32); … … 256 245 psFree(itemU64); 257 246 psFree(itemBool); 258 checkMem();247 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 259 248 } 260 249 261 } 262 263 void testMDAlloc_AddItem(void) 264 { 265 note(" >>>Test 2: psMetadataAlloc & psMetadataAdd Fxns"); 266 psMetadata *md = NULL; 267 md = psMetadataAlloc(); 268 psMetadata *md1 = psMetadataAlloc(); 269 psMetadata *md2 = psMetadataAlloc(); 270 //test MemCheck for a valid psMetadata 250 251 // psMetadataAlloc & psMetadataAdd Fxns"); 271 252 { 272 ok( psMemCheckMetadata(md), 273 "psMemCheckMetadata: return true for valid Metadata."); 274 } 275 //Make sure MemCheck worked. Try primitive type. Expect false. 276 { 277 int j = 2; 278 ok( !psMemCheckMetadata(&j), 279 "psMemCheckMetadata: return false for non-Metadata input."); 280 } 281 //Return false for attempt to add a psMetadataItem with no name. 282 { 283 ok( !psMetadataAdd(md1, PS_LIST_HEAD, NULL, PS_DATA_S32, "", 1), 284 "psMetadataAdd: return false for adding item with no name."); 285 } 286 psFree(md1); 287 md1 = psMetadataAlloc(); 288 289 //Return false for NULL metadata input 290 psMetadataItem *item = psMetadataItemAllocBool("item", "", true); 291 { 292 ok( !psMetadataAddItem(NULL, item, PS_LIST_HEAD, PS_META_DEFAULT), 293 "psMetadataAddItem: return false for NULL metadata input."); 294 } 295 //Return false for metadata with NULL hash 296 psFree(md1->hash); 297 md1->hash = NULL; 298 { 299 ok( !psMetadataAddItem(md1, item, PS_LIST_HEAD, PS_META_DEFAULT), 300 "psMetadataAddItem: return false for metadata with no hash."); 301 } 302 psFree(md1); 303 //Return false for metadata with NULL list 304 psFree(md2->list); 305 md2->list = NULL; 306 { 307 ok( !psMetadataAddItem(md2, item, PS_LIST_HEAD, PS_META_DEFAULT), 308 "psMetadataAddItem: return false for metadata with no list."); 309 } 310 psFree(md2); 311 //Return false for NULL psMetadataItem input 312 { 313 ok( !psMetadataAddItem(md, NULL, PS_LIST_HEAD, PS_META_DEFAULT), 314 "psMetadataAddItem: return false for NULL item input."); 315 } 316 //Return false for psMetadataItem with NULL name 317 psFree(item->name); 318 item->name = NULL; 319 { 320 ok( !psMetadataAddItem(md, item, PS_LIST_HEAD, PS_META_DEFAULT), 321 "psMetadataAddItem: return false for item with no name."); 322 } 323 psFree(item); 324 325 psMetadata *itemMD = psMetadataAlloc(); 326 psMetadataAddS32(itemMD, PS_LIST_HEAD, "s", PS_META_DUPLICATE_OK, "", 2); 327 psMetadataItem *item2 = psMetadataItemAllocS32("s", "", 2); 328 329 //Return true for addition of multi 330 { 331 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 332 "psMetadataAddItem: return true for addition of PS_DATA_METADATA_MULTI."); 333 } 334 psFree(item2); 335 psFree(itemMD); 336 337 //Existing entry with duplicate key found. 338 psMetadataAddS32(md, PS_LIST_HEAD, "S32", 0, "", 1); 339 item2 = psMetadataItemAllocS32("S32", "", 1); 340 //FLAG = PS_META_REPLACE 341 { 342 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_REPLACE), 343 "psMetadataAddItem: return true for PS_META_REPLACE flag."); 344 } 345 //FLAG = PS_META_DUPLICATE_OK 346 { 347 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 348 "psMetadataAddItem: return true for PS_META_DUPLICATE_OK flag."); 349 } 350 /* SEE BELOW. TEST CASE REDONE b/c item2 in md was already a MULTI 351 //FLAG = PS_META_NO_REPLACE 352 { 353 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_NO_REPLACE), 354 "psMetadataAddItem: return true for PS_META_NO_REPLACE flag."); 355 } 356 */ 357 //FLAG = PS_META_DEFAULT 358 { 359 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DEFAULT), 360 "psMetadataAddItem: return false for PS_META_DEFAULT flag."); 361 } 362 363 //Return false for attempting to add an element twice with flag NO_REPLACE 364 { 365 psMetadata *norep = psMetadataAlloc(); 366 psMetadataAddS32(norep, PS_LIST_HEAD, "S32", 0, "", 1); 367 psMetadataItem *item666 = psMetadataItemAllocS32("S32", "", 1); 368 ok( psMetadataAddItem(norep, item666, PS_LIST_TAIL, PS_META_NO_REPLACE), 369 "psMetadataAddItem: return true for PS_META_NO_REPLACE flag."); 370 psFree(item666); 371 psFree(norep); 372 } 373 //Return false for bad list location 374 { 375 psMetadata *emptymeta = psMetadataAlloc(); 376 psMetadataItem *item666 = psMetadataItemAllocS32("S32", "", 1); 377 ok( !psMetadataAddItem(emptymeta, item666, -100, PS_META_NO_REPLACE), 378 "psMetadataAddItem: return false for invalid list location."); 379 psFree(item666); 380 psFree(emptymeta); 381 } 382 //Return false for trying to add to MULTI with broken list element. 383 { 384 psMetadata *broken_list = psMetadataAlloc(); 385 psMetadataAddS32(broken_list, PS_LIST_HEAD, "S32", 0, "", 1); 386 psMetadataAddS32(broken_list, PS_LIST_TAIL, "S32", PS_META_DUPLICATE_OK, "", 1); 387 psMetadataItem *brokenptr = psMetadataLookup(broken_list, "S32"); 388 if (brokenptr->type != PS_DATA_METADATA_MULTI) 389 printf("\nError, Error\n"); 390 else 391 { 392 psFree(brokenptr->data.list); 393 brokenptr->data.list = NULL; 394 } 395 psMetadataItem *item666 = psMetadataItemAllocS32("S32", "", 1); 396 ok( !psMetadataAddItem(broken_list, item666, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 397 "psMetadataAddItem: return false for MULTI with NULL list."); 398 psFree(item666); 399 psFree(broken_list); 400 } 401 402 //Attempt to add a MULTI 403 psFree(item2); 404 item2 = NULL; 405 psMetadata *xxx = psMetadataAlloc(); 406 psMetadataAddS32(xxx, PS_LIST_TAIL, "new S32", 0, "", 1); 407 item2 = psMetadataItemAllocS32("new S32", "", 1); 408 psMetadataAddItem(xxx, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK); 409 psFree(item2); 410 item2 = psMetadataLookup(xxx, "new S32"); 411 { 412 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 413 "psMetadataAddItem: return true for new MULTI item"); 414 } 415 //Attempt to add a 2nd reference of a MULTI to the originating metadata container 416 { 417 ok( !psMetadataAddItem(xxx, item2, PS_LIST_TAIL, PS_META_NO_REPLACE), 418 "psMetadataAddItem: return false for attempt to add 2nd reference" 419 " of a MULTI"); 420 } 421 psFree(xxx); 422 423 //No existing entries or duplicates found 424 item2 = psMetadataItemAllocS32("new", "", 2); 425 { 426 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 427 "psMetadataAddItem: return true for new item."); 428 } 429 430 //Check for Memory leaks 431 { 253 psMemId id = psMemGetId(); 254 psMetadata *md = NULL; 255 md = psMetadataAlloc(); 256 psMetadata *md1 = psMetadataAlloc(); 257 psMetadata *md2 = psMetadataAlloc(); 258 //test MemCheck for a valid psMetadata 259 { 260 ok( psMemCheckMetadata(md), 261 "psMemCheckMetadata: return true for valid Metadata."); 262 } 263 //Make sure MemCheck worked. Try primitive type. Expect false. 264 { 265 int j = 2; 266 ok( !psMemCheckMetadata(&j), 267 "psMemCheckMetadata: return false for non-Metadata input."); 268 } 269 //Return false for attempt to add a psMetadataItem with no name. 270 { 271 ok( !psMetadataAdd(md1, PS_LIST_HEAD, NULL, PS_DATA_S32, "", 1), 272 "psMetadataAdd: return false for adding item with no name."); 273 } 274 psFree(md1); 275 md1 = psMetadataAlloc(); 276 277 //Return false for NULL metadata input 278 psMetadataItem *item = psMetadataItemAllocBool("item", "", true); 279 { 280 ok( !psMetadataAddItem(NULL, item, PS_LIST_HEAD, PS_META_DEFAULT), 281 "psMetadataAddItem: return false for NULL metadata input."); 282 } 283 //Return false for metadata with NULL hash 284 psFree(md1->hash); 285 md1->hash = NULL; 286 { 287 ok( !psMetadataAddItem(md1, item, PS_LIST_HEAD, PS_META_DEFAULT), 288 "psMetadataAddItem: return false for metadata with no hash."); 289 } 290 psFree(md1); 291 //Return false for metadata with NULL list 292 psFree(md2->list); 293 md2->list = NULL; 294 { 295 ok( !psMetadataAddItem(md2, item, PS_LIST_HEAD, PS_META_DEFAULT), 296 "psMetadataAddItem: return false for metadata with no list."); 297 } 298 psFree(md2); 299 //Return false for NULL psMetadataItem input 300 { 301 ok( !psMetadataAddItem(md, NULL, PS_LIST_HEAD, PS_META_DEFAULT), 302 "psMetadataAddItem: return false for NULL item input."); 303 } 304 //Return false for psMetadataItem with NULL name 305 psFree(item->name); 306 item->name = NULL; 307 { 308 ok( !psMetadataAddItem(md, item, PS_LIST_HEAD, PS_META_DEFAULT), 309 "psMetadataAddItem: return false for item with no name."); 310 } 311 psFree(item); 312 313 psMetadata *itemMD = psMetadataAlloc(); 314 psMetadataAddS32(itemMD, PS_LIST_HEAD, "s", PS_META_DUPLICATE_OK, "", 2); 315 psMetadataItem *item2 = psMetadataItemAllocS32("s", "", 2); 316 317 //Return true for addition of multi 318 { 319 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 320 "psMetadataAddItem: return true for addition of PS_DATA_METADATA_MULTI."); 321 } 322 psFree(item2); 323 psFree(itemMD); 324 325 //Existing entry with duplicate key found. 326 psMetadataAddS32(md, PS_LIST_HEAD, "S32", 0, "", 1); 327 item2 = psMetadataItemAllocS32("S32", "", 1); 328 //FLAG = PS_META_REPLACE 329 { 330 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_REPLACE), 331 "psMetadataAddItem: return true for PS_META_REPLACE flag."); 332 } 333 //FLAG = PS_META_DUPLICATE_OK 334 { 335 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 336 "psMetadataAddItem: return true for PS_META_DUPLICATE_OK flag."); 337 } 338 /* SEE BELOW. TEST CASE REDONE b/c item2 in md was already a MULTI 339 //FLAG = PS_META_NO_REPLACE 340 { 341 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_NO_REPLACE), 342 "psMetadataAddItem: return true for PS_META_NO_REPLACE flag."); 343 } 344 */ 345 //FLAG = PS_META_DEFAULT 346 { 347 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DEFAULT), 348 "psMetadataAddItem: return false for PS_META_DEFAULT flag."); 349 } 350 351 //Return false for attempting to add an element twice with flag NO_REPLACE 352 { 353 psMetadata *norep = psMetadataAlloc(); 354 psMetadataAddS32(norep, PS_LIST_HEAD, "S32", 0, "", 1); 355 psMetadataItem *item666 = psMetadataItemAllocS32("S32", "", 1); 356 ok( psMetadataAddItem(norep, item666, PS_LIST_TAIL, PS_META_NO_REPLACE), 357 "psMetadataAddItem: return true for PS_META_NO_REPLACE flag."); 358 psFree(item666); 359 psFree(norep); 360 } 361 //Return false for bad list location 362 { 363 psMetadata *emptymeta = psMetadataAlloc(); 364 psMetadataItem *item666 = psMetadataItemAllocS32("S32", "", 1); 365 ok( !psMetadataAddItem(emptymeta, item666, -100, PS_META_NO_REPLACE), 366 "psMetadataAddItem: return false for invalid list location."); 367 psFree(item666); 368 psFree(emptymeta); 369 } 370 //Return false for trying to add to MULTI with broken list element. 371 { 372 psMetadata *broken_list = psMetadataAlloc(); 373 psMetadataAddS32(broken_list, PS_LIST_HEAD, "S32", 0, "", 1); 374 psMetadataAddS32(broken_list, PS_LIST_TAIL, "S32", PS_META_DUPLICATE_OK, "", 1); 375 psMetadataItem *brokenptr = psMetadataLookup(broken_list, "S32"); 376 if (brokenptr->type != PS_DATA_METADATA_MULTI) 377 printf("\nError, Error\n"); 378 else 379 { 380 psFree(brokenptr->data.list); 381 brokenptr->data.list = NULL; 382 } 383 psMetadataItem *item666 = psMetadataItemAllocS32("S32", "", 1); 384 ok( !psMetadataAddItem(broken_list, item666, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 385 "psMetadataAddItem: return false for MULTI with NULL list."); 386 psFree(item666); 387 psFree(broken_list); 388 } 389 390 //Attempt to add a MULTI 391 psFree(item2); 392 item2 = NULL; 393 psMetadata *xxx = psMetadataAlloc(); 394 psMetadataAddS32(xxx, PS_LIST_TAIL, "new S32", 0, "", 1); 395 item2 = psMetadataItemAllocS32("new S32", "", 1); 396 psMetadataAddItem(xxx, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK); 397 psFree(item2); 398 item2 = psMetadataLookup(xxx, "new S32"); 399 { 400 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 401 "psMetadataAddItem: return true for new MULTI item"); 402 } 403 //Attempt to add a 2nd reference of a MULTI to the originating metadata container 404 { 405 ok( !psMetadataAddItem(xxx, item2, PS_LIST_TAIL, PS_META_NO_REPLACE), 406 "psMetadataAddItem: return false for attempt to add 2nd reference" 407 " of a MULTI"); 408 } 409 psFree(xxx); 410 411 //No existing entries or duplicates found 412 item2 = psMetadataItemAllocS32("new", "", 2); 413 { 414 ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK), 415 "psMetadataAddItem: return true for new item."); 416 } 417 432 418 psFree(item2); 433 419 psFree(md); 434 checkMem(); 420 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 421 } 422 423 424 // psMetadataIteratorAlloc 425 { 426 psMemId id = psMemGetId(); 427 psMetadata *md = psMetadataAlloc(); 428 psMetadata *md2 = NULL; 429 psMetadataAddS32(md, PS_LIST_HEAD, "S32_1", PS_META_NO_REPLACE, "", 1); 430 psMetadataAddS32(md, PS_LIST_TAIL, "S32_2", PS_META_DEFAULT, "", 2); 431 432 psMetadataIterator *iter = NULL; 433 //Return NULL for NULL metadata input 434 { 435 iter = psMetadataIteratorAlloc(md2, PS_LIST_HEAD, NULL); 436 ok( iter == NULL, 437 "psMetadataIteratorAlloc: return NULL for NULL metadata input."); 438 } 439 //Return NULL for metadata with no List 440 md2 = psMetadataAlloc(); 441 psFree(md2->list); 442 md2->list = NULL; 443 { 444 iter = psMetadataIteratorAlloc(md2, PS_LIST_HEAD, NULL); 445 ok( iter == NULL, 446 "psMetadataIteratorAlloc: return NULL for metadata with no list."); 447 } 448 psFree(md2); 449 450 //Return newly allocated MetadataIterator, regex=NULL 451 { 452 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); 453 ok( iter != NULL, 454 "psMetadataIteratorAlloc: return valid iterator for valid inputs, regex=NULL."); 455 } 456 //Return NULL for attempt to allocate an iterator with unfound regex. 457 psFree(iter); 458 iter = NULL; 459 { 460 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "IPP.machines.sky"); 461 ok( iter == NULL, 462 "psMetadataIteratorAlloc: return NULL for not-found regex input"); 463 } 464 //Return NULL for invalid regex input. 465 { 466 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "IPP.machines.sky\\"); 467 ok( iter == NULL, 468 "psMetadataIteratorAlloc: return NULL for invalid regex input"); 469 } 470 //Return properly allocated iterator for valid non-null regex input. 471 { 472 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "S32_"); 473 ok( iter != NULL, 474 "psMetadataIteratorAlloc: return valid iterator for valid regex input"); 475 } 476 477 //Check for Memory leaks 478 { 479 psFree(iter); 480 psFree(md); 481 checkMem(); 482 } 483 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 435 484 } 436 485 } 437 438 void testIterAlloc(void)439 {440 note(" >>>Test 3: psMetadataIteratorAlloc");441 psMetadata *md = psMetadataAlloc();442 psMetadata *md2 = NULL;443 psMetadataAddS32(md, PS_LIST_HEAD, "S32_1", PS_META_NO_REPLACE, "", 1);444 psMetadataAddS32(md, PS_LIST_TAIL, "S32_2", PS_META_DEFAULT, "", 2);445 446 psMetadataIterator *iter = NULL;447 //Return NULL for NULL metadata input448 {449 iter = psMetadataIteratorAlloc(md2, PS_LIST_HEAD, NULL);450 ok( iter == NULL,451 "psMetadataIteratorAlloc: return NULL for NULL metadata input.");452 }453 //Return NULL for metadata with no List454 md2 = psMetadataAlloc();455 psFree(md2->list);456 md2->list = NULL;457 {458 iter = psMetadataIteratorAlloc(md2, PS_LIST_HEAD, NULL);459 ok( iter == NULL,460 "psMetadataIteratorAlloc: return NULL for metadata with no list.");461 }462 psFree(md2);463 464 //Return newly allocated MetadataIterator, regex=NULL465 {466 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL);467 ok( iter != NULL,468 "psMetadataIteratorAlloc: return valid iterator for valid inputs, regex=NULL.");469 }470 //Return NULL for attempt to allocate an iterator with unfound regex.471 psFree(iter);472 iter = NULL;473 {474 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "IPP.machines.sky");475 ok( iter == NULL,476 "psMetadataIteratorAlloc: return NULL for not-found regex input");477 }478 //Return NULL for invalid regex input.479 {480 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "IPP.machines.sky\\");481 ok( iter == NULL,482 "psMetadataIteratorAlloc: return NULL for invalid regex input");483 }484 //Return properly allocated iterator for valid non-null regex input.485 {486 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, "S32_");487 ok( iter != NULL,488 "psMetadataIteratorAlloc: return valid iterator for valid regex input");489 }490 491 //Check for Memory leaks492 {493 psFree(iter);494 psFree(md);495 checkMem();496 }497 }498 -
trunk/psLib/test/types/tap_psMetadata_manip.c
r10822 r12781 10 10 * 11 11 */ 12 13 12 #include <pslib.h> 14 13 #include <string.h> 15 16 14 #include "tap.h" 17 15 #include "pstap.h" 18 16 19 void testIter(void);20 void testLookups(void);21 void testRemoves(void);22 17 23 18 int main(void) 24 19 { 25 plan_tests(48); 26 27 note("psMetadataLookup, Remove, and Iterator Fxns"); 28 29 testLookups(); 30 testRemoves(); 31 testIter(); 32 33 done(); 34 } 35 36 void testLookups(void) 37 { 38 note(" >>>Test 1: psMetadataLookup Functions"); 39 psMetadata *md = psMetadataAlloc(); 40 psMetadataAddStr(md, PS_LIST_TAIL, "itemStr", 0, "I am a string", "GNIRTS"); 41 psMetadataAddBool(md, PS_LIST_TAIL, "itemBool", 0, "I am a boolean", true); 42 psMetadataAddS8(md, PS_LIST_TAIL, "itemS8", 0, "I am S8", 6); 43 psMetadataAddS16(md, PS_LIST_TAIL, "itemS16", 0, "I am S16", -666); 44 psMetadataAddS32(md, PS_LIST_TAIL, "itemS32", 0, "I am a integer", 55); 45 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", 0, "I am S64", 666); 46 psMetadataAddU8(md, PS_LIST_TAIL, "itemU8", 0, "I am U8", 6); 47 psMetadataAddU16(md, PS_LIST_TAIL, "itemU16", 0, "I am U16", 666); 48 psMetadataAddU32(md, PS_LIST_TAIL, "itemU32", 0, "I am U32", 666); 49 psMetadataAddU64(md, PS_LIST_TAIL, "itemU64", 0, "I am U64", 666); 50 psMetadataAddF32(md, PS_LIST_TAIL, "itemF32", 0, NULL, 3.14); 51 psMetadataAddF64(md, PS_LIST_TAIL, "itemF64", 0, "", 6.28); 52 psSphere *sphere = psSphereAlloc(); 53 sphere->r = 6.66; 54 sphere->d = 666.666; 55 psMetadataAddPtr(md, PS_LIST_HEAD, "ptr", PS_DATA_SPHERE, "", sphere); 56 // psMetadataAddPtr(md, PS_LIST_TAIL, "ptr", PS_DATA_METADATA_MULTI, "", sphere); 57 psTime *time; 58 time = psTimeAlloc(PS_TIME_TAI); 59 time->sec = 1000; 60 time->nsec = 25; 61 time->leapsecond = true; 62 psMetadataAddTime(md, PS_LIST_TAIL, "time01", 0, "I am time", time); 63 psMetadata *newMD = psMetadataAlloc(); 64 psMetadataAddS32(newMD, PS_LIST_TAIL, "1", 0, "", 666); 65 psMetadataAddMetadata(md, PS_LIST_TAIL, "metadata7", 0, "I am a metadata", newMD); 66 67 //Lookup Standard number-types (valid cases) 68 //U8 20 psLogSetFormat("HLNM"); 21 psLogSetLevel(PS_LOG_INFO); 22 plan_tests(50); 23 // psMetadataLookup, Remove, and Iterator Fxns 24 25 26 // psMetadataLookup Functions 69 27 { 70 bool status = false; 71 psU8 u8 = 0; 72 u8 = psMetadataLookupU8(&status, md, "itemU8"); 73 ok( status && u8 == 6, 74 "psMetadataLookupU8: return correct U8 value on lookup."); 75 } 76 //U16 77 { 78 bool status = false; 79 psU16 u16 = 0; 80 u16 = psMetadataLookupU16(&status, md, "itemU16"); 81 ok( status && u16 == 666, 82 "psMetadataLookupU16: return correct U16 value on lookup."); 83 } 84 //U32 85 { 86 bool status = false; 87 psU32 u32 = 0; 88 u32 = psMetadataLookupU32(&status, md, "itemU32"); 89 ok( status && u32 == 666, 90 "psMetadataLookupU32: return correct U32 value on lookup."); 91 } 92 //U64 93 { 94 bool status = false; 95 psU64 u64 = 0; 96 u64 = psMetadataLookupU64(&status, md, "itemU64"); 97 ok( status && u64 == 666, 98 "psMetadataLookupU64: return correct U64 value on lookup."); 99 } 100 //S8 101 { 102 bool status = false; 103 psS8 s8 = 0; 104 s8 = psMetadataLookupS8(&status, md, "itemS8"); 105 ok( status && s8 == 6, 106 "psMetadataLookupS8: return correct S8 value on lookup."); 107 } 108 //S16 109 { 110 bool status = false; 111 psS16 s16 = 0; 112 s16 = psMetadataLookupS16(&status, md, "itemS16"); 113 ok( status && s16 == -666, 114 "psMetadataLookupS16: return correct S16 value on lookup."); 115 } 116 //S32 117 { 118 bool status = false; 119 psS32 s32 = 0; 120 s32 = psMetadataLookupS32(&status, md, "itemS32"); 121 ok( status && s32 == 55, 122 "psMetadataLookupS32: return correct S32 value on lookup."); 123 } 124 //S64 125 { 126 bool status = false; 127 psS64 s64 = 0; 128 s64 = psMetadataLookupS64(&status, md, "itemS64"); 129 ok( status && s64 == 666, 130 "psMetadataLookupS64: return correct S64 value on lookup."); 131 } 132 //F32 133 { 134 bool status = false; 135 psF32 f32 = 0; 136 f32 = psMetadataLookupF32(&status, md, "itemF32"); 137 ok( status && abs(f32 - 3.14) < FLT_EPSILON, 138 "psMetadataLookupF32: return correct F32 value on lookup."); 139 } 140 //F64 141 { 142 bool status = false; 143 psF64 f64 = 0; 144 f64 = psMetadataLookupF64(&status, md, "itemF64"); 145 ok( status && abs(f64 - 6.28) < DBL_EPSILON, 146 "psMetadataLookupF64: return correct F64 value on lookup."); 147 } 148 //Bool 149 { 150 bool status = false; 151 bool stat = false; 152 stat = psMetadataLookupBool(&status, md, "itemBool"); 153 ok( status && stat, 154 "psMetadataLookupBool: return correct Bool value on lookup."); 155 } 156 //String 157 { 158 bool status = false; 159 psString str = NULL; 160 str = psMetadataLookupStr(&status, md, "itemStr"); 161 ok( status && !strncmp(str, "GNIRTS", 8), 162 "psMetadataLookupStr: return correct String value on lookup."); 163 } 164 //Pointer 165 { 166 bool status = false; 167 psSphere *sph = NULL; 168 sph = (psSphere*)(psMetadataLookupPtr(&status, md, "ptr")); 169 ok( status && sph != NULL && abs(sph->r-6.66) < FLT_EPSILON, 170 "psMetadataLookupPtr: return correct pointer value on lookup."); 171 } 172 //Time 173 { 174 bool status = false; 175 psTime *t = NULL; 176 t = psMetadataLookupTime(&status, md, "time01"); 177 ok( status && t->sec == 1000, 178 "psMetadataLookupTime: return correct time value on lookup."); 179 } 180 //Metadata 181 { 182 bool status = false; 183 psMetadata *mdtemp = NULL; 184 mdtemp = psMetadataLookupMetadata(&status, md, "metadata7"); 185 psMetadataItem *itemtemp = psMetadataGet(mdtemp, PS_LIST_HEAD); 186 ok( status && itemtemp->type == PS_DATA_S32 && itemtemp->data.S32 == 666, 187 "psMetadataLookupMD: return correct metadata value on lookup."); 188 } 189 190 //Try Negatives and non-standard lookup cases 191 //String - invalid key name 192 { 193 bool status = false; 194 psString str = NULL; 195 str = psMetadataLookupStr(&status, md, "item"); 196 ok( !status && str == NULL, 197 "psMetadataLookupStr: return NULL for incorrect key."); 198 str = NULL; 199 str = psMetadataLookupStr(NULL, md, "item"); 200 ok( str == NULL, 201 "psMetadataLookupStr: return NULL for incorrect key (& NULL status)."); 202 } 203 //String - wrong key-> lookup s8 data 204 { 205 bool status = false; 206 psString str = NULL; 207 str = psMetadataLookupStr(&status, md, "itemS8"); 208 ok( !status && str == NULL, 209 "psMetadataLookupStr: return NULL for incorrect key ."); 210 str = NULL; 211 str = psMetadataLookupStr(NULL, md, "itemS8"); 212 ok( str == NULL, 213 "psMetadataLookupStr: return NULL for incorrect key (& NULL status)."); 214 } 215 //Pointer - invalid key name 216 { 217 bool status = false; 218 psSphere *sph = NULL; 219 sph = psMetadataLookupPtr(&status, md, "item"); 220 ok( !status && sph == NULL, 221 "psMetadataLookupPtr: return NULL for incorrect key."); 222 } 223 //Pointer - wrong key -> lookup s8 data 224 { 225 bool status = false; 226 psSphere *sph = NULL; 227 sph = psMetadataLookupPtr(&status, md, "itemS8"); 228 ok( !status && sph == NULL, 229 "psMetadataLookupPtr: return NULL for incorrect key."); 230 } 231 232 //Pointer** - lookup a PS_DATA_METADATA_MULTI 233 { 234 psMetadata *metadata = psMetadataAlloc(); 235 psMetadataItem *multi = psMetadataItemAlloc("ptr", PS_DATA_METADATA_MULTI, "", NULL); 236 psMetadataAddItem(metadata, multi, PS_LIST_HEAD, PS_META_DUPLICATE_OK); 237 psMetadataAddPtr(metadata, PS_LIST_TAIL, "ptr", 238 PS_DATA_SPHERE | PS_META_DUPLICATE_OK, "", sphere); 239 psSphere *s = psSphereAlloc(); 240 s->r = 0.666; 241 psMetadataAddPtr(metadata, PS_LIST_TAIL, "ptr", PS_DATA_SPHERE | PS_META_DUPLICATE_OK, "", s); 242 psFree(s); 243 psMetadataItem *metadataItem = NULL; 244 metadataItem = psMetadataLookup(metadata, "ptr"); 245 bool status = false; 246 psSphere *sph = NULL; 247 sph = (psSphere*)(psMetadataLookupPtr(&status, metadata, "ptr")); 248 ok( status && sph != NULL && fabs(sph->r - 6.66) < FLT_EPSILON, 249 "psMetadataLookupPtr: return correct value on lookup of MULTI item."); 250 psFree(metadata); 251 psFree(multi); 252 } 253 254 //Metadata - invalid key name 255 { 256 bool status = false; 257 psMetadata *met = NULL; 258 met = psMetadataLookupMetadata(&status, md, "item"); 259 ok( !status && met == NULL, 260 "psMetadataLookupMD: return NULL for incorrect key."); 261 met = NULL; 262 met = psMetadataLookupMetadata(NULL, md, "item"); 263 ok( met == NULL, 264 "psMetadataLookupMD: return NULL for incorrect key (& NULL status)."); 265 } 266 //Metadata - wrong key -> lookup s8 data 267 { 268 bool status = false; 269 psMetadata *met = NULL; 270 met = psMetadataLookupMetadata(&status, md, "itemS8"); 271 ok( !status && met == NULL, 272 "psMetadataLookupMD: return NULL for incorrect key (& NULL status)."); 273 met = NULL; 274 met = psMetadataLookupMetadata(NULL, md, "itemS8"); 275 ok( met == NULL, 276 "psMetadataLookupMD: return NULL for incorrect key."); 277 } 278 //Time - invalid key name 279 { 280 bool status = false; 281 psTime *time = NULL; 282 time = psMetadataLookupTime(&status, md, "item"); 283 ok( !status && time == NULL, 284 "psMetadataLookupTime: return NULL for incorrect key."); 285 time = NULL; 286 time = psMetadataLookupTime(NULL, md, "item"); 287 ok( time == NULL, 288 "psMetadataLookupTime: return NULL for incorrect key (& NULL status)."); 289 } 290 //Time - wrong key -> lookup s8 data 291 { 292 bool status = false; 293 psTime *time = NULL; 294 time = psMetadataLookupTime(&status, md, "itemS8"); 295 ok( !status && time == NULL, 296 "psMetadataLookupTime: return NULL for incorrect key."); 297 time = NULL; 298 time = psMetadataLookupTime(NULL, md, "itemS8"); 299 ok( time == NULL, 300 "psMetadataLookupTime: return NULL for incorrect key (& NULL status)."); 301 } 302 303 304 305 //Check for Memory leaks 306 { 28 psMemId id = psMemGetId(); 29 psMetadata *md = psMetadataAlloc(); 30 psMetadataAddStr(md, PS_LIST_TAIL, "itemStr", 0, "I am a string", "GNIRTS"); 31 psMetadataAddBool(md, PS_LIST_TAIL, "itemBool", 0, "I am a boolean", true); 32 psMetadataAddS8(md, PS_LIST_TAIL, "itemS8", 0, "I am S8", 6); 33 psMetadataAddS16(md, PS_LIST_TAIL, "itemS16", 0, "I am S16", -666); 34 psMetadataAddS32(md, PS_LIST_TAIL, "itemS32", 0, "I am a integer", 55); 35 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", 0, "I am S64", 666); 36 psMetadataAddU8(md, PS_LIST_TAIL, "itemU8", 0, "I am U8", 6); 37 psMetadataAddU16(md, PS_LIST_TAIL, "itemU16", 0, "I am U16", 666); 38 psMetadataAddU32(md, PS_LIST_TAIL, "itemU32", 0, "I am U32", 666); 39 psMetadataAddU64(md, PS_LIST_TAIL, "itemU64", 0, "I am U64", 666); 40 psMetadataAddF32(md, PS_LIST_TAIL, "itemF32", 0, NULL, 3.14); 41 psMetadataAddF64(md, PS_LIST_TAIL, "itemF64", 0, "", 6.28); 42 psSphere *sphere = psSphereAlloc(); 43 sphere->r = 6.66; 44 sphere->d = 666.666; 45 psMetadataAddPtr(md, PS_LIST_HEAD, "ptr", PS_DATA_SPHERE, "", sphere); 46 // psMetadataAddPtr(md, PS_LIST_TAIL, "ptr", PS_DATA_METADATA_MULTI, "", sphere); 47 psTime *time; 48 time = psTimeAlloc(PS_TIME_TAI); 49 time->sec = 1000; 50 time->nsec = 25; 51 time->leapsecond = true; 52 psMetadataAddTime(md, PS_LIST_TAIL, "time01", 0, "I am time", time); 53 psMetadata *newMD = psMetadataAlloc(); 54 psMetadataAddS32(newMD, PS_LIST_TAIL, "1", 0, "", 666); 55 psMetadataAddMetadata(md, PS_LIST_TAIL, "metadata7", 0, "I am a metadata", newMD); 56 57 //Lookup Standard number-types (valid cases) 58 //U8 59 { 60 bool status = false; 61 psU8 u8 = 0; 62 u8 = psMetadataLookupU8(&status, md, "itemU8"); 63 ok( status && u8 == 6, 64 "psMetadataLookupU8: return correct U8 value on lookup."); 65 } 66 //U16 67 { 68 bool status = false; 69 psU16 u16 = 0; 70 u16 = psMetadataLookupU16(&status, md, "itemU16"); 71 ok( status && u16 == 666, 72 "psMetadataLookupU16: return correct U16 value on lookup."); 73 } 74 //U32 75 { 76 bool status = false; 77 psU32 u32 = 0; 78 u32 = psMetadataLookupU32(&status, md, "itemU32"); 79 ok( status && u32 == 666, 80 "psMetadataLookupU32: return correct U32 value on lookup."); 81 } 82 //U64 83 { 84 bool status = false; 85 psU64 u64 = 0; 86 u64 = psMetadataLookupU64(&status, md, "itemU64"); 87 ok( status && u64 == 666, 88 "psMetadataLookupU64: return correct U64 value on lookup."); 89 } 90 //S8 91 { 92 bool status = false; 93 psS8 s8 = 0; 94 s8 = psMetadataLookupS8(&status, md, "itemS8"); 95 ok( status && s8 == 6, 96 "psMetadataLookupS8: return correct S8 value on lookup."); 97 } 98 //S16 99 { 100 bool status = false; 101 psS16 s16 = 0; 102 s16 = psMetadataLookupS16(&status, md, "itemS16"); 103 ok( status && s16 == -666, 104 "psMetadataLookupS16: return correct S16 value on lookup."); 105 } 106 //S32 107 { 108 bool status = false; 109 psS32 s32 = 0; 110 s32 = psMetadataLookupS32(&status, md, "itemS32"); 111 ok( status && s32 == 55, 112 "psMetadataLookupS32: return correct S32 value on lookup."); 113 } 114 //S64 115 { 116 bool status = false; 117 psS64 s64 = 0; 118 s64 = psMetadataLookupS64(&status, md, "itemS64"); 119 ok( status && s64 == 666, 120 "psMetadataLookupS64: return correct S64 value on lookup."); 121 } 122 //F32 123 { 124 bool status = false; 125 psF32 f32 = 0; 126 f32 = psMetadataLookupF32(&status, md, "itemF32"); 127 ok( status && abs(f32 - 3.14) < FLT_EPSILON, 128 "psMetadataLookupF32: return correct F32 value on lookup."); 129 } 130 //F64 131 { 132 bool status = false; 133 psF64 f64 = 0; 134 f64 = psMetadataLookupF64(&status, md, "itemF64"); 135 ok( status && abs(f64 - 6.28) < DBL_EPSILON, 136 "psMetadataLookupF64: return correct F64 value on lookup."); 137 } 138 //Bool 139 { 140 bool status = false; 141 bool stat = false; 142 stat = psMetadataLookupBool(&status, md, "itemBool"); 143 ok( status && stat, 144 "psMetadataLookupBool: return correct Bool value on lookup."); 145 } 146 //String 147 { 148 bool status = false; 149 psString str = NULL; 150 str = psMetadataLookupStr(&status, md, "itemStr"); 151 ok( status && !strncmp(str, "GNIRTS", 8), 152 "psMetadataLookupStr: return correct String value on lookup."); 153 } 154 //Pointer 155 { 156 bool status = false; 157 psSphere *sph = NULL; 158 sph = (psSphere*)(psMetadataLookupPtr(&status, md, "ptr")); 159 ok( status && sph != NULL && abs(sph->r-6.66) < FLT_EPSILON, 160 "psMetadataLookupPtr: return correct pointer value on lookup."); 161 } 162 //Time 163 { 164 bool status = false; 165 psTime *t = NULL; 166 t = psMetadataLookupTime(&status, md, "time01"); 167 ok( status && t->sec == 1000, 168 "psMetadataLookupTime: return correct time value on lookup."); 169 } 170 //Metadata 171 { 172 bool status = false; 173 psMetadata *mdtemp = NULL; 174 mdtemp = psMetadataLookupMetadata(&status, md, "metadata7"); 175 psMetadataItem *itemtemp = psMetadataGet(mdtemp, PS_LIST_HEAD); 176 ok( status && itemtemp->type == PS_DATA_S32 && itemtemp->data.S32 == 666, 177 "psMetadataLookupMD: return correct metadata value on lookup."); 178 } 179 180 //Try Negatives and non-standard lookup cases 181 //String - invalid key name 182 { 183 bool status = false; 184 psString str = NULL; 185 str = psMetadataLookupStr(&status, md, "item"); 186 ok( !status && str == NULL, 187 "psMetadataLookupStr: return NULL for incorrect key."); 188 str = NULL; 189 str = psMetadataLookupStr(NULL, md, "item"); 190 ok( str == NULL, 191 "psMetadataLookupStr: return NULL for incorrect key (& NULL status)."); 192 } 193 //String - wrong key-> lookup s8 data 194 { 195 bool status = false; 196 psString str = NULL; 197 str = psMetadataLookupStr(&status, md, "itemS8"); 198 ok( !status && str == NULL, 199 "psMetadataLookupStr: return NULL for incorrect key ."); 200 str = NULL; 201 str = psMetadataLookupStr(NULL, md, "itemS8"); 202 ok( str == NULL, 203 "psMetadataLookupStr: return NULL for incorrect key (& NULL status)."); 204 } 205 //Pointer - invalid key name 206 { 207 bool status = false; 208 psSphere *sph = NULL; 209 sph = psMetadataLookupPtr(&status, md, "item"); 210 ok( !status && sph == NULL, 211 "psMetadataLookupPtr: return NULL for incorrect key."); 212 } 213 //Pointer - wrong key -> lookup s8 data 214 { 215 bool status = false; 216 psSphere *sph = NULL; 217 sph = psMetadataLookupPtr(&status, md, "itemS8"); 218 ok( !status && sph == NULL, 219 "psMetadataLookupPtr: return NULL for incorrect key."); 220 } 221 222 //Pointer** - lookup a PS_DATA_METADATA_MULTI 223 { 224 psMetadata *metadata = psMetadataAlloc(); 225 psMetadataItem *multi = psMetadataItemAlloc("ptr", PS_DATA_METADATA_MULTI, "", NULL); 226 psMetadataAddItem(metadata, multi, PS_LIST_HEAD, PS_META_DUPLICATE_OK); 227 psMetadataAddPtr(metadata, PS_LIST_TAIL, "ptr", 228 PS_DATA_SPHERE | PS_META_DUPLICATE_OK, "", sphere); 229 psSphere *s = psSphereAlloc(); 230 s->r = 0.666; 231 psMetadataAddPtr(metadata, PS_LIST_TAIL, "ptr", PS_DATA_SPHERE | PS_META_DUPLICATE_OK, "", s); 232 psFree(s); 233 psMetadataItem *metadataItem = NULL; 234 metadataItem = psMetadataLookup(metadata, "ptr"); 235 bool status = false; 236 psSphere *sph = NULL; 237 sph = (psSphere*)(psMetadataLookupPtr(&status, metadata, "ptr")); 238 ok( status && sph != NULL && fabs(sph->r - 6.66) < FLT_EPSILON, 239 "psMetadataLookupPtr: return correct value on lookup of MULTI item."); 240 psFree(metadata); 241 psFree(multi); 242 } 243 244 //Metadata - invalid key name 245 { 246 bool status = false; 247 psMetadata *met = NULL; 248 met = psMetadataLookupMetadata(&status, md, "item"); 249 ok( !status && met == NULL, 250 "psMetadataLookupMD: return NULL for incorrect key."); 251 met = NULL; 252 met = psMetadataLookupMetadata(NULL, md, "item"); 253 ok( met == NULL, 254 "psMetadataLookupMD: return NULL for incorrect key (& NULL status)."); 255 } 256 //Metadata - wrong key -> lookup s8 data 257 { 258 bool status = false; 259 psMetadata *met = NULL; 260 met = psMetadataLookupMetadata(&status, md, "itemS8"); 261 ok( !status && met == NULL, 262 "psMetadataLookupMD: return NULL for incorrect key (& NULL status)."); 263 met = NULL; 264 met = psMetadataLookupMetadata(NULL, md, "itemS8"); 265 ok( met == NULL, 266 "psMetadataLookupMD: return NULL for incorrect key."); 267 } 268 //Time - invalid key name 269 { 270 bool status = false; 271 psTime *time = NULL; 272 time = psMetadataLookupTime(&status, md, "item"); 273 ok( !status && time == NULL, 274 "psMetadataLookupTime: return NULL for incorrect key."); 275 time = NULL; 276 time = psMetadataLookupTime(NULL, md, "item"); 277 ok( time == NULL, 278 "psMetadataLookupTime: return NULL for incorrect key (& NULL status)."); 279 } 280 //Time - wrong key -> lookup s8 data 281 { 282 bool status = false; 283 psTime *time = NULL; 284 time = psMetadataLookupTime(&status, md, "itemS8"); 285 ok( !status && time == NULL, 286 "psMetadataLookupTime: return NULL for incorrect key."); 287 time = NULL; 288 time = psMetadataLookupTime(NULL, md, "itemS8"); 289 ok( time == NULL, 290 "psMetadataLookupTime: return NULL for incorrect key (& NULL status)."); 291 } 292 307 293 psFree(sphere); 308 294 psFree(time); 309 295 psFree(newMD); 310 296 psFree(md); 311 checkMem(); 297 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 298 } 299 300 301 // psMetadataRemove Functions 302 { 303 psMemId id = psMemGetId(); 304 psMetadata *md = psMetadataAlloc(); 305 psMetadataAddStr(md, PS_LIST_TAIL, "itemStr", 0, "I am a string", "GNIRTS"); 306 psMetadataAddBool(md, PS_LIST_TAIL, "itemBool", 0, "I am a boolean", true); 307 psMetadataAddS8(md, PS_LIST_TAIL, "itemS8", 0, "I am S8", 6); 308 psMetadataAddS16(md, PS_LIST_TAIL, "itemS16", 0, "I am S16", -666); 309 psMetadataAddS32(md, PS_LIST_TAIL, "itemS32", 0, "I am a integer", 55); 310 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 666); 311 psMetadataAddU8(md, PS_LIST_TAIL, "itemU8", 0, "I am U8", 6); 312 313 //psMetadataRemoveKey 314 { 315 bool status = psMetadataRemoveKey(md, "itemU8"); 316 psMetadataItem *temp = psMetadataGet(md, PS_LIST_TAIL); 317 ok( status && temp->type == PS_DATA_S64, 318 "psMetadataRemoveKey: return true for valid case."); 319 } 320 //psMetadataRemoveIndex 321 { 322 bool status = psMetadataRemoveIndex(md, PS_LIST_HEAD); 323 psMetadataItem *temp = psMetadataGet(md, PS_LIST_HEAD); 324 ok( status && temp->type == PS_DATA_BOOL, 325 "psMetadataRemoveIndex: return true for valid case."); 326 } 327 //Attempt to remove an incorrect key - Return false 328 { 329 ok( !psMetadataRemoveKey(md, "BigDog"), 330 "psMetadataRemoveKey: return false for incorrect key."); 331 } 332 //Attempt to remove an out-of-range index - Return false 333 { 334 ok( !psMetadataRemoveIndex(md, 20), 335 "psMetadataRemoveIndex: return false for incorrect index."); 336 } 337 //Attempt to remove an item with NULL name 338 { 339 psMetadataItem *temp = psMetadataGet(md, PS_LIST_HEAD); 340 psFree(temp->name); 341 temp->name = NULL; 342 ok( !psMetadataRemoveIndex(md, PS_LIST_HEAD), 343 "psMetadataRemoveIndex: return false for item with no name."); 344 } 345 //Attempt to remove an item with wrong hash table 346 { 347 psMetadata *md2 = psMetadataAlloc(); 348 psMetadataAddBool(md2, PS_LIST_TAIL, "Bool", 0, "I am a boolean", true); 349 psMetadataAddS8(md2, PS_LIST_TAIL, "S8", 0, "I am S8", 6); 350 psMetadataAddS16(md2, PS_LIST_TAIL, "S16", 0, "I am S16", -666); 351 psMetadataAddS32(md2, PS_LIST_TAIL, "S32", 0, "I am a integer", 55); 352 psMetadataAddS64(md2, PS_LIST_TAIL, "S64", 0, "I am S64", 666); 353 354 psFree(md2->hash); 355 md2->hash = NULL; 356 md2->hash = md->hash; 357 ok( !psMetadataRemoveIndex(md2, PS_LIST_HEAD), 358 "psMetadataRemoveIndex: return false for item with bad table."); 359 md2->hash = NULL; 360 psFree(md2); 361 } 362 //Attempt to remove a METADATA_MULTI item by key 363 { 364 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 667); 365 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 668); 366 bool status = psMetadataRemoveKey(md, "itemS64"); 367 psMetadataItem *temp = psMetadataGet(md, PS_LIST_TAIL); 368 ok( status && temp->type == PS_DATA_S32, 369 "psMetadataRemoveKey: return true for valid METADATA_MULTI case."); 370 371 } 372 //Attempt to remove a METADATA_MULTI item by index 373 { 374 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 667); 375 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 668); 376 bool status = psMetadataRemoveIndex(md, PS_LIST_TAIL); 377 psMetadataItem *temp = psMetadataGet(md, PS_LIST_TAIL); 378 ok( status && temp->type == PS_DATA_S64, 379 "psMetadataRemoveIndex: return true for valid METADATA_MULTI case."); 380 } 381 382 psFree(md); 383 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 384 } 385 386 387 // psMetadataIterator Functions 388 { 389 psMemId id = psMemGetId(); 390 psMetadata *md = psMetadataAlloc(); 391 psMetadataAddS32(md, PS_LIST_HEAD, "S32_1", PS_META_NO_REPLACE, "", 1); 392 psMetadataAddS32(md, PS_LIST_TAIL, "S32_2", PS_META_NO_REPLACE, "", 2); 393 psMetadataAddS32(md, PS_LIST_TAIL, "S32_3", PS_META_NO_REPLACE, "", 3); 394 395 psMetadataIterator *iter = NULL; 396 397 //Return NULL in psMetadataGetAnd(In/De)crement for NULL iterator input 398 { 399 ok( psMetadataGetAndIncrement(NULL) == NULL, 400 "psMetadataGetAndIncrement: return NULL for NULL iterator input."); 401 ok( psMetadataGetAndDecrement(NULL) == NULL, 402 "psMetadataGetAndDecrement: return NULL for NULL iterator input."); 403 } 404 //Return NULL in psMetadataGetAnd(In/De)crement for iterator with no list iterator 405 psMetadataIterator *iter2 = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); 406 psFree(iter2->iter); 407 iter2->iter = NULL; 408 { 409 ok( psMetadataGetAndIncrement(iter2) == NULL, 410 "psMetadataGetAndIncrement: return NULL for iterator with no list iterator."); 411 ok( psMetadataGetAndDecrement(iter2) == NULL, 412 "psMetadataGetAndDecrement: return NULL for iterator with no list iterator."); 413 } 414 psFree(iter2); 415 416 //Return valid iterator for valid inputs, regex= NULL 417 psMetadataItem *item = NULL; 418 { 419 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); 420 ok( iter != NULL, 421 "psMetadataIteratorAlloc: return valid iterator for valid inputs, regex=NULL."); 422 skip_start(iter == NULL, 4, 423 "Skipping 4 tests because psMetadataIteratorAlloc failed"); 424 425 item = psMetadataGetAndIncrement(iter); 426 ok( item != NULL, 427 "psMetadataGetAndIncrement: return valid item for valid iterator input."); 428 skip_start(item == NULL, 1, 429 "Skipping 1 tests because psMetadataGetAndIncrement failed"); 430 ok(item->type == PS_DATA_S32 431 && !strncmp(item->name, "S32_1", 7) 432 && item->data.S32 == 1 433 && !strncmp(item->comment, "", 2), 434 "psMetadataGetAndIncrement: retrieve correct item from valid iterator."); 435 skip_end(); 436 437 item = psMetadataGetAndDecrement(iter); 438 ok( item != NULL, 439 "psMetadataGetAndDecrement: return valid item for valid iterator input."); 440 skip_start(item == NULL, 1, 441 "Skipping 1 tests because psMetadataGetAndDecrement failed"); 442 ok(item->type == PS_DATA_S32 443 && !strncmp(item->name, "S32_2", 7) 444 && item->data.S32 == 2 445 && !strncmp(item->comment, "", 2), 446 "psMetadataGetAndDecrement: retrieve correct item from valid iterator."); 447 skip_end(); 448 449 skip_end(); 450 451 } 452 453 psFree(iter); 454 psFree(md); 455 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 312 456 } 313 457 } 314 315 void testRemoves(void) 316 { 317 note(" >>>Test 2: psMetadataRemove Functions"); 318 psMetadata *md = psMetadataAlloc(); 319 psMetadataAddStr(md, PS_LIST_TAIL, "itemStr", 0, "I am a string", "GNIRTS"); 320 psMetadataAddBool(md, PS_LIST_TAIL, "itemBool", 0, "I am a boolean", true); 321 psMetadataAddS8(md, PS_LIST_TAIL, "itemS8", 0, "I am S8", 6); 322 psMetadataAddS16(md, PS_LIST_TAIL, "itemS16", 0, "I am S16", -666); 323 psMetadataAddS32(md, PS_LIST_TAIL, "itemS32", 0, "I am a integer", 55); 324 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 666); 325 psMetadataAddU8(md, PS_LIST_TAIL, "itemU8", 0, "I am U8", 6); 326 327 //psMetadataRemoveKey 328 { 329 bool status = psMetadataRemoveKey(md, "itemU8"); 330 psMetadataItem *temp = psMetadataGet(md, PS_LIST_TAIL); 331 ok( status && temp->type == PS_DATA_S64, 332 "psMetadataRemoveKey: return true for valid case."); 333 } 334 //psMetadataRemoveIndex 335 { 336 bool status = psMetadataRemoveIndex(md, PS_LIST_HEAD); 337 psMetadataItem *temp = psMetadataGet(md, PS_LIST_HEAD); 338 ok( status && temp->type == PS_DATA_BOOL, 339 "psMetadataRemoveIndex: return true for valid case."); 340 } 341 //Attempt to remove an incorrect key - Return false 342 { 343 ok( !psMetadataRemoveKey(md, "BigDog"), 344 "psMetadataRemoveKey: return false for incorrect key."); 345 } 346 //Attempt to remove an out-of-range index - Return false 347 { 348 ok( !psMetadataRemoveIndex(md, 20), 349 "psMetadataRemoveIndex: return false for incorrect index."); 350 } 351 //Attempt to remove an item with NULL name 352 { 353 psMetadataItem *temp = psMetadataGet(md, PS_LIST_HEAD); 354 psFree(temp->name); 355 temp->name = NULL; 356 ok( !psMetadataRemoveIndex(md, PS_LIST_HEAD), 357 "psMetadataRemoveIndex: return false for item with no name."); 358 } 359 //Attempt to remove an item with wrong hash table 360 { 361 psMetadata *md2 = psMetadataAlloc(); 362 psMetadataAddBool(md2, PS_LIST_TAIL, "Bool", 0, "I am a boolean", true); 363 psMetadataAddS8(md2, PS_LIST_TAIL, "S8", 0, "I am S8", 6); 364 psMetadataAddS16(md2, PS_LIST_TAIL, "S16", 0, "I am S16", -666); 365 psMetadataAddS32(md2, PS_LIST_TAIL, "S32", 0, "I am a integer", 55); 366 psMetadataAddS64(md2, PS_LIST_TAIL, "S64", 0, "I am S64", 666); 367 368 psFree(md2->hash); 369 md2->hash = NULL; 370 md2->hash = md->hash; 371 ok( !psMetadataRemoveIndex(md2, PS_LIST_HEAD), 372 "psMetadataRemoveIndex: return false for item with bad table."); 373 md2->hash = NULL; 374 psFree(md2); 375 } 376 //Attempt to remove a METADATA_MULTI item by key 377 { 378 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 667); 379 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 668); 380 bool status = psMetadataRemoveKey(md, "itemS64"); 381 psMetadataItem *temp = psMetadataGet(md, PS_LIST_TAIL); 382 ok( status && temp->type == PS_DATA_S32, 383 "psMetadataRemoveKey: return true for valid METADATA_MULTI case."); 384 385 } 386 //Attempt to remove a METADATA_MULTI item by index 387 { 388 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 667); 389 psMetadataAddS64(md, PS_LIST_TAIL, "itemS64", PS_META_DUPLICATE_OK, "I am S64", 668); 390 bool status = psMetadataRemoveIndex(md, PS_LIST_TAIL); 391 psMetadataItem *temp = psMetadataGet(md, PS_LIST_TAIL); 392 ok( status && temp->type == PS_DATA_S64, 393 "psMetadataRemoveIndex: return true for valid METADATA_MULTI case."); 394 } 395 396 //Check for Memory leaks 397 { 398 psFree(md); 399 checkMem(); 400 } 401 } 402 403 void testIter(void) 404 { 405 note(" >>>Test 3: psMetadataIterator Functions"); 406 psMetadata *md = psMetadataAlloc(); 407 psMetadataAddS32(md, PS_LIST_HEAD, "S32_1", PS_META_NO_REPLACE, "", 1); 408 psMetadataAddS32(md, PS_LIST_TAIL, "S32_2", PS_META_NO_REPLACE, "", 2); 409 psMetadataAddS32(md, PS_LIST_TAIL, "S32_3", PS_META_NO_REPLACE, "", 3); 410 411 psMetadataIterator *iter = NULL; 412 413 //Return NULL in psMetadataGetAnd(In/De)crement for NULL iterator input 414 { 415 ok( psMetadataGetAndIncrement(NULL) == NULL, 416 "psMetadataGetAndIncrement: return NULL for NULL iterator input."); 417 ok( psMetadataGetAndDecrement(NULL) == NULL, 418 "psMetadataGetAndDecrement: return NULL for NULL iterator input."); 419 } 420 //Return NULL in psMetadataGetAnd(In/De)crement for iterator with no list iterator 421 psMetadataIterator *iter2 = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); 422 psFree(iter2->iter); 423 iter2->iter = NULL; 424 { 425 ok( psMetadataGetAndIncrement(iter2) == NULL, 426 "psMetadataGetAndIncrement: return NULL for iterator with no list iterator."); 427 ok( psMetadataGetAndDecrement(iter2) == NULL, 428 "psMetadataGetAndDecrement: return NULL for iterator with no list iterator."); 429 } 430 psFree(iter2); 431 432 //Return valid iterator for valid inputs, regex= NULL 433 psMetadataItem *item = NULL; 434 { 435 iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); 436 ok( iter != NULL, 437 "psMetadataIteratorAlloc: return valid iterator for valid inputs, regex=NULL."); 438 skip_start(iter == NULL, 4, 439 "Skipping 4 tests because psMetadataIteratorAlloc failed"); 440 441 item = psMetadataGetAndIncrement(iter); 442 ok( item != NULL, 443 "psMetadataGetAndIncrement: return valid item for valid iterator input."); 444 skip_start(item == NULL, 1, 445 "Skipping 1 tests because psMetadataGetAndIncrement failed"); 446 ok(item->type == PS_DATA_S32 447 && !strncmp(item->name, "S32_1", 7) 448 && item->data.S32 == 1 449 && !strncmp(item->comment, "", 2), 450 "psMetadataGetAndIncrement: retrieve correct item from valid iterator."); 451 skip_end(); 452 453 item = psMetadataGetAndDecrement(iter); 454 ok( item != NULL, 455 "psMetadataGetAndDecrement: return valid item for valid iterator input."); 456 skip_start(item == NULL, 1, 457 "Skipping 1 tests because psMetadataGetAndDecrement failed"); 458 ok(item->type == PS_DATA_S32 459 && !strncmp(item->name, "S32_2", 7) 460 && item->data.S32 == 2 461 && !strncmp(item->comment, "", 2), 462 "psMetadataGetAndDecrement: retrieve correct item from valid iterator."); 463 skip_end(); 464 465 skip_end(); 466 467 } 468 469 //Check for Memory leaks 470 { 471 psFree(iter); 472 psFree(md); 473 checkMem(); 474 } 475 } 476 477 458 459 460 -
trunk/psLib/test/types/tap_psMetadata_polynomials.c
r12607 r12781 10 10 * 11 11 */ 12 13 12 #include <pslib.h> 14 13 #include <string.h> 15 16 14 #include "tap.h" 17 15 #include "pstap.h" 18 16 19 void test1Dcase(void);20 void test2Dcase(void);21 void test3Dcase(void);22 void test4Dcase(void);23 24 17 int main(void) 25 18 { 26 plan_tests(89); 27 28 note("psPolynomial(1D, 2D, 3D, & 4D)(to/from)Metadata tests"); 29 30 test1Dcase(); 31 test2Dcase(); 32 test3Dcase(); 33 test4Dcase(); 34 35 done(); 36 } 37 38 39 void test1Dcase(void) 40 { 41 note(" >>>Test 1: psPolynomial1DtoMetadata & psPolynomial1DfromMetadata functions"); 42 psMetadata *md = psMetadataAlloc(); 43 psPolynomial1D *p1d = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1); 44 p1d->coeff[0] = 1.1; 45 p1d->coeff[1] = 2.2; 46 p1d->coeffErr[0] = 0.1; 47 p1d->coeffErr[1] = 0.2; 48 49 //psPolynomial1DtoMetadata 50 //Return a valid metadata containing a polynomial-metadata structure 19 psLogSetFormat("HLNM"); 20 psLogSetLevel(PS_LOG_INFO); 21 plan_tests(92); 22 // psPolynomial(1D, 2D, 3D, & 4D)(to/from)Metadata tests 23 24 25 // psPolynomial1DtoMetadata & psPolynomial1DfromMetadata functions 51 26 { 52 note ("example of 1DtoMD using the names not the sequence"); 53 54 ok( psPolynomial1DtoMetadata(md, p1d, "polyMD"), 55 "psPolynomial1DtoMetadata: return true for valid inputs."); 27 psMemId id = psMemGetId(); 28 psMetadata *md = psMetadataAlloc(); 29 psPolynomial1D *p1d = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 1); 30 p1d->coeff[0] = 1.1; 31 p1d->coeff[1] = 2.2; 32 p1d->coeffErr[0] = 0.1; 33 p1d->coeffErr[1] = 0.2; 34 35 //psPolynomial1DtoMetadata 36 //Return a valid metadata containing a polynomial-metadata structure 37 { 38 note ("example of 1DtoMD using the names not the sequence"); 39 40 ok( psPolynomial1DtoMetadata(md, p1d, "polyMD"), 41 "psPolynomial1DtoMetadata: return true for valid inputs."); 42 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 43 skip_start( polyMDtemp == NULL , 1, 44 "Skipping 1 tests because psPolynomial1DtoMetadata has errors"); 45 46 bool status; 47 int nX = psMetadataLookupS32(&status, polyMDtemp, "NORDER_X"); 48 ok(status, 49 "psPolynomial1DtoMetadata: found NORDER_X"); 50 ok(nX == 1, 51 "psPolynomial1DtoMetadata: NORDER_X is 1"); 52 53 double val; 54 val = psMetadataLookupF64(&status, polyMDtemp, "VAL_X00"); 55 ok(status, 56 "psPolynomial1DtoMetadata: found VAL_X00"); 57 is_double(val, 1.1, 58 "psPolynomial1DtoMetadata: VAL_X00 is %lf", val); 59 60 val = psMetadataLookupF64(&status, polyMDtemp, "VAL_X01"); 61 ok(status, 62 "psPolynomial1DtoMetadata: found VAL_X01"); 63 is_double(val, 2.2, 64 "psPolynomial1DtoMetadata: VAL_X01 is %lf", val); 65 skip_end(); 66 } 67 68 //Return false for no-name polynomial 69 { 70 ok( !psPolynomial1DtoMetadata(md, p1d, ""), 71 "psPolynomial1DtoMetadata: return false for no-name."); 72 } 73 //Return false for NULL-name polynomial 74 { 75 ok( !psPolynomial1DtoMetadata(md, p1d, NULL), 76 "psPolynomial1DtoMetadata: return false for NULL name input."); 77 } 78 //Return false for NULL metadata input 79 { 80 ok( !psPolynomial1DtoMetadata(NULL, p1d, "polyMD"), 81 "psPolynomial1DtoMetadata: return false for NULL metadata input."); 82 } 83 //Return false for NULL polynomial input 84 { 85 ok( !psPolynomial1DtoMetadata(md, NULL, "polyMD"), 86 "psPolynomial1DtoMetadata: return false for NULL polynomial input."); 87 } 88 //Return true for polynomial with 1 element, a constant 89 { 90 psPolynomial1D *constPoly = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 0); 91 constPoly->coeff[0] = 6.66; 92 ok( psPolynomial1DtoMetadata(md, constPoly, "polyMD"), 93 "psPolynomial1DtoMetadata: return true for constant polynomial (1 element != 0)."); 94 psFree(constPoly); 95 } 96 //Return false for non-ordinary polynomial 97 { 98 psPolynomial1D *p1d1 = psPolynomial1DAlloc(PS_POLYNOMIAL_CHEB, 1); 99 p1d1->coeff[0] = 1.1; 100 ok( !psPolynomial1DtoMetadata(md, p1d1, "polyMD"), 101 "psPolynomial1DtoMetadata: return false for chebyshev polynomial"); 102 psFree(p1d1); 103 } 104 105 //psPolynomial1DfromMetadata Tests 106 //Return NULL for NULL metadata input. 107 { 108 psPolynomial1D *emptyPoly1D = NULL; 109 emptyPoly1D = psPolynomial1DfromMetadata(NULL); 110 ok( emptyPoly1D == NULL, 111 "psPolynomial1DfromMetadata: return NULL for NULL metadata input."); 112 } 113 //Get a polynomial from Metadata. 114 psPolynomial1D *outPoly = NULL; 56 115 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 57 skip_start( polyMDtemp == NULL , 1, 58 "Skipping 1 tests because psPolynomial1DtoMetadata has errors"); 59 60 bool status; 61 int nX = psMetadataLookupS32(&status, polyMDtemp, "NORDER_X"); 62 ok(status, 63 "psPolynomial1DtoMetadata: found NORDER_X"); 64 ok(nX == 1, 65 "psPolynomial1DtoMetadata: NORDER_X is 1"); 66 67 double val; 68 val = psMetadataLookupF64(&status, polyMDtemp, "VAL_X00"); 69 ok(status, 70 "psPolynomial1DtoMetadata: found VAL_X00"); 71 is_double(val, 1.1, 72 "psPolynomial1DtoMetadata: VAL_X00 is %lf", val); 73 74 val = psMetadataLookupF64(&status, polyMDtemp, "VAL_X01"); 75 ok(status, 76 "psPolynomial1DtoMetadata: found VAL_X01"); 77 is_double(val, 2.2, 78 "psPolynomial1DtoMetadata: VAL_X01 is %lf", val); 79 skip_end(); 80 } 81 82 //Return false for no-name polynomial 83 { 84 ok( !psPolynomial1DtoMetadata(md, p1d, ""), 85 "psPolynomial1DtoMetadata: return false for no-name."); 86 } 87 //Return false for NULL-name polynomial 88 { 89 ok( !psPolynomial1DtoMetadata(md, p1d, NULL), 90 "psPolynomial1DtoMetadata: return false for NULL name input."); 91 } 92 //Return false for NULL metadata input 93 { 94 ok( !psPolynomial1DtoMetadata(NULL, p1d, "polyMD"), 95 "psPolynomial1DtoMetadata: return false for NULL metadata input."); 96 } 97 //Return false for NULL polynomial input 98 { 99 ok( !psPolynomial1DtoMetadata(md, NULL, "polyMD"), 100 "psPolynomial1DtoMetadata: return false for NULL polynomial input."); 101 } 102 //Return true for polynomial with 1 element, a constant 103 { 104 psPolynomial1D *constPoly = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 0); 105 constPoly->coeff[0] = 6.66; 106 ok( psPolynomial1DtoMetadata(md, constPoly, "polyMD"), 107 "psPolynomial1DtoMetadata: return true for constant polynomial (1 element != 0)."); 108 psFree(constPoly); 109 } 110 //Return false for non-ordinary polynomial 111 { 112 psPolynomial1D *p1d1 = psPolynomial1DAlloc(PS_POLYNOMIAL_CHEB, 1); 113 p1d1->coeff[0] = 1.1; 114 ok( !psPolynomial1DtoMetadata(md, p1d1, "polyMD"), 115 "psPolynomial1DtoMetadata: return false for chebyshev polynomial"); 116 psFree(p1d1); 117 } 118 119 //psPolynomial1DfromMetadata Tests 120 //Return NULL for NULL metadata input. 121 { 122 psPolynomial1D *emptyPoly1D = NULL; 123 emptyPoly1D = psPolynomial1DfromMetadata(NULL); 124 ok( emptyPoly1D == NULL, 125 "psPolynomial1DfromMetadata: return NULL for NULL metadata input."); 126 } 127 //Get a polynomial from Metadata. 128 psPolynomial1D *outPoly = NULL; 129 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 130 outPoly = psPolynomial1DfromMetadata(polyMDtemp); 131 { 132 skip_start( outPoly == NULL, 1, 133 "Skipping 1 tests because psPolynomial1DfromMetadata has errors."); 134 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 1 && 135 abs(outPoly->coeff[0] - 1.1) < DBL_EPSILON, 136 "psPolynomial1DfromMetadata: return correct polynomial from metadata"); 137 skip_end(); 138 } 139 //Get a polynomial from Metadata with mask[0] == 1. 140 psFree(outPoly); 141 outPoly = NULL; 142 psPolynomial1D *maskPoly = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 0); 143 maskPoly->coeff[0] = 6.66; 144 maskPoly->mask[0] = 1; 145 psMetadata *newmd = psMetadataAlloc(); 146 psPolynomial1DtoMetadata(newmd, maskPoly, "polyMD"); 147 psMetadata *polyMask = psMetadataLookupMetadata(NULL, newmd, "polyMD"); 148 outPoly = psPolynomial1DfromMetadata(polyMask); 149 { 150 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 0 && 151 outPoly->mask[0] == 1, 152 "psPolynomial1DfromMetadata: return correct polynomial (w/mask) from metadata"); 153 } 154 psFree(maskPoly); 155 psFree(newmd); 156 //Return NULL for wrong NELEMENTS 157 psMetadataItem *nElementItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL); 158 nElementItem->data.S32 -= 1; 159 psFree(outPoly); 160 outPoly = NULL; 161 outPoly = psPolynomial1DfromMetadata(polyMDtemp); 162 { 163 ok( outPoly == NULL, 164 "psPolynomial1DfromMetadata: " 165 "return NULL for metadata-polynomial with wrong NELEMENTS"); 166 } 167 //Return NULL for missing NELEMENTS 168 psMetadataRemoveIndex(polyMDtemp, PS_LIST_TAIL); 169 psFree(outPoly); 170 outPoly = NULL; 171 outPoly = psPolynomial1DfromMetadata(polyMDtemp); 172 { 173 ok( outPoly == NULL, 174 "psPolynomial1DfromMetadata: " 175 "return NULL for metadata-polynomial with no NELEMENTS"); 176 } 177 178 //Return NULL for polynomial in metadata with no x-order 179 psMetadataRemoveKey(polyMDtemp, "NORDER_X"); 180 psFree(outPoly); 181 outPoly = NULL; 182 outPoly = psPolynomial1DfromMetadata(polyMDtemp); 183 { 184 ok( outPoly == NULL, 185 "psPolynomial1DfromMetadata: " 186 "return NULL for metadata-polynomial with no x-order"); 187 } 188 189 //Check for Memory leaks 190 { 116 outPoly = psPolynomial1DfromMetadata(polyMDtemp); 117 { 118 skip_start( outPoly == NULL, 1, 119 "Skipping 1 tests because psPolynomial1DfromMetadata has errors."); 120 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 1 && 121 abs(outPoly->coeff[0] - 1.1) < DBL_EPSILON, 122 "psPolynomial1DfromMetadata: return correct polynomial from metadata"); 123 skip_end(); 124 } 125 //Get a polynomial from Metadata with mask[0] == 1. 126 psFree(outPoly); 127 outPoly = NULL; 128 psPolynomial1D *maskPoly = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD, 0); 129 maskPoly->coeff[0] = 6.66; 130 maskPoly->mask[0] = 1; 131 psMetadata *newmd = psMetadataAlloc(); 132 psPolynomial1DtoMetadata(newmd, maskPoly, "polyMD"); 133 psMetadata *polyMask = psMetadataLookupMetadata(NULL, newmd, "polyMD"); 134 outPoly = psPolynomial1DfromMetadata(polyMask); 135 { 136 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 0 && 137 outPoly->mask[0] == 1, 138 "psPolynomial1DfromMetadata: return correct polynomial (w/mask) from metadata"); 139 } 140 psFree(maskPoly); 141 psFree(newmd); 142 //Return NULL for wrong NELEMENTS 143 psMetadataItem *nElementItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL); 144 nElementItem->data.S32 -= 1; 145 psFree(outPoly); 146 outPoly = NULL; 147 outPoly = psPolynomial1DfromMetadata(polyMDtemp); 148 { 149 ok( outPoly == NULL, 150 "psPolynomial1DfromMetadata: " 151 "return NULL for metadata-polynomial with wrong NELEMENTS"); 152 } 153 //Return NULL for missing NELEMENTS 154 psMetadataRemoveIndex(polyMDtemp, PS_LIST_TAIL); 155 psFree(outPoly); 156 outPoly = NULL; 157 outPoly = psPolynomial1DfromMetadata(polyMDtemp); 158 { 159 ok( outPoly == NULL, 160 "psPolynomial1DfromMetadata: " 161 "return NULL for metadata-polynomial with no NELEMENTS"); 162 } 163 164 //Return NULL for polynomial in metadata with no x-order 165 psMetadataRemoveKey(polyMDtemp, "NORDER_X"); 166 psFree(outPoly); 167 outPoly = NULL; 168 outPoly = psPolynomial1DfromMetadata(polyMDtemp); 169 { 170 ok( outPoly == NULL, 171 "psPolynomial1DfromMetadata: " 172 "return NULL for metadata-polynomial with no x-order"); 173 } 174 191 175 psFree(outPoly); 192 176 psFree(p1d); 193 177 psFree(md); 194 checkMem(); 178 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 179 } 180 181 182 // psPolynomial2DtoMetadata & psPolynomial2DfromMetadata functions 183 { 184 psMemId id = psMemGetId(); 185 psMetadata *md = psMetadataAlloc(); 186 psPolynomial2D *p2d = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 1, 1); 187 p2d->coeff[0][0] = 1.1; 188 p2d->coeff[0][1] = 2.2; 189 p2d->coeff[1][0] = 3.3; 190 p2d->coeff[1][1] = 4.4; 191 p2d->coeffErr[0][0] = 0.1; 192 p2d->coeffErr[0][1] = 0.2; 193 p2d->coeffErr[1][0] = 0.3; 194 p2d->coeffErr[1][1] = 0.4; 195 196 //psPolynomial2DtoMetadata 197 //Return a valid metadata containing a polynomial-metadata structure 198 { 199 ok( psPolynomial2DtoMetadata(md, p2d, "polyMD"), 200 "psPolynomial2DtoMetadata: return true for valid inputs."); 201 202 // psMetadataConfigWrite (md, "test.md"); 203 204 //XXX ok (0, "these tests are relying on the ORDER of the MD components not the NAMES"); 205 //XXX ok (0, "these seem like irrelevant tests"); 206 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 207 skip_start( polyMDtemp == NULL , 1, 208 "Skipping 1 tests because psPolynomial2DtoMetadata has errors"); 209 psMetadataItem *polyItem = psMetadataGet(polyMDtemp, 0); 210 skip_start( polyItem == NULL, 2, 211 "Skipping 2 tests because psPolynomial2DtoMetadata has errors in order elements"); 212 ok( !strncmp(polyItem->name, "NORDER_X", 10) && polyItem->data.S32 == 1, 213 "psPolynomial2DtoMetadata: return correct number of x orders."); 214 polyItem = psMetadataGet(polyMDtemp, 1); 215 ok( !strncmp(polyItem->name, "NORDER_Y", 10) && polyItem->data.S32 == 1, 216 "psPolynomial2DtoMetadata: return correct number of y orders."); 217 skip_end(); 218 polyItem = psMetadataGet(polyMDtemp, 2); 219 skip_start( polyItem == NULL, 2, 220 "Skipping 2 tests because psPolynomial2DtoMetadata has errors in coeff elements"); 221 ok( !strncmp(polyItem->name, "VAL_X00_Y00", 14) && 222 abs(polyItem->data.F64-1.1) < DBL_EPSILON, 223 "psPolynomial2DtoMetadata: return correct first element."); 224 polyItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL-1); 225 ok( !strncmp(polyItem->name, "ERR_X01_Y01", 14) && 226 abs(polyItem->data.F64-0.4) < DBL_EPSILON, 227 "psPolynomial2DtoMetadata: return correct last element."); 228 skip_end(); 229 skip_end(); 230 } 231 232 //psPolynomial2DtoMetadata 233 //Return a valid metadata containing a polynomial-metadata structure 234 { 235 note ("example of 2DtoMD using the names not the sequence"); 236 237 ok( psPolynomial2DtoMetadata(md, p2d, "polyMD"), 238 "psPolynomial2DtoMetadata: return true for valid inputs."); 239 240 // psMetadataConfigWrite (md, "test.md"); 241 242 // of the components. these seem like irrelevant tests. 243 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 244 skip_start( polyMDtemp == NULL , 1, 245 "Skipping 1 tests because psPolynomial2DtoMetadata has errors"); 246 247 bool status; 248 int nX = psMetadataLookupS32(&status, polyMDtemp, "NORDER_X"); 249 ok(status, 250 "psPolynomial2DtoMetadata: found NORDER_X"); 251 ok(nX == 1, 252 "psPolynomial2DtoMetadata: NORDER_X is 1"); 253 254 int nY = psMetadataLookupS32(&status, polyMDtemp, "NORDER_Y"); 255 ok(status, 256 "psPolynomial2DtoMetadata: found NORDER_Y"); 257 ok(nY == 1, 258 "psPolynomial2DtoMetadata: NORDER_Y is 1"); 259 260 double val; 261 val = psMetadataLookupF64(&status, polyMDtemp, "VAL_X00_Y00"); 262 ok(status, 263 "psPolynomial2DtoMetadata: found VAL_X00_Y00"); 264 is_double(val, 1.1, 265 "psPolynomial2DtoMetadata: VAL_X00_Y00 is %lf", val); 266 267 val = psMetadataLookupF64(&status, polyMDtemp, "VAL_X01_Y01"); 268 ok(status, 269 "psPolynomial2DtoMetadata: found VAL_X01_Y01"); 270 is_double(val, 4.4, 271 "psPolynomial2DtoMetadata: VAL_X01_Y01 is %lf", val); 272 273 skip_end(); 274 } 275 276 //Return false for no-name polynomial 277 { 278 ok( !psPolynomial2DtoMetadata(md, p2d, ""), 279 "psPolynomial2DtoMetadata: return false for no-name."); 280 } 281 //Return false for NULL-name polynomial 282 { 283 ok( !psPolynomial2DtoMetadata(md, p2d, NULL), 284 "psPolynomial2DtoMetadata: return false for NULL name input."); 285 } 286 //Return false for NULL metadata input 287 { 288 ok( !psPolynomial2DtoMetadata(NULL, p2d, "polyMD"), 289 "psPolynomial2DtoMetadata: return false for NULL metadata input."); 290 } 291 //Return false for NULL polynomial input 292 { 293 ok( !psPolynomial2DtoMetadata(md, NULL, "polyMD"), 294 "psPolynomial2DtoMetadata: return false for NULL polynomial input."); 295 } 296 //Return true for polynomial with 1 element, a constant 297 { 298 psPolynomial2D *constPoly = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 0, 0); 299 constPoly->coeff[0][0] = 6.66; 300 ok( psPolynomial2DtoMetadata(md, constPoly, "polyMD"), 301 "psPolynomial2DtoMetadata: return true for constant polynomial (1 element != 0)."); 302 psFree(constPoly); 303 } 304 //Return false for non-ordinary polynomial 305 { 306 psPolynomial2D *p2d2 = psPolynomial2DAlloc(PS_POLYNOMIAL_CHEB, 1, 1); 307 p2d2->coeff[0][0] = 1.1; 308 ok( !psPolynomial2DtoMetadata(md, p2d2, "polyMD"), 309 "psPolynomial2DtoMetadata: return false for chebyshev polynomial"); 310 psFree(p2d2); 311 } 312 313 //psPolynomial2DfromMetadata Tests 314 //Return NULL for NULL metadata input. 315 { 316 psPolynomial2D *emptyPoly2D = NULL; 317 emptyPoly2D = psPolynomial2DfromMetadata(NULL); 318 ok( emptyPoly2D == NULL, 319 "psPolynomial2DfromMetadata: return NULL for NULL metadata input."); 320 } 321 //Get a polynomial from Metadata. 322 psPolynomial2D *outPoly = NULL; 323 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 324 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 325 { 326 skip_start( outPoly == NULL, 1, 327 "Skipping 1 tests because psPolynomial2DfromMetadata has errors."); 328 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 1 && 329 outPoly->nY == 1 && abs(outPoly->coeff[0][0] - 1.1) < DBL_EPSILON, 330 "psPolynomial2DfromMetadata: return correct polynomial from metadata"); 331 skip_end(); 332 } 333 //Get a polynomial from Metadata with mask[0][0] == 1. 334 psFree(outPoly); 335 outPoly = NULL; 336 psPolynomial2D *maskPoly = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 0, 0); 337 maskPoly->coeff[0][0] = 6.66; 338 maskPoly->mask[0][0] = 1; 339 psMetadata *newmd = psMetadataAlloc(); 340 psPolynomial2DtoMetadata(newmd, maskPoly, "polyMD"); 341 psMetadata *polyMask = psMetadataLookupMetadata(NULL, newmd, "polyMD"); 342 outPoly = psPolynomial2DfromMetadata(polyMask); 343 { 344 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 0 && 345 outPoly->nY == 0 && outPoly->mask[0][0] == 1, 346 "psPolynomial2DfromMetadata: return correct polynomial (w/mask) from metadata"); 347 } 348 psFree(maskPoly); 349 psFree(newmd); 350 //Return NULL for wrong NELEMENTS 351 psMetadataItem *nElementItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL); 352 nElementItem->data.S32 -= 1; 353 psFree(outPoly); 354 outPoly = NULL; 355 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 356 { 357 ok( outPoly == NULL, 358 "psPolynomial2DfromMetadata: " 359 "return NULL for metadata-polynomial with wrong NELEMENTS"); 360 } 361 //Return NULL for missing NELEMENTS 362 psMetadataRemoveIndex(polyMDtemp, PS_LIST_TAIL); 363 psFree(outPoly); 364 outPoly = NULL; 365 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 366 { 367 ok( outPoly == NULL, 368 "psPolynomial2DfromMetadata: " 369 "return NULL for metadata-polynomial with no NELEMENTS"); 370 } 371 372 //Return NULL for polynomial in metadata with no y-order 373 psMetadataRemoveKey(polyMDtemp, "NORDER_Y"); 374 psFree(outPoly); 375 outPoly = NULL; 376 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 377 { 378 ok( outPoly == NULL, 379 "psPolynomial2DfromMetadata: " 380 "return NULL for metadata-polynomial with no y-order"); 381 } 382 //Return NULL for polynomial in metadata with no x-order 383 psMetadataRemoveKey(polyMDtemp, "NORDER_X"); 384 psFree(outPoly); 385 outPoly = NULL; 386 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 387 { 388 ok( outPoly == NULL, 389 "psPolynomial2DfromMetadata: " 390 "return NULL for metadata-polynomial with no x-order"); 391 } 392 393 psFree(outPoly); 394 psFree(p2d); 395 psFree(md); 396 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 397 } 398 399 400 // psPolynomial3DtoMetadata & psPolynomial3DfromMetadata functions 401 { 402 psMemId id = psMemGetId(); 403 psMetadata *md = psMetadataAlloc(); 404 psPolynomial3D *p3d = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 1, 1, 1); 405 p3d->coeff[0][0][0] = 1.1; 406 p3d->coeff[1][0][0] = 2.2; 407 p3d->coeff[0][1][0] = 3.3; 408 p3d->coeff[0][0][1] = 4.4; 409 p3d->coeff[1][1][0] = 5.5; 410 p3d->coeff[1][0][1] = 6.6; 411 p3d->coeff[0][1][1] = 7.7; 412 p3d->coeff[1][1][1] = 8.8; 413 p3d->coeffErr[0][0][0] = 0.1; 414 p3d->coeffErr[1][0][0] = 0.2; 415 p3d->coeffErr[0][1][0] = 0.3; 416 p3d->coeffErr[0][0][1] = 0.4; 417 p3d->coeffErr[1][1][0] = 0.5; 418 p3d->coeffErr[1][0][1] = 0.6; 419 p3d->coeffErr[0][1][1] = 0.7; 420 p3d->coeffErr[1][1][1] = 0.8; 421 422 //psPolynomial3DtoMetadata 423 //Return a valid metadata containing a polynomial-metadata structure 424 { 425 ok( psPolynomial3DtoMetadata(md, p3d, "polyMD"), 426 "psPolynomial3DtoMetadata: return true for valid inputs."); 427 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 428 skip_start( polyMDtemp == NULL , 1, 429 "Skipping 1 tests because psPolynomial3DtoMetadata has errors"); 430 psMetadataItem *polyItem = psMetadataGet(polyMDtemp, 0); 431 skip_start( polyItem == NULL, 2, 432 "Skipping 3 tests because psPolynomial3DtoMetadata has errors in order elements"); 433 ok( !strncmp(polyItem->name, "NORDER_X", 10) && polyItem->data.S32 == 1, 434 "psPolynomial3DtoMetadata: return correct number of x orders."); 435 polyItem = psMetadataGet(polyMDtemp, 1); 436 ok( !strncmp(polyItem->name, "NORDER_Y", 10) && polyItem->data.S32 == 1, 437 "psPolynomial3DtoMetadata: return correct number of y orders."); 438 polyItem = psMetadataGet(polyMDtemp, 2); 439 ok( !strncmp(polyItem->name, "NORDER_Z", 10) && polyItem->data.S32 == 1, 440 "psPolynomial3DtoMetadata: return correct number of z orders."); 441 skip_end(); 442 polyItem = psMetadataGet(polyMDtemp, 3); 443 skip_start( polyItem == NULL, 2, 444 "Skipping 2 tests because psPolynomial3DtoMetadata has errors in coeff elements"); 445 ok( !strncmp(polyItem->name, "VAL_X00_Y00_Z00", 14) && 446 abs(polyItem->data.F64-1.1) < DBL_EPSILON, 447 "psPolynomial3DtoMetadata: return correct first element."); 448 polyItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL-1); 449 ok( !strncmp(polyItem->name, "ERR_X01_Y01_Z01", 14) && 450 abs(polyItem->data.F64-0.8) < DBL_EPSILON, 451 "psPolynomial3DtoMetadata: return correct last element."); 452 skip_end(); 453 skip_end(); 454 } 455 //Return false for no-name polynomial 456 { 457 ok( !psPolynomial3DtoMetadata(md, p3d, ""), 458 "psPolynomial3DtoMetadata: return false for no-name."); 459 } 460 //Return false for NULL-name polynomial 461 { 462 ok( !psPolynomial3DtoMetadata(md, p3d, NULL), 463 "psPolynomial3DtoMetadata: return false for NULL name input."); 464 } 465 //Return false for NULL metadata input 466 { 467 ok( !psPolynomial3DtoMetadata(NULL, p3d, "polyMD"), 468 "psPolynomial3DtoMetadata: return false for NULL metadata input."); 469 } 470 //Return false for NULL polynomial input 471 { 472 ok( !psPolynomial3DtoMetadata(md, NULL, "polyMD"), 473 "psPolynomial3DtoMetadata: return false for NULL polynomial input."); 474 } 475 /* //Return false for empty polynomial 476 { 477 psPolynomial3D *emptyPoly = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0); 478 ok( !psPolynomial3DtoMetadata(md, emptyPoly, "polyMD"), 479 "psPolynomial3DtoMetadata: return false for empty polynomial input."); 480 psFree(emptyPoly); 481 } 482 */ 483 //Return true for polynomial with 1 element, a constant 484 { 485 psPolynomial3D *constPoly = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0); 486 constPoly->coeff[0][0][0] = 6.66; 487 ok( psPolynomial3DtoMetadata(md, constPoly, "polyMD"), 488 "psPolynomial3DtoMetadata: return true for constant polynomial (1 element != 0)."); 489 psFree(constPoly); 490 } 491 //Return false for non-ordinary polynomial 492 { 493 psPolynomial3D *p3d2 = psPolynomial3DAlloc(PS_POLYNOMIAL_CHEB, 1, 1, 1); 494 p3d2->coeff[0][0][0] = 1.1; 495 ok( !psPolynomial3DtoMetadata(md, p3d2, "polyMD"), 496 "psPolynomial3DtoMetadata: return false for chebyshev polynomial"); 497 psFree(p3d2); 498 } 499 500 //psPolynomial3DfromMetadata Tests 501 //Return NULL for NULL metadata input. 502 { 503 psPolynomial3D *emptyPoly2D = NULL; 504 emptyPoly2D = psPolynomial3DfromMetadata(NULL); 505 ok( emptyPoly2D == NULL, 506 "psPolynomial3DfromMetadata: return NULL for NULL metadata input."); 507 } 508 //Get a polynomial from Metadata. 509 psPolynomial3D *outPoly = NULL; 510 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 511 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 512 { 513 skip_start( outPoly == NULL, 1, 514 "Skipping 1 tests because psPolynomial3DfromMetadata has errors."); 515 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 1 && 516 outPoly->nY == 1 && outPoly->nZ == 1 && 517 abs(outPoly->coeff[0][0][0] - 1.1) < DBL_EPSILON, 518 "psPolynomial3DfromMetadata: return correct polynomial from metadata"); 519 skip_end(); 520 } 521 522 //Get a polynomial from Metadata with mask[0][0][0] == 1. 523 psFree(outPoly); 524 outPoly = NULL; 525 psPolynomial3D *maskPoly = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0); 526 maskPoly->coeff[0][0][0] = 6.66; 527 maskPoly->mask[0][0][0] = 1; 528 psMetadata *newmd = psMetadataAlloc(); 529 psPolynomial3DtoMetadata(newmd, maskPoly, "polyMD"); 530 psMetadata *polyMask = psMetadataLookupMetadata(NULL, newmd, "polyMD"); 531 outPoly = psPolynomial3DfromMetadata(polyMask); 532 { 533 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 0 && outPoly->nY == 0 534 && outPoly->nZ == 0 && outPoly->mask[0][0][0] == 1, 535 "psPolynomial3DfromMetadata: return correct polynomial (w/mask) from metadata"); 536 } 537 psFree(maskPoly); 538 psFree(newmd); 539 //Return NULL for wrong NELEMENTS 540 psMetadataItem *nElementItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL); 541 nElementItem->data.S32 -= 1; 542 psFree(outPoly); 543 outPoly = NULL; 544 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 545 { 546 ok( outPoly == NULL, 547 "psPolynomial3DfromMetadata: " 548 "return NULL for metadata-polynomial with wrong NELEMENTS"); 549 } 550 //Return NULL for missing NELEMENTS 551 psMetadataRemoveIndex(polyMDtemp, PS_LIST_TAIL); 552 psFree(outPoly); 553 outPoly = NULL; 554 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 555 { 556 ok( outPoly == NULL, 557 "psPolynomial3DfromMetadata: " 558 "return NULL for metadata-polynomial with no NELEMENTS"); 559 } 560 561 //Return NULL for polynomial in metadata with no z-order 562 psMetadataRemoveKey(polyMDtemp, "NORDER_Z"); 563 psFree(outPoly); 564 outPoly = NULL; 565 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 566 { 567 ok( outPoly == NULL, 568 "psPolynomial3DfromMetadata: return NULL for metadata-polynomial with no z-order"); 569 } 570 //Return NULL for polynomial in metadata with no y-order 571 psMetadataRemoveKey(polyMDtemp, "NORDER_Y"); 572 psFree(outPoly); 573 outPoly = NULL; 574 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 575 { 576 ok( outPoly == NULL, 577 "psPolynomial3DfromMetadata: return NULL for metadata-polynomial with no y-order"); 578 } 579 //Return NULL for polynomial in metadata with no x-order 580 psMetadataRemoveKey(polyMDtemp, "NORDER_X"); 581 psFree(outPoly); 582 outPoly = NULL; 583 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 584 { 585 ok( outPoly == NULL, 586 "psPolynomial3DfromMetadata: return NULL for metadata-polynomial with no x-order"); 587 } 588 589 psFree(outPoly); 590 psFree(p3d); 591 psFree(md); 592 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 593 } 594 595 596 // psPolynomial4DtoMetadata & psPolynomial4DfromMetadata functions 597 { 598 psMemId id = psMemGetId(); 599 psMetadata *md = psMetadataAlloc(); 600 psPolynomial4D *p4d = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 1, 1, 1, 1); 601 p4d->coeff[0][0][0][0] = 1.1; 602 p4d->coeff[0][0][0][1] = 2.2; 603 p4d->coeff[0][0][1][0] = 3.3; 604 p4d->coeff[0][1][0][0] = 4.4; 605 p4d->coeff[1][0][0][0] = 5.5; 606 607 p4d->coeff[0][0][1][1] = 6.6; 608 p4d->coeff[0][1][0][1] = 7.7; 609 p4d->coeff[1][0][0][1] = 8.8; 610 p4d->coeff[0][1][1][0] = 9.9; 611 p4d->coeff[1][0][1][0] = 10.10; 612 p4d->coeff[1][1][0][0] = 11.11; 613 614 p4d->coeff[0][1][1][1] = 12.12; 615 p4d->coeff[1][0][1][1] = 13.13; 616 p4d->coeff[1][1][0][1] = 14.14; 617 p4d->coeff[1][1][1][0] = 15.15; 618 619 p4d->coeff[1][1][1][1] = 16.16; 620 621 p4d->coeffErr[0][0][0][0] = 0.1; 622 p4d->coeffErr[0][0][0][1] = 0.2; 623 p4d->coeffErr[0][0][1][0] = 0.3; 624 p4d->coeffErr[0][1][0][0] = 0.4; 625 p4d->coeffErr[1][0][0][0] = 0.5; 626 627 p4d->coeffErr[0][0][1][1] = 0.6; 628 p4d->coeffErr[0][1][0][1] = 0.7; 629 p4d->coeffErr[1][0][0][1] = 0.8; 630 p4d->coeffErr[0][1][1][0] = 0.9; 631 p4d->coeffErr[1][0][1][0] = 0.10; 632 p4d->coeffErr[1][1][0][0] = 0.11; 633 634 p4d->coeffErr[0][1][1][1] = 0.12; 635 p4d->coeffErr[1][0][1][1] = 0.13; 636 p4d->coeffErr[1][1][0][1] = 0.14; 637 p4d->coeffErr[1][1][1][0] = 0.15; 638 639 p4d->coeffErr[1][1][1][1] = 0.16; 640 641 //psPolynomial4DtoMetadata 642 //Return a valid metadata containing a polynomial-metadata structure 643 { 644 ok( psPolynomial4DtoMetadata(md, p4d, "polyMD"), 645 "psPolynomial4DtoMetadata: return true for valid inputs."); 646 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 647 skip_start( polyMDtemp == NULL , 1, 648 "Skipping 1 tests because psPolynomial4DtoMetadata has errors"); 649 psMetadataItem *polyItem = psMetadataGet(polyMDtemp, 0); 650 skip_start( polyItem == NULL, 2, 651 "Skipping 4 tests because psPolynomial4DtoMetadata has errors in order elements"); 652 ok( !strncmp(polyItem->name, "NORDER_X", 10) && polyItem->data.S32 == 1, 653 "psPolynomial4DtoMetadata: return correct number of x orders."); 654 polyItem = psMetadataGet(polyMDtemp, 1); 655 ok( !strncmp(polyItem->name, "NORDER_Y", 10) && polyItem->data.S32 == 1, 656 "psPolynomial4DtoMetadata: return correct number of y orders."); 657 polyItem = psMetadataGet(polyMDtemp, 2); 658 ok( !strncmp(polyItem->name, "NORDER_Z", 10) && polyItem->data.S32 == 1, 659 "psPolynomial4DtoMetadata: return correct number of z orders."); 660 polyItem = psMetadataGet(polyMDtemp, 3); 661 ok( !strncmp(polyItem->name, "NORDER_T", 10) && polyItem->data.S32 == 1, 662 "psPolynomial4DtoMetadata: return correct number of t orders."); 663 skip_end(); 664 polyItem = psMetadataGet(polyMDtemp, 4); 665 skip_start( polyItem == NULL, 2, 666 "Skipping 2 tests because psPolynomial4DtoMetadata has errors in coeff elements"); 667 ok( !strncmp(polyItem->name, "VAL_X00_Y00_Z00_T00", 14) && 668 abs(polyItem->data.F64-1.1) < DBL_EPSILON, 669 "psPolynomial4DtoMetadata: return correct first element."); 670 polyItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL-1); 671 ok( !strncmp(polyItem->name, "ERR_X01_Y01_Z01_T01", 14) && 672 abs(polyItem->data.F64-0.16) < DBL_EPSILON, 673 "psPolynomial4DtoMetadata: return correct last element."); 674 skip_end(); 675 skip_end(); 676 } 677 //Return false for no-name polynomial 678 { 679 ok( !psPolynomial4DtoMetadata(md, p4d, ""), 680 "psPolynomial4DtoMetadata: return false for no-name."); 681 } 682 //Return false for NULL-name polynomial 683 { 684 ok( !psPolynomial4DtoMetadata(md, p4d, NULL), 685 "psPolynomial4DtoMetadata: return false for NULL name input."); 686 } 687 //Return false for NULL metadata input 688 { 689 ok( !psPolynomial4DtoMetadata(NULL, p4d, "polyMD"), 690 "psPolynomial4DtoMetadata: return false for NULL metadata input."); 691 } 692 //Return false for NULL polynomial input 693 { 694 ok( !psPolynomial4DtoMetadata(md, NULL, "polyMD"), 695 "psPolynomial4DtoMetadata: return false for NULL polynomial input."); 696 } 697 /* //Return false for empty polynomial 698 { 699 psPolynomial4D *emptyPoly = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0, 0); 700 ok( !psPolynomial4DtoMetadata(md, emptyPoly, "polyMD"), 701 "psPolynomial4DtoMetadata: return false for empty polynomial input."); 702 psFree(emptyPoly); 703 } 704 */ 705 //Return true for polynomial with 1 element, a constant 706 { 707 psPolynomial4D *constPoly = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0, 0); 708 constPoly->coeff[0][0][0][0] = 6.66; 709 ok( psPolynomial4DtoMetadata(md, constPoly, "polyMD"), 710 "psPolynomial4DtoMetadata: return true for constant polynomial (1 element != 0)."); 711 psFree(constPoly); 712 } 713 //Return false for non-ordinary polynomial 714 { 715 psPolynomial4D *p4d2 = psPolynomial4DAlloc(PS_POLYNOMIAL_CHEB, 1, 1, 1, 1); 716 p4d2->coeff[0][0][0][0] = 1.1; 717 ok( !psPolynomial4DtoMetadata(md, p4d2, "polyMD"), 718 "psPolynomial4DtoMetadata: return false for chebyshev polynomial"); 719 psFree(p4d2); 720 } 721 722 //psPolynomial4DfromMetadata Tests 723 //Return NULL for NULL metadata input. 724 { 725 psPolynomial4D *emptyPoly2D = NULL; 726 emptyPoly2D = psPolynomial4DfromMetadata(NULL); 727 ok( emptyPoly2D == NULL, 728 "psPolynomial4DfromMetadata: return NULL for NULL metadata input."); 729 } 730 //Get a polynomial from Metadata. 731 psPolynomial4D *outPoly = NULL; 732 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 733 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 734 { 735 skip_start( outPoly == NULL, 1, 736 "Skipping 1 tests because psPolynomial4DfromMetadata has errors."); 737 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 1 && 738 outPoly->nY == 1 && outPoly->nZ == 1 && outPoly->nT == 1 && 739 abs(outPoly->coeff[0][0][0][0] - 1.1) < DBL_EPSILON, 740 "psPolynomial4DfromMetadata: return correct polynomial from metadata"); 741 skip_end(); 742 } 743 //Get a polynomial from Metadata with mask[0][0][0][0] == 1. 744 psFree(outPoly); 745 outPoly = NULL; 746 psPolynomial4D *maskPoly = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0, 0); 747 maskPoly->coeff[0][0][0][0] = 6.66; 748 maskPoly->mask[0][0][0][0] = 1; 749 psMetadata *newmd = psMetadataAlloc(); 750 psPolynomial4DtoMetadata(newmd, maskPoly, "polyMD"); 751 psMetadata *polyMask = psMetadataLookupMetadata(NULL, newmd, "polyMD"); 752 outPoly = psPolynomial4DfromMetadata(polyMask); 753 { 754 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 0 && outPoly->nY == 0 755 && outPoly->nZ == 0 && outPoly->nT == 0 && outPoly->mask[0][0][0][0] == 1, 756 "psPolynomial4DfromMetadata: return correct polynomial (w/mask) from metadata"); 757 } 758 psFree(maskPoly); 759 psFree(newmd); 760 //Return NULL for wrong NELEMENTS 761 psMetadataItem *nElementItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL); 762 nElementItem->data.S32 -= 1; 763 psFree(outPoly); 764 outPoly = NULL; 765 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 766 { 767 ok( outPoly == NULL, 768 "psPolynomial4DfromMetadata: " 769 "return NULL for metadata-polynomial with wrong NELEMENTS"); 770 } 771 //Return NULL for missing NELEMENTS 772 psMetadataRemoveIndex(polyMDtemp, PS_LIST_TAIL); 773 psFree(outPoly); 774 outPoly = NULL; 775 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 776 { 777 ok( outPoly == NULL, 778 "psPolynomial4DfromMetadata: " 779 "return NULL for metadata-polynomial with no NELEMENTS"); 780 } 781 782 //Return NULL for polynomial in metadata with no t-order 783 psMetadataRemoveKey(polyMDtemp, "NORDER_T"); 784 psFree(outPoly); 785 outPoly = NULL; 786 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 787 { 788 ok( outPoly == NULL, 789 "psPolynomial4DfromMetadata: return NULL for metadata-polynomial with no t-order"); 790 } 791 //Return NULL for polynomial in metadata with no z-order 792 psMetadataRemoveKey(polyMDtemp, "NORDER_Z"); 793 psFree(outPoly); 794 outPoly = NULL; 795 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 796 { 797 ok( outPoly == NULL, 798 "psPolynomial4DfromMetadata: return NULL for metadata-polynomial with no z-order"); 799 } 800 //Return NULL for polynomial in metadata with no y-order 801 psMetadataRemoveKey(polyMDtemp, "NORDER_Y"); 802 psFree(outPoly); 803 outPoly = NULL; 804 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 805 { 806 ok( outPoly == NULL, 807 "psPolynomial4DfromMetadata: return NULL for metadata-polynomial with no y-order"); 808 } 809 //Return NULL for polynomial in metadata with no x-order 810 psMetadataRemoveKey(polyMDtemp, "NORDER_X"); 811 psFree(outPoly); 812 outPoly = NULL; 813 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 814 { 815 ok( outPoly == NULL, 816 "psPolynomial4DfromMetadata: return NULL for metadata-polynomial with no x-order"); 817 } 818 819 psFree(outPoly); 820 psFree(p4d); 821 psFree(md); 822 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 195 823 } 196 824 } 197 198 void test2Dcase(void) 199 { 200 note(" >>>Test 2: psPolynomial2DtoMetadata & psPolynomial2DfromMetadata functions"); 201 psMetadata *md = psMetadataAlloc(); 202 psPolynomial2D *p2d = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 1, 1); 203 p2d->coeff[0][0] = 1.1; 204 p2d->coeff[0][1] = 2.2; 205 p2d->coeff[1][0] = 3.3; 206 p2d->coeff[1][1] = 4.4; 207 p2d->coeffErr[0][0] = 0.1; 208 p2d->coeffErr[0][1] = 0.2; 209 p2d->coeffErr[1][0] = 0.3; 210 p2d->coeffErr[1][1] = 0.4; 211 212 //psPolynomial2DtoMetadata 213 //Return a valid metadata containing a polynomial-metadata structure 214 { 215 ok( psPolynomial2DtoMetadata(md, p2d, "polyMD"), 216 "psPolynomial2DtoMetadata: return true for valid inputs."); 217 218 // psMetadataConfigWrite (md, "test.md"); 219 220 //XXX ok (0, "these tests are relying on the ORDER of the MD components not the NAMES"); 221 //XXX ok (0, "these seem like irrelevant tests"); 222 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 223 skip_start( polyMDtemp == NULL , 1, 224 "Skipping 1 tests because psPolynomial2DtoMetadata has errors"); 225 psMetadataItem *polyItem = psMetadataGet(polyMDtemp, 0); 226 skip_start( polyItem == NULL, 2, 227 "Skipping 2 tests because psPolynomial2DtoMetadata has errors in order elements"); 228 ok( !strncmp(polyItem->name, "NORDER_X", 10) && polyItem->data.S32 == 1, 229 "psPolynomial2DtoMetadata: return correct number of x orders."); 230 polyItem = psMetadataGet(polyMDtemp, 1); 231 ok( !strncmp(polyItem->name, "NORDER_Y", 10) && polyItem->data.S32 == 1, 232 "psPolynomial2DtoMetadata: return correct number of y orders."); 233 skip_end(); 234 polyItem = psMetadataGet(polyMDtemp, 2); 235 skip_start( polyItem == NULL, 2, 236 "Skipping 2 tests because psPolynomial2DtoMetadata has errors in coeff elements"); 237 ok( !strncmp(polyItem->name, "VAL_X00_Y00", 14) && 238 abs(polyItem->data.F64-1.1) < DBL_EPSILON, 239 "psPolynomial2DtoMetadata: return correct first element."); 240 polyItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL-1); 241 ok( !strncmp(polyItem->name, "ERR_X01_Y01", 14) && 242 abs(polyItem->data.F64-0.4) < DBL_EPSILON, 243 "psPolynomial2DtoMetadata: return correct last element."); 244 skip_end(); 245 skip_end(); 246 } 247 248 //psPolynomial2DtoMetadata 249 //Return a valid metadata containing a polynomial-metadata structure 250 { 251 note ("example of 2DtoMD using the names not the sequence"); 252 253 ok( psPolynomial2DtoMetadata(md, p2d, "polyMD"), 254 "psPolynomial2DtoMetadata: return true for valid inputs."); 255 256 // psMetadataConfigWrite (md, "test.md"); 257 258 // of the components. these seem like irrelevant tests. 259 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 260 skip_start( polyMDtemp == NULL , 1, 261 "Skipping 1 tests because psPolynomial2DtoMetadata has errors"); 262 263 bool status; 264 int nX = psMetadataLookupS32(&status, polyMDtemp, "NORDER_X"); 265 ok(status, 266 "psPolynomial2DtoMetadata: found NORDER_X"); 267 ok(nX == 1, 268 "psPolynomial2DtoMetadata: NORDER_X is 1"); 269 270 int nY = psMetadataLookupS32(&status, polyMDtemp, "NORDER_Y"); 271 ok(status, 272 "psPolynomial2DtoMetadata: found NORDER_Y"); 273 ok(nY == 1, 274 "psPolynomial2DtoMetadata: NORDER_Y is 1"); 275 276 double val; 277 val = psMetadataLookupF64(&status, polyMDtemp, "VAL_X00_Y00"); 278 ok(status, 279 "psPolynomial2DtoMetadata: found VAL_X00_Y00"); 280 is_double(val, 1.1, 281 "psPolynomial2DtoMetadata: VAL_X00_Y00 is %lf", val); 282 283 val = psMetadataLookupF64(&status, polyMDtemp, "VAL_X01_Y01"); 284 ok(status, 285 "psPolynomial2DtoMetadata: found VAL_X01_Y01"); 286 is_double(val, 4.4, 287 "psPolynomial2DtoMetadata: VAL_X01_Y01 is %lf", val); 288 289 skip_end(); 290 } 291 292 //Return false for no-name polynomial 293 { 294 ok( !psPolynomial2DtoMetadata(md, p2d, ""), 295 "psPolynomial2DtoMetadata: return false for no-name."); 296 } 297 //Return false for NULL-name polynomial 298 { 299 ok( !psPolynomial2DtoMetadata(md, p2d, NULL), 300 "psPolynomial2DtoMetadata: return false for NULL name input."); 301 } 302 //Return false for NULL metadata input 303 { 304 ok( !psPolynomial2DtoMetadata(NULL, p2d, "polyMD"), 305 "psPolynomial2DtoMetadata: return false for NULL metadata input."); 306 } 307 //Return false for NULL polynomial input 308 { 309 ok( !psPolynomial2DtoMetadata(md, NULL, "polyMD"), 310 "psPolynomial2DtoMetadata: return false for NULL polynomial input."); 311 } 312 //Return true for polynomial with 1 element, a constant 313 { 314 psPolynomial2D *constPoly = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 0, 0); 315 constPoly->coeff[0][0] = 6.66; 316 ok( psPolynomial2DtoMetadata(md, constPoly, "polyMD"), 317 "psPolynomial2DtoMetadata: return true for constant polynomial (1 element != 0)."); 318 psFree(constPoly); 319 } 320 //Return false for non-ordinary polynomial 321 { 322 psPolynomial2D *p2d2 = psPolynomial2DAlloc(PS_POLYNOMIAL_CHEB, 1, 1); 323 p2d2->coeff[0][0] = 1.1; 324 ok( !psPolynomial2DtoMetadata(md, p2d2, "polyMD"), 325 "psPolynomial2DtoMetadata: return false for chebyshev polynomial"); 326 psFree(p2d2); 327 } 328 329 //psPolynomial2DfromMetadata Tests 330 //Return NULL for NULL metadata input. 331 { 332 psPolynomial2D *emptyPoly2D = NULL; 333 emptyPoly2D = psPolynomial2DfromMetadata(NULL); 334 ok( emptyPoly2D == NULL, 335 "psPolynomial2DfromMetadata: return NULL for NULL metadata input."); 336 } 337 //Get a polynomial from Metadata. 338 psPolynomial2D *outPoly = NULL; 339 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 340 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 341 { 342 skip_start( outPoly == NULL, 1, 343 "Skipping 1 tests because psPolynomial2DfromMetadata has errors."); 344 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 1 && 345 outPoly->nY == 1 && abs(outPoly->coeff[0][0] - 1.1) < DBL_EPSILON, 346 "psPolynomial2DfromMetadata: return correct polynomial from metadata"); 347 skip_end(); 348 } 349 //Get a polynomial from Metadata with mask[0][0] == 1. 350 psFree(outPoly); 351 outPoly = NULL; 352 psPolynomial2D *maskPoly = psPolynomial2DAlloc(PS_POLYNOMIAL_ORD, 0, 0); 353 maskPoly->coeff[0][0] = 6.66; 354 maskPoly->mask[0][0] = 1; 355 psMetadata *newmd = psMetadataAlloc(); 356 psPolynomial2DtoMetadata(newmd, maskPoly, "polyMD"); 357 psMetadata *polyMask = psMetadataLookupMetadata(NULL, newmd, "polyMD"); 358 outPoly = psPolynomial2DfromMetadata(polyMask); 359 { 360 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 0 && 361 outPoly->nY == 0 && outPoly->mask[0][0] == 1, 362 "psPolynomial2DfromMetadata: return correct polynomial (w/mask) from metadata"); 363 } 364 psFree(maskPoly); 365 psFree(newmd); 366 //Return NULL for wrong NELEMENTS 367 psMetadataItem *nElementItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL); 368 nElementItem->data.S32 -= 1; 369 psFree(outPoly); 370 outPoly = NULL; 371 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 372 { 373 ok( outPoly == NULL, 374 "psPolynomial2DfromMetadata: " 375 "return NULL for metadata-polynomial with wrong NELEMENTS"); 376 } 377 //Return NULL for missing NELEMENTS 378 psMetadataRemoveIndex(polyMDtemp, PS_LIST_TAIL); 379 psFree(outPoly); 380 outPoly = NULL; 381 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 382 { 383 ok( outPoly == NULL, 384 "psPolynomial2DfromMetadata: " 385 "return NULL for metadata-polynomial with no NELEMENTS"); 386 } 387 388 //Return NULL for polynomial in metadata with no y-order 389 psMetadataRemoveKey(polyMDtemp, "NORDER_Y"); 390 psFree(outPoly); 391 outPoly = NULL; 392 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 393 { 394 ok( outPoly == NULL, 395 "psPolynomial2DfromMetadata: " 396 "return NULL for metadata-polynomial with no y-order"); 397 } 398 //Return NULL for polynomial in metadata with no x-order 399 psMetadataRemoveKey(polyMDtemp, "NORDER_X"); 400 psFree(outPoly); 401 outPoly = NULL; 402 outPoly = psPolynomial2DfromMetadata(polyMDtemp); 403 { 404 ok( outPoly == NULL, 405 "psPolynomial2DfromMetadata: " 406 "return NULL for metadata-polynomial with no x-order"); 407 } 408 409 //Check for Memory leaks 410 { 411 psFree(outPoly); 412 psFree(p2d); 413 psFree(md); 414 checkMem(); 415 } 416 } 417 418 void test3Dcase(void) 419 { 420 note(" >>>Test 3: psPolynomial3DtoMetadata & psPolynomial3DfromMetadata functions"); 421 psMetadata *md = psMetadataAlloc(); 422 psPolynomial3D *p3d = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 1, 1, 1); 423 p3d->coeff[0][0][0] = 1.1; 424 p3d->coeff[1][0][0] = 2.2; 425 p3d->coeff[0][1][0] = 3.3; 426 p3d->coeff[0][0][1] = 4.4; 427 p3d->coeff[1][1][0] = 5.5; 428 p3d->coeff[1][0][1] = 6.6; 429 p3d->coeff[0][1][1] = 7.7; 430 p3d->coeff[1][1][1] = 8.8; 431 p3d->coeffErr[0][0][0] = 0.1; 432 p3d->coeffErr[1][0][0] = 0.2; 433 p3d->coeffErr[0][1][0] = 0.3; 434 p3d->coeffErr[0][0][1] = 0.4; 435 p3d->coeffErr[1][1][0] = 0.5; 436 p3d->coeffErr[1][0][1] = 0.6; 437 p3d->coeffErr[0][1][1] = 0.7; 438 p3d->coeffErr[1][1][1] = 0.8; 439 440 //psPolynomial3DtoMetadata 441 //Return a valid metadata containing a polynomial-metadata structure 442 { 443 ok( psPolynomial3DtoMetadata(md, p3d, "polyMD"), 444 "psPolynomial3DtoMetadata: return true for valid inputs."); 445 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 446 skip_start( polyMDtemp == NULL , 1, 447 "Skipping 1 tests because psPolynomial3DtoMetadata has errors"); 448 psMetadataItem *polyItem = psMetadataGet(polyMDtemp, 0); 449 skip_start( polyItem == NULL, 2, 450 "Skipping 3 tests because psPolynomial3DtoMetadata has errors in order elements"); 451 ok( !strncmp(polyItem->name, "NORDER_X", 10) && polyItem->data.S32 == 1, 452 "psPolynomial3DtoMetadata: return correct number of x orders."); 453 polyItem = psMetadataGet(polyMDtemp, 1); 454 ok( !strncmp(polyItem->name, "NORDER_Y", 10) && polyItem->data.S32 == 1, 455 "psPolynomial3DtoMetadata: return correct number of y orders."); 456 polyItem = psMetadataGet(polyMDtemp, 2); 457 ok( !strncmp(polyItem->name, "NORDER_Z", 10) && polyItem->data.S32 == 1, 458 "psPolynomial3DtoMetadata: return correct number of z orders."); 459 skip_end(); 460 polyItem = psMetadataGet(polyMDtemp, 3); 461 skip_start( polyItem == NULL, 2, 462 "Skipping 2 tests because psPolynomial3DtoMetadata has errors in coeff elements"); 463 ok( !strncmp(polyItem->name, "VAL_X00_Y00_Z00", 14) && 464 abs(polyItem->data.F64-1.1) < DBL_EPSILON, 465 "psPolynomial3DtoMetadata: return correct first element."); 466 polyItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL-1); 467 ok( !strncmp(polyItem->name, "ERR_X01_Y01_Z01", 14) && 468 abs(polyItem->data.F64-0.8) < DBL_EPSILON, 469 "psPolynomial3DtoMetadata: return correct last element."); 470 skip_end(); 471 skip_end(); 472 } 473 //Return false for no-name polynomial 474 { 475 ok( !psPolynomial3DtoMetadata(md, p3d, ""), 476 "psPolynomial3DtoMetadata: return false for no-name."); 477 } 478 //Return false for NULL-name polynomial 479 { 480 ok( !psPolynomial3DtoMetadata(md, p3d, NULL), 481 "psPolynomial3DtoMetadata: return false for NULL name input."); 482 } 483 //Return false for NULL metadata input 484 { 485 ok( !psPolynomial3DtoMetadata(NULL, p3d, "polyMD"), 486 "psPolynomial3DtoMetadata: return false for NULL metadata input."); 487 } 488 //Return false for NULL polynomial input 489 { 490 ok( !psPolynomial3DtoMetadata(md, NULL, "polyMD"), 491 "psPolynomial3DtoMetadata: return false for NULL polynomial input."); 492 } 493 /* //Return false for empty polynomial 494 { 495 psPolynomial3D *emptyPoly = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0); 496 ok( !psPolynomial3DtoMetadata(md, emptyPoly, "polyMD"), 497 "psPolynomial3DtoMetadata: return false for empty polynomial input."); 498 psFree(emptyPoly); 499 } 500 */ 501 //Return true for polynomial with 1 element, a constant 502 { 503 psPolynomial3D *constPoly = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0); 504 constPoly->coeff[0][0][0] = 6.66; 505 ok( psPolynomial3DtoMetadata(md, constPoly, "polyMD"), 506 "psPolynomial3DtoMetadata: return true for constant polynomial (1 element != 0)."); 507 psFree(constPoly); 508 } 509 //Return false for non-ordinary polynomial 510 { 511 psPolynomial3D *p3d2 = psPolynomial3DAlloc(PS_POLYNOMIAL_CHEB, 1, 1, 1); 512 p3d2->coeff[0][0][0] = 1.1; 513 ok( !psPolynomial3DtoMetadata(md, p3d2, "polyMD"), 514 "psPolynomial3DtoMetadata: return false for chebyshev polynomial"); 515 psFree(p3d2); 516 } 517 518 //psPolynomial3DfromMetadata Tests 519 //Return NULL for NULL metadata input. 520 { 521 psPolynomial3D *emptyPoly2D = NULL; 522 emptyPoly2D = psPolynomial3DfromMetadata(NULL); 523 ok( emptyPoly2D == NULL, 524 "psPolynomial3DfromMetadata: return NULL for NULL metadata input."); 525 } 526 //Get a polynomial from Metadata. 527 psPolynomial3D *outPoly = NULL; 528 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 529 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 530 { 531 skip_start( outPoly == NULL, 1, 532 "Skipping 1 tests because psPolynomial3DfromMetadata has errors."); 533 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 1 && 534 outPoly->nY == 1 && outPoly->nZ == 1 && 535 abs(outPoly->coeff[0][0][0] - 1.1) < DBL_EPSILON, 536 "psPolynomial3DfromMetadata: return correct polynomial from metadata"); 537 skip_end(); 538 } 539 540 //Get a polynomial from Metadata with mask[0][0][0] == 1. 541 psFree(outPoly); 542 outPoly = NULL; 543 psPolynomial3D *maskPoly = psPolynomial3DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0); 544 maskPoly->coeff[0][0][0] = 6.66; 545 maskPoly->mask[0][0][0] = 1; 546 psMetadata *newmd = psMetadataAlloc(); 547 psPolynomial3DtoMetadata(newmd, maskPoly, "polyMD"); 548 psMetadata *polyMask = psMetadataLookupMetadata(NULL, newmd, "polyMD"); 549 outPoly = psPolynomial3DfromMetadata(polyMask); 550 { 551 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 0 && outPoly->nY == 0 552 && outPoly->nZ == 0 && outPoly->mask[0][0][0] == 1, 553 "psPolynomial3DfromMetadata: return correct polynomial (w/mask) from metadata"); 554 } 555 psFree(maskPoly); 556 psFree(newmd); 557 //Return NULL for wrong NELEMENTS 558 psMetadataItem *nElementItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL); 559 nElementItem->data.S32 -= 1; 560 psFree(outPoly); 561 outPoly = NULL; 562 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 563 { 564 ok( outPoly == NULL, 565 "psPolynomial3DfromMetadata: " 566 "return NULL for metadata-polynomial with wrong NELEMENTS"); 567 } 568 //Return NULL for missing NELEMENTS 569 psMetadataRemoveIndex(polyMDtemp, PS_LIST_TAIL); 570 psFree(outPoly); 571 outPoly = NULL; 572 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 573 { 574 ok( outPoly == NULL, 575 "psPolynomial3DfromMetadata: " 576 "return NULL for metadata-polynomial with no NELEMENTS"); 577 } 578 579 //Return NULL for polynomial in metadata with no z-order 580 psMetadataRemoveKey(polyMDtemp, "NORDER_Z"); 581 psFree(outPoly); 582 outPoly = NULL; 583 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 584 { 585 ok( outPoly == NULL, 586 "psPolynomial3DfromMetadata: return NULL for metadata-polynomial with no z-order"); 587 } 588 //Return NULL for polynomial in metadata with no y-order 589 psMetadataRemoveKey(polyMDtemp, "NORDER_Y"); 590 psFree(outPoly); 591 outPoly = NULL; 592 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 593 { 594 ok( outPoly == NULL, 595 "psPolynomial3DfromMetadata: return NULL for metadata-polynomial with no y-order"); 596 } 597 //Return NULL for polynomial in metadata with no x-order 598 psMetadataRemoveKey(polyMDtemp, "NORDER_X"); 599 psFree(outPoly); 600 outPoly = NULL; 601 outPoly = psPolynomial3DfromMetadata(polyMDtemp); 602 { 603 ok( outPoly == NULL, 604 "psPolynomial3DfromMetadata: return NULL for metadata-polynomial with no x-order"); 605 } 606 607 //Check for Memory leaks 608 { 609 psFree(outPoly); 610 psFree(p3d); 611 psFree(md); 612 checkMem(); 613 } 614 } 615 616 void test4Dcase(void) 617 { 618 note(" >>>Test 4: psPolynomial4DtoMetadata & psPolynomial4DfromMetadata functions"); 619 psMetadata *md = psMetadataAlloc(); 620 psPolynomial4D *p4d = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 1, 1, 1, 1); 621 p4d->coeff[0][0][0][0] = 1.1; 622 p4d->coeff[0][0][0][1] = 2.2; 623 p4d->coeff[0][0][1][0] = 3.3; 624 p4d->coeff[0][1][0][0] = 4.4; 625 p4d->coeff[1][0][0][0] = 5.5; 626 627 p4d->coeff[0][0][1][1] = 6.6; 628 p4d->coeff[0][1][0][1] = 7.7; 629 p4d->coeff[1][0][0][1] = 8.8; 630 p4d->coeff[0][1][1][0] = 9.9; 631 p4d->coeff[1][0][1][0] = 10.10; 632 p4d->coeff[1][1][0][0] = 11.11; 633 634 p4d->coeff[0][1][1][1] = 12.12; 635 p4d->coeff[1][0][1][1] = 13.13; 636 p4d->coeff[1][1][0][1] = 14.14; 637 p4d->coeff[1][1][1][0] = 15.15; 638 639 p4d->coeff[1][1][1][1] = 16.16; 640 641 p4d->coeffErr[0][0][0][0] = 0.1; 642 p4d->coeffErr[0][0][0][1] = 0.2; 643 p4d->coeffErr[0][0][1][0] = 0.3; 644 p4d->coeffErr[0][1][0][0] = 0.4; 645 p4d->coeffErr[1][0][0][0] = 0.5; 646 647 p4d->coeffErr[0][0][1][1] = 0.6; 648 p4d->coeffErr[0][1][0][1] = 0.7; 649 p4d->coeffErr[1][0][0][1] = 0.8; 650 p4d->coeffErr[0][1][1][0] = 0.9; 651 p4d->coeffErr[1][0][1][0] = 0.10; 652 p4d->coeffErr[1][1][0][0] = 0.11; 653 654 p4d->coeffErr[0][1][1][1] = 0.12; 655 p4d->coeffErr[1][0][1][1] = 0.13; 656 p4d->coeffErr[1][1][0][1] = 0.14; 657 p4d->coeffErr[1][1][1][0] = 0.15; 658 659 p4d->coeffErr[1][1][1][1] = 0.16; 660 661 //psPolynomial4DtoMetadata 662 //Return a valid metadata containing a polynomial-metadata structure 663 { 664 ok( psPolynomial4DtoMetadata(md, p4d, "polyMD"), 665 "psPolynomial4DtoMetadata: return true for valid inputs."); 666 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 667 skip_start( polyMDtemp == NULL , 1, 668 "Skipping 1 tests because psPolynomial4DtoMetadata has errors"); 669 psMetadataItem *polyItem = psMetadataGet(polyMDtemp, 0); 670 skip_start( polyItem == NULL, 2, 671 "Skipping 4 tests because psPolynomial4DtoMetadata has errors in order elements"); 672 ok( !strncmp(polyItem->name, "NORDER_X", 10) && polyItem->data.S32 == 1, 673 "psPolynomial4DtoMetadata: return correct number of x orders."); 674 polyItem = psMetadataGet(polyMDtemp, 1); 675 ok( !strncmp(polyItem->name, "NORDER_Y", 10) && polyItem->data.S32 == 1, 676 "psPolynomial4DtoMetadata: return correct number of y orders."); 677 polyItem = psMetadataGet(polyMDtemp, 2); 678 ok( !strncmp(polyItem->name, "NORDER_Z", 10) && polyItem->data.S32 == 1, 679 "psPolynomial4DtoMetadata: return correct number of z orders."); 680 polyItem = psMetadataGet(polyMDtemp, 3); 681 ok( !strncmp(polyItem->name, "NORDER_T", 10) && polyItem->data.S32 == 1, 682 "psPolynomial4DtoMetadata: return correct number of t orders."); 683 skip_end(); 684 polyItem = psMetadataGet(polyMDtemp, 4); 685 skip_start( polyItem == NULL, 2, 686 "Skipping 2 tests because psPolynomial4DtoMetadata has errors in coeff elements"); 687 ok( !strncmp(polyItem->name, "VAL_X00_Y00_Z00_T00", 14) && 688 abs(polyItem->data.F64-1.1) < DBL_EPSILON, 689 "psPolynomial4DtoMetadata: return correct first element."); 690 polyItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL-1); 691 ok( !strncmp(polyItem->name, "ERR_X01_Y01_Z01_T01", 14) && 692 abs(polyItem->data.F64-0.16) < DBL_EPSILON, 693 "psPolynomial4DtoMetadata: return correct last element."); 694 skip_end(); 695 skip_end(); 696 } 697 //Return false for no-name polynomial 698 { 699 ok( !psPolynomial4DtoMetadata(md, p4d, ""), 700 "psPolynomial4DtoMetadata: return false for no-name."); 701 } 702 //Return false for NULL-name polynomial 703 { 704 ok( !psPolynomial4DtoMetadata(md, p4d, NULL), 705 "psPolynomial4DtoMetadata: return false for NULL name input."); 706 } 707 //Return false for NULL metadata input 708 { 709 ok( !psPolynomial4DtoMetadata(NULL, p4d, "polyMD"), 710 "psPolynomial4DtoMetadata: return false for NULL metadata input."); 711 } 712 //Return false for NULL polynomial input 713 { 714 ok( !psPolynomial4DtoMetadata(md, NULL, "polyMD"), 715 "psPolynomial4DtoMetadata: return false for NULL polynomial input."); 716 } 717 /* //Return false for empty polynomial 718 { 719 psPolynomial4D *emptyPoly = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0, 0); 720 ok( !psPolynomial4DtoMetadata(md, emptyPoly, "polyMD"), 721 "psPolynomial4DtoMetadata: return false for empty polynomial input."); 722 psFree(emptyPoly); 723 } 724 */ 725 //Return true for polynomial with 1 element, a constant 726 { 727 psPolynomial4D *constPoly = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0, 0); 728 constPoly->coeff[0][0][0][0] = 6.66; 729 ok( psPolynomial4DtoMetadata(md, constPoly, "polyMD"), 730 "psPolynomial4DtoMetadata: return true for constant polynomial (1 element != 0)."); 731 psFree(constPoly); 732 } 733 //Return false for non-ordinary polynomial 734 { 735 psPolynomial4D *p4d2 = psPolynomial4DAlloc(PS_POLYNOMIAL_CHEB, 1, 1, 1, 1); 736 p4d2->coeff[0][0][0][0] = 1.1; 737 ok( !psPolynomial4DtoMetadata(md, p4d2, "polyMD"), 738 "psPolynomial4DtoMetadata: return false for chebyshev polynomial"); 739 psFree(p4d2); 740 } 741 742 //psPolynomial4DfromMetadata Tests 743 //Return NULL for NULL metadata input. 744 { 745 psPolynomial4D *emptyPoly2D = NULL; 746 emptyPoly2D = psPolynomial4DfromMetadata(NULL); 747 ok( emptyPoly2D == NULL, 748 "psPolynomial4DfromMetadata: return NULL for NULL metadata input."); 749 } 750 //Get a polynomial from Metadata. 751 psPolynomial4D *outPoly = NULL; 752 psMetadata *polyMDtemp = psMetadataLookupMetadata(NULL, md, "polyMD"); 753 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 754 { 755 skip_start( outPoly == NULL, 1, 756 "Skipping 1 tests because psPolynomial4DfromMetadata has errors."); 757 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 1 && 758 outPoly->nY == 1 && outPoly->nZ == 1 && outPoly->nT == 1 && 759 abs(outPoly->coeff[0][0][0][0] - 1.1) < DBL_EPSILON, 760 "psPolynomial4DfromMetadata: return correct polynomial from metadata"); 761 skip_end(); 762 } 763 //Get a polynomial from Metadata with mask[0][0][0][0] == 1. 764 psFree(outPoly); 765 outPoly = NULL; 766 psPolynomial4D *maskPoly = psPolynomial4DAlloc(PS_POLYNOMIAL_ORD, 0, 0, 0, 0); 767 maskPoly->coeff[0][0][0][0] = 6.66; 768 maskPoly->mask[0][0][0][0] = 1; 769 psMetadata *newmd = psMetadataAlloc(); 770 psPolynomial4DtoMetadata(newmd, maskPoly, "polyMD"); 771 psMetadata *polyMask = psMetadataLookupMetadata(NULL, newmd, "polyMD"); 772 outPoly = psPolynomial4DfromMetadata(polyMask); 773 { 774 ok( outPoly->type == PS_POLYNOMIAL_ORD && outPoly->nX == 0 && outPoly->nY == 0 775 && outPoly->nZ == 0 && outPoly->nT == 0 && outPoly->mask[0][0][0][0] == 1, 776 "psPolynomial4DfromMetadata: return correct polynomial (w/mask) from metadata"); 777 } 778 psFree(maskPoly); 779 psFree(newmd); 780 //Return NULL for wrong NELEMENTS 781 psMetadataItem *nElementItem = psMetadataGet(polyMDtemp, PS_LIST_TAIL); 782 nElementItem->data.S32 -= 1; 783 psFree(outPoly); 784 outPoly = NULL; 785 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 786 { 787 ok( outPoly == NULL, 788 "psPolynomial4DfromMetadata: " 789 "return NULL for metadata-polynomial with wrong NELEMENTS"); 790 } 791 //Return NULL for missing NELEMENTS 792 psMetadataRemoveIndex(polyMDtemp, PS_LIST_TAIL); 793 psFree(outPoly); 794 outPoly = NULL; 795 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 796 { 797 ok( outPoly == NULL, 798 "psPolynomial4DfromMetadata: " 799 "return NULL for metadata-polynomial with no NELEMENTS"); 800 } 801 802 //Return NULL for polynomial in metadata with no t-order 803 psMetadataRemoveKey(polyMDtemp, "NORDER_T"); 804 psFree(outPoly); 805 outPoly = NULL; 806 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 807 { 808 ok( outPoly == NULL, 809 "psPolynomial4DfromMetadata: return NULL for metadata-polynomial with no t-order"); 810 } 811 //Return NULL for polynomial in metadata with no z-order 812 psMetadataRemoveKey(polyMDtemp, "NORDER_Z"); 813 psFree(outPoly); 814 outPoly = NULL; 815 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 816 { 817 ok( outPoly == NULL, 818 "psPolynomial4DfromMetadata: return NULL for metadata-polynomial with no z-order"); 819 } 820 //Return NULL for polynomial in metadata with no y-order 821 psMetadataRemoveKey(polyMDtemp, "NORDER_Y"); 822 psFree(outPoly); 823 outPoly = NULL; 824 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 825 { 826 ok( outPoly == NULL, 827 "psPolynomial4DfromMetadata: return NULL for metadata-polynomial with no y-order"); 828 } 829 //Return NULL for polynomial in metadata with no x-order 830 psMetadataRemoveKey(polyMDtemp, "NORDER_X"); 831 psFree(outPoly); 832 outPoly = NULL; 833 outPoly = psPolynomial4DfromMetadata(polyMDtemp); 834 { 835 ok( outPoly == NULL, 836 "psPolynomial4DfromMetadata: return NULL for metadata-polynomial with no x-order"); 837 } 838 839 //Check for Memory leaks 840 { 841 psFree(outPoly); 842 psFree(p4d); 843 psFree(md); 844 checkMem(); 845 } 846 } 847 848 849 850 825 826 827 828 -
trunk/psLib/test/types/tap_psMetadata_printing.c
r12440 r12781 10 10 * 11 11 */ 12 13 12 #include <fcntl.h> 14 13 #include <unistd.h> 15 14 #include <pslib.h> 16 17 15 #include "tap.h" 18 16 #include "pstap.h" 19 20 static psMetadata *setupMeta(void);21 void testMetaPrint(void);22 void testMetaItemPrint(void);23 24 int main(void)25 {26 plan_tests(29);27 28 note("psMetadataPrint and psMetadataItemPrint tests");29 30 testMetaPrint();31 testMetaItemPrint();32 33 done();34 }35 17 36 18 static psMetadata *setupMeta(void) … … 179 161 } 180 162 181 void testMetaPrint(void) 163 164 int main(void) 182 165 { 183 note(" >>Test 1: psMetadataPrint"); 184 FILE *fd = fopen("psMetadataPrint.out", "w+"); 185 FILE *fd_read = fopen("Makefile", "r"); 186 psMetadata *md = NULL; 187 psMetadata *md2 = NULL; 188 md = setupMeta(); 189 md2 = psMetadataAlloc(); 190 psSphere *sphere = psSphereAlloc(); 191 psMetadataAddPtr(md2, PS_LIST_HEAD, "ptr", PS_DATA_SPHERE, "", sphere); 192 psMetadataAddUnknown(md2, PS_LIST_TAIL, "unknown", 0, "", sphere); 193 194 psImage *image = psImageAlloc(1, 1, PS_TYPE_S32); 195 psImageSet(image, 0, 0, 1); 196 psMetadataAddImage(md2, PS_LIST_TAIL, "image1", 0, "I am an Image", image); 197 198 psHash *hash = psHashAlloc(1); 199 psHashAdd(hash, "hash", image); 200 psMetadataAddHash(md2, PS_LIST_TAIL, "hash1", 0, "I am a Hash", hash); 201 202 psLookupTable *lookup = psLookupTableAlloc("table2.dat", "%s", 0); 203 psMetadataAddLookupTable(md2, PS_LIST_TAIL, "lookup", 0, "I am a LookupTable", lookup); 204 205 psArray *array = psArrayAlloc(1); 206 psArraySet(array, 0, image); 207 psMetadataAddArray(md2, PS_LIST_TAIL, "array", 0, "I am an Array", array); 208 209 psFree(array); 210 psFree(lookup); 211 psFree(image); 212 psFree(hash); 213 214 //Return false for NULL psMetadata input 166 psLogSetFormat("HLNM"); 167 psLogSetLevel(PS_LOG_INFO); 168 plan_tests(30); 169 170 171 // psMetadataPrint 215 172 { 216 ok( !psMetadataPrint(NULL, NULL, 0), 217 "psMetadataPrint: return false for NULL psMetadata input."); 218 } 219 //Return false for read-only file descriptor 220 { 221 ok ( !psMetadataPrint(fd_read, md, 0), 222 "psMetadataPrint: return false for read-only file descriptor."); 223 } 224 fclose(fd_read); 225 //Error and then return true for unprintable datatype (sphere) and DATA_UNKNOWN 226 { 227 ok ( !psMetadataPrint(NULL, md2, 0), 228 "psMetadataPrint: return false for metadata with unknown datatype."); 229 } 230 psFree(md2); 231 232 //Valid case where fd is NULL -> stdout 233 md2 = psMetadataAlloc(); 234 psMetadataAddStr(md2, PS_LIST_HEAD, 235 " >>Hello Wally", 0, "My name is Bubbles", "Pet Me"); 236 { 237 ok ( psMetadataPrint(NULL, md2, 0), 238 "psMetadataPrint: return true for NULL file pointer."); 239 } 240 psFree(md2); 241 //Valid case where fd is "psMetadataPrint.out" 242 { 243 ok ( psMetadataPrint(fd, md, 0), 244 "psMetadataPrint: return true for file='psMetadataPrint.out'."); 245 } 246 247 //Check for Memory Leaks before exit 248 { 173 psMemId id = psMemGetId(); 174 FILE *fd = fopen("psMetadataPrint.out", "w+"); 175 FILE *fd_read = fopen("Makefile", "r"); 176 psMetadata *md = NULL; 177 psMetadata *md2 = NULL; 178 md = setupMeta(); 179 md2 = psMetadataAlloc(); 180 psSphere *sphere = psSphereAlloc(); 181 psMetadataAddPtr(md2, PS_LIST_HEAD, "ptr", PS_DATA_SPHERE, "", sphere); 182 psMetadataAddUnknown(md2, PS_LIST_TAIL, "unknown", 0, "", sphere); 183 184 psImage *image = psImageAlloc(1, 1, PS_TYPE_S32); 185 psImageSet(image, 0, 0, 1); 186 psMetadataAddImage(md2, PS_LIST_TAIL, "image1", 0, "I am an Image", image); 187 188 psHash *hash = psHashAlloc(1); 189 psHashAdd(hash, "hash", image); 190 psMetadataAddHash(md2, PS_LIST_TAIL, "hash1", 0, "I am a Hash", hash); 191 192 psLookupTable *lookup = psLookupTableAlloc("table2.dat", "%s", 0); 193 psMetadataAddLookupTable(md2, PS_LIST_TAIL, "lookup", 0, "I am a LookupTable", lookup); 194 195 psArray *array = psArrayAlloc(1); 196 psArraySet(array, 0, image); 197 psMetadataAddArray(md2, PS_LIST_TAIL, "array", 0, "I am an Array", array); 198 199 psFree(array); 200 psFree(lookup); 201 psFree(image); 202 psFree(hash); 203 204 //Return false for NULL psMetadata input 205 { 206 ok( !psMetadataPrint(NULL, NULL, 0), 207 "psMetadataPrint: return false for NULL psMetadata input."); 208 } 209 //Return false for read-only file descriptor 210 { 211 ok ( !psMetadataPrint(fd_read, md, 0), 212 "psMetadataPrint: return false for read-only file descriptor."); 213 } 214 fclose(fd_read); 215 //Error and then return true for unprintable datatype (sphere) and DATA_UNKNOWN 216 { 217 ok ( !psMetadataPrint(NULL, md2, 0), 218 "psMetadataPrint: return false for metadata with unknown datatype."); 219 } 220 psFree(md2); 221 222 //Valid case where fd is NULL -> stdout 223 md2 = psMetadataAlloc(); 224 psMetadataAddStr(md2, PS_LIST_HEAD, 225 " >>Hello Wally", 0, "My name is Bubbles", "Pet Me"); 226 { 227 ok ( psMetadataPrint(NULL, md2, 0), 228 "psMetadataPrint: return true for NULL file pointer."); 229 } 230 psFree(md2); 231 //Valid case where fd is "psMetadataPrint.out" 232 { 233 ok ( psMetadataPrint(fd, md, 0), 234 "psMetadataPrint: return true for file='psMetadataPrint.out'."); 235 } 236 237 //Check for Memory Leaks before exit 249 238 fclose(fd); 250 remove 251 ("psMetadataPrint.out"); 239 remove("psMetadataPrint.out"); 252 240 psFree(sphere); 253 241 psFree(md); 254 checkMem(); 255 } 256 } 257 258 void testMetaItemPrint(void) 259 { 260 note(" >>Test2: psMetadataItemPrint"); 261 FILE *fd; 262 //bool psMetadataItemPrint(FILE * fd, const char *format, const psMetadataItem* item) 263 fd = fopen("psMetadataItemPrint.out", "w"); 264 psMetadataItem *item1 = psMetadataItemAlloc("bool", PS_DATA_BOOL, "No Comment", true); 265 psMetadataItem *item2 = psMetadataItemAlloc("f32", PS_DATA_F32, "No Comment", 0.66601); 266 psMetadataItem *item3 = psMetadataItemAlloc("string", PS_DATA_STRING, "", "Can't touch this"); 267 psMetadataItem *item4 = psMetadataItemAlloc("U16", PS_DATA_U16, "", 1); 268 psMetadataItem *item5 = psMetadataItemAlloc("string", PS_DATA_U8, "", "a"); 269 270 //Return false for NULL file-pointer 242 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 243 } 244 245 246 // psMetadataItemPrint 271 247 { 272 ok( !psMetadataItemPrint(NULL, "%s", item1), 273 "psMetadataItemPrint: return false for NULL FILE*."); 274 } 275 //Return false for NULL format paramter 276 { 277 ok( !psMetadataItemPrint(fd, NULL, item1), 278 "psMetadataItemPrint: return false for NULL format."); 279 } 280 //Return false for NULL metadataItem 281 { 282 ok( !psMetadataItemPrint(fd, "%s", NULL), 283 "psMetadataItemPrint: return false for NULL psMetadataItem."); 284 } 285 //Return false for incorrect format parameter 286 { 287 ok( !psMetadataItemPrint(fd, "sos \n", item1), 288 "psMetadataItemPrint: return false for incorrect format."); 289 } 290 //Return false for type that doesn't match format (ie, %s for f32 value) 291 { 292 ok( !psMetadataItemPrint(fd, "%s", item2), 293 "psMetadataItemPrint: return false for item that doesn't match format."); 294 } 295 296 //Return false for incorrect format parameter 297 { 298 ok( !psMetadataItemPrint(fd, "%z", item1), 299 "psMetadataItemPrint: return false for incorrect format."); 300 } 301 302 303 //Return true for format parameter containing additional modifiers (F32) 304 { 305 ok( psMetadataItemPrint(fd, "%.3f\n", item2), 306 "psMetadataItemPrint: return true for format with .3 modifier."); 307 } 308 //Return true for valid string input 309 { 310 ok( psMetadataItemPrint(fd, "%s\n", item3), 311 "psMetadataItemPrint: return true for valid string case w/s."); 312 } 313 //Return true for valid ptr input 314 { 315 ok( psMetadataItemPrint(fd, "%p\n", item3), 316 "psMetadataItemPrint: return true for valid ptr case w/p."); 317 } 318 319 //Return true for format = %d, type = int 320 { 321 ok( psMetadataItemPrint(fd, "%d\n", item4), 322 "psMetadataItemPrint: return true for valid case w/d."); 323 } 324 //Return true for format = %i, type = int 325 { 326 ok( psMetadataItemPrint(fd, "%i\n", item4), 327 "psMetadataItemPrint: return true for valid case w/i."); 328 } 329 //Return true for format = %c, type = int 330 { 331 ok( psMetadataItemPrint(fd, "%c\n", item5), 332 "psMetadataItemPrint: return true for valid case w/c."); 333 } 334 //Return true for format = %o, type = int 335 { 336 ok( psMetadataItemPrint(fd, "%o\n", item4), 337 "psMetadataItemPrint: return true for valid case w/d."); 338 } 339 //Return true for format = %u, type = int 340 { 341 ok( psMetadataItemPrint(fd, "%u\n", item4), 342 "psMetadataItemPrint: return true for valid case w/i."); 343 } 344 //Return true for format = %x, type = int 345 { 346 ok( psMetadataItemPrint(fd, "%x\n", item5), 347 "psMetadataItemPrint: return true for valid case w/c."); 348 } 349 //Return true for format = %X, type = int 350 { 351 ok( psMetadataItemPrint(fd, "%X\n", item5), 352 "psMetadataItemPrint: return true for valid case w/c."); 353 } 354 355 //Return true for format = %e, type = int 356 { 357 ok( psMetadataItemPrint(fd, "%.1e\n", item2), 358 "psMetadataItemPrint: return true for valid case w/e."); 359 } 360 //Return true for format = %E, type = int 361 { 362 ok( psMetadataItemPrint(fd, "%.2E\n", item2), 363 "psMetadataItemPrint: return true for valid case w/E."); 364 } 365 //Return true for format = %F, type = int 366 { 367 ok( psMetadataItemPrint(fd, "%.3F\n", item2), 368 "psMetadataItemPrint: return true for valid case w/F."); 369 } 370 //Return true for format = %g, type = int 371 { 372 ok( psMetadataItemPrint(fd, "%.3g\n", item2), 373 "psMetadataItemPrint: return true for valid case w/g."); 374 } 375 //Return true for format = %G, type = int 376 { 377 ok( psMetadataItemPrint(fd, "%.4G\n", item2), 378 "psMetadataItemPrint: return true for valid case w/G."); 379 } 380 //Return true for format = %a, type = int 381 { 382 ok( psMetadataItemPrint(fd, "%.4a\n", item2), 383 "psMetadataItemPrint: return true for valid case w/a."); 384 } 385 //Return true for format = %A, type = int 386 { 387 ok( psMetadataItemPrint(fd, "%A\n", item2), 388 "psMetadataItemPrint: return true for valid case w/A."); 389 } 390 391 //Check for Memory Leaks before exit 392 { 248 psMemId id = psMemGetId(); 249 FILE *fd; 250 fd = fopen("psMetadataItemPrint.out", "w"); 251 psMetadataItem *item1 = psMetadataItemAlloc("bool", PS_DATA_BOOL, "No Comment", true); 252 psMetadataItem *item2 = psMetadataItemAlloc("f32", PS_DATA_F32, "No Comment", 0.66601); 253 psMetadataItem *item3 = psMetadataItemAlloc("string", PS_DATA_STRING, "", "Can't touch this"); 254 psMetadataItem *item4 = psMetadataItemAlloc("U16", PS_DATA_U16, "", 1); 255 psMetadataItem *item5 = psMetadataItemAlloc("string", PS_DATA_U8, "", "a"); 256 257 //Return false for NULL file-pointer 258 { 259 ok( !psMetadataItemPrint(NULL, "%s", item1), 260 "psMetadataItemPrint: return false for NULL FILE*."); 261 } 262 //Return false for NULL format paramter 263 { 264 ok( !psMetadataItemPrint(fd, NULL, item1), 265 "psMetadataItemPrint: return false for NULL format."); 266 } 267 //Return false for NULL metadataItem 268 { 269 ok( !psMetadataItemPrint(fd, "%s", NULL), 270 "psMetadataItemPrint: return false for NULL psMetadataItem."); 271 } 272 //Return false for incorrect format parameter 273 { 274 ok( !psMetadataItemPrint(fd, "sos \n", item1), 275 "psMetadataItemPrint: return false for incorrect format."); 276 } 277 //Return false for type that doesn't match format (ie, %s for f32 value) 278 { 279 ok( !psMetadataItemPrint(fd, "%s", item2), 280 "psMetadataItemPrint: return false for item that doesn't match format."); 281 } 282 283 //Return false for incorrect format parameter 284 { 285 ok( !psMetadataItemPrint(fd, "%z", item1), 286 "psMetadataItemPrint: return false for incorrect format."); 287 } 288 289 290 //Return true for format parameter containing additional modifiers (F32) 291 { 292 ok( psMetadataItemPrint(fd, "%.3f\n", item2), 293 "psMetadataItemPrint: return true for format with .3 modifier."); 294 } 295 //Return true for valid string input 296 { 297 ok( psMetadataItemPrint(fd, "%s\n", item3), 298 "psMetadataItemPrint: return true for valid string case w/s."); 299 } 300 //Return true for valid ptr input 301 { 302 ok( psMetadataItemPrint(fd, "%p\n", item3), 303 "psMetadataItemPrint: return true for valid ptr case w/p."); 304 } 305 306 //Return true for format = %d, type = int 307 { 308 ok( psMetadataItemPrint(fd, "%d\n", item4), 309 "psMetadataItemPrint: return true for valid case w/d."); 310 } 311 //Return true for format = %i, type = int 312 { 313 ok( psMetadataItemPrint(fd, "%i\n", item4), 314 "psMetadataItemPrint: return true for valid case w/i."); 315 } 316 //Return true for format = %c, type = int 317 { 318 ok( psMetadataItemPrint(fd, "%c\n", item5), 319 "psMetadataItemPrint: return true for valid case w/c."); 320 } 321 //Return true for format = %o, type = int 322 { 323 ok( psMetadataItemPrint(fd, "%o\n", item4), 324 "psMetadataItemPrint: return true for valid case w/d."); 325 } 326 //Return true for format = %u, type = int 327 { 328 ok( psMetadataItemPrint(fd, "%u\n", item4), 329 "psMetadataItemPrint: return true for valid case w/i."); 330 } 331 //Return true for format = %x, type = int 332 { 333 ok( psMetadataItemPrint(fd, "%x\n", item5), 334 "psMetadataItemPrint: return true for valid case w/c."); 335 } 336 //Return true for format = %X, type = int 337 { 338 ok( psMetadataItemPrint(fd, "%X\n", item5), 339 "psMetadataItemPrint: return true for valid case w/c."); 340 } 341 342 //Return true for format = %e, type = int 343 { 344 ok( psMetadataItemPrint(fd, "%.1e\n", item2), 345 "psMetadataItemPrint: return true for valid case w/e."); 346 } 347 //Return true for format = %E, type = int 348 { 349 ok( psMetadataItemPrint(fd, "%.2E\n", item2), 350 "psMetadataItemPrint: return true for valid case w/E."); 351 } 352 //Return true for format = %F, type = int 353 { 354 ok( psMetadataItemPrint(fd, "%.3F\n", item2), 355 "psMetadataItemPrint: return true for valid case w/F."); 356 } 357 //Return true for format = %g, type = int 358 { 359 ok( psMetadataItemPrint(fd, "%.3g\n", item2), 360 "psMetadataItemPrint: return true for valid case w/g."); 361 } 362 //Return true for format = %G, type = int 363 { 364 ok( psMetadataItemPrint(fd, "%.4G\n", item2), 365 "psMetadataItemPrint: return true for valid case w/G."); 366 } 367 //Return true for format = %a, type = int 368 { 369 ok( psMetadataItemPrint(fd, "%.4a\n", item2), 370 "psMetadataItemPrint: return true for valid case w/a."); 371 } 372 //Return true for format = %A, type = int 373 { 374 ok( psMetadataItemPrint(fd, "%A\n", item2), 375 "psMetadataItemPrint: return true for valid case w/A."); 376 } 377 393 378 fclose(fd); 394 379 unlink ("psMetadataItemPrint.out"); … … 398 383 psFree(item4); 399 384 psFree(item5); 400 checkMem();385 ok(!psMemCheckLeaks(id, NULL, NULL, false), "no memory leaks"); 401 386 } 402 387 } -
trunk/psLib/test/types/tap_psPixels_all.c
r12512 r12781 12 12 * 13 13 */ 14 15 14 #include <pslib.h> 16 17 15 #include "tap.h" 18 16 #include "pstap.h"
Note:
See TracChangeset
for help on using the changeset viewer.
