53 lines
1.4 KiB
C
53 lines
1.4 KiB
C
#ifndef __GEOMETRY_TEST_H__
|
|
#define __GEOMETRY_TEST_H__
|
|
|
|
#include <geometry.h>
|
|
|
|
#define TEST_RESULT_SUCCES 0
|
|
#define TEST_RESULT_FAILED 100
|
|
|
|
#define TEST_BG_FP32_EPSYLON 1E-6f
|
|
#define TEST_BG_FP32_TWO_EPSYLON 2E-6f
|
|
#define TEST_BG_FP32_SQUARE_EPSYLON 1E-12f
|
|
|
|
#define TEST_BG_FP64_EPSYLON 1E-13f
|
|
#define TEST_BG_FP64_TWO_EPSYLON 2E-13f
|
|
#define TEST_BG_FP64_SQUARE_EPSYLON 1E-26f
|
|
|
|
void print_test_section(const char * name);
|
|
|
|
void print_test_name(const char * name);
|
|
|
|
void print_test_success();
|
|
|
|
void print_test_failed();
|
|
|
|
inline int test_bg_fp32_are_equal(const float value1, const float value2, const float epsylon)
|
|
{
|
|
if (-1.0f <= value1 && value1 <= 1.0f) {
|
|
const float difference = value1 - value2;
|
|
return -epsylon <= difference && difference <= epsylon;
|
|
}
|
|
|
|
if (value1 > 0.0f) {
|
|
return value1 <= value2 * (1.0f + epsylon) && value2 <= value1 * (1.0f + epsylon);
|
|
}
|
|
|
|
return value1 * (1.0f + epsylon) <= value2 && value2 * (1.0f + epsylon) <= value1;
|
|
}
|
|
|
|
inline int test_bg_fp64_are_equal(const double value1, const double value2, const double epsylon)
|
|
{
|
|
if (-1.0 <= value1 && value1 <= 1.0) {
|
|
const double difference = value1 - value2;
|
|
return -epsylon <= difference && difference <= epsylon;
|
|
}
|
|
|
|
if (value1 > 0.0) {
|
|
return value1 <= value2 * (1.0 + epsylon) && value2 <= value1 * (1.0 + epsylon);
|
|
}
|
|
|
|
return value1 * (1.0 + epsylon) <= value2 && value2 * (1.0 + epsylon) <= value1;
|
|
}
|
|
|
|
#endif
|