Changeset 2713
- Timestamp:
- Dec 14, 2004, 11:16:28 AM (22 years ago)
- Location:
- trunk/psLib/test/dataManip
- Files:
-
- 2 edited
-
tst_psVectorFFT.c (modified) (20 diffs)
-
verified/tst_psVectorFFT.stderr (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/dataManip/tst_psVectorFFT.c
r2284 r2713 6 6 * @author Robert DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1. 9$ $Name: not supported by cvs2svn $9 * @date $Date: 2004-1 1-04 23:12:10$8 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2004-12-14 21:16:28 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 34 34 35 35 testDescription tests[] = { 36 { 37 testVectorFFT, 600, "psVectorFFT", 0, false 38 }, 39 { 40 testVectorRealImaginary, 601, "psVectorRealImaginary", 0, false 41 }, 42 { 43 testVectorComplex, 602, "psVectorComplex", 0, false 44 }, 45 { 46 testVectorConjugate, 603, "psVectorConjugate", 0, false 47 }, 48 { 49 testVectorPowerSpectrum, 604, "psVectorPowerSpectrum", 0, false 50 }, 51 { 52 NULL 53 } 36 {testVectorFFT, 600, "psVectorFFT", 0, false}, 37 {testVectorRealImaginary, 601, "psVectorRealImaginary", 0, false}, 38 {testVectorComplex, 602, "psVectorComplex", 0, false}, 39 {testVectorConjugate, 603, "psVectorConjugate", 0, false}, 40 {testVectorPowerSpectrum, 604, "psVectorPowerSpectrum", 0, false}, 41 {NULL} 54 42 }; 55 43 … … 66 54 psVector* vec2 = NULL; 67 55 psVector* vec3 = NULL; 56 psVector* vec4 = NULL; 68 57 69 58 /* … … 131 120 } 132 121 122 // Perform a reverse transform with real flag set 123 vec4 = psVectorFFT(NULL,vec2, (PS_FFT_REVERSE | PS_FFT_REAL_RESULT)); 124 if(vec4->type.type != PS_TYPE_F32) { 125 psError(PS_ERR_UNKNOWN,true,"FFT with real result did not produce real values"); 126 return 80; 127 } 128 129 // Perform vector FFT with invalid direction flags 130 psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message."); 131 if ( psVectorFFT(NULL,vec2,(psFFTFlags)0) != NULL) { 132 psError(PS_ERR_UNKNOWN,true,"Did not return NULL with invalid direction"); 133 return 70; 134 } 135 133 136 psFree( vec ); 134 137 psFree( vec2 ); 135 138 psFree( vec3 ); 139 psFree( vec4 ); 140 141 // Perform vector FFT with null input 142 if ( psVectorFFT(NULL,NULL,PS_FFT_FORWARD) != NULL) { 143 psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector"); 144 return 64; 145 } 136 146 137 147 return 0; … … 143 153 psVector* vec2 = NULL; 144 154 psVector* vec3 = NULL; 155 psVector* vec4 = NULL; 156 psVector* vec5 = NULL; 157 psVector* vec6 = NULL; 158 psVector* vec7 = NULL; 159 psVector* vec8 = NULL; 160 psVector* vec9 = NULL; 161 psVector* vec10 = NULL; 162 psVector* vec11 = NULL; 145 163 146 164 /* … … 152 170 // 1. create a C32 complex vector with distinctly different real and imaginary parts. 153 171 vec = psVectorAlloc( 100, PS_TYPE_C32 ); 154 vec->n = vec->nalloc; 172 vec8 = psVectorAlloc( 100, PS_TYPE_C64 ); 173 vec10 = psVectorAlloc( 100, PS_TYPE_C64 ); 174 vec->n = vec->nalloc; 175 vec8->n = vec8->nalloc; 176 vec10->n = vec10->nalloc; 155 177 for ( psU32 n = 0; n < 100; n++ ) { 156 178 vec->data.C32[ n ] = n + I * ( n * 2 ); 179 vec8->data.C64[n] = n + I * ( n * 2 ); 180 vec10->data.C64[n] = n + I * ( n * 2 ); 181 } 182 vec4 = psVectorAlloc( 100, PS_TYPE_F32); 183 vec4->n = vec4->nalloc; 184 vec6 = psVectorAlloc( 100, PS_TYPE_F32); 185 vec6->n = vec6->nalloc; 186 for ( psU32 n = 0; n < 100; n++ ) { 187 vec4->data.F32[n] = n; 188 vec6->data.F32[n] = n; 157 189 } 158 190 … … 169 201 } 170 202 203 psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning."); 204 vec5 = psVectorReal(vec5, vec4); 205 if (vec5 == NULL) { 206 psError(PS_ERR_UNKNOWN,true,"psVectorReal returned NULL"); 207 return 10; 208 } 209 if ( vec5->type.type != PS_TYPE_F32) { 210 psError(PS_ERR_UNKNOWN,true,"psVectorReal returned the wrong type"); 211 return 11; 212 } 213 214 vec9 = psVectorReal(vec9,vec8); 215 if(vec9 == NULL) { 216 psError(PS_ERR_UNKNOWN,true,"psVectorReal returned NULL"); 217 return 20; 218 } 219 if(vec9->type.type != PS_TYPE_F64) { 220 psError(PS_ERR_UNKNOWN,true,"psVectorReal returned the wrong type"); 221 return 21; 222 } 223 224 psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning."); 171 225 vec3 = psVectorImaginary( vec3, vec ); 172 226 if ( vec3 == NULL ) { … … 180 234 } 181 235 236 vec7 = psVectorImaginary(vec7, vec6); 237 if(vec7 == NULL) { 238 psError(PS_ERR_UNKNOWN,true,"psVectorImage returned NULL"); 239 return 12; 240 } 241 if(vec7->type.type != PS_TYPE_F32) { 242 psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned the wrong type"); 243 return 13; 244 } 245 246 vec11 = psVectorImaginary(vec11, vec10); 247 if(vec11 == NULL) { 248 psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned NULL"); 249 return 14; 250 } 251 if(vec11->type.type != PS_TYPE_F64) { 252 psError(PS_ERR_UNKNOWN,true,"psVectorImaginary returned the wrong type"); 253 return 15; 254 } 255 182 256 // 3. compare results to the real/imaginary components of input 183 257 for ( psU32 n = 0; n < 100; n++ ) { 184 258 psF32 r = n; 185 259 psF32 i = ( n * 2 ); 260 psF64 rr = n; 261 psF64 ii = ( n * 2 ); 186 262 if ( fabsf( vec2->data.F32[ n ] - r ) > FLT_EPSILON ) { 187 263 psError(PS_ERR_UNKNOWN,true, "psVectorReal didn't return the real portion at n=%d", … … 194 270 return 6; 195 271 } 272 if ( fabsf( vec5->data.F32[n] - r) > FLT_EPSILON) { 273 psError(PS_ERR_UNKNOWN,true,"psVectorReal didn't return the real portion at n=%d",n); 274 return 50; 275 } 276 if ( fabsf( vec7->data.F32[n] - 0) > FLT_EPSILON) { 277 psError(PS_ERR_UNKNOWN,true,"psVectorImaginary did not return the imaginary portion at n=%d",n); 278 return 51; 279 } 280 if ( fabsf(vec9->data.F64[n] - rr) > FLT_EPSILON ) { 281 psError(PS_ERR_UNKNOWN,true,"psVectorReal did not return the real portion at n=%d",n); 282 return 52; 283 } 284 if ( fabsf(vec11->data.F64[n] - ii) > FLT_EPSILON) { 285 psError(PS_ERR_UNKNOWN,true,"psVectorImaginary did not return the imaginary portion at n=%d",n); 286 return 53; 287 } 196 288 } 197 289 … … 199 291 psFree( vec2 ); 200 292 psFree( vec3 ); 293 psFree( vec4 ); 294 psFree( vec5 ); 295 psFree( vec6 ); 296 psFree( vec7 ); 297 psFree( vec8 ); 298 psFree( vec9 ); 299 psFree( vec10 ); 300 psFree( vec11 ); 301 302 // Perform vector Real with null input 303 if ( psVectorReal(NULL,NULL) != NULL) { 304 psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector"); 305 return 63; 306 } 307 // Perform vector Imaginary with null input 308 if ( psVectorImaginary(NULL,NULL) != NULL) { 309 psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector"); 310 return 73; 311 } 201 312 202 313 return 0; … … 208 319 psVector* vec2 = NULL; 209 320 psVector* vec3 = NULL; 321 psVector* vec4 = NULL; 322 psVector* vec5 = NULL; 323 psVector* vec6 = NULL; 210 324 211 325 /* … … 228 342 vec = psVectorAlloc( 100, PS_TYPE_F32 ); 229 343 vec2 = psVectorAlloc( 100, PS_TYPE_F32 ); 344 vec4 = psVectorAlloc( 100, PS_TYPE_F64 ); 345 vec5 = psVectorAlloc( 100, PS_TYPE_F64 ); 230 346 vec->n = vec->nalloc; 231 347 vec2->n = vec2->nalloc; 348 vec4->n = vec4->nalloc; 349 vec5->n = vec5->nalloc; 232 350 for ( psU32 n = 0; n < 100; n++ ) { 233 351 vec->data.F32[ n ] = n; 234 352 vec2->data.F32[ n ] = ( n * 2 ); 353 vec4->data.F64[ n ] = n; 354 vec5->data.F64[ n ] = ( n * 2 ); 235 355 } 236 356 … … 281 401 } 282 402 403 // Verify the function works with psF64 type 404 vec6 = psVectorComplex(vec6, vec4, vec5); 405 if( vec6->type.type != PS_TYPE_C64 ) { 406 psError(PS_ERR_UNKNOWN,true,"Vector return type is not complex"); 407 return 40; 408 } 409 410 // Verify error message generated with input of invalid type 411 psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message."); 412 vec4->type.type = PS_TYPE_S8; 413 vec5->type.type = PS_TYPE_S8; 414 vec6 = psVectorComplex(vec6, vec4, vec5); 415 if(vec6 != NULL) { 416 psError(PS_ERR_UNKNOWN,true,"Did not return NULL for invalid type"); 417 return 50; 418 } 419 vec4->type.type = PS_TYPE_F64; 420 vec5->type.type = PS_TYPE_F64; 421 283 422 psFree( vec ); 284 423 psFree( vec2 ); 285 424 psFree( vec3 ); 425 psFree( vec4 ); 426 psFree( vec5 ); 427 428 // Perform vector complex with null input 429 if ( psVectorComplex(NULL,NULL,NULL) != NULL) { 430 psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector"); 431 return 62; 432 } 286 433 287 434 return 0; … … 320 467 if ( fabsf( crealf( vec->data.C32[ n ] ) - crealf( vec2->data.C32[ n ] ) ) > FLT_EPSILON || 321 468 fabsf( cimagf( vec->data.C32[ n ] ) + cimagf( vec2->data.C32[ n ] ) ) > FLT_EPSILON ) { 322 psError(PS_ERR_UNKNOWN,true, "psVectorCo mplexresult is invalid (n=%d, %.2f+%.2fi)",469 psError(PS_ERR_UNKNOWN,true, "psVectorConjugate result is invalid (n=%d, %.2f+%.2fi)", 323 470 n, crealf( vec2->data.C32[ n ] ), cimagf( vec2->data.C32[ n ] ) ); 324 471 return 2; … … 328 475 psFree( vec ); 329 476 psFree( vec2 ); 477 478 // Perform conjugate for non-complex number 479 vec = psVectorAlloc( 100, PS_TYPE_F32 ); 480 vec->n = vec->nalloc; 481 for ( psU32 n = 0; n < 100; n++ ) { 482 vec->data.F32[ n ] = n; 483 } 484 psLogMsg(__func__,PS_LOG_INFO,"Following should generate a warning message."); 485 vec2 = psVectorConjugate(vec2,vec); 486 if(vec2->type.type != PS_TYPE_F32) { 487 psError(PS_ERR_UNKNOWN,true,"psVectorConjugate did not return a F32 vector"); 488 return 10; 489 } 490 for ( psU32 n = 0; n < 100; n++ ) { 491 if( vec->data.F32[n] != vec2->data.F32[n] ) { 492 psError(PS_ERR_UNKNOWN,true,"psVectorConjugate result is invalid (n=%d)",n); 493 return 11; 494 } 495 } 496 psFree(vec); 497 498 // Perform vector conjugate with C64 type 499 vec = psVectorAlloc( 100, PS_TYPE_C64 ); 500 vec->n = vec->nalloc; 501 for ( psU32 n = 0; n < 100; n++ ) { 502 vec->data.C64[n] = n + I * ( n * 2 ); 503 } 504 vec2 = psVectorConjugate(vec2,vec); 505 if(vec2->type.type != PS_TYPE_C64) { 506 psError(PS_ERR_UNKNOWN,true,"psVectorConjugate did not return a C64 vector"); 507 return 12; 508 } 509 for ( psU32 n = 0; n < 100; n++ ) { 510 if ( fabsf( crealf(vec->data.C64[n]) - crealf(vec2->data.C64[n])) > FLT_EPSILON || 511 fabsf( cimagf(vec->data.C64[n]) - cimagf(vec2->data.C64[n])) > FLT_EPSILON ) { 512 psError(PS_ERR_UNKNOWN,true,"psVectorConjugate result is invalid (n=%d)",n); 513 return 13; 514 } 515 } 516 psFree(vec); 517 518 // Perform vector conjugate with null input 519 if ( psVectorConjugate(NULL,NULL) != NULL) { 520 psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector"); 521 return 61; 522 } 330 523 331 524 return 0; … … 336 529 psVector * vec = NULL; 337 530 psVector* vec2 = NULL; 531 psVector* vec3 = NULL; 532 psVector* vec4 = NULL; 533 338 534 psF32 val; 535 psF64 val1; 339 536 340 537 /* … … 348 545 vec = psVectorAlloc( 100, PS_TYPE_C32 ); 349 546 vec->n = vec->nalloc; 547 vec3 = psVectorAlloc(100,PS_TYPE_C64); 548 vec3->n = vec3->nalloc; 350 549 for ( psU32 n = 0; n < 100; n++ ) { 351 550 vec->data.C32[ n ] = n + I * sinf( ( ( psF32 ) n ) / 50.f * M_PI ); 551 vec3->data.C64[ n ] = n + I * sinf( ( ( psF64 ) n ) / 50.f * M_PI ); 352 552 } 353 553 354 554 // 2. call psVectorPowerSpectrum 355 555 vec2 = psVectorPowerSpectrum( vec2, vec ); 556 vec4 = psVectorPowerSpectrum( vec4, vec3 ); 356 557 357 558 // 3. verify result is psF32 … … 359 560 psError(PS_ERR_UNKNOWN,true, "the type was not PS_TYPE_F32." ); 360 561 return 1; 562 } 563 if ( vec4->type.type != PS_TYPE_F64 ) { 564 psError(PS_ERR_UNKNOWN,true,"psPowerSpectrum did not return type PS_TYPE_F64 type = %d",vec4->type.type); 565 return 20; 361 566 } 362 567 … … 376 581 377 582 val = cabsf( vec->data.C32[ 0 ] ) * cabsf( vec->data.C32[ 0 ] ) / 100 / 100; 583 val1= cabsf( vec3->data.C64[0] ) * cabsf(vec3->data.C64[0])/100/100; 378 584 if ( fabsf( vec2->data.F32[ 0 ] - val ) > FLT_EPSILON ) { 379 585 psError(PS_ERR_UNKNOWN,true, "psVectorPowerSpectrum result is invalid (n=0, %.2f %.2f)", 380 586 vec2->data.F32[ 0 ], val ); 381 587 return 2; 382 }; 588 } 589 if ( fabsf( vec4->data.C64[0] - val1 ) > FLT_EPSILON ) { 590 psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum result is invalid (n=0)"); 591 return 21; 592 } 383 593 384 594 for ( psU32 n = 1; n < 50; n++ ) { 385 595 val = ( cabsf( vec->data.C32[ n ] ) * cabsf( vec->data.C32[ n ] ) + 386 596 cabsf( vec->data.C32[ 100 - n ] ) * cabsf( vec->data.C32[ 100 - n ] ) ) / 100 / 100; 387 597 val1 = (cabsf(vec3->data.C64[n]) * cabsf(vec3->data.C64[n]) + 598 cabsf(vec3->data.C64[100-n]) * cabsf(vec3->data.C64[100-n]))/100/100; 388 599 if ( fabsf( val - vec2->data.F32[ n ] ) > FLT_EPSILON ) { 389 600 psError(PS_ERR_UNKNOWN,true, "psVectorPowerSpectrum result is invalid (n=%d, %.2f %.2f)", 390 601 n, vec2->data.F32[ n ], val ); 391 602 return 2; 392 }; 603 } 604 if (fabsf(val1 - vec4->data.F64[n]) > FLT_EPSILON) { 605 psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum result is invalid (n=%d, %.2f %.2f)",n,vec4->data.F64[n],val1); 606 return 22; 607 } 393 608 } 394 609 … … 402 617 psFree( vec ); 403 618 psFree( vec2 ); 619 psFree( vec3 ); 620 psFree( vec4 ); 621 622 // Perform vector power spectrum with non-complex number 623 vec = psVectorAlloc(100,PS_TYPE_F32); 624 vec->n = vec->nalloc; 625 for( psU32 n=0; n<100; n++) { 626 vec->data.F32[n] = n; 627 } 628 psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message."); 629 if(psVectorPowerSpectrum(NULL,vec) != NULL) { 630 psError(PS_ERR_UNKNOWN,true,"psVectorPowerSpectrum did not return a null vector."); 631 return 10; 632 } 633 634 // Perform vector power spectrum with null input 635 if ( psVectorPowerSpectrum(NULL,NULL) != NULL) { 636 psError(PS_ERR_UNKNOWN,true,"Did not return NULL with null input vector"); 637 return 60; 638 } 639 640 psFree(vec); 404 641 405 642 return 0; -
trunk/psLib/test/dataManip/verified/tst_psVectorFFT.stderr
r2284 r2713 5 5 \**********************************************************************************/ 6 6 7 <DATE><TIME>|<HOST>|I|testVectorFFT 8 Following should generate an error message. 9 <DATE><TIME>|<HOST>|E|psVectorFFT (psVectorFFT.c:<LINENO>) 10 Must specify the direction as either PS_FFT_FORWARD or PS_FFT_REVERSE. 7 11 8 12 ---> TESTPOINT PASSED (psFFT{psVectorFFT} | tst_psVectorFFT.c) … … 14 18 \**********************************************************************************/ 15 19 20 <DATE><TIME>|<HOST>|I|testVectorRealImaginary 21 Following should generate a warning. 22 <DATE><TIME>|<HOST>|W|psVectorReal 23 Real portion of a non-Complex type called called for. Just a vector copy was performed. 24 <DATE><TIME>|<HOST>|I|testVectorRealImaginary 25 Following should generate a warning. 26 <DATE><TIME>|<HOST>|W|psVectorImaginary 27 Imaginary portion of a non-Complex type called for. A zeroed vector was returned. 16 28 17 29 ---> TESTPOINT PASSED (psFFT{psVectorRealImaginary} | tst_psVectorFFT.c) … … 27 39 <DATE><TIME>|<HOST>|E|psVectorComplex (psVectorFFT.c:<LINENO>) 28 40 Real psVector type, psF32, and imaginary psVector type, psF64, must be the same. 41 <DATE><TIME>|<HOST>|I|testVectorComplex 42 Following should generate an error message. 43 <DATE><TIME>|<HOST>|E|psVectorComplex (psVectorFFT.c:<LINENO>) 44 Input psVector type, psS8, is required to be either psF32 or psF64. 29 45 30 46 ---> TESTPOINT PASSED (psFFT{psVectorComplex} | tst_psVectorFFT.c) … … 36 52 \**********************************************************************************/ 37 53 54 <DATE><TIME>|<HOST>|I|testVectorConjugate 55 Following should generate a warning message. 56 <DATE><TIME>|<HOST>|W|psVectorConjugate 57 Complex Conjugate of a non-Complex type called for. Vector copy was performed instead. 38 58 39 59 ---> TESTPOINT PASSED (psFFT{psVectorConjugate} | tst_psVectorFFT.c) … … 45 65 \**********************************************************************************/ 46 66 67 <DATE><TIME>|<HOST>|I|testVectorPowerSpectrum 68 Following should generate an error message. 69 <DATE><TIME>|<HOST>|E|psVectorPowerSpectrum (psVectorFFT.c:<LINENO>) 70 Input psVector type, psF32, is required to be either psC32 or psC64. 47 71 48 72 ---> TESTPOINT PASSED (psFFT{psVectorPowerSpectrum} | tst_psVectorFFT.c)
Note:
See TracChangeset
for help on using the changeset viewer.
