diff --git a/DesktopEditor/graphics/BooleanOperations.cpp b/DesktopEditor/graphics/BooleanOperations.cpp index 8f5bc96ce1..1e5d58890c 100644 --- a/DesktopEditor/graphics/BooleanOperations.cpp +++ b/DesktopEditor/graphics/BooleanOperations.cpp @@ -2381,17 +2381,17 @@ CGraphicsPath CalcBooleanOperation(const CGraphicsPath& path1, return op == Subtraction ? CGraphicsPath(paths1) : CGraphicsPath(paths); } -//For unit-tests -bool CGraphicsPath::operator==(const CGraphicsPath& other) noexcept +// For Unit-tests +bool CGraphicsPath::Equals(const CGraphicsPath& other) noexcept { unsigned pointsCount = GetPointCount(), - otherPointsCount = other.GetPointCount(); + otherPointsCount = other.GetPointCount(); if (pointsCount != otherPointsCount) return false; std::vector points = GetPoints(0, pointsCount), - otherPoints = other.GetPoints(0, otherPointsCount); + otherPoints = other.GetPoints(0, otherPointsCount); for (unsigned i = 0; i < pointsCount; i++) if (getDistance(points[i], otherPoints[i]) > POINT_EPSILON) diff --git a/DesktopEditor/graphics/GraphicsPath.cpp b/DesktopEditor/graphics/GraphicsPath.cpp index e548ca0859..c77a08ef89 100644 --- a/DesktopEditor/graphics/GraphicsPath.cpp +++ b/DesktopEditor/graphics/GraphicsPath.cpp @@ -917,13 +917,11 @@ namespace Aggplus PointD firstPoint = subPath.GetPoints(0, 1)[0]; double x, y; subPath.GetLastPoint(x, y); - if ((abs(firstPoint.X - x) >= 1e-2 && abs(firstPoint.Y - y) >= 1e-2) || + if ((abs(firstPoint.X - x) >= 1e-2 || abs(firstPoint.Y - y) >= 1e-2) || subPath.GetPointCount() == 1) - { subPath.LineTo(firstPoint.X, firstPoint.Y); - subPath.CloseFigure(); - } + subPath.CloseFigure(); result.push_back(subPath); subPath.Reset(); } @@ -951,7 +949,7 @@ namespace Aggplus double x, y; subPath.GetLastPoint(x, y); - if ((abs(firstPoint.X - x) >= 1e-2 && abs(firstPoint.Y - y) >= 1e-2) || subPath.GetPointCount() == 1) + if ((abs(firstPoint.X - x) >= 1e-2 || abs(firstPoint.Y - y) >= 1e-2) || subPath.GetPointCount() == 1) subPath.LineTo(firstPoint.X, firstPoint.Y); subPath.CloseFigure(); @@ -1005,6 +1003,24 @@ namespace Aggplus return *this; } + + bool CGraphicsPath::operator==(const CGraphicsPath& other) noexcept + { + unsigned pointsCount = GetPointCount(), + otherPointsCount = other.GetPointCount(); + + if (pointsCount != otherPointsCount) + return false; + + std::vector points = GetPoints(0, pointsCount), + otherPoints = other.GetPoints(0, otherPointsCount); + + for (unsigned i = 0; i < pointsCount; i++) + if (!points[i].Equals(otherPoints[i])) + return false; + + return true; + } } namespace Aggplus diff --git a/DesktopEditor/graphics/GraphicsPath.h b/DesktopEditor/graphics/GraphicsPath.h index f9023554f5..f067efdb97 100644 --- a/DesktopEditor/graphics/GraphicsPath.h +++ b/DesktopEditor/graphics/GraphicsPath.h @@ -117,6 +117,7 @@ namespace Aggplus std::vector GetPoints(unsigned idx, unsigned count) const noexcept; std::vector GetSubPaths() const; + bool Equals(const CGraphicsPath& other) noexcept; CGraphicsPath& operator=(const CGraphicsPath& other) noexcept; CGraphicsPath& operator=(CGraphicsPath&& other) noexcept; bool operator==(const CGraphicsPath& other) noexcept; diff --git a/DesktopEditor/graphics/tests/BooleanOperations_Unit-tests/tst_booleanoperations.cpp b/DesktopEditor/graphics/tests/BooleanOperations_Unit-tests/tst_booleanoperations.cpp index 02d6720c40..5b37ea84e1 100644 --- a/DesktopEditor/graphics/tests/BooleanOperations_Unit-tests/tst_booleanoperations.cpp +++ b/DesktopEditor/graphics/tests/BooleanOperations_Unit-tests/tst_booleanoperations.cpp @@ -50,9 +50,9 @@ TEST(BooleanOperations, NoIntersOutside) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, NoIntersInside) @@ -105,9 +105,9 @@ TEST(BooleanOperations, NoIntersInside) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, OneIntersOutside) @@ -154,9 +154,9 @@ TEST(BooleanOperations, OneIntersOutside) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, OneIntersInside) @@ -206,9 +206,9 @@ TEST(BooleanOperations, OneIntersInside) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, OverlapOutside) @@ -258,9 +258,9 @@ TEST(BooleanOperations, OverlapOutside) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, OverlapInside) @@ -312,9 +312,9 @@ TEST(BooleanOperations, OverlapInside) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, LineIntersLine) @@ -368,9 +368,9 @@ TEST(BooleanOperations, LineIntersLine) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, CurveIntersLine) @@ -415,9 +415,9 @@ TEST(BooleanOperations, CurveIntersLine) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, CurveIntersCurve) @@ -453,9 +453,9 @@ TEST(BooleanOperations, CurveIntersCurve) resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, RectIntersRect) @@ -508,9 +508,9 @@ TEST(BooleanOperations, RectIntersRect) resultSubtract.LineTo(55.0, 25.0); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, EllipseIntersEllipse) @@ -550,9 +550,9 @@ TEST(BooleanOperations, EllipseIntersEllipse) resultSubtract.CurveTo(303.228, 82.0, 348.0, 126.772, 348.0, 182.0); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, EllipseIntersCross) @@ -621,9 +621,9 @@ TEST(BooleanOperations, EllipseIntersCross) resultSubtract.CurveTo(188.228, 60, 233, 104.772, 233, 160); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, TriangleIntersEllipse) @@ -665,9 +665,9 @@ TEST(BooleanOperations, TriangleIntersEllipse) resultSubtract.CurveTo(243.078, 286.812, 260.127, 260.386, 263.419, 229.839); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, TwoVerticesInters) @@ -715,9 +715,9 @@ TEST(BooleanOperations, TwoVerticesInters) resultSubtract.LineTo(-300, -300); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, RectIntersEllipse) @@ -773,9 +773,9 @@ TEST(BooleanOperations, RectIntersEllipse) resultSubtract.CurveTo(257.623, 242.785, 258.883, 240.478, 260, 238.092); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, RectIntersCross) @@ -869,9 +869,9 @@ TEST(BooleanOperations, RectIntersCross) resultSubtract.LineTo(-89.5, 24); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, CrossIntersTriangle) @@ -977,9 +977,9 @@ TEST(BooleanOperations, CrossIntersTriangle) resultSubtract.LineTo(-6, 3.5); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, CrossIntersCross) @@ -1077,9 +1077,9 @@ TEST(BooleanOperations, CrossIntersCross) resultSubtract.LineTo(-72, -191); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, EllipseTouchEllipse) @@ -1119,9 +1119,9 @@ TEST(BooleanOperations, EllipseTouchEllipse) resultSubtract.CurveTo(138.137, 237, 165, 210.137, 165, 177); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); } TEST(BooleanOperations, TriangleOverlapTriangle) @@ -1170,7 +1170,7 @@ TEST(BooleanOperations, TriangleOverlapTriangle) resultSubtract.LineTo(-200, -300); resultSubtract.CloseFigure(); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection) == resultIntersect); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union) == resultUnite); - EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction) == resultSubtract); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Intersection).Equals(resultIntersect)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Union).Equals(resultUnite)); + EXPECT_TRUE(Aggplus::CalcBooleanOperation(path1, path2, Aggplus::Subtraction).Equals(resultSubtract)); }