aboutsummaryrefslogtreecommitdiff
path: root/src/test.c
diff options
context:
space:
mode:
authortlatorre <tlatorre@uchicago.edu>2018-12-13 15:04:20 -0600
committertlatorre <tlatorre@uchicago.edu>2018-12-13 15:04:20 -0600
commit16330992d56e95fa7bf06a049f6e81b804223c43 (patch)
tree2be4bbe858d53b9cb75a37e0895d0b381a8fa7fe /src/test.c
parenta31b88a92e4e684efee722ce9687208c45a11213 (diff)
downloadsddm-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.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/test.c b/src/test.c
index 6a0bc25..dcfc03c 100644
--- a/src/test.c
+++ b/src/test.c
@@ -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)