Fix compilation for emscripten backend
This commit is contained in:
parent
022c309e3a
commit
105ee9f4b1
@ -415,8 +415,13 @@ struct Dqn_CallSite
|
|||||||
#else
|
#else
|
||||||
#define Dqn_CPU_TSC() __builtin_readcyclecounter()
|
#define Dqn_CPU_TSC() __builtin_readcyclecounter()
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(DQN_PLATFORM_EMSCRIPTEN)
|
||||||
|
#define Dqn_CompilerReadBarrierAndCPUReadFence
|
||||||
|
#define Dqn_CompilerWriteBarrierAndCPUWriteFence
|
||||||
|
#else
|
||||||
#define Dqn_CompilerReadBarrierAndCPUReadFence asm volatile("lfence" ::: "memory")
|
#define Dqn_CompilerReadBarrierAndCPUReadFence asm volatile("lfence" ::: "memory")
|
||||||
#define Dqn_CompilerWriteBarrierAndCPUWriteFence asm volatile("sfence" ::: "memory")
|
#define Dqn_CompilerWriteBarrierAndCPUWriteFence asm volatile("sfence" ::: "memory")
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#error "Compiler not supported"
|
#error "Compiler not supported"
|
||||||
#endif
|
#endif
|
||||||
|
@ -496,7 +496,7 @@ void Dqn_Docs_Demo()
|
|||||||
|
|
||||||
// Print the result like so
|
// Print the result like so
|
||||||
if (0) {
|
if (0) {
|
||||||
printf("%.*s[%u] %zu cycles (%.1fms)\n",
|
printf("%.*s[%u] %llu cycles (%.1fms)\n",
|
||||||
DQN_STR_FMT(anchor->name),
|
DQN_STR_FMT(anchor->name),
|
||||||
anchor->hit_count,
|
anchor->hit_count,
|
||||||
anchor->tsc_inclusive,
|
anchor->tsc_inclusive,
|
||||||
@ -610,7 +610,7 @@ void Dqn_Docs_Demo()
|
|||||||
|
|
||||||
// You may then print out the frame like so
|
// You may then print out the frame like so
|
||||||
if (0)
|
if (0)
|
||||||
printf("%.*s(%I64u): %.*s\n", DQN_STR_FMT(frame.file_name), frame.line_number, DQN_STR_FMT(frame.function_name));
|
printf("%.*s(%llu): %.*s\n", DQN_STR_FMT(frame.file_name), frame.line_number, DQN_STR_FMT(frame.function_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If you load new shared-libraries into the address space it maybe
|
// If you load new shared-libraries into the address space it maybe
|
||||||
@ -1044,6 +1044,7 @@ void Dqn_Docs_Demo()
|
|||||||
|
|
||||||
// NOTE: Dqn_Win_LastError /////////////////////////////////////////////////////////////
|
// NOTE: Dqn_Win_LastError /////////////////////////////////////////////////////////////
|
||||||
// NOTE: Dqn_Win_ErrorCodeToMsg /////////////////////////////////////////////////////////////
|
// NOTE: Dqn_Win_ErrorCodeToMsg /////////////////////////////////////////////////////////////
|
||||||
|
#if defined(DQN_PLATFORM_WIN32)
|
||||||
if (0) {
|
if (0) {
|
||||||
// Generate the error string for the last Win32 API called that return
|
// Generate the error string for the last Win32 API called that return
|
||||||
// an error value.
|
// an error value.
|
||||||
@ -1087,5 +1088,6 @@ void Dqn_Docs_Demo()
|
|||||||
printf("%.*s\n", DQN_STR_FMT(it.file_name));
|
printf("%.*s\n", DQN_STR_FMT(it.file_name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
DQN_MSVC_WARNING_POP
|
DQN_MSVC_WARNING_POP
|
||||||
|
@ -425,7 +425,7 @@ DQN_API void Dqn_OS_ExecOrAbort(Dqn_Slice<Dqn_Str8> cmd_line, Dqn_Str8 working_d
|
|||||||
// NOTE: [$HTTP] Dqn_OSHttp ////////////////////////////////////////////////////////////////////////
|
// NOTE: [$HTTP] Dqn_OSHttp ////////////////////////////////////////////////////////////////////////
|
||||||
DQN_API void Dqn_OS_HttpRequestWait(Dqn_OSHttpResponse *response)
|
DQN_API void Dqn_OS_HttpRequestWait(Dqn_OSHttpResponse *response)
|
||||||
{
|
{
|
||||||
if (response && Dqn_OS_SemaphoreHasData(&response->on_complete_semaphore))
|
if (response && Dqn_OS_SemaphoreIsValid(&response->on_complete_semaphore))
|
||||||
Dqn_OS_SemaphoreWait(&response->on_complete_semaphore, DQN_OS_SEMAPHORE_INFINITE_TIMEOUT);
|
Dqn_OS_SemaphoreWait(&response->on_complete_semaphore, DQN_OS_SEMAPHORE_INFINITE_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,6 +119,10 @@ DQN_API uint64_t Dqn_OS_DateUnixTime()
|
|||||||
|
|
||||||
DQN_API bool Dqn_OS_SecureRNGBytes(void *buffer, uint32_t size)
|
DQN_API bool Dqn_OS_SecureRNGBytes(void *buffer, uint32_t size)
|
||||||
{
|
{
|
||||||
|
#if defined(DQN_PLATFORM_EMSCRIPTEN)
|
||||||
|
(void)buffer; (void)size;
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
if (!buffer || size < 0)
|
if (!buffer || size < 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -135,6 +139,7 @@ DQN_API bool Dqn_OS_SecureRNGBytes(void *buffer, uint32_t size)
|
|||||||
read_bytes = getrandom(buffer, size, 0); // NOTE: EINTR can not be triggered if size <= 32 bytes
|
read_bytes = getrandom(buffer, size, 0); // NOTE: EINTR can not be triggered if size <= 32 bytes
|
||||||
} while (read_bytes != size || errno == EAGAIN);
|
} while (read_bytes != size || errno == EAGAIN);
|
||||||
return true;
|
return true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_API Dqn_Str8 Dqn_OS_EXEPath(Dqn_Arena *arena)
|
DQN_API Dqn_Str8 Dqn_OS_EXEPath(Dqn_Arena *arena)
|
||||||
@ -367,7 +372,7 @@ DQN_API Dqn_OSFile Dqn_OS_OpenFile(Dqn_Str8 path, Dqn_OSFileOpen open_mode, uint
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (access & Dqn_OSFileAccess_Execute) {
|
if (access & Dqn_OSFileAccess_Execute) {
|
||||||
result.error_size = DQN_CAST(uint16_t) Dqn_SNPrintFDotTruncate(
|
result.error_size = DQN_CAST(uint16_t) Dqn_FmtBuffer3DotTruncate(
|
||||||
result.error,
|
result.error,
|
||||||
DQN_ARRAY_UCOUNT(result.error),
|
DQN_ARRAY_UCOUNT(result.error),
|
||||||
"Open file failed: execute access not supported for \"%.*s\"",
|
"Open file failed: execute access not supported for \"%.*s\"",
|
||||||
@ -389,7 +394,7 @@ DQN_API Dqn_OSFile Dqn_OS_OpenFile(Dqn_Str8 path, Dqn_OSFileOpen open_mode, uint
|
|||||||
default: DQN_INVALID_CODE_PATH; break;
|
default: DQN_INVALID_CODE_PATH; break;
|
||||||
}
|
}
|
||||||
if (!handle) {
|
if (!handle) {
|
||||||
result.error_size = DQN_CAST(uint16_t)Dqn_SNPrintFDotTruncate(
|
result.error_size = DQN_CAST(uint16_t)Dqn_FmtBuffer3DotTruncate(
|
||||||
result.error,
|
result.error,
|
||||||
DQN_ARRAY_UCOUNT(result.error),
|
DQN_ARRAY_UCOUNT(result.error),
|
||||||
"Open file failed: Could not open file in requested mode %d for \"%.*s\"",
|
"Open file failed: Could not open file in requested mode %d for \"%.*s\"",
|
||||||
@ -411,7 +416,7 @@ DQN_API Dqn_OSFile Dqn_OS_OpenFile(Dqn_Str8 path, Dqn_OSFileOpen open_mode, uint
|
|||||||
|
|
||||||
FILE *handle = fopen(path.data, fopen_mode);
|
FILE *handle = fopen(path.data, fopen_mode);
|
||||||
if (!handle) {
|
if (!handle) {
|
||||||
result.error_size = DQN_CAST(uint16_t) Dqn_SNPrintFDotTruncate(
|
result.error_size = DQN_CAST(uint16_t) Dqn_FmtBuffer3DotTruncate(
|
||||||
result.error,
|
result.error,
|
||||||
DQN_ARRAY_UCOUNT(result.error),
|
DQN_ARRAY_UCOUNT(result.error),
|
||||||
"Open file failed: Could not open file in fopen mode \"%s\" for \"%.*s\"",
|
"Open file failed: Could not open file in fopen mode \"%s\" for \"%.*s\"",
|
||||||
|
@ -627,7 +627,7 @@ DQN_API Dqn_OSSemaphore Dqn_OS_SemaphoreInit(uint32_t initial_count)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_API bool Dqn_OS_SemaphoreHasData(Dqn_OSSemaphore *semaphore)
|
DQN_API bool Dqn_OS_SemaphoreIsValid(Dqn_OSSemaphore *semaphore)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
if (semaphore) {
|
if (semaphore) {
|
||||||
@ -638,7 +638,7 @@ DQN_API bool Dqn_OS_SemaphoreHasData(Dqn_OSSemaphore *semaphore)
|
|||||||
|
|
||||||
DQN_API void Dqn_OS_SemaphoreDeinit(Dqn_OSSemaphore *semaphore)
|
DQN_API void Dqn_OS_SemaphoreDeinit(Dqn_OSSemaphore *semaphore)
|
||||||
{
|
{
|
||||||
if (!Dqn_OS_SemaphoreHasData(semaphore))
|
if (!Dqn_OS_SemaphoreIsValid(semaphore))
|
||||||
return;
|
return;
|
||||||
CloseHandle(semaphore->win32_handle);
|
CloseHandle(semaphore->win32_handle);
|
||||||
*semaphore = {};
|
*semaphore = {};
|
||||||
@ -646,7 +646,7 @@ DQN_API void Dqn_OS_SemaphoreDeinit(Dqn_OSSemaphore *semaphore)
|
|||||||
|
|
||||||
DQN_API void Dqn_OS_SemaphoreIncrement(Dqn_OSSemaphore *semaphore, uint32_t amount)
|
DQN_API void Dqn_OS_SemaphoreIncrement(Dqn_OSSemaphore *semaphore, uint32_t amount)
|
||||||
{
|
{
|
||||||
if (!Dqn_OS_SemaphoreHasData(semaphore))
|
if (!Dqn_OS_SemaphoreIsValid(semaphore))
|
||||||
return;
|
return;
|
||||||
LONG prev_count = 0;
|
LONG prev_count = 0;
|
||||||
ReleaseSemaphore(DQN_CAST(HANDLE *)semaphore->win32_handle, amount, &prev_count);
|
ReleaseSemaphore(DQN_CAST(HANDLE *)semaphore->win32_handle, amount, &prev_count);
|
||||||
@ -655,7 +655,7 @@ DQN_API void Dqn_OS_SemaphoreIncrement(Dqn_OSSemaphore *semaphore, uint32_t amou
|
|||||||
DQN_API Dqn_OSSemaphoreWaitResult Dqn_OS_SemaphoreWait(Dqn_OSSemaphore *semaphore, uint32_t timeout_ms)
|
DQN_API Dqn_OSSemaphoreWaitResult Dqn_OS_SemaphoreWait(Dqn_OSSemaphore *semaphore, uint32_t timeout_ms)
|
||||||
{
|
{
|
||||||
Dqn_OSSemaphoreWaitResult result = {};
|
Dqn_OSSemaphoreWaitResult result = {};
|
||||||
if (!Dqn_OS_SemaphoreHasData(semaphore))
|
if (!Dqn_OS_SemaphoreIsValid(semaphore))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
if (!semaphore->win32_handle)
|
if (!semaphore->win32_handle)
|
||||||
@ -965,7 +965,7 @@ DQN_API void Dqn_OS_HttpRequestFree(Dqn_OSHttpResponse *response)
|
|||||||
response->win32_request_connection = nullptr;
|
response->win32_request_connection = nullptr;
|
||||||
response->win32_request_handle = nullptr;
|
response->win32_request_handle = nullptr;
|
||||||
Dqn_Arena_Deinit(&response->tmp_arena);
|
Dqn_Arena_Deinit(&response->tmp_arena);
|
||||||
if (Dqn_OS_SemaphoreHasData(&response->on_complete_semaphore))
|
if (Dqn_OS_SemaphoreIsValid(&response->on_complete_semaphore))
|
||||||
Dqn_OS_SemaphoreDeinit(&response->on_complete_semaphore);
|
Dqn_OS_SemaphoreDeinit(&response->on_complete_semaphore);
|
||||||
|
|
||||||
*response = {};
|
*response = {};
|
||||||
|
@ -85,7 +85,7 @@ static Dqn_UTest Dqn_Test_Arena()
|
|||||||
}
|
}
|
||||||
Dqn_Arena_TempMemEnd(temp_memory);
|
Dqn_Arena_TempMemEnd(temp_memory);
|
||||||
DQN_UTEST_ASSERT (&test, arena.curr->prev == nullptr);
|
DQN_UTEST_ASSERT (&test, arena.curr->prev == nullptr);
|
||||||
DQN_UTEST_ASSERTF(&test, arena.curr->reserve >= DQN_MEGABYTES(1), "size=%zuMiB (%zuB), expect=%zuB", (arena.curr->reserve / 1024 / 1024), arena.curr->reserve, DQN_MEGABYTES(1));
|
DQN_UTEST_ASSERTF(&test, arena.curr->reserve >= DQN_MEGABYTES(1), "size=%lluMiB (%lluB), expect=%lluB", (arena.curr->reserve / 1024 / 1024), arena.curr->reserve, DQN_MEGABYTES(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return test;
|
return test;
|
||||||
@ -98,57 +98,57 @@ static Dqn_UTest Dqn_Test_Bin()
|
|||||||
DQN_UTEST_GROUP(test, "Dqn_Bin") {
|
DQN_UTEST_GROUP(test, "Dqn_Bin") {
|
||||||
DQN_UTEST_TEST("Convert 0x123") {
|
DQN_UTEST_TEST("Convert 0x123") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0x123"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0x123"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0x123, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0x123, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert 0xFFFF") {
|
DQN_UTEST_TEST("Convert 0xFFFF") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0xFFFF"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0xFFFF"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0xFFFF, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0xFFFF, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert FFFF") {
|
DQN_UTEST_TEST("Convert FFFF") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("FFFF"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("FFFF"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0xFFFF, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0xFFFF, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert abCD") {
|
DQN_UTEST_TEST("Convert abCD") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("abCD"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("abCD"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0xabCD, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0xabCD, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert 0xabCD") {
|
DQN_UTEST_TEST("Convert 0xabCD") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0xabCD"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0xabCD"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0xabCD, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0xabCD, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert 0x") {
|
DQN_UTEST_TEST("Convert 0x") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0x"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0x"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0x0, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0x0, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert 0X") {
|
DQN_UTEST_TEST("Convert 0X") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0X"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("0X"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0x0, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0x0, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert 3") {
|
DQN_UTEST_TEST("Convert 3") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("3"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("3"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 3, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 3, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert f") {
|
DQN_UTEST_TEST("Convert f") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("f"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("f"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0xf, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0xf, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert g") {
|
DQN_UTEST_TEST("Convert g") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("g"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("g"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Convert -0x3") {
|
DQN_UTEST_TEST("Convert -0x3") {
|
||||||
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("-0x3"));
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STR8("-0x3"));
|
||||||
DQN_UTEST_ASSERTF(&test, result == 0, "result: %zu", result);
|
DQN_UTEST_ASSERTF(&test, result == 0, "result: %llu", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t number = 0xd095f6;
|
uint32_t number = 0xd095f6;
|
||||||
@ -829,7 +829,7 @@ static Dqn_UTest Dqn_Test_Intrinsics()
|
|||||||
DQN_UTEST_TEST("Dqn_Atomic_AddU64") {
|
DQN_UTEST_TEST("Dqn_Atomic_AddU64") {
|
||||||
uint64_t val = 0;
|
uint64_t val = 0;
|
||||||
Dqn_Atomic_AddU64(&val, 1);
|
Dqn_Atomic_AddU64(&val, 1);
|
||||||
DQN_UTEST_ASSERTF(&test, val == 1, "val: %zu", val);
|
DQN_UTEST_ASSERTF(&test, val == 1, "val: %llu", val);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Dqn_Atomic_SubU32") {
|
DQN_UTEST_TEST("Dqn_Atomic_SubU32") {
|
||||||
@ -841,7 +841,7 @@ static Dqn_UTest Dqn_Test_Intrinsics()
|
|||||||
DQN_UTEST_TEST("Dqn_Atomic_SubU64") {
|
DQN_UTEST_TEST("Dqn_Atomic_SubU64") {
|
||||||
uint64_t val = 1;
|
uint64_t val = 1;
|
||||||
Dqn_Atomic_SubU64(&val, 1);
|
Dqn_Atomic_SubU64(&val, 1);
|
||||||
DQN_UTEST_ASSERTF(&test, val == 0, "val: %zu", val);
|
DQN_UTEST_ASSERTF(&test, val == 0, "val: %llu", val);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Dqn_Atomic_SetValue32") {
|
DQN_UTEST_TEST("Dqn_Atomic_SetValue32") {
|
||||||
@ -855,7 +855,7 @@ static Dqn_UTest Dqn_Test_Intrinsics()
|
|||||||
int64_t a = 0;
|
int64_t a = 0;
|
||||||
int64_t b = 111;
|
int64_t b = 111;
|
||||||
Dqn_Atomic_SetValue64(DQN_CAST(uint64_t *)&a, b);
|
Dqn_Atomic_SetValue64(DQN_CAST(uint64_t *)&a, b);
|
||||||
DQN_UTEST_ASSERTF(&test, a == b, "a: %I64i, b: %I64i", a, b);
|
DQN_UTEST_ASSERTF(&test, a == b, "a: %lld, b: %lld", a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
Dqn_UTest_Begin(&test, "Dqn_CPU_TSC");
|
Dqn_UTest_Begin(&test, "Dqn_CPU_TSC");
|
||||||
@ -1154,7 +1154,7 @@ static Dqn_UTest Dqn_Test_OS()
|
|||||||
DQN_UTEST_TEST("Consecutive ticks are ordered") {
|
DQN_UTEST_TEST("Consecutive ticks are ordered") {
|
||||||
uint64_t a = Dqn_OS_PerfCounterNow();
|
uint64_t a = Dqn_OS_PerfCounterNow();
|
||||||
uint64_t b = Dqn_OS_PerfCounterNow();
|
uint64_t b = Dqn_OS_PerfCounterNow();
|
||||||
DQN_UTEST_ASSERTF(&test, b >= a, "a: %zu, b: %zu", a, b);
|
DQN_UTEST_ASSERTF(&test, b >= a, "a: %llu, b: %llu", a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("Ticks to time are a correct order of magnitude") {
|
DQN_UTEST_TEST("Ticks to time are a correct order of magnitude") {
|
||||||
@ -1307,7 +1307,7 @@ static Dqn_UTest Dqn_Test_Str8()
|
|||||||
DQN_UTEST_GROUP(test, "Dqn_Str8") {
|
DQN_UTEST_GROUP(test, "Dqn_Str8") {
|
||||||
DQN_UTEST_TEST("Initialise with string literal w/ macro") {
|
DQN_UTEST_TEST("Initialise with string literal w/ macro") {
|
||||||
Dqn_Str8 string = DQN_STR8("AB");
|
Dqn_Str8 string = DQN_STR8("AB");
|
||||||
DQN_UTEST_ASSERTF(&test, string.size == 2, "size: %I64u", string.size);
|
DQN_UTEST_ASSERTF(&test, string.size == 2, "size: %zu", string.size);
|
||||||
DQN_UTEST_ASSERTF(&test, string.data[0] == 'A', "string[0]: %c", string.data[0]);
|
DQN_UTEST_ASSERTF(&test, string.data[0] == 'A', "string[0]: %c", string.data[0]);
|
||||||
DQN_UTEST_ASSERTF(&test, string.data[1] == 'B', "string[1]: %c", string.data[1]);
|
DQN_UTEST_ASSERTF(&test, string.data[1] == 'B', "string[1]: %c", string.data[1]);
|
||||||
}
|
}
|
||||||
@ -1315,7 +1315,7 @@ static Dqn_UTest Dqn_Test_Str8()
|
|||||||
DQN_UTEST_TEST("Initialise with format string") {
|
DQN_UTEST_TEST("Initialise with format string") {
|
||||||
Dqn_Scratch scratch = Dqn_Scratch_Get(nullptr);
|
Dqn_Scratch scratch = Dqn_Scratch_Get(nullptr);
|
||||||
Dqn_Str8 string = Dqn_Str8_InitF(scratch.arena, "%s", "AB");
|
Dqn_Str8 string = Dqn_Str8_InitF(scratch.arena, "%s", "AB");
|
||||||
DQN_UTEST_ASSERTF(&test, string.size == 2, "size: %I64u", string.size);
|
DQN_UTEST_ASSERTF(&test, string.size == 2, "size: %zu", string.size);
|
||||||
DQN_UTEST_ASSERTF(&test, string.data[0] == 'A', "string[0]: %c", string.data[0]);
|
DQN_UTEST_ASSERTF(&test, string.data[0] == 'A', "string[0]: %c", string.data[0]);
|
||||||
DQN_UTEST_ASSERTF(&test, string.data[1] == 'B', "string[1]: %c", string.data[1]);
|
DQN_UTEST_ASSERTF(&test, string.data[1] == 'B', "string[1]: %c", string.data[1]);
|
||||||
DQN_UTEST_ASSERTF(&test, string.data[2] == 0, "string[2]: %c", string.data[2]);
|
DQN_UTEST_ASSERTF(&test, string.data[2] == 0, "string[2]: %c", string.data[2]);
|
||||||
@ -1325,7 +1325,7 @@ static Dqn_UTest Dqn_Test_Str8()
|
|||||||
Dqn_Scratch scratch = Dqn_Scratch_Get(nullptr);
|
Dqn_Scratch scratch = Dqn_Scratch_Get(nullptr);
|
||||||
Dqn_Str8 string = DQN_STR8("AB");
|
Dqn_Str8 string = DQN_STR8("AB");
|
||||||
Dqn_Str8 copy = Dqn_Str8_Copy(scratch.arena, string);
|
Dqn_Str8 copy = Dqn_Str8_Copy(scratch.arena, string);
|
||||||
DQN_UTEST_ASSERTF(&test, copy.size == 2, "size: %I64u", copy.size);
|
DQN_UTEST_ASSERTF(&test, copy.size == 2, "size: %zu", copy.size);
|
||||||
DQN_UTEST_ASSERTF(&test, copy.data[0] == 'A', "copy[0]: %c", copy.data[0]);
|
DQN_UTEST_ASSERTF(&test, copy.data[0] == 'A', "copy[0]: %c", copy.data[0]);
|
||||||
DQN_UTEST_ASSERTF(&test, copy.data[1] == 'B', "copy[1]: %c", copy.data[1]);
|
DQN_UTEST_ASSERTF(&test, copy.data[1] == 'B', "copy[1]: %c", copy.data[1]);
|
||||||
DQN_UTEST_ASSERTF(&test, copy.data[2] == 0, "copy[2]: %c", copy.data[2]);
|
DQN_UTEST_ASSERTF(&test, copy.data[2] == 0, "copy[2]: %c", copy.data[2]);
|
||||||
@ -1339,7 +1339,7 @@ static Dqn_UTest Dqn_Test_Str8()
|
|||||||
DQN_UTEST_TEST("Allocate string from arena") {
|
DQN_UTEST_TEST("Allocate string from arena") {
|
||||||
Dqn_Scratch scratch = Dqn_Scratch_Get(nullptr);
|
Dqn_Scratch scratch = Dqn_Scratch_Get(nullptr);
|
||||||
Dqn_Str8 string = Dqn_Str8_Alloc(scratch.arena, 2, Dqn_ZeroMem_No);
|
Dqn_Str8 string = Dqn_Str8_Alloc(scratch.arena, 2, Dqn_ZeroMem_No);
|
||||||
DQN_UTEST_ASSERTF(&test, string.size == 2, "size: %I64u", string.size);
|
DQN_UTEST_ASSERTF(&test, string.size == 2, "size: %zu", string.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Dqn_CStr8_Trim[Prefix/Suffix]
|
// NOTE: Dqn_CStr8_Trim[Prefix/Suffix]
|
||||||
@ -1499,55 +1499,55 @@ static Dqn_UTest Dqn_Test_Str8()
|
|||||||
DQN_UTEST_TEST("To U64: Convert nullptr") {
|
DQN_UTEST_TEST("To U64: Convert nullptr") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(Dqn_Str8_Init(nullptr, 5), 0);
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(Dqn_Str8_Init(nullptr, 5), 0);
|
||||||
DQN_UTEST_ASSERT(&test, result.success);
|
DQN_UTEST_ASSERT(&test, result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 0, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 0, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("To U64: Convert empty string") {
|
DQN_UTEST_TEST("To U64: Convert empty string") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8(""), 0);
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8(""), 0);
|
||||||
DQN_UTEST_ASSERT(&test, result.success);
|
DQN_UTEST_ASSERT(&test, result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 0, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 0, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("To U64: Convert \"1\"") {
|
DQN_UTEST_TEST("To U64: Convert \"1\"") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("1"), 0);
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("1"), 0);
|
||||||
DQN_UTEST_ASSERT(&test, result.success);
|
DQN_UTEST_ASSERT(&test, result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 1, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 1, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("To U64: Convert \"-0\"") {
|
DQN_UTEST_TEST("To U64: Convert \"-0\"") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("-0"), 0);
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("-0"), 0);
|
||||||
DQN_UTEST_ASSERT(&test, !result.success);
|
DQN_UTEST_ASSERT(&test, !result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 0, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 0, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("To U64: Convert \"-1\"") {
|
DQN_UTEST_TEST("To U64: Convert \"-1\"") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("-1"), 0);
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("-1"), 0);
|
||||||
DQN_UTEST_ASSERT(&test, !result.success);
|
DQN_UTEST_ASSERT(&test, !result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 0, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 0, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("To U64: Convert \"1.2\"") {
|
DQN_UTEST_TEST("To U64: Convert \"1.2\"") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("1.2"), 0);
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("1.2"), 0);
|
||||||
DQN_UTEST_ASSERT(&test, !result.success);
|
DQN_UTEST_ASSERT(&test, !result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 1, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 1, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("To U64: Convert \"1,234\"") {
|
DQN_UTEST_TEST("To U64: Convert \"1,234\"") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("1,234"), ',');
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("1,234"), ',');
|
||||||
DQN_UTEST_ASSERT(&test, result.success);
|
DQN_UTEST_ASSERT(&test, result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 1234, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 1234, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("To U64: Convert \"1,2\"") {
|
DQN_UTEST_TEST("To U64: Convert \"1,2\"") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("1,2"), ',');
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("1,2"), ',');
|
||||||
DQN_UTEST_ASSERT(&test, result.success);
|
DQN_UTEST_ASSERT(&test, result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 12, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 12, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_UTEST_TEST("To U64: Convert \"12a3\"") {
|
DQN_UTEST_TEST("To U64: Convert \"12a3\"") {
|
||||||
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("12a3"), 0);
|
Dqn_Str8ToU64Result result = Dqn_Str8_ToU64(DQN_STR8("12a3"), 0);
|
||||||
DQN_UTEST_ASSERT(&test, !result.success);
|
DQN_UTEST_ASSERT(&test, !result.success);
|
||||||
DQN_UTEST_ASSERTF(&test, result.value == 12, "result: %I64u", result.value);
|
DQN_UTEST_ASSERTF(&test, result.value == 12, "result: %llu", result.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Dqn_Str8_Find
|
// NOTE: Dqn_Str8_Find
|
||||||
@ -1776,6 +1776,7 @@ static Dqn_UTest Dqn_Test_VArray()
|
|||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(DQN_PLATFORM_WIN32)
|
||||||
static Dqn_UTest Dqn_Test_Win()
|
static Dqn_UTest Dqn_Test_Win()
|
||||||
{
|
{
|
||||||
Dqn_UTest test = {};
|
Dqn_UTest test = {};
|
||||||
@ -1821,6 +1822,7 @@ static Dqn_UTest Dqn_Test_Win()
|
|||||||
}
|
}
|
||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
|
#endif // DQN_PLATFORM_WIN#@
|
||||||
|
|
||||||
void Dqn_Test_RunSuite()
|
void Dqn_Test_RunSuite()
|
||||||
{
|
{
|
||||||
@ -1843,7 +1845,9 @@ void Dqn_Test_RunSuite()
|
|||||||
Dqn_Test_Str8(),
|
Dqn_Test_Str8(),
|
||||||
Dqn_Test_TicketMutex(),
|
Dqn_Test_TicketMutex(),
|
||||||
Dqn_Test_VArray(),
|
Dqn_Test_VArray(),
|
||||||
|
#if defined(DQN_PLATFORM_WIN32)
|
||||||
Dqn_Test_Win(),
|
Dqn_Test_Win(),
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
int total_tests = 0;
|
int total_tests = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user