summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/adaptagrams/libavoid/tests/checkpoints03.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/adaptagrams/libavoid/tests/checkpoints03.cpp')
-rw-r--r--src/3rdparty/adaptagrams/libavoid/tests/checkpoints03.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/3rdparty/adaptagrams/libavoid/tests/checkpoints03.cpp b/src/3rdparty/adaptagrams/libavoid/tests/checkpoints03.cpp
new file mode 100644
index 0000000..15da706
--- /dev/null
+++ b/src/3rdparty/adaptagrams/libavoid/tests/checkpoints03.cpp
@@ -0,0 +1,96 @@
+// This is a regression test for a problem where free segments slightly offset
+// from effectively fixed segments going through a checkpoint did not get
+// aligned.
+#include <cmath>
+#include "libavoid/libavoid.h"
+using namespace Avoid;
+int main(void) {
+ Router *router = new Router(
+ PolyLineRouting | OrthogonalRouting);
+ router->setRoutingParameter((RoutingParameter)0, 50);
+ router->setRoutingParameter((RoutingParameter)1, 0);
+ router->setRoutingParameter((RoutingParameter)2, 0);
+ router->setRoutingParameter((RoutingParameter)3, 4000);
+ router->setRoutingParameter((RoutingParameter)4, 0);
+ router->setRoutingParameter((RoutingParameter)5, 100);
+ router->setRoutingParameter((RoutingParameter)6, 0);
+ router->setRoutingParameter((RoutingParameter)7, 4);
+ router->setRoutingOption((RoutingOption)0, true);
+ router->setRoutingOption((RoutingOption)1, true);
+ router->setRoutingOption((RoutingOption)2, false);
+ router->setRoutingOption((RoutingOption)3, false);
+
+ Polygon poly41(4);
+ poly41.ps[0] = Point(918.6758458220888, 441.0752314081785);
+ poly41.ps[1] = Point(918.6758458220888, 503.0752314081785);
+ poly41.ps[2] = Point(856.6758458220888, 503.0752314081785);
+ poly41.ps[3] = Point(856.6758458220888, 441.0752314081785);
+ new ShapeRef(router, poly41, 41);
+
+
+ Polygon poly43(4);
+ poly43.ps[0] = Point(710.6758458200889, 441.0752314081785);
+ poly43.ps[1] = Point(710.6758458200889, 461.0752314081785);
+ poly43.ps[2] = Point(678.6758458200889, 461.0752314081785);
+ poly43.ps[3] = Point(678.6758458200889, 441.0752314081785);
+ new ShapeRef(router, poly43, 43);
+
+ Polygon poly44(4);
+ poly44.ps[0] = Point(710.6758458200889, 483.0752314081785);
+ poly44.ps[1] = Point(710.6758458200889, 503.0752314081785);
+ poly44.ps[2] = Point(678.6758458200889, 503.0752314081785);
+ poly44.ps[3] = Point(678.6758458200889, 483.0752314081785);
+ new ShapeRef(router, poly44, 44);
+
+ ConnRef *connRef149 = new ConnRef(router, 149);
+ ConnEnd srcPt149(Point(709.6758458200889, 451.0752314081785), 8);
+ connRef149->setSourceEndpoint(srcPt149);
+ ConnEnd dstPt149(Point(887.6758458220888, 472.0752314081786), 15);
+ connRef149->setDestEndpoint(dstPt149);
+ connRef149->setRoutingType((ConnType)2);
+ std::vector<Checkpoint> checkpoints149(1);
+ checkpoints149[0] = Checkpoint(Point(732.6758458200889, 472.0752314081785), (ConnDirFlags) 15, (ConnDirFlags) 8);
+ connRef149->setRoutingCheckpoints(checkpoints149);
+
+ ConnRef *connRef150 = new ConnRef(router, 150);
+ ConnEnd srcPt150(Point(709.6758458200889, 493.0752314081785), 8);
+ connRef150->setSourceEndpoint(srcPt150);
+ ConnEnd dstPt150(Point(887.6758458220888, 472.0752314081786), 15);
+ connRef150->setDestEndpoint(dstPt150);
+ connRef150->setRoutingType((ConnType)2);
+ std::vector<Checkpoint> checkpoints150(1);
+ checkpoints150[0] = Checkpoint(Point(732.6758458200889, 472.0752314081785), (ConnDirFlags) 15, (ConnDirFlags) 8);
+ connRef150->setRoutingCheckpoints(checkpoints150);
+
+ router->processTransaction();
+ router->outputDiagram("output/checkpoints03");
+
+ bool succeeded = true;
+ Avoid::PolyLine route149 = connRef149->displayRoute();
+ Avoid::PolyLine route150 = connRef150->displayRoute();
+ if (route149.size() > 4 || route150.size() > 4)
+ {
+ // Five segments weren't merged into three. The segments in the shape
+ // on right weren't shifted to align with the segments going through
+ // the checkpoint.
+ succeeded = false;
+ }
+ if (succeeded == true)
+ {
+ // The segments were merged by were not centred around the
+ // checkpoint.
+ double checkpointY = 472.0752314081785;
+ if (fabs(route149.ps[route149.size() - 1].y - checkpointY) < 2)
+ {
+ succeeded = false;
+ }
+
+ if (fabs(route150.ps[route150.size() - 1].y - checkpointY) < 2)
+ {
+ succeeded = false;
+ }
+ }
+ delete router;
+ return (succeeded) ? 0 : 1;
+};
+