Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-29 07:34:47

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #include <boost/test/execution_monitor.hpp>
0010 #include <boost/test/tools/assertion_result.hpp>
0011 #include <boost/test/unit_test.hpp>
0012 
0013 #include "Acts/Geometry/GeometryContext.hpp"
0014 #include "Acts/Surfaces/AnnulusBounds.hpp"
0015 #include "Acts/Surfaces/DiscSurface.hpp"
0016 #include "Acts/Surfaces/PlanarBounds.hpp"
0017 #include "Acts/Surfaces/PlaneSurface.hpp"
0018 #include "Acts/Surfaces/RectangleBounds.hpp"
0019 #include "Acts/Surfaces/RegularSurface.hpp"
0020 #include "Acts/Surfaces/TrapezoidBounds.hpp"
0021 
0022 #include <iostream>
0023 #include <limits>
0024 
0025 using namespace Acts;
0026 
0027 namespace ActsTests {
0028 
0029 auto gctx = GeometryContext::dangerouslyDefaultConstruct();
0030 
0031 std::size_t matrixResolution = 80;
0032 
0033 struct TestMatrix : public std::vector<std::vector<std::uint8_t>> {
0034   TestMatrix()
0035       : std::vector<std::vector<std::uint8_t>>(
0036             matrixResolution, std::vector<std::uint8_t>(matrixResolution, 0)) {
0037         };
0038 };
0039 
0040 std::pair<Vector2, Vector2> boundingBox(const RegularSurface& surface,
0041                                         double relMargin) {
0042   Vector2 min{std::numeric_limits<double>::max(),
0043               std::numeric_limits<double>::max()};
0044   Vector2 max{std::numeric_limits<double>::lowest(),
0045               std::numeric_limits<double>::lowest()};
0046 
0047   std::vector<Vector2> vertices;
0048   if (const auto* pBounds =
0049           dynamic_cast<const PlanarBounds*>(&surface.bounds());
0050       pBounds) {
0051     vertices = pBounds->vertices();
0052   } else if (const auto* dBounds =
0053                  dynamic_cast<const DiscBounds*>(&surface.bounds());
0054              dBounds) {
0055     vertices = dBounds->vertices();
0056   } else {
0057     throw std::runtime_error("Unsupported bounds type");
0058   }
0059 
0060   for (const auto& vertex : vertices) {
0061     min = min.cwiseMin(vertex);
0062     max = max.cwiseMax(vertex);
0063   }
0064 
0065   Vector2 size = max - min;
0066 
0067   min = min - relMargin * size;
0068   max = max + relMargin * size;
0069 
0070   Vector3 min3 =
0071       surface.localToGlobalTransform(gctx) * Vector3{min[0], min[1], 0};
0072   Vector3 max3 =
0073       surface.localToGlobalTransform(gctx) * Vector3{max[0], max[1], 0};
0074 
0075   return {min3.head<2>(), max3.head<2>()};
0076 }
0077 
0078 TestMatrix makeTestMatrix(const RegularSurface& surface,
0079                           const BoundaryTolerance& tolerance,
0080                           double relMargin = 0.1) {
0081   auto [min, max] = boundingBox(surface, relMargin);
0082   Vector2 delta = max - min;
0083 
0084   TestMatrix testMatrix;
0085 
0086   Vector2 step = delta / (matrixResolution - 1);
0087 
0088   for (std::size_t i = 0; i < matrixResolution; ++i) {
0089     for (std::size_t j = 0; j < matrixResolution; ++j) {
0090       Vector2 query = min + Vector2(j, i).cwiseProduct(step);
0091       Vector2 local =
0092           surface.globalToLocal(gctx, Vector3{query[0], query[1], 0}).value();
0093       bool inside = surface.bounds().inside(local, tolerance);
0094       testMatrix.at(i).at(j) = inside ? 1 : 0;
0095     }
0096   }
0097 
0098   return testMatrix;
0099 }
0100 
0101 void printTestMatrix(const TestMatrix& matrix) {
0102   for (const auto& row : matrix) {
0103     for (std::uint8_t inside : row) {
0104       std::cout << (inside == 1 ? "X" : ".");
0105     }
0106     std::cout << std::endl;
0107   }
0108 }
0109 
0110 TestMatrix parseMatrix(const std::string& matrix) {
0111   TestMatrix result;
0112 
0113   std::size_t i = 0;
0114   std::size_t j = 0;
0115 
0116   for (auto it = matrix.find_first_not_of("\n "); it < matrix.size(); it++) {
0117     const char c = matrix.at(it);
0118     if (c == ' ') {
0119       continue;
0120     }
0121     if (c == '\n') {
0122       i += 1;
0123       j = 0;
0124       continue;
0125     }
0126     if (c == '.') {
0127       result.at(i).at(j) = 0;
0128     } else {
0129       result.at(i).at(j) = 1;
0130     }
0131     j += 1;
0132   }
0133 
0134   return result;
0135 }
0136 
0137 void printMatrixDiff(const TestMatrix& ref, const TestMatrix& act) {
0138   static const std::string s_ref = "-";
0139   static const std::string s_act = "+";
0140   static const std::string s_in = "X";
0141   static const std::string s_out = ".";
0142 
0143   bool tty = isatty(fileno(stdout)) != 0;
0144 
0145   // Print special output in case the reference is empty so we can easily update
0146   // the reference.
0147   bool refEmpty = std::ranges::all_of(ref, [](const auto& row) {
0148     return std::ranges::all_of(row, [](const auto& v) { return v == 0; });
0149   });
0150 
0151   auto red = [tty](const std::string& s) {
0152     if (!tty) {
0153       return s;
0154     }
0155     return "\033[1;31m" + s + "\033[0m";
0156   };
0157 
0158   auto green = [tty](const std::string& s) {
0159     if (!tty) {
0160       return s;
0161     }
0162     return "\033[1;32m" + s + "\033[0m";
0163   };
0164 
0165   for (std::size_t i = 0; i <= matrixResolution - 1; ++i) {
0166     for (std::size_t j = 0; j <= matrixResolution - 1; ++j) {
0167       bool insideRef = ref.at(i).at(j) == 1;
0168       bool insideAct = act.at(i).at(j) == 1;
0169 
0170       if (refEmpty) {
0171         std::cout << (insideAct ? s_in : s_out);
0172         continue;
0173       }
0174 
0175       if (!insideRef && !insideAct) {
0176         std::cout << s_out;
0177       }
0178       if (insideRef && !insideAct) {
0179         std::cout << red(s_ref);
0180       }
0181       if (!insideRef && insideAct) {
0182         std::cout << green(s_act);
0183       }
0184       if (insideRef && insideAct) {
0185         std::cout << s_in;
0186       }
0187     }
0188     std::cout << std::endl;
0189   }
0190 
0191   if (!refEmpty) {
0192     std::cout << red(s_ref + ": inside reference but not inside actual")
0193               << std::endl;
0194     std::cout << green(s_act + ": not inside reference but inside actual")
0195               << std::endl;
0196     std::cout << s_in + ": inside both" << std::endl;
0197     std::cout << s_out + ": outside both" << std::endl;
0198   } else {
0199     std::cout << red("REFERENCE IS EMPTY") << std::endl;
0200     std::cout << s_in + ": inside actual" << std::endl;
0201     std::cout << s_out + ": outside actual" << std::endl;
0202   }
0203 }
0204 
0205 boost::test_tools::predicate_result checkMatrices(const TestMatrix& val,
0206                                                   const TestMatrix& ref) {
0207   if (val == ref) {
0208     return true;
0209   }
0210   printMatrixDiff(ref, val);
0211   boost::test_tools::predicate_result res(false);
0212   res.message() << "Actual test matrix differs from reference";
0213   return res;
0214 }
0215 
0216 BOOST_AUTO_TEST_SUITE(SurfacesSuite)
0217 
0218 BOOST_AUTO_TEST_CASE(Rectangle) {
0219   auto bounds = std::make_shared<RectangleBounds>(10, 20);
0220   auto surface =
0221       Surface::makeShared<PlaneSurface>(Transform3::Identity(), bounds);
0222 
0223   BOOST_TEST_CONTEXT("None") {
0224     std::string reference = R"X(
0225 ................................................................................
0226 ................................................................................
0227 ................................................................................
0228 ................................................................................
0229 ................................................................................
0230 ................................................................................
0231 ................................................................................
0232 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0233 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0234 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0235 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0236 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0237 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0238 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0239 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0240 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0241 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0242 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0243 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0244 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0245 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0246 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0247 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0248 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0249 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0250 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0251 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0252 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0253 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0254 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0255 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0256 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0257 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0258 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0259 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0260 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0261 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0262 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0263 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0264 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0265 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0266 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0267 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0268 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0269 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0270 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0271 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0272 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0273 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0274 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0275 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0276 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0277 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0278 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0279 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0280 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0281 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0282 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0283 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0284 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0285 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0286 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0287 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0288 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0289 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0290 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0291 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0292 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0293 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0294 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0295 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0296 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0297 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0298 ................................................................................
0299 ................................................................................
0300 ................................................................................
0301 ................................................................................
0302 ................................................................................
0303 ................................................................................
0304 ................................................................................
0305   )X";
0306 
0307     BoundaryTolerance tolerance = BoundaryTolerance::None();
0308     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0309                               parseMatrix(reference)));
0310   }
0311 
0312   BOOST_TEST_CONTEXT("AbsoluteEuclidean(2)") {
0313     std::string reference = R"X(
0314 ................................................................................
0315 ................................................................................
0316 ................................................................................
0317 ................................................................................
0318 ................................................................................
0319 ................................................................................
0320 ................................................................................
0321 ................................................................................
0322 ................................................................................
0323 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0324 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0325 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0326 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0327 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0328 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0329 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0330 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0331 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0332 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0333 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0334 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0335 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0336 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0337 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0338 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0339 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0340 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0341 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0342 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0343 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0344 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0345 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0346 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0347 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0348 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0349 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0350 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0351 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0352 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0353 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0354 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0355 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0356 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0357 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0358 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0359 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0360 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0361 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0362 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0363 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0364 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0365 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0366 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0367 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0368 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0369 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0370 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0371 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0372 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0373 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0374 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0375 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0376 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0377 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0378 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0379 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0380 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0381 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0382 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0383 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0384 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0385 ................................................................................
0386 ................................................................................
0387 ................................................................................
0388 ................................................................................
0389 ................................................................................
0390 ................................................................................
0391 ................................................................................
0392 ................................................................................
0393 ................................................................................
0394   )X";
0395 
0396     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(2);
0397     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.2),
0398                               parseMatrix(reference)));
0399   }
0400 
0401   BOOST_TEST_CONTEXT("AbsoluteEuclidean(-2)") {
0402     std::string reference = R"X(
0403 ................................................................................
0404 ................................................................................
0405 ................................................................................
0406 ................................................................................
0407 ................................................................................
0408 ................................................................................
0409 ................................................................................
0410 ................................................................................
0411 ................................................................................
0412 ................................................................................
0413 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0414 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0415 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0416 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0417 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0418 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0419 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0420 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0421 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0422 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0423 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0424 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0425 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0426 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0427 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0428 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0429 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0430 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0431 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0432 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0433 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0434 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0435 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0436 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0437 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0438 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0439 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0440 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0441 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0442 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0443 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0444 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0445 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0446 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0447 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0448 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0449 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0450 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0451 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0452 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0453 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0454 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0455 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0456 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0457 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0458 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0459 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0460 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0461 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0462 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0463 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0464 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0465 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0466 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0467 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0468 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0469 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0470 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0471 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0472 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0473 ................................................................................
0474 ................................................................................
0475 ................................................................................
0476 ................................................................................
0477 ................................................................................
0478 ................................................................................
0479 ................................................................................
0480 ................................................................................
0481 ................................................................................
0482 ................................................................................
0483   )X";
0484 
0485     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(-2);
0486     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0487                               parseMatrix(reference)));
0488   }
0489 
0490   BOOST_TEST_CONTEXT("Chi2Bound(eye, 1)") {
0491     std::string reference = R"X(
0492 ................................................................................
0493 ................................................................................
0494 ................................................................................
0495 ................................................................................
0496 ................................................................................
0497 ................................................................................
0498 ................................................................................
0499 ................................................................................
0500 ................................................................................
0501 ................................................................................
0502 ................................................................................
0503 ................................................................................
0504 ................................................................................
0505 ................................................................................
0506 ................................................................................
0507 ................................................................................
0508 ................................................................................
0509 ................................................................................
0510 ................................................................................
0511 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0512 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0513 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0514 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0515 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0516 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0517 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0518 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0519 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0520 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0521 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0522 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0523 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0524 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0525 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0526 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0527 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0528 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0529 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0530 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0531 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0532 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0533 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0534 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0535 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0536 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0537 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0538 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0539 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0540 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0541 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0542 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0543 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0544 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0545 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0546 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0547 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0548 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0549 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0550 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0551 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0552 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0553 ................................................................................
0554 ................................................................................
0555 ................................................................................
0556 ................................................................................
0557 ................................................................................
0558 ................................................................................
0559 ................................................................................
0560 ................................................................................
0561 ................................................................................
0562 ................................................................................
0563 ................................................................................
0564 ................................................................................
0565 ................................................................................
0566 ................................................................................
0567 ................................................................................
0568 ................................................................................
0569 ................................................................................
0570 ................................................................................
0571 ................................................................................
0572   )X";
0573 
0574     BoundaryTolerance tolerance =
0575         BoundaryTolerance::Chi2Bound(SquareMatrix2::Identity(), 2);
0576     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.5),
0577                               parseMatrix(reference)));
0578   }
0579 
0580   BOOST_TEST_CONTEXT("Chi2Bound(eye, -1)") {
0581     std::string reference = R"X(
0582 ................................................................................
0583 ................................................................................
0584 ................................................................................
0585 ................................................................................
0586 ................................................................................
0587 ................................................................................
0588 ................................................................................
0589 ................................................................................
0590 ................................................................................
0591 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0592 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0593 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0594 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0595 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0596 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0597 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0598 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0599 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0600 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0601 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0602 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0603 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0604 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0605 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0606 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0607 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0608 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0609 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0610 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0611 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0612 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0613 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0614 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0615 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0616 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0617 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0618 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0619 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0620 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0621 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0622 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0623 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0624 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0625 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0626 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0627 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0628 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0629 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0630 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0631 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0632 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0633 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0634 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0635 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0636 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0637 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0638 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0639 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0640 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0641 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0642 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0643 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0644 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0645 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0646 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0647 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0648 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0649 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0650 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0651 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0652 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0653 ................................................................................
0654 ................................................................................
0655 ................................................................................
0656 ................................................................................
0657 ................................................................................
0658 ................................................................................
0659 ................................................................................
0660 ................................................................................
0661 ................................................................................
0662   )X";
0663 
0664     BoundaryTolerance tolerance =
0665         BoundaryTolerance::Chi2Bound(SquareMatrix2::Identity(), -2);
0666     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0667                               parseMatrix(reference)));
0668   }
0669 }
0670 
0671 BOOST_AUTO_TEST_CASE(Trapezoid) {
0672   auto bounds = std::make_shared<TrapezoidBounds>(10, 20, 5, 0.1);
0673   auto surface =
0674       Surface::makeShared<PlaneSurface>(Transform3::Identity(), bounds);
0675 
0676   BOOST_TEST_CONTEXT("None") {
0677     std::string reference = R"X(
0678 ................................................................................
0679 ................................................................................
0680 ................................................................................
0681 ................................................................................
0682 ................................................................................
0683 ................................................................................
0684 ................................................................................
0685 .....................................................XX.........................
0686 ..................................................XXXXX.........................
0687 ...............................................XXXXXXXXX........................
0688 ............................................XXXXXXXXXXXX........................
0689 ........................................XXXXXXXXXXXXXXXXX.......................
0690 .....................................XXXXXXXXXXXXXXXXXXXX.......................
0691 ..................................XXXXXXXXXXXXXXXXXXXXXXX.......................
0692 ...............................XXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0693 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0694 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0695 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0696 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0697 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0698 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0699 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0700 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0701 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0702 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0703 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0704 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0705 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0706 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0707 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0708 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0709 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0710 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0711 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0712 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0713 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0714 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0715 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0716 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0717 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0718 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0719 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0720 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0721 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0722 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0723 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0724 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0725 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0726 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0727 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0728 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0729 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0730 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0731 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0732 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0733 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0734 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0735 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0736 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
0737 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
0738 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
0739 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................................
0740 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................................
0741 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................................
0742 .........XXXXXXXXXXXXXXXXXXXXXXXXX..............................................
0743 .........XXXXXXXXXXXXXXXXXXXXXX.................................................
0744 .........XXXXXXXXXXXXXXXXXXX....................................................
0745 .........XXXXXXXXXXXXXXXX.......................................................
0746 ........XXXXXXXXXXXXX...........................................................
0747 ........XXXXXXXXXX..............................................................
0748 ........XXXXXXX.................................................................
0749 .......XXXXX....................................................................
0750 .......X........................................................................
0751 ................................................................................
0752 ................................................................................
0753 ................................................................................
0754 ................................................................................
0755 ................................................................................
0756 ................................................................................
0757 ................................................................................
0758   )X";
0759     BoundaryTolerance tolerance = BoundaryTolerance::None();
0760     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0761                               parseMatrix(reference)));
0762   }
0763 
0764   BOOST_TEST_CONTEXT("AbsoluteEuclidean(2)") {
0765     std::string reference = R"X(
0766 ................................................................................
0767 ................................................................................
0768 ................................................................................
0769 ...................................................XXX..........................
0770 ................................................XXXXXX..........................
0771 .............................................XXXXXXXXXX.........................
0772 .........................................XXXXXXXXXXXXXX.........................
0773 ......................................XXXXXXXXXXXXXXXXX.........................
0774 ...................................XXXXXXXXXXXXXXXXXXXXX........................
0775 ................................XXXXXXXXXXXXXXXXXXXXXXXX........................
0776 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0777 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0778 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0779 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0780 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0781 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0782 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0783 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0784 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0785 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0786 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0787 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0788 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0789 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0790 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0791 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0792 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0793 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0794 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0795 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0796 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0797 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0798 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0799 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0800 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0801 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0802 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0803 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0804 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0805 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0806 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0807 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0808 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0809 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0810 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0811 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0812 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0813 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0814 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0815 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0816 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0817 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0818 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0819 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0820 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0821 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0822 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0823 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0824 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0825 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0826 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0827 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0828 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0829 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
0830 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
0831 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............................
0832 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................................
0833 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
0834 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................................
0835 .........XXXXXXXXXXXXXXXXXXXXXXXXXXX............................................
0836 .........XXXXXXXXXXXXXXXXXXXXXXXX...............................................
0837 .........XXXXXXXXXXXXXXXXXXXXX..................................................
0838 .........XXXXXXXXXXXXXXXXX......................................................
0839 ..........XXXXXXXXXXXXX.........................................................
0840 ..........XXXXXXXXXX............................................................
0841 ..........XXXXXXX...............................................................
0842 ...........XX...................................................................
0843 ................................................................................
0844 ................................................................................
0845 ................................................................................
0846   )X";
0847     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(2);
0848     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.2),
0849                               parseMatrix(reference)));
0850   }
0851 
0852   BOOST_TEST_CONTEXT("AbsoluteEuclidean(-2)") {
0853     std::string reference = R"X(
0854 ................................................................................
0855 ................................................................................
0856 ................................................................................
0857 ................................................................................
0858 ................................................................................
0859 ................................................................................
0860 ................................................................................
0861 ................................................................................
0862 ................................................................................
0863 ................................................................................
0864 ................................................................................
0865 ................................................................................
0866 ................................................................................
0867 ................................................................................
0868 ................................................................................
0869 ................................................................................
0870 ................................................................................
0871 ................................................................................
0872 ...................................................XXX..........................
0873 ................................................XXXXXXX.........................
0874 ............................................XXXXXXXXXXX.........................
0875 .........................................XXXXXXXXXXXXXX.........................
0876 ......................................XXXXXXXXXXXXXXXXXX........................
0877 ...................................XXXXXXXXXXXXXXXXXXXXX........................
0878 ...............................XXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0879 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0880 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0881 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0882 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0883 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0884 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0885 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0886 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0887 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0888 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0889 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0890 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0891 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0892 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0893 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0894 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0895 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0896 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0897 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0898 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0899 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0900 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0901 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
0902 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
0903 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
0904 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
0905 .................XXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
0906 .................XXXXXXXXXXXXXXXXXXXXXXX........................................
0907 .................XXXXXXXXXXXXXXXXXXXX...........................................
0908 ................XXXXXXXXXXXXXXXXXX..............................................
0909 ................XXXXXXXXXXXXXX..................................................
0910 ................XXXXXXXXXXX.....................................................
0911 ...............XXXXXXXXX........................................................
0912 ...............XXXXXX...........................................................
0913 ...............XX...............................................................
0914 ................................................................................
0915 ................................................................................
0916 ................................................................................
0917 ................................................................................
0918 ................................................................................
0919 ................................................................................
0920 ................................................................................
0921 ................................................................................
0922 ................................................................................
0923 ................................................................................
0924 ................................................................................
0925 ................................................................................
0926 ................................................................................
0927 ................................................................................
0928 ................................................................................
0929 ................................................................................
0930 ................................................................................
0931 ................................................................................
0932 ................................................................................
0933 ................................................................................
0934   )X";
0935 
0936     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(-2);
0937     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0938                               parseMatrix(reference)));
0939   }
0940 
0941   BOOST_TEST_CONTEXT("Chi2Bound(eye, 1)") {
0942     std::string reference = R"X(
0943 ................................................................................
0944 ................................................................................
0945 ................................................................................
0946 ................................................................................
0947 ................................................................................
0948 ................................................................................
0949 ................................................................................
0950 ................................................................................
0951 ................................................................................
0952 ................................................................................
0953 ................................................................................
0954 ................................................................................
0955 ................................................................................
0956 ................................................................................
0957 ................................................................................
0958 ................................................................................
0959 ...............................................XXX..............................
0960 ............................................XXXXXX..............................
0961 ........................................XXXXXXXXXX..............................
0962 .....................................XXXXXXXXXXXXXX.............................
0963 ..................................XXXXXXXXXXXXXXXXX.............................
0964 ...............................XXXXXXXXXXXXXXXXXXXXX............................
0965 ............................XXXXXXXXXXXXXXXXXXXXXXXX............................
0966 ............................XXXXXXXXXXXXXXXXXXXXXXXX............................
0967 ............................XXXXXXXXXXXXXXXXXXXXXXXXX...........................
0968 ............................XXXXXXXXXXXXXXXXXXXXXXXXX...........................
0969 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
0970 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
0971 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
0972 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
0973 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
0974 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
0975 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
0976 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
0977 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0978 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0979 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0980 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0981 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0982 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0983 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0984 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0985 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0986 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0987 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0988 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0989 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0990 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0991 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0992 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0993 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0994 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0995 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0996 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
0997 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
0998 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
0999 ...................XXXXXXXXXXXXXXXXXXXXXXXXXX...................................
1000 ...................XXXXXXXXXXXXXXXXXXXXXXX......................................
1001 ...................XXXXXXXXXXXXXXXXXXX..........................................
1002 ...................XXXXXXXXXXXXXXXX.............................................
1003 ...................XXXXXXXXXXXXX................................................
1004 ...................XXXXXXXXXX...................................................
1005 ...................XXXXXX.......................................................
1006 ....................XX..........................................................
1007 ................................................................................
1008 ................................................................................
1009 ................................................................................
1010 ................................................................................
1011 ................................................................................
1012 ................................................................................
1013 ................................................................................
1014 ................................................................................
1015 ................................................................................
1016 ................................................................................
1017 ................................................................................
1018 ................................................................................
1019 ................................................................................
1020 ................................................................................
1021 ................................................................................
1022 ................................................................................
1023   )X";
1024 
1025     BoundaryTolerance tolerance =
1026         BoundaryTolerance::Chi2Bound(SquareMatrix2::Identity(), 2);
1027     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.5),
1028                               parseMatrix(reference)));
1029   }
1030 
1031   BOOST_TEST_CONTEXT("Chi2Bound(eye, -1)") {
1032     std::string reference = R"X(
1033 ................................................................................
1034 ................................................................................
1035 ................................................................................
1036 ................................................................................
1037 ................................................................................
1038 ................................................................................
1039 ................................................................................
1040 ................................................................................
1041 ................................................................................
1042 ................................................................................
1043 ................................................................................
1044 ................................................................................
1045 ................................................................................
1046 ................................................................................
1047 ................................................................................
1048 ...................................................XXX..........................
1049 ................................................XXXXXXX.........................
1050 ............................................XXXXXXXXXXX.........................
1051 .........................................XXXXXXXXXXXXXXX........................
1052 ......................................XXXXXXXXXXXXXXXXXX........................
1053 ...................................XXXXXXXXXXXXXXXXXXXXX........................
1054 ................................XXXXXXXXXXXXXXXXXXXXXXXXX.......................
1055 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1056 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1057 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1058 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1059 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1060 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1061 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1062 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1063 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1064 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1065 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1066 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1067 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1068 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1069 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1070 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1071 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1072 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1073 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1074 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1075 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1076 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1077 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1078 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1079 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1080 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1081 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1082 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1083 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1084 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1085 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1086 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1087 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
1088 ...............XXXXXXXXXXXXXXXXXXXXXXXXX........................................
1089 ..............XXXXXXXXXXXXXXXXXXXXXXX...........................................
1090 ..............XXXXXXXXXXXXXXXXXXXX..............................................
1091 ..............XXXXXXXXXXXXXXXX..................................................
1092 ..............XXXXXXXXXXXXX.....................................................
1093 .............XXXXXXXXXXX........................................................
1094 .............XXXXXXXX...........................................................
1095 .............XXXX...............................................................
1096 .............X..................................................................
1097 ................................................................................
1098 ................................................................................
1099 ................................................................................
1100 ................................................................................
1101 ................................................................................
1102 ................................................................................
1103 ................................................................................
1104 ................................................................................
1105 ................................................................................
1106 ................................................................................
1107 ................................................................................
1108 ................................................................................
1109 ................................................................................
1110 ................................................................................
1111 ................................................................................
1112 ................................................................................
1113   )X";
1114 
1115     BoundaryTolerance tolerance =
1116         BoundaryTolerance::Chi2Bound(SquareMatrix2::Identity(), -2);
1117     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1118                               parseMatrix(reference)));
1119   }
1120 }
1121 
1122 BOOST_AUTO_TEST_CASE(Annulus) {
1123   const double minRadius = 7.2;
1124   const double maxRadius = 12.0;
1125   const double minPhi = 0.74195;
1126   const double maxPhi = 1.33970;
1127 
1128   const Vector2 offset(-2., 2.);
1129 
1130   auto bounds = std::make_shared<AnnulusBounds>(minRadius, maxRadius, minPhi,
1131                                                 maxPhi, offset);
1132   auto surface =
1133       Surface::makeShared<DiscSurface>(Transform3::Identity(), bounds);
1134 
1135   {
1136     std::string reference = R"X(
1137 ................................................................................
1138 ................................................................................
1139 ................................................................................
1140 ................................................................................
1141 ................................................................................
1142 ................................................................................
1143 ................................................................................
1144 ....................................X...........................................
1145 ...................................XXX..........................................
1146 ...................................XXXX.........................................
1147 ..................................XXXXXXX.......................................
1148 ..................................XXXXXXXX......................................
1149 .................................XXXXXXXXXXX....................................
1150 ................................XXXXXXXXXXXXX...................................
1151 ................................XXXXXXXXXXXXXX..................................
1152 ...............................XXXXXXXXXXXXXXXXX................................
1153 ..............................XXXXXXXXXXXXXXXXXXX...............................
1154 ..............................XXXXXXXXXXXXXXXXXXXXX.............................
1155 .............................XXXXXXXXXXXXXXXXXXXXXXX............................
1156 ............................XXXXXXXXXXXXXXXXXXXXXXXXX...........................
1157 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1158 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1159 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1160 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1161 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1162 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1163 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1164 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1165 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1166 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1167 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1168 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
1169 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1170 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
1171 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1172 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1173 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1174 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
1175 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1176 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
1177 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1178 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1179 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1180 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1181 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1182 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1183 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1184 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1185 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1186 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1187 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1188 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1189 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1190 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1191 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1192 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1193 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1194 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
1195 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1196 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................................
1197 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................................
1198 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXX......................................
1199 ...............XXXXXXXXXXXXXXXXXXXXXXXXXX.......................................
1200 ................XXXXXXXXXXXXXXXXXXXXXXX.........................................
1201 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1202 ................XXXXXXXXXXXXXXXXXXX.............................................
1203 ................XXXXXXXXXXXXXXXXX...............................................
1204 .................XXXXXXXXXXXXXX.................................................
1205 .................XXXXXXXXXXXX...................................................
1206 .................XXXXXXXXXX.....................................................
1207 ..................XXXXXXX.......................................................
1208 ..................XXXX..........................................................
1209 ..................XX............................................................
1210 ................................................................................
1211 ................................................................................
1212 ................................................................................
1213 ................................................................................
1214 ................................................................................
1215 ................................................................................
1216 ................................................................................
1217   )X";
1218 
1219     BoundaryTolerance tolerance = BoundaryTolerance::None();
1220     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1221                               parseMatrix(reference)));
1222   }
1223 
1224   {
1225     std::string reference = R"X(
1226 ................................................................................
1227 ................................................................................
1228 ................................................................................
1229 ................................................................................
1230 ................................................................................
1231 ................................................................................
1232 ................................................................................
1233 ................................................................................
1234 ................................................................................
1235 ...................................XXXX.........................................
1236 .................................XXXXXXXX.......................................
1237 ...............................XXXXXXXXXXX......................................
1238 ..............................XXXXXXXXXXXXX.....................................
1239 ..............................XXXXXXXXXXXXXXX...................................
1240 .............................XXXXXXXXXXXXXXXXXX.................................
1241 .............................XXXXXXXXXXXXXXXXXXX................................
1242 ............................XXXXXXXXXXXXXXXXXXXXXX..............................
1243 ............................XXXXXXXXXXXXXXXXXXXXXXX.............................
1244 ...........................XXXXXXXXXXXXXXXXXXXXXXXXX............................
1245 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1246 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1247 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1248 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1249 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1250 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1251 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1252 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1253 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1254 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1255 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1256 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1257 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
1258 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1259 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1260 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1261 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1262 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1263 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1264 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1265 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
1266 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1267 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
1268 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
1269 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1270 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1271 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1272 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1273 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1274 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1275 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1276 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1277 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1278 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1279 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1280 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1281 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1282 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1283 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1284 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1285 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
1286 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1287 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................................
1288 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
1289 ................XXXXXXXXXXXXXXXXXXXXXXXXX.......................................
1290 ................XXXXXXXXXXXXXXXXXXXXXXXX........................................
1291 ................XXXXXXXXXXXXXXXXXXXXXX..........................................
1292 .................XXXXXXXXXXXXXXXXXX.............................................
1293 .................XXXXXXXXXXXXXXXX...............................................
1294 ..................XXXXXXXXXXXXX.................................................
1295 ....................XXXXXXXX....................................................
1296 ................................................................................
1297 ................................................................................
1298 ................................................................................
1299 ................................................................................
1300 ................................................................................
1301 ................................................................................
1302 ................................................................................
1303 ................................................................................
1304 ................................................................................
1305 ................................................................................
1306   )X";
1307 
1308     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(1);
1309     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.3),
1310                               parseMatrix(reference)));
1311   }
1312 
1313   {
1314     std::string reference = R"X(
1315 ................................................................................
1316 ................................................................................
1317 ................................................................................
1318 ................................................................................
1319 ................................................................................
1320 ................................................................................
1321 ................................................................................
1322 ................................................................................
1323 ................................................................................
1324 ................................................................................
1325 ................................................................................
1326 ................................................................................
1327 ................................................................................
1328 ................................................................................
1329 ................................................................................
1330 ................................................................................
1331 ................................................................................
1332 ................................................................................
1333 ................................................................................
1334 ................................................................................
1335 .......................................X........................................
1336 ......................................XXX.......................................
1337 .....................................XXXXXX.....................................
1338 ....................................XXXXXXXX....................................
1339 ....................................XXXXXXXXXX..................................
1340 ...................................XXXXXXXXXXXX.................................
1341 ..................................XXXXXXXXXXXXXX................................
1342 .................................XXXXXXXXXXXXXXXXX..............................
1343 ................................XXXXXXXXXXXXXXXXXXX.............................
1344 ...............................XXXXXXXXXXXXXXXXXXXXXX...........................
1345 .............................XXXXXXXXXXXXXXXXXXXXXXXXX..........................
1346 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1347 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1348 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1349 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1350 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1351 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1352 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1353 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1354 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1355 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1356 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1357 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1358 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1359 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1360 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1361 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXX...............................
1362 .....................XXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1363 .....................XXXXXXXXXXXXXXXXXXXXXXXXX..................................
1364 ......................XXXXXXXXXXXXXXXXXXXXXXX...................................
1365 ......................XXXXXXXXXXXXXXXXXXXXX.....................................
1366 ......................XXXXXXXXXXXXXXXXXXXX......................................
1367 ......................XXXXXXXXXXXXXXXXXXX.......................................
1368 .......................XXXXXXXXXXXXXXXX.........................................
1369 .......................XXXXXXXXXXXXXXX..........................................
1370 .......................XXXXXXXXXXXXX............................................
1371 ........................XXXXXXXXXX..............................................
1372 ........................XXXXXXXXX...............................................
1373 ........................XXXXXXX.................................................
1374 .........................XXXX...................................................
1375 .........................XX.....................................................
1376 ................................................................................
1377 ................................................................................
1378 ................................................................................
1379 ................................................................................
1380 ................................................................................
1381 ................................................................................
1382 ................................................................................
1383 ................................................................................
1384 ................................................................................
1385 ................................................................................
1386 ................................................................................
1387 ................................................................................
1388 ................................................................................
1389 ................................................................................
1390 ................................................................................
1391 ................................................................................
1392 ................................................................................
1393 ................................................................................
1394 ................................................................................
1395   )X";
1396 
1397     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(-1);
1398     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1399                               parseMatrix(reference)));
1400   }
1401 
1402   {
1403     std::string reference = R"X(
1404 ................................................................................
1405 ................................................................................
1406 ................................................................................
1407 ................................................................................
1408 ................................................................................
1409 ................................................................................
1410 ................................................................................
1411 ................................................................................
1412 ................................................................................
1413 ................................................................................
1414 ................................................................................
1415 ................................................................................
1416 ................................................................................
1417 ................................................................................
1418 ................................................................................
1419 ................................XXXXX...........................................
1420 ...............................XXXXXXXXX........................................
1421 ...............................XXXXXXXXXX.......................................
1422 ...............................XXXXXXXXXX.......................................
1423 ...............................XXXXXXXXX........................................
1424 ...............................XXXXXXXXXXXXXX...................................
1425 .................................XXXXXXXXXXXXX..................................
1426 ..................................XXXXXXXXXXXXXX................................
1427 ..................................XXXXXXXXXXXXXXX...............................
1428 ..................................XXXXXXXXXXXXXXXXX.............................
1429 .................................XXXXXXXXXXXXXXXXXXX............................
1430 ................................XXXXXXXXXXXXXXXXXXXXXX..........................
1431 ...............................XXXXXXXXXXXXXXXXXXXXXXXX.........................
1432 ..............................XXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1433 .............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1434 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1435 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1436 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....X............
1437 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXX............
1438 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
1439 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1440 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1441 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1442 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1443 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1444 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1445 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1446 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1447 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1448 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1449 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1450 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1451 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1452 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1453 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1454 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1455 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1456 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
1457 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................................
1458 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................................
1459 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
1460 ................XXXXXXXXXXXXXXXXXXXXXXXXX.......................................
1461 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1462 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1463 ................XXXXXXXXXXXXXXXXXXXXXX..........................................
1464 ................XXXXXXXXXXXXXXXXXXXXXX..........................................
1465 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1466 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1467 .................XXXXXXXXXXXXXXXXXX.............................................
1468 ..................XXXXXXXXXXXXXXXX..............................................
1469 ....................XXXXXXXXXXX.................................................
1470 ................................................................................
1471 ................................................................................
1472 ................................................................................
1473 ................................................................................
1474 ................................................................................
1475 ................................................................................
1476 ................................................................................
1477 ................................................................................
1478 ................................................................................
1479 ................................................................................
1480 ................................................................................
1481 ................................................................................
1482 ................................................................................
1483 ................................................................................
1484   )X";
1485 
1486     BoundaryTolerance tolerance =
1487         BoundaryTolerance::Chi2Bound(Vector2(1, 100).asDiagonal(), 2);
1488     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.5),
1489                               parseMatrix(reference)));
1490   }
1491 
1492   {
1493     std::string reference = R"X(
1494 ................................................................................
1495 ................................................................................
1496 ................................................................................
1497 ................................................................................
1498 ................................................................................
1499 ................................................................................
1500 ................................................................................
1501 ................................................................................
1502 ................................................................................
1503 ................................................................................
1504 ................................................................................
1505 ................................................................................
1506 ................................................................................
1507 ................................................................................
1508 ................................................................................
1509 ................................................................................
1510 ..................................XX............................................
1511 .................................XXXX...........................................
1512 ................................XXXXXX..........................................
1513 ...............................XXXXXXXXX........................................
1514 ..............................XXXXXXXXXXX.......................................
1515 ..............................XXXXXXXXXXXX......................................
1516 .............................XXXXXXXXXXXXXX.....................................
1517 ...........................XXXXXXXXXXXXXXXXXX...................................
1518 ..........................XXXXXXXXXXXXXXXXXXXX..................................
1519 .........................XXXXXXXXXXXXXXXXXXXXXX.................................
1520 ........................XXXXXXXXXXXXXXXXXXXXXXXX................................
1521 .......................XXXXXXXXXXXXXXXXXXXXXXXXXX...............................
1522 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1523 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1524 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1525 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1526 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1527 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1528 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1529 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1530 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1531 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1532 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1533 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1534 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1535 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1536 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1537 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1538 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1539 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1540 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1541 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1542 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1543 .........................XXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1544 ..........................XXXXXXXXXXXXXXXXXXXXXXXX..............................
1545 ..........................XXXXXXXXXXXXXXXXXXXXXX................................
1546 ...........................XXXXXXXXXXXXXXXXXXXX.................................
1547 ...........................XXXXXXXXXXXXXXXXXXX..................................
1548 ............................XXXXXXXXXXXXXXXXX...................................
1549 ............................XXXXXXXXXXXXXXXX....................................
1550 .............................XXXXXXXXXXXXX......................................
1551 .............................XXXXXXXXXXXX.......................................
1552 ..............................XXXXXXXXXX........................................
1553 ..............................XXXXXXXX..........................................
1554 ...............................XXXXXX...........................................
1555 ...............................XXXX.............................................
1556 ...............................XXX..............................................
1557 ................................X...............................................
1558 ................................................................................
1559 ................................................................................
1560 ................................................................................
1561 ................................................................................
1562 ................................................................................
1563 ................................................................................
1564 ................................................................................
1565 ................................................................................
1566 ................................................................................
1567 ................................................................................
1568 ................................................................................
1569 ................................................................................
1570 ................................................................................
1571 ................................................................................
1572 ................................................................................
1573 ................................................................................
1574   )X";
1575 
1576     BoundaryTolerance tolerance =
1577         BoundaryTolerance::Chi2Bound(Vector2(1, 100).asDiagonal(), -2);
1578     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1579                               parseMatrix(reference)));
1580   }
1581 
1582   {
1583     std::string reference = R"X(
1584 ................................................................................
1585 ................................................................................
1586 ................................................................................
1587 ................................................................................
1588 ................................................................................
1589 ................................................................................
1590 ................................................................................
1591 ................................................................................
1592 ................................................................................
1593 ................................................................................
1594 ................................................................................
1595 ................................................................................
1596 ................................................................................
1597 ................................................................................
1598 ................................................................................
1599 .....................................X..........................................
1600 ..................................XXXXXXX.......................................
1601 .................................XXXXXXXXX......................................
1602 ................................XXXXXXXXXXXX....................................
1603 ................................XXXXXXXXXXXXX...................................
1604 ...............................XXXXXXXXXXXXXXXX.................................
1605 ..............................XXXXXXXXXXXXXXXXXX................................
1606 ..............................XXXXXXXXXXXXXXXXXXXX..............................
1607 .............................XXXXXXXXXXXXXXXXXXXXXX.............................
1608 ............................XXXXXXXXXXXXXXXXXXXXXXXX............................
1609 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1610 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1611 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1612 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1613 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1614 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1615 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1616 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1617 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1618 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1619 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1620 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1621 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1622 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1623 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1624 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1625 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1626 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1627 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1628 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1629 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1630 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1631 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1632 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1633 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1634 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1635 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1636 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1637 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1638 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
1639 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1640 ....................XXXXXXXXXXXXXXXXXXXXXXXXX...................................
1641 ....................XXXXXXXXXXXXXXXXXXXXXXX.....................................
1642 .....................XXXXXXXXXXXXXXXXXXXXX......................................
1643 .....................XXXXXXXXXXXXXXXXXXX........................................
1644 .....................XXXXXXXXXXXXXXXXX..........................................
1645 ......................XXXXXXXXXXXXXX............................................
1646 ......................XXXXXXXXXXX...............................................
1647 ........................XXXXXXX.................................................
1648 ................................................................................
1649 ................................................................................
1650 ................................................................................
1651 ................................................................................
1652 ................................................................................
1653 ................................................................................
1654 ................................................................................
1655 ................................................................................
1656 ................................................................................
1657 ................................................................................
1658 ................................................................................
1659 ................................................................................
1660 ................................................................................
1661 ................................................................................
1662 ................................................................................
1663 ................................................................................
1664   )X";
1665 
1666     BoundaryTolerance tolerance =
1667         BoundaryTolerance::Chi2Cartesian(Vector2(1, 1).asDiagonal(), 1);
1668     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.5),
1669                               parseMatrix(reference)));
1670   }
1671 
1672   {
1673     std::string reference = R"X(
1674 ................................................................................
1675 ................................................................................
1676 ................................................................................
1677 ................................................................................
1678 ................................................................................
1679 ................................................................................
1680 ................................................................................
1681 ................................................................................
1682 ................................................................................
1683 ................................................................................
1684 ................................................................................
1685 ................................................................................
1686 ................................................................................
1687 ................................................................................
1688 ................................................................................
1689 ................................................................................
1690 ................................................................................
1691 ................................................................................
1692 ................................................................................
1693 ................................................................................
1694 .......................................X........................................
1695 ......................................XXX.......................................
1696 .....................................XXXXXX.....................................
1697 ....................................XXXXXXXX....................................
1698 ....................................XXXXXXXXXX..................................
1699 ...................................XXXXXXXXXXXX.................................
1700 ..................................XXXXXXXXXXXXXX................................
1701 .................................XXXXXXXXXXXXXXXXX..............................
1702 ................................XXXXXXXXXXXXXXXXXXX.............................
1703 ...............................XXXXXXXXXXXXXXXXXXXXXX...........................
1704 .............................XXXXXXXXXXXXXXXXXXXXXXXXX..........................
1705 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1706 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1707 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1708 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1709 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1710 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1711 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1712 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1713 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1714 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1715 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1716 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1717 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1718 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1719 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1720 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXX...............................
1721 .....................XXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1722 .....................XXXXXXXXXXXXXXXXXXXXXXXXX..................................
1723 ......................XXXXXXXXXXXXXXXXXXXXXXX...................................
1724 ......................XXXXXXXXXXXXXXXXXXXXX.....................................
1725 ......................XXXXXXXXXXXXXXXXXXXX......................................
1726 ......................XXXXXXXXXXXXXXXXXXX.......................................
1727 .......................XXXXXXXXXXXXXXXX.........................................
1728 .......................XXXXXXXXXXXXXXX..........................................
1729 .......................XXXXXXXXXXXXX............................................
1730 ........................XXXXXXXXXX..............................................
1731 ........................XXXXXXXXX...............................................
1732 ........................XXXXXXX.................................................
1733 .........................XXXX...................................................
1734 .........................XX.....................................................
1735 ................................................................................
1736 ................................................................................
1737 ................................................................................
1738 ................................................................................
1739 ................................................................................
1740 ................................................................................
1741 ................................................................................
1742 ................................................................................
1743 ................................................................................
1744 ................................................................................
1745 ................................................................................
1746 ................................................................................
1747 ................................................................................
1748 ................................................................................
1749 ................................................................................
1750 ................................................................................
1751 ................................................................................
1752 ................................................................................
1753 ................................................................................
1754   )X";
1755 
1756     BoundaryTolerance tolerance =
1757         BoundaryTolerance::Chi2Cartesian(Vector2(1, 1).asDiagonal(), -1);
1758     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1759                               parseMatrix(reference)));
1760   }
1761 
1762   {
1763     std::string reference = R"X(
1764 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1765 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1766 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1767 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1768 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1769 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1770 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1771 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1772 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1773 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1774 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1775 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1776 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1777 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1778 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1779 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1780 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1781 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1782 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1783 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1784 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1785 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1786 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1787 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1788 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1789 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1790 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1791 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1792 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1793 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1794 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1795 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1796 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1797 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1798 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1799 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1800 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1801 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1802 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1803 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1804 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1805 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1806 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1807 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1808 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1809 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1810 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1811 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1812 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1813 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1814 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1815 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1816 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1817 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1818 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1819 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1820 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1821 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1822 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1823 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1824 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1825 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1826 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1827 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1828 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1829 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1830 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1831 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1832 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1833 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1834 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1835 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1836 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1837 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1838 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1839 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1840 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1841 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1842 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1843 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1844   )X";
1845 
1846     BoundaryTolerance tolerance = BoundaryTolerance::Infinite();
1847     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1848                               parseMatrix(reference)));
1849   }
1850 }
1851 
1852 BOOST_AUTO_TEST_SUITE_END()
1853 
1854 }  // namespace ActsTests