Fix silly mistake in vfpu_sincos. Add unittest.
This commit is contained in:
parent
0879d76503
commit
e6f55bfef0
2 changed files with 39 additions and 5 deletions
|
@ -37,10 +37,12 @@
|
|||
#include "math/math_util.h"
|
||||
#include "util/text/parsers.h"
|
||||
#include "Core/Config.h"
|
||||
#include "Core/MIPS/MIPSVFPUUtils.h"
|
||||
|
||||
#define EXPECT_TRUE(a) if (!(a)) { printf("%s:%i: Test Fail\n", __FUNCTION__, __LINE__); return false; }
|
||||
#define EXPECT_FALSE(a) if ((a)) { printf("%s:%i: Test Fail\n", __FUNCTION__, __LINE__); return false; }
|
||||
#define EXPECT_EQ_FLOAT(a, b) if ((a) != (b)) { printf("%s:" __LINE__ ": Test Fail\n%f\nvs\n%f\n", __FUNCTION__, a, b); return false; }
|
||||
#define EXPECT_EQ_FLOAT(a, b) if ((a) != (b)) { printf("%s:%i: Test Fail\n%f\nvs\n%f\n", __FUNCTION__, __LINE__, a, b); return false; }
|
||||
#define EXPECT_APPROX_EQ_FLOAT(a, b) if (fabsf((a)-(b))>0.00001f) { printf("%s:%i: Test Fail\n%f\nvs\n%f\n", __FUNCTION__, __LINE__, a, b); /*return false;*/ }
|
||||
#define EXPECT_EQ_STR(a, b) if (a != b) { printf("%s: Test Fail\n%s\nvs\n%s\n", __FUNCTION__, a.c_str(), b.c_str()); return false; }
|
||||
|
||||
#define RET(a) if (!(a)) { return false; }
|
||||
|
@ -385,6 +387,35 @@ bool TestParsers() {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool TestVFPUSinCos() {
|
||||
float sine, cosine;
|
||||
vfpu_sincos(0.0f, sine, cosine);
|
||||
EXPECT_EQ_FLOAT(sine, 0.0f);
|
||||
EXPECT_EQ_FLOAT(cosine, 1.0f);
|
||||
vfpu_sincos(1.0f, sine, cosine);
|
||||
EXPECT_APPROX_EQ_FLOAT(sine, 1.0f);
|
||||
EXPECT_APPROX_EQ_FLOAT(cosine, 0.0f);
|
||||
vfpu_sincos(2.0f, sine, cosine);
|
||||
EXPECT_APPROX_EQ_FLOAT(sine, 0.0f);
|
||||
EXPECT_APPROX_EQ_FLOAT(cosine, -1.0f);
|
||||
vfpu_sincos(3.0f, sine, cosine);
|
||||
EXPECT_APPROX_EQ_FLOAT(sine, -1.0f);
|
||||
EXPECT_APPROX_EQ_FLOAT(cosine, 0.0f);
|
||||
vfpu_sincos(4.0f, sine, cosine);
|
||||
EXPECT_EQ_FLOAT(sine, 0.0f);
|
||||
EXPECT_EQ_FLOAT(cosine, 1.0f);
|
||||
vfpu_sincos(5.0f, sine, cosine);
|
||||
EXPECT_APPROX_EQ_FLOAT(sine, 1.0f);
|
||||
EXPECT_APPROX_EQ_FLOAT(cosine, 0.0f);
|
||||
|
||||
for (float angle = -10.0f; angle < 10.0f; angle++) {
|
||||
vfpu_sincos(angle, sine, cosine);
|
||||
EXPECT_APPROX_EQ_FLOAT(sine, sinf(angle * M_PI_2));
|
||||
EXPECT_APPROX_EQ_FLOAT(cosine, cosf(angle * M_PI_2));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, const char *argv[]) {
|
||||
cpu_info.bNEON = true;
|
||||
cpu_info.bVFP = true;
|
||||
|
@ -393,7 +424,8 @@ int main(int argc, const char *argv[]) {
|
|||
g_Config.bEnableLogging = true;
|
||||
//TestAsin();
|
||||
//TestSinCos();
|
||||
TestArmEmitter();
|
||||
//TestArmEmitter();
|
||||
TestVFPUSinCos();
|
||||
//TestMathUtil();
|
||||
//TestParsers();
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue