Changeset 12781 for trunk/psLib/test/types
- Timestamp:
- Apr 10, 2007, 11:09:31 AM (19 years ago)
- Location:
- trunk/psLib/test/types
- Files:
-
- 24 edited
-
tap_psArguments_all.c (modified) (2 diffs)
-
tap_psArray_all.c (modified) (2 diffs)
-
tap_psBitSet_all.c (modified) (1 diff)
-
tap_psHash_845.c (modified) (1 diff)
-
tap_psListIterator.c (modified) (8 diffs)
-
tap_psList_all.c (modified) (4 diffs)
-
tap_psLookupTable_all.c (modified) (2 diffs)
-
tap_psMetadataConfigFormat.c (modified) (2 diffs)
-
tap_psMetadataConfigParse.c (modified) (9 diffs)
-
tap_psMetadataConfigParse_time.c (modified) (10 diffs)
-
tap_psMetadataConfigPrint.c (modified) (7 diffs)
-
tap_psMetadataConfigRead.c (modified) (2 diffs)
-
tap_psMetadataConfigWrite.c (modified) (2 diffs)
-
tap_psMetadataConfig_input.c (modified) (8 diffs)
-
tap_psMetadataItemCompare.c (modified) (1 diff)
-
tap_psMetadataItemParse.c (modified) (2 diffs)
-
tap_psMetadataIterator.c (modified) (14 diffs)
-
tap_psMetadataUpdate.c (modified) (11 diffs)
-
tap_psMetadata_copying.c (modified) (2 diffs)
-
tap_psMetadata_creating.c (modified) (2 diffs)
-
tap_psMetadata_manip.c (modified) (1 diff)
-
tap_psMetadata_polynomials.c (modified) (1 diff)
-
tap_psMetadata_printing.c (modified) (3 diffs)
-
tap_psPixels_all.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
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.
