From 1d11c8b162929b51db96de3df21fb1e0b244b05f Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Tue, 16 Jun 2026 01:34:03 -0400 Subject: [PATCH] Now off catch2 and on my own testing fuc2. --- Makefile | 4 +- meson.build | 11 ++--- tests/guecs.cpp | 16 +++++-- tests/lel.cpp | 107 +++++++++++++++++++++++++-------------------- tests/main.cpp | 31 +++++++++++++ tests/shaders.cpp | 40 ++++++++++------- tests/sound.cpp | 21 ++++++--- tests/textures.cpp | 25 +++++++---- wraps/catch2.wrap | 11 ----- wraps/fuc2.wrap | 9 ++++ 10 files changed, 177 insertions(+), 98 deletions(-) create mode 100644 tests/main.cpp delete mode 100644 wraps/catch2.wrap create mode 100644 wraps/fuc2.wrap diff --git a/Makefile b/Makefile index 5e1b2b8..4069b4f 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ tracy_build: meson compile -j 10 -C builddir test: build - ./builddir/runtests + ./builddir/fuc2it run: build test ifeq '$(OS)' 'Windows_NT' @@ -49,7 +49,7 @@ clean: meson compile --clean -C builddir debug_test: build - gdb --nx -x .gdbinit --ex run --args builddir/runtests -e + gdb --nx -x .gdbinit --ex run --args builddir/fuc2it -e win_installer: powershell 'start "C:\Program Files (x86)\solicus\InstallForge\bin\ifbuilderenvx86.exe" scripts\win_installer.ifp' diff --git a/meson.build b/meson.build index 15a920f..02f9c18 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ # HEY BUG: when you have a . spec in a LEL it doesn't work on text project('lel-guecs', 'cpp', - version: '0.7.3', + version: '0.7.4', default_options: [ 'cpp_std=c++23', 'cpp_args=-D_GLIBCXX_DEBUG=1 -D_GLIBCXX_DEBUG_PEDANTIC=1', @@ -51,7 +51,7 @@ elif build_machine.system() == 'darwin' ] endif -catch2 = subproject('catch2').get_variable('catch2_with_main_dep') +fuc2 = subproject('fuc2').get_variable('fuc2_dep') fmt = subproject('fmt').get_variable('fmt_dep') json = subproject('nlohmann_json').get_variable('nlohmann_json_dep') freetype2 = subproject('freetype2').get_variable('freetype_dep') @@ -117,19 +117,20 @@ lel_guecs_sfml_dep = declare_dependency( link_with: lel_guecs_sfml_lib, include_directories: lel_guecs_inc) -executable('runtests', [ +executable('fuc2it', [ + 'tests/guecs.cpp', 'tests/lel.cpp', + 'tests/main.cpp', 'tests/shaders.cpp', 'tests/sound.cpp', 'tests/textures.cpp', - 'tests/guecs.cpp', ], cpp_args: cpp_args, link_args: link_args, override_options: exe_defaults, include_directories: lel_guecs_inc, link_with: [lel_guecs_lib, lel_guecs_sfml_lib], - dependencies: dependencies + [catch2]) + dependencies: dependencies + [fuc2]) executable('clicker_game', [ 'demos/clicker_game.cpp', diff --git a/tests/guecs.cpp b/tests/guecs.cpp index 33d5765..82f558f 100644 --- a/tests/guecs.cpp +++ b/tests/guecs.cpp @@ -1,10 +1,20 @@ -#include #include #include "guecs/ui.hpp" #include +#include using namespace guecs; +using namespace fuc2; -TEST_CASE("prototype one gui", "[ecs-gui]") { - // accidentally gutted, will recover later +namespace guecs_tests { + void test_prototype() { + // accidentally gutted, will recover later + } + + fuc2::Set TESTS{ + .name="GUECS tests (empty!)", + .tests={ + {"test_prototype", test_prototype}, + } + }; } diff --git a/tests/lel.cpp b/tests/lel.cpp index 244e751..7928746 100644 --- a/tests/lel.cpp +++ b/tests/lel.cpp @@ -1,61 +1,72 @@ #include "guecs/lel.hpp" -#include #include #include +#include -TEST_CASE("test basic ops", "[lel]") { - lel::Parser parser(0, 0, 500, 500); +using namespace fuc2; - bool good = parser.parse( - "[ label_1 | label3 | test1]" - "[ *(300,300)text1 | %(150)people | ^test2]" - "[ >label2 | _ | .test3]" - "[ =message | buttons | test4]"); +namespace lel_tests { + void test_basic_ops() { + lel::Parser parser(0, 0, 500, 500); - REQUIRE(good); + bool good = parser.parse( + "[ label_1 | label3 | test1]" + "[ *(300,300)text1 | %(150)people | ^test2]" + "[ >label2 | _ | .test3]" + "[ =message | buttons | test4]"); - for(size_t rowcount = 0; rowcount < parser.grid.size(); rowcount++) { - auto& row = parser.grid[rowcount]; + CHECK(good); - for(size_t colcount = 0; colcount < row.size(); colcount++) { - auto &name = row[colcount]; - if(name == "_") { - REQUIRE(!parser.cells.contains(name)); - } else if(name == "_MAIN") { - // it's the main cell which covers the whole area - auto &cell = parser.cells.at(name); - REQUIRE(cell.row == 0); - REQUIRE(cell.col == 0); - REQUIRE(cell.x == parser.grid_x); - REQUIRE(cell.y == parser.grid_y); - REQUIRE(cell.w == parser.grid_w); - REQUIRE(cell.h == parser.grid_h); - } else { - auto &cell = parser.cells.at(name); - REQUIRE(cell.row == int(rowcount)); - REQUIRE(cell.col == int(colcount)); + for(size_t rowcount = 0; rowcount < parser.grid.size(); rowcount++) { + auto& row = parser.grid[rowcount]; + + for(size_t colcount = 0; colcount < row.size(); colcount++) { + auto &name = row[colcount]; + if(name == "_") { + CHECK(!parser.cells.contains(name)); + } else if(name == "_MAIN") { + // it's the main cell which covers the whole area + auto &cell = parser.cells.at(name); + CHECK(cell.row == 0); + CHECK(cell.col == 0); + CHECK(cell.x == parser.grid_x); + CHECK(cell.y == parser.grid_y); + CHECK(cell.w == parser.grid_w); + CHECK(cell.h == parser.grid_h); + } else { + auto &cell = parser.cells.at(name); + CHECK(cell.row == int(rowcount)); + CHECK(cell.col == int(colcount)); + } } } + + CHECK(parser.cells.size() == 11); + CHECK(parser.cells.at("label2").right == true); + CHECK(parser.cells.at("text1").expand == true); + CHECK(parser.cells.at("text1").w == 300); + CHECK(parser.cells.at("text1").h == 300); + CHECK(parser.cells.at("people").expand == false); + CHECK(parser.cells.at("message").expand == false); + CHECK(parser.cells.at("message").center == true); + + for(auto& [name, cell] : parser.cells) { + CHECK(cell.w > 0); + CHECK(cell.h > 0); + } + + auto hit = parser.hit(10, 10); + CHECK(*hit == "label_1"); + + auto nohit = parser.hit(1000, 1000); + CHECK(!nohit); + CHECK(nohit == std::nullopt); } - REQUIRE(parser.cells.size() == 11); - REQUIRE(parser.cells.at("label2").right == true); - REQUIRE(parser.cells.at("text1").expand == true); - REQUIRE(parser.cells.at("text1").w == 300); - REQUIRE(parser.cells.at("text1").h == 300); - REQUIRE(parser.cells.at("people").expand == false); - REQUIRE(parser.cells.at("message").expand == false); - REQUIRE(parser.cells.at("message").center == true); - - for(auto& [name, cell] : parser.cells) { - REQUIRE(cell.w > 0); - REQUIRE(cell.h > 0); - } - - auto hit = parser.hit(10, 10); - REQUIRE(*hit == "label_1"); - - auto nohit = parser.hit(1000, 1000); - REQUIRE(!nohit); - REQUIRE(nohit == std::nullopt); + fuc2::Set TESTS{ + .name="lel parser tests", + .tests={ + {"test_basic_ops", test_basic_ops}, + } + }; } diff --git a/tests/main.cpp b/tests/main.cpp new file mode 100644 index 0000000..59b16c5 --- /dev/null +++ b/tests/main.cpp @@ -0,0 +1,31 @@ +#include + +// you can also place these into a .hpp you include if +// they're too numerous to manage +namespace lel_tests { + extern fuc2::Set TESTS; +} + +namespace guecs_tests { + extern fuc2::Set TESTS; +} + +namespace shader_tests { + extern fuc2::Set TESTS; +} + +namespace sound_tests { + extern fuc2::Set TESTS; +} + +namespace texture_tests { + extern fuc2::Set TESTS; +} + +int main(int argc, char* argv[]) { + run(lel_tests::TESTS); + run(guecs_tests::TESTS); + run(shader_tests::TESTS); + run(sound_tests::TESTS); + run(texture_tests::TESTS); +} diff --git a/tests/shaders.cpp b/tests/shaders.cpp index 2b39e1f..6e6cf6b 100644 --- a/tests/shaders.cpp +++ b/tests/shaders.cpp @@ -1,26 +1,36 @@ -#include #include #include #include "guecs/sfml/shaders.hpp" +#include +using namespace fuc2; using namespace fmt; -TEST_CASE("shader loading/init works", "[shaders]") { - shaders::init(); - int version = shaders::version(); +namespace shader_tests { + void test_shader_loading() { + shaders::init(); + int version = shaders::version(); - std::shared_ptr ui_shader = shaders::get("ui_shader"); - auto other_test = shaders::get("ui_shader"); + std::shared_ptr ui_shader = shaders::get("ui_shader"); + auto other_test = shaders::get("ui_shader"); - REQUIRE(ui_shader != nullptr); - REQUIRE(ui_shader == other_test); - REQUIRE(shaders::updated(version) == false); + CHECK(ui_shader != nullptr); + CHECK(ui_shader == other_test); + CHECK(shaders::updated(version) == false); - int new_version = shaders::reload(); - REQUIRE(version != shaders::version()); - REQUIRE(version != new_version); - REQUIRE(shaders::version() == new_version); - REQUIRE(shaders::updated(version) == true); - version = new_version; + int new_version = shaders::reload(); + CHECK(version != shaders::version()); + CHECK(version != new_version); + CHECK(shaders::version() == new_version); + CHECK(shaders::updated(version) == true); + version = new_version; + } + + fuc2::Set TESTS{ + .name="shader tests", + .tests={ + {"test_shader_loading", test_shader_loading}, + } + }; } diff --git a/tests/sound.cpp b/tests/sound.cpp index 32dab05..6f22929 100644 --- a/tests/sound.cpp +++ b/tests/sound.cpp @@ -1,14 +1,23 @@ -#include #include #include #include "guecs/sfml/sound.hpp" +#include -using namespace fmt; +using namespace fuc2; -TEST_CASE("test sound manager", "[sound]") { - sound::init(); +namespace sound_tests { + void test_sound_manager() { + sound::init(); - sound::play("blank"); + sound::play("blank"); - sound::play_at("blank", 0.1, 0.1, 0.1); + sound::play_at("blank", 0.1, 0.1, 0.1); + } + + fuc2::Set TESTS{ + .name="sound manager tests", + .tests={ + {"test_sound_manager", test_sound_manager}, + } + }; } diff --git a/tests/textures.cpp b/tests/textures.cpp index 68ccee0..0d0dea2 100644 --- a/tests/textures.cpp +++ b/tests/textures.cpp @@ -1,15 +1,24 @@ -#include #include #include #include "guecs/sfml/textures.hpp" +#include -using namespace fmt; +using namespace fuc2; -TEST_CASE("test texture management", "[textures]") { - textures::init(); - auto spider = textures::get("textures_test"); - REQUIRE(spider.sprite != nullptr); - REQUIRE(spider.texture != nullptr); +namespace texture_tests { + void test_texture_management() { + textures::init(); + auto spider = textures::get("textures_test"); + CHECK(spider.sprite != nullptr); + CHECK(spider.texture != nullptr); - auto image = textures::load_image("assets/textures_test.png"); + auto image = textures::load_image("assets/textures_test.png"); + } + + fuc2::Set TESTS{ + .name="texture manager tests", + .tests={ + {"test_texture_management", test_texture_management}, + } + }; } diff --git a/wraps/catch2.wrap b/wraps/catch2.wrap deleted file mode 100644 index f9bf436..0000000 --- a/wraps/catch2.wrap +++ /dev/null @@ -1,11 +0,0 @@ -[wrap-file] -directory = Catch2-3.7.1 -source_url = https://github.com/catchorg/Catch2/archive/v3.7.1.tar.gz -source_filename = Catch2-3.7.1.tar.gz -source_hash = c991b247a1a0d7bb9c39aa35faf0fe9e19764213f28ffba3109388e62ee0269c -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/catch2_3.7.1-1/Catch2-3.7.1.tar.gz -wrapdb_version = 3.7.1-1 - -[provide] -catch2 = catch2_dep -catch2-with-main = catch2_with_main_dep diff --git a/wraps/fuc2.wrap b/wraps/fuc2.wrap new file mode 100644 index 0000000..50fe0df --- /dev/null +++ b/wraps/fuc2.wrap @@ -0,0 +1,9 @@ +[wrap-git] +directory=fuc2-0.1.0 +url=https://lcthw.dev/cpp/fuc2.git +revision=HEAD +depth=1 +method=meson + +[provide] +fuc2 = fuc2_dep