Fix the unit tests
This commit is contained in:
parent
fb60fc44e1
commit
4442ccfb03
31
Code/Dqn.h
31
Code/Dqn.h
@ -1513,8 +1513,10 @@ DQN_API char const *Dqn_Str_SkipToNextWordInPlace (char const **src);
|
||||
DQN_API char const *Dqn_Str_SkipWhitespaceInPlace (char const **src);
|
||||
DQN_API char const *Dqn_Str_TrimWhitespaceAround (char const *src, Dqn_isize size, Dqn_isize *new_size);
|
||||
DQN_API char const *Dqn_Str_TrimPrefix (char const *src, Dqn_isize size, char const *prefix, Dqn_isize prefix_size, Dqn_isize *trimmed_size);
|
||||
DQN_API Dqn_u64 Dqn_Str_ToU64 (char const *buf, int len = -1);
|
||||
DQN_API Dqn_i64 Dqn_Str_ToI64 (char const *buf, int len = -1);
|
||||
|
||||
// separator: The separator between the thousand-th digits, i.e. separator = ',' converts '1,234' to '1234'.
|
||||
DQN_API Dqn_u64 Dqn_Str_ToU64 (char const *buf, int len = -1, char separator = ',');
|
||||
DQN_API Dqn_i64 Dqn_Str_ToI64 (char const *buf, int len = -1, char separator = ',');
|
||||
|
||||
// -------------------------------------------------------------------------------------------------
|
||||
//
|
||||
@ -2146,6 +2148,7 @@ Dqn_Map<T> Dqn_Map_InitWithMemory(void *mem, Dqn_isize mem_size)
|
||||
// NOTE: Generate the map
|
||||
//
|
||||
Dqn_isize bytes_required = bytes_for_values + bytes_for_usage_bitset;
|
||||
(void)bytes_required;
|
||||
DQN_ASSERT_MSG(bytes_required <= mem_size,
|
||||
"(bytes_for_values = %I64d, bytes_for_usage_bitset = %I64d, mem_size = %I64d)",
|
||||
bytes_for_values, bytes_for_usage_bitset, mem_size);
|
||||
@ -2697,7 +2700,7 @@ DQN_API void Dqn_Array_Pop(Dqn_Array<T> *a, Dqn_isize num, Dqn_ZeroMem zero_mem)
|
||||
void *begin = a->data + a->size;
|
||||
void *end = a->data + (a->size + num);
|
||||
Dqn_isize bytes = DQN_CAST(Dqn_isize) end - DQN_CAST(Dqn_isize) begin;
|
||||
Dqn__ZeroMemBytes(zero_mem, begin, bytes);
|
||||
Dqn__ZeroMemBytes(begin, bytes, zero_mem);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@ -3602,7 +3605,9 @@ DQN_API void *Dqn_Allocator__Allocate(Dqn_Allocator *allocator, Dqn_isize size,
|
||||
void *ptr = zero_mem == Dqn_ZeroMem::Yes ? DQN_CALLOC(1, DQN_CAST(size_t)size) : DQN_MALLOC(size);
|
||||
result = Dqn_PointerMetadata_Init(ptr, size, alignment);
|
||||
if (!result && allocator->type == Dqn_AllocatorType::XHeap)
|
||||
{
|
||||
DQN_ASSERT(result);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -4146,7 +4151,7 @@ DQN_API Dqn_i64 Dqn_Safe_MulI64(Dqn_i64 a, Dqn_i64 b)
|
||||
DQN_API Dqn_u64 Dqn_Safe_AddU64(Dqn_u64 a, Dqn_u64 b)
|
||||
{
|
||||
DQN_ASSERT_MSG(a <= DQN_U64_MAX - b, "%I64u <= %I64u", a, DQN_U64_MAX - b);
|
||||
Dqn_u64 result = (a <= DQN_U64_MAX / b) ? (a * b) : DQN_U64_MAX;
|
||||
Dqn_u64 result = (a <= DQN_U64_MAX / b) ? (a + b) : DQN_U64_MAX;
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -4535,7 +4540,7 @@ DQN_API char const *Dqn_Str_TrimPrefix(char const *src, Dqn_isize size, char con
|
||||
}
|
||||
|
||||
|
||||
DQN_API Dqn_u64 Dqn_Str_ToU64(char const *buf, int len)
|
||||
DQN_API Dqn_u64 Dqn_Str_ToU64(char const *buf, int len, char separator)
|
||||
{
|
||||
Dqn_u64 result = 0;
|
||||
if (!buf) return result;
|
||||
@ -4547,19 +4552,22 @@ DQN_API Dqn_u64 Dqn_Str_ToU64(char const *buf, int len)
|
||||
for (int buf_index = 0; buf_index < len; ++buf_index)
|
||||
{
|
||||
char ch = buf_ptr[buf_index];
|
||||
if (ch == ',') continue;
|
||||
if (ch < '0' || ch > '9') break;
|
||||
if (buf_index && ch == separator)
|
||||
continue;
|
||||
|
||||
if (ch < '0' || ch > '9')
|
||||
break;
|
||||
|
||||
Dqn_u64 val = DQN_CAST(Dqn_u64)(ch - '0');
|
||||
result = Dqn_Safe_AddU64(result, val);
|
||||
result = Dqn_Safe_MulU64(result, 10);
|
||||
result = Dqn_Safe_AddU64(result, val);
|
||||
result = Dqn_Safe_MulU64(result, 10);
|
||||
}
|
||||
|
||||
result /= 10;
|
||||
return result;
|
||||
}
|
||||
|
||||
DQN_API Dqn_i64 Dqn_Str_ToI64(char const *buf, int len)
|
||||
DQN_API Dqn_i64 Dqn_Str_ToI64(char const *buf, int len, char separator)
|
||||
{
|
||||
Dqn_i64 result = 0;
|
||||
if (!buf) return result;
|
||||
@ -4579,7 +4587,7 @@ DQN_API Dqn_i64 Dqn_Str_ToI64(char const *buf, int len)
|
||||
for (int buf_index = 0; buf_index < len; ++buf_index)
|
||||
{
|
||||
char ch = buf_ptr[buf_index];
|
||||
if (ch == ',') continue;
|
||||
if (buf_index && ch == separator) continue;
|
||||
if (ch < '0' || ch > '9') break;
|
||||
|
||||
Dqn_i64 val = ch - '0';
|
||||
@ -4754,6 +4762,7 @@ DQN_API Dqn_Timer Dqn_Timer_Begin()
|
||||
#if defined(DQN_OS_WIN32)
|
||||
Dqn_Timer result = {};
|
||||
BOOL qpc_result = QueryPerformanceCounter(&result.start);
|
||||
(void)qpc_result;
|
||||
DQN_ASSERT_MSG(qpc_result, "MSDN says this can only fail when running on a version older than Windows XP");
|
||||
#endif
|
||||
return result;
|
||||
|
@ -38,7 +38,7 @@ struct TestingState
|
||||
testing_state.allocator = Dqn_Allocator_InitWithArena(&testing_state.arena_); \
|
||||
testing_state.test = {}; \
|
||||
}; \
|
||||
testing_state.test.name = Dqn_String_Fmt(&testing_state.allocator, test_name); \
|
||||
testing_state.test.name = Dqn_String_InitFmt(&testing_state.allocator, test_name); \
|
||||
testing_state.test.scope_started = true; \
|
||||
testing_state.num_tests_in_group++
|
||||
|
||||
@ -54,8 +54,8 @@ struct TestingState
|
||||
DQN_ASSERT(testing_state.test.scope_started); \
|
||||
if (!(expr)) \
|
||||
{ \
|
||||
testing_state.test.fail_expr = Dqn_String_Fmt(&testing_state.allocator, #expr); \
|
||||
testing_state.test.fail_msg = Dqn_String_Fmt(&testing_state.allocator, msg, ##__VA_ARGS__); \
|
||||
testing_state.test.fail_expr = Dqn_String_InitFmt(&testing_state.allocator, #expr); \
|
||||
testing_state.test.fail_msg = Dqn_String_InitFmt(&testing_state.allocator, msg, ##__VA_ARGS__); \
|
||||
}
|
||||
|
||||
#define TEST_EXPECT(testing_state, expr) TEST_EXPECT_MSG(testing_state, expr, "")
|
||||
@ -70,7 +70,7 @@ void TestingState_PrintGroupResult(TestingState const *result)
|
||||
bool all_tests_passed = (result->num_tests_ok_in_group == result->num_tests_in_group);
|
||||
char buf[256] = {};
|
||||
int size = snprintf(buf, Dqn_ArrayCount(buf), "%02d/%02d Tests Passed ", result->num_tests_ok_in_group, result->num_tests_in_group);
|
||||
Dqn_isize remaining_size = DESIRED_LEN - size - 1;
|
||||
Dqn_isize remaining_size = DESIRED_LEN - size;
|
||||
remaining_size = (all_tests_passed) ? remaining_size - Dqn_CharCount(STATUS_OK) : remaining_size - Dqn_CharCount(STATUS_FAIL);
|
||||
remaining_size = DQN_MAX(remaining_size, 0);
|
||||
DQN_FOR_EACH(i, remaining_size) fprintf(stdout, " ");
|
||||
@ -99,7 +99,7 @@ void TestState_PrintResult(TestState const *result)
|
||||
if (result->fail_expr.str)
|
||||
{
|
||||
fprintf(stdout, ANSI_COLOR_RED "%s" ANSI_COLOR_RESET "\n", STATUS_FAIL);
|
||||
fprintf(stdout, "%s%sReason: [%s] %s\n", INDENT, INDENT, result->fail_expr.str, result->fail_msg.str);
|
||||
fprintf(stdout, "%s%sReason: Expression failed (%s) %s\n", INDENT, INDENT, result->fail_expr.str, result->fail_msg.str);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -754,55 +754,55 @@ static void UnitTests()
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert nullptr");
|
||||
Dqn_u64 result = Dqn_Str_ToU64(nullptr);
|
||||
TEST_EXPECT(testing_state, result == 0);
|
||||
TEST_EXPECT_MSG(testing_state, result == 0, "result: %zu", result);
|
||||
}
|
||||
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert empty string");
|
||||
Dqn_u64 result = Dqn_Str_ToU64("");
|
||||
TEST_EXPECT(testing_state, result == 0);
|
||||
TEST_EXPECT_MSG(testing_state, result == 0, "result: %zu", result);
|
||||
}
|
||||
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert \"1\"");
|
||||
Dqn_u64 result = Dqn_Str_ToU64("1");
|
||||
TEST_EXPECT(testing_state, result == 1);
|
||||
TEST_EXPECT_MSG(testing_state, result == 1, "result: %zu", result);
|
||||
}
|
||||
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert \"-0\"");
|
||||
Dqn_u64 result = Dqn_Str_ToU64("-0");
|
||||
TEST_EXPECT(testing_state, result == 0);
|
||||
TEST_EXPECT_MSG(testing_state, result == 0, "result: %zu", result);
|
||||
}
|
||||
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert \"-1\"");
|
||||
Dqn_u64 result = Dqn_Str_ToU64("-1");
|
||||
TEST_EXPECT(testing_state, result == 0);
|
||||
TEST_EXPECT_MSG(testing_state, result == 0, "result: %zu", result);
|
||||
}
|
||||
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert \"1.2\"");
|
||||
Dqn_u64 result = Dqn_Str_ToU64("1.2");
|
||||
TEST_EXPECT(testing_state, result == 1);
|
||||
TEST_EXPECT_MSG(testing_state, result == 1, "result: %zu", result);
|
||||
}
|
||||
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert \"1,234\"");
|
||||
Dqn_u64 result = Dqn_Str_ToU64("1,234");
|
||||
TEST_EXPECT(testing_state, result == 1234);
|
||||
TEST_EXPECT_MSG(testing_state, result == 1234, "result: %zu", result);
|
||||
}
|
||||
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert \"1,2\"");
|
||||
Dqn_u64 result = Dqn_Str_ToU64("1,2");
|
||||
TEST_EXPECT(testing_state, result == 12);
|
||||
TEST_EXPECT_MSG(testing_state, result == 12, "result: %zu", result);
|
||||
}
|
||||
|
||||
{
|
||||
TEST_START_SCOPE(testing_state, "Convert \"12a3\"");
|
||||
Dqn_u64 result = Dqn_Str_ToU64("12a3");
|
||||
TEST_EXPECT(testing_state, result == 12);
|
||||
TEST_EXPECT_MSG(testing_state, result == 12, "result: %zu", result);
|
||||
}
|
||||
}
|
||||
|
||||
|
BIN
Project/dqn.rdbg
Normal file
BIN
Project/dqn.rdbg
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user