Changeset 887 for trunk/psLib/test/dataManip/tst_psStats03.c
- Timestamp:
- Jun 6, 2004, 2:31:55 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/test/dataManip/tst_psStats03.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/dataManip/tst_psStats03.c
r779 r887 1 1 /***************************************************************************** 2 2 This routine must ensure that PS_STAT_SAMPLE_MEDIAN is correctly computed 3 by the procedure ps ArrayStats().3 by the procedure psVectorStats(). 4 4 *****************************************************************************/ 5 5 #include <stdio.h> 6 6 #include "pslib.h" 7 7 #include "psTest.h" 8 #define N1 1029 8 #define N1 1029 // This should be an odd number. 9 9 #define N ((4 * N1) + 1) 10 10 … … 12 12 { 13 13 psStats *myStats = NULL; 14 psStats *myStats2 = NULL;15 14 int testStatus = true; 15 int globalTestStatus = true; 16 16 int i = 0; 17 17 psVector *myVector = NULL; 18 18 psVector *maskVector= NULL; 19 19 float median = 1e99; 20 float realMedian1 = 1e99; 21 float realMedian2 = 1e99; 20 float realMedianWithMask = (float) (N-3)/4; 21 float realMedianNoMask = (float) (N-1)/2; 22 int currentId = psMemGetId(); 23 int memLeaks = 0; 22 24 23 printPositiveTestHeader(stdout, 24 "psStats functions", 25 "PS_STAT_SAMPLE_MEDIAN"); 26 25 /*************************************************************************/ 26 /* Allocate and initialize data structures */ 27 /*************************************************************************/ 27 28 myStats = psStatsAlloc(PS_STAT_SAMPLE_MEDIAN); 28 myVector = psVectorAlloc( PS_TYPE_FLOAT, N);29 myVector = psVectorAlloc(N, PS_TYPE_F32); 29 30 myVector->n = N; 30 maskVector = psVectorAlloc( PS_TYPE_UINT8, N);31 maskVector = psVectorAlloc(N, PS_TYPE_U8); 31 32 maskVector->n = N; 32 33 34 // Set the appropriate values for the vector data. 33 35 for (i=0;i<N;i++) { 34 myVector->vec.f[i] = (float) i; 36 myVector->data.F32[i] = (float) i; 37 } 38 39 // Set the mask vector and calculate the expected median. 40 for (i=0;i<N;i++) { 35 41 if (i < (N/2)) { 36 maskVector->vec.ui8[i] = 0; 37 if (myVector->vec.f[i] < realMedian2) { 38 realMedian2 = myVector->vec.f[i]; 39 } 42 maskVector->data.U8[i] = 0; 40 43 } else { 41 maskVector->vec.ui8[i] = 1; 42 if (myVector->vec.f[i] < realMedian1) { 43 realMedian1 = myVector->vec.f[i]; 44 } 44 maskVector->data.U8[i] = 1; 45 45 } 46 46 } 47 47 48 myStats2 = psArrayStats(myVector, NULL, 0, myStats); 49 median = myStats2->sampleMedian; 48 /*************************************************************************/ 49 /* Call psVectorStats() with no vector mask. */ 50 /*************************************************************************/ 51 printPositiveTestHeader(stdout, 52 "psStats functions", 53 "PS_STAT_SAMPLE_MEDIAN: no vector mask"); 50 54 51 printf("Called psArrayStats() on a vector with no elements masked.\n"); 55 myStats = psVectorStats(myStats, myVector, NULL, 0); 56 median = myStats->sampleMedian; 57 58 printf("Called psVectorStats() on a vector with no elements masked.\n"); 52 59 printf("The expected median was %f. The calculated median was %f.\n", 53 (float) (N-1)/2, median);54 if (median == (float) (N-1)/2) {60 realMedianNoMask, median); 61 if (median == realMedianNoMask) { 55 62 testStatus = true; 56 63 } else { 57 64 testStatus = false; 65 globalTestStatus = false; 58 66 } 59 67 60 myStats2 = psArrayStats(myVector, maskVector, 1, myStats); 61 median = myStats2->sampleMedian; 62 printf("Called psArrayStats() on a vector with last N/2 elements masked.\n"); 68 printFooter(stdout, 69 "psStats functions", 70 "PS_STAT_SAMPLE_MEDIAN: no vector mask", 71 testStatus); 72 73 /*************************************************************************/ 74 /* Call psVectorStats() with vector mask. */ 75 /*************************************************************************/ 76 printPositiveTestHeader(stdout, 77 "psStats functions", 78 "PS_STAT_SAMPLE_MEDIAN: with vector mask"); 79 80 myStats = psVectorStats(myStats, myVector, maskVector, 1); 81 median = myStats->sampleMedian; 82 printf("Called psVectorStats() on a vector with last N/2 elements masked.\n"); 63 83 printf("The expected median was %f. The calculated median was %f.\n", 64 (float) (N-3)/4, median);65 if (median == (float) (N-3)/4) {84 realMedianWithMask, median); 85 if (median == realMedianWithMask) { 66 86 testStatus = true; 67 87 } else { 68 88 testStatus = false; 89 globalTestStatus = false; 69 90 } 70 91 71 92 printFooter(stdout, 72 "ps Hashfunctions",73 " psHashAlloc()",93 "psStats functions", 94 "PS_STAT_SAMPLE_MEDIAN: with vector mask", 74 95 testStatus); 75 96 76 return (!testStatus); 97 /*************************************************************************/ 98 /* Deallocate data structures */ 99 /*************************************************************************/ 100 printPositiveTestHeader(stdout, 101 "psStats functions", 102 "psStats(): deallocating memory"); 103 104 psStatsFree(myStats); 105 psVectorFree(myVector); 106 psVectorFree(maskVector); 107 108 psMemCheckCorruption(1); 109 memLeaks = psMemCheckLeaks(currentId,NULL,NULL); 110 if (0 != memLeaks) { 111 psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks); 112 } 113 114 printFooter(stdout, 115 "psStats functions", 116 "psStats(): deallocating memory", 117 testStatus); 118 119 return (!globalTestStatus); 77 120 }
Note:
See TracChangeset
for help on using the changeset viewer.
