Add automatic tests

The first automatic  tests are for the ECS and  the utilities. None of
them are testing much.
This commit is contained in:
Eric-Paul Ickhorn 2024-09-14 09:43:42 +02:00
parent 25399640a4
commit a6595f584c
9 changed files with 148 additions and 0 deletions

View File

@ -0,0 +1,3 @@
# ECS Auto-Tests
This folder contains the fully automated tests of the Voxula ECS.

View File

@ -0,0 +1,11 @@
#ifndef VOXULA_ECS_AUTOMATIC_TEST_H
#define VOXULA_ECS_AUTOMATIC_TEST_H
#include <voxula/internals/ecs.h>
int main(int argc, char **argv);
bool test_many_entities();
#endif // VOXULA_ECS_AUTOMATIC_TEST_H

View File

@ -0,0 +1,19 @@
#include <voxula/tests/ecs.h>
#include <stdlib.h>
bool test_many_entities()
{
vecs_s *ecs = vecs_new(NULL);
uint32_t max_entities = 1024 * 1024;
vecs_entity_s *entities = malloc(max_entities * sizeof(vecs_entity_s));
uint32_t num_entities = 0;
while(num_entities < max_entities)
{
entities[num_entities] = vecs_summon(ecs);
++num_entities;
}
free(entities);
vecs_free(ecs);
return true;
}

View File

@ -0,0 +1,7 @@
#include <voxula/tests/ecs.h>
#include <stdio.h>
int main(int argc, char **argv)
{
test_many_entities(NULL);
}

View File

@ -0,0 +1,4 @@
# Utility Auto-Tests
This folder contains the fully-automatic testing suite of the Voxula
Engine's utilites.

View File

@ -0,0 +1,11 @@
#ifndef VOXULA_UTILITY_AUTOMATIC_TETS_H
#define VOXULA_UTILITY_AUTOMATIC_TETS_H
#include <voxula/internals/utility.h>
int main(int argc, char **argv);
bool vx_test_case_force_continuation_creation();
#endif // VOXULA_UTILITY_AUTOMATIC_TETS_H

View File

@ -0,0 +1,27 @@
#include <voxula/internals/utility.h>
#include <stdlib.h>
bool vx_test_case_jumping_pointer_web()
{
}
bool vx_test_case_force_continuation_creation()
{
uint32_t pool_capacity = 64;
vx_pool_s *pool = vx_new_pool(8, pool_capacity);
void **items = malloc(4 * pool_capacity * sizeof(void *));
uint32_t item_index = 0;
while(item_index < (pool_capacity * 4))
{
items[item_index] = vx_pool(pool);
++item_index;
}
free(items);
return true;
}
bool test_pool_interaction()
{
vx_new_pool(8, 64);
}

View File

@ -0,0 +1,9 @@
#include <voxula/tests/utility.h>
int main(int argc, char **argv)
{
if(vx_test_case_force_continuation_creation())
{
puts("OK(utility/force-continuation-creation)");
}
}

57
scripts/auto-test.bash Normal file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env bash
cd $(dirname $0)
SCRIPT_PATH=$(pwd)
cd ..
PROJECT_PATH=$(pwd)
function list_modules() {
MODULE_FOLDER=$1
MODULES=$(ls $MODULE_FOLDER)
for MODULE in $MODULES
do
if [[ -d "$MODULE_FOLDER/$MODULE/auto-test" ]];
then
echo $MODULE
fi
done
}
function list_sources() {
SOURCE_PATH=$1
ENTRY_PATH=$(pwd)
cd $SOURCE_PATH
SOURCES=$(find . -type f | grep ".c$")
for SOURCE in $SOURCES
do
echo $SOURCE_PATH/$(echo $SOURCE | cut -c 3-)
done
cd $ENTRY_PATH
}
function make_include_statements() {
MODULE_NAME=$1
for INCLUDE_PATH in $(cat modules/$MODULE_NAME/includes.txt)
do
MODIFIED_PATH="${INCLUDE_PATH//"{module}"/"$PROJECT_PATH/modules/$MODULE_NAME"}"
MODIFIED_PATH="${MODIFIED_PATH//"{module-folder}"/"$PROJECT_PATH/modules"}"
echo "-I ${MODIFIED_PATH//"{dependencies}"/"$PROJECT_PATH/dependencies"}"
done
}
MODULES=$(list_modules "modules/")
for MODULE in $MODULES
do
SOURCES=$(list_sources "modules/$MODULE/auto-test/src-c")
INCLUDE_STATEMENTS=$(make_include_statements $MODULE)
gcc -o $PROJECT_PATH/.build/test-$MODULE.elf \
$SOURCES \
.build/archives/*.a \
-I "modules/$MODULE/auto-test/inc-c" \
$INCLUDE_STATEMENTS
./.build/test-$MODULE.elf
done