mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 05:19:56 +00:00
TexCache: unit test the quick tex hash.
Just a few sample cases to make sure it's behaving correctly.
This commit is contained in:
parent
f39897cfa5
commit
2f26fdff27
@ -43,6 +43,7 @@
|
||||
#include "Core/Config.h"
|
||||
#include "Core/MIPS/MIPSVFPUUtils.h"
|
||||
#include "Core/FileSystems/ISOFileSystem.h"
|
||||
#include "GPU/Common/TextureDecoder.h"
|
||||
|
||||
#include "unittest/JitHarness.h"
|
||||
#include "unittest/TestVertexJit.h"
|
||||
@ -401,6 +402,63 @@ bool TestParseLBN() {
|
||||
return true;
|
||||
}
|
||||
|
||||
// So we can use EXPECT_TRUE, etc.
|
||||
struct AlignedMem {
|
||||
AlignedMem(size_t sz, size_t alignment = 16) {
|
||||
p_ = AllocateAlignedMemory(sz, alignment);
|
||||
}
|
||||
~AlignedMem() {
|
||||
FreeAlignedMemory(p_);
|
||||
}
|
||||
|
||||
operator void *() {
|
||||
return p_;
|
||||
}
|
||||
|
||||
operator char *() {
|
||||
return (char *)p_;
|
||||
}
|
||||
|
||||
private:
|
||||
void *p_;
|
||||
};
|
||||
|
||||
bool TestQuickTexHash() {
|
||||
SetupTextureDecoder();
|
||||
|
||||
static const int BUF_SIZE = 1024;
|
||||
AlignedMem buf(BUF_SIZE, 16);
|
||||
|
||||
memset(buf, 0, BUF_SIZE);
|
||||
EXPECT_EQ_HEX(DoQuickTexHash(buf, BUF_SIZE), 0xaa756edc);
|
||||
|
||||
memset(buf, 1, BUF_SIZE);
|
||||
EXPECT_EQ_HEX(DoQuickTexHash(buf, BUF_SIZE), 0x66f81b1c);
|
||||
|
||||
strncpy(buf, "hello", BUF_SIZE);
|
||||
EXPECT_EQ_HEX(DoQuickTexHash(buf, BUF_SIZE), 0xf6028131);
|
||||
|
||||
strncpy(buf, "goodbye", BUF_SIZE);
|
||||
EXPECT_EQ_HEX(DoQuickTexHash(buf, BUF_SIZE), 0xef81b54f);
|
||||
|
||||
// Simple patterns.
|
||||
for (int i = 0; i < BUF_SIZE; ++i) {
|
||||
char *p = buf;
|
||||
p[i] = i & 0xFF;
|
||||
}
|
||||
EXPECT_EQ_HEX(DoQuickTexHash(buf, BUF_SIZE), 0x0d64531c);
|
||||
|
||||
int j = 573;
|
||||
for (int i = 0; i < BUF_SIZE; ++i) {
|
||||
char *p = buf;
|
||||
j += ((i * 7) + (i & 3)) * 11;
|
||||
p[i] = j & 0xFF;
|
||||
}
|
||||
EXPECT_EQ_HEX(DoQuickTexHash(buf, BUF_SIZE), 0x58de8dbc);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
typedef bool (*TestFunc)();
|
||||
struct TestItem {
|
||||
const char *name;
|
||||
@ -432,6 +490,7 @@ TestItem availableTests[] = {
|
||||
TEST_ITEM(Jit),
|
||||
TEST_ITEM(MatrixTranspose),
|
||||
TEST_ITEM(ParseLBN),
|
||||
TEST_ITEM(QuickTexHash),
|
||||
};
|
||||
|
||||
int main(int argc, const char *argv[]) {
|
||||
|
@ -3,6 +3,7 @@
|
||||
#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_INT(a, b) if ((a) != (b)) { printf("%s:%i: Test Fail\n%d\nvs\n%d\n", __FUNCTION__, __LINE__, a, b); return false; }
|
||||
#define EXPECT_EQ_HEX(a, b) if ((a) != (b)) { printf("%s:%i: Test Fail\n%x\nvs\n%x\n", __FUNCTION__, __LINE__, 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; }
|
||||
|
Loading…
Reference in New Issue
Block a user