brewery
notashelf /
1891725ff9cd7fc3a935a20216084b9717c399e1

chroma

public

Lightweight wallpaper daemon for Wayland

Star0tarball
clone
ssh://git@git.notashelf.dev:33/notashelf/chroma.git

Commit 1891725ff9cd

tarball

NotAShelf <raf@notashelf.dev> · 2026-04-16 13:03 UTC

unverified1 files changed+88-0
tests: add basic helpers

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6e5659a4a93d62c6ae60dd1f1a03425a6a6a6964
diff --git a/tests/util/test_common.h b/tests/util/test_common.hnew file mode 100644index 0000000..56d5bab--- /dev/null+++ b/tests/util/test_common.h@@ -0,0 +1,88 @@+#ifndef TEST_COMMON_H+#define TEST_COMMON_H++#include <stdio.h>+#include <stdlib.h>+#include <stdint.h>+#include <string.h>+#include <math.h>+#include <time.h>++#define TEST_PASSED 0+#define TEST_FAILED 1++typedef struct {+    const char *name;+    int (*fn)(void);+} TestCase;++typedef struct {+    const char *name;+    double (*fn)(void);+} BenchCase;++extern int test_failures;+extern int test_total;++#define TEST_ASSERT(cond, msg) do { \+    if (!(cond)) { \+        fprintf(stderr, "  [FAIL] %s\n", msg); \+        test_failures++; \+        return TEST_FAILED; \+    } \+} while (0)++#define TEST_ASSERT_EQ(actual, expected, msg) do { \+    if ((actual) != (expected)) { \+        fprintf(stderr, "  [FAIL] %s: expected %ld, got %ld\n", msg, (long)(expected), (long)(actual)); \+        test_failures++; \+        return TEST_FAILED; \+    } \+} while (0)++#define TEST_ASSERT_FTZ(actual, expected, tol, msg) do { \+    double _diff = fabs((actual) - (expected)); \+    if (_diff > (tol)) { \+        fprintf(stderr, "  [FAIL] %s: expected %.6f, got %.6f (diff %.6f)\n", msg, (expected), (actual), _diff); \+        test_failures++; \+        return TEST_FAILED; \+    } \+} while (0)++#define TEST_ASSERT_PTR_NOT_NULL(ptr, msg) do { \+    if ((ptr) == NULL) { \+        fprintf(stderr, "  [FAIL] %s: pointer is NULL\n", msg); \+        test_failures++; \+        return TEST_FAILED; \+    } \+} while (0)++#define RUN_TEST(tests, name) do { \+    int _result = (name)(); \+    test_total++; \+    if (_result == TEST_PASSED) { \+        printf("  [PASS] %s\n", #name); \+    } \+} while (0)++#define RUN_BENCH(benchmarks, name, iter) do { \+    double _time = run_benchmark((name), (iter)); \+    printf("  [BENCH] %-40s %.3f ms\n", #name, _time); \+} while (0)++extern int test_failures;+extern int test_total;++uint8_t *load_image(const char *path, int *width, int *height, int *channels);+int save_image(const char *path, uint8_t *data, int width, int height, int channels);+uint8_t *downsample_image(uint8_t *src, int sw, int sh, int sc, int *dw, int *dh, float scale);+double get_time_ms(void);+double run_benchmark(double (*fn)(void), int iterations);+int compare_images(uint8_t *a, uint8_t *b, int w, int h, int ch, float threshold);+float compute_psnr(uint8_t *a, uint8_t *b, int w, int h, int ch);+uint8_t *create_gradient_image(int w, int h);+uint8_t *create_noise_image(int w, int h, unsigned int seed);+uint8_t *create_uniform_image(int w, int h, uint8_t r, uint8_t g, uint8_t b);+uint8_t *create_checkerboard(int w, int h, int check_size);++#endif