Author: damjan Date: Fri Aug 28 03:58:57 2015 New Revision: 1698257 URL: http://svn.apache.org/r1698257 Log: #i125003# migrate main/basegfx from cppunit to Google Test.
Added: openoffice/trunk/main/basegfx/test/main.cxx Modified: openoffice/trunk/main/basegfx/test/basegfx1d.cxx openoffice/trunk/main/basegfx/test/basegfx2d.cxx openoffice/trunk/main/basegfx/test/basegfx3d.cxx openoffice/trunk/main/basegfx/test/basegfxtools.cxx openoffice/trunk/main/basegfx/test/boxclipper.cxx openoffice/trunk/main/basegfx/test/clipstate.cxx openoffice/trunk/main/basegfx/test/genericclipper.cxx openoffice/trunk/main/basegfx/test/makefile.mk Modified: openoffice/trunk/main/basegfx/test/basegfx1d.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/basegfx/test/basegfx1d.cxx?rev=1698257&r1=1698256&r2=1698257&view=diff ============================================================================== --- openoffice/trunk/main/basegfx/test/basegfx1d.cxx (original) +++ openoffice/trunk/main/basegfx/test/basegfx1d.cxx Fri Aug 28 03:58:57 2015 @@ -27,45 +27,23 @@ // autogenerated file with codegen.pl #include "preextstl.h" -#include "cppunit/TestAssert.h" -#include "cppunit/TestFixture.h" -#include "cppunit/extensions/HelperMacros.h" -#include "cppunit/plugin/TestPlugIn.h" +#include "gtest/gtest.h" #include "postextstl.h" namespace basegfx1d { -class b1drange : public CppUnit::TestFixture +class b1drange : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - // this is only demonstration code - void EmptyMethod() - { - // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b1drange); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b1drange -// ----------------------------------------------------------------------------- -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx1d::b1drange); } // namespace basegfx1d - -CPPUNIT_PLUGIN_IMPLEMENT(); Modified: openoffice/trunk/main/basegfx/test/basegfx2d.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/basegfx/test/basegfx2d.cxx?rev=1698257&r1=1698256&r2=1698257&view=diff ============================================================================== --- openoffice/trunk/main/basegfx/test/basegfx2d.cxx (original) +++ openoffice/trunk/main/basegfx/test/basegfx2d.cxx Fri Aug 28 03:58:57 2015 @@ -27,9 +27,7 @@ // autogenerated file with codegen.pl #include "preextstl.h" -#include "cppunit/TestAssert.h" -#include "cppunit/TestFixture.h" -#include "cppunit/extensions/HelperMacros.h" +#include "gtest/gtest.h" #include "postextstl.h" #include <basegfx/matrix/b2dhommatrix.hxx> @@ -56,9 +54,9 @@ using namespace ::basegfx; namespace basegfx2d { -class b2dsvgdimpex : public CppUnit::TestFixture +class b2dsvgdimpex : public ::testing::Test { -private: +protected: ::rtl::OUString aPath0; ::rtl::OUString aPath1; ::rtl::OUString aPath2; @@ -66,7 +64,7 @@ private: public: // initialise your test code values here. - void setUp() + virtual void SetUp() { // simple rectangle aPath0 = ::rtl::OUString::createFromAscii( @@ -140,179 +138,147 @@ public: "31-24 33-22 34-20 35-18 36-16 37-15 39-12 40-11z" ); } - void tearDown() + virtual void TearDown() { } +}; // class b2dsvgdimpex - void impex() - { - B2DPolyPolygon aPoly; - ::rtl::OUString aExport; - - CPPUNIT_ASSERT_MESSAGE("importing simple rectangle from SVG-D", - tools::importFromSvgD( aPoly, aPath0, false, 0 )); - aExport = tools::exportToSvgD( aPoly, true, true, false ); - const char* sExportString = "m10 10h-20v-20h20z"; - CPPUNIT_ASSERT_MESSAGE("exporting rectangle to SVG-D", - !aExport.compareToAscii(sExportString) ); - CPPUNIT_ASSERT_MESSAGE("importing simple rectangle from SVG-D (round-trip", - tools::importFromSvgD( aPoly, aExport, false, 0 )); - aExport = tools::exportToSvgD( aPoly, true, true, false ); - CPPUNIT_ASSERT_MESSAGE("exporting rectangle to SVG-D (round-trip)", - !aExport.compareToAscii(sExportString)); - - CPPUNIT_ASSERT_MESSAGE("importing simple bezier polygon from SVG-D", - tools::importFromSvgD( aPoly, aPath1, false, 0 )); - aExport = tools::exportToSvgD( aPoly, true, true, false ); - - // Adaptions for B2DPolygon bezier change (see #i77162#): - // - // The import/export of aPath1 does not reproduce aExport again. This is - // correct since aPath1 contains a segment with non-used control points - // which gets exported now correctly as 'l' and also a point (#4, index 3) - // with C2 continuity which produces a 's' staement now. - // - // The old SVGexport identified nun-used ControlVectors erraneously as bezier segments - // because the 2nd vector at the start point was used, even when added - // with start point was identical to end point. Exactly for that reason - // i reworked the B2DPolygon to use prev, next control points. - // - // so for correct unit test i add the new exported string here as sExportStringSimpleBezier - // and compare to it. - const char* sExportStringSimpleBezier = - "m11430 0c-8890 3810 5715 6985 5715 6985" - "l-17145-1905c0 0 22860-10160 16510 6350" - "s-3810-11430-3810-11430z"; - CPPUNIT_ASSERT_MESSAGE("exporting bezier polygon to SVG-D", !aExport.compareToAscii(sExportStringSimpleBezier)); - - // Adaptions for B2DPolygon bezier change (see #i77162#): - // - // a 2nd good test is that re-importing of aExport has to create the same - // B2DPolPolygon again: - B2DPolyPolygon aReImport; - CPPUNIT_ASSERT_MESSAGE("importing simple bezier polygon from SVG-D", tools::importFromSvgD( aReImport, aExport, false, 0)); - CPPUNIT_ASSERT_MESSAGE("re-imported polygon needs to be identical", aReImport == aPoly); - - CPPUNIT_ASSERT_MESSAGE("importing '@' from SVG-D", tools::importFromSvgD( aPoly, aPath2, false, 0)); - aExport = tools::exportToSvgD( aPoly, true, true, false ); +TEST_F(b2dsvgdimpex,impex) +{ + B2DPolyPolygon aPoly; + ::rtl::OUString aExport; - // Adaptions for B2DPolygon bezier change (see #i77162#): - // - // same here, the corrected export with the corrected B2DPolygon is simply more efficient, - // so i needed to change the compare string. Also adding the re-import comparison below. - const char* sExportString1 = - "m1917 1114c-89-189-233-284-430-284-167 0-306 91-419 273s-170 370-17" - "0 564c0 145 33 259 98 342 65 84 150 126 257 126q115.5 0 231-57s147-97 210-176 99-143 109-190c38-199 76-398 114" - "-598zm840 1646c-133 73-312 139-537 197-225 57-440 86-644 87-483-1-866-132-1150-392-284-261-426-619-426-1076 0-" - "292 67-560 200-803s321-433 562-569 514-204 821-204c405 0 739 125 1003 374 264 250 396 550 396 899 0 313-88 576" - "-265 787q-265.5 318-627 318c-191 0-308-94-352-281-133 187-315 281-546 281-172 0-315-67-428-200s-170-301-170-50" - "5c0-277 90-527 271-751 181-223 394-335 640-335 196 0 353 83 470 250 13-68 26-136 41-204q144 0 288 0c-74 376-14" - "8 752-224 1128-21 101-31 183-31 245 0 39 9 70 26 93 17 24 39 36 67 36 145 0 279-80 400-240s182-365 182-615c0-2" - "88-107-533-322-734s-487-301-816-301c-395 0-715 124-960 373s-368 569-368 958q0 577.5 357 900c237 216 557 324 95" - "8 325 189-1 389-27 600-77 211-52 378-110 503-174q40.5 105 81 210z"; - CPPUNIT_ASSERT_MESSAGE("re-importing '@' from SVG-D", tools::importFromSvgD( aReImport, aExport, false, 0)); - CPPUNIT_ASSERT_MESSAGE("re-imported '@' needs to be identical", aReImport == aPoly); - - CPPUNIT_ASSERT_MESSAGE("exporting '@' to SVG-D", !aExport.compareToAscii(sExportString1)); - CPPUNIT_ASSERT_MESSAGE("importing '@' from SVG-D (round-trip", - tools::importFromSvgD( aPoly, aExport, false, 0 )); - aExport = tools::exportToSvgD( aPoly, true, true, false ); - CPPUNIT_ASSERT_MESSAGE("exporting '@' to SVG-D (round-trip)", - !aExport.compareToAscii(sExportString1)); - - - CPPUNIT_ASSERT_MESSAGE("importing complex polygon from SVG-D", - tools::importFromSvgD( aPoly, aPath3, false, 0 )); - aExport = tools::exportToSvgD( aPoly, true, true, false ); - const char* sExportString2 = - "m1598 125h306v2334h-306v-1105h-1293v1105h-305v-2334h305v973h1293" - "zm2159 1015 78-44 85 235-91 47-91 40-90 34-90 29-89 21-88 16-88 10-88 3-102-4-97" - "-12-91-19-85-26-40-16-39-18-38-20-36-22-34-24-33-26-32-27-30-30-29-31-27-33-25-3" - "3-23-36-21-36-19-38-18-40-16-40-26-86-18-91-11-97-4-103 3-98 11-94 17-89 24-84 3" - "1-79 37-75 22-35 23-34 24-33 27-32 28-30 29-28 31-27 31-24 33-22 34-21 35-18 37-" - "17 38-14 38-13 41-11 41-8 86-12 91-4 82 4 78 10 37 9 37 9 36 12 35 14 33 15 33 1" - "7 32 19 31 21 30 22 30 25 55 54 26 29 24 31 22 32 21 33 19 34 18 36 30 74 23 80 " - "17 84 10 89 3 94v78h-1277l6 75 10 70 14 66 19 62 23 57 13 26 14 26 15 25 17 23 1" - "7 22 19 21 19 20 21 18 21 18 23 16 23 14 24 14 26 12 26 11 27 10 28 8 59 13 63 7" - " 67 3 80-3 81-9 79-14 80-21 78-26 79-32zm-1049-808-12 53h963l-7-51-11-49-14-46-1" - "7-43-21-40-24-38-27-36-31-32-33-29-35-25-37-22-38-17-40-14-41-9-42-6-44-2-48 2-4" - "6 6-44 9-42 13-40 17-38 21-36 24-34 28-32 32-29 34-26 38-23 41-20 44-17 47zm1648" - "-1293h288v2459h-288zm752-2459h288v2459h-288zm1286-1750 86-11 91-4 91 4 85 12 42 " - "8 39 11 39 13 38 14 36 17 35 18 34 20 33 23 31 24 30 26 29 28 28 30 26 32 25 33 " - "23 34 21 35 37 75 31 80 24 84 16 90 11 94 3 100-3 100-11 95-16 89-24 85-31 80-37" - " 74-21 35-23 35-25 32-26 32-28 30-29 28-30 26-31 24-33 22-34 21-35 18-36 17-38 1" - "4-39 13-39 10-42 9-85 12-91 4-91-4-86-12-41-9-40-10-39-13-37-14-36-17-35-18-34-2" - "1-33-22-31-24-30-26-29-28-28-30-26-32-25-32-23-35-21-35-38-74-30-80-24-85-17-89-" - "11-95-3-100 3-101 11-95 17-90 24-85 30-79 38-75 21-35 23-35 25-32 26-32 28-30 29" - "-28 30-26 31-24 33-22 34-20 35-18 36-16 37-15 39-12 40-11z"; - CPPUNIT_ASSERT_MESSAGE("exporting complex polygon to SVG-D", - !aExport.compareToAscii(sExportString2)); - CPPUNIT_ASSERT_MESSAGE("importing complex polygon from SVG-D (round-trip", - tools::importFromSvgD( aPoly, aExport, false, 0 )); - aExport = tools::exportToSvgD( aPoly, true, true, false ); - CPPUNIT_ASSERT_MESSAGE("exporting complex polygon to SVG-D (round-trip)", - !aExport.compareToAscii(sExportString2)); - - const B2DPolygon aRect( - tools::createPolygonFromRect( B2DRange(0.0,0.0,4000.0,4000.0) )); - aExport = tools::exportToSvgD( B2DPolyPolygon(aRect), false, false, false ); - - const char* sExportStringRect = "M0 0H4000V4000H0Z"; - CPPUNIT_ASSERT_MESSAGE("exporting to rectangle svg-d string", - !aExport.compareToAscii(sExportStringRect)); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dsvgdimpex); - CPPUNIT_TEST(impex); - CPPUNIT_TEST_SUITE_END(); -}; // class b2dsvgdimpex + ASSERT_TRUE(tools::importFromSvgD( aPoly, aPath0, false, 0 )) << "importing simple rectangle from SVG-D"; + aExport = tools::exportToSvgD( aPoly, true, true, false ); + const char* sExportString = "m10 10h-20v-20h20z"; + ASSERT_TRUE(!aExport.compareToAscii(sExportString) ) << "exporting rectangle to SVG-D"; + ASSERT_TRUE(tools::importFromSvgD( aPoly, aExport, false, 0 )) << "importing simple rectangle from SVG-D (round-trip"; + aExport = tools::exportToSvgD( aPoly, true, true, false ); + ASSERT_TRUE(!aExport.compareToAscii(sExportString)) << "exporting rectangle to SVG-D (round-trip)"; + + ASSERT_TRUE(tools::importFromSvgD( aPoly, aPath1, false, 0 )) << "importing simple bezier polygon from SVG-D"; + aExport = tools::exportToSvgD( aPoly, true, true, false ); + + // Adaptions for B2DPolygon bezier change (see #i77162#): + // + // The import/export of aPath1 does not reproduce aExport again. This is + // correct since aPath1 contains a segment with non-used control points + // which gets exported now correctly as 'l' and also a point (#4, index 3) + // with C2 continuity which produces a 's' staement now. + // + // The old SVGexport identified nun-used ControlVectors erraneously as bezier segments + // because the 2nd vector at the start point was used, even when added + // with start point was identical to end point. Exactly for that reason + // i reworked the B2DPolygon to use prev, next control points. + // + // so for correct unit test i add the new exported string here as sExportStringSimpleBezier + // and compare to it. + const char* sExportStringSimpleBezier = + "m11430 0c-8890 3810 5715 6985 5715 6985" + "l-17145-1905c0 0 22860-10160 16510 6350" + "s-3810-11430-3810-11430z"; + ASSERT_TRUE(!aExport.compareToAscii(sExportStringSimpleBezier)) << "exporting bezier polygon to SVG-D"; + + // Adaptions for B2DPolygon bezier change (see #i77162#): + // + // a 2nd good test is that re-importing of aExport has to create the same + // B2DPolPolygon again: + B2DPolyPolygon aReImport; + ASSERT_TRUE(tools::importFromSvgD( aReImport, aExport, false, 0)) << "importing simple bezier polygon from SVG-D"; + ASSERT_TRUE(aReImport == aPoly) << "re-imported polygon needs to be identical"; + + ASSERT_TRUE(tools::importFromSvgD( aPoly, aPath2, false, 0)) << "importing '@' from SVG-D"; + aExport = tools::exportToSvgD( aPoly, true, true, false ); + + // Adaptions for B2DPolygon bezier change (see #i77162#): + // + // same here, the corrected export with the corrected B2DPolygon is simply more efficient, + // so i needed to change the compare string. Also adding the re-import comparison below. + const char* sExportString1 = + "m1917 1114c-89-189-233-284-430-284-167 0-306 91-419 273s-170 370-17" + "0 564c0 145 33 259 98 342 65 84 150 126 257 126q115.5 0 231-57s147-97 210-176 99-143 109-190c38-199 76-398 114" + "-598zm840 1646c-133 73-312 139-537 197-225 57-440 86-644 87-483-1-866-132-1150-392-284-261-426-619-426-1076 0-" + "292 67-560 200-803s321-433 562-569 514-204 821-204c405 0 739 125 1003 374 264 250 396 550 396 899 0 313-88 576" + "-265 787q-265.5 318-627 318c-191 0-308-94-352-281-133 187-315 281-546 281-172 0-315-67-428-200s-170-301-170-50" + "5c0-277 90-527 271-751 181-223 394-335 640-335 196 0 353 83 470 250 13-68 26-136 41-204q144 0 288 0c-74 376-14" + "8 752-224 1128-21 101-31 183-31 245 0 39 9 70 26 93 17 24 39 36 67 36 145 0 279-80 400-240s182-365 182-615c0-2" + "88-107-533-322-734s-487-301-816-301c-395 0-715 124-960 373s-368 569-368 958q0 577.5 357 900c237 216 557 324 95" + "8 325 189-1 389-27 600-77 211-52 378-110 503-174q40.5 105 81 210z"; + ASSERT_TRUE(tools::importFromSvgD( aReImport, aExport, false, 0)) << "re-importing '@' from SVG-D"; + ASSERT_TRUE(aReImport == aPoly) << "re-imported '@' needs to be identical"; + + ASSERT_TRUE(!aExport.compareToAscii(sExportString1)) << "exporting '@' to SVG-D"; + ASSERT_TRUE(tools::importFromSvgD( aPoly, aExport, false, 0 )) << "importing '@' from SVG-D (round-trip)"; + aExport = tools::exportToSvgD( aPoly, true, true, false ); + ASSERT_TRUE(!aExport.compareToAscii(sExportString1)) << "exporting '@' to SVG-D (round-trip)"; + + + ASSERT_TRUE(tools::importFromSvgD( aPoly, aPath3, false, 0 )) << "importing complex polygon from SVG-D"; + aExport = tools::exportToSvgD( aPoly, true, true, false ); + const char* sExportString2 = + "m1598 125h306v2334h-306v-1105h-1293v1105h-305v-2334h305v973h1293" + "zm2159 1015 78-44 85 235-91 47-91 40-90 34-90 29-89 21-88 16-88 10-88 3-102-4-97" + "-12-91-19-85-26-40-16-39-18-38-20-36-22-34-24-33-26-32-27-30-30-29-31-27-33-25-3" + "3-23-36-21-36-19-38-18-40-16-40-26-86-18-91-11-97-4-103 3-98 11-94 17-89 24-84 3" + "1-79 37-75 22-35 23-34 24-33 27-32 28-30 29-28 31-27 31-24 33-22 34-21 35-18 37-" + "17 38-14 38-13 41-11 41-8 86-12 91-4 82 4 78 10 37 9 37 9 36 12 35 14 33 15 33 1" + "7 32 19 31 21 30 22 30 25 55 54 26 29 24 31 22 32 21 33 19 34 18 36 30 74 23 80 " + "17 84 10 89 3 94v78h-1277l6 75 10 70 14 66 19 62 23 57 13 26 14 26 15 25 17 23 1" + "7 22 19 21 19 20 21 18 21 18 23 16 23 14 24 14 26 12 26 11 27 10 28 8 59 13 63 7" + " 67 3 80-3 81-9 79-14 80-21 78-26 79-32zm-1049-808-12 53h963l-7-51-11-49-14-46-1" + "7-43-21-40-24-38-27-36-31-32-33-29-35-25-37-22-38-17-40-14-41-9-42-6-44-2-48 2-4" + "6 6-44 9-42 13-40 17-38 21-36 24-34 28-32 32-29 34-26 38-23 41-20 44-17 47zm1648" + "-1293h288v2459h-288zm752-2459h288v2459h-288zm1286-1750 86-11 91-4 91 4 85 12 42 " + "8 39 11 39 13 38 14 36 17 35 18 34 20 33 23 31 24 30 26 29 28 28 30 26 32 25 33 " + "23 34 21 35 37 75 31 80 24 84 16 90 11 94 3 100-3 100-11 95-16 89-24 85-31 80-37" + " 74-21 35-23 35-25 32-26 32-28 30-29 28-30 26-31 24-33 22-34 21-35 18-36 17-38 1" + "4-39 13-39 10-42 9-85 12-91 4-91-4-86-12-41-9-40-10-39-13-37-14-36-17-35-18-34-2" + "1-33-22-31-24-30-26-29-28-28-30-26-32-25-32-23-35-21-35-38-74-30-80-24-85-17-89-" + "11-95-3-100 3-101 11-95 17-90 24-85 30-79 38-75 21-35 23-35 25-32 26-32 28-30 29" + "-28 30-26 31-24 33-22 34-20 35-18 36-16 37-15 39-12 40-11z"; + ASSERT_TRUE(!aExport.compareToAscii(sExportString2)) << "exporting complex polygon to SVG-D"; + ASSERT_TRUE(tools::importFromSvgD( aPoly, aExport, false, 0 )) << "importing complex polygon from SVG-D (round-trip)"; + aExport = tools::exportToSvgD( aPoly, true, true, false ); + ASSERT_TRUE(!aExport.compareToAscii(sExportString2)) << "exporting complex polygon to SVG-D (round-trip)"; + + const B2DPolygon aRect( + tools::createPolygonFromRect( B2DRange(0.0,0.0,4000.0,4000.0) )); + aExport = tools::exportToSvgD( B2DPolyPolygon(aRect), false, false, false ); + + const char* sExportStringRect = "M0 0H4000V4000H0Z"; + ASSERT_TRUE(!aExport.compareToAscii(sExportStringRect)) << "exporting to rectangle svg-d string"; +} -class b2dpolyrange : public CppUnit::TestFixture +class b2dpolyrange : public ::testing::Test { -private: public: - void setUp() + virtual void SetUp() {} - void tearDown() + virtual void TearDown() {} +}; - void check() - { - B2DPolyRange aRange; - aRange.appendElement(B2DRange(0,0,1,1),ORIENTATION_POSITIVE); - aRange.appendElement(B2DRange(2,2,3,3),ORIENTATION_POSITIVE); +TEST_F(b2dpolyrange, check) +{ + B2DPolyRange aRange; + aRange.appendElement(B2DRange(0,0,1,1),ORIENTATION_POSITIVE); + aRange.appendElement(B2DRange(2,2,3,3),ORIENTATION_POSITIVE); - CPPUNIT_ASSERT_MESSAGE("simple poly range - count", - aRange.count() == 2); - CPPUNIT_ASSERT_MESSAGE("simple poly range - first element", - aRange.getElement(0).head == B2DRange(0,0,1,1)); - CPPUNIT_ASSERT_MESSAGE("simple poly range - second element", - aRange.getElement(1).head == B2DRange(2,2,3,3)); - - // B2DPolyRange relies on correctly orientated rects - const B2DRange aRect(0,0,1,1); - CPPUNIT_ASSERT_MESSAGE("createPolygonFromRect - correct orientation", - tools::getOrientation( - tools::createPolygonFromRect(aRect)) == ORIENTATION_POSITIVE ); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dpolyrange); - CPPUNIT_TEST(check); - CPPUNIT_TEST_SUITE_END(); -}; + ASSERT_TRUE(aRange.count() == 2) << "simple poly range - count"; + ASSERT_TRUE(aRange.getElement(0).head == B2DRange(0,0,1,1)) << "simple poly range - first element"; + ASSERT_TRUE(aRange.getElement(1).head == B2DRange(2,2,3,3)) << "simple poly range - second element"; + + // B2DPolyRange relies on correctly orientated rects + const B2DRange aRect(0,0,1,1); + ASSERT_TRUE(tools::getOrientation(tools::createPolygonFromRect(aRect)) == ORIENTATION_POSITIVE ) << + "createPolygonFromRect - correct orientation"; +} -class b2dbeziertools : public CppUnit::TestFixture + +class b2dbeziertools : public ::testing::Test { -private: +protected: B2DCubicBezier aHalfCircle; // not exactly, but a look-alike B2DCubicBezier aQuarterCircle; // not exactly, but a look-alike B2DCubicBezier aLoop; // identical endpoints, curve goes back to where it started @@ -326,7 +292,7 @@ private: public: // initialise your test code values here. - void setUp() + virtual void SetUp() { const B2DPoint a00(0.0, 0.0); const B2DPoint a10(1.0, 0.0); @@ -430,149 +396,125 @@ public: } } - void tearDown() + virtual void TearDown() { } +}; // class b2dbeziertools - void adaptiveByDistance() - { - ::std::ofstream output("bez_adaptiveByDistance.gnuplot"); - DebugPlotter aPlotter( "distance-adaptive subdivision", - output ); - - const double fBound( 0.0001 ); - B2DPolygon result; - - aHalfCircle.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "half circle"); result.clear(); +TEST_F(b2dbeziertools, adaptiveByDistance) +{ + ::std::ofstream output("bez_adaptiveByDistance.gnuplot"); + DebugPlotter aPlotter( "distance-adaptive subdivision", + output ); - aQuarterCircle.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "quarter circle"); result.clear(); + const double fBound( 0.0001 ); + B2DPolygon result; - aLoop.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "loop"); result.clear(); + aHalfCircle.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "half circle"); result.clear(); - aStraightLineDistinctEndPoints.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "straight line 0"); result.clear(); + aQuarterCircle.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "quarter circle"); result.clear(); - aStraightLineDistinctEndPoints2.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "straight line 1"); result.clear(); + aLoop.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "loop"); result.clear(); - aStraightLineIdenticalEndPoints.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "straight line 2"); result.clear(); + aStraightLineDistinctEndPoints.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "straight line 0"); result.clear(); - aStraightLineIdenticalEndPoints2.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "straight line 3"); result.clear(); + aStraightLineDistinctEndPoints2.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "straight line 1"); result.clear(); - aCrossing.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "straight line 4"); result.clear(); + aStraightLineIdenticalEndPoints.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "straight line 2"); result.clear(); - aCusp.adaptiveSubdivideByDistance(result, fBound); - aPlotter.plot(result, - "straight line 5"); result.clear(); + aStraightLineIdenticalEndPoints2.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "straight line 3"); result.clear(); - CPPUNIT_ASSERT_MESSAGE("adaptiveByDistance", true ); - } + aCrossing.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "straight line 4"); result.clear(); - void adaptiveByAngle() - { - const double fBound( 5.0 ); - B2DPolygon result; + aCusp.adaptiveSubdivideByDistance(result, fBound); + aPlotter.plot(result, + "straight line 5"); result.clear(); - ::std::ofstream output("bez_adaptiveByAngle.gnuplot"); - DebugPlotter aPlotter( "angle-adaptive subdivision", - output ); + ASSERT_TRUE( true ) << "adaptiveByDistance"; +} - aHalfCircle.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "half circle"); result.clear(); +TEST_F(b2dbeziertools, adaptiveByAngle) +{ + const double fBound( 5.0 ); + B2DPolygon result; - aQuarterCircle.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "quarter cirle"); result.clear(); + ::std::ofstream output("bez_adaptiveByAngle.gnuplot"); + DebugPlotter aPlotter( "angle-adaptive subdivision", + output ); - aLoop.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "loop"); result.clear(); + aHalfCircle.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "half circle"); result.clear(); - aStraightLineDistinctEndPoints.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "straight line 0"); result.clear(); + aQuarterCircle.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "quarter cirle"); result.clear(); - aStraightLineDistinctEndPoints2.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "straight line 1"); result.clear(); + aLoop.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "loop"); result.clear(); - aStraightLineIdenticalEndPoints.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "straight line 2"); result.clear(); + aStraightLineDistinctEndPoints.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "straight line 0"); result.clear(); - aStraightLineIdenticalEndPoints2.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "straight line 3"); result.clear(); + aStraightLineDistinctEndPoints2.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "straight line 1"); result.clear(); - aCrossing.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "straight line 4"); result.clear(); + aStraightLineIdenticalEndPoints.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "straight line 2"); result.clear(); - aCusp.adaptiveSubdivideByAngle(result, fBound, true); - aPlotter.plot(result, - "straight line 5"); result.clear(); + aStraightLineIdenticalEndPoints2.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "straight line 3"); result.clear(); - CPPUNIT_ASSERT_MESSAGE("adaptiveByAngle", true ); - } + aCrossing.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "straight line 4"); result.clear(); - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. + aCusp.adaptiveSubdivideByAngle(result, fBound, true); + aPlotter.plot(result, + "straight line 5"); result.clear(); - CPPUNIT_TEST_SUITE(b2dbeziertools); - CPPUNIT_TEST(adaptiveByDistance); // TODO: add tests for quadratic bezier (subdivide and degree reduction) - CPPUNIT_TEST(adaptiveByAngle); - CPPUNIT_TEST_SUITE_END(); -}; // class b2dcubicbezier + ASSERT_TRUE( true ) << "adaptiveByAngle"; +} -class b2dcubicbezier : public CppUnit::TestFixture +class b2dcubicbezier : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - void EmptyMethod() - { - // this is demonstration code - // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dcubicbezier); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b2dcubicbezier -class b2dhommatrix : public CppUnit::TestFixture +class b2dhommatrix : public ::testing::Test { -private: +protected: B2DHomMatrix maIdentity; B2DHomMatrix maScale; B2DHomMatrix maTranslate; @@ -582,7 +524,7 @@ private: public: // initialise your test code values here. - void setUp() + virtual void SetUp() { // setup some test matrices maIdentity.identity(); // force compact layout @@ -625,635 +567,481 @@ public: maPerspective.set(2,2, 9.0); } - void tearDown() + virtual void TearDown() { } - void equal() + void impFillMatrix(B2DHomMatrix& rSource, double fScaleX, double fScaleY, double fShearX, double fRotate) { - B2DHomMatrix aIdentity; - B2DHomMatrix aScale; - B2DHomMatrix aTranslate; - B2DHomMatrix aShear; - B2DHomMatrix aAffine; - B2DHomMatrix aPerspective; + // fill rSource with a linear combination of scale, shear and rotate + rSource.identity(); + rSource.scale(fScaleX, fScaleY); + rSource.shearX(fShearX); + rSource.rotate(fRotate); + } - // setup some test matrices - aIdentity.identity(); // force compact layout - aIdentity.set(0,0, 1.0); - aIdentity.set(0,1, 0.0); - aIdentity.set(0,2, 0.0); - aIdentity.set(1,0, 0.0); - aIdentity.set(1,1, 1.0); - aIdentity.set(1,2, 0.0); - - aScale.identity(); // force compact layout - aScale.set(0,0, 2.0); - aScale.set(1,1, 20.0); - - aTranslate.identity(); // force compact layout - aTranslate.set(0,2, 20.0); - aTranslate.set(1,2, 2.0); - - aShear.identity(); // force compact layout - aShear.set(0,1, 3.0); - aShear.set(1,0, 7.0); - aShear.set(1,1, 22.0); - - aAffine.identity(); // force compact layout - aAffine.set(0,0, 1.0); - aAffine.set(0,1, 2.0); - aAffine.set(0,2, 3.0); - aAffine.set(1,0, 4.0); - aAffine.set(1,1, 5.0); - aAffine.set(1,2, 6.0); - - aPerspective.set(0,0, 1.0); - aPerspective.set(0,1, 2.0); - aPerspective.set(0,2, 3.0); - aPerspective.set(1,0, 4.0); - aPerspective.set(1,1, 5.0); - aPerspective.set(1,2, 6.0); - aPerspective.set(2,0, 7.0); - aPerspective.set(2,1, 8.0); - aPerspective.set(2,2, 9.0); - - CPPUNIT_ASSERT_MESSAGE("operator==: identity matrix", aIdentity == maIdentity); - CPPUNIT_ASSERT_MESSAGE("operator==: scale matrix", aScale == maScale); - CPPUNIT_ASSERT_MESSAGE("operator==: translate matrix", aTranslate == maTranslate); - CPPUNIT_ASSERT_MESSAGE("operator==: shear matrix", aShear == maShear); - CPPUNIT_ASSERT_MESSAGE("operator==: affine matrix", aAffine == maAffine); - CPPUNIT_ASSERT_MESSAGE("operator==: perspective matrix", aPerspective == maPerspective); - } - - void identity() - { - B2DHomMatrix ident; - - CPPUNIT_ASSERT_MESSAGE("identity", maIdentity == ident); - } - - void scale() - { - B2DHomMatrix mat; - mat.scale(2.0,20.0); - CPPUNIT_ASSERT_MESSAGE("scale", maScale == mat); - } - - void translate() - { - B2DHomMatrix mat; - mat.translate(20.0,2.0); - CPPUNIT_ASSERT_MESSAGE("translate", maTranslate == mat); - } - - void shear() - { - B2DHomMatrix mat; - mat.shearX(3.0); - mat.shearY(7.0); - CPPUNIT_ASSERT_MESSAGE("translate", maShear == mat); - } - - void multiply() - { - B2DHomMatrix affineAffineProd; - - affineAffineProd.set(0,0, 9); - affineAffineProd.set(0,1, 12); - affineAffineProd.set(0,2, 18); - affineAffineProd.set(1,0, 24); - affineAffineProd.set(1,1, 33); - affineAffineProd.set(1,2, 48); - - B2DHomMatrix affinePerspectiveProd; - - affinePerspectiveProd.set(0,0, 30); - affinePerspectiveProd.set(0,1, 36); - affinePerspectiveProd.set(0,2, 42); - affinePerspectiveProd.set(1,0, 66); - affinePerspectiveProd.set(1,1, 81); - affinePerspectiveProd.set(1,2, 96); - affinePerspectiveProd.set(2,0, 7); - affinePerspectiveProd.set(2,1, 8); - affinePerspectiveProd.set(2,2, 9); - - B2DHomMatrix perspectiveAffineProd; - - perspectiveAffineProd.set(0,0, 9); - perspectiveAffineProd.set(0,1, 12); - perspectiveAffineProd.set(0,2, 18); - perspectiveAffineProd.set(1,0, 24); - perspectiveAffineProd.set(1,1, 33); - perspectiveAffineProd.set(1,2, 48); - perspectiveAffineProd.set(2,0, 39); - perspectiveAffineProd.set(2,1, 54); - perspectiveAffineProd.set(2,2, 78); - - B2DHomMatrix perspectivePerspectiveProd; - - perspectivePerspectiveProd.set(0,0, 30); - perspectivePerspectiveProd.set(0,1, 36); - perspectivePerspectiveProd.set(0,2, 42); - perspectivePerspectiveProd.set(1,0, 66); - perspectivePerspectiveProd.set(1,1, 81); - perspectivePerspectiveProd.set(1,2, 96); - perspectivePerspectiveProd.set(2,0, 102); - perspectivePerspectiveProd.set(2,1, 126); - perspectivePerspectiveProd.set(2,2, 150); - - B2DHomMatrix temp; - - temp = maAffine; - temp*=maAffine; - CPPUNIT_ASSERT_MESSAGE("multiply: both compact", temp == affineAffineProd); - - temp = maPerspective; - temp*=maAffine; - CPPUNIT_ASSERT_MESSAGE("multiply: first compact", temp == affinePerspectiveProd); - - temp = maAffine; - temp*=maPerspective; - CPPUNIT_ASSERT_MESSAGE("multiply: second compact", temp == perspectiveAffineProd); - - temp = maPerspective; - temp*=maPerspective; - CPPUNIT_ASSERT_MESSAGE("multiply: none compact", temp == perspectivePerspectiveProd); - } - - void impFillMatrix(B2DHomMatrix& rSource, double fScaleX, double fScaleY, double fShearX, double fRotate) - { - // fill rSource with a linear combination of scale, shear and rotate - rSource.identity(); - rSource.scale(fScaleX, fScaleY); - rSource.shearX(fShearX); - rSource.rotate(fRotate); - } - - bool impDecomposeComposeTest(double fScaleX, double fScaleY, double fShearX, double fRotate) - { - // linear combine matrix with given values - B2DHomMatrix aSource; - impFillMatrix(aSource, fScaleX, fScaleY, fShearX, fRotate); - - // decompose that matrix - B2DTuple aDScale; - B2DTuple aDTrans; - double fDRot; - double fDShX; - bool bWorked = aSource.decompose(aDScale, aDTrans, fDRot, fDShX); - - // linear combine another matrix with decomposition results - B2DHomMatrix aRecombined; - impFillMatrix(aRecombined, aDScale.getX(), aDScale.getY(), fDShX, fDRot); - - // if decomposition worked, matrices need to be the same - return bWorked && aSource == aRecombined; - } - - void decompose() - { - // test matrix decompositions. Each matrix decomposed and rebuilt - // using the decompose result should be the same as before. Test - // with all ranges of values. Translations are not tested since these - // are just the two rightmost values and uncritical - static double fSX(10.0); - static double fSY(12.0); - static double fR(45.0 * F_PI180); - static double fS(15.0 * F_PI180); - - // check all possible scaling combinations - CPPUNIT_ASSERT_MESSAGE("decompose: error test A1", impDecomposeComposeTest(fSX, fSY, 0.0, 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test A2", impDecomposeComposeTest(-fSX, fSY, 0.0, 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test A3", impDecomposeComposeTest(fSX, -fSY, 0.0, 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test A4", impDecomposeComposeTest(-fSX, -fSY, 0.0, 0.0)); - - // check all possible scaling combinations with positive rotation - CPPUNIT_ASSERT_MESSAGE("decompose: error test B1", impDecomposeComposeTest(fSX, fSY, 0.0, fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test B2", impDecomposeComposeTest(-fSX, fSY, 0.0, fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test B3", impDecomposeComposeTest(fSX, -fSY, 0.0, fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test B4", impDecomposeComposeTest(-fSX, -fSY, 0.0, fR)); - - // check all possible scaling combinations with negative rotation - CPPUNIT_ASSERT_MESSAGE("decompose: error test C1", impDecomposeComposeTest(fSX, fSY, 0.0, -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test C2", impDecomposeComposeTest(-fSX, fSY, 0.0, -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test C3", impDecomposeComposeTest(fSX, -fSY, 0.0, -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test C4", impDecomposeComposeTest(-fSX, -fSY, 0.0, -fR)); - - // check all possible scaling combinations with positive shear - CPPUNIT_ASSERT_MESSAGE("decompose: error test D1", impDecomposeComposeTest(fSX, fSY, tan(fS), 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test D2", impDecomposeComposeTest(-fSX, fSY, tan(fS), 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test D3", impDecomposeComposeTest(fSX, -fSY, tan(fS), 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test D4", impDecomposeComposeTest(-fSX, -fSY, tan(fS), 0.0)); - - // check all possible scaling combinations with negative shear - CPPUNIT_ASSERT_MESSAGE("decompose: error test E1", impDecomposeComposeTest(fSX, fSY, tan(-fS), 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test E2", impDecomposeComposeTest(-fSX, fSY, tan(-fS), 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test E3", impDecomposeComposeTest(fSX, -fSY, tan(-fS), 0.0)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test E4", impDecomposeComposeTest(-fSX, -fSY, tan(-fS), 0.0)); - - // check all possible scaling combinations with positive rotate and positive shear - CPPUNIT_ASSERT_MESSAGE("decompose: error test F1", impDecomposeComposeTest(fSX, fSY, tan(fS), fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test F2", impDecomposeComposeTest(-fSX, fSY, tan(fS), fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test F3", impDecomposeComposeTest(fSX, -fSY, tan(fS), fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test F4", impDecomposeComposeTest(-fSX, -fSY, tan(fS), fR)); - - // check all possible scaling combinations with negative rotate and positive shear - CPPUNIT_ASSERT_MESSAGE("decompose: error test G1", impDecomposeComposeTest(fSX, fSY, tan(fS), -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test G2", impDecomposeComposeTest(-fSX, fSY, tan(fS), -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test G3", impDecomposeComposeTest(fSX, -fSY, tan(fS), -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test G4", impDecomposeComposeTest(-fSX, -fSY, tan(fS), -fR)); - - // check all possible scaling combinations with positive rotate and negative shear - CPPUNIT_ASSERT_MESSAGE("decompose: error test H1", impDecomposeComposeTest(fSX, fSY, tan(-fS), fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test H2", impDecomposeComposeTest(-fSX, fSY, tan(-fS), fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test H3", impDecomposeComposeTest(fSX, -fSY, tan(-fS), fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test H4", impDecomposeComposeTest(-fSX, -fSY, tan(-fS), fR)); - - // check all possible scaling combinations with negative rotate and negative shear - CPPUNIT_ASSERT_MESSAGE("decompose: error test I1", impDecomposeComposeTest(fSX, fSY, tan(-fS), -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test I2", impDecomposeComposeTest(-fSX, fSY, tan(-fS), -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test I3", impDecomposeComposeTest(fSX, -fSY, tan(-fS), -fR)); - CPPUNIT_ASSERT_MESSAGE("decompose: error test I4", impDecomposeComposeTest(-fSX, -fSY, tan(-fS), -fR)); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dhommatrix); - CPPUNIT_TEST(equal); - CPPUNIT_TEST(identity); - CPPUNIT_TEST(scale); - CPPUNIT_TEST(translate); - CPPUNIT_TEST(shear); - CPPUNIT_TEST(multiply); - CPPUNIT_TEST(decompose); - CPPUNIT_TEST_SUITE_END(); + bool impDecomposeComposeTest(double fScaleX, double fScaleY, double fShearX, double fRotate) + { + // linear combine matrix with given values + B2DHomMatrix aSource; + impFillMatrix(aSource, fScaleX, fScaleY, fShearX, fRotate); + // decompose that matrix + B2DTuple aDScale; + B2DTuple aDTrans; + double fDRot; + double fDShX; + bool bWorked = aSource.decompose(aDScale, aDTrans, fDRot, fDShX); + + // linear combine another matrix with decomposition results + B2DHomMatrix aRecombined; + impFillMatrix(aRecombined, aDScale.getX(), aDScale.getY(), fDShX, fDRot); + + // if decomposition worked, matrices need to be the same + return bWorked && aSource == aRecombined; + } }; // class b2dhommatrix -class b2dhompoint : public CppUnit::TestFixture +TEST_F(b2dhommatrix, equal) { -public: - // initialise your test code values here. - void setUp() - { - } + B2DHomMatrix aIdentity; + B2DHomMatrix aScale; + B2DHomMatrix aTranslate; + B2DHomMatrix aShear; + B2DHomMatrix aAffine; + B2DHomMatrix aPerspective; + + // setup some test matrices + aIdentity.identity(); // force compact layout + aIdentity.set(0,0, 1.0); + aIdentity.set(0,1, 0.0); + aIdentity.set(0,2, 0.0); + aIdentity.set(1,0, 0.0); + aIdentity.set(1,1, 1.0); + aIdentity.set(1,2, 0.0); + + aScale.identity(); // force compact layout + aScale.set(0,0, 2.0); + aScale.set(1,1, 20.0); + + aTranslate.identity(); // force compact layout + aTranslate.set(0,2, 20.0); + aTranslate.set(1,2, 2.0); + + aShear.identity(); // force compact layout + aShear.set(0,1, 3.0); + aShear.set(1,0, 7.0); + aShear.set(1,1, 22.0); + + aAffine.identity(); // force compact layout + aAffine.set(0,0, 1.0); + aAffine.set(0,1, 2.0); + aAffine.set(0,2, 3.0); + aAffine.set(1,0, 4.0); + aAffine.set(1,1, 5.0); + aAffine.set(1,2, 6.0); + + aPerspective.set(0,0, 1.0); + aPerspective.set(0,1, 2.0); + aPerspective.set(0,2, 3.0); + aPerspective.set(1,0, 4.0); + aPerspective.set(1,1, 5.0); + aPerspective.set(1,2, 6.0); + aPerspective.set(2,0, 7.0); + aPerspective.set(2,1, 8.0); + aPerspective.set(2,2, 9.0); + + ASSERT_TRUE(aIdentity == maIdentity) << "operator==: identity matrix"; + ASSERT_TRUE(aScale == maScale) << "operator==: scale matrix"; + ASSERT_TRUE(aTranslate == maTranslate) << "operator==: translate matrix"; + ASSERT_TRUE(aShear == maShear) << "operator==: shear matrix"; + ASSERT_TRUE(aAffine == maAffine) << "operator==: affine matrix"; + ASSERT_TRUE(aPerspective == maPerspective) << "operator==: perspective matrix"; +} - void tearDown() - { - } +TEST_F(b2dhommatrix, identity) +{ + B2DHomMatrix ident; - // insert your test code here. - void EmptyMethod() - { - } + ASSERT_TRUE(maIdentity == ident) << "identity"; +} + +TEST_F(b2dhommatrix, scale) +{ + B2DHomMatrix mat; + mat.scale(2.0,20.0); + ASSERT_TRUE(maScale == mat) << "scale"; +} - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. +TEST_F(b2dhommatrix, translate) +{ + B2DHomMatrix mat; + mat.translate(20.0,2.0); + ASSERT_TRUE(maTranslate == mat) << "translate"; +} - CPPUNIT_TEST_SUITE(b2dhompoint); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); -}; // class b2dhompoint +TEST_F(b2dhommatrix, shear) +{ + B2DHomMatrix mat; + mat.shearX(3.0); + mat.shearY(7.0); + ASSERT_TRUE(maShear == mat) << "translate"; +} + +TEST_F(b2dhommatrix, multiply) +{ + B2DHomMatrix affineAffineProd; + + affineAffineProd.set(0,0, 9); + affineAffineProd.set(0,1, 12); + affineAffineProd.set(0,2, 18); + affineAffineProd.set(1,0, 24); + affineAffineProd.set(1,1, 33); + affineAffineProd.set(1,2, 48); + + B2DHomMatrix affinePerspectiveProd; + + affinePerspectiveProd.set(0,0, 30); + affinePerspectiveProd.set(0,1, 36); + affinePerspectiveProd.set(0,2, 42); + affinePerspectiveProd.set(1,0, 66); + affinePerspectiveProd.set(1,1, 81); + affinePerspectiveProd.set(1,2, 96); + affinePerspectiveProd.set(2,0, 7); + affinePerspectiveProd.set(2,1, 8); + affinePerspectiveProd.set(2,2, 9); + + B2DHomMatrix perspectiveAffineProd; + + perspectiveAffineProd.set(0,0, 9); + perspectiveAffineProd.set(0,1, 12); + perspectiveAffineProd.set(0,2, 18); + perspectiveAffineProd.set(1,0, 24); + perspectiveAffineProd.set(1,1, 33); + perspectiveAffineProd.set(1,2, 48); + perspectiveAffineProd.set(2,0, 39); + perspectiveAffineProd.set(2,1, 54); + perspectiveAffineProd.set(2,2, 78); + + B2DHomMatrix perspectivePerspectiveProd; + + perspectivePerspectiveProd.set(0,0, 30); + perspectivePerspectiveProd.set(0,1, 36); + perspectivePerspectiveProd.set(0,2, 42); + perspectivePerspectiveProd.set(1,0, 66); + perspectivePerspectiveProd.set(1,1, 81); + perspectivePerspectiveProd.set(1,2, 96); + perspectivePerspectiveProd.set(2,0, 102); + perspectivePerspectiveProd.set(2,1, 126); + perspectivePerspectiveProd.set(2,2, 150); + + B2DHomMatrix temp; + + temp = maAffine; + temp*=maAffine; + ASSERT_TRUE(temp == affineAffineProd) << "multiply: both compact"; + + temp = maPerspective; + temp*=maAffine; + ASSERT_TRUE(temp == affinePerspectiveProd) << "multiply: first compact"; + + temp = maAffine; + temp*=maPerspective; + ASSERT_TRUE(temp == perspectiveAffineProd) << "multiply: second compact"; + + temp = maPerspective; + temp*=maPerspective; + ASSERT_TRUE(temp == perspectivePerspectiveProd) << "multiply: none compact"; +} + + +TEST_F(b2dhommatrix, decompose) +{ + // test matrix decompositions. Each matrix decomposed and rebuilt + // using the decompose result should be the same as before. Test + // with all ranges of values. Translations are not tested since these + // are just the two rightmost values and uncritical + static double fSX(10.0); + static double fSY(12.0); + static double fR(45.0 * F_PI180); + static double fS(15.0 * F_PI180); + + // check all possible scaling combinations + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, 0.0, 0.0)) << "decompose: error test A1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, 0.0, 0.0)) << "decompose: error test A2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, 0.0, 0.0)) << "decompose: error test A3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, 0.0, 0.0)) << "decompose: error test A4"; + + // check all possible scaling combinations with positive rotation + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, 0.0, fR)) << "decompose: error test B1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, 0.0, fR)) << "decompose: error test B2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, 0.0, fR)) << "decompose: error test B3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, 0.0, fR)) << "decompose: error test B4"; + + // check all possible scaling combinations with negative rotation + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, 0.0, -fR)) << "decompose: error test C1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, 0.0, -fR)) << "decompose: error test C2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, 0.0, -fR)) << "decompose: error test C3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, 0.0, -fR)) << "decompose: error test C4"; + + // check all possible scaling combinations with positive shear + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, tan(fS), 0.0)) << "decompose: error test D1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, tan(fS), 0.0)) << "decompose: error test D2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, tan(fS), 0.0)) << "decompose: error test D3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, tan(fS), 0.0)) << "decompose: error test D4"; + + // check all possible scaling combinations with negative shear + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, tan(-fS), 0.0)) << "decompose: error test E1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, tan(-fS), 0.0)) << "decompose: error test E2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, tan(-fS), 0.0)) << "decompose: error test E3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, tan(-fS), 0.0)) << "decompose: error test E4"; + + // check all possible scaling combinations with positive rotate and positive shear + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, tan(fS), fR)) << "decompose: error test F1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, tan(fS), fR)) << "decompose: error test F2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, tan(fS), fR)) << "decompose: error test F3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, tan(fS), fR)) << "decompose: error test F4"; + + // check all possible scaling combinations with negative rotate and positive shear + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, tan(fS), -fR)) << "decompose: error test G1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, tan(fS), -fR)) << "decompose: error test G2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, tan(fS), -fR)) << "decompose: error test G3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, tan(fS), -fR)) << "decompose: error test G4"; + + // check all possible scaling combinations with positive rotate and negative shear + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, tan(-fS), fR)) << "decompose: error test H1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, tan(-fS), fR)) << "decompose: error test H2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, tan(-fS), fR)) << "decompose: error test H3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, tan(-fS), fR)) << "decompose: error test H4"; + + // check all possible scaling combinations with negative rotate and negative shear + ASSERT_TRUE(impDecomposeComposeTest(fSX, fSY, tan(-fS), -fR)) << "decompose: error test I1"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, fSY, tan(-fS), -fR)) << "decompose: error test I2"; + ASSERT_TRUE(impDecomposeComposeTest(fSX, -fSY, tan(-fS), -fR)) << "decompose: error test I3"; + ASSERT_TRUE(impDecomposeComposeTest(-fSX, -fSY, tan(-fS), -fR)) << "decompose: error test I4"; +} -class b2dpoint : public CppUnit::TestFixture +class b2dhompoint : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } +}; // class b2dhompoint + - // insert your test code here. - // this is only demonstration code - void EmptyMethod() +class b2dpoint : public ::testing::Test +{ +public: + // initialise your test code values here. + virtual void SetUp() { - // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); } - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dpoint); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); + virtual void TearDown() + { + } }; // class b2dpoint -class b2dpolygon : public CppUnit::TestFixture +class b2dpolygon : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - void testBasics() - { - B2DPolygon aPoly; - - aPoly.appendBezierSegment(B2DPoint(1,1),B2DPoint(2,2),B2DPoint(3,3)); - - CPPUNIT_ASSERT_MESSAGE("#1 first polygon point wrong", - aPoly.getB2DPoint(0) == B2DPoint(3,3)); - CPPUNIT_ASSERT_MESSAGE("#1 first control point wrong", - aPoly.getPrevControlPoint(0) == B2DPoint(2,2)); - CPPUNIT_ASSERT_MESSAGE("#1 second control point wrong", - aPoly.getNextControlPoint(0) == B2DPoint(3,3)); - CPPUNIT_ASSERT_MESSAGE("next control point not used", - aPoly.isNextControlPointUsed(0) == false); - - aPoly.setNextControlPoint(0,B2DPoint(4,4)); - CPPUNIT_ASSERT_MESSAGE("#1.1 second control point wrong", - aPoly.getNextControlPoint(0) == B2DPoint(4,4)); - CPPUNIT_ASSERT_MESSAGE("next control point used", - aPoly.isNextControlPointUsed(0) == true); - CPPUNIT_ASSERT_MESSAGE("areControlPointsUsed() wrong", - aPoly.areControlPointsUsed() == true); - CPPUNIT_ASSERT_MESSAGE("getContinuityInPoint() wrong", - aPoly.getContinuityInPoint(0) == CONTINUITY_C2); - - aPoly.resetControlPoints(); - CPPUNIT_ASSERT_MESSAGE("resetControlPoints() did not clear", - aPoly.getB2DPoint(0) == B2DPoint(3,3)); - CPPUNIT_ASSERT_MESSAGE("resetControlPoints() did not clear", - aPoly.getPrevControlPoint(0) == B2DPoint(3,3)); - CPPUNIT_ASSERT_MESSAGE("resetControlPoints() did not clear", - aPoly.getNextControlPoint(0) == B2DPoint(3,3)); - CPPUNIT_ASSERT_MESSAGE("areControlPointsUsed() wrong #2", - aPoly.areControlPointsUsed() == false); - - aPoly.clear(); - aPoly.append(B2DPoint(0,0)); - aPoly.appendBezierSegment(B2DPoint(1,1),B2DPoint(2,2),B2DPoint(3,3)); - - CPPUNIT_ASSERT_MESSAGE("#2 first polygon point wrong", - aPoly.getB2DPoint(0) == B2DPoint(0,0)); - CPPUNIT_ASSERT_MESSAGE("#2 first control point wrong", - aPoly.getPrevControlPoint(0) == B2DPoint(0,0)); - CPPUNIT_ASSERT_MESSAGE("#2 second control point wrong", - aPoly.getNextControlPoint(0) == B2DPoint(1,1)); - CPPUNIT_ASSERT_MESSAGE("#2 third control point wrong", - aPoly.getPrevControlPoint(1) == B2DPoint(2,2)); - CPPUNIT_ASSERT_MESSAGE("#2 fourth control point wrong", - aPoly.getNextControlPoint(1) == B2DPoint(3,3)); - CPPUNIT_ASSERT_MESSAGE("#2 second polygon point wrong", - aPoly.getB2DPoint(1) == B2DPoint(3,3)); - } - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dpolygon); - CPPUNIT_TEST(testBasics); - CPPUNIT_TEST_SUITE_END(); }; // class b2dpolygon +TEST_F(b2dpolygon, testBasics) +{ + B2DPolygon aPoly; + + aPoly.appendBezierSegment(B2DPoint(1,1),B2DPoint(2,2),B2DPoint(3,3)); -class b2dpolygontools : public CppUnit::TestFixture + ASSERT_TRUE(aPoly.getB2DPoint(0) == B2DPoint(3,3)) << "#1 first polygon point wrong"; + ASSERT_TRUE(aPoly.getPrevControlPoint(0) == B2DPoint(2,2)) << "#1 first control point wrong"; + ASSERT_TRUE(aPoly.getNextControlPoint(0) == B2DPoint(3,3)) << "#1 second control point wrong"; + ASSERT_TRUE(aPoly.isNextControlPointUsed(0) == false) << "next control point not used"; + + aPoly.setNextControlPoint(0,B2DPoint(4,4)); + ASSERT_TRUE(aPoly.getNextControlPoint(0) == B2DPoint(4,4)) << "#1.1 second control point wrong"; + ASSERT_TRUE(aPoly.isNextControlPointUsed(0) == true) << "next control point used"; + ASSERT_TRUE(aPoly.areControlPointsUsed() == true) << "areControlPointsUsed() wrong"; + ASSERT_TRUE(aPoly.getContinuityInPoint(0) == CONTINUITY_C2) << "getContinuityInPoint() wrong"; + + aPoly.resetControlPoints(); + ASSERT_TRUE(aPoly.getB2DPoint(0) == B2DPoint(3,3)) << "resetControlPoints() did not clear"; + ASSERT_TRUE(aPoly.getPrevControlPoint(0) == B2DPoint(3,3)) << "resetControlPoints() did not clear"; + ASSERT_TRUE(aPoly.getNextControlPoint(0) == B2DPoint(3,3)) << "resetControlPoints() did not clear"; + ASSERT_TRUE(aPoly.areControlPointsUsed() == false) << "areControlPointsUsed() wrong #2"; + + aPoly.clear(); + aPoly.append(B2DPoint(0,0)); + aPoly.appendBezierSegment(B2DPoint(1,1),B2DPoint(2,2),B2DPoint(3,3)); + + ASSERT_TRUE(aPoly.getB2DPoint(0) == B2DPoint(0,0)) << "#2 first polygon point wrong"; + ASSERT_TRUE(aPoly.getPrevControlPoint(0) == B2DPoint(0,0)) << "#2 first control point wrong"; + ASSERT_TRUE(aPoly.getNextControlPoint(0) == B2DPoint(1,1)) << "#2 second control point wrong"; + ASSERT_TRUE(aPoly.getPrevControlPoint(1) == B2DPoint(2,2)) << "#2 third control point wrong"; + ASSERT_TRUE(aPoly.getNextControlPoint(1) == B2DPoint(3,3)) << "#2 fourth control point wrong"; + ASSERT_TRUE(aPoly.getB2DPoint(1) == B2DPoint(3,3)) << "#2 second polygon point wrong"; +} + +class b2dpolygontools : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - // this is only demonstration code - void testIsRectangle() - { - B2DPolygon aRect1( - tools::createPolygonFromRect( - B2DRange(0,0,1,1) ) ); - - B2DPolygon aRect2; - aRect2.append( B2DPoint(0,0) ); - aRect2.append( B2DPoint(1,0) ); - aRect2.append( B2DPoint(1,.5)); - aRect2.append( B2DPoint(1,1) ); - aRect2.append( B2DPoint(0,1) ); - aRect2.setClosed(true); - - B2DPolygon aNonRect1; - aNonRect1.append( B2DPoint(0,0) ); - aNonRect1.append( B2DPoint(1,0) ); - aNonRect1.append( B2DPoint(1,1) ); - aNonRect1.append( B2DPoint(0.5,1) ); - aNonRect1.append( B2DPoint(0.5,0) ); - aNonRect1.setClosed(true); - - B2DPolygon aNonRect2; - aNonRect2.append( B2DPoint(0,0) ); - aNonRect2.append( B2DPoint(1,1) ); - aNonRect2.append( B2DPoint(1,0) ); - aNonRect2.append( B2DPoint(0,1) ); - aNonRect2.setClosed(true); - - B2DPolygon aNonRect3; - aNonRect3.append( B2DPoint(0,0) ); - aNonRect3.append( B2DPoint(1,0) ); - aNonRect3.append( B2DPoint(1,1) ); - aNonRect3.setClosed(true); - - B2DPolygon aNonRect4; - aNonRect4.append( B2DPoint(0,0) ); - aNonRect4.append( B2DPoint(1,0) ); - aNonRect4.append( B2DPoint(1,1) ); - aNonRect4.append( B2DPoint(0,1) ); - - B2DPolygon aNonRect5; - aNonRect5.append( B2DPoint(0,0) ); - aNonRect5.append( B2DPoint(1,0) ); - aNonRect5.append( B2DPoint(1,1) ); - aNonRect5.append( B2DPoint(0,1) ); - aNonRect5.setControlPoints(1,B2DPoint(1,0),B2DPoint(-11,0)); - aNonRect5.setClosed(true); - - CPPUNIT_ASSERT_MESSAGE("checking rectangle-ness of rectangle 1", - tools::isRectangle( aRect1 )); - CPPUNIT_ASSERT_MESSAGE("checking rectangle-ness of rectangle 2", - tools::isRectangle( aRect2 )); - CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 1", - !tools::isRectangle( aNonRect1 )); - CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 2", - !tools::isRectangle( aNonRect2 )); - CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 3", - !tools::isRectangle( aNonRect3 )); - CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 4", - !tools::isRectangle( aNonRect4 )); - CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 5", - !tools::isRectangle( aNonRect5 )); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dpolygontools); - CPPUNIT_TEST(testIsRectangle); - CPPUNIT_TEST_SUITE_END(); }; // class b2dpolygontools +TEST_F(b2dpolygontools, testIsRectangle) +{ + B2DPolygon aRect1( + tools::createPolygonFromRect( + B2DRange(0,0,1,1) ) ); + + B2DPolygon aRect2; + aRect2.append( B2DPoint(0,0) ); + aRect2.append( B2DPoint(1,0) ); + aRect2.append( B2DPoint(1,.5)); + aRect2.append( B2DPoint(1,1) ); + aRect2.append( B2DPoint(0,1) ); + aRect2.setClosed(true); + + B2DPolygon aNonRect1; + aNonRect1.append( B2DPoint(0,0) ); + aNonRect1.append( B2DPoint(1,0) ); + aNonRect1.append( B2DPoint(1,1) ); + aNonRect1.append( B2DPoint(0.5,1) ); + aNonRect1.append( B2DPoint(0.5,0) ); + aNonRect1.setClosed(true); + + B2DPolygon aNonRect2; + aNonRect2.append( B2DPoint(0,0) ); + aNonRect2.append( B2DPoint(1,1) ); + aNonRect2.append( B2DPoint(1,0) ); + aNonRect2.append( B2DPoint(0,1) ); + aNonRect2.setClosed(true); + + B2DPolygon aNonRect3; + aNonRect3.append( B2DPoint(0,0) ); + aNonRect3.append( B2DPoint(1,0) ); + aNonRect3.append( B2DPoint(1,1) ); + aNonRect3.setClosed(true); + + B2DPolygon aNonRect4; + aNonRect4.append( B2DPoint(0,0) ); + aNonRect4.append( B2DPoint(1,0) ); + aNonRect4.append( B2DPoint(1,1) ); + aNonRect4.append( B2DPoint(0,1) ); + + B2DPolygon aNonRect5; + aNonRect5.append( B2DPoint(0,0) ); + aNonRect5.append( B2DPoint(1,0) ); + aNonRect5.append( B2DPoint(1,1) ); + aNonRect5.append( B2DPoint(0,1) ); + aNonRect5.setControlPoints(1,B2DPoint(1,0),B2DPoint(-11,0)); + aNonRect5.setClosed(true); + + ASSERT_TRUE(tools::isRectangle( aRect1 )) << "checking rectangle-ness of rectangle 1"; + ASSERT_TRUE(tools::isRectangle( aRect2 )) << "checking rectangle-ness of rectangle 2"; + ASSERT_TRUE(!tools::isRectangle( aNonRect1 )) << "checking non-rectangle-ness of polygon 1"; + ASSERT_TRUE(!tools::isRectangle( aNonRect2 )) << "checking non-rectangle-ness of polygon 2"; + ASSERT_TRUE(!tools::isRectangle( aNonRect3 )) << "checking non-rectangle-ness of polygon 3"; + ASSERT_TRUE(!tools::isRectangle( aNonRect4 )) << "checking non-rectangle-ness of polygon 4"; + ASSERT_TRUE(!tools::isRectangle( aNonRect5 )) << "checking non-rectangle-ness of polygon 5"; +} -class b2dpolypolygon : public CppUnit::TestFixture +class b2dpolypolygon : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - void EmptyMethod() - { - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dpolypolygon); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b2dpolypolygon -class b2dquadraticbezier : public CppUnit::TestFixture +class b2dquadraticbezier : public ::testing::Test { public: // initialise your test code values here. - void setUp() - { - } - - void tearDown() + virtual void SetUp() { } - // insert your test code here. - // this is only demonstration code - void EmptyMethod() + virtual void TearDown() { - // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dquadraticbezier); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b2dquadraticbezier -class b2drange : public CppUnit::TestFixture +class b2drange : public ::testing::Test { public: // initialise your test code values here. - void setUp() - { - } - - void tearDown() + virtual void SetUp() { } - // insert your test code here. - void EmptyMethod() + virtual void TearDown() { } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2drange); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b2drange -class b2dtuple : public CppUnit::TestFixture +class b2dtuple : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - // this is only demonstration code - void EmptyMethod() - { - // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dtuple); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b2dtuple -class b2dvector : public CppUnit::TestFixture +class b2dvector : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - void EmptyMethod() - { - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b2dvector); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b2dvector -class bcolor : public CppUnit::TestFixture +class bcolor : public ::testing::Test { +protected: BColor maWhite; BColor maBlack; BColor maRed; @@ -1277,177 +1065,93 @@ public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } +}; // class bcolor - // insert your test code here. - void hslTest() - { - CPPUNIT_ASSERT_MESSAGE("white", - tools::rgb2hsl(maWhite) == BColor(0,0,1)); - CPPUNIT_ASSERT_MESSAGE("black", - tools::rgb2hsl(maBlack) == BColor(0,0,0)); - CPPUNIT_ASSERT_MESSAGE("red", - tools::rgb2hsl(maRed) == BColor(0,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("green", - tools::rgb2hsl(maGreen) == BColor(120,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("blue", - tools::rgb2hsl(maBlue) == BColor(240,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("yellow", - tools::rgb2hsl(maYellow) == BColor(60,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("magenta", - tools::rgb2hsl(maMagenta) == BColor(300,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("cyan", - tools::rgb2hsl(maCyan) == BColor(180,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("third hue case", - tools::rgb2hsl(BColor(0,0.5,1)) == BColor(210,1,0.5)); - - CPPUNIT_ASSERT_MESSAGE("roundtrip white", - tools::hsl2rgb(tools::rgb2hsl(maWhite)) == maWhite); - CPPUNIT_ASSERT_MESSAGE("roundtrip black", - tools::hsl2rgb(tools::rgb2hsl(maBlack)) == maBlack); - CPPUNIT_ASSERT_MESSAGE("roundtrip red", - tools::hsl2rgb(tools::rgb2hsl(maRed)) == maRed); - CPPUNIT_ASSERT_MESSAGE("roundtrip green", - tools::hsl2rgb(tools::rgb2hsl(maGreen)) == maGreen); - CPPUNIT_ASSERT_MESSAGE("roundtrip blue", - tools::hsl2rgb(tools::rgb2hsl(maBlue)) == maBlue); - CPPUNIT_ASSERT_MESSAGE("roundtrip yellow", - tools::hsl2rgb(tools::rgb2hsl(maYellow)) == maYellow); - CPPUNIT_ASSERT_MESSAGE("roundtrip magenta", - tools::hsl2rgb(tools::rgb2hsl(maMagenta)) == maMagenta); - CPPUNIT_ASSERT_MESSAGE("roundtrip cyan", - tools::hsl2rgb(tools::rgb2hsl(maCyan)) == maCyan); - - CPPUNIT_ASSERT_MESSAGE("grey10", - tools::rgb2hsl(maWhite*.1) == BColor(0,0,.1)); - CPPUNIT_ASSERT_MESSAGE("grey90", - tools::rgb2hsl(maWhite*.9) == BColor(0,0,.9)); - CPPUNIT_ASSERT_MESSAGE("red/2", - tools::rgb2hsl(maRed*.5) == BColor(0,1,0.25)); - CPPUNIT_ASSERT_MESSAGE("green/2", - tools::rgb2hsl(maGreen*.5) == BColor(120,1,0.25)); - CPPUNIT_ASSERT_MESSAGE("blue/2", - tools::rgb2hsl(maBlue*.5) == BColor(240,1,0.25)); - CPPUNIT_ASSERT_MESSAGE("yellow/2", - tools::rgb2hsl(maYellow*.5) == BColor(60,1,0.25)); - CPPUNIT_ASSERT_MESSAGE("magenta/2", - tools::rgb2hsl(maMagenta*.5) == BColor(300,1,0.25)); - CPPUNIT_ASSERT_MESSAGE("cyan/2", - tools::rgb2hsl(maCyan*.5) == BColor(180,1,0.25)); - - CPPUNIT_ASSERT_MESSAGE("pastel", - tools::rgb2hsl(BColor(.75,.25,.25)) == BColor(0,.5,.5)); - } - - // insert your test code here. - void hsvTest() - { - CPPUNIT_ASSERT_MESSAGE("white", - tools::rgb2hsv(maWhite) == BColor(0,0,1)); - CPPUNIT_ASSERT_MESSAGE("black", - tools::rgb2hsv(maBlack) == BColor(0,0,0)); - CPPUNIT_ASSERT_MESSAGE("red", - tools::rgb2hsv(maRed) == BColor(0,1,1)); - CPPUNIT_ASSERT_MESSAGE("green", - tools::rgb2hsv(maGreen) == BColor(120,1,1)); - CPPUNIT_ASSERT_MESSAGE("blue", - tools::rgb2hsv(maBlue) == BColor(240,1,1)); - CPPUNIT_ASSERT_MESSAGE("yellow", - tools::rgb2hsv(maYellow) == BColor(60,1,1)); - CPPUNIT_ASSERT_MESSAGE("magenta", - tools::rgb2hsv(maMagenta) == BColor(300,1,1)); - CPPUNIT_ASSERT_MESSAGE("cyan", - tools::rgb2hsv(maCyan) == BColor(180,1,1)); - - CPPUNIT_ASSERT_MESSAGE("roundtrip white", - tools::hsv2rgb(tools::rgb2hsv(maWhite)) == maWhite); - CPPUNIT_ASSERT_MESSAGE("roundtrip black", - tools::hsv2rgb(tools::rgb2hsv(maBlack)) == maBlack); - CPPUNIT_ASSERT_MESSAGE("roundtrip red", - tools::hsv2rgb(tools::rgb2hsv(maRed)) == maRed); - CPPUNIT_ASSERT_MESSAGE("roundtrip green", - tools::hsv2rgb(tools::rgb2hsv(maGreen)) == maGreen); - CPPUNIT_ASSERT_MESSAGE("roundtrip blue", - tools::hsv2rgb(tools::rgb2hsv(maBlue)) == maBlue); - CPPUNIT_ASSERT_MESSAGE("roundtrip yellow", - tools::hsv2rgb(tools::rgb2hsv(maYellow)) == maYellow); - CPPUNIT_ASSERT_MESSAGE("roundtrip magenta", - tools::hsv2rgb(tools::rgb2hsv(maMagenta)) == maMagenta); - CPPUNIT_ASSERT_MESSAGE("roundtrip cyan", - tools::hsv2rgb(tools::rgb2hsv(maCyan)) == maCyan); - - CPPUNIT_ASSERT_MESSAGE("grey10", - tools::rgb2hsv(maWhite*.1) == BColor(0,0,.1)); - CPPUNIT_ASSERT_MESSAGE("grey90", - tools::rgb2hsv(maWhite*.9) == BColor(0,0,.9)); - CPPUNIT_ASSERT_MESSAGE("red/2", - tools::rgb2hsv(maRed*.5) == BColor(0,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("green/2", - tools::rgb2hsv(maGreen*.5) == BColor(120,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("blue/2", - tools::rgb2hsv(maBlue*.5) == BColor(240,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("yellow/2", - tools::rgb2hsv(maYellow*.5) == BColor(60,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("magenta/2", - tools::rgb2hsv(maMagenta*.5) == BColor(300,1,0.5)); - CPPUNIT_ASSERT_MESSAGE("cyan/2", - tools::rgb2hsv(maCyan*.5) == BColor(180,1,0.5)); - - CPPUNIT_ASSERT_MESSAGE("pastel", - tools::rgb2hsv(BColor(.5,.25,.25)) == BColor(0,.5,.5)); - } - - void ciexyzTest() - { - tools::rgb2ciexyz(maWhite); - tools::rgb2ciexyz(maBlack); - tools::rgb2ciexyz(maRed); - tools::rgb2ciexyz(maGreen); - tools::rgb2ciexyz(maBlue); - tools::rgb2ciexyz(maYellow); - tools::rgb2ciexyz(maMagenta); - tools::rgb2ciexyz(maCyan); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(bcolor); - CPPUNIT_TEST(hslTest); - CPPUNIT_TEST(hsvTest); - CPPUNIT_TEST(ciexyzTest); - CPPUNIT_TEST_SUITE_END(); -}; // class b2dvector +TEST_F(bcolor, hslTest) +{ + ASSERT_TRUE(tools::rgb2hsl(maWhite) == BColor(0,0,1)) << "white"; + ASSERT_TRUE(tools::rgb2hsl(maBlack) == BColor(0,0,0)) << "black"; + ASSERT_TRUE(tools::rgb2hsl(maRed) == BColor(0,1,0.5)) << "red"; + ASSERT_TRUE(tools::rgb2hsl(maGreen) == BColor(120,1,0.5)) << "green"; + ASSERT_TRUE(tools::rgb2hsl(maBlue) == BColor(240,1,0.5)) << "blue"; + ASSERT_TRUE(tools::rgb2hsl(maYellow) == BColor(60,1,0.5)) << "yellow"; + ASSERT_TRUE(tools::rgb2hsl(maMagenta) == BColor(300,1,0.5)) << "magenta"; + ASSERT_TRUE(tools::rgb2hsl(maCyan) == BColor(180,1,0.5)) << "cyan"; + ASSERT_TRUE(tools::rgb2hsl(BColor(0,0.5,1)) == BColor(210,1,0.5)) << "third hue case"; + + ASSERT_TRUE(tools::hsl2rgb(tools::rgb2hsl(maWhite)) == maWhite) << "roundtrip white"; + ASSERT_TRUE(tools::hsl2rgb(tools::rgb2hsl(maBlack)) == maBlack) << "roundtrip black"; + ASSERT_TRUE(tools::hsl2rgb(tools::rgb2hsl(maRed)) == maRed) << "roundtrip red"; + ASSERT_TRUE(tools::hsl2rgb(tools::rgb2hsl(maGreen)) == maGreen) << "roundtrip green"; + ASSERT_TRUE(tools::hsl2rgb(tools::rgb2hsl(maBlue)) == maBlue) << "roundtrip blue"; + ASSERT_TRUE(tools::hsl2rgb(tools::rgb2hsl(maYellow)) == maYellow) << "roundtrip yellow"; + ASSERT_TRUE(tools::hsl2rgb(tools::rgb2hsl(maMagenta)) == maMagenta) << "roundtrip magenta"; + ASSERT_TRUE(tools::hsl2rgb(tools::rgb2hsl(maCyan)) == maCyan) << "roundtrip cyan"; + + ASSERT_TRUE(tools::rgb2hsl(maWhite*.1) == BColor(0,0,.1)) << "grey10"; + ASSERT_TRUE(tools::rgb2hsl(maWhite*.9) == BColor(0,0,.9)) << "grey90"; + ASSERT_TRUE(tools::rgb2hsl(maRed*.5) == BColor(0,1,0.25)) << "red/2"; + ASSERT_TRUE(tools::rgb2hsl(maGreen*.5) == BColor(120,1,0.25)) << "green/2"; + ASSERT_TRUE(tools::rgb2hsl(maBlue*.5) == BColor(240,1,0.25)) << "blue/2"; + ASSERT_TRUE(tools::rgb2hsl(maYellow*.5) == BColor(60,1,0.25)) << "yellow/2"; + ASSERT_TRUE(tools::rgb2hsl(maMagenta*.5) == BColor(300,1,0.25)) << "magenta/2"; + ASSERT_TRUE(tools::rgb2hsl(maCyan*.5) == BColor(180,1,0.25)) << "cyan/2"; -// ----------------------------------------------------------------------------- + ASSERT_TRUE(tools::rgb2hsl(BColor(.75,.25,.25)) == BColor(0,.5,.5)) << "pastel"; +} -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dsvgdimpex); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpolyrange); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dcubicbezier); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dhommatrix); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dhompoint); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpoint); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpolygon); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpolygontools); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dpolypolygon); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dquadraticbezier); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2drange); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dtuple); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::b2dvector); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx2d::bcolor); -} // namespace basegfx2d +TEST_F(bcolor, hsvTest) +{ + ASSERT_TRUE(tools::rgb2hsv(maWhite) == BColor(0,0,1)) << "white"; + ASSERT_TRUE(tools::rgb2hsv(maBlack) == BColor(0,0,0)) << "black"; + ASSERT_TRUE(tools::rgb2hsv(maRed) == BColor(0,1,1)) << "red"; + ASSERT_TRUE(tools::rgb2hsv(maGreen) == BColor(120,1,1)) << "green"; + ASSERT_TRUE(tools::rgb2hsv(maBlue) == BColor(240,1,1)) << "blue"; + ASSERT_TRUE(tools::rgb2hsv(maYellow) == BColor(60,1,1)) << "yellow"; + ASSERT_TRUE(tools::rgb2hsv(maMagenta) == BColor(300,1,1)) << "magenta"; + ASSERT_TRUE(tools::rgb2hsv(maCyan) == BColor(180,1,1)) << "cyan"; + + ASSERT_TRUE(tools::hsv2rgb(tools::rgb2hsv(maWhite)) == maWhite) << "roundtrip white"; + ASSERT_TRUE(tools::hsv2rgb(tools::rgb2hsv(maBlack)) == maBlack) << "roundtrip black"; + ASSERT_TRUE(tools::hsv2rgb(tools::rgb2hsv(maRed)) == maRed) << "roundtrip red"; + ASSERT_TRUE(tools::hsv2rgb(tools::rgb2hsv(maGreen)) == maGreen) << "roundtrip green"; + ASSERT_TRUE(tools::hsv2rgb(tools::rgb2hsv(maBlue)) == maBlue) << "roundtrip blue"; + ASSERT_TRUE(tools::hsv2rgb(tools::rgb2hsv(maYellow)) == maYellow) << "roundtrip yellow"; + ASSERT_TRUE(tools::hsv2rgb(tools::rgb2hsv(maMagenta)) == maMagenta) << "roundtrip magenta"; + ASSERT_TRUE(tools::hsv2rgb(tools::rgb2hsv(maCyan)) == maCyan) << "roundtrip cyan"; + + ASSERT_TRUE(tools::rgb2hsv(maWhite*.1) == BColor(0,0,.1)) << "grey10"; + ASSERT_TRUE(tools::rgb2hsv(maWhite*.9) == BColor(0,0,.9)) << "grey90"; + ASSERT_TRUE(tools::rgb2hsv(maRed*.5) == BColor(0,1,0.5)) << "red/2"; + ASSERT_TRUE(tools::rgb2hsv(maGreen*.5) == BColor(120,1,0.5)) << "green/2"; + ASSERT_TRUE(tools::rgb2hsv(maBlue*.5) == BColor(240,1,0.5)) << "blue/2"; + ASSERT_TRUE(tools::rgb2hsv(maYellow*.5) == BColor(60,1,0.5)) << "yellow/2"; + ASSERT_TRUE(tools::rgb2hsv(maMagenta*.5) == BColor(300,1,0.5)) << "magenta/2"; + ASSERT_TRUE(tools::rgb2hsv(maCyan*.5) == BColor(180,1,0.5)) << "cyan/2"; + ASSERT_TRUE(tools::rgb2hsv(BColor(.5,.25,.25)) == BColor(0,.5,.5)) << "pastel"; +} + +TEST_F(bcolor, ciexyzTest) +{ + tools::rgb2ciexyz(maWhite); + tools::rgb2ciexyz(maBlack); + tools::rgb2ciexyz(maRed); + tools::rgb2ciexyz(maGreen); + tools::rgb2ciexyz(maBlue); + tools::rgb2ciexyz(maYellow); + tools::rgb2ciexyz(maMagenta); + tools::rgb2ciexyz(maCyan); +} // ----------------------------------------------------------------------------- -// this macro creates an empty function, which will called by the RegisterAllFunctions() -// to let the user the possibility to also register some functions by hand. -// NOADDITIONAL; +} // namespace basegfx2d Modified: openoffice/trunk/main/basegfx/test/basegfx3d.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/basegfx/test/basegfx3d.cxx?rev=1698257&r1=1698256&r2=1698257&view=diff ============================================================================== --- openoffice/trunk/main/basegfx/test/basegfx3d.cxx (original) +++ openoffice/trunk/main/basegfx/test/basegfx3d.cxx Fri Aug 28 03:58:57 2015 @@ -27,194 +27,96 @@ // autogenerated file with codegen.pl #include "preextstl.h" -#include "cppunit/TestAssert.h" -#include "cppunit/TestFixture.h" -#include "cppunit/extensions/HelperMacros.h" +#include "gtest/gtest.h" #include "postextstl.h" namespace basegfx3d { -class b3dhommatrix : public CppUnit::TestFixture +class b3dhommatrix : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - // this is only demonstration code - void EmptyMethod() - { - // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b3dhommatrix); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b3dhommatrix -class b3dhompoint : public CppUnit::TestFixture +class b3dhompoint : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - void EmptyMethod() - { - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b3dhompoint); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b3dhompoint -class b3dpoint : public CppUnit::TestFixture +class b3dpoint : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - // this is only demonstration code - void EmptyMethod() - { - // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b3dpoint); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b3dpoint -class b3drange : public CppUnit::TestFixture +class b3drange : public ::testing::Test { public: // initialise your test code values here. - void setUp() - { - } - - void tearDown() + virtual void SetUp() { } - // insert your test code here. - void EmptyMethod() + virtual void TearDown() { } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b3drange); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b3drange -class b3dtuple : public CppUnit::TestFixture +class b3dtuple : public ::testing::Test { public: // initialise your test code values here. - void setUp() - { - } - - void tearDown() + virtual void SetUp() { } - // insert your test code here. - // this is only demonstration code - void EmptyMethod() + virtual void TearDown() { - // CPPUNIT_ASSERT_MESSAGE("a message", 1 == 1); } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b3dtuple); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b3dtuple -class b3dvector : public CppUnit::TestFixture +class b3dvector : public ::testing::Test { public: // initialise your test code values here. - void setUp() + virtual void SetUp() { } - void tearDown() + virtual void TearDown() { } - - // insert your test code here. - void EmptyMethod() - { - } - - // Change the following lines only, if you add, remove or rename - // member functions of the current class, - // because these macros are need by auto register mechanism. - - CPPUNIT_TEST_SUITE(b3dvector); - CPPUNIT_TEST(EmptyMethod); - CPPUNIT_TEST_SUITE_END(); }; // class b3dvector // ----------------------------------------------------------------------------- -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dhommatrix); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dhompoint); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dpoint); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3drange); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dtuple); -CPPUNIT_TEST_SUITE_REGISTRATION(basegfx3d::b3dvector); -} // namespace basegfx3d - - -// ----------------------------------------------------------------------------- -// this macro creates an empty function, which will called by the RegisterAllFunctions() -// to let the user the possibility to also register some functions by hand. -// NOADDITIONAL; +} // namespace basegfx3d