Files
davinci2/test/unit/dvt_unit_common.h
T

48 lines
2.7 KiB
C++

#pragma once
#include <math/dvc_math_util.h>
using namespace davinci;
//-------------------------------------------------------------------------------------
inline float _randomFloat(void) {
return MathUtil::rangeRandom(-65521 / 24.f, 65521 / 24.f);
}
//-------------------------------------------------------------------------------------
inline bool _floatEqualWithRange(float a, float b, float t = std::numeric_limits<float>::epsilon()) {
if (MathUtil::floatEqual(a, b)) return true;
float d = std::abs(a - b) / std::min(std::abs(a), std::abs(b));
return MathUtil::floatEqual(d, 0.f, t);
}
//-------------------------------------------------------------------------------------
#define TWO_RANDOM_FLOAT _randomFloat(), _randomFloat()
#define THREE_RANDOM_FLOAT _randomFloat(), _randomFloat(), _randomFloat()
#define FOUR_RANDOM_FLOAT _randomFloat(), _randomFloat(), _randomFloat(), _randomFloat()
#define NINE_RANDOM_FLOAT THREE_RANDOM_FLOAT, THREE_RANDOM_FLOAT, THREE_RANDOM_FLOAT
#define SIXTEEN_RANDOM_FLOAT FOUR_RANDOM_FLOAT, FOUR_RANDOM_FLOAT, FOUR_RANDOM_FLOAT, FOUR_RANDOM_FLOAT
#define THREE_ELEMENT(data) data[0], data[1], data[2]
#define FOUR_ELEMENT(data) data[0], data[1], data[2], data[3]
#define NINE_ELEMENT_ROW(data) data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8]
#define NINE_ELEMENT_COL(data) data[0], data[3], data[6], data[1], data[4], data[7], data[2], data[5], data[8]
#define SIXTEEN_ELEMENT_ROW(data) data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15]
#define SIXTEEN_ELEMENT_COL(data) data[0], data[4], data[8], data[12], data[1], data[5], data[9], data[13], data[2], data[6], data[10], data[14], data[3], data[7], data[11], data[15]
#define EXPECT_EQ_3X3(a, b) for(int32_t i=0; i<3; i++) for(int32_t j=0; j<3; j++) EXPECT_EQ(a[i][j], b[i][j]);
#define EXPECT_EQ_3X3_T(a, b) for(int32_t i=0; i<3; i++) for(int32_t j=0; j<3; j++) EXPECT_EQ(a[i][j], b[j][i]);
#define EXPECT_EQ_4X4(a, b) for(int32_t i=0; i<4; i++) for(int32_t j=0; j<4; j++) EXPECT_EQ(a[i][j], b[i][j]);
#define EXPECT_EQ_4X4_T(a, b) for(int32_t i=0; i<4; i++) for(int32_t j=0; j<4; j++) EXPECT_EQ(a[i][j], b[j][i]);
//-------------------------------------------------------------------------------------
#define SIXTEEN_RANDOM_FLOAT2 THREE_RANDOM_FLOAT, 0.f, THREE_RANDOM_FLOAT, 0.f, THREE_RANDOM_FLOAT, 0.f, THREE_RANDOM_FLOAT, 1.f
#define EXPECT_EQ_4X4_APPROX(a, b, t) for(int32_t ii=0; ii<4; ii++) for(int32_t jj=0; jj<4; jj++) \
EXPECT_TRUE(_floatEqualWithRange(a[ii][jj], b[ii][jj], t));
#define EXPECT_EQ_4X4_T_APPROX(a, b, t) for(int32_t ii=0; ii<4; ii++) for(int32_t jj=0; jj<4; jj++) \
EXPECT_TRUE(_floatEqualWithRange(a[ii][jj], b[jj][ii], t));