diff options
author | tlatorre <tlatorre@uchicago.edu> | 2018-12-13 15:04:20 -0600 |
---|---|---|
committer | tlatorre <tlatorre@uchicago.edu> | 2018-12-13 15:04:20 -0600 |
commit | 16330992d56e95fa7bf06a049f6e81b804223c43 (patch) | |
tree | 2be4bbe858d53b9cb75a37e0895d0b381a8fa7fe /src/test.c | |
parent | a31b88a92e4e684efee722ce9687208c45a11213 (diff) | |
download | sddm-16330992d56e95fa7bf06a049f6e81b804223c43.tar.gz sddm-16330992d56e95fa7bf06a049f6e81b804223c43.tar.bz2 sddm-16330992d56e95fa7bf06a049f6e81b804223c43.zip |
update find_peaks_array() to return peaks in sorted order
Diffstat (limited to 'src/test.c')
-rw-r--r-- | src/test.c | 83 |
1 files changed, 83 insertions, 0 deletions
@@ -1757,6 +1757,87 @@ int test_unique_vertices(char *err) return 0; } +int test_find_peaks_highest(char *err) +{ + /* Tests that the find_peaks_array() function returns the *highest* n peaks + * assuming there are more than n total peaks. */ + size_t imax[2], jmax[2], npeaks; + + double x[10][10] = { + {0,0,2,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0}, + {4,0,0,0,0,0,0,0,0,5}, + {0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0,0}, + {0,0,10,0,0,0,0,0,0,10.1}, + }; + + find_peaks_array(&x[0][0],10,10,imax,jmax,&npeaks,LEN(imax),0.1); + + if (npeaks != 2) { + sprintf(err, "number of peaks = %zu, but expected %i", npeaks, 2); + return 1; + } + + if (imax[0] != 9) { + sprintf(err, "imax[0] = %zu, but expected %i", imax[0], 9); + return 1; + } + + if (jmax[0] != 9) { + sprintf(err, "jmax[0] = %zu, but expected %i", jmax[0], 9); + return 1; + } + + if (imax[1] != 9) { + sprintf(err, "imax[0] = %zu, but expected %i", imax[1], 9); + return 1; + } + + if (jmax[1] != 2) { + sprintf(err, "jmax[0] = %zu, but expected %i", jmax[1], 2); + return 1; + } + + return 0; +} + +int test_find_peaks_sorted(char *err) +{ + /* Tests that the find_peaks_array() function returns peaks in order from + * highest to lowest. */ + size_t i, j, k; + size_t imax[10], jmax[10], npeaks; + double x[10][10]; + + init_genrand(0); + + for (i = 1; i < 100; i++) { + /* Randomly initialize array. */ + for (j = 0; j < 10; j++) { + for (k = 0; k < 10; k++) { + x[j][k] = genrand_real2(); + } + } + + find_peaks_array(&x[0][0],10,10,imax,jmax,&npeaks,LEN(imax),0.1); + + /* Test that each peak is greater than the previous peak. */ + for (j = 1; j < npeaks; j++) { + if (x[imax[j]][jmax[j]] > x[imax[j-1]][jmax[j-1]]) { + sprintf(err, "peak %zu is higher than peak %zu", j, j-1); + return 1; + } + } + } + + return 0; +} + struct tests { testFunction *test; char *name; @@ -1801,6 +1882,8 @@ struct tests { {test_ipow, "test_ipow"}, {test_product, "test_product"}, {test_unique_vertices, "test_unique_vertices"}, + {test_find_peaks_highest, "test_find_peaks_highest"}, + {test_find_peaks_sorted, "test_find_peaks_sorted"}, }; int main(int argc, char **argv) |