Growing array + tests + growing_array_example.c
This commit is contained in:
parent
f36e2b73a7
commit
c7daaac338
6 changed files with 77 additions and 7 deletions
2
TODO
2
TODO
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
|
|
||||||
- Arenas
|
- Arenas
|
||||||
|
- Dynamic array
|
||||||
|
|
||||||
- Needs testing:
|
- Needs testing:
|
||||||
- Audio format channel conversions
|
- Audio format channel conversions
|
||||||
|
|
5
build.c
5
build.c
|
@ -3,8 +3,6 @@
|
||||||
///
|
///
|
||||||
// Build config stuff
|
// Build config stuff
|
||||||
|
|
||||||
#define RUN_TESTS 1
|
|
||||||
|
|
||||||
#define INITIAL_PROGRAM_MEMORY_SIZE MB(5)
|
#define INITIAL_PROGRAM_MEMORY_SIZE MB(5)
|
||||||
|
|
||||||
// You might want to increase this if you get a log warning saying the temporary storage was overflown.
|
// You might want to increase this if you get a log warning saying the temporary storage was overflown.
|
||||||
|
@ -39,10 +37,11 @@ typedef struct Context_Extra {
|
||||||
|
|
||||||
// #include "oogabooga/examples/text_rendering.c"
|
// #include "oogabooga/examples/text_rendering.c"
|
||||||
// #include "oogabooga/examples/custom_logger.c"
|
// #include "oogabooga/examples/custom_logger.c"
|
||||||
#include "oogabooga/examples/renderer_stress_test.c"
|
// #include "oogabooga/examples/renderer_stress_test.c"
|
||||||
// #include "oogabooga/examples/tile_game.c"
|
// #include "oogabooga/examples/tile_game.c"
|
||||||
// #include "oogabooga/examples/audio_test.c"
|
// #include "oogabooga/examples/audio_test.c"
|
||||||
// #include "oogabooga/examples/custom_shader.c"
|
// #include "oogabooga/examples/custom_shader.c"
|
||||||
|
#include "oogabooga/examples/growing_array_example.c"
|
||||||
|
|
||||||
// This is where you swap in your own project!
|
// This is where you swap in your own project!
|
||||||
// #include "entry_yourepicgamename.c"
|
// #include "entry_yourepicgamename.c"
|
||||||
|
|
|
@ -289,6 +289,7 @@ typedef u8 bool;
|
||||||
#include "utility.c"
|
#include "utility.c"
|
||||||
|
|
||||||
#include "hash_table.c"
|
#include "hash_table.c"
|
||||||
|
#include "growing_array.c"
|
||||||
|
|
||||||
#include "os_interface.c"
|
#include "os_interface.c"
|
||||||
|
|
||||||
|
|
|
@ -81,8 +81,6 @@ Os_Window window;
|
||||||
|
|
||||||
#endif // NOT OOGABOOGA_LINK_EXTERNAL_INSTANCE
|
#endif // NOT OOGABOOGA_LINK_EXTERNAL_INSTANCE
|
||||||
|
|
||||||
inline bool bytes_match(void *a, void *b, u64 count) { return memcmp(a, b, count) == 0; }
|
|
||||||
|
|
||||||
inline int vsnprintf(char* buffer, size_t n, const char* fmt, va_list args) {
|
inline int vsnprintf(char* buffer, size_t n, const char* fmt, va_list args) {
|
||||||
return os.crt_vsnprintf(buffer, n, fmt, args);
|
return os.crt_vsnprintf(buffer, n, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1223,8 +1223,77 @@ void test_sort() {
|
||||||
}
|
}
|
||||||
#endif /* OOGABOOGA_HEADLESS */
|
#endif /* OOGABOOGA_HEADLESS */
|
||||||
|
|
||||||
|
typedef struct Test_Thing {
|
||||||
|
int foo;
|
||||||
|
float bar;
|
||||||
|
} Test_Thing;
|
||||||
|
void test_growing_array() {
|
||||||
|
Test_Thing *things = 0;
|
||||||
|
|
||||||
|
growing_array_init((void**)&things, sizeof(Test_Thing), get_heap_allocator());
|
||||||
|
|
||||||
|
Test_Thing new_thing;
|
||||||
|
new_thing.foo = 5;
|
||||||
|
new_thing.bar = 420.69;
|
||||||
|
growing_array_add((void**)&things, &new_thing);
|
||||||
|
|
||||||
|
assert(growing_array_get_valid_count(things) == 1, "Failed: growing_array_get_valid_count");
|
||||||
|
|
||||||
|
new_thing.foo = 1;
|
||||||
|
new_thing.bar = 123.45;
|
||||||
|
growing_array_add((void**)&things, &new_thing);
|
||||||
|
|
||||||
|
assert(growing_array_get_valid_count(things) == 2, "Failed: growing_array_get_valid_count");
|
||||||
|
|
||||||
|
assert(things[0].foo == 5 && floats_roughly_match(things[0].bar, 420.69), "Failed: growing_array_add");
|
||||||
|
assert(things[1].foo == 1 && floats_roughly_match(things[1].bar, 123.45), "Failed: growing_array_add");
|
||||||
|
|
||||||
|
growing_array_ordered_remove_by_index((void**)&things, 0);
|
||||||
|
assert(things[0].foo == 1 && floats_roughly_match(things[0].bar, 123.45), "Failed: growing_array_ordered_remove_by_index");
|
||||||
|
assert(growing_array_get_valid_count(things) == 1, "Failed: growing_array_get_valid_count");
|
||||||
|
|
||||||
|
new_thing.foo = 5;
|
||||||
|
new_thing.bar = 420.69;
|
||||||
|
growing_array_add((void**)&things, &new_thing);
|
||||||
|
assert(things[1].foo == 5 && floats_roughly_match(things[1].bar, 420.69), "Failed: growing_array_add");
|
||||||
|
|
||||||
|
assert(growing_array_get_valid_count(things) == 2, "Failed: growing_array_get_valid_count");
|
||||||
|
|
||||||
|
growing_array_unordered_remove_by_index((void**)&things, 0);
|
||||||
|
assert(things[0].foo == 5 && floats_roughly_match(things[0].bar, 420.69), "Failed: growing_array_unordered_remove_by_index");
|
||||||
|
assert(growing_array_get_valid_count(things) == 1, "Failed: growing_array_get_valid_count");
|
||||||
|
|
||||||
|
|
||||||
|
for (u32 i = 0; i < 100; i += 1) {
|
||||||
|
new_thing.foo = i;
|
||||||
|
new_thing.bar = i * 4.0;
|
||||||
|
growing_array_add((void**)&things, &new_thing);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(growing_array_get_valid_count(things) == 101, "Failed: growing_array_get_valid_count");
|
||||||
|
|
||||||
|
// Unordered remove by pointer
|
||||||
|
Test_Thing *thing = &things[50];
|
||||||
|
Test_Thing copy = *thing;
|
||||||
|
bool found = growing_array_unordered_remove_by_pointer((void**)&things, thing);
|
||||||
|
assert(found, "Failed: growing_array_unordered_remove_by_pointer");
|
||||||
|
assert(!bytes_match(©, thing, sizeof(Test_Thing)), "Failed: growing_array_unordered_remove_by_pointer");
|
||||||
|
|
||||||
|
// Ordered remove by pointer
|
||||||
|
thing = &things[50];
|
||||||
|
copy = *thing;
|
||||||
|
found = growing_array_ordered_remove_by_pointer((void**)&things, thing);
|
||||||
|
assert(found, "Failed: growing_array_unordered_remove_by_pointer");
|
||||||
|
assert(!bytes_match(©, thing, sizeof(Test_Thing)), "Failed: growing_array_unordered_remove_by_pointer");
|
||||||
|
|
||||||
|
assert(growing_array_get_valid_count(things) == 99, "Failed: growing_array_get_valid_count");
|
||||||
|
}
|
||||||
|
|
||||||
void oogabooga_run_tests() {
|
void oogabooga_run_tests() {
|
||||||
|
|
||||||
|
print("Testing growing array... ");
|
||||||
|
test_growing_array();
|
||||||
|
print("OK!\n");
|
||||||
|
|
||||||
print("Testing allocator... ");
|
print("Testing allocator... ");
|
||||||
test_allocator(true);
|
test_allocator(true);
|
||||||
|
@ -1268,5 +1337,7 @@ void oogabooga_run_tests() {
|
||||||
print("OK!\n");
|
print("OK!\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print("All tests ok!\n");
|
print("All tests ok!\n");
|
||||||
}
|
}
|
|
@ -98,3 +98,4 @@ void merge_sort(void *collection, void *help_buffer, u64 item_count, u64 item_si
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool bytes_match(void *a, void *b, u64 count) { return memcmp(a, b, count) == 0; }
|
Reference in a new issue