diff options
Diffstat (limited to 'src/3rdparty/adaptagrams/libavoid/tests/checkpoints03.cpp')
-rw-r--r-- | src/3rdparty/adaptagrams/libavoid/tests/checkpoints03.cpp | 96 |
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; +}; + |