bgc-c/test/geometry_test.h

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_SP_EPSYLON 1E-6f
#define TEST_SP_TWO_EPSYLON 2E-6f
#define TEST_SP_SQUARE_EPSYLON 1E-12f
#define TEST_DP_EPSYLON 1E-13f
#define TEST_DP_TWO_EPSYLON 2E-13f
#define TEST_DP_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_sp_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_dp_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