summaryrefslogtreecommitdiff
path: root/basegfx
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-01-28 19:54:51 +0100
committerTomaž Vajngerl <quikee@gmail.com>2019-01-28 23:14:23 +0100
commitdfc4d2b009b9f9c7307c79e7ef2c1663005a5646 (patch)
tree3546c20d776488c39aea176b31436d298cd2a41a /basegfx
parenta2f5a7d69d1bec0b5761e48d3feb5346193a969b (diff)
split basegfx 2d tests to separate files (one per tested class)
Change-Id: Icb2f745851ba3de31f6a672d1bc20659de687d2e Reviewed-on: https://gerrit.libreoffice.org/67031 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'basegfx')
-rw-r--r--basegfx/CppunitTest_basegfx.mk13
-rw-r--r--basegfx/test/B1DRangeTest.cxx97
-rw-r--r--basegfx/test/B2DHomMatrixTest.cxx468
-rw-r--r--basegfx/test/B2DPointTest.cxx50
-rw-r--r--basegfx/test/B2DPolyPolygonTest.cxx82
-rw-r--r--basegfx/test/B2DPolyRangeTest.cxx66
-rw-r--r--basegfx/test/B2DPolygonTest.cxx94
-rw-r--r--basegfx/test/B2DPolygonToolsTest.cxx85
-rw-r--r--basegfx/test/B2DRangeTest.cxx54
-rw-r--r--basegfx/test/B2DTupleTest.cxx50
-rw-r--r--basegfx/test/B2IBoxTest.cxx63
-rw-r--r--basegfx/test/B2XRangeTest.cxx70
-rw-r--r--basegfx/test/BColorTest.cxx151
-rw-r--r--basegfx/test/basegfx2d.cxx1024
14 files changed, 1342 insertions, 1025 deletions
diff --git a/basegfx/CppunitTest_basegfx.mk b/basegfx/CppunitTest_basegfx.mk
index 472c6ff11049..91cfc2226774 100644
--- a/basegfx/CppunitTest_basegfx.mk
+++ b/basegfx/CppunitTest_basegfx.mk
@@ -22,7 +22,18 @@ $(eval $(call gb_CppunitTest_use_libraries,basegfx,\
))
$(eval $(call gb_CppunitTest_add_exception_objects,basegfx,\
- basegfx/test/basegfx2d \
+ basegfx/test/B2DRangeTest \
+ basegfx/test/B2DPolyRangeTest \
+ basegfx/test/B2DHomMatrixTest \
+ basegfx/test/B2DPointTest \
+ basegfx/test/B2DPolygonTest \
+ basegfx/test/B2DPolygonToolsTest \
+ basegfx/test/B2DPolyPolygonTest \
+ basegfx/test/B1DRangeTest \
+ basegfx/test/B2XRangeTest \
+ basegfx/test/B2IBoxTest \
+ basegfx/test/B2DTupleTest \
+ basegfx/test/BColorTest \
basegfx/test/SvgPathImportExport \
basegfx/test/basegfx3d \
basegfx/test/boxclipper \
diff --git a/basegfx/test/B1DRangeTest.cxx b/basegfx/test/B1DRangeTest.cxx
new file mode 100644
index 000000000000..3eefc9026484
--- /dev/null
+++ b/basegfx/test/B1DRangeTest.cxx
@@ -0,0 +1,97 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/range/b1drange.hxx>
+
+namespace basegfx
+{
+class b1Xrange : public CppUnit::TestFixture
+{
+public:
+ template <class Type> void implCheck()
+ {
+ // test interval axioms
+ // (http://en.wikipedia.org/wiki/Interval_%28mathematics%29)
+ Type aRange;
+ CPPUNIT_ASSERT_MESSAGE("default ctor - empty range", aRange.isEmpty());
+ CPPUNIT_ASSERT_MESSAGE("center - get cop-out value since range is empty",
+ aRange.getCenter() == 0);
+
+ // degenerate interval
+ aRange.expand(1);
+ CPPUNIT_ASSERT_MESSAGE("degenerate range - still, not empty!", !aRange.isEmpty());
+ CPPUNIT_ASSERT_MESSAGE("degenerate range - size of 0", aRange.getRange() == 0);
+ CPPUNIT_ASSERT_MESSAGE("same value as degenerate range - is inside range",
+ aRange.isInside(1));
+ CPPUNIT_ASSERT_MESSAGE("center - must be the single range value", aRange.getCenter() == 1);
+
+ // proper interval
+ aRange.expand(2);
+ CPPUNIT_ASSERT_MESSAGE("proper range - size of 1", aRange.getRange() == 1);
+ CPPUNIT_ASSERT_MESSAGE("smaller value of range - is inside *closed* range",
+ aRange.isInside(1));
+ CPPUNIT_ASSERT_MESSAGE("larger value of range - is inside *closed* range",
+ aRange.isInside(2));
+
+ // center for proper interval that works for ints, too
+ aRange.expand(3);
+ CPPUNIT_ASSERT_MESSAGE("center - must be half of the range", aRange.getCenter() == 2);
+
+ // check overlap
+ Type aRange2(0, 1);
+ CPPUNIT_ASSERT_MESSAGE("range overlapping *includes* upper bound",
+ aRange.overlaps(aRange2));
+ CPPUNIT_ASSERT_MESSAGE("range overlapping *includes* upper bound, but only barely",
+ !aRange.overlapsMore(aRange2));
+
+ Type aRange3(0, 2);
+ CPPUNIT_ASSERT_MESSAGE("range overlapping is fully overlapping now",
+ aRange.overlapsMore(aRange3));
+
+ // check intersect
+ Type aRange4(3, 4);
+ aRange.intersect(aRange4);
+ CPPUNIT_ASSERT_MESSAGE("range intersection is yielding empty range!", !aRange.isEmpty());
+
+ Type aRange5(5, 6);
+ aRange.intersect(aRange5);
+ CPPUNIT_ASSERT_MESSAGE("range intersection is yielding nonempty range!", aRange.isEmpty());
+ }
+
+ void check() { implCheck<B1DRange>(); }
+
+ // 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(b1Xrange);
+ CPPUNIT_TEST(check);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b1Xrange
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b1Xrange);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2DHomMatrixTest.cxx b/basegfx/test/B2DHomMatrixTest.cxx
new file mode 100644
index 000000000000..0687a16f721f
--- /dev/null
+++ b/basegfx/test/B2DHomMatrixTest.cxx
@@ -0,0 +1,468 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <basegfx/numeric/ftools.hxx>
+#include <basegfx/tuple/b2dtuple.hxx>
+
+namespace basegfx
+{
+class b2dhommatrix : public CppUnit::TestFixture
+{
+private:
+ B2DHomMatrix maIdentity;
+ B2DHomMatrix maScale;
+ B2DHomMatrix maTranslate;
+ B2DHomMatrix maShear;
+ B2DHomMatrix maAffine;
+ B2DHomMatrix maPerspective;
+
+public:
+ // initialise your test code values here.
+ void setUp() override
+ {
+ // setup some test matrices
+ maIdentity.identity(); // force compact layout
+ maIdentity.set(0, 0, 1.0);
+ maIdentity.set(0, 1, 0.0);
+ maIdentity.set(0, 2, 0.0);
+ maIdentity.set(1, 0, 0.0);
+ maIdentity.set(1, 1, 1.0);
+ maIdentity.set(1, 2, 0.0);
+
+ maScale.identity(); // force compact layout
+ maScale.set(0, 0, 2.0);
+ maScale.set(1, 1, 20.0);
+
+ maTranslate.identity(); // force compact layout
+ maTranslate.set(0, 2, 20.0);
+ maTranslate.set(1, 2, 2.0);
+
+ maShear.identity(); // force compact layout
+ maShear.set(0, 1, 3.0);
+ maShear.set(1, 0, 7.0);
+ maShear.set(1, 1, 22.0);
+
+ maAffine.identity(); // force compact layout
+ maAffine.set(0, 0, 1.0);
+ maAffine.set(0, 1, 2.0);
+ maAffine.set(0, 2, 3.0);
+ maAffine.set(1, 0, 4.0);
+ maAffine.set(1, 1, 5.0);
+ maAffine.set(1, 2, 6.0);
+
+ maPerspective.set(0, 0, 1.0);
+ maPerspective.set(0, 1, 2.0);
+ maPerspective.set(0, 2, 3.0);
+ maPerspective.set(1, 0, 4.0);
+ maPerspective.set(1, 1, 5.0);
+ maPerspective.set(1, 2, 6.0);
+ maPerspective.set(2, 0, 7.0);
+ maPerspective.set(2, 1, 8.0);
+ maPerspective.set(2, 2, 9.0);
+ }
+
+ void equal()
+ {
+ 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);
+
+ CPPUNIT_ASSERT_MESSAGE("operator==: identity matrix", aIdentity.operator==(maIdentity));
+ CPPUNIT_ASSERT_MESSAGE("operator==: scale matrix", aScale.operator==(maScale));
+ CPPUNIT_ASSERT_MESSAGE("operator==: translate matrix", aTranslate.operator==(maTranslate));
+ CPPUNIT_ASSERT_MESSAGE("operator==: shear matrix", aShear.operator==(maShear));
+ CPPUNIT_ASSERT_MESSAGE("operator==: affine matrix", aAffine.operator==(maAffine));
+ CPPUNIT_ASSERT_MESSAGE("operator==: perspective matrix",
+ aPerspective.operator==(maPerspective));
+ }
+
+ void identity()
+ {
+ B2DHomMatrix ident;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("identity", maIdentity, ident);
+ }
+
+ void scale()
+ {
+ B2DHomMatrix mat;
+ mat.scale(2.0, 20.0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("scale", maScale, mat);
+ }
+
+ void rotate()
+ {
+ B2DHomMatrix mat;
+ mat.rotate(F_PI2);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi/2 yields exact matrix", 0.0, mat.get(0, 0),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi/2 yields exact matrix", -1.0, mat.get(0, 1),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi/2 yields exact matrix", 0.0, mat.get(0, 2),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi/2 yields exact matrix", 1.0, mat.get(1, 0),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi/2 yields exact matrix", 0.0, mat.get(1, 1),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi/2 yields exact matrix", 0.0, mat.get(1, 2),
+ 1E-12);
+ mat.rotate(F_PI2);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi yields exact matrix", -1.0, mat.get(0, 0),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi yields exact matrix", 0.0, mat.get(0, 1),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi yields exact matrix", 0.0, mat.get(0, 2),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi yields exact matrix", 0.0, mat.get(1, 0),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi yields exact matrix", -1.0, mat.get(1, 1),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate pi yields exact matrix", 0.0, mat.get(1, 2),
+ 1E-12);
+ mat.rotate(F_PI2);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 3/2 pi yields exact matrix", 0.0,
+ mat.get(0, 0), 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 3/2 pi yields exact matrix", 1.0,
+ mat.get(0, 1), 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 3/2 pi yields exact matrix", 0.0,
+ mat.get(0, 2), 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 3/2 pi yields exact matrix", -1.0,
+ mat.get(1, 0), 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 3/2 pi yields exact matrix", 0.0,
+ mat.get(1, 1), 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 3/2 pi yields exact matrix", 0.0,
+ mat.get(1, 2), 1E-12);
+ mat.rotate(F_PI2);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 2 pi yields exact matrix", 1.0, mat.get(0, 0),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 2 pi yields exact matrix", 0.0, mat.get(0, 1),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 2 pi yields exact matrix", 0.0, mat.get(0, 2),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 2 pi yields exact matrix", 0.0, mat.get(1, 0),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 2 pi yields exact matrix", 1.0, mat.get(1, 1),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("rotate 2 pi yields exact matrix", 0.0, mat.get(1, 2),
+ 1E-12);
+ }
+
+ void translate()
+ {
+ B2DHomMatrix mat;
+ mat.translate(20.0, 2.0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("translate", maTranslate, mat);
+ }
+
+ void shear()
+ {
+ B2DHomMatrix mat;
+ mat.shearX(3.0);
+ mat.shearY(7.0);
+ CPPUNIT_ASSERT_EQUAL_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_EQUAL_MESSAGE("multiply: both compact", affineAffineProd, temp);
+
+ temp = maPerspective;
+ temp *= maAffine;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("multiply: first compact", affinePerspectiveProd, temp);
+
+ temp = maAffine;
+ temp *= maPerspective;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("multiply: second compact", perspectiveAffineProd, temp);
+
+ temp = maPerspective;
+ temp *= maPerspective;
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("multiply: none compact", perspectivePerspectiveProd, temp);
+ }
+
+ void impFillMatrix(B2DHomMatrix& rSource, double fScaleX, double fScaleY, double fShearX,
+ double fRotate) const
+ {
+ // 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) const
+ {
+ // 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(F_PI4);
+ static double fS(deg2rad(15.0));
+
+ // 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));
+
+ // cover special case of 180 degree rotation
+ B2DHomMatrix aTest
+ = utils::createScaleShearXRotateTranslateB2DHomMatrix(6425, 3938, 0, F_PI, 10482, 4921);
+ // decompose that matrix
+ B2DTuple aDScale;
+ B2DTuple aDTrans;
+ double fDRot;
+ double fDShX;
+ aTest.decompose(aDScale, aDTrans, fDRot, fDShX);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("decompose: error test J1", 6425.0, aDScale.getX(),
+ 1E-12);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("decompose: error test J1", 3938.0, aDScale.getY(),
+ 1E-12);
+ CPPUNIT_ASSERT_MESSAGE("decompose: error test J1",
+ aDTrans.getX() == 10482 && aDTrans.getY() == 4921);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("decompose: error test J1", F_PI, fDRot, 1E-12);
+ }
+
+ // 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(rotate);
+ CPPUNIT_TEST(shear);
+ CPPUNIT_TEST(multiply);
+ CPPUNIT_TEST(decompose);
+ CPPUNIT_TEST_SUITE_END();
+
+}; // class b2dhommatrix
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dhommatrix);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2DPointTest.cxx b/basegfx/test/B2DPointTest.cxx
new file mode 100644
index 000000000000..b50bdd815d65
--- /dev/null
+++ b/basegfx/test/B2DPointTest.cxx
@@ -0,0 +1,50 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace basegfx
+{
+class b2dpoint : public CppUnit::TestFixture
+{
+public:
+ // 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(b2dpoint);
+ CPPUNIT_TEST(EmptyMethod);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dpoint
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpoint);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2DPolyPolygonTest.cxx b/basegfx/test/B2DPolyPolygonTest.cxx
new file mode 100644
index 000000000000..fd40e510688f
--- /dev/null
+++ b/basegfx/test/B2DPolyPolygonTest.cxx
@@ -0,0 +1,82 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dtrapezoid.hxx>
+
+#include "boxclipper.hxx"
+
+namespace basegfx
+{
+using ::basegfx2d::getRandomOrdinal;
+
+class b2dpolypolygon : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ void testTrapezoidHelper()
+ {
+ B2DPolygon aPolygon;
+ // provoke the PointBlockAllocator to exercise the freeIfLast path
+ for (int i = 0; i < 16 * 10; i++)
+ {
+ B2DPoint aPoint(getRandomOrdinal(1000), getRandomOrdinal(1000));
+ aPolygon.append(aPoint);
+ }
+ // scatter some duplicate points in to stress things more.
+ for (int i = 0; i < 16 * 10; i++)
+ {
+ aPolygon.insert(getRandomOrdinal(aPolygon.count() - 1),
+ aPolygon.getB2DPoint(getRandomOrdinal(aPolygon.count() - 1)));
+ }
+ B2DPolygon aPolygonOffset;
+ // duplicate the polygon and offset it slightly.
+ for (size_t i = 0; i < aPolygon.count(); i++)
+ {
+ B2DPoint aPoint(aPolygon.getB2DPoint(i));
+ aPoint += B2DPoint(0.5 - getRandomOrdinal(1), 0.5 - getRandomOrdinal(1));
+ aPolygonOffset.append(aPoint);
+ }
+ B2DPolyPolygon aPolyPolygon;
+ aPolyPolygon.append(aPolygon);
+ aPolyPolygon.append(aPolygonOffset);
+ B2DTrapezoidVector aVector;
+ basegfx::utils::trapezoidSubdivide(aVector, aPolyPolygon);
+ CPPUNIT_ASSERT_MESSAGE("more than zero sub-divided trapezoids", !aVector.empty());
+ }
+
+ // 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(testTrapezoidHelper);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dpolypolygon
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpolypolygon);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2DPolyRangeTest.cxx b/basegfx/test/B2DPolyRangeTest.cxx
new file mode 100644
index 000000000000..42e40d2b5c1c
--- /dev/null
+++ b/basegfx/test/B2DPolyRangeTest.cxx
@@ -0,0 +1,66 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2dpolyrange.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+
+namespace basegfx
+{
+class b2dpolyrange : public CppUnit::TestFixture
+{
+private:
+public:
+ void check()
+ {
+ B2DPolyRange aRange;
+ aRange.appendElement(B2DRange(0, 0, 1, 1), B2VectorOrientation::Positive);
+ aRange.appendElement(B2DRange(2, 2, 3, 3), B2VectorOrientation::Positive);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("simple poly range - count", sal_uInt32(2), aRange.count());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("simple poly range - first element", B2DRange(0, 0, 1, 1),
+ std::get<0>(aRange.getElement(0)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("simple poly range - second element", B2DRange(2, 2, 3, 3),
+ std::get<0>(aRange.getElement(1)));
+
+ // B2DPolyRange relies on correctly orientated rects
+ const B2DRange aRect(0, 0, 1, 1);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("createPolygonFromRect - correct orientation",
+ B2VectorOrientation::Positive,
+ utils::getOrientation(utils::createPolygonFromRect(aRect)));
+ }
+
+ // 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();
+};
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpolyrange);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2DPolygonTest.cxx b/basegfx/test/B2DPolygonTest.cxx
new file mode 100644
index 000000000000..297f25d6f03c
--- /dev/null
+++ b/basegfx/test/B2DPolygonTest.cxx
@@ -0,0 +1,94 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+
+namespace basegfx
+{
+class b2dpolygon : public CppUnit::TestFixture
+{
+public:
+ void testBasics()
+ {
+ B2DPolygon aPoly;
+
+ aPoly.appendBezierSegment(B2DPoint(1, 1), B2DPoint(2, 2), B2DPoint(3, 3));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#1 first polygon point wrong", B2DPoint(3, 3),
+ aPoly.getB2DPoint(0));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#1 first control point wrong", B2DPoint(2, 2),
+ aPoly.getPrevControlPoint(0));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#1 second control point wrong", B2DPoint(3, 3),
+ aPoly.getNextControlPoint(0));
+ CPPUNIT_ASSERT_MESSAGE("next control point not used", !aPoly.isNextControlPointUsed(0));
+
+ aPoly.setNextControlPoint(0, B2DPoint(4, 4));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#1.1 second control point wrong", B2DPoint(4, 4),
+ aPoly.getNextControlPoint(0));
+ CPPUNIT_ASSERT_MESSAGE("next control point used", aPoly.isNextControlPointUsed(0));
+ CPPUNIT_ASSERT_MESSAGE("areControlPointsUsed() wrong", aPoly.areControlPointsUsed());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("getContinuityInPoint() wrong", B2VectorContinuity::C2,
+ aPoly.getContinuityInPoint(0));
+
+ aPoly.resetControlPoints();
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("resetControlPoints() did not clear", B2DPoint(3, 3),
+ aPoly.getB2DPoint(0));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("resetControlPoints() did not clear", B2DPoint(3, 3),
+ aPoly.getPrevControlPoint(0));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("resetControlPoints() did not clear", B2DPoint(3, 3),
+ aPoly.getNextControlPoint(0));
+ CPPUNIT_ASSERT_MESSAGE("areControlPointsUsed() wrong #2", !aPoly.areControlPointsUsed());
+
+ aPoly.clear();
+ aPoly.append(B2DPoint(0, 0));
+ aPoly.appendBezierSegment(B2DPoint(1, 1), B2DPoint(2, 2), B2DPoint(3, 3));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 first polygon point wrong", B2DPoint(0, 0),
+ aPoly.getB2DPoint(0));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 first control point wrong", B2DPoint(0, 0),
+ aPoly.getPrevControlPoint(0));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 second control point wrong", B2DPoint(1, 1),
+ aPoly.getNextControlPoint(0));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 third control point wrong", B2DPoint(2, 2),
+ aPoly.getPrevControlPoint(1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 fourth control point wrong", B2DPoint(3, 3),
+ aPoly.getNextControlPoint(1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 second polygon point wrong", B2DPoint(3, 3),
+ aPoly.getB2DPoint(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(b2dpolygon);
+ CPPUNIT_TEST(testBasics);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2dpolygon
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpolygon);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2DPolygonToolsTest.cxx b/basegfx/test/B2DPolygonToolsTest.cxx
new file mode 100644
index 000000000000..c81e02a0e30c
--- /dev/null
+++ b/basegfx/test/B2DPolygonToolsTest.cxx
@@ -0,0 +1,85 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/polygon/b2dpolygontools.hxx>
+
+namespace basegfx
+{
+class b2dpolygontools : public CppUnit::TestFixture
+{
+public:
+ // insert your test code here.
+ // this is only demonstration code
+ void testIsRectangle()
+ {
+ B2DPolygon aRect1(utils::createPolygonFromRect(B2DRange(0, 0, 1, 1)));
+
+ B2DPolygon aRect2{ { 0, 0 }, { 1, 0 }, { 1, 0.5 }, { 1, 1 }, { 0, 1 } };
+ aRect2.setClosed(true);
+
+ B2DPolygon aNonRect1{ { 0, 0 }, { 1, 0 }, { 0.5, 1 }, { 0.5, 0 } };
+ aNonRect1.setClosed(true);
+
+ B2DPolygon aNonRect2{ { 0, 0 }, { 1, 1 }, { 1, 0 }, { 0, 1 } };
+ aNonRect2.setClosed(true);
+
+ B2DPolygon aNonRect3{ { 0, 0 }, { 1, 0 }, { 1, 1 } };
+ aNonRect3.setClosed(true);
+
+ B2DPolygon aNonRect4{ { 0, 0 }, { 1, 0 }, { 1, 1 }, { 0, 1 } };
+
+ B2DPolygon aNonRect5{ { 0, 0 }, { 1, 0 }, { 1, 1 }, { 0, 1 } };
+ aNonRect5.setControlPoints(1, B2DPoint(1, 0), B2DPoint(-11, 0));
+ aNonRect5.setClosed(true);
+
+ CPPUNIT_ASSERT_MESSAGE("checking rectangle-ness of rectangle 1",
+ utils::isRectangle(aRect1));
+ CPPUNIT_ASSERT_MESSAGE("checking rectangle-ness of rectangle 2",
+ utils::isRectangle(aRect2));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 1",
+ !utils::isRectangle(aNonRect1));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 2",
+ !utils::isRectangle(aNonRect2));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 3",
+ !utils::isRectangle(aNonRect3));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 4",
+ !utils::isRectangle(aNonRect4));
+ CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 5",
+ !utils::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
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpolygontools);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2DRangeTest.cxx b/basegfx/test/B2DRangeTest.cxx
new file mode 100644
index 000000000000..566c3a66e1e5
--- /dev/null
+++ b/basegfx/test/B2DRangeTest.cxx
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b1drange.hxx>
+#include <basegfx/range/b2irange.hxx>
+
+namespace basegfx
+{
+class b2drange : public CppUnit::TestFixture
+{
+private:
+public:
+ void check()
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("simple range rounding from double to integer",
+ B2IRange(1, 2, 4, 5), fround(B2DRange(1.2, 2.3, 3.5, 4.8)));
+ }
+
+ // 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(check);
+ CPPUNIT_TEST_SUITE_END();
+};
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2drange);
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2DTupleTest.cxx b/basegfx/test/B2DTupleTest.cxx
new file mode 100644
index 000000000000..a01c075d6d52
--- /dev/null
+++ b/basegfx/test/B2DTupleTest.cxx
@@ -0,0 +1,50 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+namespace basegfx
+{
+class b2dtuple : public CppUnit::TestFixture
+{
+public:
+ // 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();
+};
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dtuple);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2IBoxTest.cxx b/basegfx/test/B2IBoxTest.cxx
new file mode 100644
index 000000000000..137c1b4ce123
--- /dev/null
+++ b/basegfx/test/B2IBoxTest.cxx
@@ -0,0 +1,63 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/range/b2ibox.hxx>
+#include <basegfx/point/b2ipoint.hxx>
+#include <basegfx/utils/rectcliptools.hxx>
+
+namespace basegfx
+{
+class b2ibox : public CppUnit::TestFixture
+{
+public:
+ void TestBox()
+ {
+ // cohen sutherland clipping
+ B2IBox aBox(0, 0, 10, 10);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("(0,0) is outside range!", sal_uInt32(0),
+ utils::getCohenSutherlandClipFlags(B2IPoint(0, 0), aBox));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("(-1,-1) is inside range!",
+ utils::RectClipFlags::LEFT | utils::RectClipFlags::TOP,
+ utils::getCohenSutherlandClipFlags(B2IPoint(-1, -1), aBox));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("(9,9) is outside range!", sal_uInt32(0),
+ utils::getCohenSutherlandClipFlags(B2IPoint(9, 9), aBox));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("(10,10) is inside range!",
+ utils::RectClipFlags::RIGHT | utils::RectClipFlags::BOTTOM,
+ utils::getCohenSutherlandClipFlags(B2IPoint(10, 10), aBox));
+ }
+
+ // 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(b2ibox);
+ CPPUNIT_TEST(TestBox);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2ibox
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2ibox);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/B2XRangeTest.cxx b/basegfx/test/B2XRangeTest.cxx
new file mode 100644
index 000000000000..009016ffea45
--- /dev/null
+++ b/basegfx/test/B2XRangeTest.cxx
@@ -0,0 +1,70 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/range/b2drange.hxx>
+#include <basegfx/range/b2irange.hxx>
+#include <basegfx/utils/rectcliptools.hxx>
+
+namespace basegfx
+{
+class b2Xrange : public CppUnit::TestFixture
+{
+public:
+ template <class Type> void implCheck()
+ {
+ // cohen sutherland clipping
+ Type aRange(0, 0, 10, 10);
+
+ CPPUNIT_ASSERT_MESSAGE("(0,0) is outside range!",
+ utils::getCohenSutherlandClipFlags(B2IPoint(0, 0), aRange) == 0);
+ CPPUNIT_ASSERT_MESSAGE("(-1,-1) is inside range!",
+ utils::getCohenSutherlandClipFlags(B2IPoint(-1, -1), aRange)
+ == (utils::RectClipFlags::LEFT | utils::RectClipFlags::TOP));
+ CPPUNIT_ASSERT_MESSAGE("(10,10) is outside range!",
+ utils::getCohenSutherlandClipFlags(B2IPoint(10, 10), aRange) == 0);
+ CPPUNIT_ASSERT_MESSAGE("(11,11) is inside range!",
+ utils::getCohenSutherlandClipFlags(B2IPoint(11, 11), aRange)
+ == (utils::RectClipFlags::RIGHT | utils::RectClipFlags::BOTTOM));
+ }
+
+ void check()
+ {
+ implCheck<B2DRange>();
+ implCheck<B2IRange>();
+ }
+
+ // 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(b2Xrange);
+ CPPUNIT_TEST(check);
+ CPPUNIT_TEST_SUITE_END();
+}; // class b2Xrange
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2Xrange);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/BColorTest.cxx b/basegfx/test/BColorTest.cxx
new file mode 100644
index 000000000000..cc29fdfb6624
--- /dev/null
+++ b/basegfx/test/BColorTest.cxx
@@ -0,0 +1,151 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <basegfx/color/bcolor.hxx>
+#include <basegfx/color/bcolortools.hxx>
+
+namespace basegfx
+{
+class bcolor : public CppUnit::TestFixture
+{
+ BColor maWhite;
+ BColor maBlack;
+ BColor maRed;
+ BColor maGreen;
+ BColor maBlue;
+ BColor maYellow;
+ BColor maMagenta;
+ BColor maCyan;
+
+public:
+ bcolor()
+ : maWhite(1, 1, 1)
+ , maBlack(0, 0, 0)
+ , maRed(1, 0, 0)
+ , maGreen(0, 1, 0)
+ , maBlue(0, 0, 1)
+ , maYellow(1, 1, 0)
+ , maMagenta(1, 0, 1)
+ , maCyan(0, 1, 1)
+ {
+ }
+
+ // insert your test code here.
+ void hslTest()
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("white", BColor(0, 0, 1), utils::rgb2hsl(maWhite));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("black", BColor(0, 0, 0), utils::rgb2hsl(maBlack));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("red", BColor(0, 1, 0.5), utils::rgb2hsl(maRed));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("green", BColor(120, 1, 0.5), utils::rgb2hsl(maGreen));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("blue", BColor(240, 1, 0.5), utils::rgb2hsl(maBlue));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("yellow", BColor(60, 1, 0.5), utils::rgb2hsl(maYellow));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("magenta", BColor(300, 1, 0.5), utils::rgb2hsl(maMagenta));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("cyan", BColor(180, 1, 0.5), utils::rgb2hsl(maCyan));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("third hue case", BColor(210, 1, 0.5),
+ utils::rgb2hsl(BColor(0, 0.5, 1)));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip white", maWhite,
+ utils::hsl2rgb(utils::rgb2hsl(maWhite)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip black", maBlack,
+ utils::hsl2rgb(utils::rgb2hsl(maBlack)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip red", maRed, utils::hsl2rgb(utils::rgb2hsl(maRed)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip green", maGreen,
+ utils::hsl2rgb(utils::rgb2hsl(maGreen)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip blue", maBlue,
+ utils::hsl2rgb(utils::rgb2hsl(maBlue)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip yellow", maYellow,
+ utils::hsl2rgb(utils::rgb2hsl(maYellow)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip magenta", maMagenta,
+ utils::hsl2rgb(utils::rgb2hsl(maMagenta)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip cyan", maCyan,
+ utils::hsl2rgb(utils::rgb2hsl(maCyan)));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("grey10", BColor(0, 0, .1), utils::rgb2hsl(maWhite * .1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("grey90", BColor(0, 0, .9), utils::rgb2hsl(maWhite * .9));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("red/2", BColor(0, 1, 0.25), utils::rgb2hsl(maRed * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("green/2", BColor(120, 1, 0.25), utils::rgb2hsl(maGreen * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("blue/2", BColor(240, 1, 0.25), utils::rgb2hsl(maBlue * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("yellow/2", BColor(60, 1, 0.25),
+ utils::rgb2hsl(maYellow * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("magenta/2", BColor(300, 1, 0.25),
+ utils::rgb2hsl(maMagenta * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("cyan/2", BColor(180, 1, 0.25), utils::rgb2hsl(maCyan * .5));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("pastel", BColor(0, .5, .5),
+ utils::rgb2hsl(BColor(.75, .25, .25)));
+ }
+
+ // insert your test code here.
+ void hsvTest()
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("white", BColor(0, 0, 1), utils::rgb2hsv(maWhite));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("black", BColor(0, 0, 0), utils::rgb2hsv(maBlack));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("red", BColor(0, 1, 1), utils::rgb2hsv(maRed));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("green", BColor(120, 1, 1), utils::rgb2hsv(maGreen));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("blue", BColor(240, 1, 1), utils::rgb2hsv(maBlue));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("yellow", BColor(60, 1, 1), utils::rgb2hsv(maYellow));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("magenta", BColor(300, 1, 1), utils::rgb2hsv(maMagenta));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("cyan", BColor(180, 1, 1), utils::rgb2hsv(maCyan));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip white", maWhite,
+ utils::hsv2rgb(utils::rgb2hsv(maWhite)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip black", maBlack,
+ utils::hsv2rgb(utils::rgb2hsv(maBlack)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip red", maRed, utils::hsv2rgb(utils::rgb2hsv(maRed)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip green", maGreen,
+ utils::hsv2rgb(utils::rgb2hsv(maGreen)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip blue", maBlue,
+ utils::hsv2rgb(utils::rgb2hsv(maBlue)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip yellow", maYellow,
+ utils::hsv2rgb(utils::rgb2hsv(maYellow)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip magenta", maMagenta,
+ utils::hsv2rgb(utils::rgb2hsv(maMagenta)));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip cyan", maCyan,
+ utils::hsv2rgb(utils::rgb2hsv(maCyan)));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("grey10", BColor(0, 0, .1), utils::rgb2hsv(maWhite * .1));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("grey90", BColor(0, 0, .9), utils::rgb2hsv(maWhite * .9));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("red/2", BColor(0, 1, 0.5), utils::rgb2hsv(maRed * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("green/2", BColor(120, 1, 0.5), utils::rgb2hsv(maGreen * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("blue/2", BColor(240, 1, 0.5), utils::rgb2hsv(maBlue * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("yellow/2", BColor(60, 1, 0.5), utils::rgb2hsv(maYellow * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("magenta/2", BColor(300, 1, 0.5),
+ utils::rgb2hsv(maMagenta * .5));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("cyan/2", BColor(180, 1, 0.5), utils::rgb2hsv(maCyan * .5));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("pastel", BColor(0, .5, .5),
+ utils::rgb2hsv(BColor(.5, .25, .25)));
+ }
+
+ CPPUNIT_TEST_SUITE(bcolor);
+ CPPUNIT_TEST(hslTest);
+ CPPUNIT_TEST(hsvTest);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+} // namespace basegfx
+
+CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::bcolor);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basegfx/test/basegfx2d.cxx b/basegfx/test/basegfx2d.cxx
deleted file mode 100644
index 9af87302847a..000000000000
--- a/basegfx/test/basegfx2d.cxx
+++ /dev/null
@@ -1,1024 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <cppunit/TestAssert.h>
-#include <cppunit/TestFixture.h>
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/plugin/TestPlugIn.h>
-
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <basegfx/matrix/b2dhommatrixtools.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/curve/b2dcubicbezier.hxx>
-#include <basegfx/curve/b2dbeziertools.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-#include <basegfx/polygon/b2dpolygonclipper.hxx>
-#include <basegfx/polygon/b2dpolypolygon.hxx>
-#include <basegfx/polygon/b2dtrapezoid.hxx>
-#include <basegfx/range/b2irange.hxx>
-#include <basegfx/range/b2ibox.hxx>
-#include <basegfx/range/b1drange.hxx>
-#include <basegfx/range/b2drange.hxx>
-#include <basegfx/range/b2dpolyrange.hxx>
-#include <basegfx/numeric/ftools.hxx>
-#include <basegfx/color/bcolor.hxx>
-#include <basegfx/color/bcolortools.hxx>
-
-#include <basegfx/utils/rectcliptools.hxx>
-
-#include <iostream>
-#include <fstream>
-
-#include "boxclipper.hxx"
-
-using namespace ::basegfx;
-using basegfx2d::getRandomOrdinal;
-
-namespace basegfx
-{
-
-class b2drange : public CppUnit::TestFixture
-{
-private:
-public:
- void check()
- {
- CPPUNIT_ASSERT_EQUAL_MESSAGE("simple range rounding from double to integer",
- B2IRange(1, 2, 4, 5), fround(B2DRange(1.2, 2.3, 3.5, 4.8)));
- }
-
- // 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(check);
- CPPUNIT_TEST_SUITE_END();
-};
-
-class b2dpolyrange : public CppUnit::TestFixture
-{
-private:
-public:
- void check()
- {
- B2DPolyRange aRange;
- aRange.appendElement(B2DRange(0,0,1,1),B2VectorOrientation::Positive);
- aRange.appendElement(B2DRange(2,2,3,3),B2VectorOrientation::Positive);
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("simple poly range - count",
- sal_uInt32(2), aRange.count());
- CPPUNIT_ASSERT_EQUAL_MESSAGE("simple poly range - first element",
- B2DRange(0,0,1,1), std::get<0>(aRange.getElement(0)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("simple poly range - second element",
- B2DRange(2,2,3,3), std::get<0>(aRange.getElement(1)));
-
- // B2DPolyRange relies on correctly orientated rects
- const B2DRange aRect(0,0,1,1);
- CPPUNIT_ASSERT_EQUAL_MESSAGE("createPolygonFromRect - correct orientation",
- B2VectorOrientation::Positive, utils::getOrientation(utils::createPolygonFromRect(aRect)));
- }
-
- // 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();
-};
-
-class b2dhommatrix : public CppUnit::TestFixture
-{
-private:
- B2DHomMatrix maIdentity;
- B2DHomMatrix maScale;
- B2DHomMatrix maTranslate;
- B2DHomMatrix maShear;
- B2DHomMatrix maAffine;
- B2DHomMatrix maPerspective;
-
-public:
- // initialise your test code values here.
- void setUp() override
- {
- // setup some test matrices
- maIdentity.identity(); // force compact layout
- maIdentity.set(0,0, 1.0);
- maIdentity.set(0,1, 0.0);
- maIdentity.set(0,2, 0.0);
- maIdentity.set(1,0, 0.0);
- maIdentity.set(1,1, 1.0);
- maIdentity.set(1,2, 0.0);
-
- maScale.identity(); // force compact layout
- maScale.set(0,0, 2.0);
- maScale.set(1,1, 20.0);
-
- maTranslate.identity(); // force compact layout
- maTranslate.set(0,2, 20.0);
- maTranslate.set(1,2, 2.0);
-
- maShear.identity(); // force compact layout
- maShear.set(0,1, 3.0);
- maShear.set(1,0, 7.0);
- maShear.set(1,1, 22.0);
-
- maAffine.identity(); // force compact layout
- maAffine.set(0,0, 1.0);
- maAffine.set(0,1, 2.0);
- maAffine.set(0,2, 3.0);
- maAffine.set(1,0, 4.0);
- maAffine.set(1,1, 5.0);
- maAffine.set(1,2, 6.0);
-
- maPerspective.set(0,0, 1.0);
- maPerspective.set(0,1, 2.0);
- maPerspective.set(0,2, 3.0);
- maPerspective.set(1,0, 4.0);
- maPerspective.set(1,1, 5.0);
- maPerspective.set(1,2, 6.0);
- maPerspective.set(2,0, 7.0);
- maPerspective.set(2,1, 8.0);
- maPerspective.set(2,2, 9.0);
- }
-
- void equal()
- {
- 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);
-
- CPPUNIT_ASSERT_MESSAGE("operator==: identity matrix", aIdentity.operator ==(maIdentity));
- CPPUNIT_ASSERT_MESSAGE("operator==: scale matrix", aScale.operator ==(maScale));
- CPPUNIT_ASSERT_MESSAGE("operator==: translate matrix", aTranslate.operator ==(maTranslate));
- CPPUNIT_ASSERT_MESSAGE("operator==: shear matrix", aShear.operator ==(maShear));
- CPPUNIT_ASSERT_MESSAGE("operator==: affine matrix", aAffine.operator ==(maAffine));
- CPPUNIT_ASSERT_MESSAGE("operator==: perspective matrix", aPerspective.operator ==(maPerspective));
- }
-
- void identity()
- {
- B2DHomMatrix ident;
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("identity", maIdentity, ident);
- }
-
- void scale()
- {
- B2DHomMatrix mat;
- mat.scale(2.0,20.0);
- CPPUNIT_ASSERT_EQUAL_MESSAGE("scale", maScale, mat);
- }
-
- void rotate()
- {
- B2DHomMatrix mat;
- mat.rotate(F_PI2);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi/2 yields exact matrix", 0.0, mat.get(0,0), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi/2 yields exact matrix", -1.0, mat.get(0,1), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi/2 yields exact matrix", 0.0, mat.get(0,2), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi/2 yields exact matrix", 1.0, mat.get(1,0), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi/2 yields exact matrix", 0.0, mat.get(1,1), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi/2 yields exact matrix", 0.0, mat.get(1,2), 1E-12);
- mat.rotate(F_PI2);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi yields exact matrix", -1.0, mat.get(0,0), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi yields exact matrix", 0.0, mat.get(0,1), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi yields exact matrix", 0.0, mat.get(0,2), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi yields exact matrix", 0.0, mat.get(1,0), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi yields exact matrix", -1.0, mat.get(1,1), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate pi yields exact matrix", 0.0, mat.get(1,2), 1E-12);
- mat.rotate(F_PI2);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 3/2 pi yields exact matrix", 0.0, mat.get(0,0), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 3/2 pi yields exact matrix", 1.0, mat.get(0,1), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 3/2 pi yields exact matrix", 0.0, mat.get(0,2), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 3/2 pi yields exact matrix", -1.0, mat.get(1,0), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 3/2 pi yields exact matrix", 0.0, mat.get(1,1), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 3/2 pi yields exact matrix", 0.0, mat.get(1,2), 1E-12);
- mat.rotate(F_PI2);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 2 pi yields exact matrix", 1.0, mat.get(0,0), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 2 pi yields exact matrix", 0.0, mat.get(0,1), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 2 pi yields exact matrix", 0.0, mat.get(0,2), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 2 pi yields exact matrix", 0.0, mat.get(1,0), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 2 pi yields exact matrix", 1.0, mat.get(1,1), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(
- "rotate 2 pi yields exact matrix", 0.0, mat.get(1,2), 1E-12);
- }
-
- void translate()
- {
- B2DHomMatrix mat;
- mat.translate(20.0,2.0);
- CPPUNIT_ASSERT_EQUAL_MESSAGE("translate", maTranslate, mat);
- }
-
- void shear()
- {
- B2DHomMatrix mat;
- mat.shearX(3.0);
- mat.shearY(7.0);
- CPPUNIT_ASSERT_EQUAL_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_EQUAL_MESSAGE("multiply: both compact", affineAffineProd, temp);
-
- temp = maPerspective;
- temp*=maAffine;
- CPPUNIT_ASSERT_EQUAL_MESSAGE("multiply: first compact", affinePerspectiveProd, temp);
-
- temp = maAffine;
- temp*=maPerspective;
- CPPUNIT_ASSERT_EQUAL_MESSAGE("multiply: second compact", perspectiveAffineProd, temp);
-
- temp = maPerspective;
- temp*=maPerspective;
- CPPUNIT_ASSERT_EQUAL_MESSAGE("multiply: none compact", perspectivePerspectiveProd, temp);
- }
-
- void impFillMatrix(B2DHomMatrix& rSource, double fScaleX, double fScaleY, double fShearX, double fRotate) const
- {
- // 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) const
- {
- // 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(F_PI4);
- static double fS(deg2rad(15.0));
-
- // 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));
-
- // cover special case of 180 degree rotation
- B2DHomMatrix aTest=utils::createScaleShearXRotateTranslateB2DHomMatrix(
- 6425,3938,
- 0,
- F_PI,
- 10482,4921);
- // decompose that matrix
- B2DTuple aDScale;
- B2DTuple aDTrans;
- double fDRot;
- double fDShX;
- aTest.decompose(aDScale, aDTrans, fDRot, fDShX);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("decompose: error test J1", 6425.0, aDScale.getX(), 1E-12);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("decompose: error test J1", 3938.0, aDScale.getY(), 1E-12);
- CPPUNIT_ASSERT_MESSAGE("decompose: error test J1", aDTrans.getX() == 10482 && aDTrans.getY() == 4921);
- CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("decompose: error test J1", F_PI, fDRot, 1E-12 );
- }
-
- // 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(rotate);
- CPPUNIT_TEST(shear);
- CPPUNIT_TEST(multiply);
- CPPUNIT_TEST(decompose);
- CPPUNIT_TEST_SUITE_END();
-
-}; // class b2dhommatrix
-
-class b2dpoint : public CppUnit::TestFixture
-{
-public:
- // 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(b2dpoint);
- CPPUNIT_TEST(EmptyMethod);
- CPPUNIT_TEST_SUITE_END();
-}; // class b2dpoint
-
-class b2dpolygon : public CppUnit::TestFixture
-{
-public:
- // insert your test code here.
- void testBasics()
- {
- B2DPolygon aPoly;
-
- aPoly.appendBezierSegment(B2DPoint(1,1),B2DPoint(2,2),B2DPoint(3,3));
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#1 first polygon point wrong",
- B2DPoint(3,3), aPoly.getB2DPoint(0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#1 first control point wrong",
- B2DPoint(2,2), aPoly.getPrevControlPoint(0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#1 second control point wrong",
- B2DPoint(3,3), aPoly.getNextControlPoint(0));
- CPPUNIT_ASSERT_MESSAGE("next control point not used",
- !aPoly.isNextControlPointUsed(0));
-
- aPoly.setNextControlPoint(0,B2DPoint(4,4));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#1.1 second control point wrong",
- B2DPoint(4,4), aPoly.getNextControlPoint(0));
- CPPUNIT_ASSERT_MESSAGE("next control point used",
- aPoly.isNextControlPointUsed(0));
- CPPUNIT_ASSERT_MESSAGE("areControlPointsUsed() wrong",
- aPoly.areControlPointsUsed());
- CPPUNIT_ASSERT_EQUAL_MESSAGE("getContinuityInPoint() wrong",
- B2VectorContinuity::C2, aPoly.getContinuityInPoint(0));
-
- aPoly.resetControlPoints();
- CPPUNIT_ASSERT_EQUAL_MESSAGE("resetControlPoints() did not clear",
- B2DPoint(3,3), aPoly.getB2DPoint(0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("resetControlPoints() did not clear",
- B2DPoint(3,3), aPoly.getPrevControlPoint(0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("resetControlPoints() did not clear",
- B2DPoint(3,3), aPoly.getNextControlPoint(0));
- CPPUNIT_ASSERT_MESSAGE("areControlPointsUsed() wrong #2",
- !aPoly.areControlPointsUsed());
-
- aPoly.clear();
- aPoly.append(B2DPoint(0,0));
- aPoly.appendBezierSegment(B2DPoint(1,1),B2DPoint(2,2),B2DPoint(3,3));
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 first polygon point wrong",
- B2DPoint(0,0), aPoly.getB2DPoint(0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 first control point wrong",
- B2DPoint(0,0), aPoly.getPrevControlPoint(0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 second control point wrong",
- B2DPoint(1,1), aPoly.getNextControlPoint(0));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 third control point wrong",
- B2DPoint(2,2), aPoly.getPrevControlPoint(1));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 fourth control point wrong",
- B2DPoint(3,3), aPoly.getNextControlPoint(1));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("#2 second polygon point wrong",
- B2DPoint(3,3), aPoly.getB2DPoint(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(b2dpolygon);
- CPPUNIT_TEST(testBasics);
- CPPUNIT_TEST_SUITE_END();
-}; // class b2dpolygon
-
-class b2dpolygontools : public CppUnit::TestFixture
-{
-public:
- // insert your test code here.
- // this is only demonstration code
- void testIsRectangle()
- {
- B2DPolygon aRect1(
- utils::createPolygonFromRect(
- B2DRange(0,0,1,1) ) );
-
- B2DPolygon aRect2 {
- {0, 0},
- {1, 0},
- {1, 0.5},
- {1, 1},
- {0, 1}
- };
- aRect2.setClosed(true);
-
- B2DPolygon aNonRect1 {
- {0, 0},
- {1, 0},
- {0.5, 1},
- {0.5, 0}
- };
- aNonRect1.setClosed(true);
-
- B2DPolygon aNonRect2 {
- {0, 0},
- {1, 1},
- {1, 0},
- {0, 1}
- };
- aNonRect2.setClosed(true);
-
- B2DPolygon aNonRect3 {
- {0, 0},
- {1, 0},
- {1, 1}
- };
- aNonRect3.setClosed(true);
-
- B2DPolygon aNonRect4 {
- {0, 0},
- {1, 0},
- {1, 1},
- {0, 1}
- };
-
- B2DPolygon aNonRect5 {
- {0, 0},
- {1, 0},
- {1, 1},
- {0, 1}
- };
- aNonRect5.setControlPoints(1, B2DPoint(1,0), B2DPoint(-11,0));
- aNonRect5.setClosed(true);
-
- CPPUNIT_ASSERT_MESSAGE("checking rectangle-ness of rectangle 1",
- utils::isRectangle( aRect1 ));
- CPPUNIT_ASSERT_MESSAGE("checking rectangle-ness of rectangle 2",
- utils::isRectangle( aRect2 ));
- CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 1",
- !utils::isRectangle( aNonRect1 ));
- CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 2",
- !utils::isRectangle( aNonRect2 ));
- CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 3",
- !utils::isRectangle( aNonRect3 ));
- CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 4",
- !utils::isRectangle( aNonRect4 ));
- CPPUNIT_ASSERT_MESSAGE("checking non-rectangle-ness of polygon 5",
- !utils::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
-
-class b2dpolypolygon : public CppUnit::TestFixture
-{
-public:
- // insert your test code here.
- void testTrapezoidHelper()
- {
- B2DPolygon aPolygon;
- // provoke the PointBlockAllocator to exercise the freeIfLast path
- for(int i = 0; i < 16 * 10; i++)
- {
- B2DPoint aPoint(getRandomOrdinal(1000), getRandomOrdinal(1000));
- aPolygon.append(aPoint);
- }
- // scatter some duplicate points in to stress things more.
- for(int i = 0; i < 16 * 10; i++)
- {
- aPolygon.insert(getRandomOrdinal(aPolygon.count() - 1),
- aPolygon.getB2DPoint(getRandomOrdinal(aPolygon.count() - 1)));
- }
- B2DPolygon aPolygonOffset;
- // duplicate the polygon and offset it slightly.
- for(size_t i = 0; i < aPolygon.count(); i++)
- {
- B2DPoint aPoint(aPolygon.getB2DPoint(i));
- aPoint += B2DPoint(0.5-getRandomOrdinal(1),0.5-getRandomOrdinal(1));
- aPolygonOffset.append(aPoint);
- }
- B2DPolyPolygon aPolyPolygon;
- aPolyPolygon.append(aPolygon);
- aPolyPolygon.append(aPolygonOffset);
- B2DTrapezoidVector aVector;
- basegfx::utils::trapezoidSubdivide(aVector, aPolyPolygon);
- CPPUNIT_ASSERT_MESSAGE("more than zero sub-divided trapezoids",
- !aVector.empty());
- }
-
- // 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(testTrapezoidHelper);
- CPPUNIT_TEST_SUITE_END();
-}; // class b2dpolypolygon
-
-class b1Xrange : public CppUnit::TestFixture
-{
-public:
- template<class Type> void implCheck()
- {
- // test interval axioms
- // (http://en.wikipedia.org/wiki/Interval_%28mathematics%29)
- Type aRange;
- CPPUNIT_ASSERT_MESSAGE("default ctor - empty range", aRange.isEmpty());
- CPPUNIT_ASSERT_MESSAGE("center - get cop-out value since range is empty", aRange.getCenter()==0);
-
- // degenerate interval
- aRange.expand(1);
- CPPUNIT_ASSERT_MESSAGE("degenerate range - still, not empty!", !aRange.isEmpty());
- CPPUNIT_ASSERT_MESSAGE("degenerate range - size of 0", aRange.getRange() == 0);
- CPPUNIT_ASSERT_MESSAGE("same value as degenerate range - is inside range", aRange.isInside(1));
- CPPUNIT_ASSERT_MESSAGE("center - must be the single range value", aRange.getCenter()==1);
-
- // proper interval
- aRange.expand(2);
- CPPUNIT_ASSERT_MESSAGE("proper range - size of 1", aRange.getRange() == 1);
- CPPUNIT_ASSERT_MESSAGE("smaller value of range - is inside *closed* range", aRange.isInside(1));
- CPPUNIT_ASSERT_MESSAGE("larger value of range - is inside *closed* range", aRange.isInside(2));
-
- // center for proper interval that works for ints, too
- aRange.expand(3);
- CPPUNIT_ASSERT_MESSAGE("center - must be half of the range", aRange.getCenter()==2);
-
- // check overlap
- Type aRange2(0,1);
- CPPUNIT_ASSERT_MESSAGE("range overlapping *includes* upper bound", aRange.overlaps(aRange2));
- CPPUNIT_ASSERT_MESSAGE("range overlapping *includes* upper bound, but only barely", !aRange.overlapsMore(aRange2));
-
- Type aRange3(0,2);
- CPPUNIT_ASSERT_MESSAGE("range overlapping is fully overlapping now", aRange.overlapsMore(aRange3));
-
- // check intersect
- Type aRange4(3,4);
- aRange.intersect(aRange4);
- CPPUNIT_ASSERT_MESSAGE("range intersection is yielding empty range!", !aRange.isEmpty());
-
- Type aRange5(5,6);
- aRange.intersect(aRange5);
- CPPUNIT_ASSERT_MESSAGE("range intersection is yielding nonempty range!", aRange.isEmpty());
- }
-
- void check()
- {
- implCheck<B1DRange>();
- }
-
- // 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(b1Xrange);
- CPPUNIT_TEST(check);
- CPPUNIT_TEST_SUITE_END();
-}; // class b1Xrange
-
-class b2Xrange : public CppUnit::TestFixture
-{
-public:
- template<class Type> void implCheck()
- {
- // cohen sutherland clipping
- Type aRange(0,0,10,10);
-
- CPPUNIT_ASSERT_MESSAGE("(0,0) is outside range!",
- utils::getCohenSutherlandClipFlags(B2IPoint(0,0),aRange) == 0);
- CPPUNIT_ASSERT_MESSAGE("(-1,-1) is inside range!",
- utils::getCohenSutherlandClipFlags(B2IPoint(-1,-1),aRange) ==
- (utils::RectClipFlags::LEFT|utils::RectClipFlags::TOP));
- CPPUNIT_ASSERT_MESSAGE("(10,10) is outside range!",
- utils::getCohenSutherlandClipFlags(B2IPoint(10,10),aRange) == 0);
- CPPUNIT_ASSERT_MESSAGE("(11,11) is inside range!",
- utils::getCohenSutherlandClipFlags(B2IPoint(11,11),aRange) ==
- (utils::RectClipFlags::RIGHT|utils::RectClipFlags::BOTTOM));
- }
-
- void check()
- {
- implCheck<B2DRange>();
- implCheck<B2IRange>();
- }
-
- // 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(b2Xrange);
- CPPUNIT_TEST(check);
- CPPUNIT_TEST_SUITE_END();
-}; // class b2Xrange
-
-class b2ibox : public CppUnit::TestFixture
-{
-public:
- void TestBox()
- {
- // cohen sutherland clipping
- B2IBox aBox(0,0,10,10);
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("(0,0) is outside range!",
- sal_uInt32(0), utils::getCohenSutherlandClipFlags(B2IPoint(0,0),aBox));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("(-1,-1) is inside range!",
- utils::RectClipFlags::LEFT|utils::RectClipFlags::TOP,
- utils::getCohenSutherlandClipFlags(B2IPoint(-1,-1),aBox));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("(9,9) is outside range!",
- sal_uInt32(0), utils::getCohenSutherlandClipFlags(B2IPoint(9,9),aBox));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("(10,10) is inside range!",
- utils::RectClipFlags::RIGHT|utils::RectClipFlags::BOTTOM,
- utils::getCohenSutherlandClipFlags(B2IPoint(10,10),aBox));
- }
-
- // 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(b2ibox);
- CPPUNIT_TEST(TestBox);
- CPPUNIT_TEST_SUITE_END();
-}; // class b2ibox
-
-class b2dtuple : public CppUnit::TestFixture
-{
-public:
- // 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 bcolor : public CppUnit::TestFixture
-{
- BColor maWhite;
- BColor maBlack;
- BColor maRed;
- BColor maGreen;
- BColor maBlue;
- BColor maYellow;
- BColor maMagenta;
- BColor maCyan;
-
-public:
- bcolor() :
- maWhite(1,1,1),
- maBlack(0,0,0),
- maRed(1,0,0),
- maGreen(0,1,0),
- maBlue(0,0,1),
- maYellow(1,1,0),
- maMagenta(1,0,1),
- maCyan(0,1,1)
- {}
-
- // insert your test code here.
- void hslTest()
- {
- CPPUNIT_ASSERT_EQUAL_MESSAGE("white",
- BColor(0,0,1), utils::rgb2hsl(maWhite));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("black",
- BColor(0,0,0), utils::rgb2hsl(maBlack));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("red",
- BColor(0,1,0.5), utils::rgb2hsl(maRed));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("green",
- BColor(120,1,0.5), utils::rgb2hsl(maGreen));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("blue",
- BColor(240,1,0.5), utils::rgb2hsl(maBlue));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("yellow",
- BColor(60,1,0.5), utils::rgb2hsl(maYellow));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("magenta",
- BColor(300,1,0.5), utils::rgb2hsl(maMagenta));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("cyan",
- BColor(180,1,0.5), utils::rgb2hsl(maCyan));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("third hue case",
- BColor(210,1,0.5), utils::rgb2hsl(BColor(0,0.5,1)));
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip white",
- maWhite, utils::hsl2rgb(utils::rgb2hsl(maWhite)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip black",
- maBlack, utils::hsl2rgb(utils::rgb2hsl(maBlack)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip red",
- maRed, utils::hsl2rgb(utils::rgb2hsl(maRed)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip green",
- maGreen, utils::hsl2rgb(utils::rgb2hsl(maGreen)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip blue",
- maBlue, utils::hsl2rgb(utils::rgb2hsl(maBlue)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip yellow",
- maYellow, utils::hsl2rgb(utils::rgb2hsl(maYellow)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip magenta",
- maMagenta, utils::hsl2rgb(utils::rgb2hsl(maMagenta)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip cyan",
- maCyan, utils::hsl2rgb(utils::rgb2hsl(maCyan)));
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("grey10",
- BColor(0,0,.1), utils::rgb2hsl(maWhite*.1));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("grey90",
- BColor(0,0,.9), utils::rgb2hsl(maWhite*.9));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("red/2",
- BColor(0,1,0.25), utils::rgb2hsl(maRed*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("green/2",
- BColor(120,1,0.25), utils::rgb2hsl(maGreen*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("blue/2",
- BColor(240,1,0.25), utils::rgb2hsl(maBlue*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("yellow/2",
- BColor(60,1,0.25), utils::rgb2hsl(maYellow*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("magenta/2",
- BColor(300,1,0.25), utils::rgb2hsl(maMagenta*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("cyan/2",
- BColor(180,1,0.25), utils::rgb2hsl(maCyan*.5));
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("pastel",
- BColor(0,.5,.5), utils::rgb2hsl(BColor(.75,.25,.25)));
- }
-
- // insert your test code here.
- void hsvTest()
- {
- CPPUNIT_ASSERT_EQUAL_MESSAGE("white",
- BColor(0,0,1), utils::rgb2hsv(maWhite));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("black",
- BColor(0,0,0), utils::rgb2hsv(maBlack));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("red",
- BColor(0,1,1), utils::rgb2hsv(maRed));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("green",
- BColor(120,1,1), utils::rgb2hsv(maGreen));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("blue",
- BColor(240,1,1), utils::rgb2hsv(maBlue));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("yellow",
- BColor(60,1,1), utils::rgb2hsv(maYellow));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("magenta",
- BColor(300,1,1), utils::rgb2hsv(maMagenta));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("cyan",
- BColor(180,1,1), utils::rgb2hsv(maCyan));
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip white",
- maWhite, utils::hsv2rgb(utils::rgb2hsv(maWhite)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip black",
- maBlack, utils::hsv2rgb(utils::rgb2hsv(maBlack)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip red",
- maRed, utils::hsv2rgb(utils::rgb2hsv(maRed)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip green",
- maGreen, utils::hsv2rgb(utils::rgb2hsv(maGreen)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip blue",
- maBlue, utils::hsv2rgb(utils::rgb2hsv(maBlue)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip yellow",
- maYellow, utils::hsv2rgb(utils::rgb2hsv(maYellow)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip magenta",
- maMagenta, utils::hsv2rgb(utils::rgb2hsv(maMagenta)));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("roundtrip cyan",
- maCyan, utils::hsv2rgb(utils::rgb2hsv(maCyan)));
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("grey10",
- BColor(0,0,.1), utils::rgb2hsv(maWhite*.1));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("grey90",
- BColor(0,0,.9), utils::rgb2hsv(maWhite*.9));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("red/2",
- BColor(0,1,0.5), utils::rgb2hsv(maRed*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("green/2",
- BColor(120,1,0.5), utils::rgb2hsv(maGreen*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("blue/2",
- BColor(240,1,0.5), utils::rgb2hsv(maBlue*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("yellow/2",
- BColor(60,1,0.5), utils::rgb2hsv(maYellow*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("magenta/2",
- BColor(300,1,0.5), utils::rgb2hsv(maMagenta*.5));
- CPPUNIT_ASSERT_EQUAL_MESSAGE("cyan/2",
- BColor(180,1,0.5), utils::rgb2hsv(maCyan*.5));
-
- CPPUNIT_ASSERT_EQUAL_MESSAGE("pastel",
- BColor(0,.5,.5), utils::rgb2hsv(BColor(.5,.25,.25)));
- }
-
- // 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_SUITE_END();
-}; // class b2dvector
-
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2drange);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpolyrange);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dhommatrix);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpoint);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpolygon);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpolygontools);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dpolypolygon);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b1Xrange);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2Xrange);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2ibox);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::b2dtuple);
-CPPUNIT_TEST_SUITE_REGISTRATION(basegfx::bcolor);
-} // namespace basegfx2d
-
-CPPUNIT_PLUGIN_IMPLEMENT();
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */