Skip to content
Snippets Groups Projects
Commit bede9e07 authored by Alfred Burgess's avatar Alfred Burgess
Browse files

Merge branch 'unitTesting'

parents 9f9355c2 7c115441
No related merge requests found
......@@ -15,6 +15,10 @@ bin/
# Libraries
libs/
# Doctest generated files
*.gcna
*.gcdo
# Build directory
build/
......
......@@ -13,7 +13,7 @@
enum LogLevel
{
DEBUG, INFO, WARNING, ERROR, FATAL
DEBUG, INFO, WARNING, ERR, FATAL
};
class Logger
......
......@@ -4,6 +4,14 @@
#include <iostream>
#include <cstdint>
#ifdef __TEST_RUNNER__
#ifndef DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#endif // DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"
#include "testlist.hpp"
#endif // __TEST_RUNNER__
enum GenerationMethod
{
......@@ -11,10 +19,10 @@ enum GenerationMethod
Cave
};
#include "maths/maths.h"
#include "save-manager.h"
#include "game-state.h"
#include "world-hex-2d.h"
#include "world-map-3d.h"
#include "chunk.h"
#include "config-parser.h"
#include "game-engine.h"
......
......@@ -3,6 +3,7 @@
#include <cmath>
class Vec2
{
public:
......
#ifndef WORLD_MAP_3D_H
#define WORLD_MAP_3D_H
#include <unordered_map>
#include "chunk.h"
#include "logger.h"
class WorldMap3D
{
public:
WorldMap3D();
WorldMap3D( uint8_t width, uint8_t height, uint8_t depth);
~WorldMap3D();
void generateWorld();
Chunk* getChunk( int chunkX, int chunkY, int chunkZ );
private:
Logger& _logger;
std::unordered_map<int, std::unordered_map<int, std::unordered_map<int, Chunk*>>> chunks_;
uint8_t _width; // x
uint8_t _height; // y
uint8_t _depth; // z
};
#endif // WORLD_MAP_3D_H
This diff is collapsed.
......@@ -19,7 +19,7 @@ endif
# Compiler flags
# DEBUG BUILD
CXXFLAGS += -g
CXXFLAGS += -g --coverage -O0
# Linker Flags
LDFLAGS =
......@@ -33,8 +33,14 @@ INC_DIR = include
# Object files directory
BUILD_DIR = build
# Test directory
TEST_DIR = test
# Test Variables
TEST_MAIN = DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
TEST_FLAG = __TEST_RUNNER__
TEST_DEFINES = -D$(TEST_MAIN) -D$(TEST_FLAG)
TEST_TARGET = $(BIN_DIR)/test_runner
TEST_HEADER = lib/doctest
TEST_DIR = tests
TEST_BUILD_DIR = $(BUILD_DIR)/.test
# Executable directory
BIN_DIR = bin
......@@ -53,39 +59,41 @@ TEST_FILES = $(wildcard $(TEST_DIR)/**/*.test.cpp $(TEST_DIR)/*.test.cpp)
# Object files
OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SRC_FILES))
TEST_OBJ_FILES = $(patsubst $(TEST_DIR)/%.test.cpp,$(BUILD_DIR)/%.o,$(TEST_FILES))
# Define this for running console-only
CONSOLE_DEFINE = -Dconsole
TEST_OBJ_FILES = $(patsubst $(TEST_DIR)/%.test.hpp,$(TEST_BUILD_DIR)/%.test.o,$(TEST_FILES))
TEST_SRC_OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(TEST_BUILD_DIR)/%.src.o,$(SRC_FILES))
# TEST_SRC_OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(TEST_BUILD_DIR)/%.src.o,$(SRC_FILES))
# Output executable
TARGET = $(BIN_DIR)/game
TEST_TARGET = $(BIN_DIR)/test_runner
all: $(TARGET)
test: $(TEST_TARGET)
./$(TEST_TARGET)
$(TARGET): $(OBJ_FILES)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJ_FILES) $(SDL_LIBRARY) $(SDL_OPTIONS)
console: $(OBJ_FILES)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJ_FILES) $(CONSOLE_DEFINE)
$(TEST_TARGET): $(TEST_OBJ_FILES) $(TEST_SRC_OBJ_FILES)
$(CXX) $(CXXFLAGS) -o $(TEST_TARGET) $(TEST_OBJ_FILES) $(TEST_SRC_OBJ_FILES) $(SDL_LIBRARY) $(SDL_OPTIONS)
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp ${INC_DIR}/*.h
$(TEST_BUILD_DIR)/%.src.o: $(SRC_DIR)/%.cpp ${INC_DIR}/%.h
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(TEST_DEFINES) $(LDFLAGS) -I$(INC_DIR) -I$(TEST_HEADER) -I$(TEST_DIR) -c -o $@ $<
$(TEST_BUILD_DIR)/%.test.o: $(SRC_DIR)/%.test.hpp $(SRC_DIR)/%.cpp ${INC_DIR}/%.h
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(TEST_DEFINES) $(LDFLAGS) -I$(INC_DIR) -I$(TEST_HEADER) -c -o $@ $<
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp ${INC_DIR}/%.h
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(LDFLAGS) -I$(INC_DIR) -c -o $@ $<
clean:
rm -rf $(BIN_DIR)/* $(BUILD_DIR)/* test_runnr
rm -r ./*~
rm -r $(SRC_DIR)/*~ ${INC_DIR}/*~
run_tests: $(TEST_OBJ_FILES)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(INC_DIRS) -o ${TEST_TARGET} $^
./${TEST_TARGET}
$(BUILD_DIR)/%.o: $(TEST_DIR)/%.test.cpp
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(INC_DIRS) -c -o $@ $<
rm -rf $(TEST_BUILD_DIR)/* $(TEST_TARGET)
rm -rf $(BIN_DIR)/* $(BUILD_DIR)/*
rm -rf ./*~ ./*.swp ./*.gcno
rm -rf *~
run: $(TARGET)
./$(TARGET)
......@@ -11,7 +11,7 @@ void Logger::setLogLevel( LogLevel level )
void Logger::debug( const std::string& message ) { this->log( LogLevel::DEBUG, message ); }
void Logger::info( const std::string& message ) { this->log( LogLevel::INFO, message ); }
void Logger::warning( const std::string& message ) { this->log( LogLevel::WARNING, message ); }
void Logger::error( const std::string& message ) { this->log( LogLevel::ERROR, message ); }
void Logger::error( const std::string& message ) { this->log( LogLevel::ERR, message ); }
void Logger::fatal( const std::string& message ) { this->log( LogLevel::FATAL, message ); }
Logger::Logger()
......@@ -35,7 +35,7 @@ std::string Logger::logLevelToString( LogLevel level )
case LogLevel::DEBUG: return "DEBUG";
case LogLevel::INFO: return "INFO";
case LogLevel::WARNING: return "WARNING";
case LogLevel::ERROR: return "ERROR";
case LogLevel::ERR: return "ERROR";
case LogLevel::FATAL: return "FATAL";
default: return "UNKNOWN";
}
......@@ -47,7 +47,7 @@ std::string Logger::getLevelColour( LogLevel level )
case LogLevel::DEBUG: return BLK;
case LogLevel::INFO: return CYN;
case LogLevel::WARNING: return YEL;
case LogLevel::ERROR: return RED;
case LogLevel::ERR: return RED;
case LogLevel::FATAL: return MAG;
default: return CRESET;
}
......
#include "main.h"
#ifndef __TEST_RUNNER__
int main( int argc, char* argv[] ) {
const uint16_t SCREEN_HEIGHT = 600;
......@@ -58,4 +59,11 @@ int main( int argc, char* argv[] ) {
logger.info( "Process Ending" );
return 0;
}
// int /*WINAPI*/ WinMain(/*HINSTANCE hInstance, HINSTANCE, LPSTR, int*/) { main(); return 0; }
#else // __TEST_RUNNER__
//int /*WINAPI*/ WinMain(/*HINSTANCE hInstance, HINSTANCE, LPSTR, int*/) {
// main( 0, nullptr );
// return 0;
//}
#endif // __TEST_RUNNER__
File moved
#include "world-map-3d.h"
WorldMap3D::WorldMap3D()
:WorldMap3D( 5, 5, 5 )
{}
WorldMap3D::WorldMap3D(
uint8_t width,
uint8_t height,
uint8_t depth
) :
_logger( Logger::instance() ),
_width(width), _height(height), _depth(depth)
{
this->_logger.info( "Creating new world" );
this->generateWorld();
}
WorldMap3D::~WorldMap3D(){
this->_logger.info( "Cleaning world" );
// Clean Chunk Map
for( const auto& [keyX, value1] : this->chunks_)
{
for( const auto& [keyY, value2] : value1)
{
for( const auto& [keyZ, chunk] : value2)
{ delete chunk; }
}
}
}
Chunk* WorldMap3D::getChunk(int chunkX, int chunkY, int chunkZ)
{
auto chX = chunks_.find( chunkX );
if( chX != chunks_.end() )
{
auto chY = chX->second.find( chunkY );
if( chY != chX->second.end() )
{
auto chZ = chY->second.find( chunkZ );
if( chZ != chY->second.end() )
{ return chZ->second; }
}
}
return nullptr;
}
void WorldMap3D::generateWorld()
{
this->_logger.info( "Generating initial world" );
for( uint8_t x = 0; x < this->_width; x++ )
{
for( uint8_t y = 0; y < this->_height; y++ )
{
for( uint8_t z = 0; z < this->_depth; z++ )
{
Chunk* chunk = new Chunk( x, y, z );
this->chunks_[z][y][x] = chunk;
}
}
}
}
#include <iostream>
#include "doctest.h"
#include "maths/vec2.h"
TEST_CASE( "Testing Operator Comparisons" ) {
Vec2 a( 1, 5 );
Vec2 b( 2, 4 );
SUBCASE( "Addition" )
{
Vec2 c = a + b;
CHECK( c.x == 3 );
CHECK( c.y == 9 );
}
SUBCASE( "Subtraction" )
{
Vec2 c = a - b;
CHECK( c.x == -1 );
CHECK( c.y == 1 );
}
}
#ifndef __TESTLIST_INCLUDES__
#define __TESTLIST_INCLUDES__
#include "maths/vec2.test.hpp"
#endif // __TESTLIST_INCLUDES__
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment