aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libglitter_desaturate_double.c72
-rw-r--r--libglitter_desaturate_float.c1
2 files changed, 72 insertions, 1 deletions
diff --git a/libglitter_desaturate_double.c b/libglitter_desaturate_double.c
index ba588f4..0797ddc 100644
--- a/libglitter_desaturate_double.c
+++ b/libglitter_desaturate_double.c
@@ -55,7 +55,77 @@ libglitter_desaturate_double(double **rasters, size_t nrasters, size_t rowsize,
int
main(void)
{
- return 0; /* TODO add test */
+ double rasters1[4 * 10 * 3][4], *rasters1list[4], primary_ys[4], saturation;
+ double rasters2[4 * 10 * 3][4], *rasters2list[4], saturations[4];
+ size_t i, j;
+
+ void *randptr = malloc(1);
+ srand((unsigned int)(uintptr_t)randptr);
+ free(randptr);
+
+#define RANDOMISE(SAT)\
+ do {\
+ saturation = (SAT);\
+ saturations[0] = saturation;\
+ saturations[1] = saturation;\
+ saturations[2] = saturation;\
+ saturations[3] = saturation;\
+ for (i = 0; i < 4; i++) {\
+ rasters1list[i] = rasters1[i];\
+ rasters2list[i] = rasters2[i];\
+ primary_ys[i] = rand() / (double)RAND_MAX;\
+ for (j = 0; j < 4 * 10 * 3; j++)\
+ rasters1[j][i] = rand() / (double)RAND_MAX;\
+ }\
+ memcpy(rasters2, rasters1, sizeof(rasters1));\
+ } while (0)
+
+ RANDOMISE(rand() / (double)RAND_MAX);
+ libglitter_desaturate_double(rasters1list, 4, 10, 3, 7, 4, saturation, primary_ys);
+ libglitter_per_channel_desaturate_double(rasters2list, 4, 10, 3, 7, 4, saturations, primary_ys);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ RANDOMISE(rand() / (double)RAND_MAX);
+ libglitter_desaturate_double(rasters1list, 3, 10, 3, 7, 4, saturation, primary_ys);
+ libglitter_per_channel_desaturate_double(rasters2list, 3, 10, 3, 7, 4, saturations, primary_ys);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ RANDOMISE(rand() / (double)RAND_MAX);
+ libglitter_desaturate_double(rasters1list, 3, 10, 3, 7, 4, saturation, NULL);
+ libglitter_per_channel_desaturate_double(rasters2list, 3, 10, 3, 7, 4, saturations, NULL);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ RANDOMISE(0);
+ libglitter_desaturate_double(rasters1list, 4, 10, 3, 7, 4, saturation, primary_ys);
+ libglitter_per_channel_desaturate_double(rasters2list, 4, 10, 3, 7, 4, saturations, primary_ys);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ RANDOMISE(0);
+ libglitter_desaturate_double(rasters1list, 3, 10, 3, 7, 4, saturation, primary_ys);
+ libglitter_per_channel_desaturate_double(rasters2list, 3, 10, 3, 7, 4, saturations, primary_ys);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ RANDOMISE(0);
+ libglitter_desaturate_double(rasters1list, 3, 10, 3, 7, 4, saturation, NULL);
+ libglitter_per_channel_desaturate_double(rasters2list, 3, 10, 3, 7, 4, saturations, NULL);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ RANDOMISE(1);
+ libglitter_desaturate_double(rasters1list, 4, 10, 3, 7, 4, saturation, primary_ys);
+ libglitter_per_channel_desaturate_double(rasters2list, 4, 10, 3, 7, 4, saturations, primary_ys);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ RANDOMISE(1);
+ libglitter_desaturate_double(rasters1list, 3, 10, 3, 7, 4, saturation, primary_ys);
+ libglitter_per_channel_desaturate_double(rasters2list, 3, 10, 3, 7, 4, saturations, primary_ys);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ RANDOMISE(1);
+ libglitter_desaturate_double(rasters1list, 3, 10, 3, 7, 4, saturation, NULL);
+ libglitter_per_channel_desaturate_double(rasters2list, 3, 10, 3, 7, 4, saturations, NULL);
+ ASSERT(!memcmp(rasters1, rasters2, sizeof(rasters1)));
+
+ return 0;
}
diff --git a/libglitter_desaturate_float.c b/libglitter_desaturate_float.c
index 54488a3..339029d 100644
--- a/libglitter_desaturate_float.c
+++ b/libglitter_desaturate_float.c
@@ -1,6 +1,7 @@
/* See LICENSE file for copyright and license details. */
#include "common.h"
#define libglitter_desaturate_double libglitter_desaturate_float
+#define libglitter_per_channel_desaturate_double libglitter_per_channel_desaturate_float
#define double float
#define fma fmaf
#include "libglitter_desaturate_double.c"