Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-10-17 08:00:39

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 GeometryContext gctx;
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 = surface.transform(gctx) * Vector3{min[0], min[1], 0};
0071   Vector3 max3 = surface.transform(gctx) * Vector3{max[0], max[1], 0};
0072 
0073   return {min3.head<2>(), max3.head<2>()};
0074 }
0075 
0076 TestMatrix makeTestMatrix(const RegularSurface& surface,
0077                           const BoundaryTolerance& tolerance,
0078                           double relMargin = 0.1) {
0079   auto [min, max] = boundingBox(surface, relMargin);
0080   Vector2 delta = max - min;
0081 
0082   TestMatrix testMatrix;
0083 
0084   Vector2 step = delta / (matrixResolution - 1);
0085 
0086   for (std::size_t i = 0; i < matrixResolution; ++i) {
0087     for (std::size_t j = 0; j < matrixResolution; ++j) {
0088       Vector2 query = min + Vector2(j, i).cwiseProduct(step);
0089       Vector2 local =
0090           surface.globalToLocal(gctx, Vector3{query[0], query[1], 0}).value();
0091       bool inside = surface.bounds().inside(local, tolerance);
0092       testMatrix.at(i).at(j) = inside ? 1 : 0;
0093     }
0094   }
0095 
0096   return testMatrix;
0097 }
0098 
0099 void printTestMatrix(const TestMatrix& matrix) {
0100   for (const auto& row : matrix) {
0101     for (std::uint8_t inside : row) {
0102       std::cout << (inside == 1 ? "X" : ".");
0103     }
0104     std::cout << std::endl;
0105   }
0106 }
0107 
0108 TestMatrix parseMatrix(const std::string& matrix) {
0109   TestMatrix result;
0110 
0111   std::size_t i = 0;
0112   std::size_t j = 0;
0113 
0114   for (auto it = matrix.find_first_not_of("\n "); it < matrix.size(); it++) {
0115     const char c = matrix.at(it);
0116     if (c == ' ') {
0117       continue;
0118     }
0119     if (c == '\n') {
0120       i += 1;
0121       j = 0;
0122       continue;
0123     }
0124     if (c == '.') {
0125       result.at(i).at(j) = 0;
0126     } else {
0127       result.at(i).at(j) = 1;
0128     }
0129     j += 1;
0130   }
0131 
0132   return result;
0133 }
0134 
0135 void printMatrixDiff(const TestMatrix& ref, const TestMatrix& act) {
0136   static const std::string s_ref = "-";
0137   static const std::string s_act = "+";
0138   static const std::string s_in = "X";
0139   static const std::string s_out = ".";
0140 
0141   bool tty = isatty(fileno(stdout)) != 0;
0142 
0143   // Print special output in case the reference is empty so we can easily update
0144   // the reference.
0145   bool refEmpty = std::ranges::all_of(ref, [](const auto& row) {
0146     return std::ranges::all_of(row, [](const auto& v) { return v == 0; });
0147   });
0148 
0149   auto red = [tty](const std::string& s) {
0150     if (!tty) {
0151       return s;
0152     }
0153     return "\033[1;31m" + s + "\033[0m";
0154   };
0155 
0156   auto green = [tty](const std::string& s) {
0157     if (!tty) {
0158       return s;
0159     }
0160     return "\033[1;32m" + s + "\033[0m";
0161   };
0162 
0163   for (std::size_t i = 0; i <= matrixResolution - 1; ++i) {
0164     for (std::size_t j = 0; j <= matrixResolution - 1; ++j) {
0165       bool insideRef = ref.at(i).at(j) == 1;
0166       bool insideAct = act.at(i).at(j) == 1;
0167 
0168       if (refEmpty) {
0169         std::cout << (insideAct ? s_in : s_out);
0170         continue;
0171       }
0172 
0173       if (!insideRef && !insideAct) {
0174         std::cout << s_out;
0175       }
0176       if (insideRef && !insideAct) {
0177         std::cout << red(s_ref);
0178       }
0179       if (!insideRef && insideAct) {
0180         std::cout << green(s_act);
0181       }
0182       if (insideRef && insideAct) {
0183         std::cout << s_in;
0184       }
0185     }
0186     std::cout << std::endl;
0187   }
0188 
0189   if (!refEmpty) {
0190     std::cout << red(s_ref + ": inside reference but not inside actual")
0191               << std::endl;
0192     std::cout << green(s_act + ": not inside reference but inside actual")
0193               << std::endl;
0194     std::cout << s_in + ": inside both" << std::endl;
0195     std::cout << s_out + ": outside both" << std::endl;
0196   } else {
0197     std::cout << red("REFERENCE IS EMPTY") << std::endl;
0198     std::cout << s_in + ": inside actual" << std::endl;
0199     std::cout << s_out + ": outside actual" << std::endl;
0200   }
0201 }
0202 
0203 boost::test_tools::predicate_result checkMatrices(const TestMatrix& val,
0204                                                   const TestMatrix& ref) {
0205   if (val == ref) {
0206     return true;
0207   }
0208   printMatrixDiff(ref, val);
0209   boost::test_tools::predicate_result res(false);
0210   res.message() << "Actual test matrix differs from reference";
0211   return res;
0212 }
0213 
0214 BOOST_AUTO_TEST_SUITE(SurfacesSuite)
0215 
0216 BOOST_AUTO_TEST_CASE(Rectangle) {
0217   auto bounds = std::make_shared<RectangleBounds>(10, 20);
0218   auto surface =
0219       Surface::makeShared<PlaneSurface>(Transform3::Identity(), bounds);
0220 
0221   BOOST_TEST_CONTEXT("None") {
0222     std::string reference = R"X(
0223 ................................................................................
0224 ................................................................................
0225 ................................................................................
0226 ................................................................................
0227 ................................................................................
0228 ................................................................................
0229 ................................................................................
0230 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0231 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
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 ................................................................................
0297 ................................................................................
0298 ................................................................................
0299 ................................................................................
0300 ................................................................................
0301 ................................................................................
0302 ................................................................................
0303   )X";
0304 
0305     BoundaryTolerance tolerance = BoundaryTolerance::None();
0306     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0307                               parseMatrix(reference)));
0308   }
0309 
0310   BOOST_TEST_CONTEXT("AbsoluteEuclidean(2)") {
0311     std::string reference = R"X(
0312 ................................................................................
0313 ................................................................................
0314 ................................................................................
0315 ................................................................................
0316 ................................................................................
0317 ................................................................................
0318 ................................................................................
0319 ................................................................................
0320 ................................................................................
0321 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0322 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0323 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
0324 ......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......
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 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0382 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0383 ................................................................................
0384 ................................................................................
0385 ................................................................................
0386 ................................................................................
0387 ................................................................................
0388 ................................................................................
0389 ................................................................................
0390 ................................................................................
0391 ................................................................................
0392   )X";
0393 
0394     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(2);
0395     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.2),
0396                               parseMatrix(reference)));
0397   }
0398 
0399   BOOST_TEST_CONTEXT("AbsoluteEuclidean(-2)") {
0400     std::string reference = R"X(
0401 ................................................................................
0402 ................................................................................
0403 ................................................................................
0404 ................................................................................
0405 ................................................................................
0406 ................................................................................
0407 ................................................................................
0408 ................................................................................
0409 ................................................................................
0410 ................................................................................
0411 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0412 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
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 ................................................................................
0472 ................................................................................
0473 ................................................................................
0474 ................................................................................
0475 ................................................................................
0476 ................................................................................
0477 ................................................................................
0478 ................................................................................
0479 ................................................................................
0480 ................................................................................
0481   )X";
0482 
0483     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(-2);
0484     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0485                               parseMatrix(reference)));
0486   }
0487 
0488   BOOST_TEST_CONTEXT("Chi2Bound(eye, 1)") {
0489     std::string reference = R"X(
0490 ................................................................................
0491 ................................................................................
0492 ................................................................................
0493 ................................................................................
0494 ................................................................................
0495 ................................................................................
0496 ................................................................................
0497 ................................................................................
0498 ................................................................................
0499 ................................................................................
0500 ................................................................................
0501 ................................................................................
0502 ................................................................................
0503 ................................................................................
0504 ................................................................................
0505 ................................................................................
0506 ................................................................................
0507 ................................................................................
0508 ................................................................................
0509 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0510 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0511 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
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 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0551 ................................................................................
0552 ................................................................................
0553 ................................................................................
0554 ................................................................................
0555 ................................................................................
0556 ................................................................................
0557 ................................................................................
0558 ................................................................................
0559 ................................................................................
0560 ................................................................................
0561 ................................................................................
0562 ................................................................................
0563 ................................................................................
0564 ................................................................................
0565 ................................................................................
0566 ................................................................................
0567 ................................................................................
0568 ................................................................................
0569 ................................................................................
0570   )X";
0571 
0572     BoundaryTolerance tolerance =
0573         BoundaryTolerance::Chi2Bound(SquareMatrix2::Identity(), 2);
0574     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.5),
0575                               parseMatrix(reference)));
0576   }
0577 
0578   BOOST_TEST_CONTEXT("Chi2Bound(eye, -1)") {
0579     std::string reference = R"X(
0580 ................................................................................
0581 ................................................................................
0582 ................................................................................
0583 ................................................................................
0584 ................................................................................
0585 ................................................................................
0586 ................................................................................
0587 ................................................................................
0588 ................................................................................
0589 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0590 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
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 ................................................................................
0652 ................................................................................
0653 ................................................................................
0654 ................................................................................
0655 ................................................................................
0656 ................................................................................
0657 ................................................................................
0658 ................................................................................
0659 ................................................................................
0660   )X";
0661 
0662     BoundaryTolerance tolerance =
0663         BoundaryTolerance::Chi2Bound(SquareMatrix2::Identity(), -2);
0664     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0665                               parseMatrix(reference)));
0666   }
0667 }
0668 
0669 BOOST_AUTO_TEST_CASE(Trapezoid) {
0670   auto bounds = std::make_shared<TrapezoidBounds>(10, 20, 5, 0.1);
0671   auto surface =
0672       Surface::makeShared<PlaneSurface>(Transform3::Identity(), bounds);
0673 
0674   BOOST_TEST_CONTEXT("None") {
0675     std::string reference = R"X(
0676 ................................................................................
0677 ................................................................................
0678 ................................................................................
0679 ................................................................................
0680 ................................................................................
0681 ................................................................................
0682 ................................................................................
0683 .....................................................XX.........................
0684 ..................................................XXXXX.........................
0685 ...............................................XXXXXXXXX........................
0686 ............................................XXXXXXXXXXXX........................
0687 ........................................XXXXXXXXXXXXXXXXX.......................
0688 .....................................XXXXXXXXXXXXXXXXXXXX.......................
0689 ..................................XXXXXXXXXXXXXXXXXXXXXXX.......................
0690 ...............................XXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0691 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0692 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0693 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0694 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0695 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0696 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0697 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0698 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0699 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0700 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0701 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0702 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0703 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0704 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0705 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0706 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0707 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0708 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0709 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0710 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0711 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0712 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0713 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0714 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0715 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0716 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0717 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0718 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0719 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0720 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0721 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0722 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0723 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0724 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0725 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0726 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0727 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
0728 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
0729 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0730 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0731 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0732 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0733 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0734 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
0735 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
0736 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
0737 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................................
0738 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................................
0739 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................................
0740 .........XXXXXXXXXXXXXXXXXXXXXXXXX..............................................
0741 .........XXXXXXXXXXXXXXXXXXXXXX.................................................
0742 .........XXXXXXXXXXXXXXXXXXX....................................................
0743 .........XXXXXXXXXXXXXXXX.......................................................
0744 ........XXXXXXXXXXXXX...........................................................
0745 ........XXXXXXXXXX..............................................................
0746 ........XXXXXXX.................................................................
0747 .......XXXXX....................................................................
0748 .......X........................................................................
0749 ................................................................................
0750 ................................................................................
0751 ................................................................................
0752 ................................................................................
0753 ................................................................................
0754 ................................................................................
0755 ................................................................................
0756   )X";
0757     BoundaryTolerance tolerance = BoundaryTolerance::None();
0758     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0759                               parseMatrix(reference)));
0760   }
0761 
0762   BOOST_TEST_CONTEXT("AbsoluteEuclidean(2)") {
0763     std::string reference = R"X(
0764 ................................................................................
0765 ................................................................................
0766 ................................................................................
0767 ...................................................XXX..........................
0768 ................................................XXXXXX..........................
0769 .............................................XXXXXXXXXX.........................
0770 .........................................XXXXXXXXXXXXXX.........................
0771 ......................................XXXXXXXXXXXXXXXXX.........................
0772 ...................................XXXXXXXXXXXXXXXXXXXXX........................
0773 ................................XXXXXXXXXXXXXXXXXXXXXXXX........................
0774 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0775 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0776 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0777 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0778 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0779 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0780 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0781 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0782 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0783 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0784 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0785 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0786 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0787 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0788 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0789 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0790 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0791 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0792 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0793 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0794 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0795 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0796 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0797 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0798 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
0799 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0800 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0801 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
0802 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0803 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0804 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0805 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0806 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
0807 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0808 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0809 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0810 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0811 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0812 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0813 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0814 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0815 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0816 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0817 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0818 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0819 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
0820 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0821 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0822 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
0823 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
0824 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
0825 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0826 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0827 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
0828 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
0829 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............................
0830 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................................
0831 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
0832 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................................
0833 .........XXXXXXXXXXXXXXXXXXXXXXXXXXX............................................
0834 .........XXXXXXXXXXXXXXXXXXXXXXXX...............................................
0835 .........XXXXXXXXXXXXXXXXXXXXX..................................................
0836 .........XXXXXXXXXXXXXXXXX......................................................
0837 ..........XXXXXXXXXXXXX.........................................................
0838 ..........XXXXXXXXXX............................................................
0839 ..........XXXXXXX...............................................................
0840 ...........XX...................................................................
0841 ................................................................................
0842 ................................................................................
0843 ................................................................................
0844   )X";
0845     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(2);
0846     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.2),
0847                               parseMatrix(reference)));
0848   }
0849 
0850   BOOST_TEST_CONTEXT("AbsoluteEuclidean(-2)") {
0851     std::string reference = R"X(
0852 ................................................................................
0853 ................................................................................
0854 ................................................................................
0855 ................................................................................
0856 ................................................................................
0857 ................................................................................
0858 ................................................................................
0859 ................................................................................
0860 ................................................................................
0861 ................................................................................
0862 ................................................................................
0863 ................................................................................
0864 ................................................................................
0865 ................................................................................
0866 ................................................................................
0867 ................................................................................
0868 ................................................................................
0869 ................................................................................
0870 ...................................................XXX..........................
0871 ................................................XXXXXXX.........................
0872 ............................................XXXXXXXXXXX.........................
0873 .........................................XXXXXXXXXXXXXX.........................
0874 ......................................XXXXXXXXXXXXXXXXXX........................
0875 ...................................XXXXXXXXXXXXXXXXXXXXX........................
0876 ...............................XXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0877 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0878 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0879 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0880 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0881 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0882 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0883 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0884 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0885 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0886 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0887 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0888 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0889 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0890 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0891 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
0892 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0893 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0894 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0895 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0896 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
0897 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
0898 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0899 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
0900 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
0901 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
0902 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
0903 .................XXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
0904 .................XXXXXXXXXXXXXXXXXXXXXXX........................................
0905 .................XXXXXXXXXXXXXXXXXXXX...........................................
0906 ................XXXXXXXXXXXXXXXXXX..............................................
0907 ................XXXXXXXXXXXXXX..................................................
0908 ................XXXXXXXXXXX.....................................................
0909 ...............XXXXXXXXX........................................................
0910 ...............XXXXXX...........................................................
0911 ...............XX...............................................................
0912 ................................................................................
0913 ................................................................................
0914 ................................................................................
0915 ................................................................................
0916 ................................................................................
0917 ................................................................................
0918 ................................................................................
0919 ................................................................................
0920 ................................................................................
0921 ................................................................................
0922 ................................................................................
0923 ................................................................................
0924 ................................................................................
0925 ................................................................................
0926 ................................................................................
0927 ................................................................................
0928 ................................................................................
0929 ................................................................................
0930 ................................................................................
0931 ................................................................................
0932   )X";
0933 
0934     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(-2);
0935     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
0936                               parseMatrix(reference)));
0937   }
0938 
0939   BOOST_TEST_CONTEXT("Chi2Bound(eye, 1)") {
0940     std::string reference = R"X(
0941 ................................................................................
0942 ................................................................................
0943 ................................................................................
0944 ................................................................................
0945 ................................................................................
0946 ................................................................................
0947 ................................................................................
0948 ................................................................................
0949 ................................................................................
0950 ................................................................................
0951 ................................................................................
0952 ................................................................................
0953 ................................................................................
0954 ................................................................................
0955 ................................................................................
0956 ................................................................................
0957 ...............................................XXX..............................
0958 ............................................XXXXXX..............................
0959 ........................................XXXXXXXXXX..............................
0960 .....................................XXXXXXXXXXXXXX.............................
0961 ..................................XXXXXXXXXXXXXXXXX.............................
0962 ...............................XXXXXXXXXXXXXXXXXXXXX............................
0963 ............................XXXXXXXXXXXXXXXXXXXXXXXX............................
0964 ............................XXXXXXXXXXXXXXXXXXXXXXXX............................
0965 ............................XXXXXXXXXXXXXXXXXXXXXXXXX...........................
0966 ............................XXXXXXXXXXXXXXXXXXXXXXXXX...........................
0967 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
0968 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
0969 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
0970 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
0971 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
0972 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
0973 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
0974 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
0975 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0976 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
0977 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0978 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0979 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0980 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0981 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
0982 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0983 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0984 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0985 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0986 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0987 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0988 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0989 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0990 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0991 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
0992 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
0993 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
0994 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
0995 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
0996 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
0997 ...................XXXXXXXXXXXXXXXXXXXXXXXXXX...................................
0998 ...................XXXXXXXXXXXXXXXXXXXXXXX......................................
0999 ...................XXXXXXXXXXXXXXXXXXX..........................................
1000 ...................XXXXXXXXXXXXXXXX.............................................
1001 ...................XXXXXXXXXXXXX................................................
1002 ...................XXXXXXXXXX...................................................
1003 ...................XXXXXX.......................................................
1004 ....................XX..........................................................
1005 ................................................................................
1006 ................................................................................
1007 ................................................................................
1008 ................................................................................
1009 ................................................................................
1010 ................................................................................
1011 ................................................................................
1012 ................................................................................
1013 ................................................................................
1014 ................................................................................
1015 ................................................................................
1016 ................................................................................
1017 ................................................................................
1018 ................................................................................
1019 ................................................................................
1020 ................................................................................
1021   )X";
1022 
1023     BoundaryTolerance tolerance =
1024         BoundaryTolerance::Chi2Bound(SquareMatrix2::Identity(), 2);
1025     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.5),
1026                               parseMatrix(reference)));
1027   }
1028 
1029   BOOST_TEST_CONTEXT("Chi2Bound(eye, -1)") {
1030     std::string reference = R"X(
1031 ................................................................................
1032 ................................................................................
1033 ................................................................................
1034 ................................................................................
1035 ................................................................................
1036 ................................................................................
1037 ................................................................................
1038 ................................................................................
1039 ................................................................................
1040 ................................................................................
1041 ................................................................................
1042 ................................................................................
1043 ................................................................................
1044 ................................................................................
1045 ................................................................................
1046 ...................................................XXX..........................
1047 ................................................XXXXXXX.........................
1048 ............................................XXXXXXXXXXX.........................
1049 .........................................XXXXXXXXXXXXXXX........................
1050 ......................................XXXXXXXXXXXXXXXXXX........................
1051 ...................................XXXXXXXXXXXXXXXXXXXXX........................
1052 ................................XXXXXXXXXXXXXXXXXXXXXXXXX.......................
1053 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1054 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1055 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1056 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1057 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1058 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1059 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1060 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1061 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1062 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1063 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1064 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1065 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1066 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1067 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1068 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1069 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1070 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1071 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1072 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1073 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1074 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1075 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1076 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1077 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1078 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1079 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1080 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1081 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1082 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1083 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1084 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1085 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
1086 ...............XXXXXXXXXXXXXXXXXXXXXXXXX........................................
1087 ..............XXXXXXXXXXXXXXXXXXXXXXX...........................................
1088 ..............XXXXXXXXXXXXXXXXXXXX..............................................
1089 ..............XXXXXXXXXXXXXXXX..................................................
1090 ..............XXXXXXXXXXXXX.....................................................
1091 .............XXXXXXXXXXX........................................................
1092 .............XXXXXXXX...........................................................
1093 .............XXXX...............................................................
1094 .............X..................................................................
1095 ................................................................................
1096 ................................................................................
1097 ................................................................................
1098 ................................................................................
1099 ................................................................................
1100 ................................................................................
1101 ................................................................................
1102 ................................................................................
1103 ................................................................................
1104 ................................................................................
1105 ................................................................................
1106 ................................................................................
1107 ................................................................................
1108 ................................................................................
1109 ................................................................................
1110 ................................................................................
1111   )X";
1112 
1113     BoundaryTolerance tolerance =
1114         BoundaryTolerance::Chi2Bound(SquareMatrix2::Identity(), -2);
1115     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1116                               parseMatrix(reference)));
1117   }
1118 }
1119 
1120 BOOST_AUTO_TEST_CASE(Annulus) {
1121   const double minRadius = 7.2;
1122   const double maxRadius = 12.0;
1123   const double minPhi = 0.74195;
1124   const double maxPhi = 1.33970;
1125 
1126   const Vector2 offset(-2., 2.);
1127 
1128   auto bounds = std::make_shared<AnnulusBounds>(minRadius, maxRadius, minPhi,
1129                                                 maxPhi, offset);
1130   auto surface =
1131       Surface::makeShared<DiscSurface>(Transform3::Identity(), bounds);
1132 
1133   {
1134     std::string reference = R"X(
1135 ................................................................................
1136 ................................................................................
1137 ................................................................................
1138 ................................................................................
1139 ................................................................................
1140 ................................................................................
1141 ................................................................................
1142 ....................................X...........................................
1143 ...................................XXX..........................................
1144 ...................................XXXX.........................................
1145 ..................................XXXXXXX.......................................
1146 ..................................XXXXXXXX......................................
1147 .................................XXXXXXXXXXX....................................
1148 ................................XXXXXXXXXXXXX...................................
1149 ................................XXXXXXXXXXXXXX..................................
1150 ...............................XXXXXXXXXXXXXXXXX................................
1151 ..............................XXXXXXXXXXXXXXXXXXX...............................
1152 ..............................XXXXXXXXXXXXXXXXXXXXX.............................
1153 .............................XXXXXXXXXXXXXXXXXXXXXXX............................
1154 ............................XXXXXXXXXXXXXXXXXXXXXXXXX...........................
1155 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1156 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1157 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1158 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1159 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1160 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1161 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1162 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1163 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1164 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1165 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1166 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
1167 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1168 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......
1169 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1170 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1171 .......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1172 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
1173 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1174 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
1175 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1176 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1177 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1178 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1179 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1180 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1181 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1182 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1183 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1184 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1185 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1186 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1187 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1188 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1189 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1190 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1191 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1192 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
1193 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1194 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................................
1195 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................................
1196 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXX......................................
1197 ...............XXXXXXXXXXXXXXXXXXXXXXXXXX.......................................
1198 ................XXXXXXXXXXXXXXXXXXXXXXX.........................................
1199 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1200 ................XXXXXXXXXXXXXXXXXXX.............................................
1201 ................XXXXXXXXXXXXXXXXX...............................................
1202 .................XXXXXXXXXXXXXX.................................................
1203 .................XXXXXXXXXXXX...................................................
1204 .................XXXXXXXXXX.....................................................
1205 ..................XXXXXXX.......................................................
1206 ..................XXXX..........................................................
1207 ..................XX............................................................
1208 ................................................................................
1209 ................................................................................
1210 ................................................................................
1211 ................................................................................
1212 ................................................................................
1213 ................................................................................
1214 ................................................................................
1215   )X";
1216 
1217     BoundaryTolerance tolerance = BoundaryTolerance::None();
1218     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1219                               parseMatrix(reference)));
1220   }
1221 
1222   {
1223     std::string reference = R"X(
1224 ................................................................................
1225 ................................................................................
1226 ................................................................................
1227 ................................................................................
1228 ................................................................................
1229 ................................................................................
1230 ................................................................................
1231 ................................................................................
1232 ................................................................................
1233 ...................................XXXX.........................................
1234 .................................XXXXXXXX.......................................
1235 ...............................XXXXXXXXXXX......................................
1236 ..............................XXXXXXXXXXXXX.....................................
1237 ..............................XXXXXXXXXXXXXXX...................................
1238 .............................XXXXXXXXXXXXXXXXXX.................................
1239 .............................XXXXXXXXXXXXXXXXXXX................................
1240 ............................XXXXXXXXXXXXXXXXXXXXXX..............................
1241 ............................XXXXXXXXXXXXXXXXXXXXXXX.............................
1242 ...........................XXXXXXXXXXXXXXXXXXXXXXXXX............................
1243 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1244 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1245 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1246 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1247 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1248 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1249 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1250 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1251 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1252 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1253 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1254 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1255 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
1256 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1257 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1258 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1259 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1260 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........
1261 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1262 ........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........
1263 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........
1264 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1265 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
1266 .........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
1267 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1268 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1269 ..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1270 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1271 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1272 ...........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1273 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1274 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1275 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1276 ............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1277 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1278 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1279 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1280 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1281 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1282 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1283 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
1284 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1285 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................................
1286 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
1287 ................XXXXXXXXXXXXXXXXXXXXXXXXX.......................................
1288 ................XXXXXXXXXXXXXXXXXXXXXXXX........................................
1289 ................XXXXXXXXXXXXXXXXXXXXXX..........................................
1290 .................XXXXXXXXXXXXXXXXXX.............................................
1291 .................XXXXXXXXXXXXXXXX...............................................
1292 ..................XXXXXXXXXXXXX.................................................
1293 ....................XXXXXXXX....................................................
1294 ................................................................................
1295 ................................................................................
1296 ................................................................................
1297 ................................................................................
1298 ................................................................................
1299 ................................................................................
1300 ................................................................................
1301 ................................................................................
1302 ................................................................................
1303 ................................................................................
1304   )X";
1305 
1306     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(1);
1307     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.3),
1308                               parseMatrix(reference)));
1309   }
1310 
1311   {
1312     std::string reference = R"X(
1313 ................................................................................
1314 ................................................................................
1315 ................................................................................
1316 ................................................................................
1317 ................................................................................
1318 ................................................................................
1319 ................................................................................
1320 ................................................................................
1321 ................................................................................
1322 ................................................................................
1323 ................................................................................
1324 ................................................................................
1325 ................................................................................
1326 ................................................................................
1327 ................................................................................
1328 ................................................................................
1329 ................................................................................
1330 ................................................................................
1331 ................................................................................
1332 ................................................................................
1333 .......................................X........................................
1334 ......................................XXX.......................................
1335 .....................................XXXXXX.....................................
1336 ....................................XXXXXXXX....................................
1337 ....................................XXXXXXXXXX..................................
1338 ...................................XXXXXXXXXXXX.................................
1339 ..................................XXXXXXXXXXXXXX................................
1340 .................................XXXXXXXXXXXXXXXXX..............................
1341 ................................XXXXXXXXXXXXXXXXXXX.............................
1342 ...............................XXXXXXXXXXXXXXXXXXXXXX...........................
1343 .............................XXXXXXXXXXXXXXXXXXXXXXXXX..........................
1344 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1345 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1346 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1347 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1348 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1349 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1350 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1351 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1352 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1353 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1354 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1355 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1356 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1357 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1358 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1359 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXX...............................
1360 .....................XXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1361 .....................XXXXXXXXXXXXXXXXXXXXXXXXX..................................
1362 ......................XXXXXXXXXXXXXXXXXXXXXXX...................................
1363 ......................XXXXXXXXXXXXXXXXXXXXX.....................................
1364 ......................XXXXXXXXXXXXXXXXXXXX......................................
1365 ......................XXXXXXXXXXXXXXXXXXX.......................................
1366 .......................XXXXXXXXXXXXXXXX.........................................
1367 .......................XXXXXXXXXXXXXXX..........................................
1368 .......................XXXXXXXXXXXXX............................................
1369 ........................XXXXXXXXXX..............................................
1370 ........................XXXXXXXXX...............................................
1371 ........................XXXXXXX.................................................
1372 .........................XXXX...................................................
1373 .........................XX.....................................................
1374 ................................................................................
1375 ................................................................................
1376 ................................................................................
1377 ................................................................................
1378 ................................................................................
1379 ................................................................................
1380 ................................................................................
1381 ................................................................................
1382 ................................................................................
1383 ................................................................................
1384 ................................................................................
1385 ................................................................................
1386 ................................................................................
1387 ................................................................................
1388 ................................................................................
1389 ................................................................................
1390 ................................................................................
1391 ................................................................................
1392 ................................................................................
1393   )X";
1394 
1395     BoundaryTolerance tolerance = BoundaryTolerance::AbsoluteEuclidean(-1);
1396     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1397                               parseMatrix(reference)));
1398   }
1399 
1400   {
1401     std::string reference = R"X(
1402 ................................................................................
1403 ................................................................................
1404 ................................................................................
1405 ................................................................................
1406 ................................................................................
1407 ................................................................................
1408 ................................................................................
1409 ................................................................................
1410 ................................................................................
1411 ................................................................................
1412 ................................................................................
1413 ................................................................................
1414 ................................................................................
1415 ................................................................................
1416 ................................................................................
1417 ................................XXXXX...........................................
1418 ...............................XXXXXXXXX........................................
1419 ...............................XXXXXXXXXX.......................................
1420 ...............................XXXXXXXXXX.......................................
1421 ...............................XXXXXXXXX........................................
1422 ...............................XXXXXXXXXXXXXX...................................
1423 .................................XXXXXXXXXXXXX..................................
1424 ..................................XXXXXXXXXXXXXX................................
1425 ..................................XXXXXXXXXXXXXXX...............................
1426 ..................................XXXXXXXXXXXXXXXXX.............................
1427 .................................XXXXXXXXXXXXXXXXXXX............................
1428 ................................XXXXXXXXXXXXXXXXXXXXXX..........................
1429 ...............................XXXXXXXXXXXXXXXXXXXXXXXX.........................
1430 ..............................XXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1431 .............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1432 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1433 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1434 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....X............
1435 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXX............
1436 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............
1437 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............
1438 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........
1439 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1440 .............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1441 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1442 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1443 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1444 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1445 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1446 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1447 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1448 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1449 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1450 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1451 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1452 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1453 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1454 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
1455 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................................
1456 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................................
1457 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................................
1458 ................XXXXXXXXXXXXXXXXXXXXXXXXX.......................................
1459 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1460 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1461 ................XXXXXXXXXXXXXXXXXXXXXX..........................................
1462 ................XXXXXXXXXXXXXXXXXXXXXX..........................................
1463 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1464 ................XXXXXXXXXXXXXXXXXXXXX...........................................
1465 .................XXXXXXXXXXXXXXXXXX.............................................
1466 ..................XXXXXXXXXXXXXXXX..............................................
1467 ....................XXXXXXXXXXX.................................................
1468 ................................................................................
1469 ................................................................................
1470 ................................................................................
1471 ................................................................................
1472 ................................................................................
1473 ................................................................................
1474 ................................................................................
1475 ................................................................................
1476 ................................................................................
1477 ................................................................................
1478 ................................................................................
1479 ................................................................................
1480 ................................................................................
1481 ................................................................................
1482   )X";
1483 
1484     BoundaryTolerance tolerance =
1485         BoundaryTolerance::Chi2Bound(Vector2(1, 100).asDiagonal(), 2);
1486     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.5),
1487                               parseMatrix(reference)));
1488   }
1489 
1490   {
1491     std::string reference = R"X(
1492 ................................................................................
1493 ................................................................................
1494 ................................................................................
1495 ................................................................................
1496 ................................................................................
1497 ................................................................................
1498 ................................................................................
1499 ................................................................................
1500 ................................................................................
1501 ................................................................................
1502 ................................................................................
1503 ................................................................................
1504 ................................................................................
1505 ................................................................................
1506 ................................................................................
1507 ................................................................................
1508 ..................................XX............................................
1509 .................................XXXX...........................................
1510 ................................XXXXXX..........................................
1511 ...............................XXXXXXXXX........................................
1512 ..............................XXXXXXXXXXX.......................................
1513 ..............................XXXXXXXXXXXX......................................
1514 .............................XXXXXXXXXXXXXX.....................................
1515 ...........................XXXXXXXXXXXXXXXXXX...................................
1516 ..........................XXXXXXXXXXXXXXXXXXXX..................................
1517 .........................XXXXXXXXXXXXXXXXXXXXXX.................................
1518 ........................XXXXXXXXXXXXXXXXXXXXXXXX................................
1519 .......................XXXXXXXXXXXXXXXXXXXXXXXXXX...............................
1520 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1521 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1522 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1523 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1524 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1525 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1526 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1527 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1528 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1529 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1530 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1531 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1532 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1533 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1534 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1535 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1536 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1537 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1538 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1539 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1540 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1541 .........................XXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1542 ..........................XXXXXXXXXXXXXXXXXXXXXXXX..............................
1543 ..........................XXXXXXXXXXXXXXXXXXXXXX................................
1544 ...........................XXXXXXXXXXXXXXXXXXXX.................................
1545 ...........................XXXXXXXXXXXXXXXXXXX..................................
1546 ............................XXXXXXXXXXXXXXXXX...................................
1547 ............................XXXXXXXXXXXXXXXX....................................
1548 .............................XXXXXXXXXXXXX......................................
1549 .............................XXXXXXXXXXXX.......................................
1550 ..............................XXXXXXXXXX........................................
1551 ..............................XXXXXXXX..........................................
1552 ...............................XXXXXX...........................................
1553 ...............................XXXX.............................................
1554 ...............................XXX..............................................
1555 ................................X...............................................
1556 ................................................................................
1557 ................................................................................
1558 ................................................................................
1559 ................................................................................
1560 ................................................................................
1561 ................................................................................
1562 ................................................................................
1563 ................................................................................
1564 ................................................................................
1565 ................................................................................
1566 ................................................................................
1567 ................................................................................
1568 ................................................................................
1569 ................................................................................
1570 ................................................................................
1571 ................................................................................
1572   )X";
1573 
1574     BoundaryTolerance tolerance =
1575         BoundaryTolerance::Chi2Bound(Vector2(1, 100).asDiagonal(), -2);
1576     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1577                               parseMatrix(reference)));
1578   }
1579 
1580   {
1581     std::string reference = R"X(
1582 ................................................................................
1583 ................................................................................
1584 ................................................................................
1585 ................................................................................
1586 ................................................................................
1587 ................................................................................
1588 ................................................................................
1589 ................................................................................
1590 ................................................................................
1591 ................................................................................
1592 ................................................................................
1593 ................................................................................
1594 ................................................................................
1595 ................................................................................
1596 ................................................................................
1597 .....................................X..........................................
1598 ..................................XXXXXXX.......................................
1599 .................................XXXXXXXXX......................................
1600 ................................XXXXXXXXXXXX....................................
1601 ................................XXXXXXXXXXXXX...................................
1602 ...............................XXXXXXXXXXXXXXXX.................................
1603 ..............................XXXXXXXXXXXXXXXXXX................................
1604 ..............................XXXXXXXXXXXXXXXXXXXX..............................
1605 .............................XXXXXXXXXXXXXXXXXXXXXX.............................
1606 ............................XXXXXXXXXXXXXXXXXXXXXXXX............................
1607 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1608 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1609 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1610 ........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1611 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1612 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1613 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1614 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1615 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1616 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1617 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1618 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............
1619 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1620 ..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............
1621 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................
1622 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1623 ...............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................
1624 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................
1625 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................
1626 ................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1627 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1628 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1629 .................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1630 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1631 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1632 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1633 ..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1634 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1635 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1636 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX................................
1637 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1638 ....................XXXXXXXXXXXXXXXXXXXXXXXXX...................................
1639 ....................XXXXXXXXXXXXXXXXXXXXXXX.....................................
1640 .....................XXXXXXXXXXXXXXXXXXXXX......................................
1641 .....................XXXXXXXXXXXXXXXXXXX........................................
1642 .....................XXXXXXXXXXXXXXXXX..........................................
1643 ......................XXXXXXXXXXXXXX............................................
1644 ......................XXXXXXXXXXX...............................................
1645 ........................XXXXXXX.................................................
1646 ................................................................................
1647 ................................................................................
1648 ................................................................................
1649 ................................................................................
1650 ................................................................................
1651 ................................................................................
1652 ................................................................................
1653 ................................................................................
1654 ................................................................................
1655 ................................................................................
1656 ................................................................................
1657 ................................................................................
1658 ................................................................................
1659 ................................................................................
1660 ................................................................................
1661 ................................................................................
1662   )X";
1663 
1664     BoundaryTolerance tolerance =
1665         BoundaryTolerance::Chi2Cartesian(Vector2(1, 1).asDiagonal(), 1);
1666     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance, 0.5),
1667                               parseMatrix(reference)));
1668   }
1669 
1670   {
1671     std::string reference = R"X(
1672 ................................................................................
1673 ................................................................................
1674 ................................................................................
1675 ................................................................................
1676 ................................................................................
1677 ................................................................................
1678 ................................................................................
1679 ................................................................................
1680 ................................................................................
1681 ................................................................................
1682 ................................................................................
1683 ................................................................................
1684 ................................................................................
1685 ................................................................................
1686 ................................................................................
1687 ................................................................................
1688 ................................................................................
1689 ................................................................................
1690 ................................................................................
1691 ................................................................................
1692 .......................................X........................................
1693 ......................................XXX.......................................
1694 .....................................XXXXXX.....................................
1695 ....................................XXXXXXXX....................................
1696 ....................................XXXXXXXXXX..................................
1697 ...................................XXXXXXXXXXXX.................................
1698 ..................................XXXXXXXXXXXXXX................................
1699 .................................XXXXXXXXXXXXXXXXX..............................
1700 ................................XXXXXXXXXXXXXXXXXXX.............................
1701 ...............................XXXXXXXXXXXXXXXXXXXXXX...........................
1702 .............................XXXXXXXXXXXXXXXXXXXXXXXXX..........................
1703 ............................XXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1704 ...........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1705 ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1706 .........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1707 .......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................
1708 ......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....................
1709 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
1710 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................
1711 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................
1712 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.........................
1713 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..........................
1714 ...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...........................
1715 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................
1716 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................
1717 ....................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................
1718 .....................XXXXXXXXXXXXXXXXXXXXXXXXXXXX...............................
1719 .....................XXXXXXXXXXXXXXXXXXXXXXXXXX.................................
1720 .....................XXXXXXXXXXXXXXXXXXXXXXXXX..................................
1721 ......................XXXXXXXXXXXXXXXXXXXXXXX...................................
1722 ......................XXXXXXXXXXXXXXXXXXXXX.....................................
1723 ......................XXXXXXXXXXXXXXXXXXXX......................................
1724 ......................XXXXXXXXXXXXXXXXXXX.......................................
1725 .......................XXXXXXXXXXXXXXXX.........................................
1726 .......................XXXXXXXXXXXXXXX..........................................
1727 .......................XXXXXXXXXXXXX............................................
1728 ........................XXXXXXXXXX..............................................
1729 ........................XXXXXXXXX...............................................
1730 ........................XXXXXXX.................................................
1731 .........................XXXX...................................................
1732 .........................XX.....................................................
1733 ................................................................................
1734 ................................................................................
1735 ................................................................................
1736 ................................................................................
1737 ................................................................................
1738 ................................................................................
1739 ................................................................................
1740 ................................................................................
1741 ................................................................................
1742 ................................................................................
1743 ................................................................................
1744 ................................................................................
1745 ................................................................................
1746 ................................................................................
1747 ................................................................................
1748 ................................................................................
1749 ................................................................................
1750 ................................................................................
1751 ................................................................................
1752   )X";
1753 
1754     BoundaryTolerance tolerance =
1755         BoundaryTolerance::Chi2Cartesian(Vector2(1, 1).asDiagonal(), -1);
1756     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1757                               parseMatrix(reference)));
1758   }
1759 
1760   {
1761     std::string reference = R"X(
1762 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1763 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
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   )X";
1843 
1844     BoundaryTolerance tolerance = BoundaryTolerance::Infinite();
1845     BOOST_CHECK(checkMatrices(makeTestMatrix(*surface, tolerance),
1846                               parseMatrix(reference)));
1847   }
1848 }
1849 
1850 BOOST_AUTO_TEST_SUITE_END()
1851 
1852 }  // namespace ActsTests