Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CIDockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ RUN apt-get update && \
apt-get install apt-utils -y && \
apt-get install git curl zip unzip tar cmake ninja-build g++ -y && \
apt-get install autoconf autoconf-archive libtool pkg-config automake -y && \
apt-get install libx11-dev libxrandr-dev libxcursor-dev libxi-dev libudev-dev libgl1-mesa-dev -y
apt-get install libx11-dev libxrandr-dev libxcursor-dev libxi-dev libudev-dev libgl1-mesa-dev -y \
apt-get install libcriterion-dev

RUN git clone https://github.com/Microsoft/vcpkg.git /root/vcpkg

Expand Down
8 changes: 8 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@ set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
if (UNIX)
set(CMAKE_CXX_FLAGS "--coverage -O0 -g -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS "--coverage -lgcov")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-exclude-files=tests/*")
endif()

enable_testing()

add_subdirectory(tests)
add_subdirectory(server)
add_subdirectory(client)
add_subdirectory(shared)
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ RUN apt-get update && \
apt-get install git curl zip unzip tar cmake ninja-build g++ -y && \
apt-get install autoconf autoconf-archive libtool pkg-config automake -y && \
apt-get install libx11-dev libxrandr-dev libxcursor-dev libxi-dev libudev-dev libgl1-mesa-dev -y
apt-get install libcriterion-dev

RUN git clone https://github.com/Microsoft/vcpkg.git /root/vcpkg

Expand Down
19 changes: 19 additions & 0 deletions tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

BUILD_TYPE=$1

if [ -z "$BUILD_TYPE" ]; then
echo "Usage: $0 <build_type>"
echo "Example: $0 debug"
exit 1
fi

BUILD_DIR="cmake-build-$BUILD_TYPE"

if [ ! -d "$BUILD_DIR" ]; then
echo "Build directory $BUILD_DIR does not exist. Please run the build first."
exit 1
fi

cd $BUILD_DIR
ctest --output-on-failure
30 changes: 30 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
cmake_minimum_required(VERSION 3.27.4)
project(r-type_tests)

include_directories(include)

find_package(Boost COMPONENTS stacktrace_basic CONFIG REQUIRED)
find_path(CRITERION_INCLUDE_DIR criterion/criterion.h PATH_SUFFIXES criterion)
find_library(CRITERION_LIBRARY NAMES criterion libcriterion)

add_compile_options(-DBOOST_STACKTRACE_USE_ADDR2LINE)

set(SOURCE_FILES shared.cpp)

add_executable(r-type_tests ${SOURCE_FILES})

target_link_libraries(
r-type_tests
criterion
Boost::stacktrace_basic
Clock GameLogic ECS network Config Logger Texture dl
)

add_test(NAME empty_registry COMMAND r-type_tests)
add_test(NAME add_entity COMMAND r-type_tests)
add_test(NAME remove_entity COMMAND r-type_tests)
add_test(NAME is_entity_valid COMMAND r-type_tests)
add_test(NAME add_component COMMAND r-type_tests)
add_test(NAME set_component COMMAND r-type_tests)
add_test(NAME get_no_component COMMAND r-type_tests)
add_test(NAME reset_entity COMMAND r-type_tests)
63 changes: 63 additions & 0 deletions tests/shared.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#include <criterion/criterion.h>
#include "Registry.hpp"

/* Registry */

Test(shared, empty_registry) {
ecs::Registry registry;
cr_assert_eq(registry.getEntities().size(), 0);
}

Test(shared, add_entity) {
auto registry = std::make_shared<ecs::Registry>();
auto entity = registry->createEntity(registry);
cr_assert_eq(registry->getEntities().size(), 1);
cr_assert_eq(*registry->getEntities().begin(), entity);
}

Test(shared, remove_entity) {
auto registry = std::make_shared<ecs::Registry>();
auto entity = registry->createEntity(registry);
registry->removeEntity(entity);
cr_assert_eq(registry->getEntities().size(), 0);
}

Test(shared, is_entity_valid) {
auto registry = std::make_shared<ecs::Registry>();
auto entity = registry->createEntity(registry);
cr_assert(registry->isEntityValid(entity));
registry->removeEntity(entity);
cr_assert_not(registry->isEntityValid(entity));
}

Test(shared, add_component) {
auto registry = std::make_shared<ecs::Registry>();
auto entity = registry->createEntity(registry);
registry->addComponent<ecs::component::Position>(entity);
cr_assert(registry->contains<ecs::component::Position>(entity));
}

Test(shared, set_component) {
auto registry = std::make_shared<ecs::Registry>();
auto entity = registry->createEntity(registry);
ecs::component::Position position{10, 20};
registry->setComponent<ecs::component::Position>(entity, position);
cr_assert_eq(registry->getComponent<ecs::component::Position>(entity).x, 10);
cr_assert_eq(registry->getComponent<ecs::component::Position>(entity).y, 20);
}

Test(shared, get_no_component) {
auto registry = std::make_shared<ecs::Registry>();
auto entity = registry->createEntity(registry);
cr_assert_eq(registry->getNoComponent(entity), 0);
registry->addComponent<ecs::component::Position>(entity);
cr_assert_eq(registry->getNoComponent(entity), 1);
}

Test(shared, reset_entity) {
auto registry = std::make_shared<ecs::Registry>();
auto entity = registry->createEntity(registry);
registry->addComponent<ecs::component::Position>(entity);
registry->reset(entity);
cr_assert_not(registry->contains<ecs::component::Position>(entity));
}