From d2a688fdc27e854b68f7e377fb2465f9ac99e8f1 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Sun, 11 Mar 2018 19:20:36 +0100 Subject: [PATCH] Added unit test for FPoint --- ChangeLog | 3 + src/test/Makefile.am | 7 +- src/test/Makefile.clang | 4 +- src/test/Makefile.gcc | 4 +- src/test/Makefile.in | 38 ++++-- src/test/fpoint-test.cpp | 275 ++++++++++++++++++++++++++++++++++++++ src/test/fstring-test.cpp | 2 +- 7 files changed, 317 insertions(+), 16 deletions(-) create mode 100644 src/test/fpoint-test.cpp diff --git a/ChangeLog b/ChangeLog index 340cf586..9684039b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2017-03-11 Markus Gans + * Added unit test for FPoint + 2017-03-10 Markus Gans * Unit tests for the FString class completed * Minor bug fixes in FString diff --git a/src/test/Makefile.am b/src/test/Makefile.am index 81dac9e6..f340e7f4 100644 --- a/src/test/Makefile.am +++ b/src/test/Makefile.am @@ -7,11 +7,14 @@ AM_LDFLAGS = -L$(top_builddir)/src/.libs -lfinal $(CPPUNIT_LIBS) AM_CPPFLAGS = -I$(top_srcdir)/include -Wall -Werror noinst_PROGRAMS = \ - fstring_test + fstring_test \ + fpoint_test fstring_test_SOURCES = fstring-test.cpp +fpoint_test_SOURCES = fpoint-test.cpp -TESTS = fstring_test +TESTS = fstring_test \ + fpoint_test check_PROGRAMS = $(TESTS) diff --git a/src/test/Makefile.clang b/src/test/Makefile.clang index d3cfb768..767999b5 100644 --- a/src/test/Makefile.clang +++ b/src/test/Makefile.clang @@ -11,8 +11,8 @@ SRCS = $(wildcard *.cpp) OBJS = $(SRCS:%.cpp=%) CCXFLAGS = $(OPTIMIZE) $(PROFILE) $(DEBUG) MAKEFILE = -f Makefile.clang -LDFLAGS = -L../src -lfinal -lcppunit -ldl -INCLUDES = -I../include -I/usr/include/final +LDFLAGS = -L.. -lfinal -lcppunit -ldl +INCLUDES = -I. -I../../include -I/usr/include/final RM = rm -f ifdef DEBUG diff --git a/src/test/Makefile.gcc b/src/test/Makefile.gcc index d6fbfa4c..37206bc4 100644 --- a/src/test/Makefile.gcc +++ b/src/test/Makefile.gcc @@ -11,8 +11,8 @@ SRCS = $(wildcard *.cpp) OBJS = $(SRCS:%.cpp=%) CCXFLAGS = $(OPTIMIZE) $(PROFILE) $(DEBUG) MAKEFILE = -f Makefile.gcc -LDFLAGS = -L../src -lfinal -lcppunit -ldl -INCLUDES = -I../include -I/usr/include/final +LDFLAGS = -L.. -lfinal -lcppunit -ldl +INCLUDES = -I. -I../../include -I/usr/include/final RM = rm -f ifdef DEBUG diff --git a/src/test/Makefile.in b/src/test/Makefile.in index 63f82b25..4f01d0d9 100644 --- a/src/test/Makefile.in +++ b/src/test/Makefile.in @@ -82,8 +82,9 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -@CPPUNIT_TEST_TRUE@noinst_PROGRAMS = fstring_test$(EXEEXT) -@CPPUNIT_TEST_TRUE@TESTS = fstring_test$(EXEEXT) +@CPPUNIT_TEST_TRUE@noinst_PROGRAMS = fstring_test$(EXEEXT) \ +@CPPUNIT_TEST_TRUE@ fpoint_test$(EXEEXT) +@CPPUNIT_TEST_TRUE@TESTS = fstring_test$(EXEEXT) fpoint_test$(EXEEXT) @CPPUNIT_TEST_TRUE@check_PROGRAMS = $(am__EXEEXT_1) subdir = src/test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ @@ -100,16 +101,21 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = -@CPPUNIT_TEST_TRUE@am__EXEEXT_1 = fstring_test$(EXEEXT) +@CPPUNIT_TEST_TRUE@am__EXEEXT_1 = fstring_test$(EXEEXT) \ +@CPPUNIT_TEST_TRUE@ fpoint_test$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) -am__fstring_test_SOURCES_DIST = fstring-test.cpp -@CPPUNIT_TEST_TRUE@am_fstring_test_OBJECTS = fstring-test.$(OBJEXT) -fstring_test_OBJECTS = $(am_fstring_test_OBJECTS) -fstring_test_LDADD = $(LDADD) +am__fpoint_test_SOURCES_DIST = fpoint-test.cpp +@CPPUNIT_TEST_TRUE@am_fpoint_test_OBJECTS = fpoint-test.$(OBJEXT) +fpoint_test_OBJECTS = $(am_fpoint_test_OBJECTS) +fpoint_test_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = +am__fstring_test_SOURCES_DIST = fstring-test.cpp +@CPPUNIT_TEST_TRUE@am_fstring_test_OBJECTS = fstring-test.$(OBJEXT) +fstring_test_OBJECTS = $(am_fstring_test_OBJECTS) +fstring_test_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -144,8 +150,9 @@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = -SOURCES = $(fstring_test_SOURCES) -DIST_SOURCES = $(am__fstring_test_SOURCES_DIST) +SOURCES = $(fpoint_test_SOURCES) $(fstring_test_SOURCES) +DIST_SOURCES = $(am__fpoint_test_SOURCES_DIST) \ + $(am__fstring_test_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -504,6 +511,7 @@ top_srcdir = @top_srcdir@ @CPPUNIT_TEST_TRUE@AM_LDFLAGS = -L$(top_builddir)/src/.libs -lfinal $(CPPUNIT_LIBS) @CPPUNIT_TEST_TRUE@AM_CPPFLAGS = -I$(top_srcdir)/include -Wall -Werror @CPPUNIT_TEST_TRUE@fstring_test_SOURCES = fstring-test.cpp +@CPPUNIT_TEST_TRUE@fpoint_test_SOURCES = fpoint-test.cpp all: all-am .SUFFIXES: @@ -557,6 +565,10 @@ clean-noinstPROGRAMS: echo " rm -f" $$list; \ rm -f $$list +fpoint_test$(EXEEXT): $(fpoint_test_OBJECTS) $(fpoint_test_DEPENDENCIES) $(EXTRA_fpoint_test_DEPENDENCIES) + @rm -f fpoint_test$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(fpoint_test_OBJECTS) $(fpoint_test_LDADD) $(LIBS) + fstring_test$(EXEEXT): $(fstring_test_OBJECTS) $(fstring_test_DEPENDENCIES) $(EXTRA_fstring_test_DEPENDENCIES) @rm -f fstring_test$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(fstring_test_OBJECTS) $(fstring_test_LDADD) $(LIBS) @@ -567,6 +579,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpoint-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstring-test.Po@am__quote@ .cpp.o: @@ -796,6 +809,13 @@ fstring_test.log: fstring_test$(EXEEXT) --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +fpoint_test.log: fpoint_test$(EXEEXT) + @p='fpoint_test$(EXEEXT)'; \ + b='fpoint_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ diff --git a/src/test/fpoint-test.cpp b/src/test/fpoint-test.cpp new file mode 100644 index 00000000..6dbbd147 --- /dev/null +++ b/src/test/fpoint-test.cpp @@ -0,0 +1,275 @@ +/*********************************************************************** +* fpoint-test.cpp - FPoint unit tests * +* * +* This file is part of the Final Cut widget toolkit * +* * +* Copyright 2018 Markus Gans * +* * +* The Final Cut is free software; you can redistribute it and/or * +* modify it under the terms of the GNU Lesser General Public License * +* as published by the Free Software Foundation; either version 3 of * +* the License, or (at your option) any later version. * +* * +* The Final Cut is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU Lesser General Public License for more details. * +* * +* You should have received a copy of the GNU Lesser General Public * +* License along with this program. If not, see * +* . * +***********************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +//---------------------------------------------------------------------- +// class FPointTest +//---------------------------------------------------------------------- + +#pragma pack(push) +#pragma pack(1) + +class FPointTest : public CPPUNIT_NS::TestFixture +{ + public: + FPointTest() + { } + + protected: + void NoArgumentTest(); + void copyConstructorTest(); + void assignmentTest(); + void additionAssignmentTest(); + void subtractionAssignmentTest(); + void equalTest(); + void notEqualTest(); + void additionTest(); + void subtractionTest(); + void referenceTest(); + + private: + // Adds code needed to register the test suite + CPPUNIT_TEST_SUITE (FPointTest); + + // Add a methods to the test suite + CPPUNIT_TEST (NoArgumentTest); + CPPUNIT_TEST (copyConstructorTest); + CPPUNIT_TEST (assignmentTest); + CPPUNIT_TEST (additionAssignmentTest); + CPPUNIT_TEST (subtractionAssignmentTest); + CPPUNIT_TEST (equalTest); + CPPUNIT_TEST (notEqualTest); + CPPUNIT_TEST (additionTest); + CPPUNIT_TEST (subtractionTest); + CPPUNIT_TEST (referenceTest); + + // End of test suite definition + CPPUNIT_TEST_SUITE_END(); +}; +#pragma pack(pop) + +//---------------------------------------------------------------------- +void FPointTest::NoArgumentTest() +{ + const FPoint point; + CPPUNIT_ASSERT ( point.getX() == 0 ); + CPPUNIT_ASSERT ( point.getY() == 0 ); + CPPUNIT_ASSERT ( point.isNull() ); +} + +//---------------------------------------------------------------------- +void FPointTest::copyConstructorTest() +{ + const FPoint p1 (15,10); + const FPoint p2 (p1); + CPPUNIT_ASSERT ( p2.getX() == 15 ); + CPPUNIT_ASSERT ( p2.getY() == 10 ); +} + +//---------------------------------------------------------------------- +void FPointTest::assignmentTest() +{ + const FPoint p1 (-99,100); + CPPUNIT_ASSERT ( p1.getX() == -99 ); + CPPUNIT_ASSERT ( p1.getY() == 100 ); + + FPoint p2; + p2 = p1; + CPPUNIT_ASSERT ( p2.getX() == -99 ); + CPPUNIT_ASSERT ( p2.getY() == 100 ); + + p2 = -p1; + CPPUNIT_ASSERT ( p2.getX() == 99 ); + CPPUNIT_ASSERT ( p2.getY() == -100 ); + + p2.setPoint (80, 24); + CPPUNIT_ASSERT ( p2.getX() == 80 ); + CPPUNIT_ASSERT ( p2.getY() == 24 ); + + p2.setX(40); + CPPUNIT_ASSERT ( p2.getX() == 40 ); + CPPUNIT_ASSERT ( p2.getY() == 24 ); + + p2.setY(12); + CPPUNIT_ASSERT ( p2.getX() == 40 ); + CPPUNIT_ASSERT ( p2.getY() == 12 ); + + // Value limit exceeded + const FPoint p3 (-999999,1000000); + CPPUNIT_ASSERT ( p3.getX() != -999999 ); + CPPUNIT_ASSERT ( p3.getY() != 1000000 ); +} + +//---------------------------------------------------------------------- +void FPointTest::additionAssignmentTest() +{ + FPoint p1 (1,2); + p1 += FPoint (3,1); + CPPUNIT_ASSERT ( p1.getX() == 4 ); + CPPUNIT_ASSERT ( p1.getY() == 3 ); + + p1 += FPoint (-4,-3); + CPPUNIT_ASSERT ( p1.getX() == 0 ); + CPPUNIT_ASSERT ( p1.getY() == 0 ); + CPPUNIT_ASSERT ( p1.isNull() ); + + // Value limit exceeded + FPoint p2 (18000,-18000); + CPPUNIT_ASSERT ( p2.getX() == 18000 ); + CPPUNIT_ASSERT ( p2.getY() == -18000 ); + p2 += FPoint (18000,-18000); + CPPUNIT_ASSERT ( p2.getX() != 36000 ); + CPPUNIT_ASSERT ( p2.getY() != -36000 ); +} + +//---------------------------------------------------------------------- +void FPointTest::subtractionAssignmentTest() +{ + FPoint p1 (10,20); + p1 -= FPoint (5,5); + CPPUNIT_ASSERT ( p1.getX() == 5 ); + CPPUNIT_ASSERT ( p1.getY() == 15 ); + + p1 -= FPoint (-5,20); + CPPUNIT_ASSERT ( p1.getX() == 10 ); + CPPUNIT_ASSERT ( p1.getY() == -5 ); + CPPUNIT_ASSERT ( ! p1.isNull() ); + + p1 -= FPoint (-10,0); + CPPUNIT_ASSERT ( p1.getX() == 20 ); + CPPUNIT_ASSERT ( p1.getY() == -5 ); + CPPUNIT_ASSERT ( ! p1.isNull() ); + + p1 -= FPoint (20,0); + CPPUNIT_ASSERT ( p1.getX() == 0 ); + CPPUNIT_ASSERT ( p1.getY() == -5 ); + CPPUNIT_ASSERT ( ! p1.isNull() ); + + p1 -= FPoint (0,-6); + CPPUNIT_ASSERT ( p1.getX() == 0 ); + CPPUNIT_ASSERT ( p1.getY() == 1 ); + CPPUNIT_ASSERT ( ! p1.isNull() ); + + p1 -= FPoint (1,0); + CPPUNIT_ASSERT ( p1.getX() == -1 ); + CPPUNIT_ASSERT ( p1.getY() == 1 ); + CPPUNIT_ASSERT ( ! p1.isNull() ); + + p1 -= (FPoint (0,1) + FPoint (-1,0)); + CPPUNIT_ASSERT ( p1.getX() == 0 ); + CPPUNIT_ASSERT ( p1.getY() == 0 ); + CPPUNIT_ASSERT ( p1.isNull() ); + + // Value limit exceeded + FPoint p2 (18000,-18000); + CPPUNIT_ASSERT ( p2.getX() == 18000 ); + CPPUNIT_ASSERT ( p2.getY() == -18000 ); + p2 += FPoint (18000,-18000); + CPPUNIT_ASSERT ( p2.getX() != 36000 ); + CPPUNIT_ASSERT ( p2.getY() != -36000 ); +} + +//---------------------------------------------------------------------- +void FPointTest::equalTest() +{ + const FPoint p1 (1,2); + const FPoint p2 (1,2); + CPPUNIT_ASSERT ( p1 == p2 ); + CPPUNIT_ASSERT ( FPoint(1,2) == p2 ); + CPPUNIT_ASSERT ( p1 == FPoint(1,2) ); + CPPUNIT_ASSERT ( FPoint() == FPoint() ); + CPPUNIT_ASSERT ( FPoint() == -FPoint() ); +} + +//---------------------------------------------------------------------- +void FPointTest::notEqualTest() +{ + const FPoint p1 (1,2); + const FPoint p2 (2,4); + CPPUNIT_ASSERT ( p1 != p2 ); + CPPUNIT_ASSERT ( FPoint(1,2) != p2 ); + CPPUNIT_ASSERT ( p1 != FPoint(2,4) ); + CPPUNIT_ASSERT ( FPoint() != p2 ); + CPPUNIT_ASSERT ( p1 != FPoint() ); +} + +//---------------------------------------------------------------------- +void FPointTest::additionTest() +{ + const FPoint p1 (1,2); + const FPoint p2 (5,8); + const FPoint p3 = p1 + p2; + CPPUNIT_ASSERT ( p3.getX() == 6 ); + CPPUNIT_ASSERT ( p3.getY() == 10 ); + CPPUNIT_ASSERT ( p1 + p2 == FPoint(6,10) ); + CPPUNIT_ASSERT ( p1 + FPoint() == p1 ); + CPPUNIT_ASSERT ( FPoint() + p2 == p2 ); + CPPUNIT_ASSERT ( FPoint() + FPoint() == FPoint() ); +} + +//---------------------------------------------------------------------- +void FPointTest::subtractionTest() +{ + const FPoint p1 (-5,-20); + const FPoint p2 (0,-30); + const FPoint p3 = p1 - p2; + CPPUNIT_ASSERT ( p3.getX() == -5 ); + CPPUNIT_ASSERT ( p3.getY() == 10 ); + CPPUNIT_ASSERT ( p1 - p2 == FPoint(-5,10) ); + CPPUNIT_ASSERT ( p1 - FPoint() == p1 ); + CPPUNIT_ASSERT ( FPoint() - FPoint() == FPoint() ); +} + +//---------------------------------------------------------------------- +void FPointTest::referenceTest() +{ + FPoint p1 (1,1); + CPPUNIT_ASSERT ( p1.getX() == 1 ); + CPPUNIT_ASSERT ( p1.getY() == 1 ); + + p1.x_ref()++; + p1.y_ref()++; + CPPUNIT_ASSERT ( p1.getX() == 2 ); + CPPUNIT_ASSERT ( p1.getY() == 2 ); + + short& x = p1.x_ref(); + short& y = p1.y_ref(); + x += 4; + y += 2; + CPPUNIT_ASSERT ( p1.getX() == 6 ); + CPPUNIT_ASSERT ( p1.getY() == 4 ); +} + +// Put the test suite in the registry +CPPUNIT_TEST_SUITE_REGISTRATION (FPointTest); + +// The general unit test main part +#include diff --git a/src/test/fstring-test.cpp b/src/test/fstring-test.cpp index 83919a4a..9069320f 100644 --- a/src/test/fstring-test.cpp +++ b/src/test/fstring-test.cpp @@ -95,6 +95,7 @@ class FStringTest : public CPPUNIT_NS::TestFixture // Adds code needed to register the test suite CPPUNIT_TEST_SUITE (FStringTest); + // Add a methods to the test suite CPPUNIT_TEST (NoArgumentTest); CPPUNIT_TEST (initLengthTest); CPPUNIT_TEST (copyConstructorTest); @@ -181,7 +182,6 @@ void FStringTest::NoArgumentTest() CPPUNIT_ASSERT ( FString(std::wstring()).isEmpty() ); CPPUNIT_ASSERT ( FString(wchar_t(0)).isEmpty() ); - CPPUNIT_ASSERT ( ! empty.includes('A') ); CPPUNIT_ASSERT ( ! empty.includes(L'A') ); CPPUNIT_ASSERT ( ! empty.includes("123") );