From 0762a73bffee1e8df7f5095ee770d3eb3c764c0f Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 20 May 2021 20:41:46 +0100 Subject: [PATCH] Clarify tests, allow make -C test run Signed-off-by: falkTX --- tests/Color.cpp | 14 ++++++------ tests/Makefile | 56 +++++++++++++++++++++++++++--------------------- tests/README.txt | 42 +++++++++++++++++++++++++++++++++--- tests/Window.cpp | 4 ---- tests/tests.hpp | 3 +++ 5 files changed, 80 insertions(+), 39 deletions(-) diff --git a/tests/Color.cpp b/tests/Color.cpp index 0e572a401..412de3a70 100644 --- a/tests/Color.cpp +++ b/tests/Color.cpp @@ -46,10 +46,10 @@ int main() // constructor gives correct integer values normalized to float (arguments are r, g, b, a; in order) { Color c(51, 102, 153); - DISTRHO_ASSERT_EQUAL(c.red, 0.2f, "red value is 0.2 (integer 51)"); - DISTRHO_ASSERT_EQUAL(c.green, 0.4f, "green value is 0.4 (integer 102)"); - DISTRHO_ASSERT_EQUAL(c.blue, 0.6f, "blue value is 0.6 (integer 153)"); - DISTRHO_ASSERT_EQUAL(c.alpha, 1.0f, "alpha value is 1"); + DISTRHO_ASSERT_SAFE_EQUAL(c.red, 0.2f, "red value is 0.2 (integer 51)"); + DISTRHO_ASSERT_SAFE_EQUAL(c.green, 0.4f, "green value is 0.4 (integer 102)"); + DISTRHO_ASSERT_SAFE_EQUAL(c.blue, 0.6f, "blue value is 0.6 (integer 153)"); + DISTRHO_ASSERT_SAFE_EQUAL(c.alpha, 1.0f, "alpha value is 1"); Color white(255, 255, 255); DISTRHO_ASSERT_EQUAL(white.red, 1.0f, "white's red value is 1"); @@ -177,9 +177,9 @@ int main() // half point, round to 1 decimal point due to precision loss Color grey = Color::fromHTML("#7b7b7b"); - DISTRHO_ASSERT_EQUAL(std::round(grey.red*10)/10, 0.5f, "grey's rounded red value is 0.5"); - DISTRHO_ASSERT_EQUAL(std::round(grey.green*10)/10, 0.5f, "grey's rounded green value is 0.5"); - DISTRHO_ASSERT_EQUAL(std::round(grey.blue*10)/10, 0.5f, "grey's rounded blue value is 0.5"); + DISTRHO_ASSERT_SAFE_EQUAL(std::round(grey.red*10)/10, 0.5f, "grey's rounded red value is 0.5"); + DISTRHO_ASSERT_SAFE_EQUAL(std::round(grey.green*10)/10, 0.5f, "grey's rounded green value is 0.5"); + DISTRHO_ASSERT_SAFE_EQUAL(std::round(grey.blue*10)/10, 0.5f, "grey's rounded blue value is 0.5"); } // check bounds diff --git a/tests/Makefile b/tests/Makefile index 1d79aca47..7c6e2d303 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -17,40 +17,34 @@ BUILD_CXX_FLAGS += -Wno-extra -Wno-missing-field-initializers # --------------------------------------------------------------------------------------------------------------------- -TESTS = Application Color Point NanoSubWidgets +MANUAL_TESTS = +UNIT_TESTS = Application Color Point + ifeq ($(HAVE_CAIRO),true) -TESTS += Demo.cairo -WTESTS += Window.cairo +MANUAL_TESTS += Demo.cairo +UNIT_TESTS += Window.cairo endif ifeq ($(HAVE_OPENGL),true) -TESTS += Demo.opengl -WTESTS += Window.opengl +MANUAL_TESTS += Demo.opengl +MANUAL_TESTS += NanoSubWidgets +UNIT_TESTS += Window.opengl +endif +ifeq ($(HAVE_STUB),true) +UNIT_TESTS += Window.stub endif ifeq ($(HAVE_VULKAN),true) -TESTS += Demo.vulkan -WTESTS = Window.vulkan +UNIT_TESTS += Window.vulkan endif -TARGETS = $(TESTS:%=../build/tests/%$(APP_EXT)) -TARGETS += $(WTESTS:Window.%=../build/tests/Window.%$(APP_EXT)) +MANUAL_TARGETS = $(MANUAL_TESTS:%=../build/tests/%$(APP_EXT)) +UNIT_TARGET = $(UNIT_TESTS:%=../build/tests/%$(APP_EXT)) -OBJS = $(TESTS:%=../build/tests/%.cpp.o) -OBJS += $(WTESTS:Window.%=../build/tests/Window.cpp.%.o) +ALL_OBJS = $(MANUAL_TESTS:%=../build/tests/%.cpp.o) +ALL_OBJS += $(UNIT_TESTS:%=../build/tests/%.cpp.o) # --------------------------------------------------------------------------------------------------------------------- -ifeq ($(HAVE_CAIRO),true) -endif - -ifeq ($(HAVE_OPENGL),true) -endif - -ifeq ($(HAVE_VULKAN),true) -endif - -# --------------------------------------------------------------------------------------------------------------------- - -all: $(TARGETS) +all: $(MANUAL_TARGETS) $(UNIT_TARGET) # --------------------------------------------------------------------------------------------------------------------- @@ -61,8 +55,8 @@ endef # valgrind --leak-check=full $@ -run: $(TARGETS) - $(foreach TEST,$(TARGETS),$(call RUN_TEST,$(TEST))) +run: $(UNIT_TARGET) + $(foreach TEST,$^,$(call RUN_TEST,$(TEST))) # --------------------------------------------------------------------------------------------------------------------- @@ -92,6 +86,11 @@ clean: @echo "Compiling $< (OpenGL)" $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(OPENGL_FLAGS) -DDGL_OPENGL -c -o $@ +../build/tests/%.cpp.stub.o: %.cpp + -@mkdir -p ../build/tests + @echo "Compiling $< (Stub)" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ + ../build/tests/%.cpp.vulkan.o: %.cpp -@mkdir -p ../build/tests @echo "Compiling $< (Vulkan)" @@ -112,10 +111,17 @@ clean: @echo "Linking $*" $(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(OPENGL_LIBS) -o $@ +../build/tests/%.stub$(APP_EXT): ../build/tests/%.cpp.stub.o + @echo "Linking $*" + $(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) -o $@ + ../build/tests/%.vulkan$(APP_EXT): ../build/tests/%.cpp.vulkan.o @echo "Linking $*" $(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(VULKAN_LIBS) -o $@ +# --------------------------------------------------------------------------------------------------------------------- +# linking steps (special, links against DGL static lib) + ../build/tests/Demo.cairo$(APP_EXT): ../build/tests/Demo.cpp.cairo.o ../build/libdgl-cairo.a @echo "Linking Demo (Cairo)" $(SILENT)$(CXX) $^ $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(CAIRO_LIBS) -o $@ diff --git a/tests/README.txt b/tests/README.txt index 4d597ac6a..953e93976 100644 --- a/tests/README.txt +++ b/tests/README.txt @@ -1,6 +1,42 @@ This directory contains several tests for DPF related things, from graphics to plugin stuff to utilities. Each *.cpp file is meant to be its own test. -In order to test DPF components individually, these tests do not link against DGL directly, -but will directly import the needed source code. -All files must be self-contained, in order to prevent surprises in regards global state and initialization stuff. +In order to test DPF components individually, some of these tests do not link against DGL but import/include its files. +All test files must be self-contained, in order to prevent surprises in regards global state and initialization stuff. + +The following tests are present: + + - Application + Verifies that creating an application instance and its event loop is working correctly. + This test should automatically close itself without errors after a few seconds + + - Circle + TODO + + - Color + Runs a few unit-tests on top of the Color class. Mostly complete but still WIP. + + - Demo + A full window with widgets to verify that contents are being drawn correctly, window can be resized and events work. + Can be used in both Cairo and OpenGL modes, the Vulkan variant does not work right now. + + - Line + TODO + + - NanoSubWidgets + Verifies that NanoVG subwidgets are being drawn properly, and that hide/show calls work as intended. + There should be a grey background with 3 squares on top, one of hiding every half second in a sequence. + + - Point + Runs a few unit-tests on top of the Point class. Mostly complete but still WIP. + + - Rectangle + TODO + + - Triangle + TODO + + - Window + Runs a few basic tests with Window showing, hiding and event loop. + Will try to create a window on screen. + Should automatically close after a few seconds. diff --git a/tests/Window.cpp b/tests/Window.cpp index 32724cddd..81dd37c56 100644 --- a/tests/Window.cpp +++ b/tests/Window.cpp @@ -14,10 +14,6 @@ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#if !(defined(DGL_CAIRO) || defined(DGL_OPENGL) || defined(DGL_VULKAN)) -# error test setup failed, must be for cairo, opengl or vulkan -#endif - #include "tests.hpp" #define DPF_TEST_POINT_CPP diff --git a/tests/tests.hpp b/tests/tests.hpp index 466141f7e..c9b8b0cc0 100644 --- a/tests/tests.hpp +++ b/tests/tests.hpp @@ -24,6 +24,9 @@ #define DISTRHO_ASSERT_NOT_EQUAL(v1, v2, msg) \ if (v1 == v2) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; } +#define DISTRHO_ASSERT_SAFE_EQUAL(v1, v2, msg) \ + if (d_isNotEqual(v1, v2)) { d_stderr2("Test condition failed: %s; file:%s line:%i", msg, __FILE__, __LINE__); return 1; } + START_NAMESPACE_DGL // --------------------------------------------------------------------------------------------------------------------