mirror of
				https://github.com/thunderbrewhq/thunderbrew
				synced 2025-10-31 08:16:03 +03:00 
			
		
		
		
	 706c8903a1
			
		
	
	
		706c8903a1
		
			
		
	
	
	
	
		
			
			* chore(build): add vendored SDL 3.0.0 library * chore(build): add vendored glew-cmake-2.2.0 library * feat(console): in the presence of -opengl launch flag, change GxApi to OpenGl * feat(gx): add uncompleted CGxDeviceGLSDL targeting Windows and Linux * chore(build): change SDL3 linkage from shared (bad) to to static (good)
		
			
				
	
	
		
			173 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			4.6 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 */
 | |
| 
 | |
| /**
 | |
|  * \brief Check String-to-GUID conversion
 | |
|  *
 | |
|  * \sa SDL_GUIDFromString
 | |
|  */
 | |
| static int
 | |
| TestGuidFromString(void *arg)
 | |
| {
 | |
|     int i;
 | |
| 
 | |
|     SDLTest_AssertPass("Call to SDL_GUIDFromString");
 | |
|     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_GUIDFromString(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;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * \brief Check GUID-to-String conversion
 | |
|  *
 | |
|  * \sa SDL_GUIDToString
 | |
|  */
 | |
| static int
 | |
| TestGuidToString(void *arg)
 | |
| {
 | |
|     int i;
 | |
| 
 | |
|     SDLTest_AssertPass("Call to SDL_GUIDToString");
 | |
|     for (i = 0; i < NUM_TEST_GUIDS; ++i) {
 | |
|         const int guid_str_offset = 4;
 | |
|         char guid_str_buf[64];
 | |
|         char *guid_str = guid_str_buf + guid_str_offset;
 | |
|         SDL_GUID guid;
 | |
|         int size;
 | |
| 
 | |
|         upper_lower_to_bytestring(guid.data,
 | |
|                                   test_guids[i].upper, test_guids[i].lower);
 | |
| 
 | |
|         /* Serialise to limited-length buffers */
 | |
|         for (size = 0; size <= 36; ++size) {
 | |
|             const Uint8 fill_char = size + 0xa0;
 | |
|             Uint32 expected_prefix;
 | |
|             Uint32 actual_prefix;
 | |
|             int written_size;
 | |
| 
 | |
|             SDL_memset(guid_str_buf, fill_char, sizeof(guid_str_buf));
 | |
|             SDL_GUIDToString(guid, guid_str, size);
 | |
| 
 | |
|             /* Check bytes before guid_str_buf */
 | |
|             expected_prefix = fill_char | (fill_char << 8) | (fill_char << 16) | (fill_char << 24);
 | |
|             SDL_memcpy(&actual_prefix, guid_str_buf, 4);
 | |
|             SDLTest_AssertCheck(expected_prefix == actual_prefix, "String buffer memory before output untouched, expected: %" SDL_PRIu32 ", got: %" SDL_PRIu32 ", at size=%d", expected_prefix, actual_prefix, size);
 | |
| 
 | |
|             /* Check that we did not overwrite too much */
 | |
|             written_size = 0;
 | |
|             while ((guid_str[written_size] & 0xff) != fill_char && written_size < 256) {
 | |
|                 ++written_size;
 | |
|             }
 | |
|             SDLTest_AssertCheck(written_size <= size, "Output length is within expected bounds, with length %d: wrote %d of %d permitted bytes", size, written_size, size);
 | |
|             if (size >= 33) {
 | |
|                 SDLTest_AssertCheck(SDL_strcmp(guid_str, test_guids[i].str) == 0, "GUID string equality, from string: %s", test_guids[i].str);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return TEST_COMPLETED;
 | |
| }
 | |
| 
 | |
| /* ================= Test References ================== */
 | |
| 
 | |
| /* GUID routine test cases */
 | |
| static const SDLTest_TestCaseReference guidTest1 = {
 | |
|     (SDLTest_TestCaseFp)TestGuidFromString, "TestGuidFromString", "Call to SDL_GUIDFromString", TEST_ENABLED
 | |
| };
 | |
| 
 | |
| static const SDLTest_TestCaseReference guidTest2 = {
 | |
|     (SDLTest_TestCaseFp)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
 | |
| };
 |