Création Test

This commit is contained in:
Crizomb 2025-06-13 01:25:45 +02:00
parent 611ff37653
commit dd67b76d1f
6 changed files with 79 additions and 6 deletions

View file

@ -46,3 +46,5 @@ add_custom_command(TARGET simpleGame POST_BUILD
"${FMOD_PATH}/api/core/lib/${CPU_THING}/${FMOD_DLL_NAME}"
"$<TARGET_FILE_DIR:simpleGame>"
)
add_subdirectory(Test)

View file

@ -19,11 +19,24 @@ private:
// Constructor is rivate, use create
NoteTile(float play_time, float good_interval, NotePlaceEnum place);
// For unit testing
public:
// Good key press for this note, is if player press good place, within
// [play_time - good_interval/2, play_time + good_interval/2]
static void create(float play_time, float good_interval, NotePlaceEnum place);
// Usefull in test, but don't use it anywhere
static void clear() { existing_tiles.clear(); };
// Should be called when one of arrows key pressed, return True if it's a good
// press
bool CheckPress(float press_time, NotePlaceEnum key_pressed);
bool checkPress(float press_time, NotePlaceEnum key_pressed);
// Some getters usefull in test :
float getPlayTime() const { return play_time; };
float getGoodInterval() const { return good_interval; };
NotePlaceEnum getPlace() const { return place; };
NoteSprite getNodeSprite() const { return note_sprite; };
static const std::vector<std::unique_ptr<NoteTile>> &getExistingTiles() {
return existing_tiles;
};
};

View file

@ -1,9 +1,9 @@
#include "NoteTile.hpp"
#include "NoteSprite.hpp"
#include <SFML/System/Vector2.hpp>
#include <memory>
std::vector<std::unique_ptr<NoteTile>> NoteTile::existing_tiles;
std::vector<std::unique_ptr<NoteTile>> NoteTile::existing_tiles{};
// private
NoteTile::NoteTile(float play_time, float good_interval, NotePlaceEnum place)
: play_time(play_time), good_interval(good_interval), place(place),
@ -11,16 +11,17 @@ NoteTile::NoteTile(float play_time, float good_interval, NotePlaceEnum place)
// TODO do real note_sprite init, make it fall at good speed far enough...
note_sprite.sprite.setPosition(sf::Vector2f(200, 0));
note_sprite.fall_speed = 1;
NoteTile::existing_tiles.push_back(std::unique_ptr<NoteTile>(this));
}
// public
void NoteTile::create(float play_time, float good_interval,
NotePlaceEnum place) {
NoteTile(play_time, good_interval, place);
// Can't use make_unique because constructor is private
existing_tiles.push_back(
std::unique_ptr<NoteTile>(new NoteTile(play_time, good_interval, place)));
}
bool NoteTile::CheckPress(float press_time, NotePlaceEnum) {
bool NoteTile::checkPress(float press_time, NotePlaceEnum) {
for (const auto &note_tile : NoteTile::existing_tiles) {
if (note_tile->play_time - note_tile->good_interval / 2 < press_time &&
note_tile->play_time + note_tile->good_interval / 2 > press_time) {

View file

@ -0,0 +1,26 @@
#
# Lines inspired by https://google.github.io/googletest/quickstart-cmake.html
#
# Note: include(GoogleTest)and enable_testing() already done in top CMakeLists.txt
add_executable(unitTests
NoteTileTest.cpp
../Include/NoteTile.hpp ../Source/NoteTile.cpp ../Source/NoteSprite.cpp
)
target_include_directories(unitTests
PRIVATE
../Include
)
target_link_libraries(unitTests GTest::gtest_main sfml-graphics)
if (WIN32)
target_link_libraries(unitTests wsock32.lib ws2_32.lib)
else() # We are under UNIX
target_link_options(unitTests PRIVATE -pthread)
endif()
# The next line enables CMakes test runner to discover the tests included in the binary,
# using the GoogleTest CMake module (which was included in root CMakeLists.txt).
include(GoogleTest)
gtest_discover_tests(unitTests)

View file

@ -0,0 +1,18 @@
#include <gtest/gtest.h>
#include "../Include/NoteTile.hpp"
#include "NoteSprite.hpp"
namespace NoteTile_test {
TEST(NoteFileTest, Yes) { EXPECT_EQ(0, 0); }
TEST(NoteFileTest, No) { EXPECT_EQ(0, 1); }
TEST(NoteTileTest, CreateTile) {
NoteTile::clear();
NoteTile::create(2.0f, 0.5f, NotePlaceEnum::Right);
EXPECT_FLOAT_EQ(NoteTile::getExistingTiles()[0]->getPlayTime(), 2.0f);
EXPECT_FLOAT_EQ(NoteTile::getExistingTiles()[0]->getGoodInterval(), 0.5f);
EXPECT_EQ(NoteTile::getExistingTiles()[0]->getPlace(), NotePlaceEnum::Right);
}
}; // namespace NoteTile_test