dqn: Remove Dqn_size, prefer usize (AAU)
This commit is contained in:
parent
ee477272c4
commit
c8a1d796b0
@ -1,4 +1,5 @@
|
|||||||
@echo OFF
|
@echo OFF
|
||||||
|
setlocal
|
||||||
|
|
||||||
set code_dir=%~dp0
|
set code_dir=%~dp0
|
||||||
if not exist Build mkdir Build
|
if not exist Build mkdir Build
|
||||||
@ -17,7 +18,7 @@ pushd Build
|
|||||||
set compile_flags=-MT -EHa -GR- -Od -Oi -Z7 -wd4201 -D DQN_TEST_WITH_MAIN -nologo
|
set compile_flags=-MT -EHa -GR- -Od -Oi -Z7 -wd4201 -D DQN_TEST_WITH_MAIN -nologo
|
||||||
set linker_flags=-link -nologo
|
set linker_flags=-link -nologo
|
||||||
set msvc_flags=-fsanitize=address
|
set msvc_flags=-fsanitize=address
|
||||||
set clang_flags=-fsanitize=address -fsanitize=undefined
|
set clang_flags=-fsanitize=address,undefined
|
||||||
|
|
||||||
REM Compiler: MSVC cl
|
REM Compiler: MSVC cl
|
||||||
REM ------------------------------------------------------------------------
|
REM ------------------------------------------------------------------------
|
||||||
@ -33,5 +34,5 @@ pushd Build
|
|||||||
echo [WARN] Optional clang compile via clang-cl if it's in the path, please put clang-cl on the path for this feature
|
echo [WARN] Optional clang compile via clang-cl if it's in the path, please put clang-cl on the path for this feature
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
clang-cl %compile_flags% %clang_flags% %code_dir%dqn_unit_tests.cpp /Fe:dqn_unit_tests_clang %link_flags%
|
clang-cl -v -D DQN_TEST_WITH_MAIN %code_dir%dqn_unit_tests.cpp /Fe:dqn_unit_tests_clang -link
|
||||||
popd
|
popd
|
||||||
|
@ -64,254 +64,257 @@ Dqn_Tester TestArena()
|
|||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dqn_Tester TestBin()
|
||||||
|
{
|
||||||
|
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
||||||
|
Dqn_Tester test = {};
|
||||||
|
DQN_TESTER_GROUP(test, "Dqn_Bin") {
|
||||||
|
DQN_TESTER_TEST("Convert 0x123") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("0x123"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0x123, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert 0xFFFF") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("0xFFFF"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0xFFFF, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert FFFF") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("FFFF"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0xFFFF, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert abCD") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("abCD"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0xabCD, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert 0xabCD") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("0xabCD"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0xabCD, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert 0x") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("0x"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0x0, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert 0X") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("0X"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0x0, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert 3") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("3"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 3, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert f") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("f"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0xf, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert g") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("g"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Convert -0x3") {
|
||||||
|
uint64_t result = Dqn_Bin_HexToU64(DQN_STRING8("-0x3"));
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t number = 0xd095f6;
|
||||||
|
DQN_TESTER_TEST("Convert %x to string", number) {
|
||||||
|
Dqn_String8 number_hex = Dqn_Bin_BytesToHexArena(scratch.arena, &number, sizeof(number));
|
||||||
|
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(number_hex, DQN_STRING8("f695d000")), "number_hex=%.*s", DQN_STRING_FMT(number_hex));
|
||||||
|
}
|
||||||
|
|
||||||
|
number = 0xf6ed00;
|
||||||
|
DQN_TESTER_TEST("Convert %x to string", number) {
|
||||||
|
Dqn_String8 number_hex = Dqn_Bin_BytesToHexArena(scratch.arena, &number, sizeof(number));
|
||||||
|
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(number_hex, DQN_STRING8("00edf600")), "number_hex=%.*s", DQN_STRING_FMT(number_hex));
|
||||||
|
}
|
||||||
|
|
||||||
|
Dqn_String8 hex = DQN_STRING8("0xf6ed00");
|
||||||
|
DQN_TESTER_TEST("Convert %.*s to bytes", DQN_STRING_FMT(hex)) {
|
||||||
|
Dqn_String8 bytes = Dqn_Bin_HexToBytesArena(scratch.arena, hex);
|
||||||
|
DQN_TESTER_ASSERTF(&test,
|
||||||
|
Dqn_String8_Eq(bytes, DQN_STRING8("\xf6\xed\x00")),
|
||||||
|
"number_hex=%.*s",
|
||||||
|
DQN_STRING_FMT(Dqn_Bin_BytesToHexArena(scratch.arena, bytes.data, bytes.size)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return test;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Dqn_Tester TestBinarySearch()
|
Dqn_Tester TestBinarySearch()
|
||||||
{
|
{
|
||||||
Dqn_Tester test = {};
|
Dqn_Tester test = {};
|
||||||
DQN_TESTER_GROUP(test, "Dqn_BinarySearch") {
|
DQN_TESTER_GROUP(test, "Dqn_BinarySearch") {
|
||||||
DQN_TESTER_TEST("Search array of 1 item") {
|
DQN_TESTER_TEST("Search array of 1 item") {
|
||||||
uint32_t array[] = {1};
|
uint32_t array[] = {1};
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 0 /*find*/, Dqn_BinarySearchType_Match) == -1);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 1 /*find*/, Dqn_BinarySearchType_Match) == +0);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 2 /*find*/, Dqn_BinarySearchType_Match) == -1);
|
|
||||||
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 0 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +0);
|
Dqn_BinarySearchResult result = {};
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 1 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +1);
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 0 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 2 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +1);
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 1 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 2 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 0 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 1 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 1);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 2 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Search array of 2 items") {
|
DQN_TESTER_TEST("Search array of 2 items") {
|
||||||
uint32_t array[] = {1, 2};
|
uint32_t array[] = {1, 2};
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 0 /*find*/, Dqn_BinarySearchType_Match) == -1);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 1 /*find*/, Dqn_BinarySearchType_Match) == +0);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 2 /*find*/, Dqn_BinarySearchType_Match) == +1);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 3 /*find*/, Dqn_BinarySearchType_Match) == -1);
|
|
||||||
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 0 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +0);
|
Dqn_BinarySearchResult result = {};
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 1 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +1);
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 0 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 2 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +2);
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 3 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +2);
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 1 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 2 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 1);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 3 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 0 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 1 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 1);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 2 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 2);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 3 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Search array of 3 items") {
|
DQN_TESTER_TEST("Search array of 3 items") {
|
||||||
uint32_t array[] = {1, 2, 3};
|
uint32_t array[] = {1, 2, 3};
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 0 /*find*/, Dqn_BinarySearchType_Match) == -1);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 1 /*find*/, Dqn_BinarySearchType_Match) == +0);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 2 /*find*/, Dqn_BinarySearchType_Match) == +1);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 3 /*find*/, Dqn_BinarySearchType_Match) == +2);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 4 /*find*/, Dqn_BinarySearchType_Match) == -1);
|
|
||||||
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 0 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +0);
|
Dqn_BinarySearchResult result = {};
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 1 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +1);
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 0 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 2 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +2);
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 3 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +3);
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 4 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +3);
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 1 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 2 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 1);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 3 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 2);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 4 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 0 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 1 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 1);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 2 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 2);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 3 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 3);
|
||||||
|
|
||||||
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 4 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.index == 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Search array of 4 items") {
|
DQN_TESTER_TEST("Search array of 4 items") {
|
||||||
uint32_t array[] = {1, 2, 3, 4};
|
uint32_t array[] = {1, 2, 3, 4};
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 0 /*find*/, Dqn_BinarySearchType_Match) == -1);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 1 /*find*/, Dqn_BinarySearchType_Match) == +0);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 2 /*find*/, Dqn_BinarySearchType_Match) == +1);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 3 /*find*/, Dqn_BinarySearchType_Match) == +2);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 4 /*find*/, Dqn_BinarySearchType_Match) == +3);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 5 /*find*/, Dqn_BinarySearchType_Match) == -1);
|
|
||||||
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 0 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +0);
|
Dqn_BinarySearchResult result = {};
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 1 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +1);
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 0 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 2 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +2);
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 3 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +3);
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 4 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +4);
|
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_ICOUNT(array), 5 /*find*/, Dqn_BinarySearchType_OnePastMatch) == +4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return test;
|
|
||||||
}
|
|
||||||
|
|
||||||
Dqn_Tester TestCString8()
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 1 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
{
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
Dqn_Tester test = {};
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
DQN_TESTER_GROUP(test, "Dqn_CString8") {
|
|
||||||
// NOTE: Dqn_CString8_ToI64
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
|
||||||
DQN_TESTER_TEST("To I64: Convert nullptr") {
|
|
||||||
int64_t result = Dqn_CString8_ToI64(nullptr);
|
|
||||||
DQN_TESTER_ASSERT(&test, result == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To I64: Convert empty string") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 2 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
int64_t result = Dqn_CString8_ToI64("");
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
DQN_TESTER_ASSERT(&test, result == 0);
|
DQN_TESTER_ASSERT(&test, result.index == 1);
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To I64: Convert \"1\"") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 3 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
int64_t result = Dqn_CString8_ToI64("1");
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
DQN_TESTER_ASSERT(&test, result == 1);
|
DQN_TESTER_ASSERT(&test, result.index == 2);
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To I64: Convert \"-0\"") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 4 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
int64_t result = Dqn_CString8_ToI64("-0");
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
DQN_TESTER_ASSERT(&test, result == 0);
|
DQN_TESTER_ASSERT(&test, result.index == 3);
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To I64: Convert \"-1\"") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 5 /*find*/, Dqn_BinarySearchType_Match);
|
||||||
int64_t result = Dqn_CString8_ToI64("-1");
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
DQN_TESTER_ASSERT(&test, result == -1);
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To I64: Convert \"1.2\"") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 0 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
int64_t result = Dqn_CString8_ToI64("1.2");
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
DQN_TESTER_ASSERT(&test, result == 1);
|
DQN_TESTER_ASSERT(&test, result.index == 0);
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To I64: Convert \"1,234\"") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 1 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
int64_t result = Dqn_CString8_ToI64("1,234");
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
DQN_TESTER_ASSERT(&test, result == 1234);
|
DQN_TESTER_ASSERT(&test, result.index == 1);
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To I64: Convert \"1,2\"") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 2 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
int64_t result = Dqn_CString8_ToI64("1,2");
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
DQN_TESTER_ASSERT(&test, result == 12);
|
DQN_TESTER_ASSERT(&test, result.index == 2);
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To I64: Convert \"12a3\"") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 3 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
int64_t result = Dqn_CString8_ToI64("12a3");
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
DQN_TESTER_ASSERT(&test, result == 12);
|
DQN_TESTER_ASSERT(&test, result.index == 3);
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: Dqn_CString8_ToU64
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 4 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
// ---------------------------------------------------------------------------------------------
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
DQN_TESTER_TEST("To U64: Convert nullptr") {
|
DQN_TESTER_ASSERT(&test, result.index == 4);
|
||||||
uint64_t result = Dqn_CString8_ToU64(nullptr);
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To U64: Convert empty string") {
|
result = Dqn_BinarySearch<uint32_t>(array, DQN_ARRAY_UCOUNT(array), 5 /*find*/, Dqn_BinarySearchType_OnePastMatch);
|
||||||
uint64_t result = Dqn_CString8_ToU64("");
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
DQN_TESTER_ASSERT(&test, result.index == 4);
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To U64: Convert \"1\"") {
|
|
||||||
uint64_t result = Dqn_CString8_ToU64("1");
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 1, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To U64: Convert \"-0\"") {
|
|
||||||
uint64_t result = Dqn_CString8_ToU64("-0");
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To U64: Convert \"-1\"") {
|
|
||||||
uint64_t result = Dqn_CString8_ToU64("-1");
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To U64: Convert \"1.2\"") {
|
|
||||||
uint64_t result = Dqn_CString8_ToU64("1.2");
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 1, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To U64: Convert \"1,234\"") {
|
|
||||||
uint64_t result = Dqn_CString8_ToU64("1,234");
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 1234, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To U64: Convert \"1,2\"") {
|
|
||||||
uint64_t result = Dqn_CString8_ToU64("1,2");
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 12, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("To U64: Convert \"12a3\"") {
|
|
||||||
uint64_t result = Dqn_CString8_ToU64("12a3");
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 12, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: Dqn_CString8_Find
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
|
||||||
DQN_TESTER_TEST("Find: String (char) is not in buffer") {
|
|
||||||
char const buf[] = "836a35becd4e74b66a0d6844d51f1a63018c7ebc44cf7e109e8e4bba57eefb55";
|
|
||||||
char const find[] = "2";
|
|
||||||
char const *result = Dqn_CString8_Find(buf, find, Dqn_CString8_ArrayCountI(buf), Dqn_CString8_ArrayCountI(find));
|
|
||||||
DQN_TESTER_ASSERT(&test, result == nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Find: String (char) is in buffer") {
|
|
||||||
char const buf[] = "836a35becd4e74b66a0d6844d51f1a63018c7ebc44cf7e109e8e4bba57eefb55";
|
|
||||||
char const find[] = "6";
|
|
||||||
char const *result = Dqn_CString8_Find(buf, find, Dqn_CString8_ArrayCountI(buf), Dqn_CString8_ArrayCountI(find));
|
|
||||||
DQN_TESTER_ASSERT(&test, result != nullptr);
|
|
||||||
DQN_TESTER_ASSERT(&test, result[0] == '6' && result[1] == 'a');
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: Dqn_CString8_FileNameFromPath
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
|
||||||
DQN_TESTER_TEST("File name from Windows path") {
|
|
||||||
Dqn_isize file_name_size = 0;
|
|
||||||
char const buf[] = "C:\\ABC\\test.exe";
|
|
||||||
char const *result = Dqn_CString8_FileNameFromPath(buf, Dqn_CString8_ArrayCountI(buf), &file_name_size);
|
|
||||||
DQN_TESTER_ASSERTF(&test, file_name_size == 8, "size: %I64d", file_name_size);
|
|
||||||
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(Dqn_String8_Init(result, file_name_size), DQN_STRING8("test.exe")), "%.*s", DQN_CAST(int)file_name_size, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("File name from Linux path") {
|
|
||||||
Dqn_isize file_name_size = 0;
|
|
||||||
char const buf[] = "/ABC/test.exe";
|
|
||||||
char const *result = Dqn_CString8_FileNameFromPath(buf, Dqn_CString8_ArrayCountI(buf), &file_name_size);
|
|
||||||
DQN_TESTER_ASSERTF(&test, file_name_size == 8, "size: %I64d", file_name_size);
|
|
||||||
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(Dqn_String8_Init(result, file_name_size), DQN_STRING8("test.exe")), "%.*s", (int)file_name_size, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: Dqn_CString8_TrimPrefix
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
|
||||||
DQN_TESTER_TEST("Trim prefix") {
|
|
||||||
char const prefix[] = "@123";
|
|
||||||
char const buf[] = "@123string";
|
|
||||||
Dqn_isize trimmed_size = 0;
|
|
||||||
char const *result = Dqn_CString8_TrimPrefix(buf, prefix, Dqn_CString8_ArrayCountI(buf), Dqn_CString8_ArrayCountI(prefix), Dqn_CString8EqCase_Sensitive, &trimmed_size);
|
|
||||||
DQN_TESTER_ASSERTF(&test, trimmed_size == 6, "size: %I64d", trimmed_size);
|
|
||||||
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(Dqn_String8_Init(result, trimmed_size), DQN_STRING8("string")), "%.*s", (int)trimmed_size, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Trim prefix, nullptr trimmed size") {
|
|
||||||
char const prefix[] = "@123";
|
|
||||||
char const buf[] = "@123string";
|
|
||||||
char const *result = Dqn_CString8_TrimPrefix(buf, prefix, Dqn_CString8_ArrayCountI(buf), Dqn_CString8_ArrayCountI(prefix), Dqn_CString8EqCase_Sensitive, nullptr);
|
|
||||||
DQN_TESTER_ASSERT(&test, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: Dqn_CString8_IsAllDigits
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on non-digit string") {
|
|
||||||
char const buf[] = "@123string";
|
|
||||||
Dqn_b32 result = Dqn_CString8_IsAllDigits(buf, Dqn_CString8_ArrayCountI(buf));
|
|
||||||
DQN_TESTER_ASSERT(&test, result == false);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on nullptr") {
|
|
||||||
Dqn_b32 result = Dqn_CString8_IsAllDigits(nullptr, 0);
|
|
||||||
DQN_TESTER_ASSERT(&test, result == false);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on nullptr w/ size") {
|
|
||||||
Dqn_b32 result = Dqn_CString8_IsAllDigits(nullptr, 1);
|
|
||||||
DQN_TESTER_ASSERT(&test, result == false);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on 0 size w/ string") {
|
|
||||||
char const buf[] = "@123string";
|
|
||||||
Dqn_b32 result = Dqn_CString8_IsAllDigits(buf, 0);
|
|
||||||
DQN_TESTER_ASSERT(&test, result == false);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits success") {
|
|
||||||
char const buf[] = "23";
|
|
||||||
Dqn_b32 result = Dqn_CString8_IsAllDigits(buf, Dqn_CString8_ArrayCountI(buf));
|
|
||||||
DQN_TESTER_ASSERT(&test, DQN_CAST(bool)result == true);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on whitespace") {
|
|
||||||
char const buf[] = "23 ";
|
|
||||||
Dqn_b32 result = Dqn_CString8_IsAllDigits(buf, Dqn_CString8_ArrayCountI(buf));
|
|
||||||
DQN_TESTER_ASSERT(&test, DQN_CAST(bool)result == false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return test;
|
return test;
|
||||||
@ -517,7 +520,7 @@ Dqn_Tester TestFString8()
|
|||||||
DQN_TESTER_GROUP(test, "Dqn_FString8") {
|
DQN_TESTER_GROUP(test, "Dqn_FString8") {
|
||||||
DQN_TESTER_TEST("Append too much fails") {
|
DQN_TESTER_TEST("Append too much fails") {
|
||||||
Dqn_FString8<4> str = {};
|
Dqn_FString8<4> str = {};
|
||||||
DQN_TESTER_ASSERT(&test, !Dqn_FString8_AppendCString8(&str, "abcde"));
|
DQN_TESTER_ASSERT(&test, !Dqn_FString8_Append(&str, DQN_STRING8("abcde")));
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Append format string too much fails") {
|
DQN_TESTER_TEST("Append format string too much fails") {
|
||||||
@ -591,7 +594,7 @@ Dqn_Tester TestFixedArray()
|
|||||||
DQN_TESTER_GROUP(test, "Dqn_FArray") {
|
DQN_TESTER_GROUP(test, "Dqn_FArray") {
|
||||||
DQN_TESTER_TEST("Initialise from raw array") {
|
DQN_TESTER_TEST("Initialise from raw array") {
|
||||||
int raw_array[] = {1, 2};
|
int raw_array[] = {1, 2};
|
||||||
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_ICOUNT(raw_array));
|
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_UCOUNT(raw_array));
|
||||||
DQN_TESTER_ASSERT(&test, array.size == 2);
|
DQN_TESTER_ASSERT(&test, array.size == 2);
|
||||||
DQN_TESTER_ASSERT(&test, array.data[0] == 1);
|
DQN_TESTER_ASSERT(&test, array.data[0] == 1);
|
||||||
DQN_TESTER_ASSERT(&test, array.data[1] == 2);
|
DQN_TESTER_ASSERT(&test, array.data[1] == 2);
|
||||||
@ -599,8 +602,8 @@ Dqn_Tester TestFixedArray()
|
|||||||
|
|
||||||
DQN_TESTER_TEST("Erase stable 1 element from array") {
|
DQN_TESTER_TEST("Erase stable 1 element from array") {
|
||||||
int raw_array[] = {1, 2, 3};
|
int raw_array[] = {1, 2, 3};
|
||||||
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_ICOUNT(raw_array));
|
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_UCOUNT(raw_array));
|
||||||
Dqn_FArray_EraseStable(&array, 1);
|
Dqn_FArray_EraseRange(&array, 1 /*begin_index*/, 1 /*count*/, Dqn_FArrayErase_Stable);
|
||||||
DQN_TESTER_ASSERT(&test, array.size == 2);
|
DQN_TESTER_ASSERT(&test, array.size == 2);
|
||||||
DQN_TESTER_ASSERT(&test, array.data[0] == 1);
|
DQN_TESTER_ASSERT(&test, array.data[0] == 1);
|
||||||
DQN_TESTER_ASSERT(&test, array.data[1] == 3);
|
DQN_TESTER_ASSERT(&test, array.data[1] == 3);
|
||||||
@ -608,8 +611,8 @@ Dqn_Tester TestFixedArray()
|
|||||||
|
|
||||||
DQN_TESTER_TEST("Erase unstable 1 element from array") {
|
DQN_TESTER_TEST("Erase unstable 1 element from array") {
|
||||||
int raw_array[] = {1, 2, 3};
|
int raw_array[] = {1, 2, 3};
|
||||||
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_ICOUNT(raw_array));
|
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_UCOUNT(raw_array));
|
||||||
DQN_TESTER_ASSERT(&test, Dqn_FArray_EraseUnstable(&array, 0));
|
Dqn_FArray_EraseRange(&array, 0 /*begin_index*/, 1 /*count*/, Dqn_FArrayErase_Unstable);
|
||||||
DQN_TESTER_ASSERT(&test, array.size == 2);
|
DQN_TESTER_ASSERT(&test, array.size == 2);
|
||||||
DQN_TESTER_ASSERT(&test, array.data[0] == 3);
|
DQN_TESTER_ASSERT(&test, array.data[0] == 3);
|
||||||
DQN_TESTER_ASSERT(&test, array.data[1] == 2);
|
DQN_TESTER_ASSERT(&test, array.data[1] == 2);
|
||||||
@ -618,8 +621,8 @@ Dqn_Tester TestFixedArray()
|
|||||||
DQN_TESTER_TEST("Add 1 element to array") {
|
DQN_TESTER_TEST("Add 1 element to array") {
|
||||||
int const ITEM = 2;
|
int const ITEM = 2;
|
||||||
int raw_array[] = {1};
|
int raw_array[] = {1};
|
||||||
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_ICOUNT(raw_array));
|
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_UCOUNT(raw_array));
|
||||||
Dqn_FArray_Add(&array, ITEM);
|
Dqn_FArray_Add(&array, &ITEM, 1);
|
||||||
DQN_TESTER_ASSERT(&test, array.size == 2);
|
DQN_TESTER_ASSERT(&test, array.size == 2);
|
||||||
DQN_TESTER_ASSERT(&test, array.data[0] == 1);
|
DQN_TESTER_ASSERT(&test, array.data[0] == 1);
|
||||||
DQN_TESTER_ASSERT(&test, array.data[1] == ITEM);
|
DQN_TESTER_ASSERT(&test, array.data[1] == ITEM);
|
||||||
@ -627,99 +630,14 @@ Dqn_Tester TestFixedArray()
|
|||||||
|
|
||||||
DQN_TESTER_TEST("Clear array") {
|
DQN_TESTER_TEST("Clear array") {
|
||||||
int raw_array[] = {1};
|
int raw_array[] = {1};
|
||||||
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_ICOUNT(raw_array));
|
auto array = Dqn_FArray_Init<int, 4>(raw_array, DQN_ARRAY_UCOUNT(raw_array));
|
||||||
Dqn_FArray_Clear(&array, Dqn_ZeroMem_No);
|
Dqn_FArray_Clear(&array);
|
||||||
DQN_TESTER_ASSERT(&test, array.size == 0);
|
DQN_TESTER_ASSERT(&test, array.size == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
|
|
||||||
Dqn_Tester TestHex()
|
|
||||||
{
|
|
||||||
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
|
||||||
Dqn_Tester test = {};
|
|
||||||
DQN_TESTER_GROUP(test, "Dqn_Hex") {
|
|
||||||
DQN_TESTER_TEST("Convert 0x123") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("0x123"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0x123, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert 0xFFFF") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("0xFFFF"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0xFFFF, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert FFFF") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("FFFF"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0xFFFF, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert abCD") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("abCD"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0xabCD, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert 0xabCD") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("0xabCD"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0xabCD, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert 0x") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("0x"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0x0, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert 0X") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("0X"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0x0, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert 3") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("3"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 3, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert f") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("f"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0xf, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert g") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("g"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DQN_TESTER_TEST("Convert -0x3") {
|
|
||||||
uint64_t result = Dqn_Hex_String8ToU64(DQN_STRING8("-0x3"));
|
|
||||||
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t number = 0xd095f6;
|
|
||||||
DQN_TESTER_TEST("Convert %x to string", number) {
|
|
||||||
Dqn_String8 number_hex = Dqn_Hex_BytesToString8Arena(scratch.arena, &number, sizeof(number));
|
|
||||||
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(number_hex, DQN_STRING8("f695d000")), "number_hex=%.*s", DQN_STRING_FMT(number_hex));
|
|
||||||
}
|
|
||||||
|
|
||||||
number = 0xf6ed00;
|
|
||||||
DQN_TESTER_TEST("Convert %x to string", number) {
|
|
||||||
Dqn_String8 number_hex = Dqn_Hex_BytesToString8Arena(scratch.arena, &number, sizeof(number));
|
|
||||||
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(number_hex, DQN_STRING8("00edf600")), "number_hex=%.*s", DQN_STRING_FMT(number_hex));
|
|
||||||
}
|
|
||||||
|
|
||||||
Dqn_String8 hex = DQN_STRING8("0xf6ed00");
|
|
||||||
DQN_TESTER_TEST("Convert %.*s to bytes", DQN_STRING_FMT(hex)) {
|
|
||||||
Dqn_String8 bytes = Dqn_Hex_String8ToBytesArena(scratch.arena, hex);
|
|
||||||
DQN_TESTER_ASSERTF(&test,
|
|
||||||
Dqn_String8_Eq(bytes, DQN_STRING8("\xf6\xed\x00")),
|
|
||||||
"number_hex=%.*s",
|
|
||||||
DQN_STRING_FMT(Dqn_Hex_BytesToString8Arena(scratch.arena, bytes.data, bytes.size)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return test;
|
|
||||||
}
|
|
||||||
|
|
||||||
Dqn_Tester TestIntrinsics()
|
Dqn_Tester TestIntrinsics()
|
||||||
{
|
{
|
||||||
Dqn_Tester test = {};
|
Dqn_Tester test = {};
|
||||||
@ -1270,33 +1188,33 @@ Dqn_Tester TestString8()
|
|||||||
// NOTE: Dqn_String8_IsAllDigits
|
// NOTE: Dqn_String8_IsAllDigits
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
DQN_TESTER_TEST("Is all digits fails on non-digit string") {
|
DQN_TESTER_TEST("Is all digits fails on non-digit string") {
|
||||||
Dqn_b32 result = Dqn_String8_IsAllDigits(DQN_STRING8("@123string"));
|
Dqn_b32 result = Dqn_String8_IsAll(DQN_STRING8("@123string"), Dqn_String8IsAll_Digits);
|
||||||
DQN_TESTER_ASSERT(&test, result == false);
|
DQN_TESTER_ASSERT(&test, result == false);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on nullptr") {
|
DQN_TESTER_TEST("Is all digits fails on nullptr") {
|
||||||
Dqn_b32 result = Dqn_String8_IsAllDigits(Dqn_String8_Init(nullptr, 0));
|
Dqn_b32 result = Dqn_String8_IsAll(Dqn_String8_Init(nullptr, 0), Dqn_String8IsAll_Digits);
|
||||||
DQN_TESTER_ASSERT(&test, result == false);
|
DQN_TESTER_ASSERT(&test, result == false);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on nullptr w/ size") {
|
DQN_TESTER_TEST("Is all digits fails on nullptr w/ size") {
|
||||||
Dqn_b32 result = Dqn_String8_IsAllDigits(Dqn_String8_Init(nullptr, 1));
|
Dqn_b32 result = Dqn_String8_IsAll(Dqn_String8_Init(nullptr, 1), Dqn_String8IsAll_Digits);
|
||||||
DQN_TESTER_ASSERT(&test, result == false);
|
DQN_TESTER_ASSERT(&test, result == false);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on string w/ 0 size") {
|
DQN_TESTER_TEST("Is all digits succeeds on string w/ 0 size") {
|
||||||
char const buf[] = "@123string";
|
char const buf[] = "@123string";
|
||||||
Dqn_b32 result = Dqn_String8_IsAllDigits(Dqn_String8_Init(buf, 0));
|
Dqn_b32 result = Dqn_String8_IsAll(Dqn_String8_Init(buf, 0), Dqn_String8IsAll_Digits);
|
||||||
DQN_TESTER_ASSERT(&test, result == false);
|
DQN_TESTER_ASSERT(&test, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits success") {
|
DQN_TESTER_TEST("Is all digits success") {
|
||||||
Dqn_b32 result = Dqn_String8_IsAllDigits(DQN_STRING8("23"));
|
Dqn_b32 result = Dqn_String8_IsAll(DQN_STRING8("23"), Dqn_String8IsAll_Digits);
|
||||||
DQN_TESTER_ASSERT(&test, DQN_CAST(bool)result == true);
|
DQN_TESTER_ASSERT(&test, DQN_CAST(bool)result == true);
|
||||||
}
|
}
|
||||||
|
|
||||||
DQN_TESTER_TEST("Is all digits fails on whitespace") {
|
DQN_TESTER_TEST("Is all digits fails on whitespace") {
|
||||||
Dqn_b32 result = Dqn_String8_IsAllDigits(DQN_STRING8("23 "));
|
Dqn_b32 result = Dqn_String8_IsAll(DQN_STRING8("23 "), Dqn_String8IsAll_Digits);
|
||||||
DQN_TESTER_ASSERT(&test, DQN_CAST(bool)result == false);
|
DQN_TESTER_ASSERT(&test, DQN_CAST(bool)result == false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1331,6 +1249,144 @@ Dqn_Tester TestString8()
|
|||||||
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(rhs, DQN_STRING8("abcdef")), "[rhs=%.*s]", DQN_STRING_FMT(rhs));
|
DQN_TESTER_ASSERTF(&test, Dqn_String8_Eq(rhs, DQN_STRING8("abcdef")), "[rhs=%.*s]", DQN_STRING_FMT(rhs));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: Dqn_String8_ToI64
|
||||||
|
// =========================================================================================
|
||||||
|
DQN_TESTER_TEST("To I64: Convert null string") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(Dqn_String8_Init(nullptr, 5), 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To I64: Convert empty string") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(DQN_STRING8(""), 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To I64: Convert \"1\"") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(DQN_STRING8("1"), 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To I64: Convert \"-0\"") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(DQN_STRING8("-0"), 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To I64: Convert \"-1\"") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(DQN_STRING8("-1"), 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result == -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To I64: Convert \"1.2\"") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(DQN_STRING8("1.2"), 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To I64: Convert \"1,234\"") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(DQN_STRING8("1,234"), ',');
|
||||||
|
DQN_TESTER_ASSERT(&test, result == 1234);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To I64: Convert \"1,2\"") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(DQN_STRING8("1,2"), ',');
|
||||||
|
DQN_TESTER_ASSERT(&test, result == 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To I64: Convert \"12a3\"") {
|
||||||
|
int64_t result = Dqn_String8_ToI64(DQN_STRING8("12a3"), 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result == 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Dqn_String8_ToU64
|
||||||
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
DQN_TESTER_TEST("To U64: Convert nullptr") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(Dqn_String8_Init(nullptr, 5), 0);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To U64: Convert empty string") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(DQN_STRING8(""), 0);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To U64: Convert \"1\"") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(DQN_STRING8("1"), 0);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 1, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To U64: Convert \"-0\"") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(DQN_STRING8("-0"), 0);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To U64: Convert \"-1\"") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(DQN_STRING8("-1"), 0);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 0, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To U64: Convert \"1.2\"") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(DQN_STRING8("1.2"), 0);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 1, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To U64: Convert \"1,234\"") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(DQN_STRING8("1,234"), ',');
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 1234, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To U64: Convert \"1,2\"") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(DQN_STRING8("1,2"), ',');
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 12, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("To U64: Convert \"12a3\"") {
|
||||||
|
uint64_t result = Dqn_String8_ToU64(DQN_STRING8("12a3"), 0);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == 12, "result: %zu", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Dqn_String8_Find
|
||||||
|
// =========================================================================================
|
||||||
|
DQN_TESTER_TEST("Find: String (char) is not in buffer") {
|
||||||
|
Dqn_String8 buf = DQN_STRING8("836a35becd4e74b66a0d6844d51f1a63018c7ebc44cf7e109e8e4bba57eefb55");
|
||||||
|
Dqn_String8 find = DQN_STRING8("2");
|
||||||
|
Dqn_String8FindResult result = Dqn_String8_Find(buf, find, 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, !result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.offset == 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.string.data == nullptr);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.string.size == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("Find: String (char) is in buffer") {
|
||||||
|
Dqn_String8 buf = DQN_STRING8("836a35becd4e74b66a0d6844d51f1a63018c7ebc44cf7e109e8e4bba57eefb55");
|
||||||
|
Dqn_String8 find = DQN_STRING8("6");
|
||||||
|
Dqn_String8FindResult result = Dqn_String8_Find(buf, find, 0);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.found);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.offset == 2);
|
||||||
|
DQN_TESTER_ASSERT(&test, result.string.data[0] == '6');
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Dqn_String8_FileNameFromPath
|
||||||
|
// =========================================================================================
|
||||||
|
DQN_TESTER_TEST("File name from Windows path") {
|
||||||
|
Dqn_String8 buf = DQN_STRING8("C:\\ABC\\test.exe");
|
||||||
|
Dqn_String8 result = Dqn_String8_FileNameFromPath(buf);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == DQN_STRING8("test.exe"), "%.*s", DQN_STRING_FMT(result));
|
||||||
|
}
|
||||||
|
|
||||||
|
DQN_TESTER_TEST("File name from Linux path") {
|
||||||
|
Dqn_String8 buf = DQN_STRING8("/ABC/test.exe");
|
||||||
|
Dqn_String8 result = Dqn_String8_FileNameFromPath(buf);
|
||||||
|
DQN_TESTER_ASSERTF(&test, result == DQN_STRING8("test.exe"), "%.*s", DQN_STRING_FMT(result));
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: Dqn_String8_TrimPrefix
|
||||||
|
// =========================================================================================
|
||||||
|
DQN_TESTER_TEST("Trim prefix") {
|
||||||
|
Dqn_String8 prefix = DQN_STRING8("@123");
|
||||||
|
Dqn_String8 buf = DQN_STRING8("@123string");
|
||||||
|
Dqn_String8 result = Dqn_String8_TrimPrefix(buf, prefix, Dqn_String8EqCase_Sensitive);
|
||||||
|
DQN_TESTER_ASSERT(&test, result == DQN_STRING8("string"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
@ -1571,13 +1627,12 @@ void TestRunSuite()
|
|||||||
Dqn_Tester tests[]
|
Dqn_Tester tests[]
|
||||||
{
|
{
|
||||||
TestArena(),
|
TestArena(),
|
||||||
|
TestBin(),
|
||||||
TestBinarySearch(),
|
TestBinarySearch(),
|
||||||
TestCString8(),
|
|
||||||
TestDSMap(),
|
TestDSMap(),
|
||||||
TestFString8(),
|
TestFString8(),
|
||||||
TestFs(),
|
TestFs(),
|
||||||
TestFixedArray(),
|
TestFixedArray(),
|
||||||
TestHex(),
|
|
||||||
TestIntrinsics(),
|
TestIntrinsics(),
|
||||||
#if defined(DQN_TEST_WITH_KECCAK)
|
#if defined(DQN_TEST_WITH_KECCAK)
|
||||||
TestKeccak(),
|
TestKeccak(),
|
||||||
|
Loading…
Reference in New Issue
Block a user