tests: add basic helpers
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I6e5659a4a93d62c6ae60dd1f1a03425a6a6a6964
This commit is contained in:
parent
e177e32bfd
commit
1891725ff9
1 changed files with 88 additions and 0 deletions
88
tests/util/test_common.h
Normal file
88
tests/util/test_common.h
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue