Changeset 13124 for trunk/psLib/test/math/tap_psMinimizePowell.c
- Timestamp:
- May 1, 2007, 6:20:06 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psLib/test/math/tap_psMinimizePowell.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/math/tap_psMinimizePowell.c
r13123 r13124 9 9 XXX: Also, the test currently fails because of memory corruption in 10 10 psMinimizePowell(). 11 XXX: The unallowed input parameter tests could be more extensive 11 12 *****************************************************************************/ 12 13 #include <stdio.h> … … 74 75 { 75 76 psLogSetFormat("HLNM"); 76 plan_tests( 1);77 plan_tests(8); 77 78 78 79 // Check for various errors on unallowed input parameters 79 80 { 80 psMemId id = psMemGetId();81 82 81 psVector *myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32); 83 82 psVector *myParamMask = psVectorAlloc(NUM_PARAMS, PS_TYPE_U8); … … 85 84 psArray *myCoords = psArrayAlloc(N); 86 85 87 for (psS32 i=0;i<N;i++)86 // Following should generate error for NULL minimize 88 87 { 89 myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32); 90 ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10); 91 ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3); 92 ((psVector *) (myCoords->data[i]))->n++; 93 } 94 for (psS32 i=0;i<NUM_PARAMS;i++) 95 { 96 expectedParm[i] = 2.32 + (float) (2 * i); 97 myParams->data.F32[i] = 0.0; 98 myParams->data.F32[i] = (float) i; 99 myParamMask->data.U8[i] = 0; 100 myParams->n++; 101 myParamMask->n++; 88 psMemId id = psMemGetId(); 89 bool tmpBool = psMinimizePowell(NULL, myParams, myParamMask, myCoords, 90 (psMinimizePowellFunc) myFunc); 91 ok(!tmpBool, "psMinimizePowell() returned FALSE with NULL psMinimize param"); 92 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 102 93 } 103 94 104 // Following should generate error for null minimize 105 if (0)95 96 // Following should generate error for NULL parameter vector 106 97 { 107 psMinimizePowell(NULL, myParams, myParamMask, myCoords, (psMinimizePowellFunc) myFunc); 98 psMemId id = psMemGetId(); 99 bool tmpBool = psMinimizePowell(min, NULL, myParamMask, myCoords,(psMinimizePowellFunc) myFunc); 100 ok(!tmpBool, "psMinimizePowell() returned FALSE with NULL parameter param"); 101 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 108 102 } 109 103 110 // Following should generate error for null parameter vector 111 if (0)104 105 // Following should generate error for NULL coords 112 106 { 113 psMinimizePowell(min, NULL, myParamMask, myCoords,(psMinimizePowellFunc) myFunc); 107 psMemId id = psMemGetId(); 108 bool tmpBool = psMinimizePowell(min, myParams, myParamMask, NULL, (psMinimizePowellFunc) myFunc); 109 ok(!tmpBool, "psMinimizePowell() returned FALSE with NULL coords param"); 110 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 114 111 } 115 112 116 // Following should generate error for null coords 117 if (0)113 114 // Following should generate error for NULL function 118 115 { 119 psMinimizePowell(min, myParams, myParamMask, NULL, (psMinimizePowellFunc) myFunc); 120 } 121 122 // Following should generate error for null function 123 if (0) 124 { 125 psMinimizePowell(min, myParams, myParamMask, myCoords, NULL); 116 psMemId id = psMemGetId(); 117 bool tmpBool = psMinimizePowell(min, myParams, myParamMask, myCoords, NULL); 118 ok(!tmpBool, "psMinimizePowell() returned FALSE with NULL function param"); 119 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 126 120 } 127 121 … … 130 124 psFree(min); 131 125 psFree(myCoords); 132 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");133 126 } 134 127 128 135 129 // Powell minimize with parameter mask 130 // XXX: This function aborts with a memory corruption error at around line 131 // 60 of psMinimizePowell.c, at the psFree(v): 132 // if (fabs(baseFuncVal - currFuncVal) <= min->tol) { 133 // psFree(v); 134 // psFree(pQP); 136 135 if (0) { 137 136 psMemId id = psMemGetId(); … … 155 154 } 156 155 157 bool tmpBool = psMinimizePowell(min, myParams, myParamMask, myCoords,156 bool tmpBool = psMinimizePowell(min, myParams, NULL, myCoords, 158 157 (psMinimizePowellFunc) myFunc); 159 158 ok(tmpBool, "psMinimizePowell() returned sucessfully"); … … 184 183 } 185 184 186 // Powell minimize with parameter mask 187 // The only difference from the previous block is that paramMask is now NULL 188 if (0) { 189 psMemId id = psMemGetId(); 190 psVector *myParams = psVectorAlloc(NUM_PARAMS, PS_TYPE_F32); 191 psMinimization *min = psMinimizationAlloc(100, 0.01); 192 psArray *myCoords = psArrayAlloc(N); 193 bool tmpBool; 194 195 myCoords->n = N; 196 for (psS32 i=0;i<N;i++) 197 { 198 myCoords->data[i] = (psPtr *) psVectorAlloc(2, PS_TYPE_F32); 199 ((psVector *) (myCoords->data[i]))->data.F32[0] = (float) (i+10); 200 ((psVector *) (myCoords->data[i]))->data.F32[1] = (float) (i+3); 201 } 202 for (psS32 i=0;i<NUM_PARAMS;i++) 203 { 204 expectedParm[i] = 2.32 + (float) (2 * i); 205 myParams->data.F32[i] = 0.0; 206 myParams->data.F32[i] = (float) i; 207 myParams->n++; 208 } 209 210 tmpBool = psMinimizePowell(min, myParams, NULL, myCoords, 211 (psMinimizePowellFunc) myFunc); 212 ok(tmpBool, "psMinimizePowell() returned sucessfully"); 213 skip_start(!tmpBool, 0, "Skipping tests because psMinimizePowell() failed"); 214 215 printf("\nThe minimum is %f (expected: %f)\n", min->value, MIN_VALUE); 216 for (psS32 i=0;i<NUM_PARAMS;i++) 217 { 218 printf("Parameter %d at the minimum is %.1f (expected: %.1f)\n", i, 219 myParams->data.F32[i], expectedParm[i]); 220 221 if (fabs(myParams->data.F32[i] - expectedParm[i]) > fabs(ERROR_TOLERANCE * expectedParm[i])) { 222 printf("ERROR: Parameter %d: (%.1f), expected was (%.1f)\n", 223 i, myParams->data.F32[i], expectedParm[i]); 224 testStatus = false; 225 } else { 226 printf("Parameter %d: (%.1f), expected was (%.1f)\n", 227 i, myParams->data.F32[i], expectedParm[i]); 228 } 229 } 230 psFree(myCoords); 231 psFree(myParams); 232 psFree(min); 233 skip_end(); 234 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 235 } 185 // XXX: Add tests with active parameter mask 236 186 }
Note:
See TracChangeset
for help on using the changeset viewer.
