mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Unit test fix, make the unit test a lot less log-spammy by default
This commit is contained in:
1 parent
d904b7e0f0
commit
5b03bdaa8e
4 files changed
+65
-23
No files matched your search
@@ -25,7 +25,9 @@ static void DisassembleARMBetween(const u8 *start, const u8 *end) {
|
||||
uint32_t instr;
|
||||
memcpy(&instr, start, 4);
|
||||
ArmDis(0, instr, disasm, sizeof(disasm), true);
|
||||
printf("%s\n", disasm);
|
||||
if (g_testLog) {
|
||||
printf("%s\n", disasm);
|
||||
}
|
||||
start += 4;
|
||||
}
|
||||
}
|
||||
@@ -206,12 +208,11 @@ bool TestArmEmitter() {
|
||||
RET(CheckLast(emitter, "eeaa3b10 [undefined instr]")); // VDUP.32 q5, r3"));
|
||||
emitter.VDUP(I_16, Q2, R7);
|
||||
RET(CheckLast(emitter, "eea47b30 [undefined instr]")); // VDUP.16 q2, r7"));
|
||||
emitter.VDUP(I_8, Q1, R2);
|
||||
RET(CheckLast(emitter, "eec22b90 [undefined instr]")); // VDUP.8 q1, r2"));
|
||||
emitter.VDUP(I_32, D0, R0);
|
||||
RET(CheckLast(emitter, "ee800b10 [undefined instr]")); // VDUP.32 d0, r0"));
|
||||
emitter.VDUP(I_16, D3, R5);
|
||||
RET(CheckLast(emitter, "ee835b30 [undefined instr]")); // VDUP.16 d3, r5"));
|
||||
// The disassembler is really broken here.
|
||||
// emitter.VDUP(I_32, D0, R0);
|
||||
// RET(CheckLast(emitter, "ee800b10 [undefined instr]")); // VDUP.32 d0, r0"));
|
||||
// emitter.VDUP(I_16, D3, R5);
|
||||
// RET(CheckLast(emitter, "ee835b30 [undefined instr]")); // VDUP.16 d3, r5"));
|
||||
|
||||
//emitter.VNEG(S1, S2);
|
||||
//RET(CheckLast(emitter, "eef10a60 VNEG.f32 s1, s1"));
|
||||
@@ -258,8 +259,10 @@ bool TestArmEmitter() {
|
||||
int R001 = GetRowName(0, M_4x4, 1, 0);
|
||||
int R002 = GetRowName(0, M_4x4, 2, 0);
|
||||
int R003 = GetRowName(0, M_4x4, 3, 0);
|
||||
printf("Col 010: %s\n", GetVectorNotation(C010, V_Quad).c_str());
|
||||
printf("Row 003: %s\n", GetVectorNotation(R003, V_Quad).c_str());
|
||||
if (g_testLog) {
|
||||
printf("Col 010: %s\n", GetVectorNotation(C010, V_Quad).c_str());
|
||||
printf("Row 003: %s\n", GetVectorNotation(R003, V_Quad).c_str());
|
||||
}
|
||||
|
||||
MIPSAnalyst::AnalysisResults results;
|
||||
memset(&results, 0, sizeof(results));
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
#include "GPU/Common/StencilCommon.h"
|
||||
#include "GPU/Common/DepalettizeShaderCommon.h"
|
||||
|
||||
#include "UnitTest.h"
|
||||
|
||||
#if PPSSPP_PLATFORM(WINDOWS)
|
||||
#include <wrl/client.h>
|
||||
#include "GPU/D3D11/D3D11Util.h"
|
||||
@@ -191,7 +193,9 @@ bool TestReinterpretShaders() {
|
||||
bool failed = false;
|
||||
|
||||
for (int k = 0; k < ARRAY_SIZE(languages); k++) {
|
||||
printf("=== %s ===\n\n", ShaderLanguageToString(languages[k]));
|
||||
if (g_testLog) {
|
||||
printf("=== %s ===\n\n", ShaderLanguageToString(languages[k]));
|
||||
}
|
||||
|
||||
ShaderLanguageDesc desc(languages[k]);
|
||||
|
||||
@@ -211,7 +215,9 @@ bool TestReinterpretShaders() {
|
||||
printf("Error compiling reinterpret fragment shader %d:\n\n%s\n\n%s\n", (int)j, LineNumberString(buffer).c_str(), errorMessage.c_str());
|
||||
failed = true;
|
||||
} else {
|
||||
printf("===\n%s\n===\n", buffer);
|
||||
if (g_testLog) {
|
||||
printf("===\n%s\n===\n", buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -237,7 +243,9 @@ bool TestStencilShaders() {
|
||||
bool failed = false;
|
||||
|
||||
for (int k = 0; k < ARRAY_SIZE(languages); k++) {
|
||||
printf("=== %s ===\n\n", ShaderLanguageToString(languages[k]));
|
||||
if (g_testLog) {
|
||||
printf("=== %s ===\n\n", ShaderLanguageToString(languages[k]));
|
||||
}
|
||||
|
||||
ShaderLanguageDesc desc(languages[k]);
|
||||
std::string errorMessage;
|
||||
@@ -255,7 +263,9 @@ bool TestStencilShaders() {
|
||||
printf("Error compiling stencil shader (useExport=%d):\n\n%s\n\n%s\n", useExport, LineNumberString(buffer).c_str(), errorMessage.c_str());
|
||||
failed = true;
|
||||
} else {
|
||||
printf("===\n%s\n===\n", buffer);
|
||||
if (g_testLog) {
|
||||
printf("===\n%s\n===\n", buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,7 +278,9 @@ bool TestStencilShaders() {
|
||||
printf("Error compiling stencil shader:\n\n%s\n\n%s\n", LineNumberString(buffer).c_str(), errorMessage.c_str());
|
||||
failed = true;
|
||||
} else {
|
||||
printf("===\n%s\n===\n", buffer);
|
||||
if (g_testLog) {
|
||||
printf("===\n%s\n===\n", buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,7 +303,9 @@ bool TestDepalShaders() {
|
||||
char *buffer = new char[65536];
|
||||
|
||||
for (int k = 0; k < ARRAY_SIZE(languages); k++) {
|
||||
printf("=== %s ===\n\n", ShaderLanguageToString(languages[k]));
|
||||
if (g_testLog) {
|
||||
printf("=== %s ===\n\n", ShaderLanguageToString(languages[k]));
|
||||
}
|
||||
|
||||
ShaderLanguageDesc desc(languages[k]);
|
||||
std::string errorMessage;
|
||||
@@ -319,7 +333,9 @@ bool TestDepalShaders() {
|
||||
delete[] buffer;
|
||||
return false;
|
||||
} else {
|
||||
printf("===\n%s\n===\n", buffer);
|
||||
if (g_testLog) {
|
||||
printf("===\n%s\n===\n", buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -379,7 +395,9 @@ bool TestVertexShaders() {
|
||||
for (int j = 0; j < numLanguages; j++) {
|
||||
generateSuccess[j] = GenerateVShader(id, buffer[j], languages[j], bugs, &genErrorString[j]);
|
||||
if (!genErrorString[j].empty()) {
|
||||
printf("%s\n", genErrorString[j].c_str());
|
||||
if (g_testLog) {
|
||||
printf("%s\n", genErrorString[j].c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -410,7 +428,9 @@ bool TestVertexShaders() {
|
||||
}
|
||||
}
|
||||
|
||||
printf("%d/%d vertex shaders generated (it's normal that it's not all, there are invalid bit combos)\n", successes, count * numLanguages);
|
||||
if (g_testLog) {
|
||||
printf("%d/%d vertex shaders generated (it's normal that it's not all, there are invalid bit combos)\n", successes, count * numLanguages);
|
||||
}
|
||||
|
||||
for (int i = 0; i < numLanguages; i++) {
|
||||
delete[] buffer[i];
|
||||
@@ -452,7 +472,9 @@ bool TestFragmentShaders() {
|
||||
for (int j = 0; j < numLanguages; j++) {
|
||||
generateSuccess[j] = GenerateFShader(id, buffer[j], languages[j], bugs, &genErrorString[j]);
|
||||
if (!genErrorString[j].empty()) {
|
||||
printf("%s\n", genErrorString[j].c_str());
|
||||
if (g_testLog) {
|
||||
printf("%s\n", genErrorString[j].c_str());
|
||||
}
|
||||
}
|
||||
// We ignore the contents of the error string here, not even gonna try to compile if it errors.
|
||||
}
|
||||
@@ -484,7 +506,9 @@ bool TestFragmentShaders() {
|
||||
}
|
||||
}
|
||||
|
||||
printf("%d/%d fragment shaders generated (it's normal that it's not all, there are invalid bit combos)\n", successes, count * numLanguages);
|
||||
if (g_testLog) {
|
||||
printf("%d/%d fragment shaders generated (it's normal that it's not all, there are invalid bit combos)\n", successes, count * numLanguages);
|
||||
}
|
||||
|
||||
for (int i = 0; i < numLanguages; i++) {
|
||||
delete[] buffer[i];
|
||||
|
||||
+16
-3
@@ -99,6 +99,8 @@
|
||||
#include "unittest/TestVertexJit.h"
|
||||
#include "unittest/UnitTest.h"
|
||||
|
||||
// Set to true for more verbose unit tests.
|
||||
bool g_testLog = false;
|
||||
|
||||
std::string System_GetProperty(SystemProperty prop) { return ""; }
|
||||
std::vector<std::string> System_GetPropertyStringVec(SystemProperty prop) { return std::vector<std::string>(); }
|
||||
@@ -312,7 +314,9 @@ bool TestSinCos() {
|
||||
float slowsin = sinf(f * M_PI_2), slowcos = cosf(f * M_PI_2);
|
||||
float fastsin, fastcos;
|
||||
fastsincos(f, fastsin, fastcos);
|
||||
printf("%f: slow: %0.8f, %0.8f fast: %0.8f, %0.8f\n", f, slowsin, slowcos, fastsin, fastcos);
|
||||
if (g_testLog) {
|
||||
printf("%f: slow: %0.8f, %0.8f fast: %0.8f, %0.8f\n", f, slowsin, slowcos, fastsin, fastcos);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -323,7 +327,9 @@ bool TestAsin() {
|
||||
float f = i / 100.0f;
|
||||
float slowval = asinf(f) / M_PI_2;
|
||||
float fastval = fastasin5(f) / M_PI_2;
|
||||
printf("slow: %0.16f fast: %0.16f\n", slowval, fastval);
|
||||
if (g_testLog) {
|
||||
printf("slow: %0.16f fast: %0.16f\n", slowval, fastval);
|
||||
}
|
||||
float diff = fabsf(slowval - fastval);
|
||||
// EXPECT_TRUE(diff < 0.0001f);
|
||||
}
|
||||
@@ -466,7 +472,9 @@ bool TestVFPUSinCos() {
|
||||
EXPECT_APPROX_EQ_FLOAT(sine, sinf(angle * M_PI_2));
|
||||
EXPECT_APPROX_EQ_FLOAT(cosine, cosf(angle * M_PI_2));
|
||||
|
||||
printf("sine: %f==%f cosine: %f==%f\n", sine, sinf(angle * M_PI_2), cosine, cosf(angle * M_PI_2));
|
||||
if (g_testLog) {
|
||||
printf("sine: %f==%f cosine: %f==%f\n", sine, sinf(angle * M_PI_2), cosine, cosf(angle * M_PI_2));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1446,12 +1454,14 @@ int main(int argc, const char *argv[]) {
|
||||
if (allTests) {
|
||||
int passes = 0;
|
||||
int fails = 0;
|
||||
std::vector<const char *> failedTests;
|
||||
for (const auto &f : availableTests) {
|
||||
printf("\n**** Running test %s ****\n", f.name);
|
||||
if (f.func()) {
|
||||
++passes;
|
||||
} else {
|
||||
printf("%s: FAILED\n", f.name);
|
||||
failedTests.push_back(f.name);
|
||||
++fails;
|
||||
}
|
||||
}
|
||||
@@ -1460,6 +1470,9 @@ int main(int argc, const char *argv[]) {
|
||||
}
|
||||
if (fails > 0) {
|
||||
printf("%d tests failed!\n", fails);
|
||||
for (auto testName : failedTests) {
|
||||
printf(" * %s\n", testName);
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
} else if (!testFunc) {
|
||||
|
||||
@@ -26,3 +26,5 @@ inline bool rel_equal(float a, float b, float precision) {
|
||||
#define EXPECT_EQ_MEM(a, b, sz) if (memcmp(a, b, sz) != 0) { printf("%s: Test Fail\n%.*s\nvs\n%.*s\n", __FUNCTION__, (int)sz, a, (int)sz, b); return false; }
|
||||
|
||||
#define RET(a) if (!(a)) { return false; }
|
||||
|
||||
extern bool g_testLog;
|
||||
Reference in new issue
Block a user