Implement common_atoi and add unit tests

This commit is contained in:
Doyle Thai 2016-08-24 15:25:58 +10:00
parent 1f2c2082a0
commit 84a2c5e382
3 changed files with 63 additions and 4 deletions

View File

@ -74,8 +74,41 @@ void common_itoa(i32 value, char *buf, i32 bufSize)
reverseString(buf, common_strlen(buf)); reverseString(buf, common_strlen(buf));
} }
i32 common_atoi(char *string, i32 len) // TODO(doyle): Consider if we should trash ptrs in string operations in general
i32 common_atoi(const char *string, const i32 len)
{ {
if (len == 0) return -1;
// TODO(doyle): Implement ATOI // TODO(doyle): Implement ATOI
return 0; i32 index = 0;
if (string[index] != '-' && string[index] != '+' &&
(string[index] < '0' || string[index] > '9'))
{
return -1;
}
b32 isNegative = FALSE;
if (string[index] == '-' || string[index] == '+')
{
if (string[index] == '-') isNegative = TRUE;
index++;
}
i32 result = 0;
for (i32 i = index; i < len; i++)
{
if (string[i] >= '0' && string[i] <= '9')
{
result *= 10;
result += string[i] - '0';
}
else
{
break;
}
}
if (isNegative) result *= -1;
return result;
} }

View File

@ -402,7 +402,9 @@ INTERNAL void assetInit(GameState *state)
} }
} }
#if 1
DEBUG_RECURSIVE_PRINT_XML_TREE(&root); DEBUG_RECURSIVE_PRINT_XML_TREE(&root);
#endif
node = &root; node = &root;
while (node) while (node)
@ -420,6 +422,12 @@ INTERNAL void assetInit(GameState *state)
{ {
// TODO(doyle): Fill in details properly // TODO(doyle): Fill in details properly
Rect rect = {0}; Rect rect = {0};
// TODO(doyle): Work around for now in xml reading,
// reading the last node closing node not being merged
// to the parent
if (!subTextureAttrib->name) continue;
if (common_strcmp(subTextureAttrib->name, "name") == 0) if (common_strcmp(subTextureAttrib->name, "name") == 0)
{ {
} }
@ -762,11 +770,29 @@ INTERNAL v2 getPosRelativeToRect(Rect rect, v2 offset,
return result; return result;
} }
INTERNAL void unitTest()
{
ASSERT(common_atoi("-2", common_strlen("-2")) == -2);
ASSERT(common_atoi("100", common_strlen("100")) == 100);
ASSERT(common_atoi("1", common_strlen("1")) == 1);
ASSERT(common_atoi("954 32", common_strlen("954 32")) == 954);
ASSERT(common_atoi("", 0) == -1);
ASSERT(common_atoi(" 32", common_strlen(" 32")) == -1);
ASSERT(common_atoi("+32", common_strlen("+32")) == 32);
ASSERT(common_atoi("+ 32", common_strlen("+ 32")) == 0);
}
// TODO(doyle): Remove and implement own random generator! // TODO(doyle): Remove and implement own random generator!
#include <time.h> #include <time.h>
#include <stdlib.h> #include <stdlib.h>
void worldTraveller_gameInit(GameState *state, v2 windowSize) void worldTraveller_gameInit(GameState *state, v2 windowSize)
{ {
#ifdef DENGINE_DEBUG
unitTest();
#endif
i32 result = audio_init(&state->audioManager); i32 result = audio_init(&state->audioManager);
if (result) if (result)
{ {

View File

@ -35,6 +35,6 @@ char *common_memset(char *const ptr, const i32 value, const i32 numBytes);
// Max buffer size should be 11 for 32 bit integers // Max buffer size should be 11 for 32 bit integers
void common_itoa(i32 value, char *buf, i32 bufSize); void common_itoa(i32 value, char *buf, i32 bufSize);
i32 common_atoi(char *string, i32 len); i32 common_atoi(const char *string, const i32 len);
#endif #endif