mirror of https://github.com/libsdl-org/SDL
147 lines
3.3 KiB
C
147 lines
3.3 KiB
C
/**
|
|
* GUID test suite
|
|
*/
|
|
|
|
#include <SDL3/SDL.h>
|
|
#include <SDL3/SDL_test.h>
|
|
#include "testautomation_suites.h"
|
|
|
|
#ifdef HAVE_STDINT_H
|
|
#include <stdint.h>
|
|
#endif
|
|
|
|
/* ================= Test Case Implementation ================== */
|
|
|
|
/* Helper functions */
|
|
|
|
#define NUM_TEST_GUIDS 5
|
|
|
|
#ifndef UINT64_C
|
|
#ifdef _MSC_VER
|
|
#define UINT64_C(x) x##ui64
|
|
#elif defined(_LP64)
|
|
#define UINT64_C(x) x##UL
|
|
#else
|
|
#define UINT64_C(x) x##ULL
|
|
#endif
|
|
#endif
|
|
|
|
static struct
|
|
{
|
|
char *str;
|
|
Uint64 upper, lower;
|
|
} test_guids[NUM_TEST_GUIDS] = {
|
|
{ "0000000000000000"
|
|
"ffffffffffffffff",
|
|
UINT64_C(0x0000000000000000), UINT64_C(0xffffffffffffffff) },
|
|
{ "0011223344556677"
|
|
"8091a2b3c4d5e6f0",
|
|
UINT64_C(0x0011223344556677), UINT64_C(0x8091a2b3c4d5e6f0) },
|
|
{ "a011223344556677"
|
|
"8091a2b3c4d5e6f0",
|
|
UINT64_C(0xa011223344556677), UINT64_C(0x8091a2b3c4d5e6f0) },
|
|
{ "a011223344556677"
|
|
"8091a2b3c4d5e6f1",
|
|
UINT64_C(0xa011223344556677), UINT64_C(0x8091a2b3c4d5e6f1) },
|
|
{ "a011223344556677"
|
|
"8191a2b3c4d5e6f0",
|
|
UINT64_C(0xa011223344556677), UINT64_C(0x8191a2b3c4d5e6f0) },
|
|
};
|
|
|
|
static void
|
|
upper_lower_to_bytestring(Uint8 *out, Uint64 upper, Uint64 lower)
|
|
{
|
|
Uint64 values[2];
|
|
int i, k;
|
|
|
|
values[0] = upper;
|
|
values[1] = lower;
|
|
|
|
for (i = 0; i < 2; ++i) {
|
|
Uint64 v = values[i];
|
|
|
|
for (k = 0; k < 8; ++k) {
|
|
*out++ = v >> 56;
|
|
v <<= 8;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Test case functions */
|
|
|
|
/**
|
|
* Check String-to-GUID conversion
|
|
*
|
|
* \sa SDL_StringToGUID
|
|
*/
|
|
static int SDLCALL
|
|
TestStringToGUID(void *arg)
|
|
{
|
|
int i;
|
|
|
|
SDLTest_AssertPass("Call to SDL_StringToGUID");
|
|
for (i = 0; i < NUM_TEST_GUIDS; ++i) {
|
|
Uint8 expected[16];
|
|
SDL_GUID guid;
|
|
|
|
upper_lower_to_bytestring(expected,
|
|
test_guids[i].upper, test_guids[i].lower);
|
|
|
|
guid = SDL_StringToGUID(test_guids[i].str);
|
|
SDLTest_AssertCheck(SDL_memcmp(expected, guid.data, 16) == 0, "GUID from string, GUID was: '%s'", test_guids[i].str);
|
|
}
|
|
|
|
return TEST_COMPLETED;
|
|
}
|
|
|
|
/**
|
|
* Check GUID-to-String conversion
|
|
*
|
|
* \sa SDL_GUIDToString
|
|
*/
|
|
static int SDLCALL
|
|
TestGUIDToString(void *arg)
|
|
{
|
|
int i;
|
|
|
|
SDLTest_AssertPass("Call to SDL_GUIDToString");
|
|
for (i = 0; i < NUM_TEST_GUIDS; ++i) {
|
|
char guid_str[33];
|
|
SDL_GUID guid;
|
|
|
|
upper_lower_to_bytestring(guid.data,
|
|
test_guids[i].upper, test_guids[i].lower);
|
|
|
|
SDL_GUIDToString(guid, guid_str, sizeof(guid_str));
|
|
SDLTest_AssertCheck(SDL_strcmp(guid_str, test_guids[i].str) == 0, "Checking whether strings match, expected %s, got %s\n", test_guids[i].str, guid_str);
|
|
}
|
|
|
|
return TEST_COMPLETED;
|
|
}
|
|
|
|
/* ================= Test References ================== */
|
|
|
|
/* GUID routine test cases */
|
|
static const SDLTest_TestCaseReference guidTest1 = {
|
|
TestStringToGUID, "TestStringToGUID", "Call to SDL_StringToGUID", TEST_ENABLED
|
|
};
|
|
|
|
static const SDLTest_TestCaseReference guidTest2 = {
|
|
TestGUIDToString, "TestGUIDToString", "Call to SDL_GUIDToString", TEST_ENABLED
|
|
};
|
|
|
|
/* Sequence of GUID routine test cases */
|
|
static const SDLTest_TestCaseReference *guidTests[] = {
|
|
&guidTest1,
|
|
&guidTest2,
|
|
NULL
|
|
};
|
|
|
|
/* GUID routine test suite (global) */
|
|
SDLTest_TestSuiteReference guidTestSuite = {
|
|
"GUID",
|
|
NULL,
|
|
guidTests,
|
|
NULL
|
|
};
|