From 01be01effedfe7b0a635d562ec5fe653abcf911d Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Tue, 15 May 2018 22:50:19 +0200 Subject: Fixed iterator arithmetic for small diags --- geom_matching/wasserstein/include/dnn/local/kd-tree.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geom_matching/wasserstein/include/dnn/local/kd-tree.hpp b/geom_matching/wasserstein/include/dnn/local/kd-tree.hpp index 3a4f0eb..bdeef45 100644 --- a/geom_matching/wasserstein/include/dnn/local/kd-tree.hpp +++ b/geom_matching/wasserstein/include/dnn/local/kd-tree.hpp @@ -101,7 +101,7 @@ hera::ws::dnn::KDTree::OrderTree size_t next_i = (i + 1) % traits.dimension(); // Replace with a size condition instead? - if (b < m - 1) q.push(KDTreeNode(b, m, next_i)); + if (m - b > 1) q.push(KDTreeNode(b, m, next_i)); if (e - m > 2) q.push(KDTreeNode(m+1, e, next_i)); } } -- cgit v1.2.3 From 75cf0745e95a37c8d65e7a283a11cd500ab6edc2 Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Sat, 19 May 2018 20:17:53 +0200 Subject: Points at infinity handled correctly. 1. Reader copied from wasserstein code, can parse inf, moved to hera namespace. 2. addProjections removes points at infinity. 3. Points at infinity handled separately by getInfinityCost(). --- geom_bottleneck/example/bottleneck_dist.cpp | 16 +- geom_bottleneck/include/basic_defs_bt.h | 43 +- geom_bottleneck/include/bottleneck.h | 6 +- geom_bottleneck/include/bottleneck_detail.hpp | 580 +++++++------------------- geom_bottleneck/include/diagram_reader.h | 217 ++++++---- 5 files changed, 316 insertions(+), 546 deletions(-) diff --git a/geom_bottleneck/example/bottleneck_dist.cpp b/geom_bottleneck/example/bottleneck_dist.cpp index b66e7bc..91c4190 100644 --- a/geom_bottleneck/example/bottleneck_dist.cpp +++ b/geom_bottleneck/example/bottleneck_dist.cpp @@ -48,11 +48,11 @@ int main(int argc, char* argv[]) PairVector diagramA, diagramB; int decPrecision { 0 }; - if (!hera::bt::readDiagramPointSet(argv[1], diagramA, decPrecision)) { + if (!hera::readDiagramPointSet(argv[1], diagramA, decPrecision)) { std::exit(1); } - if (!hera::bt::readDiagramPointSet(argv[2], diagramB, decPrecision)) { + if (!hera::readDiagramPointSet(argv[2], diagramB, decPrecision)) { std::exit(1); } @@ -63,20 +63,11 @@ int main(int argc, char* argv[]) double delta = atof(argv[3]); if (delta > 0.0) { if (useSamplingHeur && diagramA.size() > heurThreshold && diagramB.size() > heurThreshold) { -#ifdef VERBOSE_BOTTLENECK - std::cout << "using sampling heuristic" << std::endl; -#endif res = hera::bottleneckDistApproxHeur(diagramA, diagramB, delta); } else { -#ifdef VERBOSE_BOTTLENECK - std::cout << "NOT using sampling heuristic" << std::endl; -#endif res = hera::bottleneckDistApprox(diagramA, diagramB, delta); } } else if (delta == 0.0) { -#ifdef VERBOSE_BOTTLENECK - std::cout << "NOT using sampling heuristic, computing EXACT answer" << std::endl; -#endif res = hera::bottleneckDistExact(diagramA, diagramB, decPrecision); } else { std::cerr << "The third parameter (relative error) must be positive!" << std::endl; @@ -84,9 +75,6 @@ int main(int argc, char* argv[]) } } else { // only filenames have been supplied, return exact distance -#ifdef VERBOSE_BOTTLENECK - std::cout << "NOT using sampling heuristic, computing EXACT answer" << std::endl; -#endif res = hera::bottleneckDistExact(diagramA, diagramB, decPrecision); } std::cout << std::setprecision(15) << res << std::endl; diff --git a/geom_bottleneck/include/basic_defs_bt.h b/geom_bottleneck/include/basic_defs_bt.h index ad09986..69dc709 100644 --- a/geom_bottleneck/include/basic_defs_bt.h +++ b/geom_bottleneck/include/basic_defs_bt.h @@ -128,9 +128,17 @@ public: } - bool isDiagonal(void) const { return type == DIAG; } + bool isDiagonal() const { return type == DIAG; } - bool isNormal(void) const { return type == NORMAL; } + bool isNormal() const { return type == NORMAL; } + + bool isInfinity() const + { + return x == std::numeric_limits::infinity() or + x == -std::numeric_limits::infinity() or + y == std::numeric_limits::infinity() or + y == -std::numeric_limits::infinity(); + } Real inline getRealX() const // return the x-coord { @@ -177,17 +185,6 @@ inline void hash_combine(std::size_t & seed, const T & v) seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); } -//template -//struct PointHash { -// size_t operator()(const Point &p) const -// { -// size_t seed = 0; -// hash_combine(seed, p.x); -// hash_combine(seed, p.y); -// return seed; -// } -//}; - template struct DiagramPointHash { size_t operator()(const DiagramPoint &p) const @@ -306,11 +303,6 @@ public: return points.end(); } - const_iterator find(const DgmPoint &p) const - { - return points.find(p); - } - const_iterator cbegin() const { return points.cbegin(); @@ -321,6 +313,12 @@ public: return points.cend(); } + + const_iterator find(const DgmPoint &p) const + { + return points.find(p); + } + #ifndef FOR_R_TDA template friend std::ostream& operator<<(std::ostream& output, const DiagramPointSet& ps) @@ -405,7 +403,8 @@ Real getFurthestDistance3Approx(DiagPointContainer& A, DiagPointContainer& B) { } // preprocess diagrams A and B by adding projections onto diagonal of points of -// A to B and vice versa. NB: ids of points will be changed! +// A to B and vice versa. Also removes points at infinity! +// NB: ids of points will be changed! template void addProjections(DiagramPointSet& A, DiagramPointSet& B) { @@ -420,7 +419,8 @@ void addProjections(DiagramPointSet& A, DiagramPointSet& B) // copy normal points from A to newA // add projections to newB for(auto& pA : A) { - if (pA.isNormal()) { + if (pA.isNormal() and not pA.isInfinity()) { + // add pA's projection to B DgmPoint dpA {pA.getRealX(), pA.getRealY(), DgmPoint::NORMAL, uniqueId++}; DgmPoint dpB {(pA.getRealX() +pA.getRealY())/2, (pA.getRealX() +pA.getRealY())/2, DgmPoint::DIAG, uniqueId++}; newA.insert(dpA); @@ -429,7 +429,8 @@ void addProjections(DiagramPointSet& A, DiagramPointSet& B) } for(auto& pB : B) { - if (pB.isNormal()) { + if (pB.isNormal() and not pB.isInfinity()) { + // add pB's projection to A DgmPoint dpB {pB.getRealX(), pB.getRealY(), DgmPoint::NORMAL, uniqueId++}; DgmPoint dpA {(pB.getRealX() +pB.getRealY())/2, (pB.getRealX() +pB.getRealY())/2, DgmPoint::DIAG, uniqueId++}; newB.insert(dpB); diff --git a/geom_bottleneck/include/bottleneck.h b/geom_bottleneck/include/bottleneck.h index d0d82b6..0d4e1ed 100644 --- a/geom_bottleneck/include/bottleneck.h +++ b/geom_bottleneck/include/bottleneck.h @@ -50,6 +50,8 @@ namespace hera { // PairContainer class must support iteration of the form // for(it = pairContainer.begin(); it != pairContainer.end(); ++it) +// all functions in this header are wrappers around +// functions from hera::bt namespace // get exact bottleneck distance, template @@ -86,7 +88,8 @@ bottleneckDistApproxInterval(PairContainer& dgm_A, PairContainer& dgm_B, const t return hera::bt::bottleneckDistApproxInterval(a, b, delta); } - +// use sampling heuristic: discard most of the points with small persistency +// to get a good initial approximation of the bottleneck distance template typename DiagramTraits::RealType bottleneckDistApproxHeur(PairContainer& dgm_A, PairContainer& dgm_B, const typename DiagramTraits::RealType delta) @@ -98,7 +101,6 @@ bottleneckDistApproxHeur(PairContainer& dgm_A, PairContainer& dgm_B, const typen return resPair.second; } - // get approximate distance, // see bottleneckDistApproxInterval template diff --git a/geom_bottleneck/include/bottleneck_detail.hpp b/geom_bottleneck/include/bottleneck_detail.hpp index 64c6696..24cb725 100644 --- a/geom_bottleneck/include/bottleneck_detail.hpp +++ b/geom_bottleneck/include/bottleneck_detail.hpp @@ -46,16 +46,144 @@ derivative works thereof, in binary and source code form. namespace hera { namespace bt { +template +void binarySearch(const Real epsilon, + std::pair& result, + BoundMatchOracle& oracle, + const Real infinityCost, + bool isResultInitializedCorrectly, + const Real distProbeInit) +{ + // aliases for result components + Real& distMin = result.first; + Real& distMax = result.second; + + distMin = std::max(distMin, infinityCost); + distMax = std::max(distMax, infinityCost); + + Real distProbe; + + if (not isResultInitializedCorrectly) { + distProbe = distProbeInit; + if (oracle.isMatchLess(distProbe)) { + // distProbe is an upper bound, + // find lower bound with binary search + do { + distMax = distProbe; + distProbe /= 2.0; + } while (oracle.isMatchLess(distProbe)); + distMin = distProbe; + } else { + // distProbe is a lower bound, + // find upper bound with exponential search + do { + distMin = distProbe; + distProbe *= 2.0; + } while (!oracle.isMatchLess(distProbe)); + distMax = distProbe; + } + } + // bounds are correct , perform binary search + distProbe = ( distMin + distMax ) / 2.0; + while (( distMax - distMin ) / distMin >= epsilon ) { + + if (distMax < infinityCost) { + distMin = infinityCost; + distMax = infinityCost; + break; + } + + if (oracle.isMatchLess(distProbe)) { + distMax = distProbe; + } else { + distMin = distProbe; + } + + distProbe = ( distMin + distMax ) / 2.0; + } + + distMin = std::max(distMin, infinityCost); + distMax = std::max(distMax, infinityCost); +} + +template +inline Real getOneDimensionalCost(std::vector &set_A, std::vector &set_B) +{ + if (set_A.size() != set_B.size()) { + return std::numeric_limits::infinity(); + } + + if (set_A.empty()) { + return Real(0.0); + } + + std::sort(set_A.begin(), set_A.end()); + std::sort(set_B.begin(), set_B.end()); + + Real result = 0.0; + for(size_t i = 0; i < set_A.size(); ++i) { + result = std::max(result, (std::fabs(set_A[i] - set_B[i]))); + } + + return result; +} + +template +inline Real getInfinityCost(const DiagramPointSet &A, const DiagramPointSet &B) +{ + std::vector x_plus_A, x_minus_A, y_plus_A, y_minus_A; + std::vector x_plus_B, x_minus_B, y_plus_B, y_minus_B; + + for(auto iter_A = A.cbegin(); iter_A != A.cend(); ++iter_A) { + Real x = iter_A->getRealX(); + Real y = iter_A->getRealY(); + if ( x == std::numeric_limits::infinity()) { + y_plus_A.push_back(y); + } else if (x == -std::numeric_limits::infinity()) { + y_minus_A.push_back(y); + } else if (y == std::numeric_limits::infinity()) { + x_plus_A.push_back(x); + } else if (y == -std::numeric_limits::infinity()) { + x_minus_A.push_back(x); + } + } + + for(auto iter_B = B.cbegin(); iter_B != B.cend(); ++iter_B) { + Real x = iter_B->getRealX(); + Real y = iter_B->getRealY(); + if (x == std::numeric_limits::infinity()) { + y_plus_B.push_back(y); + } else if (x == -std::numeric_limits::infinity()) { + y_minus_B.push_back(y); + } else if (y == std::numeric_limits::infinity()) { + x_plus_B.push_back(x); + } else if (y == -std::numeric_limits::infinity()) { + x_minus_B.push_back(x); + } + } + + Real infinity_cost = getOneDimensionalCost(x_plus_A, x_plus_B); + infinity_cost = std::max(infinity_cost, getOneDimensionalCost(x_minus_A, x_minus_B)); + infinity_cost = std::max(infinity_cost, getOneDimensionalCost(y_plus_A, y_plus_B)); + infinity_cost = std::max(infinity_cost, getOneDimensionalCost(y_minus_A, y_minus_B)); + + return infinity_cost; +} + // return the interval (distMin, distMax) such that: // a) actual bottleneck distance between A and B is contained in the interval // b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon template -std::pair bottleneckDistApproxInterval(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon) +inline std::pair bottleneckDistApproxInterval(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon) { // empty diagrams are not considered as error if (A.empty() and B.empty()) return std::make_pair(0.0, 0.0); + Real infinity_cost = getInfinityCost(A, B); + if (infinity_cost == std::numeric_limits::infinity()) + return std::make_pair(infinity_cost, infinity_cost); + // link diagrams A and B by adding projections addProjections(A, B); @@ -74,47 +202,13 @@ std::pair bottleneckDistApproxInterval(DiagramPointSet& A, Dia // get a 3-approximation of maximal distance between A and B // as a starting value for probe distance Real distProbe { getFurthestDistance3Approx>(A, B) }; - // aliases for result components - Real& distMin {result.first}; - Real& distMax {result.second}; - - if ( oracle.isMatchLess(distProbe) ) { - // distProbe is an upper bound, - // find lower bound with binary search - do { - distMax = distProbe; - distProbe /= 2.0; - } while (oracle.isMatchLess(distProbe)); - distMin = distProbe; - } else { - // distProbe is a lower bound, - // find upper bound with exponential search - do { - distMin = distProbe; - distProbe *= 2.0; - } while (!oracle.isMatchLess(distProbe)); - distMax = distProbe; - } - // bounds are found, perform binary search - //std::cout << "Bounds found, distMin = " << distMin << ", distMax = " << distMax << ", ratio = " << ( distMax - distMin ) / distMin << std::endl ; - distProbe = ( distMin + distMax ) / 2.0; - while ( ( distMax - distMin ) / distMin >= epsilon ) { - if (oracle.isMatchLess(distProbe)) { - distMax = distProbe; - } else { - distMin = distProbe; - } - distProbe = ( distMin + distMax ) / 2.0; - } + binarySearch(epsilon, result, oracle, infinity_cost, false, distProbe); return result; } template void sampleDiagramForHeur(const DiagramPointSet& dgmIn, DiagramPointSet& dgmOut) { -#ifdef VERBOSE_BOTTLENECK - std::cout << "Entered sampleDiagramForHeur, dgmIn.size = " << dgmIn.size() << std::endl; -#endif struct pair_hash { std::size_t operator()(const std::pair p) const { @@ -123,14 +217,11 @@ void sampleDiagramForHeur(const DiagramPointSet& dgmIn, DiagramPointSet, int, pair_hash> m; for(auto ptIter = dgmIn.cbegin(); ptIter != dgmIn.cend(); ++ptIter) { - if (ptIter->isNormal()) { + if (ptIter->isNormal() and not ptIter->isInfinity()) { m[std::make_pair(ptIter->getRealX(), ptIter->getRealY())]++; } } -#ifdef VERBOSE_BOTTLENECK - std::cout << "map filled in, m.size = " << m.size() << std::endl; -#endif - if (m.size() < 2) { + if (m.size() < 2) { dgmOut = dgmIn; return; } @@ -138,13 +229,7 @@ void sampleDiagramForHeur(const DiagramPointSet& dgmIn, DiagramPointSet(v.size())- 1; ++i) { @@ -154,10 +239,7 @@ void sampleDiagramForHeur(const DiagramPointSet& dgmIn, DiagramPointSet initGuess = bottleneckDistApproxInterval(sampledA, sampledB, epsilon); -#ifdef VERBOSE_BOTTLENECK - std::cout << "initial guess with sampling: " << initGuess.first << ", " << initGuess.second << std::endl; - std::cout << "running on the original diagrams" << std::endl; -#endif - return bottleneckDistApproxIntervalWithInitial(A, B, epsilon, initGuess); + + initGuess.first = std::max(initGuess.first, infinity_cost); + initGuess.second = std::max(initGuess.second, infinity_cost); + + return bottleneckDistApproxIntervalWithInitial(A, B, epsilon, initGuess, infinity_cost); } @@ -277,9 +350,6 @@ Real bottleneckDistApprox(DiagramPointSet& A, DiagramPointSet& B, co template Real bottleneckDistExactFromSortedPwDist(DiagramPointSet&A, DiagramPointSet& B, std::vector& pairwiseDist, const int decPrecision) { - //for(size_t k = 0; k < pairwiseDist.size(); ++k) { - //std::cout << "pairwiseDist[" << k << "] = " << std::setprecision(15) << pairwiseDist[k] << std::endl; - //} // trivial case: we have only one candidate if (pairwiseDist.size() == 1) return pairwiseDist[0]; @@ -292,13 +362,11 @@ Real bottleneckDistExactFromSortedPwDist(DiagramPointSet&A, DiagramPointSe } for(size_t k = 0; k < pairwiseDist.size() - 2; ++k) { auto diff = pairwiseDist[k+1]- pairwiseDist[k]; - //std::cout << "diff = " << diff << ", pairwiseDist[k] = " << pairwiseDist[k] << std::endl; if ( diff > diffThreshold and diff < distEpsilon ) { distEpsilon = diff; } } distEpsilon /= 3.0; - //std::cout << "decPrecision = " << decPrecision << ", distEpsilon = " << distEpsilon << std::endl; BoundMatchOracle oracle(A, B, distEpsilon, useRangeSearch); // binary search @@ -307,17 +375,13 @@ Real bottleneckDistExactFromSortedPwDist(DiagramPointSet&A, DiagramPointSe size_t idxMid; while(idxMax > idxMin) { idxMid = static_cast(floor(idxMin + idxMax) / 2.0); - //std::cout << "while begin: min = " << idxMin << ", idxMax = " << idxMax << ", idxMid = " << idxMid << ", testing d = " << std::setprecision(15) << pairwiseDist[idxMid] << std::endl; iterNum++; // not A[imid] < dist <=> A[imid] >= dist <=> A[imid[ >= dist + eps if (oracle.isMatchLess(pairwiseDist[idxMid] + distEpsilon / 2.0)) { - //std::cout << "isMatchLess = true" << std::endl; idxMax = idxMid; } else { - //std::cout << "isMatchLess = false " << std::endl; idxMin = idxMid + 1; } - //std::cout << "while end: idxMin = " << idxMin << ", idxMax = " << idxMax << ", idxMid = " << idxMid << std::endl; } idxMid = static_cast(floor(idxMin + idxMax) / 2.0); return pairwiseDist[idxMid]; @@ -337,11 +401,12 @@ Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, con constexpr Real epsilon = 0.001; auto interval = bottleneckDistApproxInterval(A, B, epsilon); + if (interval.first == interval.second) + return interval.first; const Real delta = 0.50001 * (interval.second - interval.first); const Real approxDist = 0.5 * ( interval.first + interval.second); const Real minDist = interval.first; const Real maxDist = interval.second; - //std::cout << std::setprecision(15) << "minDist = " << minDist << ", maxDist = " << maxDist << std::endl; if ( delta == 0 ) { return interval.first; } @@ -353,21 +418,6 @@ Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, con pointsA.push_back(ptA); } - //std::vector killdist; - //for(auto pta : a) { - //for(auto ptb : b) { - //if ( distlinf(pta, ptb) > mindist and distlinf(pta, ptb) < maxdist) { - //killdist.push_back(distlinf(pta, ptb)); - //std::cout << pta << ", " << ptb << std::endl; - //} - //} - //} - //std::sort(killdist.begin(), killdist.end()); - //for(auto d : killdist) { - //std::cout << d << std::endl; - //} - //std::cout << "*************" << std::endl; - // in this vector we store the distances between the points // that are candidates to realize std::vector pairwiseDist; @@ -385,13 +435,6 @@ Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, con { return a.first < b.first; }; std::sort(xCentersVec.begin(), xCentersVec.end(), compLambda); - //std::cout << "xCentersVec.size = " << xCentersVec.size() << std::endl; - //for(auto p = xCentersVec.begin(); p!= xCentersVec.end(); ++p) { - //if (p->second.id == 200) { - //std::cout << "index of 200: " << p - xCentersVec.begin() << std::endl; - //} - //} - //std::vector // todo: sort points in B, reduce search range in lower and upper bounds for(auto ptB : B) { // iterator to the first stripe such that ptB lies to the left @@ -400,30 +443,17 @@ Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, con xCentersVec.end(), std::make_pair(ptB.getRealX() - delta, ptB), compLambda); - //if (ptB.id == 236) { - //std::cout << itStart - xCentersVec.begin() << std::endl; - //} for(auto iterA = itStart; iterA < xCentersVec.end(); ++iterA) { - //if (ptB.id == 236) { - //std::cout << "consider " << iterA->second << std::endl; - //} if ( ptB.getRealX() < iterA->first - delta) { // from that moment x_B >= x_j - delta // is violated: x_B no longer lies to right from the left // boundary of current stripe - //if (ptB.id == 236) { - //std::cout << "break" << std::endl; - //} break; } // we're here => ptB lies in vertical stripe, // check if distance fits into the interval we've found Real pwDist = distLInf(iterA->second, ptB); - //if (ptB.id == 236) { - //std::cout << pwDist << std::endl; - //} - //std::cout << 1000*minDist << " <= " << 1000*pwDist << " <= " << 1000*maxDist << std::endl; if (pwDist >= minDist and pwDist <= maxDist) { pairwiseDist.push_back(pwDist); } @@ -447,13 +477,6 @@ Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, con std::sort(yCentersVec.begin(), yCentersVec.end(), compLambda); - // std::cout << "Sorted vector of y-centers:" << std::endl; - //for(auto coordPtPair : yCentersVec) { - //std::cout << coordPtPair.first << ", id = " << coordPtPair.second.id << std::endl; - //} - /*std::cout << "End of sorted vector of y-centers:" << std::endl;*/ - - //std::vector // todo: sort points in B, reduce search range in lower and upper bounds for(auto ptB : B) { auto itStart = std::lower_bound(yCentersVec.begin(), @@ -467,7 +490,6 @@ Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, con break; } Real pwDist = distLInf(iterA->second, ptB); - //std::cout << 1000*minDist << " <= " << 1000*pwDist << " <= " << 1000*maxDist << std::endl; if (pwDist >= minDist and pwDist <= maxDist) { pairwiseDist.push_back(pwDist); } @@ -475,311 +497,11 @@ Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, con } } - //std::cout << "pairwiseDist.size = " << pairwiseDist.size() << " out of " << A.size() * A.size() << std::endl; std::sort(pairwiseDist.begin(), pairwiseDist.end()); - //for(auto ddd : pairwiseDist) { - //std::cout << std::setprecision(15) << ddd << std::endl; - //} return bottleneckDistExactFromSortedPwDist(A, B, pairwiseDist, decPrecision); } -template -Real bottleneckDistSlow(DiagramPointSet& A, DiagramPointSet& B) -{ - using DistVerticesPair = std::pair>; - - // use range search when building the layer graph - bool useRangeSearch { true }; - // find maximum of min. distances for each point, - // use this value as lower bound for bottleneck distance - bool useHeurMinIdx { true }; - - // find matching in a greedy manner to - // get an upper bound for a bottleneck distance - bool useHeurGreedyMatching { false }; - - // use successive multiplication of idxMin with 2 to get idxMax - bool goUpToFindIdxMax { false }; - // - goUpToFindIdxMax = goUpToFindIdxMax and !useHeurGreedyMatching; - - if (!useHeurGreedyMatching) { - long int N = 3 * (A.size() / 2 ) * (B.size() / 2); - std::vector pairwiseDist; - pairwiseDist.reserve(N); - Real maxMinDist {0.0}; - for(auto& p_A : A) { - Real minDist { std::numeric_limits::max() }; - for(auto& p_B : B) { - if (p_A.isNormal() or p_B.isNormal()) { - Real d = distLInf(p_A, p_B); - pairwiseDist.push_back(d); - if (useHeurMinIdx and p_A.isNormal()) { - if (d < minDist) - minDist = d; - } - } - } - if (useHeurMinIdx and p_A.isNormal() and minDist > maxMinDist) { - maxMinDist = minDist; - } - } - - std::sort(pairwiseDist.begin(), pairwiseDist.end()); - - Real distEpsilon = std::numeric_limits::max(); - for(size_t k = 0; k < pairwiseDist.size() - 2; ++k) { - auto diff = pairwiseDist[k+1]- pairwiseDist[k]; - if ( diff > 1.0e-10 and diff < distEpsilon ) { - distEpsilon = diff; - } - } - distEpsilon /= 3.0; - - BoundMatchOracle oracle(A, B, distEpsilon, useRangeSearch); - // binary search - size_t iterNum {0}; - size_t idxMin {0}, idxMax {pairwiseDist.size() - 1}; - if (useHeurMinIdx) { - auto maxMinIter = std::equal_range(pairwiseDist.begin(), pairwiseDist.end(), maxMinDist); - assert(maxMinIter.first != pairwiseDist.end()); - idxMin = maxMinIter.first - pairwiseDist.begin(); - //std::cout << "maxMinDist = " << maxMinDist << ", idxMin = " << idxMin << ", d = " << pairwiseDist[idxMin] << std::endl; - } - - if (goUpToFindIdxMax) { - if ( pairwiseDist.size() == 1) { - return pairwiseDist[0]; - } - - idxMax = std::max(idxMin, 1); - while (!oracle.isMatchLess(pairwiseDist[idxMax])) { - //std::cout << "entered while" << std::endl; - idxMin = idxMax; - if (2*idxMax > pairwiseDist.size() -1) { - idxMax = pairwiseDist.size() - 1; - break; - } else { - idxMax *= 2; - } - } - //std::cout << "size = " << pairwiseDist.size() << ", idxMax = " << idxMax << ", pw[max] = " << pairwiseDist[idxMax] << std::endl; - } - - size_t idxMid { (idxMin + idxMax) / 2 }; - while(idxMax > idxMin) { - iterNum++; - if (oracle.isMatchLess(pairwiseDist[idxMid])) { - idxMax = idxMid; - } else { - if (idxMax - idxMin == 1) - idxMin++; - else - idxMin = idxMid; - } - idxMid = (idxMin + idxMax) / 2; - } - return pairwiseDist[idxMid]; - } else { - // with greeedy matching - long int N = A.size() * B.size(); - std::vector pairwiseDist; - pairwiseDist.reserve(N); - Real maxMinDist {0.0}; - size_t idxA{0}, idxB{0}; - for(auto p_A : A) { - Real minDist { std::numeric_limits::max() }; - idxB = 0; - for(auto p_B : B) { - Real d = distLInf(p_A, p_B); - pairwiseDist.push_back( std::make_pair(d, std::make_pair(idxA, idxB) ) ); - if (useHeurMinIdx and p_A.isNormal()) { - if (d < minDist) - minDist = d; - } - idxB++; - } - if (useHeurMinIdx and p_A.isNormal() and minDist > maxMinDist) { - maxMinDist = minDist; - } - idxA++; - } - - auto compLambda = [](DistVerticesPair a, DistVerticesPair b) - { return a.first < b.first;}; - - std::sort(pairwiseDist.begin(), - pairwiseDist.end(), - compLambda); - - Real distEpsilon = std::numeric_limits::max(); - for(size_t k = 0; k < pairwiseDist.size() - 2; ++k) { - auto diff = pairwiseDist[k+1].first - pairwiseDist[k].first; - if ( diff > 1.0e-10 and diff < distEpsilon ) { - distEpsilon = diff; - } - } - distEpsilon /= 3.0; - - BoundMatchOracle oracle(A, B, distEpsilon, useRangeSearch); - - // construct greedy matching - size_t numVert { A.size() }; - size_t numMatched { 0 }; - std::unordered_set aTobMatched, bToaMatched; - aTobMatched.reserve(numVert); - bToaMatched.reserve(numVert); - size_t distVecIdx {0}; - while( numMatched < numVert) { - auto vertPair = pairwiseDist[distVecIdx++].second; - //std::cout << "distVecIdx = " << distVecIdx << ", matched: " << numMatched << " out of " << numVert << std::endl; - //std::cout << "vertex A idx = " << vertPair.first << ", B idx: " << vertPair.second << " out of " << numVert << std::endl; - if ( aTobMatched.count(vertPair.first) == 0 and - bToaMatched.count(vertPair.second) == 0 ) { - aTobMatched.insert(vertPair.first); - bToaMatched.insert(vertPair.second); - numMatched++; - } - } - size_t idxMax = distVecIdx-1; - //std::cout << "idxMax = " << idxMax << ", size = " << pairwiseDist.size() << std::endl; - // binary search - size_t iterNum {0}; - size_t idxMin {0}; - if (useHeurMinIdx) { - auto maxMinIter = std::equal_range(pairwiseDist.begin(), - pairwiseDist.end(), - std::make_pair(maxMinDist, std::make_pair(0,0)), - compLambda); - assert(maxMinIter.first != pairwiseDist.end()); - idxMin = maxMinIter.first - pairwiseDist.begin(); - //std::cout << "maxMinDist = " << maxMinDist << ", idxMin = " << idxMin << ", d = " << pairwiseDist[idxMin].first << std::endl; - } - size_t idxMid { (idxMin + idxMax) / 2 }; - while(idxMax > idxMin) { - iterNum++; - if (oracle.isMatchLess(pairwiseDist[idxMid].first)) { - idxMax = idxMid; - } else { - if (idxMax - idxMin == 1) - idxMin++; - else - idxMin = idxMid; - } - idxMid = (idxMin + idxMax) / 2; - } - return pairwiseDist[idxMid].first; - } - // stats - /* - // count number of edges - // pairwiseDist is sorted, add edges of the same length - int edgeNumber {idxMid}; - while(pairwiseDist[edgeNumber + 1] == pairwiseDist[edgeNumber]) - edgeNumber++; - // add edges between diagonal points - edgeNumber += N / 3; - // output stats - std::cout << idxMid << "\t" << N; - std::cout << "\t" << iterNum; - std::cout << "\t" << A.size() + B.size(); - std::cout << "\t" << edgeNumber << "\t"; - std::cout << (Real)(edgeNumber) / (Real)(A.size() + B.size()) << std::endl; - */ -} - -// wrappers -template -bool readDiagramPointSet(const std::string& fname, std::vector>& result) -{ - int decPrecision; - return readDiagramPointSet(fname.c_str(), result, decPrecision); -} - -template -bool readDiagramPointSet(const char* fname, std::vector>& result) -{ - int decPrecision; - return readDiagramPointSet(fname, result, decPrecision); -} - -template -bool readDiagramPointSet(const std::string& fname, std::vector>& result, int& decPrecision) -{ - return readDiagramPointSet(fname.c_str(), result, decPrecision); -} - -// reading function -template -bool readDiagramPointSet(const char* fname, std::vector>& result, int& decPrecision) -{ - size_t lineNumber { 0 }; - result.clear(); - std::ifstream f(fname); - if (!f.good()) { -#ifndef FOR_R_TDA - std::cerr << "Cannot open file " << fname << std::endl; -#endif - return false; - } - std::string line; - while(std::getline(f, line)) { - lineNumber++; - // process comments: remove everything after hash - auto hashPos = line.find_first_of("#", 0); - if( std::string::npos != hashPos) { - line = std::string(line.begin(), line.begin() + hashPos); - } - if (line.empty()) { - continue; - } - // trim whitespaces - auto whiteSpaceFront = std::find_if_not(line.begin(),line.end(),isspace); - auto whiteSpaceBack = std::find_if_not(line.rbegin(),line.rend(),isspace).base(); - if (whiteSpaceBack <= whiteSpaceFront) { - // line consists of spaces only - move to the next line - continue; - } - line = std::string(whiteSpaceFront,whiteSpaceBack); - bool fracPart = false; - int currDecPrecision = 0; - for(auto c : line) { - if (c == '.') { - fracPart = true; - } else if (fracPart) { - if (isdigit(c)) { - currDecPrecision++; - } else { - fracPart = false; - if (currDecPrecision > decPrecision) - decPrecision = currDecPrecision; - currDecPrecision = 0; - } - } - } - Real x, y; - std::istringstream iss(line); - if (not(iss >> x >> y)) { -#ifndef FOR_R_TDA - std::cerr << "Error in file " << fname << ", line number " << lineNumber << ": cannot parse \"" << line << "\"" << std::endl; -#endif - return false; - } - if ( x != y ) { - result.push_back(std::make_pair(x,y)); - } else { -#ifndef FOR_R_TDA -#ifndef VERBOSE_BOTTLENECK - std::cerr << "Warning: in file " << fname << ", line number " << lineNumber << ", zero persistence point ignored: \"" << line << "\"" << std::endl; -#endif -#endif - } - } - f.close(); - return true; -} - } // end namespace bt } // end namespace hera #endif // HERA_BOTTLENECK_HPP diff --git a/geom_bottleneck/include/diagram_reader.h b/geom_bottleneck/include/diagram_reader.h index 5bf106d..08d9e2b 100644 --- a/geom_bottleneck/include/diagram_reader.h +++ b/geom_bottleneck/include/diagram_reader.h @@ -1,5 +1,4 @@ /* - Copyright (c) 2015, M. Kerber, D. Morozov, A. Nigmetov All rights reserved. @@ -39,101 +38,159 @@ derivative works thereof, in binary and source code form. #include namespace hera { + +// cannot choose stod, stof or stold based on RealType, +// lazy solution: partial specialization + template + inline RealType parse_real_from_str(const std::string& s); + + template <> + inline double parse_real_from_str(const std::string& s) + { + return std::stod(s); + } + + + template <> + inline long double parse_real_from_str(const std::string& s) + { + return std::stold(s); + } + + + template <> + inline float parse_real_from_str(const std::string& s) + { + return std::stof(s); + } + + + template + inline RealType parse_real_from_str(const std::string& s) + { + static_assert(sizeof(RealType) != sizeof(RealType), "Must be specialized for each type you want to use, see above"); + } + // fill in result with points from file fname // return false if file can't be opened // or error occurred while reading // decPrecision is the maximal decimal precision in the input, // it is zero if all coordinates in the input are integers -template>> -bool readDiagramPointSet(const char* fname, ContType_& result, int& decPrecision) -{ - size_t lineNumber { 0 }; - result.clear(); - std::ifstream f(fname); - if (!f.good()) { + + template>> + inline bool readDiagramPointSet(const char* fname, ContType_& result, int& decPrecision) + { + using RealType = RealType_; + + size_t lineNumber { 0 }; + result.clear(); + std::ifstream f(fname); + if (!f.good()) { #ifndef FOR_R_TDA - std::cerr << "Cannot open file " << fname << std::endl; + std::cerr << "Cannot open file " << fname << std::endl; #endif - return false; - } - std::string line; - while(std::getline(f, line)) { - lineNumber++; - // process comments: remove everything after hash - auto hashPos = line.find_first_of("#", 0); - if( std::string::npos != hashPos) { - line = std::string(line.begin(), line.begin() + hashPos); - } - if (line.empty()) { - continue; - } - // trim whitespaces - auto whiteSpaceFront = std::find_if_not(line.begin(),line.end(),isspace); - auto whiteSpaceBack = std::find_if_not(line.rbegin(),line.rend(),isspace).base(); - if (whiteSpaceBack <= whiteSpaceFront) { - // line consists of spaces only - move to the next line - continue; + return false; } - line = std::string(whiteSpaceFront,whiteSpaceBack); - bool fracPart = false; - int currDecPrecision = 0; - for(auto c : line) { - if (c == '.') { - fracPart = true; - } else if (fracPart) { - if (isdigit(c)) { - currDecPrecision++; + std::locale loc; + std::string line; + while(std::getline(f, line)) { + lineNumber++; + // process comments: remove everything after hash + auto hashPos = line.find_first_of("#", 0); + if( std::string::npos != hashPos) { + line = std::string(line.begin(), line.begin() + hashPos); + } + if (line.empty()) { + continue; + } + // trim whitespaces + auto whiteSpaceFront = std::find_if_not(line.begin(),line.end(),isspace); + auto whiteSpaceBack = std::find_if_not(line.rbegin(),line.rend(),isspace).base(); + if (whiteSpaceBack <= whiteSpaceFront) { + // line consists of spaces only - move to the next line + continue; + } + line = std::string(whiteSpaceFront,whiteSpaceBack); + + // transform line to lower case + // to parse Infinity + for(auto& c : line) { + c = std::tolower(c, loc); + } + + bool fracPart = false; + int currDecPrecision = 0; + for(auto c : line) { + if (c == '.') { + fracPart = true; + } else if (fracPart) { + if (isdigit(c)) { + currDecPrecision++; + } else { + fracPart = false; + if (currDecPrecision > decPrecision) + decPrecision = currDecPrecision; + currDecPrecision = 0; + } + } + } + + RealType x, y; + std::string str_x, str_y; + std::istringstream iss(line); + try { + iss >> str_x >> str_y; + + x = parse_real_from_str(str_x); + y = parse_real_from_str(str_y); + + if (x != y) { + result.push_back(std::make_pair(x, y)); } else { - fracPart = false; - if (currDecPrecision > decPrecision) - decPrecision = currDecPrecision; - currDecPrecision = 0; +#ifndef FOR_R_TDA + std::cerr << "Warning: point with 0 persistence ignored in " << fname << ":" << lineNumber << "\n"; +#endif } } - } - RealType_ x, y; - std::istringstream iss(line); - if (not(iss >> x >> y)) { + catch (const std::invalid_argument& e) { #ifndef FOR_R_TDA - std::cerr << "Error in file " << fname << ", line number " << lineNumber << ": cannot parse \"" << line << "\"" << std::endl; + std::cerr << "Error in file " << fname << ", line number " << lineNumber << ": cannot parse \"" << line << "\"" << std::endl; #endif - return false; - } - if ( x != y ) { - result.push_back(std::make_pair(x,y)); - } else { -#ifdef VERBOSE_BOTTLENECK - std::cerr << "Warning: in file " << fname << ", line number " << lineNumber << ", zero persistence point ignored: \"" << line << "\"" << std::endl; + return false; + } + catch (const std::out_of_range&) { +#ifndef FOR_R_TDA + std::cerr << "Error while reading file " << fname << ", line number " << lineNumber << ": value too large in \"" << line << "\"" << std::endl; #endif + return false; + } } + f.close(); + return true; + } + + // wrappers + template>> + inline bool readDiagramPointSet(const std::string& fname, ContType_& result, int& decPrecision) + { + return readDiagramPointSet(fname.c_str(), result, decPrecision); + } + + // these two functions are now just wrappers for the previous ones, + // in case someone needs them; decPrecision is ignored + template>> + inline bool readDiagramPointSet(const char* fname, ContType_& result) + { + int decPrecision; + return readDiagramPointSet(fname, result, decPrecision); + } + + template>> + inline bool readDiagramPointSet(const std::string& fname, ContType_& result) + { + int decPrecision; + return readDiagramPointSet(fname.c_str(), result, decPrecision); } - f.close(); - return true; -} - - -// wrappers -template>> -bool readDiagramPointSet(const std::string& fname, ContType_& result, int& decPrecision) -{ - return readDiagramPointSet(fname.c_str(), result, decPrecision); -} - -// these two functions are now just wrappers for the previous ones, -// in case someone needs them; decPrecision is ignored -template>> -bool readDiagramPointSet(const char* fname, ContType_& result) -{ - int decPrecision; - return readDiagramPointSet(fname, result, decPrecision); -} - -template>> -bool readDiagramPointSet(const std::string& fname, ContType_& result) -{ - int decPrecision; - return readDiagramPointSet(fname.c_str(), result, decPrecision); -} } // end namespace hera #endif // HERA_DIAGRAM_READER_H -- cgit v1.2.3 From 9693f140d91e751aabe46b76b89c332c7f307e17 Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Sat, 19 May 2018 20:33:33 +0200 Subject: Add inline qualifier to Wasserstein code. To avoid linking problems. --- geom_matching/wasserstein/include/basic_defs_ws.h | 28 +++++++++---------- .../wasserstein/include/basic_defs_ws.hpp | 18 ++++++------ geom_matching/wasserstein/include/diagonal_heap.h | 2 +- geom_matching/wasserstein/include/diagram_reader.h | 32 +++++++++++----------- geom_matching/wasserstein/include/wasserstein.h | 10 +++---- .../wasserstein/include/wasserstein_pure_geom.hpp | 4 +-- 6 files changed, 46 insertions(+), 48 deletions(-) diff --git a/geom_matching/wasserstein/include/basic_defs_ws.h b/geom_matching/wasserstein/include/basic_defs_ws.h index 58d6fd2..28f7452 100644 --- a/geom_matching/wasserstein/include/basic_defs_ws.h +++ b/geom_matching/wasserstein/include/basic_defs_ws.h @@ -60,19 +60,19 @@ namespace hera { template -bool is_infinity(const Real& x) +inline bool is_infinity(const Real& x) { return x == Real(-1); }; template -Real get_infinity() +inline Real get_infinity() { return Real( -1 ); } template -bool is_p_valid_norm(const Real& p) +inline bool is_p_valid_norm(const Real& p) { return is_infinity(p) or p >= Real(1); } @@ -101,10 +101,8 @@ namespace ws template using IdxValPair = std::pair; - - template - std::ostream& operator<<(std::ostream& output, const IdxValPair p) + inline std::ostream& operator<<(std::ostream& output, const IdxValPair p) { output << fmt::format("({0}, {1})", p.first, p.second); return output; @@ -112,7 +110,7 @@ namespace ws enum class OwnerType { k_none, k_normal, k_diagonal }; - std::ostream& operator<<(std::ostream& s, const OwnerType t) + inline std::ostream& operator<<(std::ostream& s, const OwnerType t) { switch(t) { @@ -210,11 +208,11 @@ namespace ws #ifndef FOR_R_TDA template - std::ostream& operator<<(std::ostream& output, const DiagramPoint p); + inline std::ostream& operator<<(std::ostream& output, const DiagramPoint p); #endif template - void format_arg(fmt::BasicFormatter &f, const char *&format_str, const DiagramPoint&p) { + inline void format_arg(fmt::BasicFormatter &f, const char *&format_str, const DiagramPoint&p) { if (p.is_diagonal()) { f.writer().write("({0},{1}, DIAG)", p.x, p.y); } else { @@ -269,14 +267,14 @@ namespace ws }; template - R dist_lp(const Pt& a, const Pt& b, const R p, const int dim) + inline R dist_lp(const Pt& a, const Pt& b, const R p, const int dim) { return DistImpl()(a, b, p, dim); } // TODO template - double getFurthestDistance3Approx(DiagPointContainer& A, DiagPointContainer& B, const Real p) + inline double getFurthestDistance3Approx(DiagPointContainer& A, DiagPointContainer& B, const Real p) { int dim = 2; Real result { 0.0 }; @@ -297,7 +295,7 @@ namespace ws } template - Real getFurthestDistance3Approx_pg(const hera::ws::dnn::DynamicPointVector& A, const hera::ws::dnn::DynamicPointVector& B, const Real p, const int dim) + inline Real getFurthestDistance3Approx_pg(const hera::ws::dnn::DynamicPointVector& A, const hera::ws::dnn::DynamicPointVector& B, const Real p, const int dim) { Real result { 0.0 }; int opt_b_idx = 0; @@ -317,13 +315,13 @@ namespace ws template - std::string format_container_to_log(const Container& cont); + inline std::string format_container_to_log(const Container& cont); template - std::string format_point_set_to_log(const IndexContainer& indices, const std::vector>& points); + inline std::string format_point_set_to_log(const IndexContainer& indices, const std::vector>& points); template - std::string format_int(T i); + inline std::string format_int(T i); } // ws } // hera diff --git a/geom_matching/wasserstein/include/basic_defs_ws.hpp b/geom_matching/wasserstein/include/basic_defs_ws.hpp index 1750b4e..a1153af 100644 --- a/geom_matching/wasserstein/include/basic_defs_ws.hpp +++ b/geom_matching/wasserstein/include/basic_defs_ws.hpp @@ -64,7 +64,7 @@ bool Point::operator!=(const Point& other) const #ifndef FOR_R_TDA template -std::ostream& operator<<(std::ostream& output, const Point p) +inline std::ostream& operator<<(std::ostream& output, const Point p) { output << "(" << p.x << ", " << p.y << ")"; return output; @@ -72,20 +72,20 @@ std::ostream& operator<<(std::ostream& output, const Point p) #endif template -Real sqr_dist(const Point& a, const Point& b) +inline Real sqr_dist(const Point& a, const Point& b) { return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y); } template -Real dist(const Point& a, const Point& b) +inline Real dist(const Point& a, const Point& b) { return sqrt(sqr_dist(a, b)); } template -Real DiagramPoint::persistence_lp(const Real p) const +inline Real DiagramPoint::persistence_lp(const Real p) const { if (is_diagonal()) return 0.0; @@ -100,7 +100,7 @@ Real DiagramPoint::persistence_lp(const Real p) const #ifndef FOR_R_TDA template -std::ostream& operator<<(std::ostream& output, const DiagramPoint p) +inline std::ostream& operator<<(std::ostream& output, const DiagramPoint p) { if ( p.type == DiagramPoint::DIAG ) { output << "(" << p.x << ", " << p.y << ", " << 0.5 * (p.x + p.y) << " DIAG )"; @@ -142,7 +142,7 @@ Real DiagramPoint::getRealY() const } template -std::string format_container_to_log(const Container& cont) +inline std::string format_container_to_log(const Container& cont) { std::stringstream result; result << "["; @@ -157,7 +157,7 @@ std::string format_container_to_log(const Container& cont) } template -std::string format_pair_container_to_log(const Container& cont) +inline std::string format_pair_container_to_log(const Container& cont) { std::stringstream result; result << "["; @@ -173,7 +173,7 @@ std::string format_pair_container_to_log(const Container& cont) template -std::string format_point_set_to_log(const IndexContainer& indices, +inline std::string format_point_set_to_log(const IndexContainer& indices, const std::vector>& points) { std::stringstream result; @@ -189,7 +189,7 @@ std::string format_point_set_to_log(const IndexContainer& indices, } template -std::string format_int(T i) +inline std::string format_int(T i) { std::stringstream ss; ss.imbue(std::locale("")); diff --git a/geom_matching/wasserstein/include/diagonal_heap.h b/geom_matching/wasserstein/include/diagonal_heap.h index 9ffee70..3b3c8bc 100644 --- a/geom_matching/wasserstein/include/diagonal_heap.h +++ b/geom_matching/wasserstein/include/diagonal_heap.h @@ -129,7 +129,7 @@ using LossesHeapOld = IdxValHeap>; #endif template -std::string losses_heap_to_string(const LossesHeapOld& h) +inline std::string losses_heap_to_string(const LossesHeapOld& h) { std::stringstream result; result << "["; diff --git a/geom_matching/wasserstein/include/diagram_reader.h b/geom_matching/wasserstein/include/diagram_reader.h index 84bf49c..b52fcbd 100644 --- a/geom_matching/wasserstein/include/diagram_reader.h +++ b/geom_matching/wasserstein/include/diagram_reader.h @@ -55,31 +55,31 @@ namespace hera { // cannot choose stod, stof or stold based on RealType, // lazy solution: partial specialization template -RealType parse_real_from_str(const std::string& s); +inline RealType parse_real_from_str(const std::string& s); template <> -double parse_real_from_str(const std::string& s) +inline double parse_real_from_str(const std::string& s) { return std::stod(s); } template <> -long double parse_real_from_str(const std::string& s) +inline long double parse_real_from_str(const std::string& s) { return std::stold(s); } template <> -float parse_real_from_str(const std::string& s) +inline float parse_real_from_str(const std::string& s) { return std::stof(s); } template -RealType parse_real_from_str(const std::string& s) +inline RealType parse_real_from_str(const std::string& s) { static_assert(sizeof(RealType) != sizeof(RealType), "Must be specialized for each type you want to use, see above"); } @@ -90,7 +90,7 @@ RealType parse_real_from_str(const std::string& s) // decPrecision is the maximal decimal precision in the input, // it is zero if all coordinates in the input are integers template>> -bool read_diagram_point_set(const char* fname, ContType_& result, int& decPrecision) +inline bool read_diagram_point_set(const char* fname, ContType_& result, int& decPrecision) { size_t lineNumber { 0 }; result.clear(); @@ -182,7 +182,7 @@ bool read_diagram_point_set(const char* fname, ContType_& result, int& decPrecis // wrappers template>> -bool read_diagram_point_set(const std::string& fname, ContType_& result, int& decPrecision) +inline bool read_diagram_point_set(const std::string& fname, ContType_& result, int& decPrecision) { return read_diagram_point_set(fname.c_str(), result, decPrecision); } @@ -190,21 +190,21 @@ bool read_diagram_point_set(const std::string& fname, ContType_& result, int& de // these two functions are now just wrappers for the previous ones, // in case someone needs them; decPrecision is ignored template>> -bool read_diagram_point_set(const char* fname, ContType_& result) +inline bool read_diagram_point_set(const char* fname, ContType_& result) { int decPrecision; return read_diagram_point_set(fname, result, decPrecision); } template>> -bool read_diagram_point_set(const std::string& fname, ContType_& result) +inline bool read_diagram_point_set(const std::string& fname, ContType_& result) { int decPrecision; return read_diagram_point_set(fname.c_str(), result, decPrecision); } template > > -bool read_diagram_dipha(const std::string& fname, unsigned int dim, ContType_& result) +inline bool read_diagram_dipha(const std::string& fname, unsigned int dim, ContType_& result) { std::ifstream file; file.open(fname, std::ios::in | std::ios::binary); @@ -274,7 +274,7 @@ bool read_diagram_dipha(const std::string& fname, unsigned int dim, ContType_& r template -void remove_duplicates(ContType& dgm_A, ContType& dgm_B) +inline void remove_duplicates(ContType& dgm_A, ContType& dgm_B) { std::map, int> map_A, map_B; // copy points to maps @@ -328,7 +328,7 @@ void remove_duplicates(ContType& dgm_A, ContType& dgm_B) #ifdef WASSERSTEIN_PURE_GEOM template -int get_point_dimension(const std::string& line) +inline int get_point_dimension(const std::string& line) { Real x; int dim = 0; @@ -341,7 +341,7 @@ int get_point_dimension(const std::string& line) template -bool read_point_cloud(const char* fname, hera::ws::dnn::DynamicPointVector& result, int& dimension, int& decPrecision) +inline bool read_point_cloud(const char* fname, hera::ws::dnn::DynamicPointVector& result, int& dimension, int& decPrecision) { using DynamicPointTraitsR = typename hera::ws::dnn::DynamicPointTraits; @@ -423,20 +423,20 @@ bool read_point_cloud(const char* fname, hera::ws::dnn::DynamicPointVector -bool read_point_cloud(const char* fname, hera::ws::dnn::DynamicPointVector& result, int& dimension) +inline bool read_point_cloud(const char* fname, hera::ws::dnn::DynamicPointVector& result, int& dimension) { int dec_precision; return read_point_cloud(fname, result, dimension, dec_precision); } template -bool read_point_cloud(std::string fname, hera::ws::dnn::DynamicPointVector& result, int& dimension, int& dec_precision) +inline bool read_point_cloud(std::string fname, hera::ws::dnn::DynamicPointVector& result, int& dimension, int& dec_precision) { return read_point_cloud(fname.c_str(), result, dimension, dec_precision); } template -bool read_point_cloud(std::string fname, hera::ws::dnn::DynamicPointVector& result, int& dimension) +inline bool read_point_cloud(std::string fname, hera::ws::dnn::DynamicPointVector& result, int& dimension) { return read_point_cloud(fname.c_str(), result, dimension); } diff --git a/geom_matching/wasserstein/include/wasserstein.h b/geom_matching/wasserstein/include/wasserstein.h index b90a545..2d0cffc 100644 --- a/geom_matching/wasserstein/include/wasserstein.h +++ b/geom_matching/wasserstein/include/wasserstein.h @@ -73,7 +73,7 @@ namespace ws // compare as multisets template - bool are_equal(const PairContainer& dgm1, const PairContainer& dgm2) + inline bool are_equal(const PairContainer& dgm1, const PairContainer& dgm2) { if (dgm1.size() != dgm2.size()) { return false; @@ -97,7 +97,7 @@ namespace ws // to handle points with one coordinate = infinity template - RealType get_one_dimensional_cost(std::vector& set_A, + inline RealType get_one_dimensional_cost(std::vector& set_A, std::vector& set_B, const RealType wasserstein_power) { @@ -210,7 +210,7 @@ namespace ws // this function assumes that all coordinates are finite // points at infinity are processed in wasserstein_cost template - RealType wasserstein_cost_vec(const std::vector>& A, + inline RealType wasserstein_cost_vec(const std::vector>& A, const std::vector>& B, const AuctionParams& params, const std::string& _log_filename_prefix) @@ -245,7 +245,7 @@ namespace ws template -typename DiagramTraits::RealType +inline typename DiagramTraits::RealType wasserstein_cost(const PairContainer& A, const PairContainer& B, const AuctionParams< typename DiagramTraits::RealType >& params, @@ -332,7 +332,7 @@ wasserstein_cost(const PairContainer& A, } template -typename DiagramTraits::RealType +inline typename DiagramTraits::RealType wasserstein_dist(PairContainer& A, PairContainer& B, const AuctionParams::RealType> params, diff --git a/geom_matching/wasserstein/include/wasserstein_pure_geom.hpp b/geom_matching/wasserstein/include/wasserstein_pure_geom.hpp index 2a57599..13a94d5 100644 --- a/geom_matching/wasserstein/include/wasserstein_pure_geom.hpp +++ b/geom_matching/wasserstein/include/wasserstein_pure_geom.hpp @@ -30,7 +30,7 @@ namespace ws using AuctionRunnerJacR = typename hera::ws::AuctionRunnerJac, hera::ws::dnn::DynamicPointVector>; -double wasserstein_cost(const DynamicPointVector& set_A, const DynamicPointVector& set_B, const AuctionParams& params) +inline double wasserstein_cost(const DynamicPointVector& set_A, const DynamicPointVector& set_B, const AuctionParams& params) { if (params.wasserstein_power < 1.0) { throw std::runtime_error("Bad q in Wasserstein " + std::to_string(params.wasserstein_power)); @@ -75,7 +75,7 @@ double wasserstein_cost(const DynamicPointVector& set_A, const DynamicPo } -double wasserstein_dist(const DynamicPointVector& set_A, const DynamicPointVector& set_B, const AuctionParams& params) +inline double wasserstein_dist(const DynamicPointVector& set_A, const DynamicPointVector& set_B, const AuctionParams& params) { return std::pow(wasserstein_cost(set_A, set_B, params), 1.0 / params.wasserstein_power); } -- cgit v1.2.3 From 8ffc1482c88fd1c503524f6e328f69fe3fdede6c Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Thu, 31 May 2018 20:44:59 +0200 Subject: Fix bug in point cloud version. internal_p was not respected by DynamicPointTraits, l_2 distance was always used. --- geom_matching/wasserstein/CMakeLists.txt | 8 ++++---- .../include/auction_oracle_kdtree_pure_geom.hpp | 17 ++++++++------- .../include/auction_oracle_kdtree_restricted.hpp | 4 ++-- .../wasserstein/include/auction_runner_gs.hpp | 16 ++++++++++----- geom_matching/wasserstein/include/basic_defs_ws.h | 23 +++++++++++---------- .../include/dnn/geometry/euclidean-dynamic.h | 24 +++++++++++++++++++++- geom_matching/wasserstein/include/hera_infinity.h | 22 ++++++++++++++++++++ 7 files changed, 84 insertions(+), 30 deletions(-) create mode 100644 geom_matching/wasserstein/include/hera_infinity.h diff --git a/geom_matching/wasserstein/CMakeLists.txt b/geom_matching/wasserstein/CMakeLists.txt index b59378c..c6fba2c 100644 --- a/geom_matching/wasserstein/CMakeLists.txt +++ b/geom_matching/wasserstein/CMakeLists.txt @@ -46,17 +46,17 @@ file(GLOB WS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h ${CMAKE_CURRENT_SOU find_package (Threads) set (libraries ${libraries} ${CMAKE_THREAD_LIBS_INIT}) -add_executable(wasserstein_dist ${CMAKE_CURRENT_SOURCE_DIR}/example/wasserstein_dist.cpp ${WS_HEADERS}) +add_executable(wasserstein_dist ${CMAKE_CURRENT_SOURCE_DIR}/example/wasserstein_dist.cpp ${WS_HEADERS} include/hera_infinity.h) target_link_libraries(wasserstein_dist PUBLIC ${libraries}) -add_executable(wasserstein_dist_dipha ${CMAKE_CURRENT_SOURCE_DIR}/example/wasserstein_dist_dipha.cpp ${WS_HEADERS}) +add_executable(wasserstein_dist_dipha ${CMAKE_CURRENT_SOURCE_DIR}/example/wasserstein_dist_dipha.cpp ${WS_HEADERS} include/hera_infinity.h) target_link_libraries(wasserstein_dist_dipha PUBLIC ${libraries}) # pure geometric version, arbitrary dimension -add_executable(wasserstein_dist_point_cloud ${CMAKE_CURRENT_SOURCE_DIR}/example/wasserstein_dist_point_cloud.cpp ${WS_HEADERS}) +add_executable(wasserstein_dist_point_cloud ${CMAKE_CURRENT_SOURCE_DIR}/example/wasserstein_dist_point_cloud.cpp ${WS_HEADERS} include/hera_infinity.h) target_link_libraries(wasserstein_dist_point_cloud PUBLIC ${libraries}) # Tests -add_executable(wasserstein_test ${CMAKE_CURRENT_SOURCE_DIR}/tests/tests_main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_hera_wasserstein.cpp) +add_executable(wasserstein_test ${CMAKE_CURRENT_SOURCE_DIR}/tests/tests_main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_hera_wasserstein.cpp include/hera_infinity.h) #add_executable(wasserstein_test EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_hera_wasserstein.cpp) target_link_libraries(wasserstein_test PUBLIC ${libraries}) diff --git a/geom_matching/wasserstein/include/auction_oracle_kdtree_pure_geom.hpp b/geom_matching/wasserstein/include/auction_oracle_kdtree_pure_geom.hpp index a6bdf10..eaf54cf 100644 --- a/geom_matching/wasserstein/include/auction_oracle_kdtree_pure_geom.hpp +++ b/geom_matching/wasserstein/include/auction_oracle_kdtree_pure_geom.hpp @@ -111,11 +111,9 @@ AuctionOracleKDTreePureGeom::get_optimal_bid_debug(IdxTy Real best_item_value = std::numeric_limits::max(); Real second_best_item_value = std::numeric_limits::max(); - for(IdxType item_idx = 0; item_idx < this->items.size(); ++item_idx) { + for(size_t item_idx = 0; item_idx < this->items.size(); ++item_idx) { auto item = this->items[item_idx]; - if (item.type != bidder.type and item_idx != bidder_idx) - continue; - auto item_value = std::pow(dist_lp(bidder, item, this->internal_p), this->wasserstein_power, this->dim) + this->prices[item_idx]; + auto item_value = std::pow(traits.distance(bidder, item), this->wasserstein_power) + this->prices[item_idx]; if (item_value < best_item_value) { best_item_value = item_value; best_item_idx = item_idx; @@ -126,11 +124,10 @@ AuctionOracleKDTreePureGeom::get_optimal_bid_debug(IdxTy for(size_t item_idx = 0; item_idx < this->items.size(); ++item_idx) { auto item = this->items[item_idx]; - if (item.type != bidder.type and item_idx != bidder_idx) - continue; if (item_idx == best_item_idx) continue; - auto item_value = std::pow(dist_lp(bidder, item, this->internal_p), this->wasserstein_power, this->dim) + this->prices[item_idx]; + + auto item_value = std::pow(traits.distance(bidder, item), this->wasserstein_power) + this->prices[item_idx]; if (item_value < second_best_item_value) { second_best_item_value = item_value; second_best_item_idx = item_idx; @@ -166,6 +163,12 @@ IdxValPair AuctionOracleKDTreePureGeom::get_optim result.first = best_item_idx; result.second = ( second_best_item_value - best_item_value ) + this->prices[best_item_idx] + this->epsilon; +#ifdef DEBUG_KDTREE_RESTR_ORACLE + auto bid_debug = get_optimal_bid_debug(bidder_idx); + assert(fabs(bid_debug.best_item_value - best_item_value) < 0.000000001); + assert(fabs(bid_debug.second_best_item_value - second_best_item_value) < 0.000000001); +#endif + return result; } diff --git a/geom_matching/wasserstein/include/auction_oracle_kdtree_restricted.hpp b/geom_matching/wasserstein/include/auction_oracle_kdtree_restricted.hpp index 0e6f780..7817bf3 100644 --- a/geom_matching/wasserstein/include/auction_oracle_kdtree_restricted.hpp +++ b/geom_matching/wasserstein/include/auction_oracle_kdtree_restricted.hpp @@ -247,7 +247,7 @@ AuctionOracleKDTreeRestricted::get_optimal_bid_debug(Idx auto item = this->items[item_idx]; if (item.type != bidder.type and item_idx != bidder_idx) continue; - auto item_value = std::pow(dist_lp(bidder, item, this->internal_p), this->wasserstein_power) + this->prices[item_idx]; + auto item_value = std::pow(dist_lp(bidder, item, this->internal_p, 2), this->wasserstein_power) + this->prices[item_idx]; if (item_value < best_item_value) { best_item_value = item_value; best_item_idx = item_idx; @@ -262,7 +262,7 @@ AuctionOracleKDTreeRestricted::get_optimal_bid_debug(Idx continue; if (item_idx == best_item_idx) continue; - auto item_value = std::pow(dist_lp(bidder, item, this->internal_p), this->wasserstein_power) + this->prices[item_idx]; + auto item_value = std::pow(dist_lp(bidder, item, this->internal_p, 2), this->wasserstein_power) + this->prices[item_idx]; if (item_value < second_best_item_value) { second_best_item_value = item_value; second_best_item_idx = item_idx; diff --git a/geom_matching/wasserstein/include/auction_runner_gs.hpp b/geom_matching/wasserstein/include/auction_runner_gs.hpp index d9f419d..960c707 100644 --- a/geom_matching/wasserstein/include/auction_runner_gs.hpp +++ b/geom_matching/wasserstein/include/auction_runner_gs.hpp @@ -244,6 +244,12 @@ void AuctionRunnerGS::run_auction_phases(const int max_num_phases, co flush_assignment(); run_auction_phase(); Real current_result = getDistanceToQthPowerInternal(); +// Real current_result_1 = 0.0; +// for(size_t i = 0; i < num_bidders; ++i) { +// current_result_1 += oracle.traits.distance(bidders[i], items[bidders_to_items[i]]); +// } +// current_result = current_result_1; +// assert(fabs(current_result - current_result_1) < 0.001); Real denominator = current_result - num_bidders * oracle.get_epsilon(); current_result = pow(current_result, 1.0 / wasserstein_power); #ifdef LOG_AUCTION @@ -259,6 +265,7 @@ void AuctionRunnerGS::run_auction_phases(const int max_num_phases, co denominator = pow(denominator, 1.0 / wasserstein_power); Real numerator = current_result - denominator; relative_error = numerator / denominator; + // spdlog::get("console")->info("relative error = {} / {} = {}, result = {}", numerator, denominator, relative_error, current_result); #ifdef LOG_AUCTION console_logger->info("error = {0} / {1} = {2}", numerator, denominator, relative_error); @@ -319,7 +326,7 @@ void AuctionRunnerGS::run_auction_phase() #ifdef DEBUG_AUCTION for(size_t bidder_idx = 0; bidder_idx < num_bidders; ++bidder_idx) { - if ( bidders_to_items[bidder_idx] < 0 or bidders_to_items[bidder_idx] >= num_bidders) { + if ( bidders_to_items[bidder_idx] < 0 or bidders_to_items[bidder_idx] >= (IdxType)num_bidders) { std::cerr << "After auction terminated bidder " << bidder_idx; std::cerr << " has no items assigned" << std::endl; throw std::runtime_error("Auction did not give a perfect matching"); @@ -333,8 +340,7 @@ template R AuctionRunnerGS::get_item_bidder_cost(const size_t item_idx, const size_t bidder_idx, const bool tolerate_invalid_idx) const { if (item_idx != k_invalid_index and bidder_idx != k_invalid_index) { - return std::pow(dist_lp(bidders[bidder_idx], items[item_idx], internal_p, dimension), - wasserstein_power); + return std::pow(dist_lp(bidders[bidder_idx], items[item_idx], internal_p, dimension), wasserstein_power); } else { if (tolerate_invalid_idx) return R(0.0); @@ -416,7 +422,7 @@ void AuctionRunnerGS::sanity_check() } for(size_t bidder_idx = 0; bidder_idx < num_bidders; ++bidder_idx) { - assert( bidders_to_items[bidder_idx] == k_invalid_index or ( bidders_to_items[bidder_idx] < num_items and bidders_to_items[bidder_idx] >= 0)); + assert( bidders_to_items[bidder_idx] == k_invalid_index or ( bidders_to_items[bidder_idx] < (IdxType)num_items and bidders_to_items[bidder_idx] >= 0)); if ( bidders_to_items[bidder_idx] != k_invalid_index) { @@ -440,7 +446,7 @@ void AuctionRunnerGS::sanity_check() } for(IdxType item_idx = 0; item_idx < static_cast(num_bidders); ++item_idx) { - assert( items_to_bidders[item_idx] == k_invalid_index or ( items_to_bidders[item_idx] < num_items and items_to_bidders[item_idx] >= 0)); + assert( items_to_bidders[item_idx] == k_invalid_index or ( items_to_bidders[item_idx] < static_cast(num_items) and items_to_bidders[item_idx] >= 0)); if ( items_to_bidders.at(item_idx) != k_invalid_index) { // check for uniqueness diff --git a/geom_matching/wasserstein/include/basic_defs_ws.h b/geom_matching/wasserstein/include/basic_defs_ws.h index 28f7452..1c5928f 100644 --- a/geom_matching/wasserstein/include/basic_defs_ws.h +++ b/geom_matching/wasserstein/include/basic_defs_ws.h @@ -51,6 +51,7 @@ derivative works thereof, in binary and source code form. #include "spdlog/fmt/ostr.h" #endif +#include "hera_infinity.h" #include "dnn/geometry/euclidean-dynamic.h" #include "def_debug_ws.h" @@ -59,17 +60,17 @@ derivative works thereof, in binary and source code form. namespace hera { -template -inline bool is_infinity(const Real& x) -{ - return x == Real(-1); -}; - -template -inline Real get_infinity() -{ - return Real( -1 ); -} +//template +//inline bool is_infinity(const Real& x) +//{ +// return x == Real(-1); +//}; +// +//template +//inline Real get_infinity() +//{ +// return Real( -1 ); +//} template inline bool is_p_valid_norm(const Real& p) diff --git a/geom_matching/wasserstein/include/dnn/geometry/euclidean-dynamic.h b/geom_matching/wasserstein/include/dnn/geometry/euclidean-dynamic.h index 4b98309..b003906 100644 --- a/geom_matching/wasserstein/include/dnn/geometry/euclidean-dynamic.h +++ b/geom_matching/wasserstein/include/dnn/geometry/euclidean-dynamic.h @@ -8,6 +8,8 @@ #include #include +#include "hera_infinity.h" + namespace hera { namespace ws @@ -89,7 +91,27 @@ struct DynamicPointTraits DynamicPointTraits(unsigned dim = 0): dim_(dim) {} - DistanceType distance(PointType p1, PointType p2) const { return sqrt(sq_distance(p1,p2)); } + DistanceType distance(PointType p1, PointType p2) const + { + Real result = 0.0; + if (hera::is_infinity(internal_p)) { + // max norm + for (unsigned i = 0; i < dimension(); ++i) + result = std::max(result, fabs(coordinate(p1,i) - coordinate(p2,i))); + } else if (internal_p == Real(1.0)) { + // l1-norm + for (unsigned i = 0; i < dimension(); ++i) + result += fabs(coordinate(p1,i) - coordinate(p2,i)); + } else if (internal_p == Real(2.0)) { + result = sqrt(sq_distance(p1,p2)); + } else { + assert(internal_p > 1.0); + for (unsigned i = 0; i < dimension(); ++i) + result += std::pow(fabs(coordinate(p1,i) - coordinate(p2,i)), internal_p); + result = std::pow(result, Real(1.0) / internal_p); + } + return result; + } DistanceType distance(PointHandle p1, PointHandle p2) const { return distance(PointType({p1.p}), PointType({p2.p})); } DistanceType sq_distance(PointType p1, PointType p2) const { Real res = 0; for (unsigned i = 0; i < dimension(); ++i) { Real c1 = coordinate(p1,i), c2 = coordinate(p2,i); res += (c1 - c2)*(c1 - c2); } return res; } DistanceType sq_distance(PointHandle p1, PointHandle p2) const { return sq_distance(PointType({p1.p}), PointType({p2.p})); } diff --git a/geom_matching/wasserstein/include/hera_infinity.h b/geom_matching/wasserstein/include/hera_infinity.h new file mode 100644 index 0000000..5a446e7 --- /dev/null +++ b/geom_matching/wasserstein/include/hera_infinity.h @@ -0,0 +1,22 @@ +#ifndef WASSERSTEIN_HERA_INFINITY_H +#define WASSERSTEIN_HERA_INFINITY_H + +// we cannot assume that template parameter Real will always provide infinity() value, +// so value -1.0 is used to encode infinity (l_inf norm is used by default) + +namespace hera { + + template + inline bool is_infinity(const Real& x) + { + return x == Real(-1); + }; + + template + inline Real get_infinity() + { + return Real(-1); + } +} + +#endif //WASSERSTEIN_HERA_INFINITY_H -- cgit v1.2.3 From c563d463ffce73b070b35e62baf980d19d0bc4ac Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Thu, 31 May 2018 23:42:22 +0200 Subject: 2 bugs fixed in Jacobi for point cloud --- .../wasserstein/example/wasserstein_dist_point_cloud.cpp | 2 +- .../wasserstein/include/auction_oracle_kdtree_restricted.hpp | 4 ++-- geom_matching/wasserstein/include/auction_runner_jac.hpp | 9 +++++++-- geom_matching/wasserstein/include/wasserstein_pure_geom.hpp | 1 - 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/geom_matching/wasserstein/example/wasserstein_dist_point_cloud.cpp b/geom_matching/wasserstein/example/wasserstein_dist_point_cloud.cpp index 6f699a4..2f9718e 100644 --- a/geom_matching/wasserstein/example/wasserstein_dist_point_cloud.cpp +++ b/geom_matching/wasserstein/example/wasserstein_dist_point_cloud.cpp @@ -35,6 +35,7 @@ derivative works thereof, in binary and source code form. int main(int argc, char* argv[]) { + //{ //int n_points = 3; //int dim = 3; @@ -106,7 +107,6 @@ int main(int argc, char* argv[]) params.dim = dimension_A; - params.wasserstein_power = (4 <= argc) ? atof(argv[3]) : 1.0; if (params.wasserstein_power < 1.0) { std::cerr << "The third argument (wasserstein_degree) was \"" << argv[3] << "\", must be a number >= 1.0. Cannot proceed. " << std::endl; diff --git a/geom_matching/wasserstein/include/auction_oracle_kdtree_restricted.hpp b/geom_matching/wasserstein/include/auction_oracle_kdtree_restricted.hpp index 7817bf3..3c3cba3 100644 --- a/geom_matching/wasserstein/include/auction_oracle_kdtree_restricted.hpp +++ b/geom_matching/wasserstein/include/auction_oracle_kdtree_restricted.hpp @@ -243,7 +243,7 @@ AuctionOracleKDTreeRestricted::get_optimal_bid_debug(Idx Real best_item_value = std::numeric_limits::max(); Real second_best_item_value = std::numeric_limits::max(); - for(IdxType item_idx = 0; item_idx < this->items.size(); ++item_idx) { + for(IdxType item_idx = 0; item_idx < static_cast(this->items.size()); ++item_idx) { auto item = this->items[item_idx]; if (item.type != bidder.type and item_idx != bidder_idx) continue; @@ -258,7 +258,7 @@ AuctionOracleKDTreeRestricted::get_optimal_bid_debug(Idx for(size_t item_idx = 0; item_idx < this->items.size(); ++item_idx) { auto item = this->items[item_idx]; - if (item.type != bidder.type and item_idx != bidder_idx) + if (item.type != bidder.type and static_cast(item_idx) != bidder_idx) continue; if (item_idx == best_item_idx) continue; diff --git a/geom_matching/wasserstein/include/auction_runner_jac.hpp b/geom_matching/wasserstein/include/auction_runner_jac.hpp index 8663bae..c519de1 100644 --- a/geom_matching/wasserstein/include/auction_runner_jac.hpp +++ b/geom_matching/wasserstein/include/auction_runner_jac.hpp @@ -42,7 +42,6 @@ derivative works thereof, in binary and source code form. #undef DEBUG_AUCTION #endif - namespace hera { namespace ws { @@ -350,6 +349,8 @@ namespace ws { typename AuctionRunnerJac::Real AuctionRunnerJac::get_relative_error(const bool debug_output) const { + if (partial_cost == 0.0 and unassigned_bidders.empty()) + return 0.0; Real result; #ifndef WASSERSTEIN_PURE_GEOM Real gamma = get_gamma(); @@ -560,7 +561,7 @@ namespace ws { wasserstein_cost = get_item_bidder_cost(0,0); return; } - double init_eps = (initial_epsilon > 0.0) ? initial_epsilon : oracle.max_val_ / 4.0; + R init_eps = (initial_epsilon > 0.0) ? initial_epsilon : oracle.max_val_ / 4.0; run_auction_phases(max_num_phases, init_eps); is_distance_computed = true; wasserstein_cost = partial_cost; @@ -703,7 +704,11 @@ namespace ws { template bool AuctionRunnerJac::continue_auction_phase() const { +#ifdef WASSERSTEIN_PURE_GEOM + return not unassigned_bidders.empty(); +#else return not unassigned_bidders.empty() and not is_done(); +#endif } template diff --git a/geom_matching/wasserstein/include/wasserstein_pure_geom.hpp b/geom_matching/wasserstein/include/wasserstein_pure_geom.hpp index 13a94d5..096d95d 100644 --- a/geom_matching/wasserstein/include/wasserstein_pure_geom.hpp +++ b/geom_matching/wasserstein/include/wasserstein_pure_geom.hpp @@ -72,7 +72,6 @@ inline double wasserstein_cost(const DynamicPointVector& set_A, const Dy auction.run_auction(); return auction.get_wasserstein_cost(); } - } inline double wasserstein_dist(const DynamicPointVector& set_A, const DynamicPointVector& set_B, const AuctionParams& params) -- cgit v1.2.3 From 58642131623733ed7360fa146d106cff7f3a057c Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Fri, 1 Jun 2018 16:01:00 +0200 Subject: First trivial test for point cloud version --- geom_matching/wasserstein/CMakeLists.txt | 2 +- .../wasserstein/include/auction_runner_gs.hpp | 1 + .../wasserstein/include/auction_runner_jac.hpp | 1 + geom_matching/wasserstein/include/hera_infinity.h | 2 +- .../wasserstein/tests/test_hera_wasserstein.cpp | 53 +--------- .../tests/test_hera_wasserstein_pure_geom.cpp | 111 +++++++++++++++++++++ geom_matching/wasserstein/tests/tests_reader.h | 67 +++++++++++++ 7 files changed, 184 insertions(+), 53 deletions(-) create mode 100644 geom_matching/wasserstein/tests/test_hera_wasserstein_pure_geom.cpp create mode 100644 geom_matching/wasserstein/tests/tests_reader.h diff --git a/geom_matching/wasserstein/CMakeLists.txt b/geom_matching/wasserstein/CMakeLists.txt index c6fba2c..dea4550 100644 --- a/geom_matching/wasserstein/CMakeLists.txt +++ b/geom_matching/wasserstein/CMakeLists.txt @@ -57,6 +57,6 @@ add_executable(wasserstein_dist_point_cloud ${CMAKE_CURRENT_SOURCE_DIR}/example/ target_link_libraries(wasserstein_dist_point_cloud PUBLIC ${libraries}) # Tests -add_executable(wasserstein_test ${CMAKE_CURRENT_SOURCE_DIR}/tests/tests_main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_hera_wasserstein.cpp include/hera_infinity.h) +add_executable(wasserstein_test ${CMAKE_CURRENT_SOURCE_DIR}/tests/tests_main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_hera_wasserstein.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_hera_wasserstein_pure_geom.cpp include/hera_infinity.h tests/tests_reader.h) #add_executable(wasserstein_test EXCLUDE_FROM_ALL ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_hera_wasserstein.cpp) target_link_libraries(wasserstein_test PUBLIC ${libraries}) diff --git a/geom_matching/wasserstein/include/auction_runner_gs.hpp b/geom_matching/wasserstein/include/auction_runner_gs.hpp index 960c707..141cb2c 100644 --- a/geom_matching/wasserstein/include/auction_runner_gs.hpp +++ b/geom_matching/wasserstein/include/auction_runner_gs.hpp @@ -287,6 +287,7 @@ void AuctionRunnerGS::run_auction() if (num_bidders == 1) { assign_item_to_bidder(0, 0); wasserstein_cost = get_item_bidder_cost(0,0); + is_distance_computed = true; return; } diff --git a/geom_matching/wasserstein/include/auction_runner_jac.hpp b/geom_matching/wasserstein/include/auction_runner_jac.hpp index c519de1..e623f4a 100644 --- a/geom_matching/wasserstein/include/auction_runner_jac.hpp +++ b/geom_matching/wasserstein/include/auction_runner_jac.hpp @@ -559,6 +559,7 @@ namespace ws { if (num_bidders == 1) { assign_item_to_bidder(0, 0); wasserstein_cost = get_item_bidder_cost(0,0); + is_distance_computed = true; return; } R init_eps = (initial_epsilon > 0.0) ? initial_epsilon : oracle.max_val_ / 4.0; diff --git a/geom_matching/wasserstein/include/hera_infinity.h b/geom_matching/wasserstein/include/hera_infinity.h index 5a446e7..8d86dbb 100644 --- a/geom_matching/wasserstein/include/hera_infinity.h +++ b/geom_matching/wasserstein/include/hera_infinity.h @@ -13,7 +13,7 @@ namespace hera { }; template - inline Real get_infinity() + inline constexpr Real get_infinity() { return Real(-1); } diff --git a/geom_matching/wasserstein/tests/test_hera_wasserstein.cpp b/geom_matching/wasserstein/tests/test_hera_wasserstein.cpp index 3d5db5f..0a80d2f 100644 --- a/geom_matching/wasserstein/tests/test_hera_wasserstein.cpp +++ b/geom_matching/wasserstein/tests/test_hera_wasserstein.cpp @@ -8,61 +8,12 @@ #undef LOG_AUCTION #include "wasserstein.h" +#include "tests_reader.h" +using namespace hera_test; using PairVector = std::vector>; -std::vector split_on_delim(const std::string& s, char delim) -{ - std::stringstream ss(s); - std::string token; - std::vector tokens; - while(std::getline(ss, token, delim)) { - tokens.push_back(token); - } - return tokens; -} - - -// single row in a file with test cases -struct TestFromFileCase { - - std::string file_1; - std::string file_2; - double q; - double internal_p; - double answer; - - TestFromFileCase(std::string s) - { - auto tokens = split_on_delim(s, ' '); - assert(tokens.size() == 5); - - file_1 = tokens.at(0); - file_2 = tokens.at(1); - q = std::stod(tokens.at(2)); - internal_p = std::stod(tokens.at(3)); - answer = std::stod(tokens.at(4)); - - if ( q < 1.0 or std::isinf(q) or - (internal_p != hera::get_infinity() and internal_p < 1.0)) { - throw std::runtime_error("Bad line in test_list.txt"); - } - } -}; - -std::ostream& operator<<(std::ostream& out, const TestFromFileCase& s) -{ - out << "[" << s.file_1 << ", " << s.file_2 << ", q = " << s.q << ", norm = "; - if (s.internal_p != hera::get_infinity()) { - out << s.internal_p; - } else { - out << "infinity"; - } - out << ", answer = " << s.answer << "]"; - return out; -} - TEST_CASE("simple cases", "wasserstein_dist") { diff --git a/geom_matching/wasserstein/tests/test_hera_wasserstein_pure_geom.cpp b/geom_matching/wasserstein/tests/test_hera_wasserstein_pure_geom.cpp new file mode 100644 index 0000000..9603ceb --- /dev/null +++ b/geom_matching/wasserstein/tests/test_hera_wasserstein_pure_geom.cpp @@ -0,0 +1,111 @@ +#include "catch/catch.hpp" + +#include +#include + + +#undef LOG_AUCTION + +#include "wasserstein_pure_geom.hpp" +#include "tests_reader.h" + +using namespace hera_test; + +TEST_CASE("simple point clouds", "wasserstein_dist_pure_geom") +{ +// int n_points = 3; +// int dim = 3; +// using Traits = hera::ws::dnn::DynamicPointTraits; +// hera::ws::dnn::DynamicPointTraits traits(dim); +// hera::ws::dnn::DynamicPointVector dgm_a = traits.container(n_points); +// hera::ws::dnn::DynamicPointVector dgm_b = traits.container(n_points); +// +// dgm_a[0][0] = 0.0; +// dgm_a[0][1] = 0.0; +// dgm_a[0][2] = 0.0; +// +// dgm_a[1][0] = 1.0; +// dgm_a[1][1] = 0.0; +// dgm_a[1][2] = 0.0; +// +// dgm_a[2][0] = 0.0; +// dgm_a[2][1] = 1.0; +// dgm_a[2][2] = 1.0; +// +// dgm_b[0][0] = 0.0; +// dgm_b[0][1] = 0.1; +// dgm_b[0][2] = 0.1; +// +// dgm_b[1][0] = 1.1; +// dgm_b[1][1] = 0.0; +// dgm_b[1][2] = 0.0; +// +// dgm_b[2][0] = 0.0; +// dgm_b[2][1] = 1.1; +// dgm_b[2][2] = 0.9; + + const int dim = 3; + using Traits = hera::ws::dnn::DynamicPointTraits; + hera::ws::dnn::DynamicPointTraits traits(dim); + hera::AuctionParams params; + params.dim = dim; + params.wasserstein_power = 1.0; + params.delta = 0.01; + params.internal_p = hera::get_infinity(); + params.initial_epsilon = 0.0; + params.epsilon_common_ratio = 0.0; + params.max_num_phases = 30; + params.gamma_threshold = 0.0; + params.max_bids_per_round = 0; // use Jacobi + + + SECTION("trivial: two single-point diagrams-1") { + + int n_points = 1; + hera::ws::dnn::DynamicPointVector dgm_a = traits.container(n_points); + hera::ws::dnn::DynamicPointVector dgm_b = traits.container(n_points); + + dgm_a[0][0] = 0.0; + dgm_a[0][1] = 0.0; + dgm_a[0][2] = 0.0; + + dgm_b[0][0] = 1.0; + dgm_b[0][1] = 1.0; + dgm_b[0][2] = 1.0; + + std::vector max_bids { 1, 10, 0 }; + std::vector internal_ps{ 1, 2, static_cast(hera::get_infinity()) }; + std::vector wasserstein_powers { 1, 2, 3 }; + + for(auto internal_p : internal_ps) { + // there is only one point, so the answer does not depend wasserstein power + double correct_answer; + switch (internal_p) { + case 1 : + correct_answer = 3.0; + break; + case 2 : + correct_answer = sqrt(3.0); + break; + case static_cast(hera::get_infinity()) : + correct_answer = 1.0; + break; + default : + throw std::runtime_error("Correct answer not specified in test case"); + } + + for (auto max_bid : max_bids) { + for (auto wasserstein_power : wasserstein_powers) { + params.max_bids_per_round = max_bid; + params.internal_p = internal_p; + params.wasserstein_power = wasserstein_power; + double d1 = hera::ws::wasserstein_dist(dgm_a, dgm_b, params); + double d2 = hera::ws::wasserstein_dist(dgm_b, dgm_a, params); + REQUIRE(fabs(d1 - d2) <= 0.00000000001); + REQUIRE(fabs(d1 - correct_answer) <= 0.00000000001); + } + } + } + } +} + diff --git a/geom_matching/wasserstein/tests/tests_reader.h b/geom_matching/wasserstein/tests/tests_reader.h new file mode 100644 index 0000000..f2d5735 --- /dev/null +++ b/geom_matching/wasserstein/tests/tests_reader.h @@ -0,0 +1,67 @@ +#ifndef WASSERSTEIN_TESTS_READER_H +#define WASSERSTEIN_TESTS_READER_H + +#include +#include +#include +#include +#include +#include +#include + +#include "hera_infinity.h" + +namespace hera_test { + inline std::vector split_on_delim(const std::string& s, char delim) + { + std::stringstream ss(s); + std::string token; + std::vector tokens; + while (std::getline(ss, token, delim)) { + tokens.push_back(token); + } + return tokens; + } + + + // single row in a file with test cases + struct TestFromFileCase + { + + std::string file_1; + std::string file_2; + double q; + double internal_p; + double answer; + + TestFromFileCase(std::string s) + { + auto tokens = split_on_delim(s, ' '); + assert(tokens.size() == 5); + + file_1 = tokens.at(0); + file_2 = tokens.at(1); + q = std::stod(tokens.at(2)); + internal_p = std::stod(tokens.at(3)); + answer = std::stod(tokens.at(4)); + + if (q < 1.0 or std::isinf(q) or + (internal_p != hera::get_infinity() and internal_p < 1.0)) { + throw std::runtime_error("Bad line in test_list.txt"); + } + } + }; + + inline std::ostream& operator<<(std::ostream& out, const TestFromFileCase& s) + { + out << "[" << s.file_1 << ", " << s.file_2 << ", q = " << s.q << ", norm = "; + if (s.internal_p != hera::get_infinity()) { + out << s.internal_p; + } else { + out << "infinity"; + } + out << ", answer = " << s.answer << "]"; + return out; + } +} // namespace hera_test +#endif //WASSERSTEIN_TESTS_READER_H -- cgit v1.2.3 From c76e88bca80bfb4d29684891f2a954064532c2d0 Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Sun, 3 Jun 2018 09:47:20 +0200 Subject: Add const qualifier --- geom_matching/wasserstein/include/wasserstein.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/geom_matching/wasserstein/include/wasserstein.h b/geom_matching/wasserstein/include/wasserstein.h index 2d0cffc..a24bada 100644 --- a/geom_matching/wasserstein/include/wasserstein.h +++ b/geom_matching/wasserstein/include/wasserstein.h @@ -333,8 +333,8 @@ wasserstein_cost(const PairContainer& A, template inline typename DiagramTraits::RealType -wasserstein_dist(PairContainer& A, - PairContainer& B, +wasserstein_dist(const PairContainer& A, + const PairContainer& B, const AuctionParams::RealType> params, const std::string& _log_filename_prefix = "") { -- cgit v1.2.3 From a9d06f12ecbaa055d17970e09827ea7b67d1f53c Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Sun, 3 Jun 2018 22:39:49 +0200 Subject: First tests added Preparation for longest edge computation. --- geom_bottleneck/CMakeLists.txt | 3 + geom_bottleneck/include/basic_defs_bt.h | 749 +- geom_bottleneck/include/bottleneck.h | 151 +- geom_bottleneck/include/bottleneck_detail.h | 71 +- geom_bottleneck/include/bottleneck_detail.hpp | 905 +- geom_bottleneck/include/bound_match.h | 2 + geom_bottleneck/include/bound_match.hpp | 13 + geom_bottleneck/include/catch/catch.hpp | 11545 +++++++++++++++++++++++ geom_bottleneck/tests/test_hera_bottleneck.cpp | 446 + geom_bottleneck/tests/tests_main.cpp | 3 + 10 files changed, 13038 insertions(+), 850 deletions(-) create mode 100644 geom_bottleneck/include/catch/catch.hpp create mode 100644 geom_bottleneck/tests/test_hera_bottleneck.cpp create mode 100644 geom_bottleneck/tests/tests_main.cpp diff --git a/geom_bottleneck/CMakeLists.txt b/geom_bottleneck/CMakeLists.txt index 62dc2f2..7a820ac 100644 --- a/geom_bottleneck/CMakeLists.txt +++ b/geom_bottleneck/CMakeLists.txt @@ -33,3 +33,6 @@ set (libraries ${libraries} ${CMAKE_THREAD_LIBS_INIT}) add_executable(bottleneck_dist ${CMAKE_CURRENT_SOURCE_DIR}/example/bottleneck_dist.cpp ${WS_HEADERS}) target_link_libraries(bottleneck_dist PUBLIC ${libraries}) + +add_executable(bottleneck_test ${CMAKE_CURRENT_SOURCE_DIR}/tests/tests_main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_hera_bottleneck.cpp) +target_link_libraries(bottleneck_test PUBLIC ${libraries}) diff --git a/geom_bottleneck/include/basic_defs_bt.h b/geom_bottleneck/include/basic_defs_bt.h index 69dc709..954696e 100644 --- a/geom_bottleneck/include/basic_defs_bt.h +++ b/geom_bottleneck/include/basic_defs_bt.h @@ -33,6 +33,7 @@ derivative works thereof, in binary and source code form. #include #endif +#include #include #include #include @@ -45,432 +46,480 @@ derivative works thereof, in binary and source code form. #include "def_debug_bt.h" #ifndef FOR_R_TDA -#include -#endif -namespace hera { -namespace bt { +#include -typedef int IdType; -constexpr IdType MinValidId = 10; +#endif -template -struct Point { - Real x, y; +namespace hera { - bool operator==(const Point &other) const + template + Real get_infinity() { - return ((this->x == other.x) and (this->y == other.y)); + return Real(-1.0); } - bool operator!=(const Point &other) const - { - return !(*this == other); - } + namespace bt { + - Point(Real ax, Real ay) : x(ax), y(ay) {} + typedef int IdType; + constexpr IdType MinValidId = 10; - Point() : x(0.0), y(0.0) {} + template + struct Point + { + Real x, y; + + bool operator==(const Point& other) const + { + return ((this->x == other.x) and (this->y == other.y)); + } + + bool operator!=(const Point& other) const + { + return !(*this == other); + } + + Point(Real ax, Real ay) : + x(ax), y(ay) + {} + + Point() : + x(0.0), y(0.0) + {} #ifndef FOR_R_TDA - template - friend std::ostream& operator<<(std::ostream& output, const Point& p) - { - output << "(" << p.x << ", " << p.y << ")"; - return output; - } + template + friend std::ostream& operator<<(std::ostream& output, const Point& p) + { + output << "(" << p.x << ", " << p.y << ")"; + return output; + } #endif -}; - -template -struct DiagramPoint { - // Points above the diagonal have type NORMAL - // Projections onto the diagonal have type DIAG - // for DIAG points only x-coordinate is relevant - // to-do: add getters/setters, checks in constructors, etc - enum Type { - NORMAL, DIAG - }; - // data members -private: - Real x, y; -public: - Type type; - IdType id; - - // operators, constructors - bool operator==(const DiagramPoint &other) const - { - // compare by id only - assert(this->id >= MinValidId); - assert(other.id >= MinValidId); - bool areEqual{ this->id == other.id }; - assert(!areEqual or ((this->x == other.x) and (this->y == other.y) and (this->type == other.type))); - return areEqual; - } + }; + + template + struct DiagramPoint + { + // Points above the diagonal have type NORMAL + // Projections onto the diagonal have type DIAG + // for DIAG points only x-coordinate is relevant + // to-do: add getters/setters, checks in constructors, etc + enum Type + { + NORMAL, DIAG + }; + // data members + private: + Real x, y; + public: + Type type; + IdType id; + + // operators, constructors + bool operator==(const DiagramPoint& other) const + { + // compare by id only + assert(this->id >= MinValidId); + assert(other.id >= MinValidId); + bool areEqual { this->id == other.id }; + assert(!areEqual or ((this->x == other.x) and (this->y == other.y) and (this->type == other.type))); + return areEqual; + } - bool operator!=(const DiagramPoint &other) const - { - return !(*this == other); - } + bool operator!=(const DiagramPoint& other) const + { + return !(*this == other); + } - DiagramPoint(Real _x, Real _y, Type _type, IdType _id) : - x(_x), - y(_y), - type(_type), - id(_id) - { - if ( _y == _x and _type != DIAG) - throw std::runtime_error("Point on the main diagonal must have DIAG type"); + DiagramPoint() : + x(0.0), + y(0.0), + type(DiagramPoint::DIAG), + id(MinValidId - 1) + { + } - } + DiagramPoint(Real _x, Real _y, Type _type, IdType _id) : + x(_x), + y(_y), + type(_type), + id(_id) + { + if (_y == _x and _type != DIAG) { + throw std::runtime_error("Point on the main diagonal must have DIAG type"); + } + } - bool isDiagonal() const { return type == DIAG; } - bool isNormal() const { return type == NORMAL; } + bool isDiagonal() const + { return type == DIAG; } - bool isInfinity() const - { - return x == std::numeric_limits::infinity() or - x == -std::numeric_limits::infinity() or - y == std::numeric_limits::infinity() or - y == -std::numeric_limits::infinity(); - } + bool isNormal() const + { return type == NORMAL; } - Real inline getRealX() const // return the x-coord - { - return x; - } + bool isInfinity() const + { + return x == std::numeric_limits::infinity() or + x == -std::numeric_limits::infinity() or + y == std::numeric_limits::infinity() or + y == -std::numeric_limits::infinity(); + } - Real inline getRealY() const // return the y-coord - { - return y; - } + Real inline getRealX() const // return the x-coord + { + return x; + } + + Real inline getRealY() const // return the y-coord + { + return y; + } #ifndef FOR_R_TDA - template - friend std::ostream& operator<<(std::ostream& output, const DiagramPoint& p) - { - if ( p.isDiagonal() ) { - output << "(" << p.x << ", " << p.y << ", " << 0.5 * (p.x + p.y) << ", " << p.id << " DIAG )"; - } else { - output << "(" << p.x << ", " << p.y << ", " << p.id << " NORMAL)"; - } - return output; - } -#endif -}; + template + friend std::ostream& operator<<(std::ostream& output, const DiagramPoint& p) + { + if (p.isDiagonal()) { + output << "(" << p.x << ", " << p.y << ", " << 0.5 * (p.x + p.y) << ", " << p.id << " DIAG )"; + } else { + output << "(" << p.x << ", " << p.y << ", " << p.id << " NORMAL)"; + } + return output; + } -// compute l-inf distance between two diagram points -template -Real distLInf(const DiagramPoint& a, const DiagramPoint& b) -{ - if ( a.isDiagonal() and b.isDiagonal() ) { - // distance between points on the diagonal is 0 - return 0.0; - } - // otherwise distance is a usual l-inf distance - return std::max(fabs(a.getRealX() - b.getRealX()), fabs(a.getRealY() - b.getRealY())); -} +#endif + }; -template -inline void hash_combine(std::size_t & seed, const T & v) -{ - std::hash hasher; - seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); -} + template + using MatchingEdge = std::pair, DiagramPoint>; -template -struct DiagramPointHash { - size_t operator()(const DiagramPoint &p) const - { - assert(p.id >= MinValidId); - return std::hash()(p.id); - } -}; + // compute l-inf distance between two diagram points + template + Real distLInf(const DiagramPoint& a, const DiagramPoint& b) + { + if (a.isDiagonal() and b.isDiagonal()) { + // distance between points on the diagonal is 0 + return 0.0; + } + // otherwise distance is a usual l-inf distance + return std::max(fabs(a.getRealX() - b.getRealX()), fabs(a.getRealY() - b.getRealY())); + } -template -Real distLInf(const DiagramPoint &a, const DiagramPoint &b); -//template -//typedef std::unordered_set PointSet; -template -class DiagramPointSet; + template + Real get_infinity() + { + return Real(-1.0); + } -template -void addProjections(DiagramPointSet &A, DiagramPointSet &B); + template + inline void hash_combine(std::size_t& seed, const T& v) + { + std::hash hasher; + seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); + } -template -class DiagramPointSet { -public: + template + struct DiagramPointHash + { + size_t operator()(const DiagramPoint& p) const + { + assert(p.id >= MinValidId); + return std::hash()(p.id); + } + }; - using Real = Real_; - using DgmPoint = DiagramPoint; - using DgmPointHash = DiagramPointHash; - using const_iterator = typename std::unordered_set::const_iterator; - using iterator = typename std::unordered_set::iterator; + template + Real distLInf(const DiagramPoint& a, const DiagramPoint& b); -private: + //template + //typedef std::unordered_set PointSet; + template + class DiagramPointSet; - bool isLinked { false }; - IdType maxId { MinValidId + 1 }; - std::unordered_set points; + template + void addProjections(DiagramPointSet& A, DiagramPointSet& B); -public: + template + class DiagramPointSet + { + public: - void insert(const DgmPoint& p) - { - points.insert(p); - if (p.id > maxId) { - maxId = p.id + 1; - } - } + using Real = Real_; + using DgmPoint = DiagramPoint; + using DgmPointHash = DiagramPointHash; + using const_iterator = typename std::unordered_set::const_iterator; + using iterator = typename std::unordered_set::iterator; - void erase(const DgmPoint& p, bool doCheck = true) - { - // if doCheck, erasing non-existing elements causes assert - auto it = points.find(p); - if (it != points.end()) { - points.erase(it); - } else { - assert(!doCheck); - } - } + private: + bool isLinked { false }; + IdType maxId { MinValidId + 1 }; + std::unordered_set points; - void erase(const const_iterator it) - { - points.erase(it); - } + public: - void removeDiagonalPoints() - { - if (isLinked) { - auto ptIter = points.begin(); - while(ptIter != points.end()) { - if (ptIter->isDiagonal()) { - ptIter = points.erase(ptIter); + void insert(const DgmPoint& p) + { + points.insert(p); + if (p.id > maxId) { + maxId = p.id + 1; + } + } + + void erase(const DgmPoint& p, bool doCheck = true) + { + // if doCheck, erasing non-existing elements causes assert + auto it = points.find(p); + if (it != points.end()) { + points.erase(it); } else { - ptIter++; + assert(!doCheck); } } - isLinked = false; - } - } - size_t size() const - { - return points.size(); - } - void reserve(const size_t newSize) - { - points.reserve(newSize); - } + void erase(const const_iterator it) + { + points.erase(it); + } - void clear() - { - points.clear(); - } + void removeDiagonalPoints() + { + if (isLinked) { + auto ptIter = points.begin(); + while (ptIter != points.end()) { + if (ptIter->isDiagonal()) { + ptIter = points.erase(ptIter); + } else { + ptIter++; + } + } + isLinked = false; + } + } - bool empty() const - { - return points.empty(); - } + size_t size() const + { + return points.size(); + } - bool hasElement(const DgmPoint &p) const - { - return points.find(p) != points.end(); - } + void reserve(const size_t newSize) + { + points.reserve(newSize); + } - iterator find(const DgmPoint &p) - { - return points.find(p); - } + void clear() + { + points.clear(); + } - iterator begin() - { - return points.begin(); - } + bool empty() const + { + return points.empty(); + } - iterator end() - { - return points.end(); - } + bool hasElement(const DgmPoint& p) const + { + return points.find(p) != points.end(); + } - const_iterator cbegin() const - { - return points.cbegin(); - } + iterator find(const DgmPoint& p) + { + return points.find(p); + } - const_iterator cend() const - { - return points.cend(); - } + iterator begin() + { + return points.begin(); + } + iterator end() + { + return points.end(); + } - const_iterator find(const DgmPoint &p) const - { - return points.find(p); - } + const_iterator cbegin() const + { + return points.cbegin(); + } + + const_iterator cend() const + { + return points.cend(); + } + + + const_iterator find(const DgmPoint& p) const + { + return points.find(p); + } #ifndef FOR_R_TDA - template - friend std::ostream& operator<<(std::ostream& output, const DiagramPointSet& ps) - { - output << "{ "; - for(auto pit = ps.cbegin(); pit != ps.cend(); ++pit) { - output << *pit << ", "; - } - output << "\b\b }"; - return output; - } + + template + friend std::ostream& operator<<(std::ostream& output, const DiagramPointSet& ps) + { + output << "{ "; + for (auto pit = ps.cbegin(); pit != ps.cend(); ++pit) { + output << *pit << ", "; + } + output << "\b\b }"; + return output; + } + #endif - friend void addProjections(DiagramPointSet& A, DiagramPointSet& B); + friend void addProjections(DiagramPointSet& A, DiagramPointSet& B); - template - void fillIn(PairIterator begin_iter, PairIterator end_iter) - { - isLinked = false; - clear(); - IdType uniqueId = MinValidId + 1; - for (auto iter = begin_iter; iter != end_iter; ++iter) { - insert(DgmPoint(iter->first, iter->second, DgmPoint::NORMAL, uniqueId++)); - } - } + template + void fillIn(PairIterator begin_iter, PairIterator end_iter) + { + isLinked = false; + clear(); + IdType uniqueId = MinValidId + 1; + for (auto iter = begin_iter; iter != end_iter; ++iter) { + insert(DgmPoint(iter->first, iter->second, DgmPoint::NORMAL, uniqueId++)); + } + } - template - void fillIn(const PointContainer& dgm_cont) - { - using Traits = DiagramTraits; - isLinked = false; - clear(); - IdType uniqueId = MinValidId + 1; - for (const auto& pt : dgm_cont) { - Real x = Traits::get_x(pt); - Real y = Traits::get_y(pt); - insert(DgmPoint(x, y, DgmPoint::NORMAL, uniqueId++)); - } - } + template + void fillIn(const PointContainer& dgm_cont) + { + using Traits = DiagramTraits; + isLinked = false; + clear(); + IdType uniqueId = MinValidId + 1; + for (const auto& pt : dgm_cont) { + Real x = Traits::get_x(pt); + Real y = Traits::get_y(pt); + insert(DgmPoint(x, y, DgmPoint::NORMAL, uniqueId++)); + } + } - // ctor from range - template - DiagramPointSet(PairIterator begin_iter, PairIterator end_iter) - { - fillIn(begin_iter, end_iter); - } + // ctor from range + template + DiagramPointSet(PairIterator begin_iter, PairIterator end_iter) + { + fillIn(begin_iter, end_iter); + } - // ctor from container, uses DiagramTraits - template - DiagramPointSet(const PointContainer& dgm) - { - fillIn(dgm); - } + // ctor from container, uses DiagramTraits + template + DiagramPointSet(const PointContainer& dgm) + { + fillIn(dgm); + } - // default ctor, empty diagram - DiagramPointSet(IdType minId = MinValidId + 1) : maxId(minId + 1) {}; + // default ctor, empty diagram + DiagramPointSet(IdType minId = MinValidId + 1) : + maxId(minId + 1) + {}; - IdType nextId() { return maxId + 1; } + IdType nextId() + { return maxId + 1; } -}; // DiagramPointSet + }; // DiagramPointSet -template -Real getFurthestDistance3Approx(DiagPointContainer& A, DiagPointContainer& B) { - Real result{0.0}; - DiagramPoint begA = *(A.begin()); - DiagramPoint optB = *(B.begin()); - for (const auto &pointB : B) { - if (distLInf(begA, pointB) > result) { - result = distLInf(begA, pointB); - optB = pointB; - } - } - for (const auto &pointA : A) { - if (distLInf(pointA, optB) > result) { - result = distLInf(pointA, optB); - } - } - return result; -} - -// preprocess diagrams A and B by adding projections onto diagonal of points of -// A to B and vice versa. Also removes points at infinity! -// NB: ids of points will be changed! -template -void addProjections(DiagramPointSet& A, DiagramPointSet& B) -{ - - using Real = Real_; - using DgmPoint = DiagramPoint; - using DgmPointSet = DiagramPointSet; - - IdType uniqueId {MinValidId + 1}; - DgmPointSet newA, newB; - - // copy normal points from A to newA - // add projections to newB - for(auto& pA : A) { - if (pA.isNormal() and not pA.isInfinity()) { - // add pA's projection to B - DgmPoint dpA {pA.getRealX(), pA.getRealY(), DgmPoint::NORMAL, uniqueId++}; - DgmPoint dpB {(pA.getRealX() +pA.getRealY())/2, (pA.getRealX() +pA.getRealY())/2, DgmPoint::DIAG, uniqueId++}; - newA.insert(dpA); - newB.insert(dpB); + template + Real getFurthestDistance3Approx(DiagPointContainer& A, DiagPointContainer& B) + { + Real result { 0.0 }; + DiagramPoint begA = *(A.begin()); + DiagramPoint optB = *(B.begin()); + for (const auto& pointB : B) { + if (distLInf(begA, pointB) > result) { + result = distLInf(begA, pointB); + optB = pointB; + } + } + for (const auto& pointA : A) { + if (distLInf(pointA, optB) > result) { + result = distLInf(pointA, optB); + } + } + return result; } - } - for(auto& pB : B) { - if (pB.isNormal() and not pB.isInfinity()) { - // add pB's projection to A - DgmPoint dpB {pB.getRealX(), pB.getRealY(), DgmPoint::NORMAL, uniqueId++}; - DgmPoint dpA {(pB.getRealX() +pB.getRealY())/2, (pB.getRealX() +pB.getRealY())/2, DgmPoint::DIAG, uniqueId++}; - newB.insert(dpB); - newA.insert(dpA); + // preprocess diagrams A and B by adding projections onto diagonal of points of + // A to B and vice versa. Also removes points at infinity! + // NB: ids of points will be changed! + template + void addProjections(DiagramPointSet& A, DiagramPointSet& B) + { + + using Real = Real_; + using DgmPoint = DiagramPoint; + using DgmPointSet = DiagramPointSet; + + IdType uniqueId { MinValidId + 1 }; + DgmPointSet newA, newB; + + // copy normal points from A to newA + // add projections to newB + for (auto& pA : A) { + if (pA.isNormal() and not pA.isInfinity()) { + // add pA's projection to B + DgmPoint dpA { pA.getRealX(), pA.getRealY(), DgmPoint::NORMAL, uniqueId++ }; + DgmPoint dpB { (pA.getRealX() + pA.getRealY()) / 2, (pA.getRealX() + pA.getRealY()) / 2, + DgmPoint::DIAG, uniqueId++ }; + newA.insert(dpA); + newB.insert(dpB); + } + } + + for (auto& pB : B) { + if (pB.isNormal() and not pB.isInfinity()) { + // add pB's projection to A + DgmPoint dpB { pB.getRealX(), pB.getRealY(), DgmPoint::NORMAL, uniqueId++ }; + DgmPoint dpA { (pB.getRealX() + pB.getRealY()) / 2, (pB.getRealX() + pB.getRealY()) / 2, + DgmPoint::DIAG, uniqueId++ }; + newB.insert(dpB); + newA.insert(dpA); + } + } + + A = newA; + B = newB; + A.isLinked = true; + B.isLinked = true; } - } - A = newA; - B = newB; - A.isLinked = true; - B.isLinked = true; -} - - -//#ifndef FOR_R_TDA - -//template -//std::ostream& operator<<(std::ostream& output, const DiagramPoint& p) -//{ -// if ( p.isDiagonal() ) { -// output << "(" << p.x << ", " << p.y << ", " << 0.5 * (p.x + p.y) << ", " << p.id << " DIAG )"; -// } else { -// output << "(" << p.x << ", " << p.y << ", " << p.id << " NORMAL)"; -// } -// return output; -//} - -//template -//std::ostream& operator<<(std::ostream& output, const DiagramPointSet& ps) -//{ -// output << "{ "; -// for(auto pit = ps.cbegin(); pit != ps.cend(); ++pit) { -// output << *pit << ", "; -// } -// output << "\b\b }"; -// return output; -//} -//#endif // FOR_R_TDA - - -} // end namespace bt + //#ifndef FOR_R_TDA + + //template + //std::ostream& operator<<(std::ostream& output, const DiagramPoint& p) + //{ + // if ( p.isDiagonal() ) { + // output << "(" << p.x << ", " << p.y << ", " << 0.5 * (p.x + p.y) << ", " << p.id << " DIAG )"; + // } else { + // output << "(" << p.x << ", " << p.y << ", " << p.id << " NORMAL)"; + // } + // return output; + //} + + //template + //std::ostream& operator<<(std::ostream& output, const DiagramPointSet& ps) + //{ + // output << "{ "; + // for(auto pit = ps.cbegin(); pit != ps.cend(); ++pit) { + // output << *pit << ", "; + // } + // output << "\b\b }"; + // return output; + //} + //#endif // FOR_R_TDA + + + } // end namespace bt } // end namespace hera #endif // HERA_BASIC_DEFS_BT_H diff --git a/geom_bottleneck/include/bottleneck.h b/geom_bottleneck/include/bottleneck.h index 0d4e1ed..64da2c8 100644 --- a/geom_bottleneck/include/bottleneck.h +++ b/geom_bottleneck/include/bottleneck.h @@ -43,75 +43,110 @@ derivative works thereof, in binary and source code form. #include "bound_match.h" namespace hera { + // internal_p defines cost function on edges (use hera::get_infinity(), + // if you want to explicitly refer to l_inf, but that's default value + // delta is relative error, default is 1 percent + template + struct BottleneckParams + { + Real internal_p { hera::get_infinity() }; + Real delta { 0.01 }; + }; + + // functions taking containers as input + // template parameter PairContainer must be a container of pairs of real + // numbers (pair.first = x-coordinate, pair.second = y-coordinate) + // PairContainer class must support iteration of the form + // for(it = pairContainer.begin(); it != pairContainer.end(); ++it) + + // all functions in this header are wrappers around + // functions from hera::bt namespace + + // get exact bottleneck distance, + template + typename DiagramTraits::RealType + bottleneckDistExact(PairContainer& dgm_A, PairContainer& dgm_B, const int decPrecision, + hera::bt::MatchingEdge::RealType>& longest_edge, + bool compute_longest_edge = true) + { + using Real = typename DiagramTraits::RealType; + hera::bt::DiagramPointSet a(dgm_A); + hera::bt::DiagramPointSet b(dgm_B); + return hera::bt::bottleneckDistExact(a, b, decPrecision, longest_edge, compute_longest_edge); + } + + template + typename DiagramTraits::RealType + bottleneckDistExact(PairContainer& dgm_A, PairContainer& dgm_B, const int decPrecision) + { + using Real = typename DiagramTraits::RealType; + hera::bt::MatchingEdge longest_edge; + return bottleneckDistExact(dgm_A, dgm_B, decPrecision, longest_edge, false); + } + + + template + typename DiagramTraits::RealType + bottleneckDistExact(PairContainer& dgm_A, PairContainer& dgm_B) + { + int dec_precision = 14; + return bottleneckDistExact(dgm_A, dgm_B, dec_precision); + } -// functions taking containers as input -// template parameter PairContainer must be a container of pairs of real -// numbers (pair.first = x-coordinate, pair.second = y-coordinate) -// PairContainer class must support iteration of the form -// for(it = pairContainer.begin(); it != pairContainer.end(); ++it) - -// all functions in this header are wrappers around -// functions from hera::bt namespace - -// get exact bottleneck distance, -template -typename DiagramTraits::RealType -bottleneckDistExact(PairContainer& dgm_A, PairContainer& dgm_B) -{ - using Real = typename DiagramTraits::RealType; - hera::bt::DiagramPointSet a(dgm_A); - hera::bt::DiagramPointSet b(dgm_B); - return hera::bt::bottleneckDistExact(a, b, 14); -} - -// get exact bottleneck distance, -template -typename DiagramTraits::RealType -bottleneckDistExact(PairContainer& dgm_A, PairContainer& dgm_B, const int decPrecision) -{ - using Real = typename DiagramTraits::RealType; - hera::bt::DiagramPointSet a(dgm_A); - hera::bt::DiagramPointSet b(dgm_B); - return hera::bt::bottleneckDistExact(a, b, decPrecision); -} // return the interval (distMin, distMax) such that: // a) actual bottleneck distance between A and B is contained in the interval // b) if the interval is not (0,0), then (distMax - distMin) / distMin < delta -template -std::pair::RealType, typename DiagramTraits::RealType> -bottleneckDistApproxInterval(PairContainer& dgm_A, PairContainer& dgm_B, const typename DiagramTraits::RealType delta) -{ - using Real = typename DiagramTraits::RealType; - hera::bt::DiagramPointSet a(dgm_A); - hera::bt::DiagramPointSet b(dgm_B); - return hera::bt::bottleneckDistApproxInterval(a, b, delta); -} + template + std::pair::RealType, typename DiagramTraits::RealType> + bottleneckDistApproxInterval(PairContainer& dgm_A, PairContainer& dgm_B, + const typename DiagramTraits::RealType delta) + { + using Real = typename DiagramTraits::RealType; + hera::bt::DiagramPointSet a(dgm_A); + hera::bt::DiagramPointSet b(dgm_B); + return hera::bt::bottleneckDistApproxInterval(a, b, delta); + } // use sampling heuristic: discard most of the points with small persistency // to get a good initial approximation of the bottleneck distance -template -typename DiagramTraits::RealType -bottleneckDistApproxHeur(PairContainer& dgm_A, PairContainer& dgm_B, const typename DiagramTraits::RealType delta) -{ - using Real = typename DiagramTraits::RealType; - hera::bt::DiagramPointSet a(dgm_A); - hera::bt::DiagramPointSet b(dgm_B); - std::pair resPair = hera::bt::bottleneckDistApproxIntervalHeur(a, b, delta); - return resPair.second; -} + template + typename DiagramTraits::RealType + bottleneckDistApproxHeur(PairContainer& dgm_A, PairContainer& dgm_B, + const typename DiagramTraits::RealType delta) + { + using Real = typename DiagramTraits::RealType; + hera::bt::DiagramPointSet a(dgm_A); + hera::bt::DiagramPointSet b(dgm_B); + std::pair resPair = hera::bt::bottleneckDistApproxIntervalHeur(a, b, delta); + return resPair.second; + } // get approximate distance, // see bottleneckDistApproxInterval -template -typename DiagramTraits::RealType -bottleneckDistApprox(PairContainer& A, PairContainer& B, const typename DiagramTraits::RealType delta) -{ - using Real = typename DiagramTraits::RealType; - hera::bt::DiagramPointSet a(A.begin(), A.end()); - hera::bt::DiagramPointSet b(B.begin(), B.end()); - return hera::bt::bottleneckDistApprox(a, b, delta); -} + template + typename DiagramTraits::RealType + bottleneckDistApprox(PairContainer& A, PairContainer& B, + const typename DiagramTraits::RealType delta, + hera::bt::MatchingEdge::RealType>& longest_edge, + bool compute_longest_edge = true) + { + using Real = typename DiagramTraits::RealType; + hera::bt::DiagramPointSet a(A.begin(), A.end()); + hera::bt::DiagramPointSet b(B.begin(), B.end()); + return hera::bt::bottleneckDistApprox(a, b, delta, longest_edge, compute_longest_edge); + } + + template + typename DiagramTraits::RealType + bottleneckDistApprox(PairContainer& A, PairContainer& B, + const typename DiagramTraits::RealType delta) + { + using Real = typename DiagramTraits::RealType; + hera::bt::MatchingEdge longest_edge; + return hera::bottleneckDistApprox(A, B, delta, longest_edge, false); + } + } // end namespace hera diff --git a/geom_bottleneck/include/bottleneck_detail.h b/geom_bottleneck/include/bottleneck_detail.h index 27c3c5d..7241c9a 100644 --- a/geom_bottleneck/include/bottleneck_detail.h +++ b/geom_bottleneck/include/bottleneck_detail.h @@ -43,39 +43,44 @@ derivative works thereof, in binary and source code form. namespace hera { -namespace bt { - - - -// functions taking DiagramPointSet as input. -// ATTENTION: parameters A and B (diagrams) will be changed after the call -// (projections added). - -// return the interval (distMin, distMax) such that: -// a) actual bottleneck distance between A and B is contained in the interval -// b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon -template -std::pair bottleneckDistApproxInterval(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon); - - -// heuristic (sample diagram to estimate the distance) -template -std::pair bottleneckDistApproxIntervalHeur(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon); - -// get approximate distance, -// see bottleneckDistApproxInterval -template -Real bottleneckDistApprox(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon); - -// get exact bottleneck distance, -template -Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, const int decPrecision); - -// get exact bottleneck distance, -template -Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B); - -} // end namespace bt + namespace bt { + + // functions taking DiagramPointSet as input. + // ATTENTION: parameters A and B (diagrams) will be changed after the call + // (projections added). + + // return the interval (distMin, distMax) such that: + // a) actual bottleneck distance between A and B is contained in the interval + // b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon + template + std::pair bottleneckDistApproxInterval(DiagramPointSet& A, DiagramPointSet& B, + const Real epsilon, MatchingEdge& longest_edge, + bool compute_longest_edge = false); + + + // heuristic (sample diagram to estimate the distance) + template + std::pair + bottleneckDistApproxIntervalHeur(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon, + bool compute_longest_edge = false); + + // get approximate distance, + // see bottleneckDistApproxInterval + template + Real bottleneckDistApprox(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon, + MatchingEdge& longest_edge, bool compute_longest_edge = false); + + // get exact bottleneck distance, + template + Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, const int decPrecision, + MatchingEdge& longest_edge, bool compute_longest_edge = false); + + // get exact bottleneck distance, + template + Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, MatchingEdge& longest_edge, + bool compute_longest_edge = false); + + } // end namespace bt } // end namespace hera diff --git a/geom_bottleneck/include/bottleneck_detail.hpp b/geom_bottleneck/include/bottleneck_detail.hpp index 24cb725..ad6c882 100644 --- a/geom_bottleneck/include/bottleneck_detail.hpp +++ b/geom_bottleneck/include/bottleneck_detail.hpp @@ -44,464 +44,551 @@ derivative works thereof, in binary and source code form. #include "bottleneck_detail.h" namespace hera { -namespace bt { - -template -void binarySearch(const Real epsilon, - std::pair& result, - BoundMatchOracle& oracle, - const Real infinityCost, - bool isResultInitializedCorrectly, - const Real distProbeInit) -{ - // aliases for result components - Real& distMin = result.first; - Real& distMax = result.second; - - distMin = std::max(distMin, infinityCost); - distMax = std::max(distMax, infinityCost); - - Real distProbe; - - if (not isResultInitializedCorrectly) { - distProbe = distProbeInit; - if (oracle.isMatchLess(distProbe)) { - // distProbe is an upper bound, - // find lower bound with binary search - do { - distMax = distProbe; - distProbe /= 2.0; - } while (oracle.isMatchLess(distProbe)); - distMin = distProbe; - } else { - // distProbe is a lower bound, - // find upper bound with exponential search - do { - distMin = distProbe; - distProbe *= 2.0; - } while (!oracle.isMatchLess(distProbe)); - distMax = distProbe; - } - } - // bounds are correct , perform binary search - distProbe = ( distMin + distMax ) / 2.0; - while (( distMax - distMin ) / distMin >= epsilon ) { - - if (distMax < infinityCost) { - distMin = infinityCost; - distMax = infinityCost; - break; - } + namespace bt { + + template + void binarySearch(const Real epsilon, + std::pair& result, + BoundMatchOracle & oracle, + const Real infinityCost, + bool isResultInitializedCorrectly, + const Real distProbeInit) + { + // aliases for result components + Real& distMin = result.first; + Real& distMax = result.second; + + distMin = std::max(distMin, infinityCost); + distMax = std::max(distMax, infinityCost); + + Real distProbe; + + if (not isResultInitializedCorrectly) { + distProbe = distProbeInit; + if (oracle.isMatchLess(distProbe)) { + // distProbe is an upper bound, + // find lower bound with binary search + do { + distMax = distProbe; + distProbe /= 2.0; + } while (oracle.isMatchLess(distProbe)); + distMin = distProbe; + } else { + // distProbe is a lower bound, + // find upper bound with exponential search + do { + distMin = distProbe; + distProbe *= 2.0; + } while (!oracle.isMatchLess(distProbe)); + distMax = distProbe; + } + } + // bounds are correct , perform binary search + distProbe = (distMin + distMax) / 2.0; + while ((distMax - distMin) / distMin >= epsilon) { + + if (distMax < infinityCost) { + distMin = infinityCost; + distMax = infinityCost; + break; + } + + if (oracle.isMatchLess(distProbe)) { + distMax = distProbe; + } else { + distMin = distProbe; + } - if (oracle.isMatchLess(distProbe)) { - distMax = distProbe; - } else { - distMin = distProbe; + distProbe = (distMin + distMax) / 2.0; + } + + distMin = std::max(distMin, infinityCost); + distMax = std::max(distMax, infinityCost); } - distProbe = ( distMin + distMax ) / 2.0; - } - - distMin = std::max(distMin, infinityCost); - distMax = std::max(distMax, infinityCost); -} - -template -inline Real getOneDimensionalCost(std::vector &set_A, std::vector &set_B) -{ - if (set_A.size() != set_B.size()) { - return std::numeric_limits::infinity(); - } - - if (set_A.empty()) { - return Real(0.0); - } - - std::sort(set_A.begin(), set_A.end()); - std::sort(set_B.begin(), set_B.end()); - - Real result = 0.0; - for(size_t i = 0; i < set_A.size(); ++i) { - result = std::max(result, (std::fabs(set_A[i] - set_B[i]))); - } - - return result; -} - -template -inline Real getInfinityCost(const DiagramPointSet &A, const DiagramPointSet &B) -{ - std::vector x_plus_A, x_minus_A, y_plus_A, y_minus_A; - std::vector x_plus_B, x_minus_B, y_plus_B, y_minus_B; - - for(auto iter_A = A.cbegin(); iter_A != A.cend(); ++iter_A) { - Real x = iter_A->getRealX(); - Real y = iter_A->getRealY(); - if ( x == std::numeric_limits::infinity()) { - y_plus_A.push_back(y); - } else if (x == -std::numeric_limits::infinity()) { - y_minus_A.push_back(y); - } else if (y == std::numeric_limits::infinity()) { - x_plus_A.push_back(x); - } else if (y == -std::numeric_limits::infinity()) { - x_minus_A.push_back(x); + template + inline Real getOneDimensionalCost(std::vector& set_A, std::vector& set_B) + { + if (set_A.size() != set_B.size()) { + return std::numeric_limits::infinity(); + } + + if (set_A.empty()) { + return Real(0.0); + } + + std::sort(set_A.begin(), set_A.end()); + std::sort(set_B.begin(), set_B.end()); + + Real result = 0.0; + for (size_t i = 0; i < set_A.size(); ++i) { + result = std::max(result, (std::fabs(set_A[i] - set_B[i]))); + } + + return result; } - } - - for(auto iter_B = B.cbegin(); iter_B != B.cend(); ++iter_B) { - Real x = iter_B->getRealX(); - Real y = iter_B->getRealY(); - if (x == std::numeric_limits::infinity()) { - y_plus_B.push_back(y); - } else if (x == -std::numeric_limits::infinity()) { - y_minus_B.push_back(y); - } else if (y == std::numeric_limits::infinity()) { - x_plus_B.push_back(x); - } else if (y == -std::numeric_limits::infinity()) { - x_minus_B.push_back(x); + + + template + using CostEdgePair = std::pair>; + + template + using CoordPointPair = std::pair>; + + template + using CoordPointVector = std::vector>; + + template + struct CoordPointPairComparator + { + bool operator()(const CoordPointPair& a, const CoordPointPair& b) const + { + return a.first < b.first or (a.first == b.first and a.second.id < b.second.id); + }; + }; + + template + inline typename hera::bt::CostEdgePair getOneDimensionalCost(typename hera::bt::CoordPointVector& set_A, typename hera::bt::CoordPointVector& set_B) + { + using MatchingEdgeR = hera::bt::MatchingEdge; + if (set_A.size() != set_B.size()) { + return std::make_pair(std::numeric_limits::infinity(), MatchingEdgeR()); + } + + if (set_A.empty()) { + return std::make_pair(Real(0.0), MatchingEdgeR()); + } + + std::sort(set_A.begin(), set_A.end(), CoordPointPairComparator()); + std::sort(set_B.begin(), set_B.end(), CoordPointPairComparator()); + + CostEdgePair result(-1.0, MatchingEdgeR()); + + for (size_t i = 0; i < set_A.size(); ++i) { + Real curr_cost = std::fabs(set_A[i].first - set_B[i].first); + if (curr_cost > result.first) { + result.first = curr_cost; + result.second = MatchingEdgeR(set_A[i].second, set_B[i].second); + } + } + return result; } - } - Real infinity_cost = getOneDimensionalCost(x_plus_A, x_plus_B); - infinity_cost = std::max(infinity_cost, getOneDimensionalCost(x_minus_A, x_minus_B)); - infinity_cost = std::max(infinity_cost, getOneDimensionalCost(y_plus_A, y_plus_B)); - infinity_cost = std::max(infinity_cost, getOneDimensionalCost(y_minus_A, y_minus_B)); - return infinity_cost; -} + template + inline Real getInfinityCost(const DiagramPointSet & A, const DiagramPointSet & B, + bool compute_longest_edge = false) + { + std::vector x_plus_A, x_minus_A, y_plus_A, y_minus_A; + std::vector x_plus_B, x_minus_B, y_plus_B, y_minus_B; + + for (auto iter_A = A.cbegin(); iter_A != A.cend(); ++iter_A) { + Real x = iter_A->getRealX(); + Real y = iter_A->getRealY(); + if (x == std::numeric_limits::infinity()) { + y_plus_A.push_back(y); + } else if (x == -std::numeric_limits::infinity()) { + y_minus_A.push_back(y); + } else if (y == std::numeric_limits::infinity()) { + x_plus_A.push_back(x); + } else if (y == -std::numeric_limits::infinity()) { + x_minus_A.push_back(x); + } + } + + for (auto iter_B = B.cbegin(); iter_B != B.cend(); ++iter_B) { + Real x = iter_B->getRealX(); + Real y = iter_B->getRealY(); + if (x == std::numeric_limits::infinity()) { + y_plus_B.push_back(y); + } else if (x == -std::numeric_limits::infinity()) { + y_minus_B.push_back(y); + } else if (y == std::numeric_limits::infinity()) { + x_plus_B.push_back(x); + } else if (y == -std::numeric_limits::infinity()) { + x_minus_B.push_back(x); + } + } + + Real infinity_cost = getOneDimensionalCost(x_plus_A, x_plus_B); + infinity_cost = std::max(infinity_cost, getOneDimensionalCost(x_minus_A, x_minus_B)); + infinity_cost = std::max(infinity_cost, getOneDimensionalCost(y_plus_A, y_plus_B)); + infinity_cost = std::max(infinity_cost, getOneDimensionalCost(y_minus_A, y_minus_B)); + + return infinity_cost; + } // return the interval (distMin, distMax) such that: // a) actual bottleneck distance between A and B is contained in the interval // b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon -template -inline std::pair bottleneckDistApproxInterval(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon) -{ - // empty diagrams are not considered as error - if (A.empty() and B.empty()) - return std::make_pair(0.0, 0.0); - - Real infinity_cost = getInfinityCost(A, B); - if (infinity_cost == std::numeric_limits::infinity()) - return std::make_pair(infinity_cost, infinity_cost); - - // link diagrams A and B by adding projections - addProjections(A, B); - - // TODO: think about that! - // we need one threshold for checking if the distance is 0, - // another one for the oracle! - constexpr Real epsThreshold { 1.0e-10 }; - std::pair result { 0.0, 0.0 }; - bool useRangeSearch { true }; - // construct an oracle - BoundMatchOracle oracle(A, B, epsThreshold, useRangeSearch); - // check for distance = 0 - if (oracle.isMatchLess(2*epsThreshold)) { - return result; - } - // get a 3-approximation of maximal distance between A and B - // as a starting value for probe distance - Real distProbe { getFurthestDistance3Approx>(A, B) }; - binarySearch(epsilon, result, oracle, infinity_cost, false, distProbe); - return result; -} - -template -void sampleDiagramForHeur(const DiagramPointSet& dgmIn, DiagramPointSet& dgmOut) -{ - struct pair_hash { - std::size_t operator()(const std::pair p) const + template + inline std::pair + bottleneckDistApproxInterval(DiagramPointSet & A, DiagramPointSet & B, const Real epsilon, + MatchingEdge & edge, bool compute_longest_edge) { - return std::hash()(p.first) ^ std::hash()(p.second); - } - }; - std::unordered_map, int, pair_hash> m; - for(auto ptIter = dgmIn.cbegin(); ptIter != dgmIn.cend(); ++ptIter) { - if (ptIter->isNormal() and not ptIter->isInfinity()) { - m[std::make_pair(ptIter->getRealX(), ptIter->getRealY())]++; - } - } - if (m.size() < 2) { - dgmOut = dgmIn; - return; - } - std::vector v; - for(const auto& ptQtyPair : m) { - v.push_back(ptQtyPair.second); - } - std::sort(v.begin(), v.end()); - int maxLeap = v[1] - v[0]; - int cutVal = v[0]; - for(int i = 1; i < static_cast(v.size())- 1; ++i) { - int currLeap = v[i+1] - v[i]; - if (currLeap > maxLeap) { - maxLeap = currLeap; - cutVal = v[i]; + // empty diagrams are not considered as error + if (A.empty() and B.empty()) { + return std::make_pair(0.0, 0.0); + } + + if (compute_longest_edge) { + auto inf_cost_edge = getInfinityCost(A, B, true); + } else { + } + + Real infinity_cost = getInfinityCost(A, B); + if (infinity_cost == std::numeric_limits::infinity()) { + return std::make_pair(infinity_cost, infinity_cost); + } + + // link diagrams A and B by adding projections + addProjections(A, B); + + // TODO: think about that! + // we need one threshold for checking if the distance is 0, + // another one for the oracle! + constexpr Real epsThreshold { 1.0e-10 }; + std::pair result { 0.0, 0.0 }; + bool useRangeSearch { true }; + // construct an oracle + BoundMatchOracle oracle(A, B, epsThreshold, useRangeSearch); + // check for distance = 0 + if (oracle.isMatchLess(2 * epsThreshold)) { + result.first = std::max(result.first, infinity_cost); + result.second = std::max(result.first, infinity_cost); + return result; + } + // get a 3-approximation of maximal distance between A and B + // as a starting value for probe distance + Real distProbe { getFurthestDistance3Approx>(A, B) }; + binarySearch(epsilon, result, oracle, infinity_cost, false, distProbe); + if (compute_longest_edge) { + edge = oracle.get_longest_edge(); + } + return result; } - } - std::vector> vv; - // keep points whose multiplicites are at most cutVal - // quick-and-dirty: fill in vv with copies of each point - // to construct DiagramPointSet from it later - for(const auto& ptQty : m) { - if (ptQty.second < cutVal) { - for(int i = 0; i < ptQty.second; ++i) { - vv.push_back(std::make_pair(ptQty.first.first, ptQty.first.second)); + + template + void sampleDiagramForHeur(const DiagramPointSet & dgmIn, DiagramPointSet & dgmOut) + { + struct pair_hash + { + std::size_t operator()(const std::pair p) const + { + return std::hash()(p.first) ^ std::hash()(p.second); + } + }; + std::unordered_map, int, pair_hash> m; + for (auto ptIter = dgmIn.cbegin(); ptIter != dgmIn.cend(); ++ptIter) { + if (ptIter->isNormal() and not ptIter->isInfinity()) { + m[std::make_pair(ptIter->getRealX(), ptIter->getRealY())]++; + } + } + if (m.size() < 2) { + dgmOut = dgmIn; + return; + } + std::vector v; + for (const auto& ptQtyPair : m) { + v.push_back(ptQtyPair.second); + } + std::sort(v.begin(), v.end()); + int maxLeap = v[1] - v[0]; + int cutVal = v[0]; + for (int i = 1; i < static_cast(v.size()) - 1; ++i) { + int currLeap = v[i + 1] - v[i]; + if (currLeap > maxLeap) { + maxLeap = currLeap; + cutVal = v[i]; + } + } + std::vector> vv; + // keep points whose multiplicites are at most cutVal + // quick-and-dirty: fill in vv with copies of each point + // to construct DiagramPointSet from it later + for (const auto& ptQty : m) { + if (ptQty.second < cutVal) { + for (int i = 0; i < ptQty.second; ++i) { + vv.push_back(std::make_pair(ptQty.first.first, ptQty.first.second)); + } + } } + dgmOut.clear(); + dgmOut = DiagramPointSet(vv.begin(), vv.end()); } - } - dgmOut.clear(); - dgmOut = DiagramPointSet(vv.begin(), vv.end()); -} // return the interval (distMin, distMax) such that: // a) actual bottleneck distance between A and B is contained in the interval // b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon -template -std::pair bottleneckDistApproxIntervalWithInitial(DiagramPointSet& A, DiagramPointSet& B, - const Real epsilon, - const std::pair initialGuess, - const Real infinity_cost) -{ - // empty diagrams are not considered as error - if (A.empty() and B.empty()) - return std::make_pair(0.0, 0.0); - - // link diagrams A and B by adding projections - addProjections(A, B); - - constexpr Real epsThreshold { 1.0e-10 }; - std::pair result { 0.0, 0.0 }; - bool useRangeSearch { true }; - // construct an oracle - BoundMatchOracle oracle(A, B, epsThreshold, useRangeSearch); - - Real& distMin {result.first}; - Real& distMax {result.second}; - - // initialize search interval from initialGuess - distMin = initialGuess.first; - distMax = initialGuess.second; - - assert(distMin <= distMax); - - // make sure that distMin is a lower bound - while(oracle.isMatchLess(distMin)) { - // distMin is in fact an upper bound, so assign it to distMax - distMax = distMin; - // and decrease distMin by 5 % - distMin = 0.95 * distMin; - } - - // make sure that distMax is an upper bound - while(not oracle.isMatchLess(distMax)) { - // distMax is in fact a lower bound, so assign it to distMin - distMin = distMax; - // and increase distMax by 5 % - distMax = 1.05 * distMax; - } - - // bounds are found, perform binary search - Real distProbe = ( distMin + distMax ) / 2.0; - binarySearch(epsilon, result, oracle, infinity_cost, true, distProbe); - return result; -} + template + std::pair + bottleneckDistApproxIntervalWithInitial(DiagramPointSet & A, DiagramPointSet & B, + const Real epsilon, + const std::pair initialGuess, + const Real infinity_cost, + MatchingEdge & longest_edge, + bool compute_longest_edge = false) + { + // empty diagrams are not considered as error + if (A.empty() and B.empty()) { + return std::make_pair(0.0, 0.0); + } + + // link diagrams A and B by adding projections + addProjections(A, B); + + constexpr Real epsThreshold { 1.0e-10 }; + std::pair result { 0.0, 0.0 }; + bool useRangeSearch { true }; + // construct an oracle + BoundMatchOracle oracle(A, B, epsThreshold, useRangeSearch); + + Real& distMin { result.first }; + Real& distMax { result.second }; + + // initialize search interval from initialGuess + distMin = initialGuess.first; + distMax = initialGuess.second; + + assert(distMin <= distMax); + + // make sure that distMin is a lower bound + while (oracle.isMatchLess(distMin)) { + // distMin is in fact an upper bound, so assign it to distMax + distMax = distMin; + // and decrease distMin by 5 % + distMin = 0.95 * distMin; + } + + // make sure that distMax is an upper bound + while (not oracle.isMatchLess(distMax)) { + // distMax is in fact a lower bound, so assign it to distMin + distMin = distMax; + // and increase distMax by 5 % + distMax = 1.05 * distMax; + } + + // bounds are found, perform binary search + Real distProbe = (distMin + distMax) / 2.0; + binarySearch(epsilon, result, oracle, infinity_cost, true, distProbe); + if (compute_longest_edge) { + longest_edge = oracle.get_longest_edge(); + } + return result; + } // return the interval (distMin, distMax) such that: // a) actual bottleneck distance between A and B is contained in the interval // b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon // use heuristic: initial estimate on sampled diagrams -template -std::pair bottleneckDistApproxIntervalHeur(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon) -{ - // empty diagrams are not considered as error - if (A.empty() and B.empty()) - return std::make_pair(0.0, 0.0); - - Real infinity_cost = getInfinityCost(A, B); - if (infinity_cost == std::numeric_limits::infinity()) - return std::make_pair(infinity_cost, infinity_cost); + template + std::pair + bottleneckDistApproxIntervalHeur(DiagramPointSet & A, DiagramPointSet & B, const Real epsilon, + MatchingEdge & longest_edge) + { + // empty diagrams are not considered as error + if (A.empty() and B.empty()) { + return std::make_pair(0.0, 0.0); + } - DiagramPointSet sampledA, sampledB; - sampleDiagramForHeur(A, sampledA); - sampleDiagramForHeur(B, sampledB); + Real infinity_cost = getInfinityCost(A, B); + if (infinity_cost == std::numeric_limits::infinity()) { + return std::make_pair(infinity_cost, infinity_cost); + } - std::pair initGuess = bottleneckDistApproxInterval(sampledA, sampledB, epsilon); + DiagramPointSet sampledA, sampledB; + sampleDiagramForHeur(A, sampledA); + sampleDiagramForHeur(B, sampledB); - initGuess.first = std::max(initGuess.first, infinity_cost); - initGuess.second = std::max(initGuess.second, infinity_cost); + std::pair initGuess = bottleneckDistApproxInterval(sampledA, sampledB, epsilon); - return bottleneckDistApproxIntervalWithInitial(A, B, epsilon, initGuess, infinity_cost); -} + initGuess.first = std::max(initGuess.first, infinity_cost); + initGuess.second = std::max(initGuess.second, infinity_cost); + return bottleneckDistApproxIntervalWithInitial(A, B, epsilon, initGuess, infinity_cost, longest_edge); + } // get approximate distance, // see bottleneckDistApproxInterval -template -Real bottleneckDistApprox(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon) -{ - auto interval = bottleneckDistApproxInterval(A, B, epsilon); - return interval.second; -} - - -template -Real bottleneckDistExactFromSortedPwDist(DiagramPointSet&A, DiagramPointSet& B, std::vector& pairwiseDist, const int decPrecision) -{ - // trivial case: we have only one candidate - if (pairwiseDist.size() == 1) - return pairwiseDist[0]; - - bool useRangeSearch = true; - Real distEpsilon = std::numeric_limits::max(); - Real diffThreshold = 0.1; - for(int k = 0; k < decPrecision; ++k) { - diffThreshold /= 10.0; - } - for(size_t k = 0; k < pairwiseDist.size() - 2; ++k) { - auto diff = pairwiseDist[k+1]- pairwiseDist[k]; - if ( diff > diffThreshold and diff < distEpsilon ) { - distEpsilon = diff; - } - } - distEpsilon /= 3.0; - - BoundMatchOracle oracle(A, B, distEpsilon, useRangeSearch); - // binary search - size_t iterNum {0}; - size_t idxMin {0}, idxMax {pairwiseDist.size() - 1}; - size_t idxMid; - while(idxMax > idxMin) { - idxMid = static_cast(floor(idxMin + idxMax) / 2.0); - iterNum++; - // not A[imid] < dist <=> A[imid] >= dist <=> A[imid[ >= dist + eps - if (oracle.isMatchLess(pairwiseDist[idxMid] + distEpsilon / 2.0)) { - idxMax = idxMid; - } else { - idxMin = idxMid + 1; - } - } - idxMid = static_cast(floor(idxMin + idxMax) / 2.0); - return pairwiseDist[idxMid]; -} - - -template -Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B) -{ - return bottleneckDistExact(A, B, 14); -} - -template -Real bottleneckDistExact(DiagramPointSet& A, DiagramPointSet& B, const int decPrecision) -{ - using DgmPoint = DiagramPoint; - - constexpr Real epsilon = 0.001; - auto interval = bottleneckDistApproxInterval(A, B, epsilon); - if (interval.first == interval.second) - return interval.first; - const Real delta = 0.50001 * (interval.second - interval.first); - const Real approxDist = 0.5 * ( interval.first + interval.second); - const Real minDist = interval.first; - const Real maxDist = interval.second; - if ( delta == 0 ) { - return interval.first; - } - // copy points from A to a vector - // todo: get rid of this? - std::vector pointsA; - pointsA.reserve(A.size()); - for(const auto& ptA : A) { - pointsA.push_back(ptA); - } - - // in this vector we store the distances between the points - // that are candidates to realize - std::vector pairwiseDist; - { - // vector to store centers of vertical stripes - // two for each point in A and the id of the corresponding point - std::vector> xCentersVec; - xCentersVec.reserve(2 * pointsA.size()); - for(auto ptA : pointsA) { - xCentersVec.push_back(std::make_pair(ptA.getRealX() - approxDist, ptA)); - xCentersVec.push_back(std::make_pair(ptA.getRealX() + approxDist, ptA)); + template + Real bottleneckDistApprox(DiagramPointSet & A, DiagramPointSet & B, const Real epsilon, + MatchingEdge & longest_edge, bool compute_longest_edge) + { + auto interval = bottleneckDistApproxInterval(A, B, epsilon, longest_edge); + return interval.second; } - // lambda to compare pairs w.r.t coordinate - auto compLambda = [](std::pair a, std::pair b) - { return a.first < b.first; }; - - std::sort(xCentersVec.begin(), xCentersVec.end(), compLambda); - // todo: sort points in B, reduce search range in lower and upper bounds - for(auto ptB : B) { - // iterator to the first stripe such that ptB lies to the left - // from its right boundary (x_B <= x_j + \delta iff x_j >= x_B - \delta - auto itStart = std::lower_bound(xCentersVec.begin(), - xCentersVec.end(), - std::make_pair(ptB.getRealX() - delta, ptB), - compLambda); - - for(auto iterA = itStart; iterA < xCentersVec.end(); ++iterA) { - if ( ptB.getRealX() < iterA->first - delta) { - // from that moment x_B >= x_j - delta - // is violated: x_B no longer lies to right from the left - // boundary of current stripe - break; + + + template + Real bottleneckDistExactFromSortedPwDist(DiagramPointSet & A, DiagramPointSet & B, + const std::vector& pairwiseDist, + const int decPrecision, MatchingEdge & longest_edge, + bool compute_longest_edge = false) + { + // trivial case: we have only one candidate + if (pairwiseDist.size() == 1) { + return pairwiseDist[0]; + } + + bool useRangeSearch = true; + Real distEpsilon = std::numeric_limits::max(); + Real diffThreshold = 0.1; + for (int k = 0; k < decPrecision; ++k) { + diffThreshold /= 10.0; + } + for (size_t k = 0; k < pairwiseDist.size() - 2; ++k) { + auto diff = pairwiseDist[k + 1] - pairwiseDist[k]; + if (diff > diffThreshold and diff < distEpsilon) { + distEpsilon = diff; } - // we're here => ptB lies in vertical stripe, - // check if distance fits into the interval we've found - Real pwDist = distLInf(iterA->second, ptB); - if (pwDist >= minDist and pwDist <= maxDist) { - pairwiseDist.push_back(pwDist); + } + distEpsilon /= 3.0; + + BoundMatchOracle oracle(A, B, distEpsilon, useRangeSearch); + // binary search + size_t iterNum { 0 }; + size_t idxMin { 0 }, idxMax { pairwiseDist.size() - 1 }; + size_t idxMid; + while (idxMax > idxMin) { + idxMid = static_cast(floor(idxMin + idxMax) / 2.0); + iterNum++; + // not A[imid] < dist <=> A[imid] >= dist <=> A[imid[ >= dist + eps + if (oracle.isMatchLess(pairwiseDist[idxMid] + distEpsilon / 2.0)) { + idxMax = idxMid; + } else { + idxMin = idxMid + 1; } } + idxMid = static_cast(floor(idxMin + idxMax) / 2.0); + if (compute_longest_edge) { + longest_edge = oracle.get_longest_edge(); + } + return pairwiseDist[idxMid]; } - } - - { - // for y - // vector to store centers of vertical stripes - // two for each point in A and the id of the corresponding point - std::vector> yCentersVec; - yCentersVec.reserve(2 * pointsA.size()); - for(auto ptA : pointsA) { - yCentersVec.push_back(std::make_pair(ptA.getRealY() - approxDist, ptA)); - yCentersVec.push_back(std::make_pair(ptA.getRealY() + approxDist, ptA)); + + + template + Real bottleneckDistExact(DiagramPointSet & A, DiagramPointSet & B, MatchingEdge & longest_edge, + bool compute_longest_edge) + { + return bottleneckDistExact(A, B, 14, longest_edge, compute_longest_edge); } - // lambda to compare pairs w.r.t coordinate - auto compLambda = [](std::pair a, std::pair b) - { return a.first < b.first; }; - std::sort(yCentersVec.begin(), yCentersVec.end(), compLambda); + template + Real bottleneckDistExact(DiagramPointSet & A, DiagramPointSet & B, const int decPrecision, + MatchingEdge & longest_edge, bool compute_longest_edge) + { + using DgmPoint = DiagramPoint; - // todo: sort points in B, reduce search range in lower and upper bounds - for(auto ptB : B) { - auto itStart = std::lower_bound(yCentersVec.begin(), - yCentersVec.end(), - std::make_pair(ptB.getRealY() - delta, ptB), - compLambda); + constexpr Real epsilon = 0.001; + auto interval = bottleneckDistApproxInterval(A, B, epsilon, longest_edge); + if (interval.first == interval.second) { + return interval.first; + } + const Real delta = 0.50001 * (interval.second - interval.first); + const Real approxDist = 0.5 * (interval.first + interval.second); + const Real minDist = interval.first; + const Real maxDist = interval.second; + if (delta == 0) { + return interval.first; + } + // copy points from A to a vector + // todo: get rid of this? + std::vector pointsA; + pointsA.reserve(A.size()); + for (const auto& ptA : A) { + pointsA.push_back(ptA); + } + // in this vector we store the distances between the points + // that are candidates to realize + std::vector pairwiseDist; + { + // vector to store centers of vertical stripes + // two for each point in A and the id of the corresponding point + std::vector> xCentersVec; + xCentersVec.reserve(2 * pointsA.size()); + for (auto ptA : pointsA) { + xCentersVec.push_back(std::make_pair(ptA.getRealX() - approxDist, ptA)); + xCentersVec.push_back(std::make_pair(ptA.getRealX() + approxDist, ptA)); + } + // lambda to compare pairs w.r.t coordinate + auto compLambda = [](std::pair a, std::pair b) { + return a.first < b.first; + }; + + std::sort(xCentersVec.begin(), xCentersVec.end(), compLambda); + // todo: sort points in B, reduce search range in lower and upper bounds + for (auto ptB : B) { + // iterator to the first stripe such that ptB lies to the left + // from its right boundary (x_B <= x_j + \delta iff x_j >= x_B - \delta + auto itStart = std::lower_bound(xCentersVec.begin(), + xCentersVec.end(), + std::make_pair(ptB.getRealX() - delta, ptB), + compLambda); + + for (auto iterA = itStart; iterA < xCentersVec.end(); ++iterA) { + if (ptB.getRealX() < iterA->first - delta) { + // from that moment x_B >= x_j - delta + // is violated: x_B no longer lies to right from the left + // boundary of current stripe + break; + } + // we're here => ptB lies in vertical stripe, + // check if distance fits into the interval we've found + Real pwDist = distLInf(iterA->second, ptB); + if (pwDist >= minDist and pwDist <= maxDist) { + pairwiseDist.push_back(pwDist); + } + } + } + } - for(auto iterA = itStart; iterA < yCentersVec.end(); ++iterA) { - if ( ptB.getRealY() < iterA->first - delta) { - break; + { + // for y + // vector to store centers of vertical stripes + // two for each point in A and the id of the corresponding point + std::vector> yCentersVec; + yCentersVec.reserve(2 * pointsA.size()); + for (auto ptA : pointsA) { + yCentersVec.push_back(std::make_pair(ptA.getRealY() - approxDist, ptA)); + yCentersVec.push_back(std::make_pair(ptA.getRealY() + approxDist, ptA)); } - Real pwDist = distLInf(iterA->second, ptB); - if (pwDist >= minDist and pwDist <= maxDist) { - pairwiseDist.push_back(pwDist); + // lambda to compare pairs w.r.t coordinate + auto compLambda = [](std::pair a, std::pair b) { + return a.first < b.first; + }; + + std::sort(yCentersVec.begin(), yCentersVec.end(), compLambda); + + // todo: sort points in B, reduce search range in lower and upper bounds + for (auto ptB : B) { + auto itStart = std::lower_bound(yCentersVec.begin(), + yCentersVec.end(), + std::make_pair(ptB.getRealY() - delta, ptB), + compLambda); + + + for (auto iterA = itStart; iterA < yCentersVec.end(); ++iterA) { + if (ptB.getRealY() < iterA->first - delta) { + break; + } + Real pwDist = distLInf(iterA->second, ptB); + if (pwDist >= minDist and pwDist <= maxDist) { + pairwiseDist.push_back(pwDist); + } + } } } - } - } - std::sort(pairwiseDist.begin(), pairwiseDist.end()); + std::sort(pairwiseDist.begin(), pairwiseDist.end()); - return bottleneckDistExactFromSortedPwDist(A, B, pairwiseDist, decPrecision); -} + return bottleneckDistExactFromSortedPwDist(A, B, pairwiseDist, decPrecision, longest_edge, + compute_longest_edge); + } -} // end namespace bt + } // end namespace bt } // end namespace hera #endif // HERA_BOTTLENECK_HPP diff --git a/geom_bottleneck/include/bound_match.h b/geom_bottleneck/include/bound_match.h index 770c7df..99543f9 100644 --- a/geom_bottleneck/include/bound_match.h +++ b/geom_bottleneck/include/bound_match.h @@ -56,6 +56,7 @@ public: bool getMatchedVertex(const DgmPoint& p, DgmPoint& result) const; bool isPerfect() const; void trimMatching(const Real newThreshold); + MatchingEdge get_longest_edge() const; #ifndef FOR_R_TDA template friend std::ostream& operator<<(std::ostream& output, const Matching& m); @@ -82,6 +83,7 @@ public: BoundMatchOracle(DgmPointSet psA, DgmPointSet psB, Real dEps, bool useRS = true); bool isMatchLess(Real r); bool buildMatchingForThreshold(const Real r); + MatchingEdge get_longest_edge() const { return M.get_longest_edge(); } private: DgmPointSet A, B; Matching M; diff --git a/geom_bottleneck/include/bound_match.hpp b/geom_bottleneck/include/bound_match.hpp index 221bd0f..bb7dead 100644 --- a/geom_bottleneck/include/bound_match.hpp +++ b/geom_bottleneck/include/bound_match.hpp @@ -217,6 +217,19 @@ void Matching::trimMatching(const R newThreshold) sanityCheck(); } +template +MatchingEdge Matching::get_longest_edge() const +{ + R max_dist = -1.0; + MatchingEdge edge; + for(const auto& x : AToB) { + if (max_dist < distLInf(x.first, x.second)) { + edge = x; + } + } + return edge; +} + // ------- BoundMatchOracle -------------- template diff --git a/geom_bottleneck/include/catch/catch.hpp b/geom_bottleneck/include/catch/catch.hpp new file mode 100644 index 0000000..f7681f4 --- /dev/null +++ b/geom_bottleneck/include/catch/catch.hpp @@ -0,0 +1,11545 @@ +/* + * Catch v1.9.6 + * Generated: 2017-06-27 12:19:54.557875 + * ---------------------------------------------------------- + * This file has been merged from multiple headers. Please don't edit it directly + * Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED +#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED + +#define TWOBLUECUBES_CATCH_HPP_INCLUDED + +#ifdef __clang__ +# pragma clang system_header +#elif defined __GNUC__ +# pragma GCC system_header +#endif + +// #included from: internal/catch_suppress_warnings.h + +#ifdef __clang__ +# ifdef __ICC // icpc defines the __clang__ macro +# pragma warning(push) +# pragma warning(disable: 161 1682) +# else // __ICC +# pragma clang diagnostic ignored "-Wglobal-constructors" +# pragma clang diagnostic ignored "-Wvariadic-macros" +# pragma clang diagnostic ignored "-Wc99-extensions" +# pragma clang diagnostic ignored "-Wunused-variable" +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wpadded" +# pragma clang diagnostic ignored "-Wc++98-compat" +# pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +# pragma clang diagnostic ignored "-Wswitch-enum" +# pragma clang diagnostic ignored "-Wcovered-switch-default" +# endif +#elif defined __GNUC__ +# pragma GCC diagnostic ignored "-Wvariadic-macros" +# pragma GCC diagnostic ignored "-Wunused-variable" +# pragma GCC diagnostic ignored "-Wparentheses" + +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wpadded" +#endif +#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) +# define CATCH_IMPL +#endif + +#ifdef CATCH_IMPL +# ifndef CLARA_CONFIG_MAIN +# define CLARA_CONFIG_MAIN_NOT_DEFINED +# define CLARA_CONFIG_MAIN +# endif +#endif + +// #included from: internal/catch_notimplemented_exception.h +#define TWOBLUECUBES_CATCH_NOTIMPLEMENTED_EXCEPTION_H_INCLUDED + +// #included from: catch_common.h +#define TWOBLUECUBES_CATCH_COMMON_H_INCLUDED + +// #included from: catch_compiler_capabilities.h +#define TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED + +// Detect a number of compiler features - mostly C++11/14 conformance - by compiler +// The following features are defined: +// +// CATCH_CONFIG_CPP11_NULLPTR : is nullptr supported? +// CATCH_CONFIG_CPP11_NOEXCEPT : is noexcept supported? +// CATCH_CONFIG_CPP11_GENERATED_METHODS : The delete and default keywords for compiler generated methods +// CATCH_CONFIG_CPP11_IS_ENUM : std::is_enum is supported? +// CATCH_CONFIG_CPP11_TUPLE : std::tuple is supported +// CATCH_CONFIG_CPP11_LONG_LONG : is long long supported? +// CATCH_CONFIG_CPP11_OVERRIDE : is override supported? +// CATCH_CONFIG_CPP11_UNIQUE_PTR : is unique_ptr supported (otherwise use auto_ptr) +// CATCH_CONFIG_CPP11_SHUFFLE : is std::shuffle supported? +// CATCH_CONFIG_CPP11_TYPE_TRAITS : are type_traits and enable_if supported? + +// CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 supported? + +// CATCH_CONFIG_VARIADIC_MACROS : are variadic macros supported? +// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? +// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? +// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported? +// **************** +// Note to maintainers: if new toggles are added please document them +// in configuration.md, too +// **************** + +// In general each macro has a _NO_ form +// (e.g. CATCH_CONFIG_CPP11_NO_NULLPTR) which disables the feature. +// Many features, at point of detection, define an _INTERNAL_ macro, so they +// can be combined, en-mass, with the _NO_ forms later. + +// All the C++11 features can be disabled with CATCH_CONFIG_NO_CPP11 + +#ifdef __cplusplus + +# if __cplusplus >= 201103L +# define CATCH_CPP11_OR_GREATER +# endif + +# if __cplusplus >= 201402L +# define CATCH_CPP14_OR_GREATER +# endif + +#endif + +#ifdef __clang__ + +# if __has_feature(cxx_nullptr) +# define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR +# endif + +# if __has_feature(cxx_noexcept) +# define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT +# endif + +# if defined(CATCH_CPP11_OR_GREATER) +# define CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + _Pragma( "clang diagnostic push" ) \ + _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) +# define CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \ + _Pragma( "clang diagnostic pop" ) + +# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ + _Pragma( "clang diagnostic push" ) \ + _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) +# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \ + _Pragma( "clang diagnostic pop" ) +# endif + +#endif // __clang__ + +//////////////////////////////////////////////////////////////////////////////// +// We know some environments not to support full POSIX signals +#if defined(__CYGWIN__) || defined(__QNX__) + +# if !defined(CATCH_CONFIG_POSIX_SIGNALS) +# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS +# endif + +#endif + +//////////////////////////////////////////////////////////////////////////////// +// Cygwin +#ifdef __CYGWIN__ + +// Required for some versions of Cygwin to declare gettimeofday +// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin +# define _BSD_SOURCE + +#endif // __CYGWIN__ + +//////////////////////////////////////////////////////////////////////////////// +// Borland +#ifdef __BORLANDC__ + +#endif // __BORLANDC__ + +//////////////////////////////////////////////////////////////////////////////// +// EDG +#ifdef __EDG_VERSION__ + +#endif // __EDG_VERSION__ + +//////////////////////////////////////////////////////////////////////////////// +// Digital Mars +#ifdef __DMC__ + +#endif // __DMC__ + +//////////////////////////////////////////////////////////////////////////////// +// GCC +#ifdef __GNUC__ + +# if __GNUC__ == 4 && __GNUC_MINOR__ >= 6 && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR +# endif + +// - otherwise more recent versions define __cplusplus >= 201103L +// and will get picked up below + +#endif // __GNUC__ + +//////////////////////////////////////////////////////////////////////////////// +// Visual C++ +#ifdef _MSC_VER + +#define CATCH_INTERNAL_CONFIG_WINDOWS_SEH + +#if (_MSC_VER >= 1600) +# define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR +# define CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR +#endif + +#if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015)) +#define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT +#define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +#define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS +#endif + +#endif // _MSC_VER + +//////////////////////////////////////////////////////////////////////////////// + +// Use variadic macros if the compiler supports them +#if ( defined _MSC_VER && _MSC_VER > 1400 && !defined __EDGE__) || \ + ( defined __WAVE__ && __WAVE_HAS_VARIADICS ) || \ + ( defined __GNUC__ && __GNUC__ >= 3 ) || \ + ( !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L ) + +#define CATCH_INTERNAL_CONFIG_VARIADIC_MACROS + +#endif + +// Use __COUNTER__ if the compiler supports it +#if ( defined _MSC_VER && _MSC_VER >= 1300 ) || \ + ( defined __GNUC__ && ( __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3 )) ) || \ + ( defined __clang__ && __clang_major__ >= 3 ) + +#define CATCH_INTERNAL_CONFIG_COUNTER + +#endif + +//////////////////////////////////////////////////////////////////////////////// +// C++ language feature support + +// catch all support for C++11 +#if defined(CATCH_CPP11_OR_GREATER) + +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_NULLPTR) +# define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR +# endif + +# ifndef CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT +# define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT +# endif + +# ifndef CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +# define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +# endif + +# ifndef CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM +# define CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM +# endif + +# ifndef CATCH_INTERNAL_CONFIG_CPP11_TUPLE +# define CATCH_INTERNAL_CONFIG_CPP11_TUPLE +# endif + +# ifndef CATCH_INTERNAL_CONFIG_VARIADIC_MACROS +# define CATCH_INTERNAL_CONFIG_VARIADIC_MACROS +# endif + +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) +# define CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG +# endif + +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) +# define CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) +# define CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) +# define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) +# define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS +# endif + +#endif // __cplusplus >= 201103L + +// Now set the actual defines based on the above + anything the user has configured +#if defined(CATCH_INTERNAL_CONFIG_CPP11_NULLPTR) && !defined(CATCH_CONFIG_CPP11_NO_NULLPTR) && !defined(CATCH_CONFIG_CPP11_NULLPTR) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_NULLPTR +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_CONFIG_CPP11_NO_NOEXCEPT) && !defined(CATCH_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_NOEXCEPT +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS) && !defined(CATCH_CONFIG_CPP11_NO_GENERATED_METHODS) && !defined(CATCH_CONFIG_CPP11_GENERATED_METHODS) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_GENERATED_METHODS +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM) && !defined(CATCH_CONFIG_CPP11_NO_IS_ENUM) && !defined(CATCH_CONFIG_CPP11_IS_ENUM) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_IS_ENUM +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_TUPLE) && !defined(CATCH_CONFIG_CPP11_NO_TUPLE) && !defined(CATCH_CONFIG_CPP11_TUPLE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_TUPLE +#endif +#if defined(CATCH_INTERNAL_CONFIG_VARIADIC_MACROS) && !defined(CATCH_CONFIG_NO_VARIADIC_MACROS) && !defined(CATCH_CONFIG_VARIADIC_MACROS) +# define CATCH_CONFIG_VARIADIC_MACROS +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_LONG_LONG +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_NO_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_OVERRIDE +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_UNIQUE_PTR +#endif +// Use of __COUNTER__ is suppressed if __JETBRAINS_IDE__ is #defined (meaning we're being parsed by a JetBrains IDE for +// analytics) because, at time of writing, __COUNTER__ is not properly handled by it. +// This does not affect compilation +#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) && !defined(__JETBRAINS_IDE__) +# define CATCH_CONFIG_COUNTER +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_NO_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_SHUFFLE +#endif +# if defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_NO_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_TYPE_TRAITS +# endif +#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) +# define CATCH_CONFIG_WINDOWS_SEH +#endif +// This is set by default, because we assume that unix compilers are posix-signal-compatible by default. +#if !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS) +# define CATCH_CONFIG_POSIX_SIGNALS +#endif + +#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) +# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS +# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS +#endif +#if !defined(CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS) +# define CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS +# define CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS +#endif + +// noexcept support: +#if defined(CATCH_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_NOEXCEPT) +# define CATCH_NOEXCEPT noexcept +# define CATCH_NOEXCEPT_IS(x) noexcept(x) +#else +# define CATCH_NOEXCEPT throw() +# define CATCH_NOEXCEPT_IS(x) +#endif + +// nullptr support +#ifdef CATCH_CONFIG_CPP11_NULLPTR +# define CATCH_NULL nullptr +#else +# define CATCH_NULL NULL +#endif + +// override support +#ifdef CATCH_CONFIG_CPP11_OVERRIDE +# define CATCH_OVERRIDE override +#else +# define CATCH_OVERRIDE +#endif + +// unique_ptr support +#ifdef CATCH_CONFIG_CPP11_UNIQUE_PTR +# define CATCH_AUTO_PTR( T ) std::unique_ptr +#else +# define CATCH_AUTO_PTR( T ) std::auto_ptr +#endif + +#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line +#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) +#ifdef CATCH_CONFIG_COUNTER +# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) +#else +# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) +#endif + +#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr +#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr ) + +#include +#include + +namespace Catch { + + struct IConfig; + + struct CaseSensitive { enum Choice { + Yes, + No + }; }; + + class NonCopyable { +#ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + NonCopyable( NonCopyable const& ) = delete; + NonCopyable( NonCopyable && ) = delete; + NonCopyable& operator = ( NonCopyable const& ) = delete; + NonCopyable& operator = ( NonCopyable && ) = delete; +#else + NonCopyable( NonCopyable const& info ); + NonCopyable& operator = ( NonCopyable const& ); +#endif + + protected: + NonCopyable() {} + virtual ~NonCopyable(); + }; + + class SafeBool { + public: + typedef void (SafeBool::*type)() const; + + static type makeSafe( bool value ) { + return value ? &SafeBool::trueValue : 0; + } + private: + void trueValue() const {} + }; + + template + inline void deleteAll( ContainerT& container ) { + typename ContainerT::const_iterator it = container.begin(); + typename ContainerT::const_iterator itEnd = container.end(); + for(; it != itEnd; ++it ) + delete *it; + } + template + inline void deleteAllValues( AssociativeContainerT& container ) { + typename AssociativeContainerT::const_iterator it = container.begin(); + typename AssociativeContainerT::const_iterator itEnd = container.end(); + for(; it != itEnd; ++it ) + delete it->second; + } + + bool startsWith( std::string const& s, std::string const& prefix ); + bool startsWith( std::string const& s, char prefix ); + bool endsWith( std::string const& s, std::string const& suffix ); + bool endsWith( std::string const& s, char suffix ); + bool contains( std::string const& s, std::string const& infix ); + void toLowerInPlace( std::string& s ); + std::string toLower( std::string const& s ); + std::string trim( std::string const& str ); + bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ); + + struct pluralise { + pluralise( std::size_t count, std::string const& label ); + + friend std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ); + + std::size_t m_count; + std::string m_label; + }; + + struct SourceLineInfo { + + SourceLineInfo(); + SourceLineInfo( char const* _file, std::size_t _line ); +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + SourceLineInfo(SourceLineInfo const& other) = default; + SourceLineInfo( SourceLineInfo && ) = default; + SourceLineInfo& operator = ( SourceLineInfo const& ) = default; + SourceLineInfo& operator = ( SourceLineInfo && ) = default; +# endif + bool empty() const; + bool operator == ( SourceLineInfo const& other ) const; + bool operator < ( SourceLineInfo const& other ) const; + + char const* file; + std::size_t line; + }; + + std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); + + // This is just here to avoid compiler warnings with macro constants and boolean literals + inline bool isTrue( bool value ){ return value; } + inline bool alwaysTrue() { return true; } + inline bool alwaysFalse() { return false; } + + void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ); + + void seedRng( IConfig const& config ); + unsigned int rngSeed(); + + // Use this in variadic streaming macros to allow + // >> +StreamEndStop + // as well as + // >> stuff +StreamEndStop + struct StreamEndStop { + std::string operator+() { + return std::string(); + } + }; + template + T const& operator + ( T const& value, StreamEndStop ) { + return value; + } +} + +#define CATCH_INTERNAL_LINEINFO ::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) ) +#define CATCH_INTERNAL_ERROR( msg ) ::Catch::throwLogicError( msg, CATCH_INTERNAL_LINEINFO ); + +namespace Catch { + + class NotImplementedException : public std::exception + { + public: + NotImplementedException( SourceLineInfo const& lineInfo ); + NotImplementedException( NotImplementedException const& ) {} + + virtual ~NotImplementedException() CATCH_NOEXCEPT {} + + virtual const char* what() const CATCH_NOEXCEPT; + + private: + std::string m_what; + SourceLineInfo m_lineInfo; + }; + +} // end namespace Catch + +/////////////////////////////////////////////////////////////////////////////// +#define CATCH_NOT_IMPLEMENTED throw Catch::NotImplementedException( CATCH_INTERNAL_LINEINFO ) + +// #included from: internal/catch_context.h +#define TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED + +// #included from: catch_interfaces_generators.h +#define TWOBLUECUBES_CATCH_INTERFACES_GENERATORS_H_INCLUDED + +#include + +namespace Catch { + + struct IGeneratorInfo { + virtual ~IGeneratorInfo(); + virtual bool moveNext() = 0; + virtual std::size_t getCurrentIndex() const = 0; + }; + + struct IGeneratorsForTest { + virtual ~IGeneratorsForTest(); + + virtual IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) = 0; + virtual bool moveNext() = 0; + }; + + IGeneratorsForTest* createGeneratorsForTest(); + +} // end namespace Catch + +// #included from: catch_ptr.hpp +#define TWOBLUECUBES_CATCH_PTR_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +namespace Catch { + + // An intrusive reference counting smart pointer. + // T must implement addRef() and release() methods + // typically implementing the IShared interface + template + class Ptr { + public: + Ptr() : m_p( CATCH_NULL ){} + Ptr( T* p ) : m_p( p ){ + if( m_p ) + m_p->addRef(); + } + Ptr( Ptr const& other ) : m_p( other.m_p ){ + if( m_p ) + m_p->addRef(); + } + ~Ptr(){ + if( m_p ) + m_p->release(); + } + void reset() { + if( m_p ) + m_p->release(); + m_p = CATCH_NULL; + } + Ptr& operator = ( T* p ){ + Ptr temp( p ); + swap( temp ); + return *this; + } + Ptr& operator = ( Ptr const& other ){ + Ptr temp( other ); + swap( temp ); + return *this; + } + void swap( Ptr& other ) { std::swap( m_p, other.m_p ); } + T* get() const{ return m_p; } + T& operator*() const { return *m_p; } + T* operator->() const { return m_p; } + bool operator !() const { return m_p == CATCH_NULL; } + operator SafeBool::type() const { return SafeBool::makeSafe( m_p != CATCH_NULL ); } + + private: + T* m_p; + }; + + struct IShared : NonCopyable { + virtual ~IShared(); + virtual void addRef() const = 0; + virtual void release() const = 0; + }; + + template + struct SharedImpl : T { + + SharedImpl() : m_rc( 0 ){} + + virtual void addRef() const { + ++m_rc; + } + virtual void release() const { + if( --m_rc == 0 ) + delete this; + } + + mutable unsigned int m_rc; + }; + +} // end namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +namespace Catch { + + class TestCase; + class Stream; + struct IResultCapture; + struct IRunner; + struct IGeneratorsForTest; + struct IConfig; + + struct IContext + { + virtual ~IContext(); + + virtual IResultCapture* getResultCapture() = 0; + virtual IRunner* getRunner() = 0; + virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) = 0; + virtual bool advanceGeneratorsForCurrentTest() = 0; + virtual Ptr getConfig() const = 0; + }; + + struct IMutableContext : IContext + { + virtual ~IMutableContext(); + virtual void setResultCapture( IResultCapture* resultCapture ) = 0; + virtual void setRunner( IRunner* runner ) = 0; + virtual void setConfig( Ptr const& config ) = 0; + }; + + IContext& getCurrentContext(); + IMutableContext& getCurrentMutableContext(); + void cleanUpContext(); + Stream createStream( std::string const& streamName ); + +} + +// #included from: internal/catch_test_registry.hpp +#define TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED + +// #included from: catch_interfaces_testcase.h +#define TWOBLUECUBES_CATCH_INTERFACES_TESTCASE_H_INCLUDED + +#include + +namespace Catch { + + class TestSpec; + + struct ITestCase : IShared { + virtual void invoke () const = 0; + protected: + virtual ~ITestCase(); + }; + + class TestCase; + struct IConfig; + + struct ITestCaseRegistry { + virtual ~ITestCaseRegistry(); + virtual std::vector const& getAllTests() const = 0; + virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; + }; + + bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); + std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); + std::vector const& getAllTestCasesSorted( IConfig const& config ); + +} + +namespace Catch { + +template +class MethodTestCase : public SharedImpl { + +public: + MethodTestCase( void (C::*method)() ) : m_method( method ) {} + + virtual void invoke() const { + C obj; + (obj.*m_method)(); + } + +private: + virtual ~MethodTestCase() {} + + void (C::*m_method)(); +}; + +typedef void(*TestFunction)(); + +struct NameAndDesc { + NameAndDesc( const char* _name = "", const char* _description= "" ) + : name( _name ), description( _description ) + {} + + const char* name; + const char* description; +}; + +void registerTestCase + ( ITestCase* testCase, + char const* className, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ); + +struct AutoReg { + + AutoReg + ( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ); + + template + AutoReg + ( void (C::*method)(), + char const* className, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ) { + + registerTestCase + ( new MethodTestCase( method ), + className, + nameAndDesc, + lineInfo ); + } + + ~AutoReg(); + +private: + AutoReg( AutoReg const& ); + void operator= ( AutoReg const& ); +}; + +void registerTestCaseFunction + ( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ); + +} // end namespace Catch + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \ + static void TestName(); \ + CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); } \ + CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \ + static void TestName() + #define INTERNAL_CATCH_TESTCASE( ... ) \ + INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), __VA_ARGS__ ) + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \ + CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); } \ + CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\ + CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + namespace{ \ + struct TestName : ClassName{ \ + void test(); \ + }; \ + Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestName::test, #ClassName, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); \ + } \ + CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \ + void TestName::test() + #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \ + INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, __VA_ARGS__ ) + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \ + CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); \ + CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS + +#else + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TESTCASE2( TestName, Name, Desc ) \ + static void TestName(); \ + CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); }\ + CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \ + static void TestName() + #define INTERNAL_CATCH_TESTCASE( Name, Desc ) \ + INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), Name, Desc ) + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \ + CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( Name, Desc ), CATCH_INTERNAL_LINEINFO ); } \ + CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestCaseName, ClassName, TestName, Desc )\ + CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + namespace{ \ + struct TestCaseName : ClassName{ \ + void test(); \ + }; \ + Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestCaseName::test, #ClassName, Catch::NameAndDesc( TestName, Desc ), CATCH_INTERNAL_LINEINFO ); \ + } \ + CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS \ + void TestCaseName::test() + #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, TestName, Desc )\ + INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, TestName, Desc ) + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, Name, Desc ) \ + CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS \ + Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); \ + CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS + +#endif + +// #included from: internal/catch_capture.hpp +#define TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED + +// #included from: catch_result_builder.h +#define TWOBLUECUBES_CATCH_RESULT_BUILDER_H_INCLUDED + +// #included from: catch_result_type.h +#define TWOBLUECUBES_CATCH_RESULT_TYPE_H_INCLUDED + +namespace Catch { + + // ResultWas::OfType enum + struct ResultWas { enum OfType { + Unknown = -1, + Ok = 0, + Info = 1, + Warning = 2, + + FailureBit = 0x10, + + ExpressionFailed = FailureBit | 1, + ExplicitFailure = FailureBit | 2, + + Exception = 0x100 | FailureBit, + + ThrewException = Exception | 1, + DidntThrowException = Exception | 2, + + FatalErrorCondition = 0x200 | FailureBit + + }; }; + + inline bool isOk( ResultWas::OfType resultType ) { + return ( resultType & ResultWas::FailureBit ) == 0; + } + inline bool isJustInfo( int flags ) { + return flags == ResultWas::Info; + } + + // ResultDisposition::Flags enum + struct ResultDisposition { enum Flags { + Normal = 0x01, + + ContinueOnFailure = 0x02, // Failures fail test, but execution continues + FalseTest = 0x04, // Prefix expression with ! + SuppressFail = 0x08 // Failures are reported but do not fail the test + }; }; + + inline ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) { + return static_cast( static_cast( lhs ) | static_cast( rhs ) ); + } + + inline bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; } + inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; } + inline bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; } + +} // end namespace Catch + +// #included from: catch_assertionresult.h +#define TWOBLUECUBES_CATCH_ASSERTIONRESULT_H_INCLUDED + +#include + +namespace Catch { + + struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; + + struct DecomposedExpression + { + virtual ~DecomposedExpression() {} + virtual bool isBinaryExpression() const { + return false; + } + virtual void reconstructExpression( std::string& dest ) const = 0; + + // Only simple binary comparisons can be decomposed. + // If more complex check is required then wrap sub-expressions in parentheses. + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator % ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( T const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( T const& ); + + private: + DecomposedExpression& operator = (DecomposedExpression const&); + }; + + struct AssertionInfo + { + AssertionInfo() {} + AssertionInfo( char const * _macroName, + SourceLineInfo const& _lineInfo, + char const * _capturedExpression, + ResultDisposition::Flags _resultDisposition, + char const * _secondArg = ""); + + char const * macroName; + SourceLineInfo lineInfo; + char const * capturedExpression; + ResultDisposition::Flags resultDisposition; + char const * secondArg; + }; + + struct AssertionResultData + { + AssertionResultData() : decomposedExpression( CATCH_NULL ) + , resultType( ResultWas::Unknown ) + , negated( false ) + , parenthesized( false ) {} + + void negate( bool parenthesize ) { + negated = !negated; + parenthesized = parenthesize; + if( resultType == ResultWas::Ok ) + resultType = ResultWas::ExpressionFailed; + else if( resultType == ResultWas::ExpressionFailed ) + resultType = ResultWas::Ok; + } + + std::string const& reconstructExpression() const { + if( decomposedExpression != CATCH_NULL ) { + decomposedExpression->reconstructExpression( reconstructedExpression ); + if( parenthesized ) { + reconstructedExpression.insert( 0, 1, '(' ); + reconstructedExpression.append( 1, ')' ); + } + if( negated ) { + reconstructedExpression.insert( 0, 1, '!' ); + } + decomposedExpression = CATCH_NULL; + } + return reconstructedExpression; + } + + mutable DecomposedExpression const* decomposedExpression; + mutable std::string reconstructedExpression; + std::string message; + ResultWas::OfType resultType; + bool negated; + bool parenthesized; + }; + + class AssertionResult { + public: + AssertionResult(); + AssertionResult( AssertionInfo const& info, AssertionResultData const& data ); + ~AssertionResult(); +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + AssertionResult( AssertionResult const& ) = default; + AssertionResult( AssertionResult && ) = default; + AssertionResult& operator = ( AssertionResult const& ) = default; + AssertionResult& operator = ( AssertionResult && ) = default; +# endif + + bool isOk() const; + bool succeeded() const; + ResultWas::OfType getResultType() const; + bool hasExpression() const; + bool hasMessage() const; + std::string getExpression() const; + std::string getExpressionInMacro() const; + bool hasExpandedExpression() const; + std::string getExpandedExpression() const; + std::string getMessage() const; + SourceLineInfo getSourceInfo() const; + std::string getTestMacroName() const; + void discardDecomposedExpression() const; + void expandDecomposedExpression() const; + + protected: + AssertionInfo m_info; + AssertionResultData m_resultData; + }; + +} // end namespace Catch + +// #included from: catch_matchers.hpp +#define TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED + +namespace Catch { +namespace Matchers { + namespace Impl { + + template struct MatchAllOf; + template struct MatchAnyOf; + template struct MatchNotOf; + + class MatcherUntypedBase { + public: + std::string toString() const { + if( m_cachedToString.empty() ) + m_cachedToString = describe(); + return m_cachedToString; + } + + protected: + virtual ~MatcherUntypedBase(); + virtual std::string describe() const = 0; + mutable std::string m_cachedToString; + private: + MatcherUntypedBase& operator = ( MatcherUntypedBase const& ); + }; + + template + struct MatcherMethod { + virtual bool match( ObjectT const& arg ) const = 0; + }; + template + struct MatcherMethod { + virtual bool match( PtrT* arg ) const = 0; + }; + + template + struct MatcherBase : MatcherUntypedBase, MatcherMethod { + + MatchAllOf operator && ( MatcherBase const& other ) const; + MatchAnyOf operator || ( MatcherBase const& other ) const; + MatchNotOf operator ! () const; + }; + + template + struct MatchAllOf : MatcherBase { + virtual bool match( ArgT const& arg ) const CATCH_OVERRIDE { + for( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if (!m_matchers[i]->match(arg)) + return false; + } + return true; + } + virtual std::string describe() const CATCH_OVERRIDE { + std::string description; + description.reserve( 4 + m_matchers.size()*32 ); + description += "( "; + for( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if( i != 0 ) + description += " and "; + description += m_matchers[i]->toString(); + } + description += " )"; + return description; + } + + MatchAllOf& operator && ( MatcherBase const& other ) { + m_matchers.push_back( &other ); + return *this; + } + + std::vector const*> m_matchers; + }; + template + struct MatchAnyOf : MatcherBase { + + virtual bool match( ArgT const& arg ) const CATCH_OVERRIDE { + for( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if (m_matchers[i]->match(arg)) + return true; + } + return false; + } + virtual std::string describe() const CATCH_OVERRIDE { + std::string description; + description.reserve( 4 + m_matchers.size()*32 ); + description += "( "; + for( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if( i != 0 ) + description += " or "; + description += m_matchers[i]->toString(); + } + description += " )"; + return description; + } + + MatchAnyOf& operator || ( MatcherBase const& other ) { + m_matchers.push_back( &other ); + return *this; + } + + std::vector const*> m_matchers; + }; + + template + struct MatchNotOf : MatcherBase { + + MatchNotOf( MatcherBase const& underlyingMatcher ) : m_underlyingMatcher( underlyingMatcher ) {} + + virtual bool match( ArgT const& arg ) const CATCH_OVERRIDE { + return !m_underlyingMatcher.match( arg ); + } + + virtual std::string describe() const CATCH_OVERRIDE { + return "not " + m_underlyingMatcher.toString(); + } + MatcherBase const& m_underlyingMatcher; + }; + + template + MatchAllOf MatcherBase::operator && ( MatcherBase const& other ) const { + return MatchAllOf() && *this && other; + } + template + MatchAnyOf MatcherBase::operator || ( MatcherBase const& other ) const { + return MatchAnyOf() || *this || other; + } + template + MatchNotOf MatcherBase::operator ! () const { + return MatchNotOf( *this ); + } + + } // namespace Impl + + // The following functions create the actual matcher objects. + // This allows the types to be inferred + // - deprecated: prefer ||, && and ! + template + inline Impl::MatchNotOf Not( Impl::MatcherBase const& underlyingMatcher ) { + return Impl::MatchNotOf( underlyingMatcher ); + } + template + inline Impl::MatchAllOf AllOf( Impl::MatcherBase const& m1, Impl::MatcherBase const& m2 ) { + return Impl::MatchAllOf() && m1 && m2; + } + template + inline Impl::MatchAllOf AllOf( Impl::MatcherBase const& m1, Impl::MatcherBase const& m2, Impl::MatcherBase const& m3 ) { + return Impl::MatchAllOf() && m1 && m2 && m3; + } + template + inline Impl::MatchAnyOf AnyOf( Impl::MatcherBase const& m1, Impl::MatcherBase const& m2 ) { + return Impl::MatchAnyOf() || m1 || m2; + } + template + inline Impl::MatchAnyOf AnyOf( Impl::MatcherBase const& m1, Impl::MatcherBase const& m2, Impl::MatcherBase const& m3 ) { + return Impl::MatchAnyOf() || m1 || m2 || m3; + } + +} // namespace Matchers + +using namespace Matchers; +using Matchers::Impl::MatcherBase; + +} // namespace Catch + +namespace Catch { + + struct TestFailureException{}; + + template class ExpressionLhs; + + struct CopyableStream { + CopyableStream() {} + CopyableStream( CopyableStream const& other ) { + oss << other.oss.str(); + } + CopyableStream& operator=( CopyableStream const& other ) { + oss.str(std::string()); + oss << other.oss.str(); + return *this; + } + std::ostringstream oss; + }; + + class ResultBuilder : public DecomposedExpression { + public: + ResultBuilder( char const* macroName, + SourceLineInfo const& lineInfo, + char const* capturedExpression, + ResultDisposition::Flags resultDisposition, + char const* secondArg = "" ); + ~ResultBuilder(); + + template + ExpressionLhs operator <= ( T const& operand ); + ExpressionLhs operator <= ( bool value ); + + template + ResultBuilder& operator << ( T const& value ) { + m_stream().oss << value; + return *this; + } + + ResultBuilder& setResultType( ResultWas::OfType result ); + ResultBuilder& setResultType( bool result ); + + void endExpression( DecomposedExpression const& expr ); + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE; + + AssertionResult build() const; + AssertionResult build( DecomposedExpression const& expr ) const; + + void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal ); + void captureResult( ResultWas::OfType resultType ); + void captureExpression(); + void captureExpectedException( std::string const& expectedMessage ); + void captureExpectedException( Matchers::Impl::MatcherBase const& matcher ); + void handleResult( AssertionResult const& result ); + void react(); + bool shouldDebugBreak() const; + bool allowThrows() const; + + template + void captureMatch( ArgT const& arg, MatcherT const& matcher, char const* matcherString ); + + void setExceptionGuard(); + void unsetExceptionGuard(); + + private: + AssertionInfo m_assertionInfo; + AssertionResultData m_data; + + static CopyableStream &m_stream() + { + static CopyableStream s; + return s; + } + + bool m_shouldDebugBreak; + bool m_shouldThrow; + bool m_guardException; + }; + +} // namespace Catch + +// Include after due to circular dependency: +// #included from: catch_expression_lhs.hpp +#define TWOBLUECUBES_CATCH_EXPRESSION_LHS_HPP_INCLUDED + +// #included from: catch_evaluate.hpp +#define TWOBLUECUBES_CATCH_EVALUATE_HPP_INCLUDED + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4389) // '==' : signed/unsigned mismatch +#pragma warning(disable:4312) // Converting int to T* using reinterpret_cast (issue on x64 platform) +#endif + +#include + +namespace Catch { +namespace Internal { + + enum Operator { + IsEqualTo, + IsNotEqualTo, + IsLessThan, + IsGreaterThan, + IsLessThanOrEqualTo, + IsGreaterThanOrEqualTo + }; + + template struct OperatorTraits { static const char* getName(){ return "*error*"; } }; + template<> struct OperatorTraits { static const char* getName(){ return "=="; } }; + template<> struct OperatorTraits { static const char* getName(){ return "!="; } }; + template<> struct OperatorTraits { static const char* getName(){ return "<"; } }; + template<> struct OperatorTraits { static const char* getName(){ return ">"; } }; + template<> struct OperatorTraits { static const char* getName(){ return "<="; } }; + template<> struct OperatorTraits{ static const char* getName(){ return ">="; } }; + + template + inline T& opCast(T const& t) { return const_cast(t); } + +// nullptr_t support based on pull request #154 from Konstantin Baumann +#ifdef CATCH_CONFIG_CPP11_NULLPTR + inline std::nullptr_t opCast(std::nullptr_t) { return nullptr; } +#endif // CATCH_CONFIG_CPP11_NULLPTR + + // So the compare overloads can be operator agnostic we convey the operator as a template + // enum, which is used to specialise an Evaluator for doing the comparison. + template + class Evaluator{}; + + template + struct Evaluator { + static bool evaluate( T1 const& lhs, T2 const& rhs) { + return bool( opCast( lhs ) == opCast( rhs ) ); + } + }; + template + struct Evaluator { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) != opCast( rhs ) ); + } + }; + template + struct Evaluator { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) < opCast( rhs ) ); + } + }; + template + struct Evaluator { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) > opCast( rhs ) ); + } + }; + template + struct Evaluator { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) >= opCast( rhs ) ); + } + }; + template + struct Evaluator { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) <= opCast( rhs ) ); + } + }; + + template + bool applyEvaluator( T1 const& lhs, T2 const& rhs ) { + return Evaluator::evaluate( lhs, rhs ); + } + + // This level of indirection allows us to specialise for integer types + // to avoid signed/ unsigned warnings + + // "base" overload + template + bool compare( T1 const& lhs, T2 const& rhs ) { + return Evaluator::evaluate( lhs, rhs ); + } + + // unsigned X to int + template bool compare( unsigned int lhs, int rhs ) { + return applyEvaluator( lhs, static_cast( rhs ) ); + } + template bool compare( unsigned long lhs, int rhs ) { + return applyEvaluator( lhs, static_cast( rhs ) ); + } + template bool compare( unsigned char lhs, int rhs ) { + return applyEvaluator( lhs, static_cast( rhs ) ); + } + + // unsigned X to long + template bool compare( unsigned int lhs, long rhs ) { + return applyEvaluator( lhs, static_cast( rhs ) ); + } + template bool compare( unsigned long lhs, long rhs ) { + return applyEvaluator( lhs, static_cast( rhs ) ); + } + template bool compare( unsigned char lhs, long rhs ) { + return applyEvaluator( lhs, static_cast( rhs ) ); + } + + // int to unsigned X + template bool compare( int lhs, unsigned int rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( int lhs, unsigned long rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( int lhs, unsigned char rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + + // long to unsigned X + template bool compare( long lhs, unsigned int rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( long lhs, unsigned long rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( long lhs, unsigned char rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + + // pointer to long (when comparing against NULL) + template bool compare( long lhs, T* rhs ) { + return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); + } + template bool compare( T* lhs, long rhs ) { + return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); + } + + // pointer to int (when comparing against NULL) + template bool compare( int lhs, T* rhs ) { + return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); + } + template bool compare( T* lhs, int rhs ) { + return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); + } + +#ifdef CATCH_CONFIG_CPP11_LONG_LONG + // long long to unsigned X + template bool compare( long long lhs, unsigned int rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( long long lhs, unsigned long rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( long long lhs, unsigned long long rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( long long lhs, unsigned char rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + + // unsigned long long to X + template bool compare( unsigned long long lhs, int rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( unsigned long long lhs, long rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( unsigned long long lhs, long long rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + template bool compare( unsigned long long lhs, char rhs ) { + return applyEvaluator( static_cast( lhs ), rhs ); + } + + // pointer to long long (when comparing against NULL) + template bool compare( long long lhs, T* rhs ) { + return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); + } + template bool compare( T* lhs, long long rhs ) { + return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); + } +#endif // CATCH_CONFIG_CPP11_LONG_LONG + +#ifdef CATCH_CONFIG_CPP11_NULLPTR + // pointer to nullptr_t (when comparing against nullptr) + template bool compare( std::nullptr_t, T* rhs ) { + return Evaluator::evaluate( nullptr, rhs ); + } + template bool compare( T* lhs, std::nullptr_t ) { + return Evaluator::evaluate( lhs, nullptr ); + } +#endif // CATCH_CONFIG_CPP11_NULLPTR + +} // end of namespace Internal +} // end of namespace Catch + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +// #included from: catch_tostring.h +#define TWOBLUECUBES_CATCH_TOSTRING_H_INCLUDED + +#include +#include +#include +#include +#include + +#ifdef __OBJC__ +// #included from: catch_objc_arc.hpp +#define TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED + +#import + +#ifdef __has_feature +#define CATCH_ARC_ENABLED __has_feature(objc_arc) +#else +#define CATCH_ARC_ENABLED 0 +#endif + +void arcSafeRelease( NSObject* obj ); +id performOptionalSelector( id obj, SEL sel ); + +#if !CATCH_ARC_ENABLED +inline void arcSafeRelease( NSObject* obj ) { + [obj release]; +} +inline id performOptionalSelector( id obj, SEL sel ) { + if( [obj respondsToSelector: sel] ) + return [obj performSelector: sel]; + return nil; +} +#define CATCH_UNSAFE_UNRETAINED +#define CATCH_ARC_STRONG +#else +inline void arcSafeRelease( NSObject* ){} +inline id performOptionalSelector( id obj, SEL sel ) { +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" +#endif + if( [obj respondsToSelector: sel] ) + return [obj performSelector: sel]; +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + return nil; +} +#define CATCH_UNSAFE_UNRETAINED __unsafe_unretained +#define CATCH_ARC_STRONG __strong +#endif + +#endif + +#ifdef CATCH_CONFIG_CPP11_TUPLE +#include +#endif + +#ifdef CATCH_CONFIG_CPP11_IS_ENUM +#include +#endif + +namespace Catch { + +// Why we're here. +template +std::string toString( T const& value ); + +// Built in overloads + +std::string toString( std::string const& value ); +std::string toString( std::wstring const& value ); +std::string toString( const char* const value ); +std::string toString( char* const value ); +std::string toString( const wchar_t* const value ); +std::string toString( wchar_t* const value ); +std::string toString( int value ); +std::string toString( unsigned long value ); +std::string toString( unsigned int value ); +std::string toString( const double value ); +std::string toString( const float value ); +std::string toString( bool value ); +std::string toString( char value ); +std::string toString( signed char value ); +std::string toString( unsigned char value ); + +#ifdef CATCH_CONFIG_CPP11_LONG_LONG +std::string toString( long long value ); +std::string toString( unsigned long long value ); +#endif + +#ifdef CATCH_CONFIG_CPP11_NULLPTR +std::string toString( std::nullptr_t ); +#endif + +#ifdef __OBJC__ + std::string toString( NSString const * const& nsstring ); + std::string toString( NSString * CATCH_ARC_STRONG & nsstring ); + std::string toString( NSObject* const& nsObject ); +#endif + +namespace Detail { + + extern const std::string unprintableString; + + #if !defined(CATCH_CONFIG_CPP11_STREAM_INSERTABLE_CHECK) + struct BorgType { + template BorgType( T const& ); + }; + + struct TrueType { char sizer[1]; }; + struct FalseType { char sizer[2]; }; + + TrueType& testStreamable( std::ostream& ); + FalseType testStreamable( FalseType ); + + FalseType operator<<( std::ostream const&, BorgType const& ); + + template + struct IsStreamInsertable { + static std::ostream &s; + static T const&t; + enum { value = sizeof( testStreamable(s << t) ) == sizeof( TrueType ) }; + }; +#else + template + class IsStreamInsertable { + template + static auto test(int) + -> decltype( std::declval() << std::declval(), std::true_type() ); + + template + static auto test(...) -> std::false_type; + + public: + static const bool value = decltype(test(0))::value; + }; +#endif + +#if defined(CATCH_CONFIG_CPP11_IS_ENUM) + template::value + > + struct EnumStringMaker + { + static std::string convert( T const& ) { return unprintableString; } + }; + + template + struct EnumStringMaker + { + static std::string convert( T const& v ) + { + return ::Catch::toString( + static_cast::type>(v) + ); + } + }; +#endif + template + struct StringMakerBase { +#if defined(CATCH_CONFIG_CPP11_IS_ENUM) + template + static std::string convert( T const& v ) + { + return EnumStringMaker::convert( v ); + } +#else + template + static std::string convert( T const& ) { return unprintableString; } +#endif + }; + + template<> + struct StringMakerBase { + template + static std::string convert( T const& _value ) { + std::ostringstream oss; + oss << _value; + return oss.str(); + } + }; + + std::string rawMemoryToString( const void *object, std::size_t size ); + + template + inline std::string rawMemoryToString( const T& object ) { + return rawMemoryToString( &object, sizeof(object) ); + } + +} // end namespace Detail + +template +struct StringMaker : + Detail::StringMakerBase::value> {}; + +template +struct StringMaker { + template + static std::string convert( U* p ) { + if( !p ) + return "NULL"; + else + return Detail::rawMemoryToString( p ); + } +}; + +template +struct StringMaker { + static std::string convert( R C::* p ) { + if( !p ) + return "NULL"; + else + return Detail::rawMemoryToString( p ); + } +}; + +namespace Detail { + template + std::string rangeToString( InputIterator first, InputIterator last ); +} + +//template +//struct StringMaker > { +// static std::string convert( std::vector const& v ) { +// return Detail::rangeToString( v.begin(), v.end() ); +// } +//}; + +template +std::string toString( std::vector const& v ) { + return Detail::rangeToString( v.begin(), v.end() ); +} + +#ifdef CATCH_CONFIG_CPP11_TUPLE + +// toString for tuples +namespace TupleDetail { + template< + typename Tuple, + std::size_t N = 0, + bool = (N < std::tuple_size::value) + > + struct ElementPrinter { + static void print( const Tuple& tuple, std::ostream& os ) + { + os << ( N ? ", " : " " ) + << Catch::toString(std::get(tuple)); + ElementPrinter::print(tuple,os); + } + }; + + template< + typename Tuple, + std::size_t N + > + struct ElementPrinter { + static void print( const Tuple&, std::ostream& ) {} + }; + +} + +template +struct StringMaker> { + + static std::string convert( const std::tuple& tuple ) + { + std::ostringstream os; + os << '{'; + TupleDetail::ElementPrinter>::print( tuple, os ); + os << " }"; + return os.str(); + } +}; +#endif // CATCH_CONFIG_CPP11_TUPLE + +namespace Detail { + template + std::string makeString( T const& value ) { + return StringMaker::convert( value ); + } +} // end namespace Detail + +/// \brief converts any type to a string +/// +/// The default template forwards on to ostringstream - except when an +/// ostringstream overload does not exist - in which case it attempts to detect +/// that and writes {?}. +/// Overload (not specialise) this template for custom typs that you don't want +/// to provide an ostream overload for. +template +std::string toString( T const& value ) { + return StringMaker::convert( value ); +} + + namespace Detail { + template + std::string rangeToString( InputIterator first, InputIterator last ) { + std::ostringstream oss; + oss << "{ "; + if( first != last ) { + oss << Catch::toString( *first ); + for( ++first ; first != last ; ++first ) + oss << ", " << Catch::toString( *first ); + } + oss << " }"; + return oss.str(); + } +} + +} // end namespace Catch + +namespace Catch { + +template +class BinaryExpression; + +template +class MatchExpression; + +// Wraps the LHS of an expression and overloads comparison operators +// for also capturing those and RHS (if any) +template +class ExpressionLhs : public DecomposedExpression { +public: + ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ), m_truthy(false) {} + + ExpressionLhs& operator = ( const ExpressionLhs& ); + + template + BinaryExpression + operator == ( RhsT const& rhs ) { + return captureExpression( rhs ); + } + + template + BinaryExpression + operator != ( RhsT const& rhs ) { + return captureExpression( rhs ); + } + + template + BinaryExpression + operator < ( RhsT const& rhs ) { + return captureExpression( rhs ); + } + + template + BinaryExpression + operator > ( RhsT const& rhs ) { + return captureExpression( rhs ); + } + + template + BinaryExpression + operator <= ( RhsT const& rhs ) { + return captureExpression( rhs ); + } + + template + BinaryExpression + operator >= ( RhsT const& rhs ) { + return captureExpression( rhs ); + } + + BinaryExpression operator == ( bool rhs ) { + return captureExpression( rhs ); + } + + BinaryExpression operator != ( bool rhs ) { + return captureExpression( rhs ); + } + + void endExpression() { + m_truthy = m_lhs ? true : false; + m_rb + .setResultType( m_truthy ) + .endExpression( *this ); + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + dest = Catch::toString( m_lhs ); + } + +private: + template + BinaryExpression captureExpression( RhsT& rhs ) const { + return BinaryExpression( m_rb, m_lhs, rhs ); + } + + template + BinaryExpression captureExpression( bool rhs ) const { + return BinaryExpression( m_rb, m_lhs, rhs ); + } + +private: + ResultBuilder& m_rb; + T m_lhs; + bool m_truthy; +}; + +template +class BinaryExpression : public DecomposedExpression { +public: + BinaryExpression( ResultBuilder& rb, LhsT lhs, RhsT rhs ) + : m_rb( rb ), m_lhs( lhs ), m_rhs( rhs ) {} + + BinaryExpression& operator = ( BinaryExpression& ); + + void endExpression() const { + m_rb + .setResultType( Internal::compare( m_lhs, m_rhs ) ) + .endExpression( *this ); + } + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string lhs = Catch::toString( m_lhs ); + std::string rhs = Catch::toString( m_rhs ); + char delim = lhs.size() + rhs.size() < 40 && + lhs.find('\n') == std::string::npos && + rhs.find('\n') == std::string::npos ? ' ' : '\n'; + dest.reserve( 7 + lhs.size() + rhs.size() ); + // 2 for spaces around operator + // 2 for operator + // 2 for parentheses (conditionally added later) + // 1 for negation (conditionally added later) + dest = lhs; + dest += delim; + dest += Internal::OperatorTraits::getName(); + dest += delim; + dest += rhs; + } + +private: + ResultBuilder& m_rb; + LhsT m_lhs; + RhsT m_rhs; +}; + +template +class MatchExpression : public DecomposedExpression { +public: + MatchExpression( ArgT arg, MatcherT matcher, char const* matcherString ) + : m_arg( arg ), m_matcher( matcher ), m_matcherString( matcherString ) {} + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string matcherAsString = m_matcher.toString(); + dest = Catch::toString( m_arg ); + dest += ' '; + if( matcherAsString == Detail::unprintableString ) + dest += m_matcherString; + else + dest += matcherAsString; + } + +private: + ArgT m_arg; + MatcherT m_matcher; + char const* m_matcherString; +}; + +} // end namespace Catch + + +namespace Catch { + + template + inline ExpressionLhs ResultBuilder::operator <= ( T const& operand ) { + return ExpressionLhs( *this, operand ); + } + + inline ExpressionLhs ResultBuilder::operator <= ( bool value ) { + return ExpressionLhs( *this, value ); + } + + template + inline void ResultBuilder::captureMatch( ArgT const& arg, MatcherT const& matcher, + char const* matcherString ) { + MatchExpression expr( arg, matcher, matcherString ); + setResultType( matcher.match( arg ) ); + endExpression( expr ); + } + +} // namespace Catch + +// #included from: catch_message.h +#define TWOBLUECUBES_CATCH_MESSAGE_H_INCLUDED + +#include + +namespace Catch { + + struct MessageInfo { + MessageInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + ResultWas::OfType _type ); + + std::string macroName; + SourceLineInfo lineInfo; + ResultWas::OfType type; + std::string message; + unsigned int sequence; + + bool operator == ( MessageInfo const& other ) const { + return sequence == other.sequence; + } + bool operator < ( MessageInfo const& other ) const { + return sequence < other.sequence; + } + private: + static unsigned int globalCount; + }; + + struct MessageBuilder { + MessageBuilder( std::string const& macroName, + SourceLineInfo const& lineInfo, + ResultWas::OfType type ) + : m_info( macroName, lineInfo, type ) + {} + + template + MessageBuilder& operator << ( T const& value ) { + m_stream << value; + return *this; + } + + MessageInfo m_info; + std::ostringstream m_stream; + }; + + class ScopedMessage { + public: + ScopedMessage( MessageBuilder const& builder ); + ScopedMessage( ScopedMessage const& other ); + ~ScopedMessage(); + + MessageInfo m_info; + }; + +} // end namespace Catch + +// #included from: catch_interfaces_capture.h +#define TWOBLUECUBES_CATCH_INTERFACES_CAPTURE_H_INCLUDED + +#include + +namespace Catch { + + class TestCase; + class AssertionResult; + struct AssertionInfo; + struct SectionInfo; + struct SectionEndInfo; + struct MessageInfo; + class ScopedMessageBuilder; + struct Counts; + + struct IResultCapture { + + virtual ~IResultCapture(); + + virtual void assertionEnded( AssertionResult const& result ) = 0; + virtual bool sectionStarted( SectionInfo const& sectionInfo, + Counts& assertions ) = 0; + virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0; + virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0; + virtual void pushScopedMessage( MessageInfo const& message ) = 0; + virtual void popScopedMessage( MessageInfo const& message ) = 0; + + virtual std::string getCurrentTestName() const = 0; + virtual const AssertionResult* getLastResult() const = 0; + + virtual void exceptionEarlyReported() = 0; + + virtual void handleFatalErrorCondition( std::string const& message ) = 0; + }; + + IResultCapture& getResultCapture(); +} + +// #included from: catch_debugger.h +#define TWOBLUECUBES_CATCH_DEBUGGER_H_INCLUDED + +// #included from: catch_platform.h +#define TWOBLUECUBES_CATCH_PLATFORM_H_INCLUDED + +#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +# define CATCH_PLATFORM_MAC +#elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +# define CATCH_PLATFORM_IPHONE +#elif defined(linux) || defined(__linux) || defined(__linux__) +# define CATCH_PLATFORM_LINUX +#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) +# define CATCH_PLATFORM_WINDOWS +# if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX) +# define CATCH_DEFINES_NOMINMAX +# endif +# if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN) +# define CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# endif +#endif + +#include + +namespace Catch{ + + bool isDebuggerActive(); + void writeToDebugConsole( std::string const& text ); +} + +#ifdef CATCH_PLATFORM_MAC + + // The following code snippet based on: + // http://cocoawithlove.com/2008/03/break-into-debugger.html + #if defined(__ppc64__) || defined(__ppc__) + #define CATCH_TRAP() \ + __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ + : : : "memory","r0","r3","r4" ) + #else + #define CATCH_TRAP() __asm__("int $3\n" : : ) + #endif + +#elif defined(CATCH_PLATFORM_LINUX) + // If we can use inline assembler, do it because this allows us to break + // directly at the location of the failing check instead of breaking inside + // raise() called from it, i.e. one stack frame below. + #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) + #define CATCH_TRAP() asm volatile ("int $3") + #else // Fall back to the generic way. + #include + + #define CATCH_TRAP() raise(SIGTRAP) + #endif +#elif defined(_MSC_VER) + #define CATCH_TRAP() __debugbreak() +#elif defined(__MINGW32__) + extern "C" __declspec(dllimport) void __stdcall DebugBreak(); + #define CATCH_TRAP() DebugBreak() +#endif + +#ifdef CATCH_TRAP + #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } +#else + #define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); +#endif + +// #included from: catch_interfaces_runner.h +#define TWOBLUECUBES_CATCH_INTERFACES_RUNNER_H_INCLUDED + +namespace Catch { + class TestCase; + + struct IRunner { + virtual ~IRunner(); + virtual bool aborting() const = 0; + }; +} + +#if defined(CATCH_CONFIG_FAST_COMPILE) +/////////////////////////////////////////////////////////////////////////////// +// We can speedup compilation significantly by breaking into debugger lower in +// the callstack, because then we don't have to expand CATCH_BREAK_INTO_DEBUGGER +// macro in each assertion +#define INTERNAL_CATCH_REACT( resultBuilder ) \ + resultBuilder.react(); + +/////////////////////////////////////////////////////////////////////////////// +// Another way to speed-up compilation is to omit local try-catch for REQUIRE* +// macros. +// This can potentially cause false negative, if the test code catches +// the exception before it propagates back up to the runner. +#define INTERNAL_CATCH_TEST_NO_TRY( macroName, resultDisposition, expr ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + __catchResult.setExceptionGuard(); \ + CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ + ( __catchResult <= expr ).endExpression(); \ + CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \ + __catchResult.unsetExceptionGuard(); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::isTrue( false && static_cast( !!(expr) ) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look +// The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&. + +#define INTERNAL_CHECK_THAT_NO_TRY( macroName, matcher, resultDisposition, arg ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \ + __catchResult.setExceptionGuard(); \ + __catchResult.captureMatch( arg, matcher, #matcher ); \ + __catchResult.unsetExceptionGuard(); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +#else +/////////////////////////////////////////////////////////////////////////////// +// In the event of a failure works out if the debugger needs to be invoked +// and/or an exception thrown and takes appropriate action. +// This needs to be done as a macro so the debugger will stop in the user +// source code rather than in Catch library code +#define INTERNAL_CATCH_REACT( resultBuilder ) \ + if( resultBuilder.shouldDebugBreak() ) CATCH_BREAK_INTO_DEBUGGER(); \ + resultBuilder.react(); +#endif + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + try { \ + CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ + ( __catchResult <= expr ).endExpression(); \ + CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( resultDisposition ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::isTrue( false && static_cast( !!(expr) ) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + // The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&. + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_IF( macroName, resultDisposition, expr ) \ + INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ); \ + if( Catch::getResultCapture().getLastResult()->succeeded() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, expr ) \ + INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ); \ + if( !Catch::getResultCapture().getLastResult()->succeeded() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, expr ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + try { \ + static_cast(expr); \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( resultDisposition ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_THROWS( macroName, resultDisposition, matcher, expr ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition, #matcher ); \ + if( __catchResult.allowThrows() ) \ + try { \ + static_cast(expr); \ + __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ + } \ + catch( ... ) { \ + __catchResult.captureExpectedException( matcher ); \ + } \ + else \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_THROWS_AS( macroName, exceptionType, resultDisposition, expr ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr ", " #exceptionType, resultDisposition ); \ + if( __catchResult.allowThrows() ) \ + try { \ + static_cast(expr); \ + __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ + } \ + catch( exceptionType ) { \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( resultDisposition ); \ + } \ + else \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, ... ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ + __catchResult << __VA_ARGS__ + ::Catch::StreamEndStop(); \ + __catchResult.captureResult( messageType ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) +#else + #define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, log ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ + __catchResult << log + ::Catch::StreamEndStop(); \ + __catchResult.captureResult( messageType ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) +#endif + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_INFO( macroName, log ) \ + Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage ) = Catch::MessageBuilder( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log; + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \ + try { \ + __catchResult.captureMatch( arg, matcher, #matcher ); \ + } catch( ... ) { \ + __catchResult.useActiveException( resultDisposition | Catch::ResultDisposition::ContinueOnFailure ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +// #included from: internal/catch_section.h +#define TWOBLUECUBES_CATCH_SECTION_H_INCLUDED + +// #included from: catch_section_info.h +#define TWOBLUECUBES_CATCH_SECTION_INFO_H_INCLUDED + +// #included from: catch_totals.hpp +#define TWOBLUECUBES_CATCH_TOTALS_HPP_INCLUDED + +#include + +namespace Catch { + + struct Counts { + Counts() : passed( 0 ), failed( 0 ), failedButOk( 0 ) {} + + Counts operator - ( Counts const& other ) const { + Counts diff; + diff.passed = passed - other.passed; + diff.failed = failed - other.failed; + diff.failedButOk = failedButOk - other.failedButOk; + return diff; + } + Counts& operator += ( Counts const& other ) { + passed += other.passed; + failed += other.failed; + failedButOk += other.failedButOk; + return *this; + } + + std::size_t total() const { + return passed + failed + failedButOk; + } + bool allPassed() const { + return failed == 0 && failedButOk == 0; + } + bool allOk() const { + return failed == 0; + } + + std::size_t passed; + std::size_t failed; + std::size_t failedButOk; + }; + + struct Totals { + + Totals operator - ( Totals const& other ) const { + Totals diff; + diff.assertions = assertions - other.assertions; + diff.testCases = testCases - other.testCases; + return diff; + } + + Totals delta( Totals const& prevTotals ) const { + Totals diff = *this - prevTotals; + if( diff.assertions.failed > 0 ) + ++diff.testCases.failed; + else if( diff.assertions.failedButOk > 0 ) + ++diff.testCases.failedButOk; + else + ++diff.testCases.passed; + return diff; + } + + Totals& operator += ( Totals const& other ) { + assertions += other.assertions; + testCases += other.testCases; + return *this; + } + + Counts assertions; + Counts testCases; + }; +} + +#include + +namespace Catch { + + struct SectionInfo { + SectionInfo + ( SourceLineInfo const& _lineInfo, + std::string const& _name, + std::string const& _description = std::string() ); + + std::string name; + std::string description; + SourceLineInfo lineInfo; + }; + + struct SectionEndInfo { + SectionEndInfo( SectionInfo const& _sectionInfo, Counts const& _prevAssertions, double _durationInSeconds ) + : sectionInfo( _sectionInfo ), prevAssertions( _prevAssertions ), durationInSeconds( _durationInSeconds ) + {} + + SectionInfo sectionInfo; + Counts prevAssertions; + double durationInSeconds; + }; + +} // end namespace Catch + +// #included from: catch_timer.h +#define TWOBLUECUBES_CATCH_TIMER_H_INCLUDED + +#ifdef _MSC_VER + +namespace Catch { + typedef unsigned long long UInt64; +} +#else +#include +namespace Catch { + typedef uint64_t UInt64; +} +#endif + +namespace Catch { + class Timer { + public: + Timer() : m_ticks( 0 ) {} + void start(); + unsigned int getElapsedMicroseconds() const; + unsigned int getElapsedMilliseconds() const; + double getElapsedSeconds() const; + + private: + UInt64 m_ticks; + }; + +} // namespace Catch + +#include + +namespace Catch { + + class Section : NonCopyable { + public: + Section( SectionInfo const& info ); + ~Section(); + + // This indicates whether the section should be executed or not + operator bool() const; + + private: + SectionInfo m_info; + + std::string m_name; + Counts m_assertions; + bool m_sectionIncluded; + Timer m_timer; + }; + +} // end namespace Catch + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define INTERNAL_CATCH_SECTION( ... ) \ + if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) ) +#else + #define INTERNAL_CATCH_SECTION( name, desc ) \ + if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, name, desc ) ) +#endif + +// #included from: internal/catch_generators.hpp +#define TWOBLUECUBES_CATCH_GENERATORS_HPP_INCLUDED + +#include +#include +#include + +namespace Catch { + +template +struct IGenerator { + virtual ~IGenerator() {} + virtual T getValue( std::size_t index ) const = 0; + virtual std::size_t size () const = 0; +}; + +template +class BetweenGenerator : public IGenerator { +public: + BetweenGenerator( T from, T to ) : m_from( from ), m_to( to ){} + + virtual T getValue( std::size_t index ) const { + return m_from+static_cast( index ); + } + + virtual std::size_t size() const { + return static_cast( 1+m_to-m_from ); + } + +private: + + T m_from; + T m_to; +}; + +template +class ValuesGenerator : public IGenerator { +public: + ValuesGenerator(){} + + void add( T value ) { + m_values.push_back( value ); + } + + virtual T getValue( std::size_t index ) const { + return m_values[index]; + } + + virtual std::size_t size() const { + return m_values.size(); + } + +private: + std::vector m_values; +}; + +template +class CompositeGenerator { +public: + CompositeGenerator() : m_totalSize( 0 ) {} + + // *** Move semantics, similar to auto_ptr *** + CompositeGenerator( CompositeGenerator& other ) + : m_fileInfo( other.m_fileInfo ), + m_totalSize( 0 ) + { + move( other ); + } + + CompositeGenerator& setFileInfo( const char* fileInfo ) { + m_fileInfo = fileInfo; + return *this; + } + + ~CompositeGenerator() { + deleteAll( m_composed ); + } + + operator T () const { + size_t overallIndex = getCurrentContext().getGeneratorIndex( m_fileInfo, m_totalSize ); + + typename std::vector*>::const_iterator it = m_composed.begin(); + typename std::vector*>::const_iterator itEnd = m_composed.end(); + for( size_t index = 0; it != itEnd; ++it ) + { + const IGenerator* generator = *it; + if( overallIndex >= index && overallIndex < index + generator->size() ) + { + return generator->getValue( overallIndex-index ); + } + index += generator->size(); + } + CATCH_INTERNAL_ERROR( "Indexed past end of generated range" ); + return T(); // Suppress spurious "not all control paths return a value" warning in Visual Studio - if you know how to fix this please do so + } + + void add( const IGenerator* generator ) { + m_totalSize += generator->size(); + m_composed.push_back( generator ); + } + + CompositeGenerator& then( CompositeGenerator& other ) { + move( other ); + return *this; + } + + CompositeGenerator& then( T value ) { + ValuesGenerator* valuesGen = new ValuesGenerator(); + valuesGen->add( value ); + add( valuesGen ); + return *this; + } + +private: + + void move( CompositeGenerator& other ) { + m_composed.insert( m_composed.end(), other.m_composed.begin(), other.m_composed.end() ); + m_totalSize += other.m_totalSize; + other.m_composed.clear(); + } + + std::vector*> m_composed; + std::string m_fileInfo; + size_t m_totalSize; +}; + +namespace Generators +{ + template + CompositeGenerator between( T from, T to ) { + CompositeGenerator generators; + generators.add( new BetweenGenerator( from, to ) ); + return generators; + } + + template + CompositeGenerator values( T val1, T val2 ) { + CompositeGenerator generators; + ValuesGenerator* valuesGen = new ValuesGenerator(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + generators.add( valuesGen ); + return generators; + } + + template + CompositeGenerator values( T val1, T val2, T val3 ){ + CompositeGenerator generators; + ValuesGenerator* valuesGen = new ValuesGenerator(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + valuesGen->add( val3 ); + generators.add( valuesGen ); + return generators; + } + + template + CompositeGenerator values( T val1, T val2, T val3, T val4 ) { + CompositeGenerator generators; + ValuesGenerator* valuesGen = new ValuesGenerator(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + valuesGen->add( val3 ); + valuesGen->add( val4 ); + generators.add( valuesGen ); + return generators; + } + +} // end namespace Generators + +using namespace Generators; + +} // end namespace Catch + +#define INTERNAL_CATCH_LINESTR2( line ) #line +#define INTERNAL_CATCH_LINESTR( line ) INTERNAL_CATCH_LINESTR2( line ) + +#define INTERNAL_CATCH_GENERATE( expr ) expr.setFileInfo( __FILE__ "(" INTERNAL_CATCH_LINESTR( __LINE__ ) ")" ) + +// #included from: internal/catch_interfaces_exception.h +#define TWOBLUECUBES_CATCH_INTERFACES_EXCEPTION_H_INCLUDED + +#include +#include + +// #included from: catch_interfaces_registry_hub.h +#define TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED + +#include + +namespace Catch { + + class TestCase; + struct ITestCaseRegistry; + struct IExceptionTranslatorRegistry; + struct IExceptionTranslator; + struct IReporterRegistry; + struct IReporterFactory; + struct ITagAliasRegistry; + + struct IRegistryHub { + virtual ~IRegistryHub(); + + virtual IReporterRegistry const& getReporterRegistry() const = 0; + virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0; + virtual ITagAliasRegistry const& getTagAliasRegistry() const = 0; + + virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() = 0; + }; + + struct IMutableRegistryHub { + virtual ~IMutableRegistryHub(); + virtual void registerReporter( std::string const& name, Ptr const& factory ) = 0; + virtual void registerListener( Ptr const& factory ) = 0; + virtual void registerTest( TestCase const& testInfo ) = 0; + virtual void registerTranslator( const IExceptionTranslator* translator ) = 0; + virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) = 0; + }; + + IRegistryHub& getRegistryHub(); + IMutableRegistryHub& getMutableRegistryHub(); + void cleanUp(); + std::string translateActiveException(); + +} + +namespace Catch { + + typedef std::string(*exceptionTranslateFunction)(); + + struct IExceptionTranslator; + typedef std::vector ExceptionTranslators; + + struct IExceptionTranslator { + virtual ~IExceptionTranslator(); + virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0; + }; + + struct IExceptionTranslatorRegistry { + virtual ~IExceptionTranslatorRegistry(); + + virtual std::string translateActiveException() const = 0; + }; + + class ExceptionTranslatorRegistrar { + template + class ExceptionTranslator : public IExceptionTranslator { + public: + + ExceptionTranslator( std::string(*translateFunction)( T& ) ) + : m_translateFunction( translateFunction ) + {} + + virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const CATCH_OVERRIDE { + try { + if( it == itEnd ) + throw; + else + return (*it)->translate( it+1, itEnd ); + } + catch( T& ex ) { + return m_translateFunction( ex ); + } + } + + protected: + std::string(*m_translateFunction)( T& ); + }; + + public: + template + ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) { + getMutableRegistryHub().registerTranslator + ( new ExceptionTranslator( translateFunction ) ); + } + }; +} + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \ + static std::string translatorName( signature ); \ + namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); }\ + static std::string translatorName( signature ) + +#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) + +// #included from: internal/catch_approx.hpp +#define TWOBLUECUBES_CATCH_APPROX_HPP_INCLUDED + +#include +#include + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) +#include +#endif + +namespace Catch { +namespace Detail { + + class Approx { + public: + explicit Approx ( double value ) + : m_epsilon( std::numeric_limits::epsilon()*100 ), + m_margin( 0.0 ), + m_scale( 1.0 ), + m_value( value ) + {} + + Approx( Approx const& other ) + : m_epsilon( other.m_epsilon ), + m_margin( other.m_margin ), + m_scale( other.m_scale ), + m_value( other.m_value ) + {} + + static Approx custom() { + return Approx( 0 ); + } + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) + + template ::value>::type> + Approx operator()( T value ) { + Approx approx( static_cast(value) ); + approx.epsilon( m_epsilon ); + approx.margin( m_margin ); + approx.scale( m_scale ); + return approx; + } + + template ::value>::type> + explicit Approx( T value ): Approx(static_cast(value)) + {} + + template ::value>::type> + friend bool operator == ( const T& lhs, Approx const& rhs ) { + // Thanks to Richard Harris for his help refining this formula + auto lhs_v = double(lhs); + bool relativeOK = std::fabs(lhs_v - rhs.m_value) < rhs.m_epsilon * (rhs.m_scale + (std::max)(std::fabs(lhs_v), std::fabs(rhs.m_value))); + if (relativeOK) { + return true; + } + return std::fabs(lhs_v - rhs.m_value) < rhs.m_margin; + } + + template ::value>::type> + friend bool operator == ( Approx const& lhs, const T& rhs ) { + return operator==( rhs, lhs ); + } + + template ::value>::type> + friend bool operator != ( T lhs, Approx const& rhs ) { + return !operator==( lhs, rhs ); + } + + template ::value>::type> + friend bool operator != ( Approx const& lhs, T rhs ) { + return !operator==( rhs, lhs ); + } + + template ::value>::type> + friend bool operator <= ( T lhs, Approx const& rhs ) { + return double(lhs) < rhs.m_value || lhs == rhs; + } + + template ::value>::type> + friend bool operator <= ( Approx const& lhs, T rhs ) { + return lhs.m_value < double(rhs) || lhs == rhs; + } + + template ::value>::type> + friend bool operator >= ( T lhs, Approx const& rhs ) { + return double(lhs) > rhs.m_value || lhs == rhs; + } + + template ::value>::type> + friend bool operator >= ( Approx const& lhs, T rhs ) { + return lhs.m_value > double(rhs) || lhs == rhs; + } + + template ::value>::type> + Approx& epsilon( T newEpsilon ) { + m_epsilon = double(newEpsilon); + return *this; + } + + template ::value>::type> + Approx& margin( T newMargin ) { + m_margin = double(newMargin); + return *this; + } + + template ::value>::type> + Approx& scale( T newScale ) { + m_scale = double(newScale); + return *this; + } + +#else + + Approx operator()( double value ) { + Approx approx( value ); + approx.epsilon( m_epsilon ); + approx.margin( m_margin ); + approx.scale( m_scale ); + return approx; + } + + friend bool operator == ( double lhs, Approx const& rhs ) { + // Thanks to Richard Harris for his help refining this formula + bool relativeOK = std::fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( std::fabs(lhs), std::fabs(rhs.m_value) ) ); + if (relativeOK) { + return true; + } + return std::fabs(lhs - rhs.m_value) < rhs.m_margin; + } + + friend bool operator == ( Approx const& lhs, double rhs ) { + return operator==( rhs, lhs ); + } + + friend bool operator != ( double lhs, Approx const& rhs ) { + return !operator==( lhs, rhs ); + } + + friend bool operator != ( Approx const& lhs, double rhs ) { + return !operator==( rhs, lhs ); + } + + friend bool operator <= ( double lhs, Approx const& rhs ) { + return lhs < rhs.m_value || lhs == rhs; + } + + friend bool operator <= ( Approx const& lhs, double rhs ) { + return lhs.m_value < rhs || lhs == rhs; + } + + friend bool operator >= ( double lhs, Approx const& rhs ) { + return lhs > rhs.m_value || lhs == rhs; + } + + friend bool operator >= ( Approx const& lhs, double rhs ) { + return lhs.m_value > rhs || lhs == rhs; + } + + Approx& epsilon( double newEpsilon ) { + m_epsilon = newEpsilon; + return *this; + } + + Approx& margin( double newMargin ) { + m_margin = newMargin; + return *this; + } + + Approx& scale( double newScale ) { + m_scale = newScale; + return *this; + } +#endif + + std::string toString() const { + std::ostringstream oss; + oss << "Approx( " << Catch::toString( m_value ) << " )"; + return oss.str(); + } + + private: + double m_epsilon; + double m_margin; + double m_scale; + double m_value; + }; +} + +template<> +inline std::string toString( Detail::Approx const& value ) { + return value.toString(); +} + +} // end namespace Catch + +// #included from: internal/catch_matchers_string.h +#define TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED + +namespace Catch { +namespace Matchers { + + namespace StdString { + + struct CasedString + { + CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity ); + std::string adjustString( std::string const& str ) const; + std::string caseSensitivitySuffix() const; + + CaseSensitive::Choice m_caseSensitivity; + std::string m_str; + }; + + struct StringMatcherBase : MatcherBase { + StringMatcherBase( std::string const& operation, CasedString const& comparator ); + virtual std::string describe() const CATCH_OVERRIDE; + + CasedString m_comparator; + std::string m_operation; + }; + + struct EqualsMatcher : StringMatcherBase { + EqualsMatcher( CasedString const& comparator ); + virtual bool match( std::string const& source ) const CATCH_OVERRIDE; + }; + struct ContainsMatcher : StringMatcherBase { + ContainsMatcher( CasedString const& comparator ); + virtual bool match( std::string const& source ) const CATCH_OVERRIDE; + }; + struct StartsWithMatcher : StringMatcherBase { + StartsWithMatcher( CasedString const& comparator ); + virtual bool match( std::string const& source ) const CATCH_OVERRIDE; + }; + struct EndsWithMatcher : StringMatcherBase { + EndsWithMatcher( CasedString const& comparator ); + virtual bool match( std::string const& source ) const CATCH_OVERRIDE; + }; + + } // namespace StdString + + // The following functions create the actual matcher objects. + // This allows the types to be inferred + + StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); + StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); + StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); + StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); + +} // namespace Matchers +} // namespace Catch + +// #included from: internal/catch_matchers_vector.h +#define TWOBLUECUBES_CATCH_MATCHERS_VECTOR_H_INCLUDED + +namespace Catch { +namespace Matchers { + + namespace Vector { + + template + struct ContainsElementMatcher : MatcherBase, T> { + + ContainsElementMatcher(T const &comparator) : m_comparator( comparator) {} + + bool match(std::vector const &v) const CATCH_OVERRIDE { + return std::find(v.begin(), v.end(), m_comparator) != v.end(); + } + + virtual std::string describe() const CATCH_OVERRIDE { + return "Contains: " + Catch::toString( m_comparator ); + } + + T const& m_comparator; + }; + + template + struct ContainsMatcher : MatcherBase, std::vector > { + + ContainsMatcher(std::vector const &comparator) : m_comparator( comparator ) {} + + bool match(std::vector const &v) const CATCH_OVERRIDE { + // !TBD: see note in EqualsMatcher + if (m_comparator.size() > v.size()) + return false; + for (size_t i = 0; i < m_comparator.size(); ++i) + if (std::find(v.begin(), v.end(), m_comparator[i]) == v.end()) + return false; + return true; + } + virtual std::string describe() const CATCH_OVERRIDE { + return "Contains: " + Catch::toString( m_comparator ); + } + + std::vector const& m_comparator; + }; + + template + struct EqualsMatcher : MatcherBase, std::vector > { + + EqualsMatcher(std::vector const &comparator) : m_comparator( comparator ) {} + + bool match(std::vector const &v) const CATCH_OVERRIDE { + // !TBD: This currently works if all elements can be compared using != + // - a more general approach would be via a compare template that defaults + // to using !=. but could be specialised for, e.g. std::vector etc + // - then just call that directly + if (m_comparator.size() != v.size()) + return false; + for (size_t i = 0; i < v.size(); ++i) + if (m_comparator[i] != v[i]) + return false; + return true; + } + virtual std::string describe() const CATCH_OVERRIDE { + return "Equals: " + Catch::toString( m_comparator ); + } + std::vector const& m_comparator; + }; + + } // namespace Vector + + // The following functions create the actual matcher objects. + // This allows the types to be inferred + + template + Vector::ContainsMatcher Contains( std::vector const& comparator ) { + return Vector::ContainsMatcher( comparator ); + } + + template + Vector::ContainsElementMatcher VectorContains( T const& comparator ) { + return Vector::ContainsElementMatcher( comparator ); + } + + template + Vector::EqualsMatcher Equals( std::vector const& comparator ) { + return Vector::EqualsMatcher( comparator ); + } + +} // namespace Matchers +} // namespace Catch + +// #included from: internal/catch_interfaces_tag_alias_registry.h +#define TWOBLUECUBES_CATCH_INTERFACES_TAG_ALIAS_REGISTRY_H_INCLUDED + +// #included from: catch_tag_alias.h +#define TWOBLUECUBES_CATCH_TAG_ALIAS_H_INCLUDED + +#include + +namespace Catch { + + struct TagAlias { + TagAlias( std::string const& _tag, SourceLineInfo _lineInfo ) : tag( _tag ), lineInfo( _lineInfo ) {} + + std::string tag; + SourceLineInfo lineInfo; + }; + + struct RegistrarForTagAliases { + RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); + }; + +} // end namespace Catch + +#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } +// #included from: catch_option.hpp +#define TWOBLUECUBES_CATCH_OPTION_HPP_INCLUDED + +namespace Catch { + + // An optional type + template + class Option { + public: + Option() : nullableValue( CATCH_NULL ) {} + Option( T const& _value ) + : nullableValue( new( storage ) T( _value ) ) + {} + Option( Option const& _other ) + : nullableValue( _other ? new( storage ) T( *_other ) : CATCH_NULL ) + {} + + ~Option() { + reset(); + } + + Option& operator= ( Option const& _other ) { + if( &_other != this ) { + reset(); + if( _other ) + nullableValue = new( storage ) T( *_other ); + } + return *this; + } + Option& operator = ( T const& _value ) { + reset(); + nullableValue = new( storage ) T( _value ); + return *this; + } + + void reset() { + if( nullableValue ) + nullableValue->~T(); + nullableValue = CATCH_NULL; + } + + T& operator*() { return *nullableValue; } + T const& operator*() const { return *nullableValue; } + T* operator->() { return nullableValue; } + const T* operator->() const { return nullableValue; } + + T valueOr( T const& defaultValue ) const { + return nullableValue ? *nullableValue : defaultValue; + } + + bool some() const { return nullableValue != CATCH_NULL; } + bool none() const { return nullableValue == CATCH_NULL; } + + bool operator !() const { return nullableValue == CATCH_NULL; } + operator SafeBool::type() const { + return SafeBool::makeSafe( some() ); + } + + private: + T *nullableValue; + union { + char storage[sizeof(T)]; + + // These are here to force alignment for the storage + long double dummy1; + void (*dummy2)(); + long double dummy3; +#ifdef CATCH_CONFIG_CPP11_LONG_LONG + long long dummy4; +#endif + }; + }; + +} // end namespace Catch + +namespace Catch { + + struct ITagAliasRegistry { + virtual ~ITagAliasRegistry(); + virtual Option find( std::string const& alias ) const = 0; + virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0; + + static ITagAliasRegistry const& get(); + }; + +} // end namespace Catch + +// These files are included here so the single_include script doesn't put them +// in the conditionally compiled sections +// #included from: internal/catch_test_case_info.h +#define TWOBLUECUBES_CATCH_TEST_CASE_INFO_H_INCLUDED + +#include +#include + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +namespace Catch { + + struct ITestCase; + + struct TestCaseInfo { + enum SpecialProperties{ + None = 0, + IsHidden = 1 << 1, + ShouldFail = 1 << 2, + MayFail = 1 << 3, + Throws = 1 << 4, + NonPortable = 1 << 5 + }; + + TestCaseInfo( std::string const& _name, + std::string const& _className, + std::string const& _description, + std::set const& _tags, + SourceLineInfo const& _lineInfo ); + + TestCaseInfo( TestCaseInfo const& other ); + + friend void setTags( TestCaseInfo& testCaseInfo, std::set const& tags ); + + bool isHidden() const; + bool throws() const; + bool okToFail() const; + bool expectedToFail() const; + + std::string name; + std::string className; + std::string description; + std::set tags; + std::set lcaseTags; + std::string tagsAsString; + SourceLineInfo lineInfo; + SpecialProperties properties; + }; + + class TestCase : public TestCaseInfo { + public: + + TestCase( ITestCase* testCase, TestCaseInfo const& info ); + TestCase( TestCase const& other ); + + TestCase withName( std::string const& _newName ) const; + + void invoke() const; + + TestCaseInfo const& getTestCaseInfo() const; + + void swap( TestCase& other ); + bool operator == ( TestCase const& other ) const; + bool operator < ( TestCase const& other ) const; + TestCase& operator = ( TestCase const& other ); + + private: + Ptr test; + }; + + TestCase makeTestCase( ITestCase* testCase, + std::string const& className, + std::string const& name, + std::string const& description, + SourceLineInfo const& lineInfo ); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + + +#ifdef __OBJC__ +// #included from: internal/catch_objc.hpp +#define TWOBLUECUBES_CATCH_OBJC_HPP_INCLUDED + +#import + +#include + +// NB. Any general catch headers included here must be included +// in catch.hpp first to make sure they are included by the single +// header for non obj-usage + +/////////////////////////////////////////////////////////////////////////////// +// This protocol is really only here for (self) documenting purposes, since +// all its methods are optional. +@protocol OcFixture + +@optional + +-(void) setUp; +-(void) tearDown; + +@end + +namespace Catch { + + class OcMethod : public SharedImpl { + + public: + OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {} + + virtual void invoke() const { + id obj = [[m_cls alloc] init]; + + performOptionalSelector( obj, @selector(setUp) ); + performOptionalSelector( obj, m_sel ); + performOptionalSelector( obj, @selector(tearDown) ); + + arcSafeRelease( obj ); + } + private: + virtual ~OcMethod() {} + + Class m_cls; + SEL m_sel; + }; + + namespace Detail{ + + inline std::string getAnnotation( Class cls, + std::string const& annotationName, + std::string const& testCaseName ) { + NSString* selStr = [[NSString alloc] initWithFormat:@"Catch_%s_%s", annotationName.c_str(), testCaseName.c_str()]; + SEL sel = NSSelectorFromString( selStr ); + arcSafeRelease( selStr ); + id value = performOptionalSelector( cls, sel ); + if( value ) + return [(NSString*)value UTF8String]; + return ""; + } + } + + inline size_t registerTestMethods() { + size_t noTestMethods = 0; + int noClasses = objc_getClassList( CATCH_NULL, 0 ); + + Class* classes = (CATCH_UNSAFE_UNRETAINED Class *)malloc( sizeof(Class) * noClasses); + objc_getClassList( classes, noClasses ); + + for( int c = 0; c < noClasses; c++ ) { + Class cls = classes[c]; + { + u_int count; + Method* methods = class_copyMethodList( cls, &count ); + for( u_int m = 0; m < count ; m++ ) { + SEL selector = method_getName(methods[m]); + std::string methodName = sel_getName(selector); + if( startsWith( methodName, "Catch_TestCase_" ) ) { + std::string testCaseName = methodName.substr( 15 ); + std::string name = Detail::getAnnotation( cls, "Name", testCaseName ); + std::string desc = Detail::getAnnotation( cls, "Description", testCaseName ); + const char* className = class_getName( cls ); + + getMutableRegistryHub().registerTest( makeTestCase( new OcMethod( cls, selector ), className, name.c_str(), desc.c_str(), SourceLineInfo() ) ); + noTestMethods++; + } + } + free(methods); + } + } + return noTestMethods; + } + + namespace Matchers { + namespace Impl { + namespace NSStringMatchers { + + struct StringHolder : MatcherBase{ + StringHolder( NSString* substr ) : m_substr( [substr copy] ){} + StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){} + StringHolder() { + arcSafeRelease( m_substr ); + } + + virtual bool match( NSString* arg ) const CATCH_OVERRIDE { + return false; + } + + NSString* m_substr; + }; + + struct Equals : StringHolder { + Equals( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( NSString* str ) const CATCH_OVERRIDE { + return (str != nil || m_substr == nil ) && + [str isEqualToString:m_substr]; + } + + virtual std::string describe() const CATCH_OVERRIDE { + return "equals string: " + Catch::toString( m_substr ); + } + }; + + struct Contains : StringHolder { + Contains( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( NSString* str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location != NSNotFound; + } + + virtual std::string describe() const CATCH_OVERRIDE { + return "contains string: " + Catch::toString( m_substr ); + } + }; + + struct StartsWith : StringHolder { + StartsWith( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( NSString* str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location == 0; + } + + virtual std::string describe() const CATCH_OVERRIDE { + return "starts with: " + Catch::toString( m_substr ); + } + }; + struct EndsWith : StringHolder { + EndsWith( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( NSString* str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location == [str length] - [m_substr length]; + } + + virtual std::string describe() const CATCH_OVERRIDE { + return "ends with: " + Catch::toString( m_substr ); + } + }; + + } // namespace NSStringMatchers + } // namespace Impl + + inline Impl::NSStringMatchers::Equals + Equals( NSString* substr ){ return Impl::NSStringMatchers::Equals( substr ); } + + inline Impl::NSStringMatchers::Contains + Contains( NSString* substr ){ return Impl::NSStringMatchers::Contains( substr ); } + + inline Impl::NSStringMatchers::StartsWith + StartsWith( NSString* substr ){ return Impl::NSStringMatchers::StartsWith( substr ); } + + inline Impl::NSStringMatchers::EndsWith + EndsWith( NSString* substr ){ return Impl::NSStringMatchers::EndsWith( substr ); } + + } // namespace Matchers + + using namespace Matchers; + +} // namespace Catch + +/////////////////////////////////////////////////////////////////////////////// +#define OC_TEST_CASE( name, desc )\ ++(NSString*) INTERNAL_CATCH_UNIQUE_NAME( Catch_Name_test ) \ +{\ +return @ name; \ +}\ ++(NSString*) INTERNAL_CATCH_UNIQUE_NAME( Catch_Description_test ) \ +{ \ +return @ desc; \ +} \ +-(void) INTERNAL_CATCH_UNIQUE_NAME( Catch_TestCase_test ) + +#endif + +#ifdef CATCH_IMPL + +// !TBD: Move the leak detector code into a separate header +#ifdef CATCH_CONFIG_WINDOWS_CRTDBG +#include +class LeakDetector { +public: + LeakDetector() { + int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); + flag |= _CRTDBG_LEAK_CHECK_DF; + flag |= _CRTDBG_ALLOC_MEM_DF; + _CrtSetDbgFlag(flag); + _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); + _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); + // Change this to leaking allocation's number to break there + _CrtSetBreakAlloc(-1); + } +}; +#else +class LeakDetector {}; +#endif + +LeakDetector leakDetector; + +// #included from: internal/catch_impl.hpp +#define TWOBLUECUBES_CATCH_IMPL_HPP_INCLUDED + +// Collect all the implementation files together here +// These are the equivalent of what would usually be cpp files + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +// #included from: ../catch_session.hpp +#define TWOBLUECUBES_CATCH_RUNNER_HPP_INCLUDED + +// #included from: internal/catch_commandline.hpp +#define TWOBLUECUBES_CATCH_COMMANDLINE_HPP_INCLUDED + +// #included from: catch_config.hpp +#define TWOBLUECUBES_CATCH_CONFIG_HPP_INCLUDED + +// #included from: catch_test_spec_parser.hpp +#define TWOBLUECUBES_CATCH_TEST_SPEC_PARSER_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +// #included from: catch_test_spec.hpp +#define TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +// #included from: catch_wildcard_pattern.hpp +#define TWOBLUECUBES_CATCH_WILDCARD_PATTERN_HPP_INCLUDED + +#include + +namespace Catch +{ + class WildcardPattern { + enum WildcardPosition { + NoWildcard = 0, + WildcardAtStart = 1, + WildcardAtEnd = 2, + WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd + }; + + public: + + WildcardPattern( std::string const& pattern, CaseSensitive::Choice caseSensitivity ) + : m_caseSensitivity( caseSensitivity ), + m_wildcard( NoWildcard ), + m_pattern( adjustCase( pattern ) ) + { + if( startsWith( m_pattern, '*' ) ) { + m_pattern = m_pattern.substr( 1 ); + m_wildcard = WildcardAtStart; + } + if( endsWith( m_pattern, '*' ) ) { + m_pattern = m_pattern.substr( 0, m_pattern.size()-1 ); + m_wildcard = static_cast( m_wildcard | WildcardAtEnd ); + } + } + virtual ~WildcardPattern(); + virtual bool matches( std::string const& str ) const { + switch( m_wildcard ) { + case NoWildcard: + return m_pattern == adjustCase( str ); + case WildcardAtStart: + return endsWith( adjustCase( str ), m_pattern ); + case WildcardAtEnd: + return startsWith( adjustCase( str ), m_pattern ); + case WildcardAtBothEnds: + return contains( adjustCase( str ), m_pattern ); + } + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" +#endif + throw std::logic_error( "Unknown enum" ); +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + } + private: + std::string adjustCase( std::string const& str ) const { + return m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str; + } + CaseSensitive::Choice m_caseSensitivity; + WildcardPosition m_wildcard; + std::string m_pattern; + }; +} + +#include +#include + +namespace Catch { + + class TestSpec { + struct Pattern : SharedImpl<> { + virtual ~Pattern(); + virtual bool matches( TestCaseInfo const& testCase ) const = 0; + }; + class NamePattern : public Pattern { + public: + NamePattern( std::string const& name ) + : m_wildcardPattern( toLower( name ), CaseSensitive::No ) + {} + virtual ~NamePattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { + return m_wildcardPattern.matches( toLower( testCase.name ) ); + } + private: + WildcardPattern m_wildcardPattern; + }; + + class TagPattern : public Pattern { + public: + TagPattern( std::string const& tag ) : m_tag( toLower( tag ) ) {} + virtual ~TagPattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { + return testCase.lcaseTags.find( m_tag ) != testCase.lcaseTags.end(); + } + private: + std::string m_tag; + }; + + class ExcludedPattern : public Pattern { + public: + ExcludedPattern( Ptr const& underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} + virtual ~ExcludedPattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { return !m_underlyingPattern->matches( testCase ); } + private: + Ptr m_underlyingPattern; + }; + + struct Filter { + std::vector > m_patterns; + + bool matches( TestCaseInfo const& testCase ) const { + // All patterns in a filter must match for the filter to be a match + for( std::vector >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) { + if( !(*it)->matches( testCase ) ) + return false; + } + return true; + } + }; + + public: + bool hasFilters() const { + return !m_filters.empty(); + } + bool matches( TestCaseInfo const& testCase ) const { + // A TestSpec matches if any filter matches + for( std::vector::const_iterator it = m_filters.begin(), itEnd = m_filters.end(); it != itEnd; ++it ) + if( it->matches( testCase ) ) + return true; + return false; + } + + private: + std::vector m_filters; + + friend class TestSpecParser; + }; +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +namespace Catch { + + class TestSpecParser { + enum Mode{ None, Name, QuotedName, Tag, EscapedName }; + Mode m_mode; + bool m_exclusion; + std::size_t m_start, m_pos; + std::string m_arg; + std::vector m_escapeChars; + TestSpec::Filter m_currentFilter; + TestSpec m_testSpec; + ITagAliasRegistry const* m_tagAliases; + + public: + TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {} + + TestSpecParser& parse( std::string const& arg ) { + m_mode = None; + m_exclusion = false; + m_start = std::string::npos; + m_arg = m_tagAliases->expandAliases( arg ); + m_escapeChars.clear(); + for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) + visitChar( m_arg[m_pos] ); + if( m_mode == Name ) + addPattern(); + return *this; + } + TestSpec testSpec() { + addFilter(); + return m_testSpec; + } + private: + void visitChar( char c ) { + if( m_mode == None ) { + switch( c ) { + case ' ': return; + case '~': m_exclusion = true; return; + case '[': return startNewMode( Tag, ++m_pos ); + case '"': return startNewMode( QuotedName, ++m_pos ); + case '\\': return escape(); + default: startNewMode( Name, m_pos ); break; + } + } + if( m_mode == Name ) { + if( c == ',' ) { + addPattern(); + addFilter(); + } + else if( c == '[' ) { + if( subString() == "exclude:" ) + m_exclusion = true; + else + addPattern(); + startNewMode( Tag, ++m_pos ); + } + else if( c == '\\' ) + escape(); + } + else if( m_mode == EscapedName ) + m_mode = Name; + else if( m_mode == QuotedName && c == '"' ) + addPattern(); + else if( m_mode == Tag && c == ']' ) + addPattern(); + } + void startNewMode( Mode mode, std::size_t start ) { + m_mode = mode; + m_start = start; + } + void escape() { + if( m_mode == None ) + m_start = m_pos; + m_mode = EscapedName; + m_escapeChars.push_back( m_pos ); + } + std::string subString() const { return m_arg.substr( m_start, m_pos - m_start ); } + template + void addPattern() { + std::string token = subString(); + for( size_t i = 0; i < m_escapeChars.size(); ++i ) + token = token.substr( 0, m_escapeChars[i]-m_start-i ) + token.substr( m_escapeChars[i]-m_start-i+1 ); + m_escapeChars.clear(); + if( startsWith( token, "exclude:" ) ) { + m_exclusion = true; + token = token.substr( 8 ); + } + if( !token.empty() ) { + Ptr pattern = new T( token ); + if( m_exclusion ) + pattern = new TestSpec::ExcludedPattern( pattern ); + m_currentFilter.m_patterns.push_back( pattern ); + } + m_exclusion = false; + m_mode = None; + } + void addFilter() { + if( !m_currentFilter.m_patterns.empty() ) { + m_testSpec.m_filters.push_back( m_currentFilter ); + m_currentFilter = TestSpec::Filter(); + } + } + }; + inline TestSpec parseTestSpec( std::string const& arg ) { + return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec(); + } + +} // namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +// #included from: catch_interfaces_config.h +#define TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED + +#include +#include +#include + +namespace Catch { + + struct Verbosity { enum Level { + NoOutput = 0, + Quiet, + Normal + }; }; + + struct WarnAbout { enum What { + Nothing = 0x00, + NoAssertions = 0x01 + }; }; + + struct ShowDurations { enum OrNot { + DefaultForReporter, + Always, + Never + }; }; + struct RunTests { enum InWhatOrder { + InDeclarationOrder, + InLexicographicalOrder, + InRandomOrder + }; }; + struct UseColour { enum YesOrNo { + Auto, + Yes, + No + }; }; + + class TestSpec; + + struct IConfig : IShared { + + virtual ~IConfig(); + + virtual bool allowThrows() const = 0; + virtual std::ostream& stream() const = 0; + virtual std::string name() const = 0; + virtual bool includeSuccessfulResults() const = 0; + virtual bool shouldDebugBreak() const = 0; + virtual bool warnAboutMissingAssertions() const = 0; + virtual int abortAfter() const = 0; + virtual bool showInvisibles() const = 0; + virtual ShowDurations::OrNot showDurations() const = 0; + virtual TestSpec const& testSpec() const = 0; + virtual RunTests::InWhatOrder runOrder() const = 0; + virtual unsigned int rngSeed() const = 0; + virtual UseColour::YesOrNo useColour() const = 0; + virtual std::vector const& getSectionsToRun() const = 0; + + }; +} + +// #included from: catch_stream.h +#define TWOBLUECUBES_CATCH_STREAM_H_INCLUDED + +// #included from: catch_streambuf.h +#define TWOBLUECUBES_CATCH_STREAMBUF_H_INCLUDED + +#include + +namespace Catch { + + class StreamBufBase : public std::streambuf { + public: + virtual ~StreamBufBase() CATCH_NOEXCEPT; + }; +} + +#include +#include +#include +#include + +namespace Catch { + + std::ostream& cout(); + std::ostream& cerr(); + + struct IStream { + virtual ~IStream() CATCH_NOEXCEPT; + virtual std::ostream& stream() const = 0; + }; + + class FileStream : public IStream { + mutable std::ofstream m_ofs; + public: + FileStream( std::string const& filename ); + virtual ~FileStream() CATCH_NOEXCEPT; + public: // IStream + virtual std::ostream& stream() const CATCH_OVERRIDE; + }; + + class CoutStream : public IStream { + mutable std::ostream m_os; + public: + CoutStream(); + virtual ~CoutStream() CATCH_NOEXCEPT; + + public: // IStream + virtual std::ostream& stream() const CATCH_OVERRIDE; + }; + + class DebugOutStream : public IStream { + CATCH_AUTO_PTR( StreamBufBase ) m_streamBuf; + mutable std::ostream m_os; + public: + DebugOutStream(); + virtual ~DebugOutStream() CATCH_NOEXCEPT; + + public: // IStream + virtual std::ostream& stream() const CATCH_OVERRIDE; + }; +} + +#include +#include +#include +#include + +#ifndef CATCH_CONFIG_CONSOLE_WIDTH +#define CATCH_CONFIG_CONSOLE_WIDTH 80 +#endif + +namespace Catch { + + struct ConfigData { + + ConfigData() + : listTests( false ), + listTags( false ), + listReporters( false ), + listTestNamesOnly( false ), + listExtraInfo( false ), + showSuccessfulTests( false ), + shouldDebugBreak( false ), + noThrow( false ), + showHelp( false ), + showInvisibles( false ), + filenamesAsTags( false ), + abortAfter( -1 ), + rngSeed( 0 ), + verbosity( Verbosity::Normal ), + warnings( WarnAbout::Nothing ), + showDurations( ShowDurations::DefaultForReporter ), + runOrder( RunTests::InDeclarationOrder ), + useColour( UseColour::Auto ) + {} + + bool listTests; + bool listTags; + bool listReporters; + bool listTestNamesOnly; + bool listExtraInfo; + + bool showSuccessfulTests; + bool shouldDebugBreak; + bool noThrow; + bool showHelp; + bool showInvisibles; + bool filenamesAsTags; + + int abortAfter; + unsigned int rngSeed; + + Verbosity::Level verbosity; + WarnAbout::What warnings; + ShowDurations::OrNot showDurations; + RunTests::InWhatOrder runOrder; + UseColour::YesOrNo useColour; + + std::string outputFilename; + std::string name; + std::string processName; + + std::vector reporterNames; + std::vector testsOrTags; + std::vector sectionsToRun; + }; + + class Config : public SharedImpl { + private: + Config( Config const& other ); + Config& operator = ( Config const& other ); + virtual void dummy(); + public: + + Config() + {} + + Config( ConfigData const& data ) + : m_data( data ), + m_stream( openStream() ) + { + if( !data.testsOrTags.empty() ) { + TestSpecParser parser( ITagAliasRegistry::get() ); + for( std::size_t i = 0; i < data.testsOrTags.size(); ++i ) + parser.parse( data.testsOrTags[i] ); + m_testSpec = parser.testSpec(); + } + } + + virtual ~Config() {} + + std::string const& getFilename() const { + return m_data.outputFilename ; + } + + bool listTests() const { return m_data.listTests; } + bool listTestNamesOnly() const { return m_data.listTestNamesOnly; } + bool listTags() const { return m_data.listTags; } + bool listReporters() const { return m_data.listReporters; } + bool listExtraInfo() const { return m_data.listExtraInfo; } + + std::string getProcessName() const { return m_data.processName; } + + std::vector const& getReporterNames() const { return m_data.reporterNames; } + std::vector const& getSectionsToRun() const CATCH_OVERRIDE { return m_data.sectionsToRun; } + + virtual TestSpec const& testSpec() const CATCH_OVERRIDE { return m_testSpec; } + + bool showHelp() const { return m_data.showHelp; } + + // IConfig interface + virtual bool allowThrows() const CATCH_OVERRIDE { return !m_data.noThrow; } + virtual std::ostream& stream() const CATCH_OVERRIDE { return m_stream->stream(); } + virtual std::string name() const CATCH_OVERRIDE { return m_data.name.empty() ? m_data.processName : m_data.name; } + virtual bool includeSuccessfulResults() const CATCH_OVERRIDE { return m_data.showSuccessfulTests; } + virtual bool warnAboutMissingAssertions() const CATCH_OVERRIDE { return m_data.warnings & WarnAbout::NoAssertions; } + virtual ShowDurations::OrNot showDurations() const CATCH_OVERRIDE { return m_data.showDurations; } + virtual RunTests::InWhatOrder runOrder() const CATCH_OVERRIDE { return m_data.runOrder; } + virtual unsigned int rngSeed() const CATCH_OVERRIDE { return m_data.rngSeed; } + virtual UseColour::YesOrNo useColour() const CATCH_OVERRIDE { return m_data.useColour; } + virtual bool shouldDebugBreak() const CATCH_OVERRIDE { return m_data.shouldDebugBreak; } + virtual int abortAfter() const CATCH_OVERRIDE { return m_data.abortAfter; } + virtual bool showInvisibles() const CATCH_OVERRIDE { return m_data.showInvisibles; } + + private: + + IStream const* openStream() { + if( m_data.outputFilename.empty() ) + return new CoutStream(); + else if( m_data.outputFilename[0] == '%' ) { + if( m_data.outputFilename == "%debug" ) + return new DebugOutStream(); + else + throw std::domain_error( "Unrecognised stream: " + m_data.outputFilename ); + } + else + return new FileStream( m_data.outputFilename ); + } + ConfigData m_data; + + CATCH_AUTO_PTR( IStream const ) m_stream; + TestSpec m_testSpec; + }; + +} // end namespace Catch + +// #included from: catch_clara.h +#define TWOBLUECUBES_CATCH_CLARA_H_INCLUDED + +// Use Catch's value for console width (store Clara's off to the side, if present) +#ifdef CLARA_CONFIG_CONSOLE_WIDTH +#define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CLARA_CONFIG_CONSOLE_WIDTH +#undef CLARA_CONFIG_CONSOLE_WIDTH +#endif +#define CLARA_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH + +// Declare Clara inside the Catch namespace +#define STITCH_CLARA_OPEN_NAMESPACE namespace Catch { +// #included from: ../external/clara.h + +// Version 0.0.2.4 + +// Only use header guard if we are not using an outer namespace +#if !defined(TWOBLUECUBES_CLARA_H_INCLUDED) || defined(STITCH_CLARA_OPEN_NAMESPACE) + +#ifndef STITCH_CLARA_OPEN_NAMESPACE +#define TWOBLUECUBES_CLARA_H_INCLUDED +#define STITCH_CLARA_OPEN_NAMESPACE +#define STITCH_CLARA_CLOSE_NAMESPACE +#else +#define STITCH_CLARA_CLOSE_NAMESPACE } +#endif + +#define STITCH_TBC_TEXT_FORMAT_OPEN_NAMESPACE STITCH_CLARA_OPEN_NAMESPACE + +// ----------- #included from tbc_text_format.h ----------- + +// Only use header guard if we are not using an outer namespace +#if !defined(TBC_TEXT_FORMAT_H_INCLUDED) || defined(STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE) +#ifndef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +#define TBC_TEXT_FORMAT_H_INCLUDED +#endif + +#include +#include +#include +#include +#include + +// Use optional outer namespace +#ifdef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +namespace STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE { +#endif + +namespace Tbc { + +#ifdef TBC_TEXT_FORMAT_CONSOLE_WIDTH + const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + struct TextAttributes { + TextAttributes() + : initialIndent( std::string::npos ), + indent( 0 ), + width( consoleWidth-1 ), + tabChar( '\t' ) + {} + + TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } + TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } + TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } + TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } + + std::size_t initialIndent; // indent of first line, or npos + std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos + std::size_t width; // maximum width of text, including indent. Longer text will wrap + char tabChar; // If this char is seen the indent is changed to current pos + }; + + class Text { + public: + Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) + : attr( _attr ) + { + std::string wrappableChars = " [({.,/|\\-"; + std::size_t indent = _attr.initialIndent != std::string::npos + ? _attr.initialIndent + : _attr.indent; + std::string remainder = _str; + + while( !remainder.empty() ) { + if( lines.size() >= 1000 ) { + lines.push_back( "... message truncated due to excessive size" ); + return; + } + std::size_t tabPos = std::string::npos; + std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); + std::size_t pos = remainder.find_first_of( '\n' ); + if( pos <= width ) { + width = pos; + } + pos = remainder.find_last_of( _attr.tabChar, width ); + if( pos != std::string::npos ) { + tabPos = pos; + if( remainder[width] == '\n' ) + width--; + remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); + } + + if( width == remainder.size() ) { + spliceLine( indent, remainder, width ); + } + else if( remainder[width] == '\n' ) { + spliceLine( indent, remainder, width ); + if( width <= 1 || remainder.size() != 1 ) + remainder = remainder.substr( 1 ); + indent = _attr.indent; + } + else { + pos = remainder.find_last_of( wrappableChars, width ); + if( pos != std::string::npos && pos > 0 ) { + spliceLine( indent, remainder, pos ); + if( remainder[0] == ' ' ) + remainder = remainder.substr( 1 ); + } + else { + spliceLine( indent, remainder, width-1 ); + lines.back() += "-"; + } + if( lines.size() == 1 ) + indent = _attr.indent; + if( tabPos != std::string::npos ) + indent += tabPos; + } + } + } + + void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { + lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); + _remainder = _remainder.substr( _pos ); + } + + typedef std::vector::const_iterator const_iterator; + + const_iterator begin() const { return lines.begin(); } + const_iterator end() const { return lines.end(); } + std::string const& last() const { return lines.back(); } + std::size_t size() const { return lines.size(); } + std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } + std::string toString() const { + std::ostringstream oss; + oss << *this; + return oss.str(); + } + + inline friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ) { + for( Text::const_iterator it = _text.begin(), itEnd = _text.end(); + it != itEnd; ++it ) { + if( it != _text.begin() ) + _stream << "\n"; + _stream << *it; + } + return _stream; + } + + private: + std::string str; + TextAttributes attr; + std::vector lines; + }; + +} // end namespace Tbc + +#ifdef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +} // end outer namespace +#endif + +#endif // TBC_TEXT_FORMAT_H_INCLUDED + +// ----------- end of #include from tbc_text_format.h ----------- +// ........... back in clara.h + +#undef STITCH_TBC_TEXT_FORMAT_OPEN_NAMESPACE + +// ----------- #included from clara_compilers.h ----------- + +#ifndef TWOBLUECUBES_CLARA_COMPILERS_H_INCLUDED +#define TWOBLUECUBES_CLARA_COMPILERS_H_INCLUDED + +// Detect a number of compiler features - mostly C++11/14 conformance - by compiler +// The following features are defined: +// +// CLARA_CONFIG_CPP11_NULLPTR : is nullptr supported? +// CLARA_CONFIG_CPP11_NOEXCEPT : is noexcept supported? +// CLARA_CONFIG_CPP11_GENERATED_METHODS : The delete and default keywords for compiler generated methods +// CLARA_CONFIG_CPP11_OVERRIDE : is override supported? +// CLARA_CONFIG_CPP11_UNIQUE_PTR : is unique_ptr supported (otherwise use auto_ptr) + +// CLARA_CONFIG_CPP11_OR_GREATER : Is C++11 supported? + +// CLARA_CONFIG_VARIADIC_MACROS : are variadic macros supported? + +// In general each macro has a _NO_ form +// (e.g. CLARA_CONFIG_CPP11_NO_NULLPTR) which disables the feature. +// Many features, at point of detection, define an _INTERNAL_ macro, so they +// can be combined, en-mass, with the _NO_ forms later. + +// All the C++11 features can be disabled with CLARA_CONFIG_NO_CPP11 + +#ifdef __clang__ + +#if __has_feature(cxx_nullptr) +#define CLARA_INTERNAL_CONFIG_CPP11_NULLPTR +#endif + +#if __has_feature(cxx_noexcept) +#define CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT +#endif + +#endif // __clang__ + +//////////////////////////////////////////////////////////////////////////////// +// GCC +#ifdef __GNUC__ + +#if __GNUC__ == 4 && __GNUC_MINOR__ >= 6 && defined(__GXX_EXPERIMENTAL_CXX0X__) +#define CLARA_INTERNAL_CONFIG_CPP11_NULLPTR +#endif + +// - otherwise more recent versions define __cplusplus >= 201103L +// and will get picked up below + +#endif // __GNUC__ + +//////////////////////////////////////////////////////////////////////////////// +// Visual C++ +#ifdef _MSC_VER + +#if (_MSC_VER >= 1600) +#define CLARA_INTERNAL_CONFIG_CPP11_NULLPTR +#define CLARA_INTERNAL_CONFIG_CPP11_UNIQUE_PTR +#endif + +#if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015)) +#define CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT +#define CLARA_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#endif + +#endif // _MSC_VER + +//////////////////////////////////////////////////////////////////////////////// +// C++ language feature support + +// catch all support for C++11 +#if defined(__cplusplus) && __cplusplus >= 201103L + +#define CLARA_CPP11_OR_GREATER + +#if !defined(CLARA_INTERNAL_CONFIG_CPP11_NULLPTR) +#define CLARA_INTERNAL_CONFIG_CPP11_NULLPTR +#endif + +#ifndef CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT +#define CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT +#endif + +#ifndef CLARA_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#define CLARA_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#endif + +#if !defined(CLARA_INTERNAL_CONFIG_CPP11_OVERRIDE) +#define CLARA_INTERNAL_CONFIG_CPP11_OVERRIDE +#endif +#if !defined(CLARA_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) +#define CLARA_INTERNAL_CONFIG_CPP11_UNIQUE_PTR +#endif + +#endif // __cplusplus >= 201103L + +// Now set the actual defines based on the above + anything the user has configured +#if defined(CLARA_INTERNAL_CONFIG_CPP11_NULLPTR) && !defined(CLARA_CONFIG_CPP11_NO_NULLPTR) && !defined(CLARA_CONFIG_CPP11_NULLPTR) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_NULLPTR +#endif +#if defined(CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT) && !defined(CLARA_CONFIG_CPP11_NO_NOEXCEPT) && !defined(CLARA_CONFIG_CPP11_NOEXCEPT) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_NOEXCEPT +#endif +#if defined(CLARA_INTERNAL_CONFIG_CPP11_GENERATED_METHODS) && !defined(CLARA_CONFIG_CPP11_NO_GENERATED_METHODS) && !defined(CLARA_CONFIG_CPP11_GENERATED_METHODS) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_GENERATED_METHODS +#endif +#if defined(CLARA_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CLARA_CONFIG_NO_OVERRIDE) && !defined(CLARA_CONFIG_CPP11_OVERRIDE) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_OVERRIDE +#endif +#if defined(CLARA_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CLARA_CONFIG_NO_UNIQUE_PTR) && !defined(CLARA_CONFIG_CPP11_UNIQUE_PTR) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_UNIQUE_PTR +#endif + +// noexcept support: +#if defined(CLARA_CONFIG_CPP11_NOEXCEPT) && !defined(CLARA_NOEXCEPT) +#define CLARA_NOEXCEPT noexcept +# define CLARA_NOEXCEPT_IS(x) noexcept(x) +#else +#define CLARA_NOEXCEPT throw() +# define CLARA_NOEXCEPT_IS(x) +#endif + +// nullptr support +#ifdef CLARA_CONFIG_CPP11_NULLPTR +#define CLARA_NULL nullptr +#else +#define CLARA_NULL NULL +#endif + +// override support +#ifdef CLARA_CONFIG_CPP11_OVERRIDE +#define CLARA_OVERRIDE override +#else +#define CLARA_OVERRIDE +#endif + +// unique_ptr support +#ifdef CLARA_CONFIG_CPP11_UNIQUE_PTR +# define CLARA_AUTO_PTR( T ) std::unique_ptr +#else +# define CLARA_AUTO_PTR( T ) std::auto_ptr +#endif + +#endif // TWOBLUECUBES_CLARA_COMPILERS_H_INCLUDED + +// ----------- end of #include from clara_compilers.h ----------- +// ........... back in clara.h + +#include +#include +#include + +#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) +#define CLARA_PLATFORM_WINDOWS +#endif + +// Use optional outer namespace +#ifdef STITCH_CLARA_OPEN_NAMESPACE +STITCH_CLARA_OPEN_NAMESPACE +#endif + +namespace Clara { + + struct UnpositionalTag {}; + + extern UnpositionalTag _; + +#ifdef CLARA_CONFIG_MAIN + UnpositionalTag _; +#endif + + namespace Detail { + +#ifdef CLARA_CONSOLE_WIDTH + const unsigned int consoleWidth = CLARA_CONFIG_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + using namespace Tbc; + + inline bool startsWith( std::string const& str, std::string const& prefix ) { + return str.size() >= prefix.size() && str.substr( 0, prefix.size() ) == prefix; + } + + template struct RemoveConstRef{ typedef T type; }; + template struct RemoveConstRef{ typedef T type; }; + template struct RemoveConstRef{ typedef T type; }; + template struct RemoveConstRef{ typedef T type; }; + + template struct IsBool { static const bool value = false; }; + template<> struct IsBool { static const bool value = true; }; + + template + void convertInto( std::string const& _source, T& _dest ) { + std::stringstream ss; + ss << _source; + ss >> _dest; + if( ss.fail() ) + throw std::runtime_error( "Unable to convert " + _source + " to destination type" ); + } + inline void convertInto( std::string const& _source, std::string& _dest ) { + _dest = _source; + } + char toLowerCh(char c) { + return static_cast( std::tolower( c ) ); + } + inline void convertInto( std::string const& _source, bool& _dest ) { + std::string sourceLC = _source; + std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), toLowerCh ); + if( sourceLC == "y" || sourceLC == "1" || sourceLC == "true" || sourceLC == "yes" || sourceLC == "on" ) + _dest = true; + else if( sourceLC == "n" || sourceLC == "0" || sourceLC == "false" || sourceLC == "no" || sourceLC == "off" ) + _dest = false; + else + throw std::runtime_error( "Expected a boolean value but did not recognise:\n '" + _source + "'" ); + } + + template + struct IArgFunction { + virtual ~IArgFunction() {} +#ifdef CLARA_CONFIG_CPP11_GENERATED_METHODS + IArgFunction() = default; + IArgFunction( IArgFunction const& ) = default; +#endif + virtual void set( ConfigT& config, std::string const& value ) const = 0; + virtual bool takesArg() const = 0; + virtual IArgFunction* clone() const = 0; + }; + + template + class BoundArgFunction { + public: + BoundArgFunction() : functionObj( CLARA_NULL ) {} + BoundArgFunction( IArgFunction* _functionObj ) : functionObj( _functionObj ) {} + BoundArgFunction( BoundArgFunction const& other ) : functionObj( other.functionObj ? other.functionObj->clone() : CLARA_NULL ) {} + BoundArgFunction& operator = ( BoundArgFunction const& other ) { + IArgFunction* newFunctionObj = other.functionObj ? other.functionObj->clone() : CLARA_NULL; + delete functionObj; + functionObj = newFunctionObj; + return *this; + } + ~BoundArgFunction() { delete functionObj; } + + void set( ConfigT& config, std::string const& value ) const { + functionObj->set( config, value ); + } + bool takesArg() const { return functionObj->takesArg(); } + + bool isSet() const { + return functionObj != CLARA_NULL; + } + private: + IArgFunction* functionObj; + }; + + template + struct NullBinder : IArgFunction{ + virtual void set( C&, std::string const& ) const {} + virtual bool takesArg() const { return true; } + virtual IArgFunction* clone() const { return new NullBinder( *this ); } + }; + + template + struct BoundDataMember : IArgFunction{ + BoundDataMember( M C::* _member ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + convertInto( stringValue, p.*member ); + } + virtual bool takesArg() const { return !IsBool::value; } + virtual IArgFunction* clone() const { return new BoundDataMember( *this ); } + M C::* member; + }; + template + struct BoundUnaryMethod : IArgFunction{ + BoundUnaryMethod( void (C::*_member)( M ) ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + typename RemoveConstRef::type value; + convertInto( stringValue, value ); + (p.*member)( value ); + } + virtual bool takesArg() const { return !IsBool::value; } + virtual IArgFunction* clone() const { return new BoundUnaryMethod( *this ); } + void (C::*member)( M ); + }; + template + struct BoundNullaryMethod : IArgFunction{ + BoundNullaryMethod( void (C::*_member)() ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + bool value; + convertInto( stringValue, value ); + if( value ) + (p.*member)(); + } + virtual bool takesArg() const { return false; } + virtual IArgFunction* clone() const { return new BoundNullaryMethod( *this ); } + void (C::*member)(); + }; + + template + struct BoundUnaryFunction : IArgFunction{ + BoundUnaryFunction( void (*_function)( C& ) ) : function( _function ) {} + virtual void set( C& obj, std::string const& stringValue ) const { + bool value; + convertInto( stringValue, value ); + if( value ) + function( obj ); + } + virtual bool takesArg() const { return false; } + virtual IArgFunction* clone() const { return new BoundUnaryFunction( *this ); } + void (*function)( C& ); + }; + + template + struct BoundBinaryFunction : IArgFunction{ + BoundBinaryFunction( void (*_function)( C&, T ) ) : function( _function ) {} + virtual void set( C& obj, std::string const& stringValue ) const { + typename RemoveConstRef::type value; + convertInto( stringValue, value ); + function( obj, value ); + } + virtual bool takesArg() const { return !IsBool::value; } + virtual IArgFunction* clone() const { return new BoundBinaryFunction( *this ); } + void (*function)( C&, T ); + }; + + } // namespace Detail + + inline std::vector argsToVector( int argc, char const* const* const argv ) { + std::vector args( static_cast( argc ) ); + for( std::size_t i = 0; i < static_cast( argc ); ++i ) + args[i] = argv[i]; + + return args; + } + + class Parser { + enum Mode { None, MaybeShortOpt, SlashOpt, ShortOpt, LongOpt, Positional }; + Mode mode; + std::size_t from; + bool inQuotes; + public: + + struct Token { + enum Type { Positional, ShortOpt, LongOpt }; + Token( Type _type, std::string const& _data ) : type( _type ), data( _data ) {} + Type type; + std::string data; + }; + + Parser() : mode( None ), from( 0 ), inQuotes( false ){} + + void parseIntoTokens( std::vector const& args, std::vector& tokens ) { + const std::string doubleDash = "--"; + for( std::size_t i = 1; i < args.size() && args[i] != doubleDash; ++i ) + parseIntoTokens( args[i], tokens); + } + + void parseIntoTokens( std::string const& arg, std::vector& tokens ) { + for( std::size_t i = 0; i < arg.size(); ++i ) { + char c = arg[i]; + if( c == '"' ) + inQuotes = !inQuotes; + mode = handleMode( i, c, arg, tokens ); + } + mode = handleMode( arg.size(), '\0', arg, tokens ); + } + Mode handleMode( std::size_t i, char c, std::string const& arg, std::vector& tokens ) { + switch( mode ) { + case None: return handleNone( i, c ); + case MaybeShortOpt: return handleMaybeShortOpt( i, c ); + case ShortOpt: + case LongOpt: + case SlashOpt: return handleOpt( i, c, arg, tokens ); + case Positional: return handlePositional( i, c, arg, tokens ); + default: throw std::logic_error( "Unknown mode" ); + } + } + + Mode handleNone( std::size_t i, char c ) { + if( inQuotes ) { + from = i; + return Positional; + } + switch( c ) { + case '-': return MaybeShortOpt; +#ifdef CLARA_PLATFORM_WINDOWS + case '/': from = i+1; return SlashOpt; +#endif + default: from = i; return Positional; + } + } + Mode handleMaybeShortOpt( std::size_t i, char c ) { + switch( c ) { + case '-': from = i+1; return LongOpt; + default: from = i; return ShortOpt; + } + } + + Mode handleOpt( std::size_t i, char c, std::string const& arg, std::vector& tokens ) { + if( std::string( ":=\0", 3 ).find( c ) == std::string::npos ) + return mode; + + std::string optName = arg.substr( from, i-from ); + if( mode == ShortOpt ) + for( std::size_t j = 0; j < optName.size(); ++j ) + tokens.push_back( Token( Token::ShortOpt, optName.substr( j, 1 ) ) ); + else if( mode == SlashOpt && optName.size() == 1 ) + tokens.push_back( Token( Token::ShortOpt, optName ) ); + else + tokens.push_back( Token( Token::LongOpt, optName ) ); + return None; + } + Mode handlePositional( std::size_t i, char c, std::string const& arg, std::vector& tokens ) { + if( inQuotes || std::string( "\0", 1 ).find( c ) == std::string::npos ) + return mode; + + std::string data = arg.substr( from, i-from ); + tokens.push_back( Token( Token::Positional, data ) ); + return None; + } + }; + + template + struct CommonArgProperties { + CommonArgProperties() {} + CommonArgProperties( Detail::BoundArgFunction const& _boundField ) : boundField( _boundField ) {} + + Detail::BoundArgFunction boundField; + std::string description; + std::string detail; + std::string placeholder; // Only value if boundField takes an arg + + bool takesArg() const { + return !placeholder.empty(); + } + void validate() const { + if( !boundField.isSet() ) + throw std::logic_error( "option not bound" ); + } + }; + struct OptionArgProperties { + std::vector shortNames; + std::string longName; + + bool hasShortName( std::string const& shortName ) const { + return std::find( shortNames.begin(), shortNames.end(), shortName ) != shortNames.end(); + } + bool hasLongName( std::string const& _longName ) const { + return _longName == longName; + } + }; + struct PositionalArgProperties { + PositionalArgProperties() : position( -1 ) {} + int position; // -1 means non-positional (floating) + + bool isFixedPositional() const { + return position != -1; + } + }; + + template + class CommandLine { + + struct Arg : CommonArgProperties, OptionArgProperties, PositionalArgProperties { + Arg() {} + Arg( Detail::BoundArgFunction const& _boundField ) : CommonArgProperties( _boundField ) {} + + using CommonArgProperties::placeholder; // !TBD + + std::string dbgName() const { + if( !longName.empty() ) + return "--" + longName; + if( !shortNames.empty() ) + return "-" + shortNames[0]; + return "positional args"; + } + std::string commands() const { + std::ostringstream oss; + bool first = true; + std::vector::const_iterator it = shortNames.begin(), itEnd = shortNames.end(); + for(; it != itEnd; ++it ) { + if( first ) + first = false; + else + oss << ", "; + oss << "-" << *it; + } + if( !longName.empty() ) { + if( !first ) + oss << ", "; + oss << "--" << longName; + } + if( !placeholder.empty() ) + oss << " <" << placeholder << ">"; + return oss.str(); + } + }; + + typedef CLARA_AUTO_PTR( Arg ) ArgAutoPtr; + + friend void addOptName( Arg& arg, std::string const& optName ) + { + if( optName.empty() ) + return; + if( Detail::startsWith( optName, "--" ) ) { + if( !arg.longName.empty() ) + throw std::logic_error( "Only one long opt may be specified. '" + + arg.longName + + "' already specified, now attempting to add '" + + optName + "'" ); + arg.longName = optName.substr( 2 ); + } + else if( Detail::startsWith( optName, "-" ) ) + arg.shortNames.push_back( optName.substr( 1 ) ); + else + throw std::logic_error( "option must begin with - or --. Option was: '" + optName + "'" ); + } + friend void setPositionalArg( Arg& arg, int position ) + { + arg.position = position; + } + + class ArgBuilder { + public: + ArgBuilder( Arg* arg ) : m_arg( arg ) {} + + // Bind a non-boolean data member (requires placeholder string) + template + void bind( M C::* field, std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundDataMember( field ); + m_arg->placeholder = placeholder; + } + // Bind a boolean data member (no placeholder required) + template + void bind( bool C::* field ) { + m_arg->boundField = new Detail::BoundDataMember( field ); + } + + // Bind a method taking a single, non-boolean argument (requires a placeholder string) + template + void bind( void (C::* unaryMethod)( M ), std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundUnaryMethod( unaryMethod ); + m_arg->placeholder = placeholder; + } + + // Bind a method taking a single, boolean argument (no placeholder string required) + template + void bind( void (C::* unaryMethod)( bool ) ) { + m_arg->boundField = new Detail::BoundUnaryMethod( unaryMethod ); + } + + // Bind a method that takes no arguments (will be called if opt is present) + template + void bind( void (C::* nullaryMethod)() ) { + m_arg->boundField = new Detail::BoundNullaryMethod( nullaryMethod ); + } + + // Bind a free function taking a single argument - the object to operate on (no placeholder string required) + template + void bind( void (* unaryFunction)( C& ) ) { + m_arg->boundField = new Detail::BoundUnaryFunction( unaryFunction ); + } + + // Bind a free function taking a single argument - the object to operate on (requires a placeholder string) + template + void bind( void (* binaryFunction)( C&, T ), std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundBinaryFunction( binaryFunction ); + m_arg->placeholder = placeholder; + } + + ArgBuilder& describe( std::string const& description ) { + m_arg->description = description; + return *this; + } + ArgBuilder& detail( std::string const& detail ) { + m_arg->detail = detail; + return *this; + } + + protected: + Arg* m_arg; + }; + + class OptBuilder : public ArgBuilder { + public: + OptBuilder( Arg* arg ) : ArgBuilder( arg ) {} + OptBuilder( OptBuilder& other ) : ArgBuilder( other ) {} + + OptBuilder& operator[]( std::string const& optName ) { + addOptName( *ArgBuilder::m_arg, optName ); + return *this; + } + }; + + public: + + CommandLine() + : m_boundProcessName( new Detail::NullBinder() ), + m_highestSpecifiedArgPosition( 0 ), + m_throwOnUnrecognisedTokens( false ) + {} + CommandLine( CommandLine const& other ) + : m_boundProcessName( other.m_boundProcessName ), + m_options ( other.m_options ), + m_positionalArgs( other.m_positionalArgs ), + m_highestSpecifiedArgPosition( other.m_highestSpecifiedArgPosition ), + m_throwOnUnrecognisedTokens( other.m_throwOnUnrecognisedTokens ) + { + if( other.m_floatingArg.get() ) + m_floatingArg.reset( new Arg( *other.m_floatingArg ) ); + } + + CommandLine& setThrowOnUnrecognisedTokens( bool shouldThrow = true ) { + m_throwOnUnrecognisedTokens = shouldThrow; + return *this; + } + + OptBuilder operator[]( std::string const& optName ) { + m_options.push_back( Arg() ); + addOptName( m_options.back(), optName ); + OptBuilder builder( &m_options.back() ); + return builder; + } + + ArgBuilder operator[]( int position ) { + m_positionalArgs.insert( std::make_pair( position, Arg() ) ); + if( position > m_highestSpecifiedArgPosition ) + m_highestSpecifiedArgPosition = position; + setPositionalArg( m_positionalArgs[position], position ); + ArgBuilder builder( &m_positionalArgs[position] ); + return builder; + } + + // Invoke this with the _ instance + ArgBuilder operator[]( UnpositionalTag ) { + if( m_floatingArg.get() ) + throw std::logic_error( "Only one unpositional argument can be added" ); + m_floatingArg.reset( new Arg() ); + ArgBuilder builder( m_floatingArg.get() ); + return builder; + } + + template + void bindProcessName( M C::* field ) { + m_boundProcessName = new Detail::BoundDataMember( field ); + } + template + void bindProcessName( void (C::*_unaryMethod)( M ) ) { + m_boundProcessName = new Detail::BoundUnaryMethod( _unaryMethod ); + } + + void optUsage( std::ostream& os, std::size_t indent = 0, std::size_t width = Detail::consoleWidth ) const { + typename std::vector::const_iterator itBegin = m_options.begin(), itEnd = m_options.end(), it; + std::size_t maxWidth = 0; + for( it = itBegin; it != itEnd; ++it ) + maxWidth = (std::max)( maxWidth, it->commands().size() ); + + for( it = itBegin; it != itEnd; ++it ) { + Detail::Text usage( it->commands(), Detail::TextAttributes() + .setWidth( maxWidth+indent ) + .setIndent( indent ) ); + Detail::Text desc( it->description, Detail::TextAttributes() + .setWidth( width - maxWidth - 3 ) ); + + for( std::size_t i = 0; i < (std::max)( usage.size(), desc.size() ); ++i ) { + std::string usageCol = i < usage.size() ? usage[i] : ""; + os << usageCol; + + if( i < desc.size() && !desc[i].empty() ) + os << std::string( indent + 2 + maxWidth - usageCol.size(), ' ' ) + << desc[i]; + os << "\n"; + } + } + } + std::string optUsage() const { + std::ostringstream oss; + optUsage( oss ); + return oss.str(); + } + + void argSynopsis( std::ostream& os ) const { + for( int i = 1; i <= m_highestSpecifiedArgPosition; ++i ) { + if( i > 1 ) + os << " "; + typename std::map::const_iterator it = m_positionalArgs.find( i ); + if( it != m_positionalArgs.end() ) + os << "<" << it->second.placeholder << ">"; + else if( m_floatingArg.get() ) + os << "<" << m_floatingArg->placeholder << ">"; + else + throw std::logic_error( "non consecutive positional arguments with no floating args" ); + } + // !TBD No indication of mandatory args + if( m_floatingArg.get() ) { + if( m_highestSpecifiedArgPosition > 1 ) + os << " "; + os << "[<" << m_floatingArg->placeholder << "> ...]"; + } + } + std::string argSynopsis() const { + std::ostringstream oss; + argSynopsis( oss ); + return oss.str(); + } + + void usage( std::ostream& os, std::string const& procName ) const { + validate(); + os << "usage:\n " << procName << " "; + argSynopsis( os ); + if( !m_options.empty() ) { + os << " [options]\n\nwhere options are: \n"; + optUsage( os, 2 ); + } + os << "\n"; + } + std::string usage( std::string const& procName ) const { + std::ostringstream oss; + usage( oss, procName ); + return oss.str(); + } + + ConfigT parse( std::vector const& args ) const { + ConfigT config; + parseInto( args, config ); + return config; + } + + std::vector parseInto( std::vector const& args, ConfigT& config ) const { + std::string processName = args.empty() ? std::string() : args[0]; + std::size_t lastSlash = processName.find_last_of( "/\\" ); + if( lastSlash != std::string::npos ) + processName = processName.substr( lastSlash+1 ); + m_boundProcessName.set( config, processName ); + std::vector tokens; + Parser parser; + parser.parseIntoTokens( args, tokens ); + return populate( tokens, config ); + } + + std::vector populate( std::vector const& tokens, ConfigT& config ) const { + validate(); + std::vector unusedTokens = populateOptions( tokens, config ); + unusedTokens = populateFixedArgs( unusedTokens, config ); + unusedTokens = populateFloatingArgs( unusedTokens, config ); + return unusedTokens; + } + + std::vector populateOptions( std::vector const& tokens, ConfigT& config ) const { + std::vector unusedTokens; + std::vector errors; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + typename std::vector::const_iterator it = m_options.begin(), itEnd = m_options.end(); + for(; it != itEnd; ++it ) { + Arg const& arg = *it; + + try { + if( ( token.type == Parser::Token::ShortOpt && arg.hasShortName( token.data ) ) || + ( token.type == Parser::Token::LongOpt && arg.hasLongName( token.data ) ) ) { + if( arg.takesArg() ) { + if( i == tokens.size()-1 || tokens[i+1].type != Parser::Token::Positional ) + errors.push_back( "Expected argument to option: " + token.data ); + else + arg.boundField.set( config, tokens[++i].data ); + } + else { + arg.boundField.set( config, "true" ); + } + break; + } + } + catch( std::exception& ex ) { + errors.push_back( std::string( ex.what() ) + "\n- while parsing: (" + arg.commands() + ")" ); + } + } + if( it == itEnd ) { + if( token.type == Parser::Token::Positional || !m_throwOnUnrecognisedTokens ) + unusedTokens.push_back( token ); + else if( errors.empty() && m_throwOnUnrecognisedTokens ) + errors.push_back( "unrecognised option: " + token.data ); + } + } + if( !errors.empty() ) { + std::ostringstream oss; + for( std::vector::const_iterator it = errors.begin(), itEnd = errors.end(); + it != itEnd; + ++it ) { + if( it != errors.begin() ) + oss << "\n"; + oss << *it; + } + throw std::runtime_error( oss.str() ); + } + return unusedTokens; + } + std::vector populateFixedArgs( std::vector const& tokens, ConfigT& config ) const { + std::vector unusedTokens; + int position = 1; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + typename std::map::const_iterator it = m_positionalArgs.find( position ); + if( it != m_positionalArgs.end() ) + it->second.boundField.set( config, token.data ); + else + unusedTokens.push_back( token ); + if( token.type == Parser::Token::Positional ) + position++; + } + return unusedTokens; + } + std::vector populateFloatingArgs( std::vector const& tokens, ConfigT& config ) const { + if( !m_floatingArg.get() ) + return tokens; + std::vector unusedTokens; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + if( token.type == Parser::Token::Positional ) + m_floatingArg->boundField.set( config, token.data ); + else + unusedTokens.push_back( token ); + } + return unusedTokens; + } + + void validate() const + { + if( m_options.empty() && m_positionalArgs.empty() && !m_floatingArg.get() ) + throw std::logic_error( "No options or arguments specified" ); + + for( typename std::vector::const_iterator it = m_options.begin(), + itEnd = m_options.end(); + it != itEnd; ++it ) + it->validate(); + } + + private: + Detail::BoundArgFunction m_boundProcessName; + std::vector m_options; + std::map m_positionalArgs; + ArgAutoPtr m_floatingArg; + int m_highestSpecifiedArgPosition; + bool m_throwOnUnrecognisedTokens; + }; + +} // end namespace Clara + +STITCH_CLARA_CLOSE_NAMESPACE +#undef STITCH_CLARA_OPEN_NAMESPACE +#undef STITCH_CLARA_CLOSE_NAMESPACE + +#endif // TWOBLUECUBES_CLARA_H_INCLUDED +#undef STITCH_CLARA_OPEN_NAMESPACE + +// Restore Clara's value for console width, if present +#ifdef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#define CLARA_CONFIG_CONSOLE_WIDTH CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#undef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#endif + +#include +#include + +namespace Catch { + + inline void abortAfterFirst( ConfigData& config ) { config.abortAfter = 1; } + inline void abortAfterX( ConfigData& config, int x ) { + if( x < 1 ) + throw std::runtime_error( "Value after -x or --abortAfter must be greater than zero" ); + config.abortAfter = x; + } + inline void addTestOrTags( ConfigData& config, std::string const& _testSpec ) { config.testsOrTags.push_back( _testSpec ); } + inline void addSectionToRun( ConfigData& config, std::string const& sectionName ) { config.sectionsToRun.push_back( sectionName ); } + inline void addReporterName( ConfigData& config, std::string const& _reporterName ) { config.reporterNames.push_back( _reporterName ); } + + inline void addWarning( ConfigData& config, std::string const& _warning ) { + if( _warning == "NoAssertions" ) + config.warnings = static_cast( config.warnings | WarnAbout::NoAssertions ); + else + throw std::runtime_error( "Unrecognised warning: '" + _warning + '\'' ); + } + inline void setOrder( ConfigData& config, std::string const& order ) { + if( startsWith( "declared", order ) ) + config.runOrder = RunTests::InDeclarationOrder; + else if( startsWith( "lexical", order ) ) + config.runOrder = RunTests::InLexicographicalOrder; + else if( startsWith( "random", order ) ) + config.runOrder = RunTests::InRandomOrder; + else + throw std::runtime_error( "Unrecognised ordering: '" + order + '\'' ); + } + inline void setRngSeed( ConfigData& config, std::string const& seed ) { + if( seed == "time" ) { + config.rngSeed = static_cast( std::time(0) ); + } + else { + std::stringstream ss; + ss << seed; + ss >> config.rngSeed; + if( ss.fail() ) + throw std::runtime_error( "Argument to --rng-seed should be the word 'time' or a number" ); + } + } + inline void setVerbosity( ConfigData& config, int level ) { + // !TBD: accept strings? + config.verbosity = static_cast( level ); + } + inline void setShowDurations( ConfigData& config, bool _showDurations ) { + config.showDurations = _showDurations + ? ShowDurations::Always + : ShowDurations::Never; + } + inline void setUseColour( ConfigData& config, std::string const& value ) { + std::string mode = toLower( value ); + + if( mode == "yes" ) + config.useColour = UseColour::Yes; + else if( mode == "no" ) + config.useColour = UseColour::No; + else if( mode == "auto" ) + config.useColour = UseColour::Auto; + else + throw std::runtime_error( "colour mode must be one of: auto, yes or no" ); + } + inline void forceColour( ConfigData& config ) { + config.useColour = UseColour::Yes; + } + inline void loadTestNamesFromFile( ConfigData& config, std::string const& _filename ) { + std::ifstream f( _filename.c_str() ); + if( !f.is_open() ) + throw std::domain_error( "Unable to load input file: " + _filename ); + + std::string line; + while( std::getline( f, line ) ) { + line = trim(line); + if( !line.empty() && !startsWith( line, '#' ) ) { + if( !startsWith( line, '"' ) ) + line = '"' + line + '"'; + addTestOrTags( config, line + ',' ); + } + } + } + + inline Clara::CommandLine makeCommandLineParser() { + + using namespace Clara; + CommandLine cli; + + cli.bindProcessName( &ConfigData::processName ); + + cli["-?"]["-h"]["--help"] + .describe( "display usage information" ) + .bind( &ConfigData::showHelp ); + + cli["-l"]["--list-tests"] + .describe( "list all/matching test cases" ) + .bind( &ConfigData::listTests ); + + cli["-t"]["--list-tags"] + .describe( "list all/matching tags" ) + .bind( &ConfigData::listTags ); + + cli["-s"]["--success"] + .describe( "include successful tests in output" ) + .bind( &ConfigData::showSuccessfulTests ); + + cli["-b"]["--break"] + .describe( "break into debugger on failure" ) + .bind( &ConfigData::shouldDebugBreak ); + + cli["-e"]["--nothrow"] + .describe( "skip exception tests" ) + .bind( &ConfigData::noThrow ); + + cli["-i"]["--invisibles"] + .describe( "show invisibles (tabs, newlines)" ) + .bind( &ConfigData::showInvisibles ); + + cli["-o"]["--out"] + .describe( "output filename" ) + .bind( &ConfigData::outputFilename, "filename" ); + + cli["-r"]["--reporter"] +// .placeholder( "name[:filename]" ) + .describe( "reporter to use (defaults to console)" ) + .bind( &addReporterName, "name" ); + + cli["-n"]["--name"] + .describe( "suite name" ) + .bind( &ConfigData::name, "name" ); + + cli["-a"]["--abort"] + .describe( "abort at first failure" ) + .bind( &abortAfterFirst ); + + cli["-x"]["--abortx"] + .describe( "abort after x failures" ) + .bind( &abortAfterX, "no. failures" ); + + cli["-w"]["--warn"] + .describe( "enable warnings" ) + .bind( &addWarning, "warning name" ); + +// - needs updating if reinstated +// cli.into( &setVerbosity ) +// .describe( "level of verbosity (0=no output)" ) +// .shortOpt( "v") +// .longOpt( "verbosity" ) +// .placeholder( "level" ); + + cli[_] + .describe( "which test or tests to use" ) + .bind( &addTestOrTags, "test name, pattern or tags" ); + + cli["-d"]["--durations"] + .describe( "show test durations" ) + .bind( &setShowDurations, "yes|no" ); + + cli["-f"]["--input-file"] + .describe( "load test names to run from a file" ) + .bind( &loadTestNamesFromFile, "filename" ); + + cli["-#"]["--filenames-as-tags"] + .describe( "adds a tag for the filename" ) + .bind( &ConfigData::filenamesAsTags ); + + cli["-c"]["--section"] + .describe( "specify section to run" ) + .bind( &addSectionToRun, "section name" ); + + // Less common commands which don't have a short form + cli["--list-test-names-only"] + .describe( "list all/matching test cases names only" ) + .bind( &ConfigData::listTestNamesOnly ); + + cli["--list-extra-info"] + .describe( "list all/matching test cases with more info" ) + .bind( &ConfigData::listExtraInfo ); + + cli["--list-reporters"] + .describe( "list all reporters" ) + .bind( &ConfigData::listReporters ); + + cli["--order"] + .describe( "test case order (defaults to decl)" ) + .bind( &setOrder, "decl|lex|rand" ); + + cli["--rng-seed"] + .describe( "set a specific seed for random numbers" ) + .bind( &setRngSeed, "'time'|number" ); + + cli["--force-colour"] + .describe( "force colourised output (deprecated)" ) + .bind( &forceColour ); + + cli["--use-colour"] + .describe( "should output be colourised" ) + .bind( &setUseColour, "yes|no" ); + + return cli; + } + +} // end namespace Catch + +// #included from: internal/catch_list.hpp +#define TWOBLUECUBES_CATCH_LIST_HPP_INCLUDED + +// #included from: catch_text.h +#define TWOBLUECUBES_CATCH_TEXT_H_INCLUDED + +#define TBC_TEXT_FORMAT_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH + +#define CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE Catch +// #included from: ../external/tbc_text_format.h +// Only use header guard if we are not using an outer namespace +#ifndef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +# ifdef TWOBLUECUBES_TEXT_FORMAT_H_INCLUDED +# ifndef TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +# define TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +# endif +# else +# define TWOBLUECUBES_TEXT_FORMAT_H_INCLUDED +# endif +#endif +#ifndef TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +#include +#include +#include + +// Use optional outer namespace +#ifdef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +namespace CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE { +#endif + +namespace Tbc { + +#ifdef TBC_TEXT_FORMAT_CONSOLE_WIDTH + const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + struct TextAttributes { + TextAttributes() + : initialIndent( std::string::npos ), + indent( 0 ), + width( consoleWidth-1 ) + {} + + TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } + TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } + TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } + + std::size_t initialIndent; // indent of first line, or npos + std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos + std::size_t width; // maximum width of text, including indent. Longer text will wrap + }; + + class Text { + public: + Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) + : attr( _attr ) + { + const std::string wrappableBeforeChars = "[({<\t"; + const std::string wrappableAfterChars = "])}>-,./|\\"; + const std::string wrappableInsteadOfChars = " \n\r"; + std::string indent = _attr.initialIndent != std::string::npos + ? std::string( _attr.initialIndent, ' ' ) + : std::string( _attr.indent, ' ' ); + + typedef std::string::const_iterator iterator; + iterator it = _str.begin(); + const iterator strEnd = _str.end(); + + while( it != strEnd ) { + + if( lines.size() >= 1000 ) { + lines.push_back( "... message truncated due to excessive size" ); + return; + } + + std::string suffix; + std::size_t width = (std::min)( static_cast( strEnd-it ), _attr.width-static_cast( indent.size() ) ); + iterator itEnd = it+width; + iterator itNext = _str.end(); + + iterator itNewLine = std::find( it, itEnd, '\n' ); + if( itNewLine != itEnd ) + itEnd = itNewLine; + + if( itEnd != strEnd ) { + bool foundWrapPoint = false; + iterator findIt = itEnd; + do { + if( wrappableAfterChars.find( *findIt ) != std::string::npos && findIt != itEnd ) { + itEnd = findIt+1; + itNext = findIt+1; + foundWrapPoint = true; + } + else if( findIt > it && wrappableBeforeChars.find( *findIt ) != std::string::npos ) { + itEnd = findIt; + itNext = findIt; + foundWrapPoint = true; + } + else if( wrappableInsteadOfChars.find( *findIt ) != std::string::npos ) { + itNext = findIt+1; + itEnd = findIt; + foundWrapPoint = true; + } + if( findIt == it ) + break; + else + --findIt; + } + while( !foundWrapPoint ); + + if( !foundWrapPoint ) { + // No good wrap char, so we'll break mid word and add a hyphen + --itEnd; + itNext = itEnd; + suffix = "-"; + } + else { + while( itEnd > it && wrappableInsteadOfChars.find( *(itEnd-1) ) != std::string::npos ) + --itEnd; + } + } + lines.push_back( indent + std::string( it, itEnd ) + suffix ); + + if( indent.size() != _attr.indent ) + indent = std::string( _attr.indent, ' ' ); + it = itNext; + } + } + + typedef std::vector::const_iterator const_iterator; + + const_iterator begin() const { return lines.begin(); } + const_iterator end() const { return lines.end(); } + std::string const& last() const { return lines.back(); } + std::size_t size() const { return lines.size(); } + std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } + std::string toString() const { + std::ostringstream oss; + oss << *this; + return oss.str(); + } + + inline friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ) { + for( Text::const_iterator it = _text.begin(), itEnd = _text.end(); + it != itEnd; ++it ) { + if( it != _text.begin() ) + _stream << "\n"; + _stream << *it; + } + return _stream; + } + + private: + std::string str; + TextAttributes attr; + std::vector lines; + }; + +} // end namespace Tbc + +#ifdef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +} // end outer namespace +#endif + +#endif // TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +#undef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE + +namespace Catch { + using Tbc::Text; + using Tbc::TextAttributes; +} + +// #included from: catch_console_colour.hpp +#define TWOBLUECUBES_CATCH_CONSOLE_COLOUR_HPP_INCLUDED + +namespace Catch { + + struct Colour { + enum Code { + None = 0, + + White, + Red, + Green, + Blue, + Cyan, + Yellow, + Grey, + + Bright = 0x10, + + BrightRed = Bright | Red, + BrightGreen = Bright | Green, + LightGrey = Bright | Grey, + BrightWhite = Bright | White, + + // By intention + FileName = LightGrey, + Warning = Yellow, + ResultError = BrightRed, + ResultSuccess = BrightGreen, + ResultExpectedFailure = Warning, + + Error = BrightRed, + Success = Green, + + OriginalExpression = Cyan, + ReconstructedExpression = Yellow, + + SecondaryText = LightGrey, + Headers = White + }; + + // Use constructed object for RAII guard + Colour( Code _colourCode ); + Colour( Colour const& other ); + ~Colour(); + + // Use static method for one-shot changes + static void use( Code _colourCode ); + + private: + bool m_moved; + }; + + inline std::ostream& operator << ( std::ostream& os, Colour const& ) { return os; } + +} // end namespace Catch + +// #included from: catch_interfaces_reporter.h +#define TWOBLUECUBES_CATCH_INTERFACES_REPORTER_H_INCLUDED + +#include +#include +#include + +namespace Catch +{ + struct ReporterConfig { + explicit ReporterConfig( Ptr const& _fullConfig ) + : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {} + + ReporterConfig( Ptr const& _fullConfig, std::ostream& _stream ) + : m_stream( &_stream ), m_fullConfig( _fullConfig ) {} + + std::ostream& stream() const { return *m_stream; } + Ptr fullConfig() const { return m_fullConfig; } + + private: + std::ostream* m_stream; + Ptr m_fullConfig; + }; + + struct ReporterPreferences { + ReporterPreferences() + : shouldRedirectStdOut( false ) + {} + + bool shouldRedirectStdOut; + }; + + template + struct LazyStat : Option { + LazyStat() : used( false ) {} + LazyStat& operator=( T const& _value ) { + Option::operator=( _value ); + used = false; + return *this; + } + void reset() { + Option::reset(); + used = false; + } + bool used; + }; + + struct TestRunInfo { + TestRunInfo( std::string const& _name ) : name( _name ) {} + std::string name; + }; + struct GroupInfo { + GroupInfo( std::string const& _name, + std::size_t _groupIndex, + std::size_t _groupsCount ) + : name( _name ), + groupIndex( _groupIndex ), + groupsCounts( _groupsCount ) + {} + + std::string name; + std::size_t groupIndex; + std::size_t groupsCounts; + }; + + struct AssertionStats { + AssertionStats( AssertionResult const& _assertionResult, + std::vector const& _infoMessages, + Totals const& _totals ) + : assertionResult( _assertionResult ), + infoMessages( _infoMessages ), + totals( _totals ) + { + if( assertionResult.hasMessage() ) { + // Copy message into messages list. + // !TBD This should have been done earlier, somewhere + MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() ); + builder << assertionResult.getMessage(); + builder.m_info.message = builder.m_stream.str(); + + infoMessages.push_back( builder.m_info ); + } + } + virtual ~AssertionStats(); + +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + AssertionStats( AssertionStats const& ) = default; + AssertionStats( AssertionStats && ) = default; + AssertionStats& operator = ( AssertionStats const& ) = default; + AssertionStats& operator = ( AssertionStats && ) = default; +# endif + + AssertionResult assertionResult; + std::vector infoMessages; + Totals totals; + }; + + struct SectionStats { + SectionStats( SectionInfo const& _sectionInfo, + Counts const& _assertions, + double _durationInSeconds, + bool _missingAssertions ) + : sectionInfo( _sectionInfo ), + assertions( _assertions ), + durationInSeconds( _durationInSeconds ), + missingAssertions( _missingAssertions ) + {} + virtual ~SectionStats(); +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + SectionStats( SectionStats const& ) = default; + SectionStats( SectionStats && ) = default; + SectionStats& operator = ( SectionStats const& ) = default; + SectionStats& operator = ( SectionStats && ) = default; +# endif + + SectionInfo sectionInfo; + Counts assertions; + double durationInSeconds; + bool missingAssertions; + }; + + struct TestCaseStats { + TestCaseStats( TestCaseInfo const& _testInfo, + Totals const& _totals, + std::string const& _stdOut, + std::string const& _stdErr, + bool _aborting ) + : testInfo( _testInfo ), + totals( _totals ), + stdOut( _stdOut ), + stdErr( _stdErr ), + aborting( _aborting ) + {} + virtual ~TestCaseStats(); + +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + TestCaseStats( TestCaseStats const& ) = default; + TestCaseStats( TestCaseStats && ) = default; + TestCaseStats& operator = ( TestCaseStats const& ) = default; + TestCaseStats& operator = ( TestCaseStats && ) = default; +# endif + + TestCaseInfo testInfo; + Totals totals; + std::string stdOut; + std::string stdErr; + bool aborting; + }; + + struct TestGroupStats { + TestGroupStats( GroupInfo const& _groupInfo, + Totals const& _totals, + bool _aborting ) + : groupInfo( _groupInfo ), + totals( _totals ), + aborting( _aborting ) + {} + TestGroupStats( GroupInfo const& _groupInfo ) + : groupInfo( _groupInfo ), + aborting( false ) + {} + virtual ~TestGroupStats(); + +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + TestGroupStats( TestGroupStats const& ) = default; + TestGroupStats( TestGroupStats && ) = default; + TestGroupStats& operator = ( TestGroupStats const& ) = default; + TestGroupStats& operator = ( TestGroupStats && ) = default; +# endif + + GroupInfo groupInfo; + Totals totals; + bool aborting; + }; + + struct TestRunStats { + TestRunStats( TestRunInfo const& _runInfo, + Totals const& _totals, + bool _aborting ) + : runInfo( _runInfo ), + totals( _totals ), + aborting( _aborting ) + {} + virtual ~TestRunStats(); + +# ifndef CATCH_CONFIG_CPP11_GENERATED_METHODS + TestRunStats( TestRunStats const& _other ) + : runInfo( _other.runInfo ), + totals( _other.totals ), + aborting( _other.aborting ) + {} +# else + TestRunStats( TestRunStats const& ) = default; + TestRunStats( TestRunStats && ) = default; + TestRunStats& operator = ( TestRunStats const& ) = default; + TestRunStats& operator = ( TestRunStats && ) = default; +# endif + + TestRunInfo runInfo; + Totals totals; + bool aborting; + }; + + class MultipleReporters; + + struct IStreamingReporter : IShared { + virtual ~IStreamingReporter(); + + // Implementing class must also provide the following static method: + // static std::string getDescription(); + + virtual ReporterPreferences getPreferences() const = 0; + + virtual void noMatchingTestCases( std::string const& spec ) = 0; + + virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0; + virtual void testGroupStarting( GroupInfo const& groupInfo ) = 0; + + virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0; + virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0; + + virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0; + + // The return value indicates if the messages buffer should be cleared: + virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0; + + virtual void sectionEnded( SectionStats const& sectionStats ) = 0; + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0; + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0; + virtual void testRunEnded( TestRunStats const& testRunStats ) = 0; + + virtual void skipTest( TestCaseInfo const& testInfo ) = 0; + + virtual MultipleReporters* tryAsMulti() { return CATCH_NULL; } + }; + + struct IReporterFactory : IShared { + virtual ~IReporterFactory(); + virtual IStreamingReporter* create( ReporterConfig const& config ) const = 0; + virtual std::string getDescription() const = 0; + }; + + struct IReporterRegistry { + typedef std::map > FactoryMap; + typedef std::vector > Listeners; + + virtual ~IReporterRegistry(); + virtual IStreamingReporter* create( std::string const& name, Ptr const& config ) const = 0; + virtual FactoryMap const& getFactories() const = 0; + virtual Listeners const& getListeners() const = 0; + }; + + Ptr addReporter( Ptr const& existingReporter, Ptr const& additionalReporter ); + +} + +#include +#include + +namespace Catch { + + inline std::size_t listTests( Config const& config ) { + + TestSpec testSpec = config.testSpec(); + if( config.testSpec().hasFilters() ) + Catch::cout() << "Matching test cases:\n"; + else { + Catch::cout() << "All available test cases:\n"; + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } + + std::size_t matchedTests = 0; + TextAttributes nameAttr, descAttr, tagsAttr; + nameAttr.setInitialIndent( 2 ).setIndent( 4 ); + descAttr.setIndent( 4 ); + tagsAttr.setIndent( 6 ); + + std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + matchedTests++; + TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); + Colour::Code colour = testCaseInfo.isHidden() + ? Colour::SecondaryText + : Colour::None; + Colour colourGuard( colour ); + + Catch::cout() << Text( testCaseInfo.name, nameAttr ) << std::endl; + if( config.listExtraInfo() ) { + Catch::cout() << " " << testCaseInfo.lineInfo << std::endl; + std::string description = testCaseInfo.description; + if( description.empty() ) + description = "(NO DESCRIPTION)"; + Catch::cout() << Text( description, descAttr ) << std::endl; + } + if( !testCaseInfo.tags.empty() ) + Catch::cout() << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl; + } + + if( !config.testSpec().hasFilters() ) + Catch::cout() << pluralise( matchedTests, "test case" ) << '\n' << std::endl; + else + Catch::cout() << pluralise( matchedTests, "matching test case" ) << '\n' << std::endl; + return matchedTests; + } + + inline std::size_t listTestsNamesOnly( Config const& config ) { + TestSpec testSpec = config.testSpec(); + if( !config.testSpec().hasFilters() ) + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + std::size_t matchedTests = 0; + std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + matchedTests++; + TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); + if( startsWith( testCaseInfo.name, '#' ) ) + Catch::cout() << '"' << testCaseInfo.name << '"'; + else + Catch::cout() << testCaseInfo.name; + if ( config.listExtraInfo() ) + Catch::cout() << "\t@" << testCaseInfo.lineInfo; + Catch::cout() << std::endl; + } + return matchedTests; + } + + struct TagInfo { + TagInfo() : count ( 0 ) {} + void add( std::string const& spelling ) { + ++count; + spellings.insert( spelling ); + } + std::string all() const { + std::string out; + for( std::set::const_iterator it = spellings.begin(), itEnd = spellings.end(); + it != itEnd; + ++it ) + out += "[" + *it + "]"; + return out; + } + std::set spellings; + std::size_t count; + }; + + inline std::size_t listTags( Config const& config ) { + TestSpec testSpec = config.testSpec(); + if( config.testSpec().hasFilters() ) + Catch::cout() << "Tags for matching test cases:\n"; + else { + Catch::cout() << "All available tags:\n"; + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } + + std::map tagCounts; + + std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + for( std::set::const_iterator tagIt = it->getTestCaseInfo().tags.begin(), + tagItEnd = it->getTestCaseInfo().tags.end(); + tagIt != tagItEnd; + ++tagIt ) { + std::string tagName = *tagIt; + std::string lcaseTagName = toLower( tagName ); + std::map::iterator countIt = tagCounts.find( lcaseTagName ); + if( countIt == tagCounts.end() ) + countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first; + countIt->second.add( tagName ); + } + } + + for( std::map::const_iterator countIt = tagCounts.begin(), + countItEnd = tagCounts.end(); + countIt != countItEnd; + ++countIt ) { + std::ostringstream oss; + oss << " " << std::setw(2) << countIt->second.count << " "; + Text wrapper( countIt->second.all(), TextAttributes() + .setInitialIndent( 0 ) + .setIndent( oss.str().size() ) + .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) ); + Catch::cout() << oss.str() << wrapper << '\n'; + } + Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl; + return tagCounts.size(); + } + + inline std::size_t listReporters( Config const& /*config*/ ) { + Catch::cout() << "Available reporters:\n"; + IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); + IReporterRegistry::FactoryMap::const_iterator itBegin = factories.begin(), itEnd = factories.end(), it; + std::size_t maxNameLen = 0; + for(it = itBegin; it != itEnd; ++it ) + maxNameLen = (std::max)( maxNameLen, it->first.size() ); + + for(it = itBegin; it != itEnd; ++it ) { + Text wrapper( it->second->getDescription(), TextAttributes() + .setInitialIndent( 0 ) + .setIndent( 7+maxNameLen ) + .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) ); + Catch::cout() << " " + << it->first + << ':' + << std::string( maxNameLen - it->first.size() + 2, ' ' ) + << wrapper << '\n'; + } + Catch::cout() << std::endl; + return factories.size(); + } + + inline Option list( Config const& config ) { + Option listedCount; + if( config.listTests() || ( config.listExtraInfo() && !config.listTestNamesOnly() ) ) + listedCount = listedCount.valueOr(0) + listTests( config ); + if( config.listTestNamesOnly() ) + listedCount = listedCount.valueOr(0) + listTestsNamesOnly( config ); + if( config.listTags() ) + listedCount = listedCount.valueOr(0) + listTags( config ); + if( config.listReporters() ) + listedCount = listedCount.valueOr(0) + listReporters( config ); + return listedCount; + } + +} // end namespace Catch + +// #included from: internal/catch_run_context.hpp +#define TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED + +// #included from: catch_test_case_tracker.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_TRACKER_HPP_INCLUDED + +#include +#include +#include +#include +#include + +CATCH_INTERNAL_SUPPRESS_ETD_WARNINGS + +namespace Catch { +namespace TestCaseTracking { + + struct NameAndLocation { + std::string name; + SourceLineInfo location; + + NameAndLocation( std::string const& _name, SourceLineInfo const& _location ) + : name( _name ), + location( _location ) + {} + }; + + struct ITracker : SharedImpl<> { + virtual ~ITracker(); + + // static queries + virtual NameAndLocation const& nameAndLocation() const = 0; + + // dynamic queries + virtual bool isComplete() const = 0; // Successfully completed or failed + virtual bool isSuccessfullyCompleted() const = 0; + virtual bool isOpen() const = 0; // Started but not complete + virtual bool hasChildren() const = 0; + + virtual ITracker& parent() = 0; + + // actions + virtual void close() = 0; // Successfully complete + virtual void fail() = 0; + virtual void markAsNeedingAnotherRun() = 0; + + virtual void addChild( Ptr const& child ) = 0; + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) = 0; + virtual void openChild() = 0; + + // Debug/ checking + virtual bool isSectionTracker() const = 0; + virtual bool isIndexTracker() const = 0; + }; + + class TrackerContext { + + enum RunState { + NotStarted, + Executing, + CompletedCycle + }; + + Ptr m_rootTracker; + ITracker* m_currentTracker; + RunState m_runState; + + public: + + static TrackerContext& instance() { + static TrackerContext s_instance; + return s_instance; + } + + TrackerContext() + : m_currentTracker( CATCH_NULL ), + m_runState( NotStarted ) + {} + + ITracker& startRun(); + + void endRun() { + m_rootTracker.reset(); + m_currentTracker = CATCH_NULL; + m_runState = NotStarted; + } + + void startCycle() { + m_currentTracker = m_rootTracker.get(); + m_runState = Executing; + } + void completeCycle() { + m_runState = CompletedCycle; + } + + bool completedCycle() const { + return m_runState == CompletedCycle; + } + ITracker& currentTracker() { + return *m_currentTracker; + } + void setCurrentTracker( ITracker* tracker ) { + m_currentTracker = tracker; + } + }; + + class TrackerBase : public ITracker { + protected: + enum CycleState { + NotStarted, + Executing, + ExecutingChildren, + NeedsAnotherRun, + CompletedSuccessfully, + Failed + }; + class TrackerHasName { + NameAndLocation m_nameAndLocation; + public: + TrackerHasName( NameAndLocation const& nameAndLocation ) : m_nameAndLocation( nameAndLocation ) {} + bool operator ()( Ptr const& tracker ) { + return + tracker->nameAndLocation().name == m_nameAndLocation.name && + tracker->nameAndLocation().location == m_nameAndLocation.location; + } + }; + typedef std::vector > Children; + NameAndLocation m_nameAndLocation; + TrackerContext& m_ctx; + ITracker* m_parent; + Children m_children; + CycleState m_runState; + public: + TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : m_nameAndLocation( nameAndLocation ), + m_ctx( ctx ), + m_parent( parent ), + m_runState( NotStarted ) + {} + virtual ~TrackerBase(); + + virtual NameAndLocation const& nameAndLocation() const CATCH_OVERRIDE { + return m_nameAndLocation; + } + virtual bool isComplete() const CATCH_OVERRIDE { + return m_runState == CompletedSuccessfully || m_runState == Failed; + } + virtual bool isSuccessfullyCompleted() const CATCH_OVERRIDE { + return m_runState == CompletedSuccessfully; + } + virtual bool isOpen() const CATCH_OVERRIDE { + return m_runState != NotStarted && !isComplete(); + } + virtual bool hasChildren() const CATCH_OVERRIDE { + return !m_children.empty(); + } + + virtual void addChild( Ptr const& child ) CATCH_OVERRIDE { + m_children.push_back( child ); + } + + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) CATCH_OVERRIDE { + Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); + return( it != m_children.end() ) + ? it->get() + : CATCH_NULL; + } + virtual ITracker& parent() CATCH_OVERRIDE { + assert( m_parent ); // Should always be non-null except for root + return *m_parent; + } + + virtual void openChild() CATCH_OVERRIDE { + if( m_runState != ExecutingChildren ) { + m_runState = ExecutingChildren; + if( m_parent ) + m_parent->openChild(); + } + } + + virtual bool isSectionTracker() const CATCH_OVERRIDE { return false; } + virtual bool isIndexTracker() const CATCH_OVERRIDE { return false; } + + void open() { + m_runState = Executing; + moveToThis(); + if( m_parent ) + m_parent->openChild(); + } + + virtual void close() CATCH_OVERRIDE { + + // Close any still open children (e.g. generators) + while( &m_ctx.currentTracker() != this ) + m_ctx.currentTracker().close(); + + switch( m_runState ) { + case NotStarted: + case CompletedSuccessfully: + case Failed: + throw std::logic_error( "Illogical state" ); + + case NeedsAnotherRun: + break;; + + case Executing: + m_runState = CompletedSuccessfully; + break; + case ExecutingChildren: + if( m_children.empty() || m_children.back()->isComplete() ) + m_runState = CompletedSuccessfully; + break; + + default: + throw std::logic_error( "Unexpected state" ); + } + moveToParent(); + m_ctx.completeCycle(); + } + virtual void fail() CATCH_OVERRIDE { + m_runState = Failed; + if( m_parent ) + m_parent->markAsNeedingAnotherRun(); + moveToParent(); + m_ctx.completeCycle(); + } + virtual void markAsNeedingAnotherRun() CATCH_OVERRIDE { + m_runState = NeedsAnotherRun; + } + private: + void moveToParent() { + assert( m_parent ); + m_ctx.setCurrentTracker( m_parent ); + } + void moveToThis() { + m_ctx.setCurrentTracker( this ); + } + }; + + class SectionTracker : public TrackerBase { + std::vector m_filters; + public: + SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : TrackerBase( nameAndLocation, ctx, parent ) + { + if( parent ) { + while( !parent->isSectionTracker() ) + parent = &parent->parent(); + + SectionTracker& parentSection = static_cast( *parent ); + addNextFilters( parentSection.m_filters ); + } + } + virtual ~SectionTracker(); + + virtual bool isSectionTracker() const CATCH_OVERRIDE { return true; } + + static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) { + SectionTracker* section = CATCH_NULL; + + ITracker& currentTracker = ctx.currentTracker(); + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { + assert( childTracker ); + assert( childTracker->isSectionTracker() ); + section = static_cast( childTracker ); + } + else { + section = new SectionTracker( nameAndLocation, ctx, ¤tTracker ); + currentTracker.addChild( section ); + } + if( !ctx.completedCycle() ) + section->tryOpen(); + return *section; + } + + void tryOpen() { + if( !isComplete() && (m_filters.empty() || m_filters[0].empty() || m_filters[0] == m_nameAndLocation.name ) ) + open(); + } + + void addInitialFilters( std::vector const& filters ) { + if( !filters.empty() ) { + m_filters.push_back(""); // Root - should never be consulted + m_filters.push_back(""); // Test Case - not a section filter + m_filters.insert( m_filters.end(), filters.begin(), filters.end() ); + } + } + void addNextFilters( std::vector const& filters ) { + if( filters.size() > 1 ) + m_filters.insert( m_filters.end(), ++filters.begin(), filters.end() ); + } + }; + + class IndexTracker : public TrackerBase { + int m_size; + int m_index; + public: + IndexTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent, int size ) + : TrackerBase( nameAndLocation, ctx, parent ), + m_size( size ), + m_index( -1 ) + {} + virtual ~IndexTracker(); + + virtual bool isIndexTracker() const CATCH_OVERRIDE { return true; } + + static IndexTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation, int size ) { + IndexTracker* tracker = CATCH_NULL; + + ITracker& currentTracker = ctx.currentTracker(); + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { + assert( childTracker ); + assert( childTracker->isIndexTracker() ); + tracker = static_cast( childTracker ); + } + else { + tracker = new IndexTracker( nameAndLocation, ctx, ¤tTracker, size ); + currentTracker.addChild( tracker ); + } + + if( !ctx.completedCycle() && !tracker->isComplete() ) { + if( tracker->m_runState != ExecutingChildren && tracker->m_runState != NeedsAnotherRun ) + tracker->moveNext(); + tracker->open(); + } + + return *tracker; + } + + int index() const { return m_index; } + + void moveNext() { + m_index++; + m_children.clear(); + } + + virtual void close() CATCH_OVERRIDE { + TrackerBase::close(); + if( m_runState == CompletedSuccessfully && m_index < m_size-1 ) + m_runState = Executing; + } + }; + + inline ITracker& TrackerContext::startRun() { + m_rootTracker = new SectionTracker( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, CATCH_NULL ); + m_currentTracker = CATCH_NULL; + m_runState = Executing; + return *m_rootTracker; + } + +} // namespace TestCaseTracking + +using TestCaseTracking::ITracker; +using TestCaseTracking::TrackerContext; +using TestCaseTracking::SectionTracker; +using TestCaseTracking::IndexTracker; + +} // namespace Catch + +CATCH_INTERNAL_UNSUPPRESS_ETD_WARNINGS + +// #included from: catch_fatal_condition.hpp +#define TWOBLUECUBES_CATCH_FATAL_CONDITION_H_INCLUDED + +namespace Catch { + + // Report the error condition + inline void reportFatal( std::string const& message ) { + IContext& context = Catch::getCurrentContext(); + IResultCapture* resultCapture = context.getResultCapture(); + resultCapture->handleFatalErrorCondition( message ); + } + +} // namespace Catch + +#if defined ( CATCH_PLATFORM_WINDOWS ) ///////////////////////////////////////// +// #included from: catch_windows_h_proxy.h + +#define TWOBLUECUBES_CATCH_WINDOWS_H_PROXY_H_INCLUDED + +#ifdef CATCH_DEFINES_NOMINMAX +# define NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif + +#ifdef __AFXDLL +#include +#else +#include +#endif + +#ifdef CATCH_DEFINES_NOMINMAX +# undef NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# undef WIN32_LEAN_AND_MEAN +#endif + + +# if !defined ( CATCH_CONFIG_WINDOWS_SEH ) + +namespace Catch { + struct FatalConditionHandler { + void reset() {} + }; +} + +# else // CATCH_CONFIG_WINDOWS_SEH is defined + +namespace Catch { + + struct SignalDefs { DWORD id; const char* name; }; + extern SignalDefs signalDefs[]; + // There is no 1-1 mapping between signals and windows exceptions. + // Windows can easily distinguish between SO and SigSegV, + // but SigInt, SigTerm, etc are handled differently. + SignalDefs signalDefs[] = { + { EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL - Illegal instruction signal" }, + { EXCEPTION_STACK_OVERFLOW, "SIGSEGV - Stack overflow" }, + { EXCEPTION_ACCESS_VIOLATION, "SIGSEGV - Segmentation violation signal" }, + { EXCEPTION_INT_DIVIDE_BY_ZERO, "Divide by zero error" }, + }; + + struct FatalConditionHandler { + + static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) { + for (int i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + if (ExceptionInfo->ExceptionRecord->ExceptionCode == signalDefs[i].id) { + reportFatal(signalDefs[i].name); + } + } + // If its not an exception we care about, pass it along. + // This stops us from eating debugger breaks etc. + return EXCEPTION_CONTINUE_SEARCH; + } + + FatalConditionHandler() { + isSet = true; + // 32k seems enough for Catch to handle stack overflow, + // but the value was found experimentally, so there is no strong guarantee + guaranteeSize = 32 * 1024; + exceptionHandlerHandle = CATCH_NULL; + // Register as first handler in current chain + exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException); + // Pass in guarantee size to be filled + SetThreadStackGuarantee(&guaranteeSize); + } + + static void reset() { + if (isSet) { + // Unregister handler and restore the old guarantee + RemoveVectoredExceptionHandler(exceptionHandlerHandle); + SetThreadStackGuarantee(&guaranteeSize); + exceptionHandlerHandle = CATCH_NULL; + isSet = false; + } + } + + ~FatalConditionHandler() { + reset(); + } + private: + static bool isSet; + static ULONG guaranteeSize; + static PVOID exceptionHandlerHandle; + }; + + bool FatalConditionHandler::isSet = false; + ULONG FatalConditionHandler::guaranteeSize = 0; + PVOID FatalConditionHandler::exceptionHandlerHandle = CATCH_NULL; + +} // namespace Catch + +# endif // CATCH_CONFIG_WINDOWS_SEH + +#else // Not Windows - assumed to be POSIX compatible ////////////////////////// + +# if !defined(CATCH_CONFIG_POSIX_SIGNALS) + +namespace Catch { + struct FatalConditionHandler { + void reset() {} + }; +} + +# else // CATCH_CONFIG_POSIX_SIGNALS is defined + +#include + +namespace Catch { + + struct SignalDefs { + int id; + const char* name; + }; + extern SignalDefs signalDefs[]; + SignalDefs signalDefs[] = { + { SIGINT, "SIGINT - Terminal interrupt signal" }, + { SIGILL, "SIGILL - Illegal instruction signal" }, + { SIGFPE, "SIGFPE - Floating point error signal" }, + { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, + { SIGTERM, "SIGTERM - Termination request signal" }, + { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } + }; + + struct FatalConditionHandler { + + static bool isSet; + static struct sigaction oldSigActions [sizeof(signalDefs)/sizeof(SignalDefs)]; + static stack_t oldSigStack; + static char altStackMem[SIGSTKSZ]; + + static void handleSignal( int sig ) { + std::string name = ""; + for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + SignalDefs &def = signalDefs[i]; + if (sig == def.id) { + name = def.name; + break; + } + } + reset(); + reportFatal(name); + raise( sig ); + } + + FatalConditionHandler() { + isSet = true; + stack_t sigStack; + sigStack.ss_sp = altStackMem; + sigStack.ss_size = SIGSTKSZ; + sigStack.ss_flags = 0; + sigaltstack(&sigStack, &oldSigStack); + struct sigaction sa = { 0 }; + + sa.sa_handler = handleSignal; + sa.sa_flags = SA_ONSTACK; + for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) { + sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); + } + } + + ~FatalConditionHandler() { + reset(); + } + static void reset() { + if( isSet ) { + // Set signals back to previous values -- hopefully nobody overwrote them in the meantime + for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) { + sigaction(signalDefs[i].id, &oldSigActions[i], CATCH_NULL); + } + // Return the old stack + sigaltstack(&oldSigStack, CATCH_NULL); + isSet = false; + } + } + }; + + bool FatalConditionHandler::isSet = false; + struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {}; + stack_t FatalConditionHandler::oldSigStack = {}; + char FatalConditionHandler::altStackMem[SIGSTKSZ] = {}; + +} // namespace Catch + +# endif // CATCH_CONFIG_POSIX_SIGNALS + +#endif // not Windows + +#include +#include + +namespace Catch { + + class StreamRedirect { + + public: + StreamRedirect( std::ostream& stream, std::string& targetString ) + : m_stream( stream ), + m_prevBuf( stream.rdbuf() ), + m_targetString( targetString ) + { + stream.rdbuf( m_oss.rdbuf() ); + } + + ~StreamRedirect() { + m_targetString += m_oss.str(); + m_stream.rdbuf( m_prevBuf ); + } + + private: + std::ostream& m_stream; + std::streambuf* m_prevBuf; + std::ostringstream m_oss; + std::string& m_targetString; + }; + + /////////////////////////////////////////////////////////////////////////// + + class RunContext : public IResultCapture, public IRunner { + + RunContext( RunContext const& ); + void operator =( RunContext const& ); + + public: + + explicit RunContext( Ptr const& _config, Ptr const& reporter ) + : m_runInfo( _config->name() ), + m_context( getCurrentMutableContext() ), + m_activeTestCase( CATCH_NULL ), + m_config( _config ), + m_reporter( reporter ), + m_shouldReportUnexpected ( true ) + { + m_context.setRunner( this ); + m_context.setConfig( m_config ); + m_context.setResultCapture( this ); + m_reporter->testRunStarting( m_runInfo ); + } + + virtual ~RunContext() { + m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, aborting() ) ); + } + + void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount ) { + m_reporter->testGroupStarting( GroupInfo( testSpec, groupIndex, groupsCount ) ); + } + void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount ) { + m_reporter->testGroupEnded( TestGroupStats( GroupInfo( testSpec, groupIndex, groupsCount ), totals, aborting() ) ); + } + + Totals runTest( TestCase const& testCase ) { + Totals prevTotals = m_totals; + + std::string redirectedCout; + std::string redirectedCerr; + + TestCaseInfo testInfo = testCase.getTestCaseInfo(); + + m_reporter->testCaseStarting( testInfo ); + + m_activeTestCase = &testCase; + + do { + ITracker& rootTracker = m_trackerContext.startRun(); + assert( rootTracker.isSectionTracker() ); + static_cast( rootTracker ).addInitialFilters( m_config->getSectionsToRun() ); + do { + m_trackerContext.startCycle(); + m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( testInfo.name, testInfo.lineInfo ) ); + runCurrentTest( redirectedCout, redirectedCerr ); + } + while( !m_testCaseTracker->isSuccessfullyCompleted() && !aborting() ); + } + // !TBD: deprecated - this will be replaced by indexed trackers + while( getCurrentContext().advanceGeneratorsForCurrentTest() && !aborting() ); + + Totals deltaTotals = m_totals.delta( prevTotals ); + if( testInfo.expectedToFail() && deltaTotals.testCases.passed > 0 ) { + deltaTotals.assertions.failed++; + deltaTotals.testCases.passed--; + deltaTotals.testCases.failed++; + } + m_totals.testCases += deltaTotals.testCases; + m_reporter->testCaseEnded( TestCaseStats( testInfo, + deltaTotals, + redirectedCout, + redirectedCerr, + aborting() ) ); + + m_activeTestCase = CATCH_NULL; + m_testCaseTracker = CATCH_NULL; + + return deltaTotals; + } + + Ptr config() const { + return m_config; + } + + private: // IResultCapture + + virtual void assertionEnded( AssertionResult const& result ) { + if( result.getResultType() == ResultWas::Ok ) { + m_totals.assertions.passed++; + } + else if( !result.isOk() ) { + m_totals.assertions.failed++; + } + + // We have no use for the return value (whether messages should be cleared), because messages were made scoped + // and should be let to clear themselves out. + static_cast(m_reporter->assertionEnded(AssertionStats(result, m_messages, m_totals))); + + // Reset working state + m_lastAssertionInfo = AssertionInfo( "", m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); + m_lastResult = result; + } + + virtual bool sectionStarted ( + SectionInfo const& sectionInfo, + Counts& assertions + ) + { + ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( sectionInfo.name, sectionInfo.lineInfo ) ); + if( !sectionTracker.isOpen() ) + return false; + m_activeSections.push_back( §ionTracker ); + + m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo; + + m_reporter->sectionStarting( sectionInfo ); + + assertions = m_totals.assertions; + + return true; + } + bool testForMissingAssertions( Counts& assertions ) { + if( assertions.total() != 0 ) + return false; + if( !m_config->warnAboutMissingAssertions() ) + return false; + if( m_trackerContext.currentTracker().hasChildren() ) + return false; + m_totals.assertions.failed++; + assertions.failed++; + return true; + } + + virtual void sectionEnded( SectionEndInfo const& endInfo ) { + Counts assertions = m_totals.assertions - endInfo.prevAssertions; + bool missingAssertions = testForMissingAssertions( assertions ); + + if( !m_activeSections.empty() ) { + m_activeSections.back()->close(); + m_activeSections.pop_back(); + } + + m_reporter->sectionEnded( SectionStats( endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions ) ); + m_messages.clear(); + } + + virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) { + if( m_unfinishedSections.empty() ) + m_activeSections.back()->fail(); + else + m_activeSections.back()->close(); + m_activeSections.pop_back(); + + m_unfinishedSections.push_back( endInfo ); + } + + virtual void pushScopedMessage( MessageInfo const& message ) { + m_messages.push_back( message ); + } + + virtual void popScopedMessage( MessageInfo const& message ) { + m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), message ), m_messages.end() ); + } + + virtual std::string getCurrentTestName() const { + return m_activeTestCase + ? m_activeTestCase->getTestCaseInfo().name + : std::string(); + } + + virtual const AssertionResult* getLastResult() const { + return &m_lastResult; + } + + virtual void exceptionEarlyReported() { + m_shouldReportUnexpected = false; + } + + virtual void handleFatalErrorCondition( std::string const& message ) { + // Don't rebuild the result -- the stringification itself can cause more fatal errors + // Instead, fake a result data. + AssertionResultData tempResult; + tempResult.resultType = ResultWas::FatalErrorCondition; + tempResult.message = message; + AssertionResult result(m_lastAssertionInfo, tempResult); + + getResultCapture().assertionEnded(result); + + handleUnfinishedSections(); + + // Recreate section for test case (as we will lose the one that was in scope) + TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); + SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); + + Counts assertions; + assertions.failed = 1; + SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false ); + m_reporter->sectionEnded( testCaseSectionStats ); + + TestCaseInfo testInfo = m_activeTestCase->getTestCaseInfo(); + + Totals deltaTotals; + deltaTotals.testCases.failed = 1; + m_reporter->testCaseEnded( TestCaseStats( testInfo, + deltaTotals, + std::string(), + std::string(), + false ) ); + m_totals.testCases.failed++; + testGroupEnded( std::string(), m_totals, 1, 1 ); + m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) ); + } + + public: + // !TBD We need to do this another way! + bool aborting() const { + return m_totals.assertions.failed == static_cast( m_config->abortAfter() ); + } + + private: + + void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr ) { + TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); + SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); + m_reporter->sectionStarting( testCaseSection ); + Counts prevAssertions = m_totals.assertions; + double duration = 0; + m_shouldReportUnexpected = true; + try { + m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal ); + + seedRng( *m_config ); + + Timer timer; + timer.start(); + if( m_reporter->getPreferences().shouldRedirectStdOut ) { + StreamRedirect coutRedir( Catch::cout(), redirectedCout ); + StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr ); + invokeActiveTestCase(); + } + else { + invokeActiveTestCase(); + } + duration = timer.getElapsedSeconds(); + } + catch( TestFailureException& ) { + // This just means the test was aborted due to failure + } + catch(...) { + // Under CATCH_CONFIG_FAST_COMPILE, unexpected exceptions under REQUIRE assertions + // are reported without translation at the point of origin. + if (m_shouldReportUnexpected) { + makeUnexpectedResultBuilder().useActiveException(); + } + } + m_testCaseTracker->close(); + handleUnfinishedSections(); + m_messages.clear(); + + Counts assertions = m_totals.assertions - prevAssertions; + bool missingAssertions = testForMissingAssertions( assertions ); + + if( testCaseInfo.okToFail() ) { + std::swap( assertions.failedButOk, assertions.failed ); + m_totals.assertions.failed -= assertions.failedButOk; + m_totals.assertions.failedButOk += assertions.failedButOk; + } + + SectionStats testCaseSectionStats( testCaseSection, assertions, duration, missingAssertions ); + m_reporter->sectionEnded( testCaseSectionStats ); + } + + void invokeActiveTestCase() { + FatalConditionHandler fatalConditionHandler; // Handle signals + m_activeTestCase->invoke(); + fatalConditionHandler.reset(); + } + + private: + + ResultBuilder makeUnexpectedResultBuilder() const { + return ResultBuilder( m_lastAssertionInfo.macroName, + m_lastAssertionInfo.lineInfo, + m_lastAssertionInfo.capturedExpression, + m_lastAssertionInfo.resultDisposition ); + } + + void handleUnfinishedSections() { + // If sections ended prematurely due to an exception we stored their + // infos here so we can tear them down outside the unwind process. + for( std::vector::const_reverse_iterator it = m_unfinishedSections.rbegin(), + itEnd = m_unfinishedSections.rend(); + it != itEnd; + ++it ) + sectionEnded( *it ); + m_unfinishedSections.clear(); + } + + TestRunInfo m_runInfo; + IMutableContext& m_context; + TestCase const* m_activeTestCase; + ITracker* m_testCaseTracker; + ITracker* m_currentSectionTracker; + AssertionResult m_lastResult; + + Ptr m_config; + Totals m_totals; + Ptr m_reporter; + std::vector m_messages; + AssertionInfo m_lastAssertionInfo; + std::vector m_unfinishedSections; + std::vector m_activeSections; + TrackerContext m_trackerContext; + bool m_shouldReportUnexpected; + }; + + IResultCapture& getResultCapture() { + if( IResultCapture* capture = getCurrentContext().getResultCapture() ) + return *capture; + else + throw std::logic_error( "No result capture instance" ); + } + +} // end namespace Catch + +// #included from: internal/catch_version.h +#define TWOBLUECUBES_CATCH_VERSION_H_INCLUDED + +namespace Catch { + + // Versioning information + struct Version { + Version( unsigned int _majorVersion, + unsigned int _minorVersion, + unsigned int _patchNumber, + char const * const _branchName, + unsigned int _buildNumber ); + + unsigned int const majorVersion; + unsigned int const minorVersion; + unsigned int const patchNumber; + + // buildNumber is only used if branchName is not null + char const * const branchName; + unsigned int const buildNumber; + + friend std::ostream& operator << ( std::ostream& os, Version const& version ); + + private: + void operator=( Version const& ); + }; + + inline Version libraryVersion(); +} + +#include +#include +#include + +namespace Catch { + + Ptr createReporter( std::string const& reporterName, Ptr const& config ) { + Ptr reporter = getRegistryHub().getReporterRegistry().create( reporterName, config.get() ); + if( !reporter ) { + std::ostringstream oss; + oss << "No reporter registered with name: '" << reporterName << "'"; + throw std::domain_error( oss.str() ); + } + return reporter; + } + + Ptr makeReporter( Ptr const& config ) { + std::vector reporters = config->getReporterNames(); + if( reporters.empty() ) + reporters.push_back( "console" ); + + Ptr reporter; + for( std::vector::const_iterator it = reporters.begin(), itEnd = reporters.end(); + it != itEnd; + ++it ) + reporter = addReporter( reporter, createReporter( *it, config ) ); + return reporter; + } + Ptr addListeners( Ptr const& config, Ptr reporters ) { + IReporterRegistry::Listeners listeners = getRegistryHub().getReporterRegistry().getListeners(); + for( IReporterRegistry::Listeners::const_iterator it = listeners.begin(), itEnd = listeners.end(); + it != itEnd; + ++it ) + reporters = addReporter(reporters, (*it)->create( ReporterConfig( config ) ) ); + return reporters; + } + + Totals runTests( Ptr const& config ) { + + Ptr iconfig = config.get(); + + Ptr reporter = makeReporter( config ); + reporter = addListeners( iconfig, reporter ); + + RunContext context( iconfig, reporter ); + + Totals totals; + + context.testGroupStarting( config->name(), 1, 1 ); + + TestSpec testSpec = config->testSpec(); + if( !testSpec.hasFilters() ) + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "~[.]" ).testSpec(); // All not hidden tests + + std::vector const& allTestCases = getAllTestCasesSorted( *iconfig ); + for( std::vector::const_iterator it = allTestCases.begin(), itEnd = allTestCases.end(); + it != itEnd; + ++it ) { + if( !context.aborting() && matchTest( *it, testSpec, *iconfig ) ) + totals += context.runTest( *it ); + else + reporter->skipTest( *it ); + } + + context.testGroupEnded( iconfig->name(), totals, 1, 1 ); + return totals; + } + + void applyFilenamesAsTags( IConfig const& config ) { + std::vector const& tests = getAllTestCasesSorted( config ); + for(std::size_t i = 0; i < tests.size(); ++i ) { + TestCase& test = const_cast( tests[i] ); + std::set tags = test.tags; + + std::string filename = test.lineInfo.file; + std::string::size_type lastSlash = filename.find_last_of( "\\/" ); + if( lastSlash != std::string::npos ) + filename = filename.substr( lastSlash+1 ); + + std::string::size_type lastDot = filename.find_last_of( "." ); + if( lastDot != std::string::npos ) + filename = filename.substr( 0, lastDot ); + + tags.insert( "#" + filename ); + setTags( test, tags ); + } + } + + class Session : NonCopyable { + static bool alreadyInstantiated; + + public: + + struct OnUnusedOptions { enum DoWhat { Ignore, Fail }; }; + + Session() + : m_cli( makeCommandLineParser() ) { + if( alreadyInstantiated ) { + std::string msg = "Only one instance of Catch::Session can ever be used"; + Catch::cerr() << msg << std::endl; + throw std::logic_error( msg ); + } + alreadyInstantiated = true; + } + ~Session() { + Catch::cleanUp(); + } + + void showHelp( std::string const& processName ) { + Catch::cout() << "\nCatch v" << libraryVersion() << "\n"; + + m_cli.usage( Catch::cout(), processName ); + Catch::cout() << "For more detail usage please see the project docs\n" << std::endl; + } + + int applyCommandLine( int argc, char const* const* const argv, OnUnusedOptions::DoWhat unusedOptionBehaviour = OnUnusedOptions::Fail ) { + try { + m_cli.setThrowOnUnrecognisedTokens( unusedOptionBehaviour == OnUnusedOptions::Fail ); + m_unusedTokens = m_cli.parseInto( Clara::argsToVector( argc, argv ), m_configData ); + if( m_configData.showHelp ) + showHelp( m_configData.processName ); + m_config.reset(); + } + catch( std::exception& ex ) { + { + Colour colourGuard( Colour::Red ); + Catch::cerr() + << "\nError(s) in input:\n" + << Text( ex.what(), TextAttributes().setIndent(2) ) + << "\n\n"; + } + m_cli.usage( Catch::cout(), m_configData.processName ); + return (std::numeric_limits::max)(); + } + return 0; + } + + void useConfigData( ConfigData const& _configData ) { + m_configData = _configData; + m_config.reset(); + } + + int run( int argc, char const* const* const argv ) { + + int returnCode = applyCommandLine( argc, argv ); + if( returnCode == 0 ) + returnCode = run(); + return returnCode; + } + + #if defined(WIN32) && defined(UNICODE) + int run( int argc, wchar_t const* const* const argv ) { + + char **utf8Argv = new char *[ argc ]; + + for ( int i = 0; i < argc; ++i ) { + int bufSize = WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, NULL, 0, NULL, NULL ); + + utf8Argv[ i ] = new char[ bufSize ]; + + WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, NULL, NULL ); + } + + int returnCode = applyCommandLine( argc, utf8Argv ); + if( returnCode == 0 ) + returnCode = run(); + + for ( int i = 0; i < argc; ++i ) + delete [] utf8Argv[ i ]; + + delete [] utf8Argv; + + return returnCode; + } + #endif + + int run() { + if( m_configData.showHelp ) + return 0; + + try + { + config(); // Force config to be constructed + + seedRng( *m_config ); + + if( m_configData.filenamesAsTags ) + applyFilenamesAsTags( *m_config ); + + // Handle list request + if( Option listed = list( config() ) ) + return static_cast( *listed ); + + return static_cast( runTests( m_config ).assertions.failed ); + } + catch( std::exception& ex ) { + Catch::cerr() << ex.what() << std::endl; + return (std::numeric_limits::max)(); + } + } + + Clara::CommandLine const& cli() const { + return m_cli; + } + std::vector const& unusedTokens() const { + return m_unusedTokens; + } + ConfigData& configData() { + return m_configData; + } + Config& config() { + if( !m_config ) + m_config = new Config( m_configData ); + return *m_config; + } + private: + Clara::CommandLine m_cli; + std::vector m_unusedTokens; + ConfigData m_configData; + Ptr m_config; + }; + + bool Session::alreadyInstantiated = false; + +} // end namespace Catch + +// #included from: catch_registry_hub.hpp +#define TWOBLUECUBES_CATCH_REGISTRY_HUB_HPP_INCLUDED + +// #included from: catch_test_case_registry_impl.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_REGISTRY_IMPL_HPP_INCLUDED + +#include +#include +#include +#include + +namespace Catch { + + struct RandomNumberGenerator { + typedef std::ptrdiff_t result_type; + + result_type operator()( result_type n ) const { return std::rand() % n; } + +#ifdef CATCH_CONFIG_CPP11_SHUFFLE + static constexpr result_type min() { return 0; } + static constexpr result_type max() { return 1000000; } + result_type operator()() const { return std::rand() % max(); } +#endif + template + static void shuffle( V& vector ) { + RandomNumberGenerator rng; +#ifdef CATCH_CONFIG_CPP11_SHUFFLE + std::shuffle( vector.begin(), vector.end(), rng ); +#else + std::random_shuffle( vector.begin(), vector.end(), rng ); +#endif + } + }; + + inline std::vector sortTests( IConfig const& config, std::vector const& unsortedTestCases ) { + + std::vector sorted = unsortedTestCases; + + switch( config.runOrder() ) { + case RunTests::InLexicographicalOrder: + std::sort( sorted.begin(), sorted.end() ); + break; + case RunTests::InRandomOrder: + { + seedRng( config ); + RandomNumberGenerator::shuffle( sorted ); + } + break; + case RunTests::InDeclarationOrder: + // already in declaration order + break; + } + return sorted; + } + bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ) { + return testSpec.matches( testCase ) && ( config.allowThrows() || !testCase.throws() ); + } + + void enforceNoDuplicateTestCases( std::vector const& functions ) { + std::set seenFunctions; + for( std::vector::const_iterator it = functions.begin(), itEnd = functions.end(); + it != itEnd; + ++it ) { + std::pair::const_iterator, bool> prev = seenFunctions.insert( *it ); + if( !prev.second ) { + std::ostringstream ss; + + ss << Colour( Colour::Red ) + << "error: TEST_CASE( \"" << it->name << "\" ) already defined.\n" + << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << '\n' + << "\tRedefined at " << it->getTestCaseInfo().lineInfo << std::endl; + + throw std::runtime_error(ss.str()); + } + } + } + + std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ) { + std::vector filtered; + filtered.reserve( testCases.size() ); + for( std::vector::const_iterator it = testCases.begin(), itEnd = testCases.end(); + it != itEnd; + ++it ) + if( matchTest( *it, testSpec, config ) ) + filtered.push_back( *it ); + return filtered; + } + std::vector const& getAllTestCasesSorted( IConfig const& config ) { + return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config ); + } + + class TestRegistry : public ITestCaseRegistry { + public: + TestRegistry() + : m_currentSortOrder( RunTests::InDeclarationOrder ), + m_unnamedCount( 0 ) + {} + virtual ~TestRegistry(); + + virtual void registerTest( TestCase const& testCase ) { + std::string name = testCase.getTestCaseInfo().name; + if( name.empty() ) { + std::ostringstream oss; + oss << "Anonymous test case " << ++m_unnamedCount; + return registerTest( testCase.withName( oss.str() ) ); + } + m_functions.push_back( testCase ); + } + + virtual std::vector const& getAllTests() const { + return m_functions; + } + virtual std::vector const& getAllTestsSorted( IConfig const& config ) const { + if( m_sortedFunctions.empty() ) + enforceNoDuplicateTestCases( m_functions ); + + if( m_currentSortOrder != config.runOrder() || m_sortedFunctions.empty() ) { + m_sortedFunctions = sortTests( config, m_functions ); + m_currentSortOrder = config.runOrder(); + } + return m_sortedFunctions; + } + + private: + std::vector m_functions; + mutable RunTests::InWhatOrder m_currentSortOrder; + mutable std::vector m_sortedFunctions; + size_t m_unnamedCount; + std::ios_base::Init m_ostreamInit; // Forces cout/ cerr to be initialised + }; + + /////////////////////////////////////////////////////////////////////////// + + class FreeFunctionTestCase : public SharedImpl { + public: + + FreeFunctionTestCase( TestFunction fun ) : m_fun( fun ) {} + + virtual void invoke() const { + m_fun(); + } + + private: + virtual ~FreeFunctionTestCase(); + + TestFunction m_fun; + }; + + inline std::string extractClassName( std::string const& classOrQualifiedMethodName ) { + std::string className = classOrQualifiedMethodName; + if( startsWith( className, '&' ) ) + { + std::size_t lastColons = className.rfind( "::" ); + std::size_t penultimateColons = className.rfind( "::", lastColons-1 ); + if( penultimateColons == std::string::npos ) + penultimateColons = 1; + className = className.substr( penultimateColons, lastColons-penultimateColons ); + } + return className; + } + + void registerTestCase + ( ITestCase* testCase, + char const* classOrQualifiedMethodName, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ) { + + getMutableRegistryHub().registerTest + ( makeTestCase + ( testCase, + extractClassName( classOrQualifiedMethodName ), + nameAndDesc.name, + nameAndDesc.description, + lineInfo ) ); + } + void registerTestCaseFunction + ( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ) { + registerTestCase( new FreeFunctionTestCase( function ), "", nameAndDesc, lineInfo ); + } + + /////////////////////////////////////////////////////////////////////////// + + AutoReg::AutoReg + ( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ) { + registerTestCaseFunction( function, lineInfo, nameAndDesc ); + } + + AutoReg::~AutoReg() {} + +} // end namespace Catch + +// #included from: catch_reporter_registry.hpp +#define TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED + +#include + +namespace Catch { + + class ReporterRegistry : public IReporterRegistry { + + public: + + virtual ~ReporterRegistry() CATCH_OVERRIDE {} + + virtual IStreamingReporter* create( std::string const& name, Ptr const& config ) const CATCH_OVERRIDE { + FactoryMap::const_iterator it = m_factories.find( name ); + if( it == m_factories.end() ) + return CATCH_NULL; + return it->second->create( ReporterConfig( config ) ); + } + + void registerReporter( std::string const& name, Ptr const& factory ) { + m_factories.insert( std::make_pair( name, factory ) ); + } + void registerListener( Ptr const& factory ) { + m_listeners.push_back( factory ); + } + + virtual FactoryMap const& getFactories() const CATCH_OVERRIDE { + return m_factories; + } + virtual Listeners const& getListeners() const CATCH_OVERRIDE { + return m_listeners; + } + + private: + FactoryMap m_factories; + Listeners m_listeners; + }; +} + +// #included from: catch_exception_translator_registry.hpp +#define TWOBLUECUBES_CATCH_EXCEPTION_TRANSLATOR_REGISTRY_HPP_INCLUDED + +#ifdef __OBJC__ +#import "Foundation/Foundation.h" +#endif + +namespace Catch { + + class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { + public: + ~ExceptionTranslatorRegistry() { + deleteAll( m_translators ); + } + + virtual void registerTranslator( const IExceptionTranslator* translator ) { + m_translators.push_back( translator ); + } + + virtual std::string translateActiveException() const { + try { +#ifdef __OBJC__ + // In Objective-C try objective-c exceptions first + @try { + return tryTranslators(); + } + @catch (NSException *exception) { + return Catch::toString( [exception description] ); + } +#else + return tryTranslators(); +#endif + } + catch( TestFailureException& ) { + throw; + } + catch( std::exception& ex ) { + return ex.what(); + } + catch( std::string& msg ) { + return msg; + } + catch( const char* msg ) { + return msg; + } + catch(...) { + return "Unknown exception"; + } + } + + std::string tryTranslators() const { + if( m_translators.empty() ) + throw; + else + return m_translators[0]->translate( m_translators.begin()+1, m_translators.end() ); + } + + private: + std::vector m_translators; + }; +} + +// #included from: catch_tag_alias_registry.h +#define TWOBLUECUBES_CATCH_TAG_ALIAS_REGISTRY_H_INCLUDED + +#include + +namespace Catch { + + class TagAliasRegistry : public ITagAliasRegistry { + public: + virtual ~TagAliasRegistry(); + virtual Option find( std::string const& alias ) const; + virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const; + void add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ); + + private: + std::map m_registry; + }; + +} // end namespace Catch + +namespace Catch { + + namespace { + + class RegistryHub : public IRegistryHub, public IMutableRegistryHub { + + RegistryHub( RegistryHub const& ); + void operator=( RegistryHub const& ); + + public: // IRegistryHub + RegistryHub() { + } + virtual IReporterRegistry const& getReporterRegistry() const CATCH_OVERRIDE { + return m_reporterRegistry; + } + virtual ITestCaseRegistry const& getTestCaseRegistry() const CATCH_OVERRIDE { + return m_testCaseRegistry; + } + virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() CATCH_OVERRIDE { + return m_exceptionTranslatorRegistry; + } + virtual ITagAliasRegistry const& getTagAliasRegistry() const CATCH_OVERRIDE { + return m_tagAliasRegistry; + } + + public: // IMutableRegistryHub + virtual void registerReporter( std::string const& name, Ptr const& factory ) CATCH_OVERRIDE { + m_reporterRegistry.registerReporter( name, factory ); + } + virtual void registerListener( Ptr const& factory ) CATCH_OVERRIDE { + m_reporterRegistry.registerListener( factory ); + } + virtual void registerTest( TestCase const& testInfo ) CATCH_OVERRIDE { + m_testCaseRegistry.registerTest( testInfo ); + } + virtual void registerTranslator( const IExceptionTranslator* translator ) CATCH_OVERRIDE { + m_exceptionTranslatorRegistry.registerTranslator( translator ); + } + virtual void registerTagAlias( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) CATCH_OVERRIDE { + m_tagAliasRegistry.add( alias, tag, lineInfo ); + } + + private: + TestRegistry m_testCaseRegistry; + ReporterRegistry m_reporterRegistry; + ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; + TagAliasRegistry m_tagAliasRegistry; + }; + + // Single, global, instance + inline RegistryHub*& getTheRegistryHub() { + static RegistryHub* theRegistryHub = CATCH_NULL; + if( !theRegistryHub ) + theRegistryHub = new RegistryHub(); + return theRegistryHub; + } + } + + IRegistryHub& getRegistryHub() { + return *getTheRegistryHub(); + } + IMutableRegistryHub& getMutableRegistryHub() { + return *getTheRegistryHub(); + } + void cleanUp() { + delete getTheRegistryHub(); + getTheRegistryHub() = CATCH_NULL; + cleanUpContext(); + } + std::string translateActiveException() { + return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); + } + +} // end namespace Catch + +// #included from: catch_notimplemented_exception.hpp +#define TWOBLUECUBES_CATCH_NOTIMPLEMENTED_EXCEPTION_HPP_INCLUDED + +#include + +namespace Catch { + + NotImplementedException::NotImplementedException( SourceLineInfo const& lineInfo ) + : m_lineInfo( lineInfo ) { + std::ostringstream oss; + oss << lineInfo << ": function "; + oss << "not implemented"; + m_what = oss.str(); + } + + const char* NotImplementedException::what() const CATCH_NOEXCEPT { + return m_what.c_str(); + } + +} // end namespace Catch + +// #included from: catch_context_impl.hpp +#define TWOBLUECUBES_CATCH_CONTEXT_IMPL_HPP_INCLUDED + +// #included from: catch_stream.hpp +#define TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED + +#include +#include +#include + +namespace Catch { + + template + class StreamBufImpl : public StreamBufBase { + char data[bufferSize]; + WriterF m_writer; + + public: + StreamBufImpl() { + setp( data, data + sizeof(data) ); + } + + ~StreamBufImpl() CATCH_NOEXCEPT { + sync(); + } + + private: + int overflow( int c ) { + sync(); + + if( c != EOF ) { + if( pbase() == epptr() ) + m_writer( std::string( 1, static_cast( c ) ) ); + else + sputc( static_cast( c ) ); + } + return 0; + } + + int sync() { + if( pbase() != pptr() ) { + m_writer( std::string( pbase(), static_cast( pptr() - pbase() ) ) ); + setp( pbase(), epptr() ); + } + return 0; + } + }; + + /////////////////////////////////////////////////////////////////////////// + + FileStream::FileStream( std::string const& filename ) { + m_ofs.open( filename.c_str() ); + if( m_ofs.fail() ) { + std::ostringstream oss; + oss << "Unable to open file: '" << filename << '\''; + throw std::domain_error( oss.str() ); + } + } + + std::ostream& FileStream::stream() const { + return m_ofs; + } + + struct OutputDebugWriter { + + void operator()( std::string const&str ) { + writeToDebugConsole( str ); + } + }; + + DebugOutStream::DebugOutStream() + : m_streamBuf( new StreamBufImpl() ), + m_os( m_streamBuf.get() ) + {} + + std::ostream& DebugOutStream::stream() const { + return m_os; + } + + // Store the streambuf from cout up-front because + // cout may get redirected when running tests + CoutStream::CoutStream() + : m_os( Catch::cout().rdbuf() ) + {} + + std::ostream& CoutStream::stream() const { + return m_os; + } + +#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement these functions + std::ostream& cout() { + return std::cout; + } + std::ostream& cerr() { + return std::cerr; + } +#endif +} + +namespace Catch { + + class Context : public IMutableContext { + + Context() : m_config( CATCH_NULL ), m_runner( CATCH_NULL ), m_resultCapture( CATCH_NULL ) {} + Context( Context const& ); + void operator=( Context const& ); + + public: + virtual ~Context() { + deleteAllValues( m_generatorsByTestName ); + } + + public: // IContext + virtual IResultCapture* getResultCapture() { + return m_resultCapture; + } + virtual IRunner* getRunner() { + return m_runner; + } + virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) { + return getGeneratorsForCurrentTest() + .getGeneratorInfo( fileInfo, totalSize ) + .getCurrentIndex(); + } + virtual bool advanceGeneratorsForCurrentTest() { + IGeneratorsForTest* generators = findGeneratorsForCurrentTest(); + return generators && generators->moveNext(); + } + + virtual Ptr getConfig() const { + return m_config; + } + + public: // IMutableContext + virtual void setResultCapture( IResultCapture* resultCapture ) { + m_resultCapture = resultCapture; + } + virtual void setRunner( IRunner* runner ) { + m_runner = runner; + } + virtual void setConfig( Ptr const& config ) { + m_config = config; + } + + friend IMutableContext& getCurrentMutableContext(); + + private: + IGeneratorsForTest* findGeneratorsForCurrentTest() { + std::string testName = getResultCapture()->getCurrentTestName(); + + std::map::const_iterator it = + m_generatorsByTestName.find( testName ); + return it != m_generatorsByTestName.end() + ? it->second + : CATCH_NULL; + } + + IGeneratorsForTest& getGeneratorsForCurrentTest() { + IGeneratorsForTest* generators = findGeneratorsForCurrentTest(); + if( !generators ) { + std::string testName = getResultCapture()->getCurrentTestName(); + generators = createGeneratorsForTest(); + m_generatorsByTestName.insert( std::make_pair( testName, generators ) ); + } + return *generators; + } + + private: + Ptr m_config; + IRunner* m_runner; + IResultCapture* m_resultCapture; + std::map m_generatorsByTestName; + }; + + namespace { + Context* currentContext = CATCH_NULL; + } + IMutableContext& getCurrentMutableContext() { + if( !currentContext ) + currentContext = new Context(); + return *currentContext; + } + IContext& getCurrentContext() { + return getCurrentMutableContext(); + } + + void cleanUpContext() { + delete currentContext; + currentContext = CATCH_NULL; + } +} + +// #included from: catch_console_colour_impl.hpp +#define TWOBLUECUBES_CATCH_CONSOLE_COLOUR_IMPL_HPP_INCLUDED + +// #included from: catch_errno_guard.hpp +#define TWOBLUECUBES_CATCH_ERRNO_GUARD_HPP_INCLUDED + +#include + +namespace Catch { + + class ErrnoGuard { + public: + ErrnoGuard():m_oldErrno(errno){} + ~ErrnoGuard() { errno = m_oldErrno; } + private: + int m_oldErrno; + }; + +} + +namespace Catch { + namespace { + + struct IColourImpl { + virtual ~IColourImpl() {} + virtual void use( Colour::Code _colourCode ) = 0; + }; + + struct NoColourImpl : IColourImpl { + void use( Colour::Code ) {} + + static IColourImpl* instance() { + static NoColourImpl s_instance; + return &s_instance; + } + }; + + } // anon namespace +} // namespace Catch + +#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI ) +# ifdef CATCH_PLATFORM_WINDOWS +# define CATCH_CONFIG_COLOUR_WINDOWS +# else +# define CATCH_CONFIG_COLOUR_ANSI +# endif +#endif + +#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) ///////////////////////////////////////// + +namespace Catch { +namespace { + + class Win32ColourImpl : public IColourImpl { + public: + Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) ) + { + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + GetConsoleScreenBufferInfo( stdoutHandle, &csbiInfo ); + originalForegroundAttributes = csbiInfo.wAttributes & ~( BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY ); + originalBackgroundAttributes = csbiInfo.wAttributes & ~( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY ); + } + + virtual void use( Colour::Code _colourCode ) { + switch( _colourCode ) { + case Colour::None: return setTextAttribute( originalForegroundAttributes ); + case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); + case Colour::Red: return setTextAttribute( FOREGROUND_RED ); + case Colour::Green: return setTextAttribute( FOREGROUND_GREEN ); + case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE ); + case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN ); + case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN ); + case Colour::Grey: return setTextAttribute( 0 ); + + case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY ); + case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED ); + case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN ); + case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); + + case Colour::Bright: throw std::logic_error( "not a colour" ); + } + } + + private: + void setTextAttribute( WORD _textAttribute ) { + SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes ); + } + HANDLE stdoutHandle; + WORD originalForegroundAttributes; + WORD originalBackgroundAttributes; + }; + + IColourImpl* platformColourInstance() { + static Win32ColourImpl s_instance; + + Ptr config = getCurrentContext().getConfig(); + UseColour::YesOrNo colourMode = config + ? config->useColour() + : UseColour::Auto; + if( colourMode == UseColour::Auto ) + colourMode = !isDebuggerActive() + ? UseColour::Yes + : UseColour::No; + return colourMode == UseColour::Yes + ? &s_instance + : NoColourImpl::instance(); + } + +} // end anon namespace +} // end namespace Catch + +#elif defined( CATCH_CONFIG_COLOUR_ANSI ) ////////////////////////////////////// + +#include + +namespace Catch { +namespace { + + // use POSIX/ ANSI console terminal codes + // Thanks to Adam Strzelecki for original contribution + // (http://github.com/nanoant) + // https://github.com/philsquared/Catch/pull/131 + class PosixColourImpl : public IColourImpl { + public: + virtual void use( Colour::Code _colourCode ) { + switch( _colourCode ) { + case Colour::None: + case Colour::White: return setColour( "[0m" ); + case Colour::Red: return setColour( "[0;31m" ); + case Colour::Green: return setColour( "[0;32m" ); + case Colour::Blue: return setColour( "[0;34m" ); + case Colour::Cyan: return setColour( "[0;36m" ); + case Colour::Yellow: return setColour( "[0;33m" ); + case Colour::Grey: return setColour( "[1;30m" ); + + case Colour::LightGrey: return setColour( "[0;37m" ); + case Colour::BrightRed: return setColour( "[1;31m" ); + case Colour::BrightGreen: return setColour( "[1;32m" ); + case Colour::BrightWhite: return setColour( "[1;37m" ); + + case Colour::Bright: throw std::logic_error( "not a colour" ); + } + } + static IColourImpl* instance() { + static PosixColourImpl s_instance; + return &s_instance; + } + + private: + void setColour( const char* _escapeCode ) { + Catch::cout() << '\033' << _escapeCode; + } + }; + + IColourImpl* platformColourInstance() { + ErrnoGuard guard; + Ptr config = getCurrentContext().getConfig(); + UseColour::YesOrNo colourMode = config + ? config->useColour() + : UseColour::Auto; + if( colourMode == UseColour::Auto ) + colourMode = (!isDebuggerActive() && isatty(STDOUT_FILENO) ) + ? UseColour::Yes + : UseColour::No; + return colourMode == UseColour::Yes + ? PosixColourImpl::instance() + : NoColourImpl::instance(); + } + +} // end anon namespace +} // end namespace Catch + +#else // not Windows or ANSI /////////////////////////////////////////////// + +namespace Catch { + + static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); } + +} // end namespace Catch + +#endif // Windows/ ANSI/ None + +namespace Catch { + + Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); } + Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast( _other ).m_moved = true; } + Colour::~Colour(){ if( !m_moved ) use( None ); } + + void Colour::use( Code _colourCode ) { + static IColourImpl* impl = platformColourInstance(); + impl->use( _colourCode ); + } + +} // end namespace Catch + +// #included from: catch_generators_impl.hpp +#define TWOBLUECUBES_CATCH_GENERATORS_IMPL_HPP_INCLUDED + +#include +#include +#include + +namespace Catch { + + struct GeneratorInfo : IGeneratorInfo { + + GeneratorInfo( std::size_t size ) + : m_size( size ), + m_currentIndex( 0 ) + {} + + bool moveNext() { + if( ++m_currentIndex == m_size ) { + m_currentIndex = 0; + return false; + } + return true; + } + + std::size_t getCurrentIndex() const { + return m_currentIndex; + } + + std::size_t m_size; + std::size_t m_currentIndex; + }; + + /////////////////////////////////////////////////////////////////////////// + + class GeneratorsForTest : public IGeneratorsForTest { + + public: + ~GeneratorsForTest() { + deleteAll( m_generatorsInOrder ); + } + + IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) { + std::map::const_iterator it = m_generatorsByName.find( fileInfo ); + if( it == m_generatorsByName.end() ) { + IGeneratorInfo* info = new GeneratorInfo( size ); + m_generatorsByName.insert( std::make_pair( fileInfo, info ) ); + m_generatorsInOrder.push_back( info ); + return *info; + } + return *it->second; + } + + bool moveNext() { + std::vector::const_iterator it = m_generatorsInOrder.begin(); + std::vector::const_iterator itEnd = m_generatorsInOrder.end(); + for(; it != itEnd; ++it ) { + if( (*it)->moveNext() ) + return true; + } + return false; + } + + private: + std::map m_generatorsByName; + std::vector m_generatorsInOrder; + }; + + IGeneratorsForTest* createGeneratorsForTest() + { + return new GeneratorsForTest(); + } + +} // end namespace Catch + +// #included from: catch_assertionresult.hpp +#define TWOBLUECUBES_CATCH_ASSERTIONRESULT_HPP_INCLUDED + +namespace Catch { + + AssertionInfo::AssertionInfo( char const * _macroName, + SourceLineInfo const& _lineInfo, + char const * _capturedExpression, + ResultDisposition::Flags _resultDisposition, + char const * _secondArg) + : macroName( _macroName ), + lineInfo( _lineInfo ), + capturedExpression( _capturedExpression ), + resultDisposition( _resultDisposition ), + secondArg( _secondArg ) + {} + + AssertionResult::AssertionResult() {} + + AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data ) + : m_info( info ), + m_resultData( data ) + {} + + AssertionResult::~AssertionResult() {} + + // Result was a success + bool AssertionResult::succeeded() const { + return Catch::isOk( m_resultData.resultType ); + } + + // Result was a success, or failure is suppressed + bool AssertionResult::isOk() const { + return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition ); + } + + ResultWas::OfType AssertionResult::getResultType() const { + return m_resultData.resultType; + } + + bool AssertionResult::hasExpression() const { + return m_info.capturedExpression[0] != 0; + } + + bool AssertionResult::hasMessage() const { + return !m_resultData.message.empty(); + } + + std::string capturedExpressionWithSecondArgument( char const * capturedExpression, char const * secondArg ) { + return (secondArg[0] == 0 || secondArg[0] == '"' && secondArg[1] == '"') + ? capturedExpression + : std::string(capturedExpression) + ", " + secondArg; + } + + std::string AssertionResult::getExpression() const { + if( isFalseTest( m_info.resultDisposition ) ) + return '!' + capturedExpressionWithSecondArgument(m_info.capturedExpression, m_info.secondArg); + else + return capturedExpressionWithSecondArgument(m_info.capturedExpression, m_info.secondArg); + } + std::string AssertionResult::getExpressionInMacro() const { + if( m_info.macroName[0] == 0 ) + return capturedExpressionWithSecondArgument(m_info.capturedExpression, m_info.secondArg); + else + return std::string(m_info.macroName) + "( " + capturedExpressionWithSecondArgument(m_info.capturedExpression, m_info.secondArg) + " )"; + } + + bool AssertionResult::hasExpandedExpression() const { + return hasExpression() && getExpandedExpression() != getExpression(); + } + + std::string AssertionResult::getExpandedExpression() const { + return m_resultData.reconstructExpression(); + } + + std::string AssertionResult::getMessage() const { + return m_resultData.message; + } + SourceLineInfo AssertionResult::getSourceInfo() const { + return m_info.lineInfo; + } + + std::string AssertionResult::getTestMacroName() const { + return m_info.macroName; + } + + void AssertionResult::discardDecomposedExpression() const { + m_resultData.decomposedExpression = CATCH_NULL; + } + + void AssertionResult::expandDecomposedExpression() const { + m_resultData.reconstructExpression(); + } + +} // end namespace Catch + +// #included from: catch_test_case_info.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED + +#include + +namespace Catch { + + inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) { + if( startsWith( tag, '.' ) || + tag == "hide" || + tag == "!hide" ) + return TestCaseInfo::IsHidden; + else if( tag == "!throws" ) + return TestCaseInfo::Throws; + else if( tag == "!shouldfail" ) + return TestCaseInfo::ShouldFail; + else if( tag == "!mayfail" ) + return TestCaseInfo::MayFail; + else if( tag == "!nonportable" ) + return TestCaseInfo::NonPortable; + else + return TestCaseInfo::None; + } + inline bool isReservedTag( std::string const& tag ) { + return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !std::isalnum( tag[0] ); + } + inline void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) { + if( isReservedTag( tag ) ) { + std::ostringstream ss; + ss << Colour(Colour::Red) + << "Tag name [" << tag << "] not allowed.\n" + << "Tag names starting with non alpha-numeric characters are reserved\n" + << Colour(Colour::FileName) + << _lineInfo << '\n'; + throw std::runtime_error(ss.str()); + } + } + + TestCase makeTestCase( ITestCase* _testCase, + std::string const& _className, + std::string const& _name, + std::string const& _descOrTags, + SourceLineInfo const& _lineInfo ) + { + bool isHidden( startsWith( _name, "./" ) ); // Legacy support + + // Parse out tags + std::set tags; + std::string desc, tag; + bool inTag = false; + for( std::size_t i = 0; i < _descOrTags.size(); ++i ) { + char c = _descOrTags[i]; + if( !inTag ) { + if( c == '[' ) + inTag = true; + else + desc += c; + } + else { + if( c == ']' ) { + TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag ); + if( prop == TestCaseInfo::IsHidden ) + isHidden = true; + else if( prop == TestCaseInfo::None ) + enforceNotReservedTag( tag, _lineInfo ); + + tags.insert( tag ); + tag.clear(); + inTag = false; + } + else + tag += c; + } + } + if( isHidden ) { + tags.insert( "hide" ); + tags.insert( "." ); + } + + TestCaseInfo info( _name, _className, desc, tags, _lineInfo ); + return TestCase( _testCase, info ); + } + + void setTags( TestCaseInfo& testCaseInfo, std::set const& tags ) + { + testCaseInfo.tags = tags; + testCaseInfo.lcaseTags.clear(); + + std::ostringstream oss; + for( std::set::const_iterator it = tags.begin(), itEnd = tags.end(); it != itEnd; ++it ) { + oss << '[' << *it << ']'; + std::string lcaseTag = toLower( *it ); + testCaseInfo.properties = static_cast( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); + testCaseInfo.lcaseTags.insert( lcaseTag ); + } + testCaseInfo.tagsAsString = oss.str(); + } + + TestCaseInfo::TestCaseInfo( std::string const& _name, + std::string const& _className, + std::string const& _description, + std::set const& _tags, + SourceLineInfo const& _lineInfo ) + : name( _name ), + className( _className ), + description( _description ), + lineInfo( _lineInfo ), + properties( None ) + { + setTags( *this, _tags ); + } + + TestCaseInfo::TestCaseInfo( TestCaseInfo const& other ) + : name( other.name ), + className( other.className ), + description( other.description ), + tags( other.tags ), + lcaseTags( other.lcaseTags ), + tagsAsString( other.tagsAsString ), + lineInfo( other.lineInfo ), + properties( other.properties ) + {} + + bool TestCaseInfo::isHidden() const { + return ( properties & IsHidden ) != 0; + } + bool TestCaseInfo::throws() const { + return ( properties & Throws ) != 0; + } + bool TestCaseInfo::okToFail() const { + return ( properties & (ShouldFail | MayFail ) ) != 0; + } + bool TestCaseInfo::expectedToFail() const { + return ( properties & (ShouldFail ) ) != 0; + } + + TestCase::TestCase( ITestCase* testCase, TestCaseInfo const& info ) : TestCaseInfo( info ), test( testCase ) {} + + TestCase::TestCase( TestCase const& other ) + : TestCaseInfo( other ), + test( other.test ) + {} + + TestCase TestCase::withName( std::string const& _newName ) const { + TestCase other( *this ); + other.name = _newName; + return other; + } + + void TestCase::swap( TestCase& other ) { + test.swap( other.test ); + name.swap( other.name ); + className.swap( other.className ); + description.swap( other.description ); + tags.swap( other.tags ); + lcaseTags.swap( other.lcaseTags ); + tagsAsString.swap( other.tagsAsString ); + std::swap( TestCaseInfo::properties, static_cast( other ).properties ); + std::swap( lineInfo, other.lineInfo ); + } + + void TestCase::invoke() const { + test->invoke(); + } + + bool TestCase::operator == ( TestCase const& other ) const { + return test.get() == other.test.get() && + name == other.name && + className == other.className; + } + + bool TestCase::operator < ( TestCase const& other ) const { + return name < other.name; + } + TestCase& TestCase::operator = ( TestCase const& other ) { + TestCase temp( other ); + swap( temp ); + return *this; + } + + TestCaseInfo const& TestCase::getTestCaseInfo() const + { + return *this; + } + +} // end namespace Catch + +// #included from: catch_version.hpp +#define TWOBLUECUBES_CATCH_VERSION_HPP_INCLUDED + +namespace Catch { + + Version::Version + ( unsigned int _majorVersion, + unsigned int _minorVersion, + unsigned int _patchNumber, + char const * const _branchName, + unsigned int _buildNumber ) + : majorVersion( _majorVersion ), + minorVersion( _minorVersion ), + patchNumber( _patchNumber ), + branchName( _branchName ), + buildNumber( _buildNumber ) + {} + + std::ostream& operator << ( std::ostream& os, Version const& version ) { + os << version.majorVersion << '.' + << version.minorVersion << '.' + << version.patchNumber; + // branchName is never null -> 0th char is \0 if it is empty + if (version.branchName[0]) { + os << '-' << version.branchName + << '.' << version.buildNumber; + } + return os; + } + + inline Version libraryVersion() { + static Version version( 1, 9, 6, "", 0 ); + return version; + } + +} + +// #included from: catch_message.hpp +#define TWOBLUECUBES_CATCH_MESSAGE_HPP_INCLUDED + +namespace Catch { + + MessageInfo::MessageInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + ResultWas::OfType _type ) + : macroName( _macroName ), + lineInfo( _lineInfo ), + type( _type ), + sequence( ++globalCount ) + {} + + // This may need protecting if threading support is added + unsigned int MessageInfo::globalCount = 0; + + //////////////////////////////////////////////////////////////////////////// + + ScopedMessage::ScopedMessage( MessageBuilder const& builder ) + : m_info( builder.m_info ) + { + m_info.message = builder.m_stream.str(); + getResultCapture().pushScopedMessage( m_info ); + } + ScopedMessage::ScopedMessage( ScopedMessage const& other ) + : m_info( other.m_info ) + {} + + ScopedMessage::~ScopedMessage() { + if ( !std::uncaught_exception() ){ + getResultCapture().popScopedMessage(m_info); + } + } + +} // end namespace Catch + +// #included from: catch_legacy_reporter_adapter.hpp +#define TWOBLUECUBES_CATCH_LEGACY_REPORTER_ADAPTER_HPP_INCLUDED + +// #included from: catch_legacy_reporter_adapter.h +#define TWOBLUECUBES_CATCH_LEGACY_REPORTER_ADAPTER_H_INCLUDED + +namespace Catch +{ + // Deprecated + struct IReporter : IShared { + virtual ~IReporter(); + + virtual bool shouldRedirectStdout() const = 0; + + virtual void StartTesting() = 0; + virtual void EndTesting( Totals const& totals ) = 0; + virtual void StartGroup( std::string const& groupName ) = 0; + virtual void EndGroup( std::string const& groupName, Totals const& totals ) = 0; + virtual void StartTestCase( TestCaseInfo const& testInfo ) = 0; + virtual void EndTestCase( TestCaseInfo const& testInfo, Totals const& totals, std::string const& stdOut, std::string const& stdErr ) = 0; + virtual void StartSection( std::string const& sectionName, std::string const& description ) = 0; + virtual void EndSection( std::string const& sectionName, Counts const& assertions ) = 0; + virtual void NoAssertionsInSection( std::string const& sectionName ) = 0; + virtual void NoAssertionsInTestCase( std::string const& testName ) = 0; + virtual void Aborted() = 0; + virtual void Result( AssertionResult const& result ) = 0; + }; + + class LegacyReporterAdapter : public SharedImpl + { + public: + LegacyReporterAdapter( Ptr const& legacyReporter ); + virtual ~LegacyReporterAdapter(); + + virtual ReporterPreferences getPreferences() const; + virtual void noMatchingTestCases( std::string const& ); + virtual void testRunStarting( TestRunInfo const& ); + virtual void testGroupStarting( GroupInfo const& groupInfo ); + virtual void testCaseStarting( TestCaseInfo const& testInfo ); + virtual void sectionStarting( SectionInfo const& sectionInfo ); + virtual void assertionStarting( AssertionInfo const& ); + virtual bool assertionEnded( AssertionStats const& assertionStats ); + virtual void sectionEnded( SectionStats const& sectionStats ); + virtual void testCaseEnded( TestCaseStats const& testCaseStats ); + virtual void testGroupEnded( TestGroupStats const& testGroupStats ); + virtual void testRunEnded( TestRunStats const& testRunStats ); + virtual void skipTest( TestCaseInfo const& ); + + private: + Ptr m_legacyReporter; + }; +} + +namespace Catch +{ + LegacyReporterAdapter::LegacyReporterAdapter( Ptr const& legacyReporter ) + : m_legacyReporter( legacyReporter ) + {} + LegacyReporterAdapter::~LegacyReporterAdapter() {} + + ReporterPreferences LegacyReporterAdapter::getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = m_legacyReporter->shouldRedirectStdout(); + return prefs; + } + + void LegacyReporterAdapter::noMatchingTestCases( std::string const& ) {} + void LegacyReporterAdapter::testRunStarting( TestRunInfo const& ) { + m_legacyReporter->StartTesting(); + } + void LegacyReporterAdapter::testGroupStarting( GroupInfo const& groupInfo ) { + m_legacyReporter->StartGroup( groupInfo.name ); + } + void LegacyReporterAdapter::testCaseStarting( TestCaseInfo const& testInfo ) { + m_legacyReporter->StartTestCase( testInfo ); + } + void LegacyReporterAdapter::sectionStarting( SectionInfo const& sectionInfo ) { + m_legacyReporter->StartSection( sectionInfo.name, sectionInfo.description ); + } + void LegacyReporterAdapter::assertionStarting( AssertionInfo const& ) { + // Not on legacy interface + } + + bool LegacyReporterAdapter::assertionEnded( AssertionStats const& assertionStats ) { + if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { + for( std::vector::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); + it != itEnd; + ++it ) { + if( it->type == ResultWas::Info ) { + ResultBuilder rb( it->macroName.c_str(), it->lineInfo, "", ResultDisposition::Normal ); + rb << it->message; + rb.setResultType( ResultWas::Info ); + AssertionResult result = rb.build(); + m_legacyReporter->Result( result ); + } + } + } + m_legacyReporter->Result( assertionStats.assertionResult ); + return true; + } + void LegacyReporterAdapter::sectionEnded( SectionStats const& sectionStats ) { + if( sectionStats.missingAssertions ) + m_legacyReporter->NoAssertionsInSection( sectionStats.sectionInfo.name ); + m_legacyReporter->EndSection( sectionStats.sectionInfo.name, sectionStats.assertions ); + } + void LegacyReporterAdapter::testCaseEnded( TestCaseStats const& testCaseStats ) { + m_legacyReporter->EndTestCase + ( testCaseStats.testInfo, + testCaseStats.totals, + testCaseStats.stdOut, + testCaseStats.stdErr ); + } + void LegacyReporterAdapter::testGroupEnded( TestGroupStats const& testGroupStats ) { + if( testGroupStats.aborting ) + m_legacyReporter->Aborted(); + m_legacyReporter->EndGroup( testGroupStats.groupInfo.name, testGroupStats.totals ); + } + void LegacyReporterAdapter::testRunEnded( TestRunStats const& testRunStats ) { + m_legacyReporter->EndTesting( testRunStats.totals ); + } + void LegacyReporterAdapter::skipTest( TestCaseInfo const& ) { + } +} + +// #included from: catch_timer.hpp + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++11-long-long" +#endif + +#ifdef CATCH_PLATFORM_WINDOWS + +#else + +#include + +#endif + +namespace Catch { + + namespace { +#ifdef CATCH_PLATFORM_WINDOWS + UInt64 getCurrentTicks() { + static UInt64 hz=0, hzo=0; + if (!hz) { + QueryPerformanceFrequency( reinterpret_cast( &hz ) ); + QueryPerformanceCounter( reinterpret_cast( &hzo ) ); + } + UInt64 t; + QueryPerformanceCounter( reinterpret_cast( &t ) ); + return ((t-hzo)*1000000)/hz; + } +#else + UInt64 getCurrentTicks() { + timeval t; + gettimeofday(&t,CATCH_NULL); + return static_cast( t.tv_sec ) * 1000000ull + static_cast( t.tv_usec ); + } +#endif + } + + void Timer::start() { + m_ticks = getCurrentTicks(); + } + unsigned int Timer::getElapsedMicroseconds() const { + return static_cast(getCurrentTicks() - m_ticks); + } + unsigned int Timer::getElapsedMilliseconds() const { + return static_cast(getElapsedMicroseconds()/1000); + } + double Timer::getElapsedSeconds() const { + return getElapsedMicroseconds()/1000000.0; + } + +} // namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif +// #included from: catch_common.hpp +#define TWOBLUECUBES_CATCH_COMMON_HPP_INCLUDED + +#include +#include + +namespace Catch { + + bool startsWith( std::string const& s, std::string const& prefix ) { + return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin()); + } + bool startsWith( std::string const& s, char prefix ) { + return !s.empty() && s[0] == prefix; + } + bool endsWith( std::string const& s, std::string const& suffix ) { + return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin()); + } + bool endsWith( std::string const& s, char suffix ) { + return !s.empty() && s[s.size()-1] == suffix; + } + bool contains( std::string const& s, std::string const& infix ) { + return s.find( infix ) != std::string::npos; + } + char toLowerCh(char c) { + return static_cast( std::tolower( c ) ); + } + void toLowerInPlace( std::string& s ) { + std::transform( s.begin(), s.end(), s.begin(), toLowerCh ); + } + std::string toLower( std::string const& s ) { + std::string lc = s; + toLowerInPlace( lc ); + return lc; + } + std::string trim( std::string const& str ) { + static char const* whitespaceChars = "\n\r\t "; + std::string::size_type start = str.find_first_not_of( whitespaceChars ); + std::string::size_type end = str.find_last_not_of( whitespaceChars ); + + return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string(); + } + + bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) { + bool replaced = false; + std::size_t i = str.find( replaceThis ); + while( i != std::string::npos ) { + replaced = true; + str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() ); + if( i < str.size()-withThis.size() ) + i = str.find( replaceThis, i+withThis.size() ); + else + i = std::string::npos; + } + return replaced; + } + + pluralise::pluralise( std::size_t count, std::string const& label ) + : m_count( count ), + m_label( label ) + {} + + std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) { + os << pluraliser.m_count << ' ' << pluraliser.m_label; + if( pluraliser.m_count != 1 ) + os << 's'; + return os; + } + + SourceLineInfo::SourceLineInfo() : file(""), line( 0 ){} + SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line ) + : file( _file ), + line( _line ) + {} + bool SourceLineInfo::empty() const { + return file[0] == '\0'; + } + bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const { + return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0); + } + bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const { + return line < other.line || ( line == other.line && (std::strcmp(file, other.file) < 0)); + } + + void seedRng( IConfig const& config ) { + if( config.rngSeed() != 0 ) + std::srand( config.rngSeed() ); + } + unsigned int rngSeed() { + return getCurrentContext().getConfig()->rngSeed(); + } + + std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) { +#ifndef __GNUG__ + os << info.file << '(' << info.line << ')'; +#else + os << info.file << ':' << info.line; +#endif + return os; + } + + void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ) { + std::ostringstream oss; + oss << locationInfo << ": Internal Catch error: '" << message << '\''; + if( alwaysTrue() ) + throw std::logic_error( oss.str() ); + } +} + +// #included from: catch_section.hpp +#define TWOBLUECUBES_CATCH_SECTION_HPP_INCLUDED + +namespace Catch { + + SectionInfo::SectionInfo + ( SourceLineInfo const& _lineInfo, + std::string const& _name, + std::string const& _description ) + : name( _name ), + description( _description ), + lineInfo( _lineInfo ) + {} + + Section::Section( SectionInfo const& info ) + : m_info( info ), + m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) ) + { + m_timer.start(); + } + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable:4996) // std::uncaught_exception is deprecated in C++17 +#endif + Section::~Section() { + if( m_sectionIncluded ) { + SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() ); + if( std::uncaught_exception() ) + getResultCapture().sectionEndedEarly( endInfo ); + else + getResultCapture().sectionEnded( endInfo ); + } + } +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + + // This indicates whether the section should be executed or not + Section::operator bool() const { + return m_sectionIncluded; + } + +} // end namespace Catch + +// #included from: catch_debugger.hpp +#define TWOBLUECUBES_CATCH_DEBUGGER_HPP_INCLUDED + +#ifdef CATCH_PLATFORM_MAC + + #include + #include + #include + #include + #include + + namespace Catch{ + + // The following function is taken directly from the following technical note: + // http://developer.apple.com/library/mac/#qa/qa2004/qa1361.html + + // Returns true if the current process is being debugged (either + // running under the debugger or has a debugger attached post facto). + bool isDebuggerActive(){ + + int mib[4]; + struct kinfo_proc info; + size_t size; + + // Initialize the flags so that, if sysctl fails for some bizarre + // reason, we get a predictable result. + + info.kp_proc.p_flag = 0; + + // Initialize mib, which tells sysctl the info we want, in this case + // we're looking for information about a specific process ID. + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid(); + + // Call sysctl. + + size = sizeof(info); + if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, CATCH_NULL, 0) != 0 ) { + Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl; + return false; + } + + // We're being debugged if the P_TRACED flag is set. + + return ( (info.kp_proc.p_flag & P_TRACED) != 0 ); + } + } // namespace Catch + +#elif defined(CATCH_PLATFORM_LINUX) + #include + #include + + namespace Catch{ + // The standard POSIX way of detecting a debugger is to attempt to + // ptrace() the process, but this needs to be done from a child and not + // this process itself to still allow attaching to this process later + // if wanted, so is rather heavy. Under Linux we have the PID of the + // "debugger" (which doesn't need to be gdb, of course, it could also + // be strace, for example) in /proc/$PID/status, so just get it from + // there instead. + bool isDebuggerActive(){ + // Libstdc++ has a bug, where std::ifstream sets errno to 0 + // This way our users can properly assert over errno values + ErrnoGuard guard; + std::ifstream in("/proc/self/status"); + for( std::string line; std::getline(in, line); ) { + static const int PREFIX_LEN = 11; + if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) { + // We're traced if the PID is not 0 and no other PID starts + // with 0 digit, so it's enough to check for just a single + // character. + return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0'; + } + } + + return false; + } + } // namespace Catch +#elif defined(_MSC_VER) + extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); + namespace Catch { + bool isDebuggerActive() { + return IsDebuggerPresent() != 0; + } + } +#elif defined(__MINGW32__) + extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); + namespace Catch { + bool isDebuggerActive() { + return IsDebuggerPresent() != 0; + } + } +#else + namespace Catch { + inline bool isDebuggerActive() { return false; } + } +#endif // Platform + +#ifdef CATCH_PLATFORM_WINDOWS + + namespace Catch { + void writeToDebugConsole( std::string const& text ) { + ::OutputDebugStringA( text.c_str() ); + } + } +#else + namespace Catch { + void writeToDebugConsole( std::string const& text ) { + // !TBD: Need a version for Mac/ XCode and other IDEs + Catch::cout() << text; + } + } +#endif // Platform + +// #included from: catch_tostring.hpp +#define TWOBLUECUBES_CATCH_TOSTRING_HPP_INCLUDED + +namespace Catch { + +namespace Detail { + + const std::string unprintableString = "{?}"; + + namespace { + const int hexThreshold = 255; + + struct Endianness { + enum Arch { Big, Little }; + + static Arch which() { + union _{ + int asInt; + char asChar[sizeof (int)]; + } u; + + u.asInt = 1; + return ( u.asChar[sizeof(int)-1] == 1 ) ? Big : Little; + } + }; + } + + std::string rawMemoryToString( const void *object, std::size_t size ) + { + // Reverse order for little endian architectures + int i = 0, end = static_cast( size ), inc = 1; + if( Endianness::which() == Endianness::Little ) { + i = end-1; + end = inc = -1; + } + + unsigned char const *bytes = static_cast(object); + std::ostringstream os; + os << "0x" << std::setfill('0') << std::hex; + for( ; i != end; i += inc ) + os << std::setw(2) << static_cast(bytes[i]); + return os.str(); + } +} + +std::string toString( std::string const& value ) { + std::string s = value; + if( getCurrentContext().getConfig()->showInvisibles() ) { + for(size_t i = 0; i < s.size(); ++i ) { + std::string subs; + switch( s[i] ) { + case '\n': subs = "\\n"; break; + case '\t': subs = "\\t"; break; + default: break; + } + if( !subs.empty() ) { + s = s.substr( 0, i ) + subs + s.substr( i+1 ); + ++i; + } + } + } + return '"' + s + '"'; +} +std::string toString( std::wstring const& value ) { + + std::string s; + s.reserve( value.size() ); + for(size_t i = 0; i < value.size(); ++i ) + s += value[i] <= 0xff ? static_cast( value[i] ) : '?'; + return Catch::toString( s ); +} + +std::string toString( const char* const value ) { + return value ? Catch::toString( std::string( value ) ) : std::string( "{null string}" ); +} + +std::string toString( char* const value ) { + return Catch::toString( static_cast( value ) ); +} + +std::string toString( const wchar_t* const value ) +{ + return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); +} + +std::string toString( wchar_t* const value ) +{ + return Catch::toString( static_cast( value ) ); +} + +std::string toString( int value ) { + std::ostringstream oss; + oss << value; + if( value > Detail::hexThreshold ) + oss << " (0x" << std::hex << value << ')'; + return oss.str(); +} + +std::string toString( unsigned long value ) { + std::ostringstream oss; + oss << value; + if( value > Detail::hexThreshold ) + oss << " (0x" << std::hex << value << ')'; + return oss.str(); +} + +std::string toString( unsigned int value ) { + return Catch::toString( static_cast( value ) ); +} + +template +std::string fpToString( T value, int precision ) { + std::ostringstream oss; + oss << std::setprecision( precision ) + << std::fixed + << value; + std::string d = oss.str(); + std::size_t i = d.find_last_not_of( '0' ); + if( i != std::string::npos && i != d.size()-1 ) { + if( d[i] == '.' ) + i++; + d = d.substr( 0, i+1 ); + } + return d; +} + +std::string toString( const double value ) { + return fpToString( value, 10 ); +} +std::string toString( const float value ) { + return fpToString( value, 5 ) + 'f'; +} + +std::string toString( bool value ) { + return value ? "true" : "false"; +} + +std::string toString( char value ) { + if ( value == '\r' ) + return "'\\r'"; + if ( value == '\f' ) + return "'\\f'"; + if ( value == '\n' ) + return "'\\n'"; + if ( value == '\t' ) + return "'\\t'"; + if ( '\0' <= value && value < ' ' ) + return toString( static_cast( value ) ); + char chstr[] = "' '"; + chstr[1] = value; + return chstr; +} + +std::string toString( signed char value ) { + return toString( static_cast( value ) ); +} + +std::string toString( unsigned char value ) { + return toString( static_cast( value ) ); +} + +#ifdef CATCH_CONFIG_CPP11_LONG_LONG +std::string toString( long long value ) { + std::ostringstream oss; + oss << value; + if( value > Detail::hexThreshold ) + oss << " (0x" << std::hex << value << ')'; + return oss.str(); +} +std::string toString( unsigned long long value ) { + std::ostringstream oss; + oss << value; + if( value > Detail::hexThreshold ) + oss << " (0x" << std::hex << value << ')'; + return oss.str(); +} +#endif + +#ifdef CATCH_CONFIG_CPP11_NULLPTR +std::string toString( std::nullptr_t ) { + return "nullptr"; +} +#endif + +#ifdef __OBJC__ + std::string toString( NSString const * const& nsstring ) { + if( !nsstring ) + return "nil"; + return "@" + toString([nsstring UTF8String]); + } + std::string toString( NSString * CATCH_ARC_STRONG & nsstring ) { + if( !nsstring ) + return "nil"; + return "@" + toString([nsstring UTF8String]); + } + std::string toString( NSObject* const& nsObject ) { + return toString( [nsObject description] ); + } +#endif + +} // end namespace Catch + +// #included from: catch_result_builder.hpp +#define TWOBLUECUBES_CATCH_RESULT_BUILDER_HPP_INCLUDED + +namespace Catch { + + ResultBuilder::ResultBuilder( char const* macroName, + SourceLineInfo const& lineInfo, + char const* capturedExpression, + ResultDisposition::Flags resultDisposition, + char const* secondArg ) + : m_assertionInfo( macroName, lineInfo, capturedExpression, resultDisposition, secondArg ), + m_shouldDebugBreak( false ), + m_shouldThrow( false ), + m_guardException( false ) + { + m_stream().oss.str(""); + } + + ResultBuilder::~ResultBuilder() { +#if defined(CATCH_CONFIG_FAST_COMPILE) + if ( m_guardException ) { + m_stream().oss << "Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE"; + captureResult( ResultWas::ThrewException ); + getCurrentContext().getResultCapture()->exceptionEarlyReported(); + } +#endif + } + + ResultBuilder& ResultBuilder::setResultType( ResultWas::OfType result ) { + m_data.resultType = result; + return *this; + } + ResultBuilder& ResultBuilder::setResultType( bool result ) { + m_data.resultType = result ? ResultWas::Ok : ResultWas::ExpressionFailed; + return *this; + } + + void ResultBuilder::endExpression( DecomposedExpression const& expr ) { + AssertionResult result = build( expr ); + handleResult( result ); + } + + void ResultBuilder::useActiveException( ResultDisposition::Flags resultDisposition ) { + m_assertionInfo.resultDisposition = resultDisposition; + m_stream().oss << Catch::translateActiveException(); + captureResult( ResultWas::ThrewException ); + } + + void ResultBuilder::captureResult( ResultWas::OfType resultType ) { + setResultType( resultType ); + captureExpression(); + } + + void ResultBuilder::captureExpectedException( std::string const& expectedMessage ) { + if( expectedMessage.empty() ) + captureExpectedException( Matchers::Impl::MatchAllOf() ); + else + captureExpectedException( Matchers::Equals( expectedMessage ) ); + } + + void ResultBuilder::captureExpectedException( Matchers::Impl::MatcherBase const& matcher ) { + + assert( !isFalseTest( m_assertionInfo.resultDisposition ) ); + AssertionResultData data = m_data; + data.resultType = ResultWas::Ok; + data.reconstructedExpression = capturedExpressionWithSecondArgument(m_assertionInfo.capturedExpression, m_assertionInfo.secondArg); + + std::string actualMessage = Catch::translateActiveException(); + if( !matcher.match( actualMessage ) ) { + data.resultType = ResultWas::ExpressionFailed; + data.reconstructedExpression = actualMessage; + } + AssertionResult result( m_assertionInfo, data ); + handleResult( result ); + } + + void ResultBuilder::captureExpression() { + AssertionResult result = build(); + handleResult( result ); + } + + void ResultBuilder::handleResult( AssertionResult const& result ) + { + getResultCapture().assertionEnded( result ); + + if( !result.isOk() ) { + if( getCurrentContext().getConfig()->shouldDebugBreak() ) + m_shouldDebugBreak = true; + if( getCurrentContext().getRunner()->aborting() || (m_assertionInfo.resultDisposition & ResultDisposition::Normal) ) + m_shouldThrow = true; + } + } + + void ResultBuilder::react() { +#if defined(CATCH_CONFIG_FAST_COMPILE) + if (m_shouldDebugBreak) { + /////////////////////////////////////////////////////////////////// + // To inspect the state during test, you need to go one level up the callstack + // To go back to the test and change execution, jump over the throw statement + /////////////////////////////////////////////////////////////////// + CATCH_BREAK_INTO_DEBUGGER(); + } +#endif + if( m_shouldThrow ) + throw Catch::TestFailureException(); + } + + bool ResultBuilder::shouldDebugBreak() const { return m_shouldDebugBreak; } + bool ResultBuilder::allowThrows() const { return getCurrentContext().getConfig()->allowThrows(); } + + AssertionResult ResultBuilder::build() const + { + return build( *this ); + } + + // CAVEAT: The returned AssertionResult stores a pointer to the argument expr, + // a temporary DecomposedExpression, which in turn holds references to + // operands, possibly temporary as well. + // It should immediately be passed to handleResult; if the expression + // needs to be reported, its string expansion must be composed before + // the temporaries are destroyed. + AssertionResult ResultBuilder::build( DecomposedExpression const& expr ) const + { + assert( m_data.resultType != ResultWas::Unknown ); + AssertionResultData data = m_data; + + // Flip bool results if FalseTest flag is set + if( isFalseTest( m_assertionInfo.resultDisposition ) ) { + data.negate( expr.isBinaryExpression() ); + } + + data.message = m_stream().oss.str(); + data.decomposedExpression = &expr; // for lazy reconstruction + return AssertionResult( m_assertionInfo, data ); + } + + void ResultBuilder::reconstructExpression( std::string& dest ) const { + dest = capturedExpressionWithSecondArgument(m_assertionInfo.capturedExpression, m_assertionInfo.secondArg); + } + + void ResultBuilder::setExceptionGuard() { + m_guardException = true; + } + void ResultBuilder::unsetExceptionGuard() { + m_guardException = false; + } + +} // end namespace Catch + +// #included from: catch_tag_alias_registry.hpp +#define TWOBLUECUBES_CATCH_TAG_ALIAS_REGISTRY_HPP_INCLUDED + +namespace Catch { + + TagAliasRegistry::~TagAliasRegistry() {} + + Option TagAliasRegistry::find( std::string const& alias ) const { + std::map::const_iterator it = m_registry.find( alias ); + if( it != m_registry.end() ) + return it->second; + else + return Option(); + } + + std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const { + std::string expandedTestSpec = unexpandedTestSpec; + for( std::map::const_iterator it = m_registry.begin(), itEnd = m_registry.end(); + it != itEnd; + ++it ) { + std::size_t pos = expandedTestSpec.find( it->first ); + if( pos != std::string::npos ) { + expandedTestSpec = expandedTestSpec.substr( 0, pos ) + + it->second.tag + + expandedTestSpec.substr( pos + it->first.size() ); + } + } + return expandedTestSpec; + } + + void TagAliasRegistry::add( std::string const& alias, std::string const& tag, SourceLineInfo const& lineInfo ) { + + if( !startsWith( alias, "[@" ) || !endsWith( alias, ']' ) ) { + std::ostringstream oss; + oss << Colour( Colour::Red ) + << "error: tag alias, \"" << alias << "\" is not of the form [@alias name].\n" + << Colour( Colour::FileName ) + << lineInfo << '\n'; + throw std::domain_error( oss.str().c_str() ); + } + if( !m_registry.insert( std::make_pair( alias, TagAlias( tag, lineInfo ) ) ).second ) { + std::ostringstream oss; + oss << Colour( Colour::Red ) + << "error: tag alias, \"" << alias << "\" already registered.\n" + << "\tFirst seen at " + << Colour( Colour::Red ) << find(alias)->lineInfo << '\n' + << Colour( Colour::Red ) << "\tRedefined at " + << Colour( Colour::FileName) << lineInfo << '\n'; + throw std::domain_error( oss.str().c_str() ); + } + } + + ITagAliasRegistry::~ITagAliasRegistry() {} + + ITagAliasRegistry const& ITagAliasRegistry::get() { + return getRegistryHub().getTagAliasRegistry(); + } + + RegistrarForTagAliases::RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { + getMutableRegistryHub().registerTagAlias( alias, tag, lineInfo ); + } + +} // end namespace Catch + +// #included from: catch_matchers_string.hpp + +namespace Catch { +namespace Matchers { + + namespace StdString { + + CasedString::CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity ) + : m_caseSensitivity( caseSensitivity ), + m_str( adjustString( str ) ) + {} + std::string CasedString::adjustString( std::string const& str ) const { + return m_caseSensitivity == CaseSensitive::No + ? toLower( str ) + : str; + } + std::string CasedString::caseSensitivitySuffix() const { + return m_caseSensitivity == CaseSensitive::No + ? " (case insensitive)" + : std::string(); + } + + StringMatcherBase::StringMatcherBase( std::string const& operation, CasedString const& comparator ) + : m_comparator( comparator ), + m_operation( operation ) { + } + + std::string StringMatcherBase::describe() const { + std::string description; + description.reserve(5 + m_operation.size() + m_comparator.m_str.size() + + m_comparator.caseSensitivitySuffix().size()); + description += m_operation; + description += ": \""; + description += m_comparator.m_str; + description += "\""; + description += m_comparator.caseSensitivitySuffix(); + return description; + } + + EqualsMatcher::EqualsMatcher( CasedString const& comparator ) : StringMatcherBase( "equals", comparator ) {} + + bool EqualsMatcher::match( std::string const& source ) const { + return m_comparator.adjustString( source ) == m_comparator.m_str; + } + + ContainsMatcher::ContainsMatcher( CasedString const& comparator ) : StringMatcherBase( "contains", comparator ) {} + + bool ContainsMatcher::match( std::string const& source ) const { + return contains( m_comparator.adjustString( source ), m_comparator.m_str ); + } + + StartsWithMatcher::StartsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "starts with", comparator ) {} + + bool StartsWithMatcher::match( std::string const& source ) const { + return startsWith( m_comparator.adjustString( source ), m_comparator.m_str ); + } + + EndsWithMatcher::EndsWithMatcher( CasedString const& comparator ) : StringMatcherBase( "ends with", comparator ) {} + + bool EndsWithMatcher::match( std::string const& source ) const { + return endsWith( m_comparator.adjustString( source ), m_comparator.m_str ); + } + + } // namespace StdString + + StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity ) { + return StdString::EqualsMatcher( StdString::CasedString( str, caseSensitivity) ); + } + StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity ) { + return StdString::ContainsMatcher( StdString::CasedString( str, caseSensitivity) ); + } + StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) { + return StdString::EndsWithMatcher( StdString::CasedString( str, caseSensitivity) ); + } + StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity ) { + return StdString::StartsWithMatcher( StdString::CasedString( str, caseSensitivity) ); + } + +} // namespace Matchers +} // namespace Catch +// #included from: ../reporters/catch_reporter_multi.hpp +#define TWOBLUECUBES_CATCH_REPORTER_MULTI_HPP_INCLUDED + +namespace Catch { + +class MultipleReporters : public SharedImpl { + typedef std::vector > Reporters; + Reporters m_reporters; + +public: + void add( Ptr const& reporter ) { + m_reporters.push_back( reporter ); + } + +public: // IStreamingReporter + + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { + return m_reporters[0]->getPreferences(); + } + + virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->noMatchingTestCases( spec ); + } + + virtual void testRunStarting( TestRunInfo const& testRunInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testRunStarting( testRunInfo ); + } + + virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testGroupStarting( groupInfo ); + } + + virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testCaseStarting( testInfo ); + } + + virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->sectionStarting( sectionInfo ); + } + + virtual void assertionStarting( AssertionInfo const& assertionInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->assertionStarting( assertionInfo ); + } + + // The return value indicates if the messages buffer should be cleared: + virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + bool clearBuffer = false; + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + clearBuffer |= (*it)->assertionEnded( assertionStats ); + return clearBuffer; + } + + virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->sectionEnded( sectionStats ); + } + + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testCaseEnded( testCaseStats ); + } + + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testGroupEnded( testGroupStats ); + } + + virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testRunEnded( testRunStats ); + } + + virtual void skipTest( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->skipTest( testInfo ); + } + + virtual MultipleReporters* tryAsMulti() CATCH_OVERRIDE { + return this; + } + +}; + +Ptr addReporter( Ptr const& existingReporter, Ptr const& additionalReporter ) { + Ptr resultingReporter; + + if( existingReporter ) { + MultipleReporters* multi = existingReporter->tryAsMulti(); + if( !multi ) { + multi = new MultipleReporters; + resultingReporter = Ptr( multi ); + if( existingReporter ) + multi->add( existingReporter ); + } + else + resultingReporter = existingReporter; + multi->add( additionalReporter ); + } + else + resultingReporter = additionalReporter; + + return resultingReporter; +} + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_xml.hpp +#define TWOBLUECUBES_CATCH_REPORTER_XML_HPP_INCLUDED + +// #included from: catch_reporter_bases.hpp +#define TWOBLUECUBES_CATCH_REPORTER_BASES_HPP_INCLUDED + +#include +#include +#include +#include + +namespace Catch { + + namespace { + // Because formatting using c++ streams is stateful, drop down to C is required + // Alternatively we could use stringstream, but its performance is... not good. + std::string getFormattedDuration( double duration ) { + // Max exponent + 1 is required to represent the whole part + // + 1 for decimal point + // + 3 for the 3 decimal places + // + 1 for null terminator + const size_t maxDoubleSize = DBL_MAX_10_EXP + 1 + 1 + 3 + 1; + char buffer[maxDoubleSize]; + + // Save previous errno, to prevent sprintf from overwriting it + ErrnoGuard guard; +#ifdef _MSC_VER + sprintf_s(buffer, "%.3f", duration); +#else + sprintf(buffer, "%.3f", duration); +#endif + return std::string(buffer); + } + } + + struct StreamingReporterBase : SharedImpl { + + StreamingReporterBase( ReporterConfig const& _config ) + : m_config( _config.fullConfig() ), + stream( _config.stream() ) + { + m_reporterPrefs.shouldRedirectStdOut = false; + } + + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { + return m_reporterPrefs; + } + + virtual ~StreamingReporterBase() CATCH_OVERRIDE; + + virtual void noMatchingTestCases( std::string const& ) CATCH_OVERRIDE {} + + virtual void testRunStarting( TestRunInfo const& _testRunInfo ) CATCH_OVERRIDE { + currentTestRunInfo = _testRunInfo; + } + virtual void testGroupStarting( GroupInfo const& _groupInfo ) CATCH_OVERRIDE { + currentGroupInfo = _groupInfo; + } + + virtual void testCaseStarting( TestCaseInfo const& _testInfo ) CATCH_OVERRIDE { + currentTestCaseInfo = _testInfo; + } + virtual void sectionStarting( SectionInfo const& _sectionInfo ) CATCH_OVERRIDE { + m_sectionStack.push_back( _sectionInfo ); + } + + virtual void sectionEnded( SectionStats const& /* _sectionStats */ ) CATCH_OVERRIDE { + m_sectionStack.pop_back(); + } + virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) CATCH_OVERRIDE { + currentTestCaseInfo.reset(); + } + virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) CATCH_OVERRIDE { + currentGroupInfo.reset(); + } + virtual void testRunEnded( TestRunStats const& /* _testRunStats */ ) CATCH_OVERRIDE { + currentTestCaseInfo.reset(); + currentGroupInfo.reset(); + currentTestRunInfo.reset(); + } + + virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE { + // Don't do anything with this by default. + // It can optionally be overridden in the derived class. + } + + Ptr m_config; + std::ostream& stream; + + LazyStat currentTestRunInfo; + LazyStat currentGroupInfo; + LazyStat currentTestCaseInfo; + + std::vector m_sectionStack; + ReporterPreferences m_reporterPrefs; + }; + + struct CumulativeReporterBase : SharedImpl { + template + struct Node : SharedImpl<> { + explicit Node( T const& _value ) : value( _value ) {} + virtual ~Node() {} + + typedef std::vector > ChildNodes; + T value; + ChildNodes children; + }; + struct SectionNode : SharedImpl<> { + explicit SectionNode( SectionStats const& _stats ) : stats( _stats ) {} + virtual ~SectionNode(); + + bool operator == ( SectionNode const& other ) const { + return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo; + } + bool operator == ( Ptr const& other ) const { + return operator==( *other ); + } + + SectionStats stats; + typedef std::vector > ChildSections; + typedef std::vector Assertions; + ChildSections childSections; + Assertions assertions; + std::string stdOut; + std::string stdErr; + }; + + struct BySectionInfo { + BySectionInfo( SectionInfo const& other ) : m_other( other ) {} + BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} + bool operator() ( Ptr const& node ) const { + return node->stats.sectionInfo.lineInfo == m_other.lineInfo; + } + private: + void operator=( BySectionInfo const& ); + SectionInfo const& m_other; + }; + + typedef Node TestCaseNode; + typedef Node TestGroupNode; + typedef Node TestRunNode; + + CumulativeReporterBase( ReporterConfig const& _config ) + : m_config( _config.fullConfig() ), + stream( _config.stream() ) + { + m_reporterPrefs.shouldRedirectStdOut = false; + } + ~CumulativeReporterBase(); + + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { + return m_reporterPrefs; + } + + virtual void testRunStarting( TestRunInfo const& ) CATCH_OVERRIDE {} + virtual void testGroupStarting( GroupInfo const& ) CATCH_OVERRIDE {} + + virtual void testCaseStarting( TestCaseInfo const& ) CATCH_OVERRIDE {} + + virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { + SectionStats incompleteStats( sectionInfo, Counts(), 0, false ); + Ptr node; + if( m_sectionStack.empty() ) { + if( !m_rootSection ) + m_rootSection = new SectionNode( incompleteStats ); + node = m_rootSection; + } + else { + SectionNode& parentNode = *m_sectionStack.back(); + SectionNode::ChildSections::const_iterator it = + std::find_if( parentNode.childSections.begin(), + parentNode.childSections.end(), + BySectionInfo( sectionInfo ) ); + if( it == parentNode.childSections.end() ) { + node = new SectionNode( incompleteStats ); + parentNode.childSections.push_back( node ); + } + else + node = *it; + } + m_sectionStack.push_back( node ); + m_deepestSection = node; + } + + virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {} + + virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + assert( !m_sectionStack.empty() ); + SectionNode& sectionNode = *m_sectionStack.back(); + sectionNode.assertions.push_back( assertionStats ); + // AssertionResult holds a pointer to a temporary DecomposedExpression, + // which getExpandedExpression() calls to build the expression string. + // Our section stack copy of the assertionResult will likely outlive the + // temporary, so it must be expanded or discarded now to avoid calling + // a destroyed object later. + prepareExpandedExpression( sectionNode.assertions.back().assertionResult ); + return true; + } + virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { + assert( !m_sectionStack.empty() ); + SectionNode& node = *m_sectionStack.back(); + node.stats = sectionStats; + m_sectionStack.pop_back(); + } + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { + Ptr node = new TestCaseNode( testCaseStats ); + assert( m_sectionStack.size() == 0 ); + node->children.push_back( m_rootSection ); + m_testCases.push_back( node ); + m_rootSection.reset(); + + assert( m_deepestSection ); + m_deepestSection->stdOut = testCaseStats.stdOut; + m_deepestSection->stdErr = testCaseStats.stdErr; + } + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { + Ptr node = new TestGroupNode( testGroupStats ); + node->children.swap( m_testCases ); + m_testGroups.push_back( node ); + } + virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { + Ptr node = new TestRunNode( testRunStats ); + node->children.swap( m_testGroups ); + m_testRuns.push_back( node ); + testRunEndedCumulative(); + } + virtual void testRunEndedCumulative() = 0; + + virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE {} + + virtual void prepareExpandedExpression( AssertionResult& result ) const { + if( result.isOk() ) + result.discardDecomposedExpression(); + else + result.expandDecomposedExpression(); + } + + Ptr m_config; + std::ostream& stream; + std::vector m_assertions; + std::vector > > m_sections; + std::vector > m_testCases; + std::vector > m_testGroups; + + std::vector > m_testRuns; + + Ptr m_rootSection; + Ptr m_deepestSection; + std::vector > m_sectionStack; + ReporterPreferences m_reporterPrefs; + + }; + + template + char const* getLineOfChars() { + static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; + if( !*line ) { + std::memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 ); + line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0; + } + return line; + } + + struct TestEventListenerBase : StreamingReporterBase { + TestEventListenerBase( ReporterConfig const& _config ) + : StreamingReporterBase( _config ) + {} + + virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {} + virtual bool assertionEnded( AssertionStats const& ) CATCH_OVERRIDE { + return false; + } + }; + +} // end namespace Catch + +// #included from: ../internal/catch_reporter_registrars.hpp +#define TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED + +namespace Catch { + + template + class LegacyReporterRegistrar { + + class ReporterFactory : public IReporterFactory { + virtual IStreamingReporter* create( ReporterConfig const& config ) const { + return new LegacyReporterAdapter( new T( config ) ); + } + + virtual std::string getDescription() const { + return T::getDescription(); + } + }; + + public: + + LegacyReporterRegistrar( std::string const& name ) { + getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); + } + }; + + template + class ReporterRegistrar { + + class ReporterFactory : public SharedImpl { + + // *** Please Note ***: + // - If you end up here looking at a compiler error because it's trying to register + // your custom reporter class be aware that the native reporter interface has changed + // to IStreamingReporter. The "legacy" interface, IReporter, is still supported via + // an adapter. Just use REGISTER_LEGACY_REPORTER to take advantage of the adapter. + // However please consider updating to the new interface as the old one is now + // deprecated and will probably be removed quite soon! + // Please contact me via github if you have any questions at all about this. + // In fact, ideally, please contact me anyway to let me know you've hit this - as I have + // no idea who is actually using custom reporters at all (possibly no-one!). + // The new interface is designed to minimise exposure to interface changes in the future. + virtual IStreamingReporter* create( ReporterConfig const& config ) const { + return new T( config ); + } + + virtual std::string getDescription() const { + return T::getDescription(); + } + }; + + public: + + ReporterRegistrar( std::string const& name ) { + getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); + } + }; + + template + class ListenerRegistrar { + + class ListenerFactory : public SharedImpl { + + virtual IStreamingReporter* create( ReporterConfig const& config ) const { + return new T( config ); + } + virtual std::string getDescription() const { + return std::string(); + } + }; + + public: + + ListenerRegistrar() { + getMutableRegistryHub().registerListener( new ListenerFactory() ); + } + }; +} + +#define INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) \ + namespace{ Catch::LegacyReporterRegistrar catch_internal_RegistrarFor##reporterType( name ); } + +#define INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) \ + namespace{ Catch::ReporterRegistrar catch_internal_RegistrarFor##reporterType( name ); } + +// Deprecated - use the form without INTERNAL_ +#define INTERNAL_CATCH_REGISTER_LISTENER( listenerType ) \ + namespace{ Catch::ListenerRegistrar catch_internal_RegistrarFor##listenerType; } + +#define CATCH_REGISTER_LISTENER( listenerType ) \ + namespace{ Catch::ListenerRegistrar catch_internal_RegistrarFor##listenerType; } + +// #included from: ../internal/catch_xmlwriter.hpp +#define TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED + +#include +#include +#include +#include + +namespace Catch { + + class XmlEncode { + public: + enum ForWhat { ForTextNodes, ForAttributes }; + + XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes ) + : m_str( str ), + m_forWhat( forWhat ) + {} + + void encodeTo( std::ostream& os ) const { + + // Apostrophe escaping not necessary if we always use " to write attributes + // (see: http://www.w3.org/TR/xml/#syntax) + + for( std::size_t i = 0; i < m_str.size(); ++ i ) { + char c = m_str[i]; + switch( c ) { + case '<': os << "<"; break; + case '&': os << "&"; break; + + case '>': + // See: http://www.w3.org/TR/xml/#syntax + if( i > 2 && m_str[i-1] == ']' && m_str[i-2] == ']' ) + os << ">"; + else + os << c; + break; + + case '\"': + if( m_forWhat == ForAttributes ) + os << """; + else + os << c; + break; + + default: + // Escape control chars - based on contribution by @espenalb in PR #465 and + // by @mrpi PR #588 + if ( ( c >= 0 && c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) { + // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0 + os << "\\x" << std::uppercase << std::hex << std::setfill('0') << std::setw(2) + << static_cast( c ); + } + else + os << c; + } + } + } + + friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) { + xmlEncode.encodeTo( os ); + return os; + } + + private: + std::string m_str; + ForWhat m_forWhat; + }; + + class XmlWriter { + public: + + class ScopedElement { + public: + ScopedElement( XmlWriter* writer ) + : m_writer( writer ) + {} + + ScopedElement( ScopedElement const& other ) + : m_writer( other.m_writer ){ + other.m_writer = CATCH_NULL; + } + + ~ScopedElement() { + if( m_writer ) + m_writer->endElement(); + } + + ScopedElement& writeText( std::string const& text, bool indent = true ) { + m_writer->writeText( text, indent ); + return *this; + } + + template + ScopedElement& writeAttribute( std::string const& name, T const& attribute ) { + m_writer->writeAttribute( name, attribute ); + return *this; + } + + private: + mutable XmlWriter* m_writer; + }; + + XmlWriter() + : m_tagIsOpen( false ), + m_needsNewline( false ), + m_os( Catch::cout() ) + { + writeDeclaration(); + } + + XmlWriter( std::ostream& os ) + : m_tagIsOpen( false ), + m_needsNewline( false ), + m_os( os ) + { + writeDeclaration(); + } + + ~XmlWriter() { + while( !m_tags.empty() ) + endElement(); + } + + XmlWriter& startElement( std::string const& name ) { + ensureTagClosed(); + newlineIfNecessary(); + m_os << m_indent << '<' << name; + m_tags.push_back( name ); + m_indent += " "; + m_tagIsOpen = true; + return *this; + } + + ScopedElement scopedElement( std::string const& name ) { + ScopedElement scoped( this ); + startElement( name ); + return scoped; + } + + XmlWriter& endElement() { + newlineIfNecessary(); + m_indent = m_indent.substr( 0, m_indent.size()-2 ); + if( m_tagIsOpen ) { + m_os << "/>"; + m_tagIsOpen = false; + } + else { + m_os << m_indent << ""; + } + m_os << std::endl; + m_tags.pop_back(); + return *this; + } + + XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ) { + if( !name.empty() && !attribute.empty() ) + m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"'; + return *this; + } + + XmlWriter& writeAttribute( std::string const& name, bool attribute ) { + m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"'; + return *this; + } + + template + XmlWriter& writeAttribute( std::string const& name, T const& attribute ) { + std::ostringstream oss; + oss << attribute; + return writeAttribute( name, oss.str() ); + } + + XmlWriter& writeText( std::string const& text, bool indent = true ) { + if( !text.empty() ){ + bool tagWasOpen = m_tagIsOpen; + ensureTagClosed(); + if( tagWasOpen && indent ) + m_os << m_indent; + m_os << XmlEncode( text ); + m_needsNewline = true; + } + return *this; + } + + XmlWriter& writeComment( std::string const& text ) { + ensureTagClosed(); + m_os << m_indent << ""; + m_needsNewline = true; + return *this; + } + + void writeStylesheetRef( std::string const& url ) { + m_os << "\n"; + } + + XmlWriter& writeBlankLine() { + ensureTagClosed(); + m_os << '\n'; + return *this; + } + + void ensureTagClosed() { + if( m_tagIsOpen ) { + m_os << ">" << std::endl; + m_tagIsOpen = false; + } + } + + private: + XmlWriter( XmlWriter const& ); + void operator=( XmlWriter const& ); + + void writeDeclaration() { + m_os << "\n"; + } + + void newlineIfNecessary() { + if( m_needsNewline ) { + m_os << std::endl; + m_needsNewline = false; + } + } + + bool m_tagIsOpen; + bool m_needsNewline; + std::vector m_tags; + std::string m_indent; + std::ostream& m_os; + }; + +} + +namespace Catch { + class XmlReporter : public StreamingReporterBase { + public: + XmlReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ), + m_xml(_config.stream()), + m_sectionDepth( 0 ) + { + m_reporterPrefs.shouldRedirectStdOut = true; + } + + virtual ~XmlReporter() CATCH_OVERRIDE; + + static std::string getDescription() { + return "Reports test results as an XML document"; + } + + virtual std::string getStylesheetRef() const { + return std::string(); + } + + void writeSourceInfo( SourceLineInfo const& sourceInfo ) { + m_xml + .writeAttribute( "filename", sourceInfo.file ) + .writeAttribute( "line", sourceInfo.line ); + } + + public: // StreamingReporterBase + + virtual void noMatchingTestCases( std::string const& s ) CATCH_OVERRIDE { + StreamingReporterBase::noMatchingTestCases( s ); + } + + virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testRunStarting( testInfo ); + std::string stylesheetRef = getStylesheetRef(); + if( !stylesheetRef.empty() ) + m_xml.writeStylesheetRef( stylesheetRef ); + m_xml.startElement( "Catch" ); + if( !m_config->name().empty() ) + m_xml.writeAttribute( "name", m_config->name() ); + } + + virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testGroupStarting( groupInfo ); + m_xml.startElement( "Group" ) + .writeAttribute( "name", groupInfo.name ); + } + + virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseStarting(testInfo); + m_xml.startElement( "TestCase" ) + .writeAttribute( "name", trim( testInfo.name ) ) + .writeAttribute( "description", testInfo.description ) + .writeAttribute( "tags", testInfo.tagsAsString ); + + writeSourceInfo( testInfo.lineInfo ); + + if ( m_config->showDurations() == ShowDurations::Always ) + m_testCaseTimer.start(); + m_xml.ensureTagClosed(); + } + + virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { + StreamingReporterBase::sectionStarting( sectionInfo ); + if( m_sectionDepth++ > 0 ) { + m_xml.startElement( "Section" ) + .writeAttribute( "name", trim( sectionInfo.name ) ) + .writeAttribute( "description", sectionInfo.description ); + writeSourceInfo( sectionInfo.lineInfo ); + m_xml.ensureTagClosed(); + } + } + + virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { } + + virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + + AssertionResult const& result = assertionStats.assertionResult; + + bool includeResults = m_config->includeSuccessfulResults() || !result.isOk(); + + if( includeResults ) { + // Print any info messages in tags. + for( std::vector::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); + it != itEnd; + ++it ) { + if( it->type == ResultWas::Info ) { + m_xml.scopedElement( "Info" ) + .writeText( it->message ); + } else if ( it->type == ResultWas::Warning ) { + m_xml.scopedElement( "Warning" ) + .writeText( it->message ); + } + } + } + + // Drop out if result was successful but we're not printing them. + if( !includeResults && result.getResultType() != ResultWas::Warning ) + return true; + + // Print the expression if there is one. + if( result.hasExpression() ) { + m_xml.startElement( "Expression" ) + .writeAttribute( "success", result.succeeded() ) + .writeAttribute( "type", result.getTestMacroName() ); + + writeSourceInfo( result.getSourceInfo() ); + + m_xml.scopedElement( "Original" ) + .writeText( result.getExpression() ); + m_xml.scopedElement( "Expanded" ) + .writeText( result.getExpandedExpression() ); + } + + // And... Print a result applicable to each result type. + switch( result.getResultType() ) { + case ResultWas::ThrewException: + m_xml.startElement( "Exception" ); + writeSourceInfo( result.getSourceInfo() ); + m_xml.writeText( result.getMessage() ); + m_xml.endElement(); + break; + case ResultWas::FatalErrorCondition: + m_xml.startElement( "FatalErrorCondition" ); + writeSourceInfo( result.getSourceInfo() ); + m_xml.writeText( result.getMessage() ); + m_xml.endElement(); + break; + case ResultWas::Info: + m_xml.scopedElement( "Info" ) + .writeText( result.getMessage() ); + break; + case ResultWas::Warning: + // Warning will already have been written + break; + case ResultWas::ExplicitFailure: + m_xml.startElement( "Failure" ); + writeSourceInfo( result.getSourceInfo() ); + m_xml.writeText( result.getMessage() ); + m_xml.endElement(); + break; + default: + break; + } + + if( result.hasExpression() ) + m_xml.endElement(); + + return true; + } + + virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { + StreamingReporterBase::sectionEnded( sectionStats ); + if( --m_sectionDepth > 0 ) { + XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" ); + e.writeAttribute( "successes", sectionStats.assertions.passed ); + e.writeAttribute( "failures", sectionStats.assertions.failed ); + e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk ); + + if ( m_config->showDurations() == ShowDurations::Always ) + e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds ); + + m_xml.endElement(); + } + } + + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseEnded( testCaseStats ); + XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" ); + e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() ); + + if ( m_config->showDurations() == ShowDurations::Always ) + e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() ); + + if( !testCaseStats.stdOut.empty() ) + m_xml.scopedElement( "StdOut" ).writeText( trim( testCaseStats.stdOut ), false ); + if( !testCaseStats.stdErr.empty() ) + m_xml.scopedElement( "StdErr" ).writeText( trim( testCaseStats.stdErr ), false ); + + m_xml.endElement(); + } + + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { + StreamingReporterBase::testGroupEnded( testGroupStats ); + // TODO: Check testGroupStats.aborting and act accordingly. + m_xml.scopedElement( "OverallResults" ) + .writeAttribute( "successes", testGroupStats.totals.assertions.passed ) + .writeAttribute( "failures", testGroupStats.totals.assertions.failed ) + .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk ); + m_xml.endElement(); + } + + virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { + StreamingReporterBase::testRunEnded( testRunStats ); + m_xml.scopedElement( "OverallResults" ) + .writeAttribute( "successes", testRunStats.totals.assertions.passed ) + .writeAttribute( "failures", testRunStats.totals.assertions.failed ) + .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk ); + m_xml.endElement(); + } + + private: + Timer m_testCaseTimer; + XmlWriter m_xml; + int m_sectionDepth; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "xml", XmlReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_junit.hpp +#define TWOBLUECUBES_CATCH_REPORTER_JUNIT_HPP_INCLUDED + +#include + +namespace Catch { + + namespace { + std::string getCurrentTimestamp() { + // Beware, this is not reentrant because of backward compatibility issues + // Also, UTC only, again because of backward compatibility (%z is C++11) + time_t rawtime; + std::time(&rawtime); + const size_t timeStampSize = sizeof("2017-01-16T17:06:45Z"); + +#ifdef _MSC_VER + std::tm timeInfo = {}; + gmtime_s(&timeInfo, &rawtime); +#else + std::tm* timeInfo; + timeInfo = std::gmtime(&rawtime); +#endif + + char timeStamp[timeStampSize]; + const char * const fmt = "%Y-%m-%dT%H:%M:%SZ"; + +#ifdef _MSC_VER + std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); +#else + std::strftime(timeStamp, timeStampSize, fmt, timeInfo); +#endif + return std::string(timeStamp); + } + + } + + class JunitReporter : public CumulativeReporterBase { + public: + JunitReporter( ReporterConfig const& _config ) + : CumulativeReporterBase( _config ), + xml( _config.stream() ), + m_okToFail( false ) + { + m_reporterPrefs.shouldRedirectStdOut = true; + } + + virtual ~JunitReporter() CATCH_OVERRIDE; + + static std::string getDescription() { + return "Reports test results in an XML format that looks like Ant's junitreport target"; + } + + virtual void noMatchingTestCases( std::string const& /*spec*/ ) CATCH_OVERRIDE {} + + virtual void testRunStarting( TestRunInfo const& runInfo ) CATCH_OVERRIDE { + CumulativeReporterBase::testRunStarting( runInfo ); + xml.startElement( "testsuites" ); + } + + virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { + suiteTimer.start(); + stdOutForSuite.str(""); + stdErrForSuite.str(""); + unexpectedExceptions = 0; + CumulativeReporterBase::testGroupStarting( groupInfo ); + } + + virtual void testCaseStarting( TestCaseInfo const& testCaseInfo ) CATCH_OVERRIDE { + m_okToFail = testCaseInfo.okToFail(); + } + virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException && !m_okToFail ) + unexpectedExceptions++; + return CumulativeReporterBase::assertionEnded( assertionStats ); + } + + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { + stdOutForSuite << testCaseStats.stdOut; + stdErrForSuite << testCaseStats.stdErr; + CumulativeReporterBase::testCaseEnded( testCaseStats ); + } + + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { + double suiteTime = suiteTimer.getElapsedSeconds(); + CumulativeReporterBase::testGroupEnded( testGroupStats ); + writeGroup( *m_testGroups.back(), suiteTime ); + } + + virtual void testRunEndedCumulative() CATCH_OVERRIDE { + xml.endElement(); + } + + void writeGroup( TestGroupNode const& groupNode, double suiteTime ) { + XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" ); + TestGroupStats const& stats = groupNode.value; + xml.writeAttribute( "name", stats.groupInfo.name ); + xml.writeAttribute( "errors", unexpectedExceptions ); + xml.writeAttribute( "failures", stats.totals.assertions.failed-unexpectedExceptions ); + xml.writeAttribute( "tests", stats.totals.assertions.total() ); + xml.writeAttribute( "hostname", "tbd" ); // !TBD + if( m_config->showDurations() == ShowDurations::Never ) + xml.writeAttribute( "time", "" ); + else + xml.writeAttribute( "time", suiteTime ); + xml.writeAttribute( "timestamp", getCurrentTimestamp() ); + + // Write test cases + for( TestGroupNode::ChildNodes::const_iterator + it = groupNode.children.begin(), itEnd = groupNode.children.end(); + it != itEnd; + ++it ) + writeTestCase( **it ); + + xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite.str() ), false ); + xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite.str() ), false ); + } + + void writeTestCase( TestCaseNode const& testCaseNode ) { + TestCaseStats const& stats = testCaseNode.value; + + // All test cases have exactly one section - which represents the + // test case itself. That section may have 0-n nested sections + assert( testCaseNode.children.size() == 1 ); + SectionNode const& rootSection = *testCaseNode.children.front(); + + std::string className = stats.testInfo.className; + + if( className.empty() ) { + if( rootSection.childSections.empty() ) + className = "global"; + } + writeSection( className, "", rootSection ); + } + + void writeSection( std::string const& className, + std::string const& rootName, + SectionNode const& sectionNode ) { + std::string name = trim( sectionNode.stats.sectionInfo.name ); + if( !rootName.empty() ) + name = rootName + '/' + name; + + if( !sectionNode.assertions.empty() || + !sectionNode.stdOut.empty() || + !sectionNode.stdErr.empty() ) { + XmlWriter::ScopedElement e = xml.scopedElement( "testcase" ); + if( className.empty() ) { + xml.writeAttribute( "classname", name ); + xml.writeAttribute( "name", "root" ); + } + else { + xml.writeAttribute( "classname", className ); + xml.writeAttribute( "name", name ); + } + xml.writeAttribute( "time", Catch::toString( sectionNode.stats.durationInSeconds ) ); + + writeAssertions( sectionNode ); + + if( !sectionNode.stdOut.empty() ) + xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), false ); + if( !sectionNode.stdErr.empty() ) + xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), false ); + } + for( SectionNode::ChildSections::const_iterator + it = sectionNode.childSections.begin(), + itEnd = sectionNode.childSections.end(); + it != itEnd; + ++it ) + if( className.empty() ) + writeSection( name, "", **it ); + else + writeSection( className, name, **it ); + } + + void writeAssertions( SectionNode const& sectionNode ) { + for( SectionNode::Assertions::const_iterator + it = sectionNode.assertions.begin(), itEnd = sectionNode.assertions.end(); + it != itEnd; + ++it ) + writeAssertion( *it ); + } + void writeAssertion( AssertionStats const& stats ) { + AssertionResult const& result = stats.assertionResult; + if( !result.isOk() ) { + std::string elementName; + switch( result.getResultType() ) { + case ResultWas::ThrewException: + case ResultWas::FatalErrorCondition: + elementName = "error"; + break; + case ResultWas::ExplicitFailure: + elementName = "failure"; + break; + case ResultWas::ExpressionFailed: + elementName = "failure"; + break; + case ResultWas::DidntThrowException: + elementName = "failure"; + break; + + // We should never see these here: + case ResultWas::Info: + case ResultWas::Warning: + case ResultWas::Ok: + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + elementName = "internalError"; + break; + } + + XmlWriter::ScopedElement e = xml.scopedElement( elementName ); + + xml.writeAttribute( "message", result.getExpandedExpression() ); + xml.writeAttribute( "type", result.getTestMacroName() ); + + std::ostringstream oss; + if( !result.getMessage().empty() ) + oss << result.getMessage() << '\n'; + for( std::vector::const_iterator + it = stats.infoMessages.begin(), + itEnd = stats.infoMessages.end(); + it != itEnd; + ++it ) + if( it->type == ResultWas::Info ) + oss << it->message << '\n'; + + oss << "at " << result.getSourceInfo(); + xml.writeText( oss.str(), false ); + } + } + + XmlWriter xml; + Timer suiteTimer; + std::ostringstream stdOutForSuite; + std::ostringstream stdErrForSuite; + unsigned int unexpectedExceptions; + bool m_okToFail; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "junit", JunitReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_console.hpp +#define TWOBLUECUBES_CATCH_REPORTER_CONSOLE_HPP_INCLUDED + +#include +#include + +namespace Catch { + + struct ConsoleReporter : StreamingReporterBase { + ConsoleReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ), + m_headerPrinted( false ) + {} + + virtual ~ConsoleReporter() CATCH_OVERRIDE; + static std::string getDescription() { + return "Reports test results as plain lines of text"; + } + + virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { + stream << "No test cases matched '" << spec << '\'' << std::endl; + } + + virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { + } + + virtual bool assertionEnded( AssertionStats const& _assertionStats ) CATCH_OVERRIDE { + AssertionResult const& result = _assertionStats.assertionResult; + + bool includeResults = m_config->includeSuccessfulResults() || !result.isOk(); + + // Drop out if result was successful but we're not printing them. + if( !includeResults && result.getResultType() != ResultWas::Warning ) + return false; + + lazyPrint(); + + AssertionPrinter printer( stream, _assertionStats, includeResults ); + printer.print(); + stream << std::endl; + return true; + } + + virtual void sectionStarting( SectionInfo const& _sectionInfo ) CATCH_OVERRIDE { + m_headerPrinted = false; + StreamingReporterBase::sectionStarting( _sectionInfo ); + } + virtual void sectionEnded( SectionStats const& _sectionStats ) CATCH_OVERRIDE { + if( _sectionStats.missingAssertions ) { + lazyPrint(); + Colour colour( Colour::ResultError ); + if( m_sectionStack.size() > 1 ) + stream << "\nNo assertions in section"; + else + stream << "\nNo assertions in test case"; + stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl; + } + if( m_config->showDurations() == ShowDurations::Always ) { + stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl; + } + if( m_headerPrinted ) { + m_headerPrinted = false; + } + StreamingReporterBase::sectionEnded( _sectionStats ); + } + + virtual void testCaseEnded( TestCaseStats const& _testCaseStats ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseEnded( _testCaseStats ); + m_headerPrinted = false; + } + virtual void testGroupEnded( TestGroupStats const& _testGroupStats ) CATCH_OVERRIDE { + if( currentGroupInfo.used ) { + printSummaryDivider(); + stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; + printTotals( _testGroupStats.totals ); + stream << '\n' << std::endl; + } + StreamingReporterBase::testGroupEnded( _testGroupStats ); + } + virtual void testRunEnded( TestRunStats const& _testRunStats ) CATCH_OVERRIDE { + printTotalsDivider( _testRunStats.totals ); + printTotals( _testRunStats.totals ); + stream << std::endl; + StreamingReporterBase::testRunEnded( _testRunStats ); + } + + private: + + class AssertionPrinter { + void operator= ( AssertionPrinter const& ); + public: + AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages ) + : stream( _stream ), + stats( _stats ), + result( _stats.assertionResult ), + colour( Colour::None ), + message( result.getMessage() ), + messages( _stats.infoMessages ), + printInfoMessages( _printInfoMessages ) + { + switch( result.getResultType() ) { + case ResultWas::Ok: + colour = Colour::Success; + passOrFail = "PASSED"; + //if( result.hasMessage() ) + if( _stats.infoMessages.size() == 1 ) + messageLabel = "with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "with messages"; + break; + case ResultWas::ExpressionFailed: + if( result.isOk() ) { + colour = Colour::Success; + passOrFail = "FAILED - but was ok"; + } + else { + colour = Colour::Error; + passOrFail = "FAILED"; + } + if( _stats.infoMessages.size() == 1 ) + messageLabel = "with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "with messages"; + break; + case ResultWas::ThrewException: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "due to unexpected exception with "; + if (_stats.infoMessages.size() == 1) + messageLabel += "message"; + if (_stats.infoMessages.size() > 1) + messageLabel += "messages"; + break; + case ResultWas::FatalErrorCondition: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "due to a fatal error condition"; + break; + case ResultWas::DidntThrowException: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "because no exception was thrown where one was expected"; + break; + case ResultWas::Info: + messageLabel = "info"; + break; + case ResultWas::Warning: + messageLabel = "warning"; + break; + case ResultWas::ExplicitFailure: + passOrFail = "FAILED"; + colour = Colour::Error; + if( _stats.infoMessages.size() == 1 ) + messageLabel = "explicitly with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "explicitly with messages"; + break; + // These cases are here to prevent compiler warnings + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + passOrFail = "** internal error **"; + colour = Colour::Error; + break; + } + } + + void print() const { + printSourceInfo(); + if( stats.totals.assertions.total() > 0 ) { + if( result.isOk() ) + stream << '\n'; + printResultType(); + printOriginalExpression(); + printReconstructedExpression(); + } + else { + stream << '\n'; + } + printMessage(); + } + + private: + void printResultType() const { + if( !passOrFail.empty() ) { + Colour colourGuard( colour ); + stream << passOrFail << ":\n"; + } + } + void printOriginalExpression() const { + if( result.hasExpression() ) { + Colour colourGuard( Colour::OriginalExpression ); + stream << " "; + stream << result.getExpressionInMacro(); + stream << '\n'; + } + } + void printReconstructedExpression() const { + if( result.hasExpandedExpression() ) { + stream << "with expansion:\n"; + Colour colourGuard( Colour::ReconstructedExpression ); + stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << '\n'; + } + } + void printMessage() const { + if( !messageLabel.empty() ) + stream << messageLabel << ':' << '\n'; + for( std::vector::const_iterator it = messages.begin(), itEnd = messages.end(); + it != itEnd; + ++it ) { + // If this assertion is a warning ignore any INFO messages + if( printInfoMessages || it->type != ResultWas::Info ) + stream << Text( it->message, TextAttributes().setIndent(2) ) << '\n'; + } + } + void printSourceInfo() const { + Colour colourGuard( Colour::FileName ); + stream << result.getSourceInfo() << ": "; + } + + std::ostream& stream; + AssertionStats const& stats; + AssertionResult const& result; + Colour::Code colour; + std::string passOrFail; + std::string messageLabel; + std::string message; + std::vector messages; + bool printInfoMessages; + }; + + void lazyPrint() { + + if( !currentTestRunInfo.used ) + lazyPrintRunInfo(); + if( !currentGroupInfo.used ) + lazyPrintGroupInfo(); + + if( !m_headerPrinted ) { + printTestCaseAndSectionHeader(); + m_headerPrinted = true; + } + } + void lazyPrintRunInfo() { + stream << '\n' << getLineOfChars<'~'>() << '\n'; + Colour colour( Colour::SecondaryText ); + stream << currentTestRunInfo->name + << " is a Catch v" << libraryVersion() << " host application.\n" + << "Run with -? for options\n\n"; + + if( m_config->rngSeed() != 0 ) + stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n"; + + currentTestRunInfo.used = true; + } + void lazyPrintGroupInfo() { + if( !currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1 ) { + printClosedHeader( "Group: " + currentGroupInfo->name ); + currentGroupInfo.used = true; + } + } + void printTestCaseAndSectionHeader() { + assert( !m_sectionStack.empty() ); + printOpenHeader( currentTestCaseInfo->name ); + + if( m_sectionStack.size() > 1 ) { + Colour colourGuard( Colour::Headers ); + + std::vector::const_iterator + it = m_sectionStack.begin()+1, // Skip first section (test case) + itEnd = m_sectionStack.end(); + for( ; it != itEnd; ++it ) + printHeaderString( it->name, 2 ); + } + + SourceLineInfo lineInfo = m_sectionStack.back().lineInfo; + + if( !lineInfo.empty() ){ + stream << getLineOfChars<'-'>() << '\n'; + Colour colourGuard( Colour::FileName ); + stream << lineInfo << '\n'; + } + stream << getLineOfChars<'.'>() << '\n' << std::endl; + } + + void printClosedHeader( std::string const& _name ) { + printOpenHeader( _name ); + stream << getLineOfChars<'.'>() << '\n'; + } + void printOpenHeader( std::string const& _name ) { + stream << getLineOfChars<'-'>() << '\n'; + { + Colour colourGuard( Colour::Headers ); + printHeaderString( _name ); + } + } + + // if string has a : in first line will set indent to follow it on + // subsequent lines + void printHeaderString( std::string const& _string, std::size_t indent = 0 ) { + std::size_t i = _string.find( ": " ); + if( i != std::string::npos ) + i+=2; + else + i = 0; + stream << Text( _string, TextAttributes() + .setIndent( indent+i) + .setInitialIndent( indent ) ) << '\n'; + } + + struct SummaryColumn { + + SummaryColumn( std::string const& _label, Colour::Code _colour ) + : label( _label ), + colour( _colour ) + {} + SummaryColumn addRow( std::size_t count ) { + std::ostringstream oss; + oss << count; + std::string row = oss.str(); + for( std::vector::iterator it = rows.begin(); it != rows.end(); ++it ) { + while( it->size() < row.size() ) + *it = ' ' + *it; + while( it->size() > row.size() ) + row = ' ' + row; + } + rows.push_back( row ); + return *this; + } + + std::string label; + Colour::Code colour; + std::vector rows; + + }; + + void printTotals( Totals const& totals ) { + if( totals.testCases.total() == 0 ) { + stream << Colour( Colour::Warning ) << "No tests ran\n"; + } + else if( totals.assertions.total() > 0 && totals.testCases.allPassed() ) { + stream << Colour( Colour::ResultSuccess ) << "All tests passed"; + stream << " (" + << pluralise( totals.assertions.passed, "assertion" ) << " in " + << pluralise( totals.testCases.passed, "test case" ) << ')' + << '\n'; + } + else { + + std::vector columns; + columns.push_back( SummaryColumn( "", Colour::None ) + .addRow( totals.testCases.total() ) + .addRow( totals.assertions.total() ) ); + columns.push_back( SummaryColumn( "passed", Colour::Success ) + .addRow( totals.testCases.passed ) + .addRow( totals.assertions.passed ) ); + columns.push_back( SummaryColumn( "failed", Colour::ResultError ) + .addRow( totals.testCases.failed ) + .addRow( totals.assertions.failed ) ); + columns.push_back( SummaryColumn( "failed as expected", Colour::ResultExpectedFailure ) + .addRow( totals.testCases.failedButOk ) + .addRow( totals.assertions.failedButOk ) ); + + printSummaryRow( "test cases", columns, 0 ); + printSummaryRow( "assertions", columns, 1 ); + } + } + void printSummaryRow( std::string const& label, std::vector const& cols, std::size_t row ) { + for( std::vector::const_iterator it = cols.begin(); it != cols.end(); ++it ) { + std::string value = it->rows[row]; + if( it->label.empty() ) { + stream << label << ": "; + if( value != "0" ) + stream << value; + else + stream << Colour( Colour::Warning ) << "- none -"; + } + else if( value != "0" ) { + stream << Colour( Colour::LightGrey ) << " | "; + stream << Colour( it->colour ) + << value << ' ' << it->label; + } + } + stream << '\n'; + } + + static std::size_t makeRatio( std::size_t number, std::size_t total ) { + std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number/ total : 0; + return ( ratio == 0 && number > 0 ) ? 1 : ratio; + } + static std::size_t& findMax( std::size_t& i, std::size_t& j, std::size_t& k ) { + if( i > j && i > k ) + return i; + else if( j > k ) + return j; + else + return k; + } + + void printTotalsDivider( Totals const& totals ) { + if( totals.testCases.total() > 0 ) { + std::size_t failedRatio = makeRatio( totals.testCases.failed, totals.testCases.total() ); + std::size_t failedButOkRatio = makeRatio( totals.testCases.failedButOk, totals.testCases.total() ); + std::size_t passedRatio = makeRatio( totals.testCases.passed, totals.testCases.total() ); + while( failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH-1 ) + findMax( failedRatio, failedButOkRatio, passedRatio )++; + while( failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH-1 ) + findMax( failedRatio, failedButOkRatio, passedRatio )--; + + stream << Colour( Colour::Error ) << std::string( failedRatio, '=' ); + stream << Colour( Colour::ResultExpectedFailure ) << std::string( failedButOkRatio, '=' ); + if( totals.testCases.allPassed() ) + stream << Colour( Colour::ResultSuccess ) << std::string( passedRatio, '=' ); + else + stream << Colour( Colour::Success ) << std::string( passedRatio, '=' ); + } + else { + stream << Colour( Colour::Warning ) << std::string( CATCH_CONFIG_CONSOLE_WIDTH-1, '=' ); + } + stream << '\n'; + } + void printSummaryDivider() { + stream << getLineOfChars<'-'>() << '\n'; + } + + private: + bool m_headerPrinted; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "console", ConsoleReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_compact.hpp +#define TWOBLUECUBES_CATCH_REPORTER_COMPACT_HPP_INCLUDED + +namespace Catch { + + struct CompactReporter : StreamingReporterBase { + + CompactReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ) + {} + + virtual ~CompactReporter(); + + static std::string getDescription() { + return "Reports test results on a single line, suitable for IDEs"; + } + + virtual ReporterPreferences getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = false; + return prefs; + } + + virtual void noMatchingTestCases( std::string const& spec ) { + stream << "No test cases matched '" << spec << '\'' << std::endl; + } + + virtual void assertionStarting( AssertionInfo const& ) {} + + virtual bool assertionEnded( AssertionStats const& _assertionStats ) { + AssertionResult const& result = _assertionStats.assertionResult; + + bool printInfoMessages = true; + + // Drop out if result was successful and we're not printing those + if( !m_config->includeSuccessfulResults() && result.isOk() ) { + if( result.getResultType() != ResultWas::Warning ) + return false; + printInfoMessages = false; + } + + AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); + printer.print(); + + stream << std::endl; + return true; + } + + virtual void sectionEnded(SectionStats const& _sectionStats) CATCH_OVERRIDE { + if (m_config->showDurations() == ShowDurations::Always) { + stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl; + } + } + + virtual void testRunEnded( TestRunStats const& _testRunStats ) { + printTotals( _testRunStats.totals ); + stream << '\n' << std::endl; + StreamingReporterBase::testRunEnded( _testRunStats ); + } + + private: + class AssertionPrinter { + void operator= ( AssertionPrinter const& ); + public: + AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages ) + : stream( _stream ) + , stats( _stats ) + , result( _stats.assertionResult ) + , messages( _stats.infoMessages ) + , itMessage( _stats.infoMessages.begin() ) + , printInfoMessages( _printInfoMessages ) + {} + + void print() { + printSourceInfo(); + + itMessage = messages.begin(); + + switch( result.getResultType() ) { + case ResultWas::Ok: + printResultType( Colour::ResultSuccess, passedString() ); + printOriginalExpression(); + printReconstructedExpression(); + if ( ! result.hasExpression() ) + printRemainingMessages( Colour::None ); + else + printRemainingMessages(); + break; + case ResultWas::ExpressionFailed: + if( result.isOk() ) + printResultType( Colour::ResultSuccess, failedString() + std::string( " - but was ok" ) ); + else + printResultType( Colour::Error, failedString() ); + printOriginalExpression(); + printReconstructedExpression(); + printRemainingMessages(); + break; + case ResultWas::ThrewException: + printResultType( Colour::Error, failedString() ); + printIssue( "unexpected exception with message:" ); + printMessage(); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::FatalErrorCondition: + printResultType( Colour::Error, failedString() ); + printIssue( "fatal error condition with message:" ); + printMessage(); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::DidntThrowException: + printResultType( Colour::Error, failedString() ); + printIssue( "expected exception, got none" ); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::Info: + printResultType( Colour::None, "info" ); + printMessage(); + printRemainingMessages(); + break; + case ResultWas::Warning: + printResultType( Colour::None, "warning" ); + printMessage(); + printRemainingMessages(); + break; + case ResultWas::ExplicitFailure: + printResultType( Colour::Error, failedString() ); + printIssue( "explicitly" ); + printRemainingMessages( Colour::None ); + break; + // These cases are here to prevent compiler warnings + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + printResultType( Colour::Error, "** internal error **" ); + break; + } + } + + private: + // Colour::LightGrey + + static Colour::Code dimColour() { return Colour::FileName; } + +#ifdef CATCH_PLATFORM_MAC + static const char* failedString() { return "FAILED"; } + static const char* passedString() { return "PASSED"; } +#else + static const char* failedString() { return "failed"; } + static const char* passedString() { return "passed"; } +#endif + + void printSourceInfo() const { + Colour colourGuard( Colour::FileName ); + stream << result.getSourceInfo() << ':'; + } + + void printResultType( Colour::Code colour, std::string const& passOrFail ) const { + if( !passOrFail.empty() ) { + { + Colour colourGuard( colour ); + stream << ' ' << passOrFail; + } + stream << ':'; + } + } + + void printIssue( std::string const& issue ) const { + stream << ' ' << issue; + } + + void printExpressionWas() { + if( result.hasExpression() ) { + stream << ';'; + { + Colour colour( dimColour() ); + stream << " expression was:"; + } + printOriginalExpression(); + } + } + + void printOriginalExpression() const { + if( result.hasExpression() ) { + stream << ' ' << result.getExpression(); + } + } + + void printReconstructedExpression() const { + if( result.hasExpandedExpression() ) { + { + Colour colour( dimColour() ); + stream << " for: "; + } + stream << result.getExpandedExpression(); + } + } + + void printMessage() { + if ( itMessage != messages.end() ) { + stream << " '" << itMessage->message << '\''; + ++itMessage; + } + } + + void printRemainingMessages( Colour::Code colour = dimColour() ) { + if ( itMessage == messages.end() ) + return; + + // using messages.end() directly yields compilation error: + std::vector::const_iterator itEnd = messages.end(); + const std::size_t N = static_cast( std::distance( itMessage, itEnd ) ); + + { + Colour colourGuard( colour ); + stream << " with " << pluralise( N, "message" ) << ':'; + } + + for(; itMessage != itEnd; ) { + // If this assertion is a warning ignore any INFO messages + if( printInfoMessages || itMessage->type != ResultWas::Info ) { + stream << " '" << itMessage->message << '\''; + if ( ++itMessage != itEnd ) { + Colour colourGuard( dimColour() ); + stream << " and"; + } + } + } + } + + private: + std::ostream& stream; + AssertionStats const& stats; + AssertionResult const& result; + std::vector messages; + std::vector::const_iterator itMessage; + bool printInfoMessages; + }; + + // Colour, message variants: + // - white: No tests ran. + // - red: Failed [both/all] N test cases, failed [both/all] M assertions. + // - white: Passed [both/all] N test cases (no assertions). + // - red: Failed N tests cases, failed M assertions. + // - green: Passed [both/all] N tests cases with M assertions. + + std::string bothOrAll( std::size_t count ) const { + return count == 1 ? std::string() : count == 2 ? "both " : "all " ; + } + + void printTotals( const Totals& totals ) const { + if( totals.testCases.total() == 0 ) { + stream << "No tests ran."; + } + else if( totals.testCases.failed == totals.testCases.total() ) { + Colour colour( Colour::ResultError ); + const std::string qualify_assertions_failed = + totals.assertions.failed == totals.assertions.total() ? + bothOrAll( totals.assertions.failed ) : std::string(); + stream << + "Failed " << bothOrAll( totals.testCases.failed ) + << pluralise( totals.testCases.failed, "test case" ) << ", " + "failed " << qualify_assertions_failed << + pluralise( totals.assertions.failed, "assertion" ) << '.'; + } + else if( totals.assertions.total() == 0 ) { + stream << + "Passed " << bothOrAll( totals.testCases.total() ) + << pluralise( totals.testCases.total(), "test case" ) + << " (no assertions)."; + } + else if( totals.assertions.failed ) { + Colour colour( Colour::ResultError ); + stream << + "Failed " << pluralise( totals.testCases.failed, "test case" ) << ", " + "failed " << pluralise( totals.assertions.failed, "assertion" ) << '.'; + } + else { + Colour colour( Colour::ResultSuccess ); + stream << + "Passed " << bothOrAll( totals.testCases.passed ) + << pluralise( totals.testCases.passed, "test case" ) << + " with " << pluralise( totals.assertions.passed, "assertion" ) << '.'; + } + } + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "compact", CompactReporter ) + +} // end namespace Catch + +namespace Catch { + // These are all here to avoid warnings about not having any out of line + // virtual methods + NonCopyable::~NonCopyable() {} + IShared::~IShared() {} + IStream::~IStream() CATCH_NOEXCEPT {} + FileStream::~FileStream() CATCH_NOEXCEPT {} + CoutStream::~CoutStream() CATCH_NOEXCEPT {} + DebugOutStream::~DebugOutStream() CATCH_NOEXCEPT {} + StreamBufBase::~StreamBufBase() CATCH_NOEXCEPT {} + IContext::~IContext() {} + IResultCapture::~IResultCapture() {} + ITestCase::~ITestCase() {} + ITestCaseRegistry::~ITestCaseRegistry() {} + IRegistryHub::~IRegistryHub() {} + IMutableRegistryHub::~IMutableRegistryHub() {} + IExceptionTranslator::~IExceptionTranslator() {} + IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() {} + IReporter::~IReporter() {} + IReporterFactory::~IReporterFactory() {} + IReporterRegistry::~IReporterRegistry() {} + IStreamingReporter::~IStreamingReporter() {} + AssertionStats::~AssertionStats() {} + SectionStats::~SectionStats() {} + TestCaseStats::~TestCaseStats() {} + TestGroupStats::~TestGroupStats() {} + TestRunStats::~TestRunStats() {} + CumulativeReporterBase::SectionNode::~SectionNode() {} + CumulativeReporterBase::~CumulativeReporterBase() {} + + StreamingReporterBase::~StreamingReporterBase() {} + ConsoleReporter::~ConsoleReporter() {} + CompactReporter::~CompactReporter() {} + IRunner::~IRunner() {} + IMutableContext::~IMutableContext() {} + IConfig::~IConfig() {} + XmlReporter::~XmlReporter() {} + JunitReporter::~JunitReporter() {} + TestRegistry::~TestRegistry() {} + FreeFunctionTestCase::~FreeFunctionTestCase() {} + IGeneratorInfo::~IGeneratorInfo() {} + IGeneratorsForTest::~IGeneratorsForTest() {} + WildcardPattern::~WildcardPattern() {} + TestSpec::Pattern::~Pattern() {} + TestSpec::NamePattern::~NamePattern() {} + TestSpec::TagPattern::~TagPattern() {} + TestSpec::ExcludedPattern::~ExcludedPattern() {} + Matchers::Impl::MatcherUntypedBase::~MatcherUntypedBase() {} + + void Config::dummy() {} + + namespace TestCaseTracking { + ITracker::~ITracker() {} + TrackerBase::~TrackerBase() {} + SectionTracker::~SectionTracker() {} + IndexTracker::~IndexTracker() {} + } +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif + +#ifdef CATCH_CONFIG_MAIN +// #included from: internal/catch_default_main.hpp +#define TWOBLUECUBES_CATCH_DEFAULT_MAIN_HPP_INCLUDED + +#ifndef __OBJC__ + +#if defined(WIN32) && defined(_UNICODE) && !defined(DO_NOT_USE_WMAIN) +// Standard C/C++ Win32 Unicode wmain entry point +extern "C" int wmain (int argc, wchar_t * argv[], wchar_t * []) { +#else +// Standard C/C++ main entry point +int main (int argc, char * argv[]) { +#endif + + int result = Catch::Session().run( argc, argv ); + return ( result < 0xff ? result : 0xff ); +} + +#else // __OBJC__ + +// Objective-C entry point +int main (int argc, char * const argv[]) { +#if !CATCH_ARC_ENABLED + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; +#endif + + Catch::registerTestMethods(); + int result = Catch::Session().run( argc, (char* const*)argv ); + +#if !CATCH_ARC_ENABLED + [pool drain]; +#endif + + return ( result < 0xff ? result : 0xff ); +} + +#endif // __OBJC__ + +#endif + +#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED +# undef CLARA_CONFIG_MAIN +#endif + +////// + +// If this config identifier is defined then all CATCH macros are prefixed with CATCH_ +#ifdef CATCH_CONFIG_PREFIX_ALL + +#if defined(CATCH_CONFIG_FAST_COMPILE) +#define CATCH_REQUIRE( expr ) INTERNAL_CATCH_TEST_NO_TRY( "CATCH_REQUIRE", Catch::ResultDisposition::Normal, expr ) +#define CATCH_REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST_NO_TRY( "CATCH_REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, expr ) +#else +#define CATCH_REQUIRE( expr ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE", Catch::ResultDisposition::Normal, expr ) +#define CATCH_REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, expr ) +#endif + +#define CATCH_REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, "", expr ) +#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr ) +#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr ) +#define CATCH_REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, expr ) + +#define CATCH_CHECK( expr ) INTERNAL_CATCH_TEST( "CATCH_CHECK", Catch::ResultDisposition::ContinueOnFailure, expr ) +#define CATCH_CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( "CATCH_CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, expr ) +#define CATCH_CHECKED_IF( expr ) INTERNAL_CATCH_IF( "CATCH_CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, expr ) +#define CATCH_CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( "CATCH_CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, expr ) +#define CATCH_CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( "CATCH_CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, expr ) + +#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, "", expr ) +#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr ) +#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr ) +#define CATCH_CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, expr ) + +#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg ) + +#if defined(CATCH_CONFIG_FAST_COMPILE) +#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT_NO_TRY( "CATCH_REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg ) +#else +#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg ) +#endif + +#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg ) +#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( "CATCH_WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg ) +#define CATCH_SCOPED_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg ) +#define CATCH_CAPTURE( msg ) INTERNAL_CATCH_INFO( "CATCH_CAPTURE", #msg " := " << Catch::toString(msg) ) +#define CATCH_SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( "CATCH_CAPTURE", #msg " := " << Catch::toString(msg) ) + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) + #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) + #define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) + #define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) + #define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) + #define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ ) + #define CATCH_FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) + #define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) +#else + #define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) + #define CATCH_TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) + #define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) + #define CATCH_REGISTER_TEST_CASE( function, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( function, name, description ) + #define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) + #define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( "CATCH_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, msg ) + #define CATCH_FAIL_CHECK( msg ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, msg ) + #define CATCH_SUCCEED( msg ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, msg ) +#endif +#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" ) + +#define CATCH_REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) +#define CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) + +#define CATCH_GENERATE( expr) INTERNAL_CATCH_GENERATE( expr ) + +// "BDD-style" convenience wrappers +#ifdef CATCH_CONFIG_VARIADIC_MACROS +#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ ) +#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) +#else +#define CATCH_SCENARIO( name, tags ) CATCH_TEST_CASE( "Scenario: " name, tags ) +#define CATCH_SCENARIO_METHOD( className, name, tags ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " name, tags ) +#endif +#define CATCH_GIVEN( desc ) CATCH_SECTION( std::string( "Given: ") + desc, "" ) +#define CATCH_WHEN( desc ) CATCH_SECTION( std::string( " When: ") + desc, "" ) +#define CATCH_AND_WHEN( desc ) CATCH_SECTION( std::string( " And: ") + desc, "" ) +#define CATCH_THEN( desc ) CATCH_SECTION( std::string( " Then: ") + desc, "" ) +#define CATCH_AND_THEN( desc ) CATCH_SECTION( std::string( " And: ") + desc, "" ) + +// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required +#else + +#if defined(CATCH_CONFIG_FAST_COMPILE) +#define REQUIRE( expr ) INTERNAL_CATCH_TEST_NO_TRY( "REQUIRE", Catch::ResultDisposition::Normal, expr ) +#define REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST_NO_TRY( "REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, expr ) + +#else +#define REQUIRE( expr ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, expr ) +#define REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( "REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, expr ) +#endif + +#define REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, "", expr ) +#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr ) +#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr ) +#define REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, expr ) + +#define CHECK( expr ) INTERNAL_CATCH_TEST( "CHECK", Catch::ResultDisposition::ContinueOnFailure, expr ) +#define CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( "CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, expr ) +#define CHECKED_IF( expr ) INTERNAL_CATCH_IF( "CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, expr ) +#define CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( "CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, expr ) +#define CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( "CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, expr ) + +#define CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, "", expr ) +#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr ) +#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( "CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr ) +#define CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, expr ) + +#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg ) + +#if defined(CATCH_CONFIG_FAST_COMPILE) +#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT_NO_TRY( "REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg ) +#else +#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg ) +#endif + +#define INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg ) +#define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg ) +#define SCOPED_INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg ) +#define CAPTURE( msg ) INTERNAL_CATCH_INFO( "CAPTURE", #msg " := " << Catch::toString(msg) ) +#define SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( "CAPTURE", #msg " := " << Catch::toString(msg) ) + +#ifdef CATCH_CONFIG_VARIADIC_MACROS +#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) +#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) +#define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) +#define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) +#define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) +#define FAIL( ... ) INTERNAL_CATCH_MSG( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ ) +#define FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) +#define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) +#else +#define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) + #define TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) + #define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) + #define REGISTER_TEST_CASE( method, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( method, name, description ) + #define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) + #define FAIL( msg ) INTERNAL_CATCH_MSG( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, msg ) + #define FAIL_CHECK( msg ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, msg ) + #define SUCCEED( msg ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, msg ) +#endif +#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" ) + +#define REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) +#define REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) + +#define GENERATE( expr) INTERNAL_CATCH_GENERATE( expr ) + +#endif + +#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) + +// "BDD-style" convenience wrappers +#ifdef CATCH_CONFIG_VARIADIC_MACROS +#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ ) +#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) +#else +#define SCENARIO( name, tags ) TEST_CASE( "Scenario: " name, tags ) +#define SCENARIO_METHOD( className, name, tags ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " name, tags ) +#endif +#define GIVEN( desc ) SECTION( std::string(" Given: ") + desc, "" ) +#define WHEN( desc ) SECTION( std::string(" When: ") + desc, "" ) +#define AND_WHEN( desc ) SECTION( std::string("And when: ") + desc, "" ) +#define THEN( desc ) SECTION( std::string(" Then: ") + desc, "" ) +#define AND_THEN( desc ) SECTION( std::string(" And: ") + desc, "" ) + +using Catch::Detail::Approx; + +// #included from: internal/catch_reenable_warnings.h + +#define TWOBLUECUBES_CATCH_REENABLE_WARNINGS_H_INCLUDED + +#ifdef __clang__ +# ifdef __ICC // icpc defines the __clang__ macro +# pragma warning(pop) +# else +# pragma clang diagnostic pop +# endif +#elif defined __GNUC__ +# pragma GCC diagnostic pop +#endif + +#endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED + diff --git a/geom_bottleneck/tests/test_hera_bottleneck.cpp b/geom_bottleneck/tests/test_hera_bottleneck.cpp new file mode 100644 index 0000000..f3b160b --- /dev/null +++ b/geom_bottleneck/tests/test_hera_bottleneck.cpp @@ -0,0 +1,446 @@ +#include "catch/catch.hpp" + +#include +#include + +#include "bottleneck.h" + +using PairVector = std::vector>; + +std::vector split_on_delim(const std::string& s, char delim) +{ + std::stringstream ss(s); + std::string token; + std::vector tokens; + while(std::getline(ss, token, delim)) { + tokens.push_back(token); + } + return tokens; +} + + +// single row in a file with test cases +struct TestFromFileCase { + + std::string file_1; + std::string file_2; + double q; + double internal_p; + double answer; + + TestFromFileCase(std::string s) + { + auto tokens = split_on_delim(s, ' '); + assert(tokens.size() == 5); + + file_1 = tokens.at(0); + file_2 = tokens.at(1); + q = std::stod(tokens.at(2)); + internal_p = std::stod(tokens.at(3)); + answer = std::stod(tokens.at(4)); + + if ( q < 1.0 or std::isinf(q) or + (internal_p != hera::get_infinity() and internal_p < 1.0)) { + throw std::runtime_error("Bad line in test_list.txt"); + } + } +}; + +std::ostream& operator<<(std::ostream& out, const TestFromFileCase& s) +{ + out << "[" << s.file_1 << ", " << s.file_2 << ", q = " << s.q << ", norm = "; + if (s.internal_p != hera::get_infinity()) { + out << s.internal_p; + } else { + out << "infinity"; + } + out << ", answer = " << s.answer << "]"; + return out; +} + + +TEST_CASE("simple cases", "bottleneckDistApprox") +{ + PairVector diagram_A, diagram_B; + double delta = 0.01; + //double internal_p = hera::get_infinity(); + + SECTION("trivial: two empty diagrams") { + REQUIRE( 0.0 == hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta)); + } + + SECTION("trivial: one empty diagram, one single-point diagram") { + + diagram_A.emplace_back(1.0, 2.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + REQUIRE( fabs(d1 - 0.5) <= 0.00000000001 ); + + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + REQUIRE( fabs(d2 - 0.5) <= 0.00000000001 ); + } + + SECTION("trivial: two single-point diagrams-1") { + + diagram_A.emplace_back(10.0, 20.0); // (5, 5) + diagram_B.emplace_back(13.0, 19.0); // (3, 3) + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double correct_answer = 3.0; + REQUIRE( fabs(d1 - correct_answer) <= delta * correct_answer); + REQUIRE( fabs(d2 - correct_answer) <= delta * correct_answer); + } + + SECTION("trivial: two single-point diagrams-2") { + + diagram_A.emplace_back(10.0, 20.0); // (5, 5) + diagram_B.emplace_back(130.0, 138.0); // (4, 4) + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double correct_answer = 5.0; + REQUIRE( fabs(d1 - correct_answer) <= delta * correct_answer ); + REQUIRE( fabs(d2 - correct_answer) <= delta * correct_answer ); + + } + +} + + +TEST_CASE("infinity points", "bottleneckDistApprox") +{ + PairVector diagram_A, diagram_B; + double delta = 0.01; + + // do not use Hera's infinity! it is -1 + double inf = std::numeric_limits::infinity(); + + SECTION("two points at infinity, no finite points") { + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + double d = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double corr_answer = 1.0; + REQUIRE( fabs(d - corr_answer) <= delta * corr_answer); + } + + SECTION("two points at infinity") { + + // edge cost 3.0 + diagram_A.emplace_back(10.0, 20.0); // (5, 5) + diagram_B.emplace_back(13.0, 19.0); // (3, 3) + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + double d = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double corr_answer = 3.0; + REQUIRE( fabs(d - corr_answer) <= delta * corr_answer); + } + + SECTION("three points at infinity, no finite points") { + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + diagram_B.emplace_back(2.0, inf); + + double d = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double corr_answer = inf; + REQUIRE( d == corr_answer ); + } + + SECTION("three points at infinity") { + + // edge cost 3.0 + diagram_A.emplace_back(10.0, 20.0); // (5, 5) + diagram_B.emplace_back(13.0, 19.0); // (3, 3) + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + double d = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double corr_answer = inf; + REQUIRE( d == corr_answer ); + } + + + SECTION("all four corners at infinity, no finite points, finite answer") { + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + // edge cost 1.0 + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + // edge cost 1.0 + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + // edge cost 1.0 + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + + double d = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double corr_answer = 1.0; + + REQUIRE( d == corr_answer ); + } + + SECTION("all four corners at infinity, no finite points, infinite answer-1") { + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + // edge cost 1.0 + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + // edge cost 1.0 + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + // edge cost 1.0 + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double corr_answer = inf; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + } + + SECTION("all four corners at infinity, no finite points, infinite answer-2") { + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + // edge cost 1.0 + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + // edge cost 1.0 + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + // edge cost 1.0 + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double corr_answer = inf; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + } + + SECTION("all four corners at infinity, no finite points, infinite answer-3") { + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + // edge cost 1.0 + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + // edge cost 1.0 + diagram_A.emplace_back(inf, 1.0); + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + // edge cost 1.0 + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double corr_answer = inf; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + } + + SECTION("all four corners at infinity, no finite points, infinite answer-4") { + + // edge cost 1.0 + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + // edge cost 1.0 + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + // edge cost 1.0 + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + // edge cost 1.0 + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + diagram_B.emplace_back(-inf, 2.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double corr_answer = inf; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + } + + SECTION("all four corners at infinity, with finite points, infinite answer-1") { + + diagram_A.emplace_back(1.0, inf); + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + + // finite edge + diagram_A.emplace_back(10.0, 20.0); + diagram_B.emplace_back(13.0, 19.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double corr_answer = inf; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + } + + SECTION("all four corners at infinity, with finite points, infinite answer-2") { + + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + + // finite edge + diagram_A.emplace_back(10.0, 20.0); + diagram_B.emplace_back(13.0, 19.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double corr_answer = inf; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + } + + SECTION("all four corners at infinity, with finite points, infinite answer-3") { + + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + diagram_A.emplace_back(inf, 1.0); + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + + // finite edge + diagram_A.emplace_back(10.0, 20.0); + diagram_B.emplace_back(13.0, 19.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double corr_answer = inf; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + } + + SECTION("all four corners at infinity, no finite points, infinite answer-4") { + + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + diagram_A.emplace_back(1.0, -inf); + diagram_B.emplace_back(2.0, -inf); + + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + diagram_A.emplace_back(-inf, 1.0); + diagram_B.emplace_back(-inf, 2.0); + diagram_B.emplace_back(-inf, 2.0); + + // finite edge + diagram_A.emplace_back(10.0, 20.0); + diagram_B.emplace_back(13.0, 19.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); + double corr_answer = inf; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + } + + + SECTION("simple small example with finite answer") { + diagram_A.emplace_back(1.0, inf); + diagram_B.emplace_back(2.0, inf); + + diagram_A.emplace_back(1.9, inf); + diagram_B.emplace_back(1.1, inf); + + // 1.1 - 1.0 + 2.0 - 1.9 = 0.2 + + diagram_A.emplace_back(inf, 1.0); + diagram_B.emplace_back(inf, 2.0); + + diagram_A.emplace_back(inf, 1.9); + diagram_B.emplace_back(inf, 1.1); + + + // finite edge + diagram_A.emplace_back(10.0, 20.0); + diagram_B.emplace_back(13.0, 19.0); + + double d1 = hera::bottleneckDistExact<>(diagram_A, diagram_B); + double d2 = hera::bottleneckDistExact<>(diagram_B, diagram_A); + double corr_answer = 3.0; + + REQUIRE( d1 == corr_answer ); + REQUIRE( d2 == corr_answer ); + + + } + +} + diff --git a/geom_bottleneck/tests/tests_main.cpp b/geom_bottleneck/tests/tests_main.cpp new file mode 100644 index 0000000..d24407e --- /dev/null +++ b/geom_bottleneck/tests/tests_main.cpp @@ -0,0 +1,3 @@ +#define LOG_AUCTION +#define CATCH_CONFIG_MAIN +#include "catch/catch.hpp" -- cgit v1.2.3 From 4e3fcd2f8596f39b9bff8cdd8d9789fdffe8a49c Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Tue, 19 Jun 2018 21:49:23 +0200 Subject: Longest edge for bottleneck, tests for bottleneck --- geom_bottleneck/example/bottleneck_dist.cpp | 9 +- geom_bottleneck/include/basic_defs_bt.h | 71 +- geom_bottleneck/include/bottleneck_detail.hpp | 200 +- geom_bottleneck/include/bound_match.hpp | 797 ++-- geom_bottleneck/include/dnn/local/kd-tree.hpp | 6 +- geom_bottleneck/include/neighb_oracle.h | 2 +- geom_bottleneck/tests/data/test_001_A | 1 + geom_bottleneck/tests/data/test_001_B | 1 + geom_bottleneck/tests/data/test_002_A | 1 + geom_bottleneck/tests/data/test_002_B | 1 + geom_bottleneck/tests/data/test_003_A | 2 + geom_bottleneck/tests/data/test_003_B | 2 + geom_bottleneck/tests/data/test_004_A | 2 + geom_bottleneck/tests/data/test_004_B | 3 + geom_bottleneck/tests/data/test_005_A | 6 + geom_bottleneck/tests/data/test_005_B | 6 + geom_bottleneck/tests/data/test_006_A | 7 + geom_bottleneck/tests/data/test_006_B | 7 + geom_bottleneck/tests/data/test_007_A | 0 geom_bottleneck/tests/data/test_007_B | 0 geom_bottleneck/tests/data/test_008_A | 0 geom_bottleneck/tests/data/test_008_B | 0 geom_bottleneck/tests/data/test_009_A | 0 geom_bottleneck/tests/data/test_009_B | 0 geom_bottleneck/tests/data/test_010_A | 100 + geom_bottleneck/tests/data/test_010_B | 100 + geom_bottleneck/tests/data/test_011_A | 200 + geom_bottleneck/tests/data/test_011_B | 200 + geom_bottleneck/tests/data/test_012_A | 5000 ++++++++++++++++++++ geom_bottleneck/tests/data/test_012_B | 5000 ++++++++++++++++++++ geom_bottleneck/tests/data/test_013_A | 5 + geom_bottleneck/tests/data/test_013_B | 5 + geom_bottleneck/tests/data/test_014_A | 1 + geom_bottleneck/tests/data/test_014_B | 1 + geom_bottleneck/tests/data/test_015_A | 1 + geom_bottleneck/tests/data/test_015_B | 1 + geom_bottleneck/tests/data/test_016_A | 220 + geom_bottleneck/tests/data/test_016_B | 193 + geom_bottleneck/tests/data/test_100_A | 2 + geom_bottleneck/tests/data/test_100_B | 2 + geom_bottleneck/tests/data/test_101_A | 2 + geom_bottleneck/tests/data/test_101_B | 2 + geom_bottleneck/tests/data/test_102_A | 2 + geom_bottleneck/tests/data/test_102_B | 2 + geom_bottleneck/tests/data/test_103_A | 2 + geom_bottleneck/tests/data/test_103_B | 2 + geom_bottleneck/tests/data/test_104_A | 2 + geom_bottleneck/tests/data/test_104_B | 2 + geom_bottleneck/tests/data/test_105_A | 2 + geom_bottleneck/tests/data/test_105_B | 2 + geom_bottleneck/tests/data/test_106_A | 2 + geom_bottleneck/tests/data/test_106_B | 2 + geom_bottleneck/tests/data/test_107_A | 2 + geom_bottleneck/tests/data/test_107_B | 2 + geom_bottleneck/tests/data/test_108_A | 2 + geom_bottleneck/tests/data/test_108_B | 2 + geom_bottleneck/tests/data/test_109_A | 2 + geom_bottleneck/tests/data/test_109_B | 2 + geom_bottleneck/tests/data/test_110_A | 2 + geom_bottleneck/tests/data/test_110_B | 2 + geom_bottleneck/tests/data/test_111_A | 2 + geom_bottleneck/tests/data/test_111_B | 2 + geom_bottleneck/tests/data/test_112_A | 2 + geom_bottleneck/tests/data/test_112_B | 2 + geom_bottleneck/tests/data/test_113_A | 2 + geom_bottleneck/tests/data/test_113_B | 2 + geom_bottleneck/tests/data/test_114_A | 2 + geom_bottleneck/tests/data/test_114_B | 2 + geom_bottleneck/tests/data/test_115_A | 2 + geom_bottleneck/tests/data/test_115_B | 2 + geom_bottleneck/tests/data/test_116_A | 2 + geom_bottleneck/tests/data/test_116_B | 2 + geom_bottleneck/tests/data/test_117_A | 2 + geom_bottleneck/tests/data/test_117_B | 2 + geom_bottleneck/tests/data/test_118_A | 2 + geom_bottleneck/tests/data/test_118_B | 2 + geom_bottleneck/tests/data/test_119_A | 2 + geom_bottleneck/tests/data/test_119_B | 2 + geom_bottleneck/tests/data/test_120_A | 3 + geom_bottleneck/tests/data/test_120_B | 3 + geom_bottleneck/tests/data/test_121_A | 3 + geom_bottleneck/tests/data/test_121_B | 3 + geom_bottleneck/tests/data/test_122_A | 3 + geom_bottleneck/tests/data/test_122_B | 3 + geom_bottleneck/tests/data/test_123_A | 3 + geom_bottleneck/tests/data/test_123_B | 3 + geom_bottleneck/tests/data/test_124_A | 3 + geom_bottleneck/tests/data/test_124_B | 3 + geom_bottleneck/tests/data/test_125_A | 3 + geom_bottleneck/tests/data/test_125_B | 3 + geom_bottleneck/tests/data/test_126_A | 3 + geom_bottleneck/tests/data/test_126_B | 3 + geom_bottleneck/tests/data/test_127_A | 3 + geom_bottleneck/tests/data/test_127_B | 3 + geom_bottleneck/tests/data/test_128_A | 3 + geom_bottleneck/tests/data/test_128_B | 3 + geom_bottleneck/tests/data/test_129_A | 3 + geom_bottleneck/tests/data/test_129_B | 3 + geom_bottleneck/tests/data/test_130_A | 3 + geom_bottleneck/tests/data/test_130_B | 3 + geom_bottleneck/tests/data/test_131_A | 3 + geom_bottleneck/tests/data/test_131_B | 3 + geom_bottleneck/tests/data/test_132_A | 3 + geom_bottleneck/tests/data/test_132_B | 3 + geom_bottleneck/tests/data/test_133_A | 3 + geom_bottleneck/tests/data/test_133_B | 3 + geom_bottleneck/tests/data/test_134_A | 3 + geom_bottleneck/tests/data/test_134_B | 3 + geom_bottleneck/tests/data/test_135_A | 3 + geom_bottleneck/tests/data/test_135_B | 3 + geom_bottleneck/tests/data/test_136_A | 3 + geom_bottleneck/tests/data/test_136_B | 3 + geom_bottleneck/tests/data/test_137_A | 3 + geom_bottleneck/tests/data/test_137_B | 3 + geom_bottleneck/tests/data/test_138_A | 3 + geom_bottleneck/tests/data/test_138_B | 3 + geom_bottleneck/tests/data/test_139_A | 3 + geom_bottleneck/tests/data/test_139_B | 3 + geom_bottleneck/tests/data/test_140_A | 4 + geom_bottleneck/tests/data/test_140_B | 4 + geom_bottleneck/tests/data/test_141_A | 4 + geom_bottleneck/tests/data/test_141_B | 4 + geom_bottleneck/tests/data/test_142_A | 4 + geom_bottleneck/tests/data/test_142_B | 4 + geom_bottleneck/tests/data/test_143_A | 4 + geom_bottleneck/tests/data/test_143_B | 4 + geom_bottleneck/tests/data/test_144_A | 4 + geom_bottleneck/tests/data/test_144_B | 4 + geom_bottleneck/tests/data/test_145_A | 4 + geom_bottleneck/tests/data/test_145_B | 4 + geom_bottleneck/tests/data/test_146_A | 4 + geom_bottleneck/tests/data/test_146_B | 4 + geom_bottleneck/tests/data/test_147_A | 4 + geom_bottleneck/tests/data/test_147_B | 4 + geom_bottleneck/tests/data/test_148_A | 4 + geom_bottleneck/tests/data/test_148_B | 4 + geom_bottleneck/tests/data/test_149_A | 4 + geom_bottleneck/tests/data/test_149_B | 4 + geom_bottleneck/tests/data/test_150_A | 4 + geom_bottleneck/tests/data/test_150_B | 4 + geom_bottleneck/tests/data/test_151_A | 4 + geom_bottleneck/tests/data/test_151_B | 4 + geom_bottleneck/tests/data/test_152_A | 4 + geom_bottleneck/tests/data/test_152_B | 4 + geom_bottleneck/tests/data/test_153_A | 4 + geom_bottleneck/tests/data/test_153_B | 4 + geom_bottleneck/tests/data/test_154_A | 4 + geom_bottleneck/tests/data/test_154_B | 4 + geom_bottleneck/tests/data/test_155_A | 4 + geom_bottleneck/tests/data/test_155_B | 4 + geom_bottleneck/tests/data/test_156_A | 4 + geom_bottleneck/tests/data/test_156_B | 4 + geom_bottleneck/tests/data/test_157_A | 4 + geom_bottleneck/tests/data/test_157_B | 4 + geom_bottleneck/tests/data/test_158_A | 4 + geom_bottleneck/tests/data/test_158_B | 4 + geom_bottleneck/tests/data/test_159_A | 4 + geom_bottleneck/tests/data/test_159_B | 4 + geom_bottleneck/tests/data/test_160_A | 5 + geom_bottleneck/tests/data/test_160_B | 5 + geom_bottleneck/tests/data/test_161_A | 5 + geom_bottleneck/tests/data/test_161_B | 5 + geom_bottleneck/tests/data/test_162_A | 5 + geom_bottleneck/tests/data/test_162_B | 5 + geom_bottleneck/tests/data/test_163_A | 5 + geom_bottleneck/tests/data/test_163_B | 5 + geom_bottleneck/tests/data/test_164_A | 5 + geom_bottleneck/tests/data/test_164_B | 5 + geom_bottleneck/tests/data/test_165_A | 5 + geom_bottleneck/tests/data/test_165_B | 5 + geom_bottleneck/tests/data/test_166_A | 5 + geom_bottleneck/tests/data/test_166_B | 5 + geom_bottleneck/tests/data/test_167_A | 5 + geom_bottleneck/tests/data/test_167_B | 5 + geom_bottleneck/tests/data/test_168_A | 5 + geom_bottleneck/tests/data/test_168_B | 5 + geom_bottleneck/tests/data/test_169_A | 5 + geom_bottleneck/tests/data/test_169_B | 5 + geom_bottleneck/tests/data/test_170_A | 5 + geom_bottleneck/tests/data/test_170_B | 5 + geom_bottleneck/tests/data/test_171_A | 5 + geom_bottleneck/tests/data/test_171_B | 5 + geom_bottleneck/tests/data/test_172_A | 5 + geom_bottleneck/tests/data/test_172_B | 5 + geom_bottleneck/tests/data/test_173_A | 5 + geom_bottleneck/tests/data/test_173_B | 5 + geom_bottleneck/tests/data/test_174_A | 5 + geom_bottleneck/tests/data/test_174_B | 5 + geom_bottleneck/tests/data/test_175_A | 5 + geom_bottleneck/tests/data/test_175_B | 5 + geom_bottleneck/tests/data/test_176_A | 5 + geom_bottleneck/tests/data/test_176_B | 5 + geom_bottleneck/tests/data/test_177_A | 5 + geom_bottleneck/tests/data/test_177_B | 5 + geom_bottleneck/tests/data/test_178_A | 5 + geom_bottleneck/tests/data/test_178_B | 5 + geom_bottleneck/tests/data/test_179_A | 5 + geom_bottleneck/tests/data/test_179_B | 5 + geom_bottleneck/tests/data/test_180_A | 6 + geom_bottleneck/tests/data/test_180_B | 6 + geom_bottleneck/tests/data/test_181_A | 6 + geom_bottleneck/tests/data/test_181_B | 6 + geom_bottleneck/tests/data/test_182_A | 6 + geom_bottleneck/tests/data/test_182_B | 6 + geom_bottleneck/tests/data/test_183_A | 6 + geom_bottleneck/tests/data/test_183_B | 6 + geom_bottleneck/tests/data/test_184_A | 6 + geom_bottleneck/tests/data/test_184_B | 6 + geom_bottleneck/tests/data/test_185_A | 6 + geom_bottleneck/tests/data/test_185_B | 6 + geom_bottleneck/tests/data/test_186_A | 6 + geom_bottleneck/tests/data/test_186_B | 6 + geom_bottleneck/tests/data/test_187_A | 6 + geom_bottleneck/tests/data/test_187_B | 6 + geom_bottleneck/tests/data/test_188_A | 6 + geom_bottleneck/tests/data/test_188_B | 6 + geom_bottleneck/tests/data/test_189_A | 6 + geom_bottleneck/tests/data/test_189_B | 6 + geom_bottleneck/tests/data/test_190_A | 6 + geom_bottleneck/tests/data/test_190_B | 6 + geom_bottleneck/tests/data/test_191_A | 6 + geom_bottleneck/tests/data/test_191_B | 6 + geom_bottleneck/tests/data/test_192_A | 6 + geom_bottleneck/tests/data/test_192_B | 6 + geom_bottleneck/tests/data/test_193_A | 6 + geom_bottleneck/tests/data/test_193_B | 6 + geom_bottleneck/tests/data/test_194_A | 6 + geom_bottleneck/tests/data/test_194_B | 6 + geom_bottleneck/tests/data/test_195_A | 6 + geom_bottleneck/tests/data/test_195_B | 6 + geom_bottleneck/tests/data/test_196_A | 6 + geom_bottleneck/tests/data/test_196_B | 6 + geom_bottleneck/tests/data/test_197_A | 6 + geom_bottleneck/tests/data/test_197_B | 6 + geom_bottleneck/tests/data/test_198_A | 6 + geom_bottleneck/tests/data/test_198_B | 6 + geom_bottleneck/tests/data/test_199_A | 6 + geom_bottleneck/tests/data/test_199_B | 6 + geom_bottleneck/tests/data/test_200_A | 7 + geom_bottleneck/tests/data/test_200_B | 7 + geom_bottleneck/tests/data/test_201_A | 7 + geom_bottleneck/tests/data/test_201_B | 7 + geom_bottleneck/tests/data/test_202_A | 7 + geom_bottleneck/tests/data/test_202_B | 7 + geom_bottleneck/tests/data/test_203_A | 7 + geom_bottleneck/tests/data/test_203_B | 7 + geom_bottleneck/tests/data/test_204_A | 7 + geom_bottleneck/tests/data/test_204_B | 7 + geom_bottleneck/tests/data/test_205_A | 7 + geom_bottleneck/tests/data/test_205_B | 7 + geom_bottleneck/tests/data/test_206_A | 7 + geom_bottleneck/tests/data/test_206_B | 7 + geom_bottleneck/tests/data/test_207_A | 7 + geom_bottleneck/tests/data/test_207_B | 7 + geom_bottleneck/tests/data/test_208_A | 7 + geom_bottleneck/tests/data/test_208_B | 7 + geom_bottleneck/tests/data/test_209_A | 7 + geom_bottleneck/tests/data/test_209_B | 7 + geom_bottleneck/tests/data/test_210_A | 7 + geom_bottleneck/tests/data/test_210_B | 7 + geom_bottleneck/tests/data/test_211_A | 7 + geom_bottleneck/tests/data/test_211_B | 7 + geom_bottleneck/tests/data/test_212_A | 7 + geom_bottleneck/tests/data/test_212_B | 7 + geom_bottleneck/tests/data/test_213_A | 7 + geom_bottleneck/tests/data/test_213_B | 7 + geom_bottleneck/tests/data/test_214_A | 7 + geom_bottleneck/tests/data/test_214_B | 7 + geom_bottleneck/tests/data/test_215_A | 7 + geom_bottleneck/tests/data/test_215_B | 7 + geom_bottleneck/tests/data/test_216_A | 7 + geom_bottleneck/tests/data/test_216_B | 7 + geom_bottleneck/tests/data/test_217_A | 7 + geom_bottleneck/tests/data/test_217_B | 7 + geom_bottleneck/tests/data/test_218_A | 7 + geom_bottleneck/tests/data/test_218_B | 7 + geom_bottleneck/tests/data/test_219_A | 7 + geom_bottleneck/tests/data/test_219_B | 7 + geom_bottleneck/tests/data/test_220_A | 8 + geom_bottleneck/tests/data/test_220_B | 8 + geom_bottleneck/tests/data/test_221_A | 8 + geom_bottleneck/tests/data/test_221_B | 8 + geom_bottleneck/tests/data/test_222_A | 8 + geom_bottleneck/tests/data/test_222_B | 8 + geom_bottleneck/tests/data/test_223_A | 8 + geom_bottleneck/tests/data/test_223_B | 8 + geom_bottleneck/tests/data/test_224_A | 8 + geom_bottleneck/tests/data/test_224_B | 8 + geom_bottleneck/tests/data/test_225_A | 8 + geom_bottleneck/tests/data/test_225_B | 8 + geom_bottleneck/tests/data/test_226_A | 8 + geom_bottleneck/tests/data/test_226_B | 8 + geom_bottleneck/tests/data/test_227_A | 8 + geom_bottleneck/tests/data/test_227_B | 8 + geom_bottleneck/tests/data/test_228_A | 8 + geom_bottleneck/tests/data/test_228_B | 8 + geom_bottleneck/tests/data/test_229_A | 8 + geom_bottleneck/tests/data/test_229_B | 8 + geom_bottleneck/tests/data/test_230_A | 8 + geom_bottleneck/tests/data/test_230_B | 8 + geom_bottleneck/tests/data/test_231_A | 8 + geom_bottleneck/tests/data/test_231_B | 8 + geom_bottleneck/tests/data/test_232_A | 8 + geom_bottleneck/tests/data/test_232_B | 8 + geom_bottleneck/tests/data/test_233_A | 8 + geom_bottleneck/tests/data/test_233_B | 8 + geom_bottleneck/tests/data/test_234_A | 8 + geom_bottleneck/tests/data/test_234_B | 8 + geom_bottleneck/tests/data/test_235_A | 8 + geom_bottleneck/tests/data/test_235_B | 8 + geom_bottleneck/tests/data/test_236_A | 8 + geom_bottleneck/tests/data/test_236_B | 8 + geom_bottleneck/tests/data/test_237_A | 8 + geom_bottleneck/tests/data/test_237_B | 8 + geom_bottleneck/tests/data/test_238_A | 8 + geom_bottleneck/tests/data/test_238_B | 8 + geom_bottleneck/tests/data/test_239_A | 8 + geom_bottleneck/tests/data/test_239_B | 8 + geom_bottleneck/tests/data/test_240_A | 9 + geom_bottleneck/tests/data/test_240_B | 9 + geom_bottleneck/tests/data/test_241_A | 9 + geom_bottleneck/tests/data/test_241_B | 9 + geom_bottleneck/tests/data/test_242_A | 9 + geom_bottleneck/tests/data/test_242_B | 9 + geom_bottleneck/tests/data/test_243_A | 9 + geom_bottleneck/tests/data/test_243_B | 9 + geom_bottleneck/tests/data/test_244_A | 9 + geom_bottleneck/tests/data/test_244_B | 9 + geom_bottleneck/tests/data/test_245_A | 9 + geom_bottleneck/tests/data/test_245_B | 9 + geom_bottleneck/tests/data/test_246_A | 9 + geom_bottleneck/tests/data/test_246_B | 9 + geom_bottleneck/tests/data/test_247_A | 9 + geom_bottleneck/tests/data/test_247_B | 9 + geom_bottleneck/tests/data/test_248_A | 9 + geom_bottleneck/tests/data/test_248_B | 9 + geom_bottleneck/tests/data/test_249_A | 9 + geom_bottleneck/tests/data/test_249_B | 9 + geom_bottleneck/tests/data/test_250_A | 9 + geom_bottleneck/tests/data/test_250_B | 9 + geom_bottleneck/tests/data/test_251_A | 9 + geom_bottleneck/tests/data/test_251_B | 9 + geom_bottleneck/tests/data/test_252_A | 9 + geom_bottleneck/tests/data/test_252_B | 9 + geom_bottleneck/tests/data/test_253_A | 9 + geom_bottleneck/tests/data/test_253_B | 9 + geom_bottleneck/tests/data/test_254_A | 9 + geom_bottleneck/tests/data/test_254_B | 9 + geom_bottleneck/tests/data/test_255_A | 9 + geom_bottleneck/tests/data/test_255_B | 9 + geom_bottleneck/tests/data/test_256_A | 9 + geom_bottleneck/tests/data/test_256_B | 9 + geom_bottleneck/tests/data/test_257_A | 9 + geom_bottleneck/tests/data/test_257_B | 9 + geom_bottleneck/tests/data/test_258_A | 9 + geom_bottleneck/tests/data/test_258_B | 9 + geom_bottleneck/tests/data/test_259_A | 9 + geom_bottleneck/tests/data/test_259_B | 9 + geom_bottleneck/tests/data/test_260_A | 10 + geom_bottleneck/tests/data/test_260_B | 10 + geom_bottleneck/tests/data/test_261_A | 10 + geom_bottleneck/tests/data/test_261_B | 10 + geom_bottleneck/tests/data/test_262_A | 10 + geom_bottleneck/tests/data/test_262_B | 10 + geom_bottleneck/tests/data/test_263_A | 10 + geom_bottleneck/tests/data/test_263_B | 10 + geom_bottleneck/tests/data/test_264_A | 10 + geom_bottleneck/tests/data/test_264_B | 10 + geom_bottleneck/tests/data/test_265_A | 10 + geom_bottleneck/tests/data/test_265_B | 10 + geom_bottleneck/tests/data/test_266_A | 10 + geom_bottleneck/tests/data/test_266_B | 10 + geom_bottleneck/tests/data/test_267_A | 10 + geom_bottleneck/tests/data/test_267_B | 10 + geom_bottleneck/tests/data/test_268_A | 10 + geom_bottleneck/tests/data/test_268_B | 10 + geom_bottleneck/tests/data/test_269_A | 10 + geom_bottleneck/tests/data/test_269_B | 10 + geom_bottleneck/tests/data/test_270_A | 10 + geom_bottleneck/tests/data/test_270_B | 10 + geom_bottleneck/tests/data/test_271_A | 10 + geom_bottleneck/tests/data/test_271_B | 10 + geom_bottleneck/tests/data/test_272_A | 10 + geom_bottleneck/tests/data/test_272_B | 10 + geom_bottleneck/tests/data/test_273_A | 10 + geom_bottleneck/tests/data/test_273_B | 10 + geom_bottleneck/tests/data/test_274_A | 10 + geom_bottleneck/tests/data/test_274_B | 10 + geom_bottleneck/tests/data/test_275_A | 10 + geom_bottleneck/tests/data/test_275_B | 10 + geom_bottleneck/tests/data/test_276_A | 10 + geom_bottleneck/tests/data/test_276_B | 10 + geom_bottleneck/tests/data/test_277_A | 10 + geom_bottleneck/tests/data/test_277_B | 10 + geom_bottleneck/tests/data/test_278_A | 10 + geom_bottleneck/tests/data/test_278_B | 10 + geom_bottleneck/tests/data/test_279_A | 10 + geom_bottleneck/tests/data/test_279_B | 10 + geom_bottleneck/tests/data/test_280_A | 20 + geom_bottleneck/tests/data/test_280_B | 20 + geom_bottleneck/tests/data/test_281_A | 20 + geom_bottleneck/tests/data/test_281_B | 20 + geom_bottleneck/tests/data/test_282_A | 20 + geom_bottleneck/tests/data/test_282_B | 20 + geom_bottleneck/tests/data/test_283_A | 20 + geom_bottleneck/tests/data/test_283_B | 20 + geom_bottleneck/tests/data/test_284_A | 20 + geom_bottleneck/tests/data/test_284_B | 20 + geom_bottleneck/tests/data/test_285_A | 20 + geom_bottleneck/tests/data/test_285_B | 20 + geom_bottleneck/tests/data/test_286_A | 20 + geom_bottleneck/tests/data/test_286_B | 20 + geom_bottleneck/tests/data/test_287_A | 20 + geom_bottleneck/tests/data/test_287_B | 20 + geom_bottleneck/tests/data/test_288_A | 20 + geom_bottleneck/tests/data/test_288_B | 20 + geom_bottleneck/tests/data/test_289_A | 20 + geom_bottleneck/tests/data/test_289_B | 20 + geom_bottleneck/tests/data/test_290_A | 20 + geom_bottleneck/tests/data/test_290_B | 20 + geom_bottleneck/tests/data/test_291_A | 20 + geom_bottleneck/tests/data/test_291_B | 20 + geom_bottleneck/tests/data/test_292_A | 20 + geom_bottleneck/tests/data/test_292_B | 20 + geom_bottleneck/tests/data/test_293_A | 20 + geom_bottleneck/tests/data/test_293_B | 20 + geom_bottleneck/tests/data/test_294_A | 20 + geom_bottleneck/tests/data/test_294_B | 20 + geom_bottleneck/tests/data/test_295_A | 20 + geom_bottleneck/tests/data/test_295_B | 20 + geom_bottleneck/tests/data/test_296_A | 20 + geom_bottleneck/tests/data/test_296_B | 20 + geom_bottleneck/tests/data/test_297_A | 20 + geom_bottleneck/tests/data/test_297_B | 20 + geom_bottleneck/tests/data/test_298_A | 20 + geom_bottleneck/tests/data/test_298_B | 20 + geom_bottleneck/tests/data/test_299_A | 20 + geom_bottleneck/tests/data/test_299_B | 20 + geom_bottleneck/tests/data/test_300_A | 30 + geom_bottleneck/tests/data/test_300_B | 30 + geom_bottleneck/tests/data/test_301_A | 30 + geom_bottleneck/tests/data/test_301_B | 30 + geom_bottleneck/tests/data/test_302_A | 30 + geom_bottleneck/tests/data/test_302_B | 30 + geom_bottleneck/tests/data/test_303_A | 30 + geom_bottleneck/tests/data/test_303_B | 30 + geom_bottleneck/tests/data/test_304_A | 30 + geom_bottleneck/tests/data/test_304_B | 30 + geom_bottleneck/tests/data/test_305_A | 30 + geom_bottleneck/tests/data/test_305_B | 30 + geom_bottleneck/tests/data/test_306_A | 30 + geom_bottleneck/tests/data/test_306_B | 30 + geom_bottleneck/tests/data/test_307_A | 30 + geom_bottleneck/tests/data/test_307_B | 30 + geom_bottleneck/tests/data/test_308_A | 30 + geom_bottleneck/tests/data/test_308_B | 30 + geom_bottleneck/tests/data/test_309_A | 30 + geom_bottleneck/tests/data/test_309_B | 30 + geom_bottleneck/tests/data/test_310_A | 30 + geom_bottleneck/tests/data/test_310_B | 30 + geom_bottleneck/tests/data/test_311_A | 30 + geom_bottleneck/tests/data/test_311_B | 30 + geom_bottleneck/tests/data/test_312_A | 30 + geom_bottleneck/tests/data/test_312_B | 30 + geom_bottleneck/tests/data/test_313_A | 30 + geom_bottleneck/tests/data/test_313_B | 30 + geom_bottleneck/tests/data/test_314_A | 30 + geom_bottleneck/tests/data/test_314_B | 30 + geom_bottleneck/tests/data/test_315_A | 30 + geom_bottleneck/tests/data/test_315_B | 30 + geom_bottleneck/tests/data/test_316_A | 30 + geom_bottleneck/tests/data/test_316_B | 30 + geom_bottleneck/tests/data/test_317_A | 30 + geom_bottleneck/tests/data/test_317_B | 30 + geom_bottleneck/tests/data/test_318_A | 30 + geom_bottleneck/tests/data/test_318_B | 30 + geom_bottleneck/tests/data/test_319_A | 30 + geom_bottleneck/tests/data/test_319_B | 30 + geom_bottleneck/tests/data/test_320_A | 50 + geom_bottleneck/tests/data/test_320_B | 50 + geom_bottleneck/tests/data/test_321_A | 50 + geom_bottleneck/tests/data/test_321_B | 50 + geom_bottleneck/tests/data/test_322_A | 50 + geom_bottleneck/tests/data/test_322_B | 50 + geom_bottleneck/tests/data/test_323_A | 50 + geom_bottleneck/tests/data/test_323_B | 50 + geom_bottleneck/tests/data/test_324_A | 50 + geom_bottleneck/tests/data/test_324_B | 50 + geom_bottleneck/tests/data/test_325_A | 50 + geom_bottleneck/tests/data/test_325_B | 50 + geom_bottleneck/tests/data/test_326_A | 50 + geom_bottleneck/tests/data/test_326_B | 50 + geom_bottleneck/tests/data/test_327_A | 50 + geom_bottleneck/tests/data/test_327_B | 50 + geom_bottleneck/tests/data/test_328_A | 50 + geom_bottleneck/tests/data/test_328_B | 50 + geom_bottleneck/tests/data/test_329_A | 50 + geom_bottleneck/tests/data/test_329_B | 50 + geom_bottleneck/tests/data/test_330_A | 50 + geom_bottleneck/tests/data/test_330_B | 50 + geom_bottleneck/tests/data/test_331_A | 50 + geom_bottleneck/tests/data/test_331_B | 50 + geom_bottleneck/tests/data/test_332_A | 50 + geom_bottleneck/tests/data/test_332_B | 50 + geom_bottleneck/tests/data/test_333_A | 50 + geom_bottleneck/tests/data/test_333_B | 50 + geom_bottleneck/tests/data/test_334_A | 50 + geom_bottleneck/tests/data/test_334_B | 50 + geom_bottleneck/tests/data/test_335_A | 50 + geom_bottleneck/tests/data/test_335_B | 50 + geom_bottleneck/tests/data/test_336_A | 50 + geom_bottleneck/tests/data/test_336_B | 50 + geom_bottleneck/tests/data/test_337_A | 50 + geom_bottleneck/tests/data/test_337_B | 50 + geom_bottleneck/tests/data/test_338_A | 50 + geom_bottleneck/tests/data/test_338_B | 50 + geom_bottleneck/tests/data/test_339_A | 50 + geom_bottleneck/tests/data/test_339_B | 50 + geom_bottleneck/tests/data/test_340_A | 100 + geom_bottleneck/tests/data/test_340_B | 100 + geom_bottleneck/tests/data/test_341_A | 100 + geom_bottleneck/tests/data/test_341_B | 100 + geom_bottleneck/tests/data/test_342_A | 100 + geom_bottleneck/tests/data/test_342_B | 100 + geom_bottleneck/tests/data/test_343_A | 100 + geom_bottleneck/tests/data/test_343_B | 100 + geom_bottleneck/tests/data/test_344_A | 100 + geom_bottleneck/tests/data/test_344_B | 100 + geom_bottleneck/tests/data/test_345_A | 100 + geom_bottleneck/tests/data/test_345_B | 100 + geom_bottleneck/tests/data/test_346_A | 100 + geom_bottleneck/tests/data/test_346_B | 100 + geom_bottleneck/tests/data/test_347_A | 100 + geom_bottleneck/tests/data/test_347_B | 100 + geom_bottleneck/tests/data/test_348_A | 100 + geom_bottleneck/tests/data/test_348_B | 100 + geom_bottleneck/tests/data/test_349_A | 100 + geom_bottleneck/tests/data/test_349_B | 100 + geom_bottleneck/tests/data/test_350_A | 100 + geom_bottleneck/tests/data/test_350_B | 100 + geom_bottleneck/tests/data/test_351_A | 100 + geom_bottleneck/tests/data/test_351_B | 100 + geom_bottleneck/tests/data/test_352_A | 100 + geom_bottleneck/tests/data/test_352_B | 100 + geom_bottleneck/tests/data/test_353_A | 100 + geom_bottleneck/tests/data/test_353_B | 100 + geom_bottleneck/tests/data/test_354_A | 100 + geom_bottleneck/tests/data/test_354_B | 100 + geom_bottleneck/tests/data/test_355_A | 100 + geom_bottleneck/tests/data/test_355_B | 100 + geom_bottleneck/tests/data/test_356_A | 100 + geom_bottleneck/tests/data/test_356_B | 100 + geom_bottleneck/tests/data/test_357_A | 100 + geom_bottleneck/tests/data/test_357_B | 100 + geom_bottleneck/tests/data/test_358_A | 100 + geom_bottleneck/tests/data/test_358_B | 100 + geom_bottleneck/tests/data/test_359_A | 100 + geom_bottleneck/tests/data/test_359_B | 100 + geom_bottleneck/tests/data/test_360_A | 2 + geom_bottleneck/tests/data/test_360_B | 2 + geom_bottleneck/tests/data/test_361_A | 2 + geom_bottleneck/tests/data/test_361_B | 2 + geom_bottleneck/tests/data/test_362_A | 2 + geom_bottleneck/tests/data/test_362_B | 2 + geom_bottleneck/tests/data/test_363_A | 2 + geom_bottleneck/tests/data/test_363_B | 2 + geom_bottleneck/tests/data/test_364_A | 2 + geom_bottleneck/tests/data/test_364_B | 2 + geom_bottleneck/tests/data/test_365_A | 2 + geom_bottleneck/tests/data/test_365_B | 2 + geom_bottleneck/tests/data/test_366_A | 2 + geom_bottleneck/tests/data/test_366_B | 2 + geom_bottleneck/tests/data/test_367_A | 2 + geom_bottleneck/tests/data/test_367_B | 2 + geom_bottleneck/tests/data/test_368_A | 2 + geom_bottleneck/tests/data/test_368_B | 2 + geom_bottleneck/tests/data/test_369_A | 2 + geom_bottleneck/tests/data/test_369_B | 2 + geom_bottleneck/tests/data/test_370_A | 2 + geom_bottleneck/tests/data/test_370_B | 2 + geom_bottleneck/tests/data/test_371_A | 2 + geom_bottleneck/tests/data/test_371_B | 2 + geom_bottleneck/tests/data/test_372_A | 2 + geom_bottleneck/tests/data/test_372_B | 2 + geom_bottleneck/tests/data/test_373_A | 2 + geom_bottleneck/tests/data/test_373_B | 2 + geom_bottleneck/tests/data/test_374_A | 2 + geom_bottleneck/tests/data/test_374_B | 2 + geom_bottleneck/tests/data/test_375_A | 2 + geom_bottleneck/tests/data/test_375_B | 2 + geom_bottleneck/tests/data/test_376_A | 2 + geom_bottleneck/tests/data/test_376_B | 2 + geom_bottleneck/tests/data/test_377_A | 2 + geom_bottleneck/tests/data/test_377_B | 2 + geom_bottleneck/tests/data/test_378_A | 2 + geom_bottleneck/tests/data/test_378_B | 2 + geom_bottleneck/tests/data/test_379_A | 2 + geom_bottleneck/tests/data/test_379_B | 2 + geom_bottleneck/tests/data/test_380_A | 3 + geom_bottleneck/tests/data/test_380_B | 3 + geom_bottleneck/tests/data/test_381_A | 3 + geom_bottleneck/tests/data/test_381_B | 3 + geom_bottleneck/tests/data/test_382_A | 3 + geom_bottleneck/tests/data/test_382_B | 3 + geom_bottleneck/tests/data/test_383_A | 3 + geom_bottleneck/tests/data/test_383_B | 3 + geom_bottleneck/tests/data/test_384_A | 3 + geom_bottleneck/tests/data/test_384_B | 3 + geom_bottleneck/tests/data/test_385_A | 3 + geom_bottleneck/tests/data/test_385_B | 3 + geom_bottleneck/tests/data/test_386_A | 3 + geom_bottleneck/tests/data/test_386_B | 3 + geom_bottleneck/tests/data/test_387_A | 3 + geom_bottleneck/tests/data/test_387_B | 3 + geom_bottleneck/tests/data/test_388_A | 3 + geom_bottleneck/tests/data/test_388_B | 3 + geom_bottleneck/tests/data/test_389_A | 3 + geom_bottleneck/tests/data/test_389_B | 3 + geom_bottleneck/tests/data/test_390_A | 3 + geom_bottleneck/tests/data/test_390_B | 3 + geom_bottleneck/tests/data/test_391_A | 3 + geom_bottleneck/tests/data/test_391_B | 3 + geom_bottleneck/tests/data/test_392_A | 3 + geom_bottleneck/tests/data/test_392_B | 3 + geom_bottleneck/tests/data/test_393_A | 3 + geom_bottleneck/tests/data/test_393_B | 3 + geom_bottleneck/tests/data/test_394_A | 3 + geom_bottleneck/tests/data/test_394_B | 3 + geom_bottleneck/tests/data/test_395_A | 3 + geom_bottleneck/tests/data/test_395_B | 3 + geom_bottleneck/tests/data/test_396_A | 3 + geom_bottleneck/tests/data/test_396_B | 3 + geom_bottleneck/tests/data/test_397_A | 3 + geom_bottleneck/tests/data/test_397_B | 3 + geom_bottleneck/tests/data/test_398_A | 3 + geom_bottleneck/tests/data/test_398_B | 3 + geom_bottleneck/tests/data/test_399_A | 3 + geom_bottleneck/tests/data/test_399_B | 3 + geom_bottleneck/tests/data/test_400_A | 4 + geom_bottleneck/tests/data/test_400_B | 4 + geom_bottleneck/tests/data/test_401_A | 4 + geom_bottleneck/tests/data/test_401_B | 4 + geom_bottleneck/tests/data/test_402_A | 4 + geom_bottleneck/tests/data/test_402_B | 4 + geom_bottleneck/tests/data/test_403_A | 4 + geom_bottleneck/tests/data/test_403_B | 4 + geom_bottleneck/tests/data/test_404_A | 4 + geom_bottleneck/tests/data/test_404_B | 4 + geom_bottleneck/tests/data/test_405_A | 4 + geom_bottleneck/tests/data/test_405_B | 4 + geom_bottleneck/tests/data/test_406_A | 4 + geom_bottleneck/tests/data/test_406_B | 4 + geom_bottleneck/tests/data/test_407_A | 4 + geom_bottleneck/tests/data/test_407_B | 4 + geom_bottleneck/tests/data/test_408_A | 4 + geom_bottleneck/tests/data/test_408_B | 4 + geom_bottleneck/tests/data/test_409_A | 4 + geom_bottleneck/tests/data/test_409_B | 4 + geom_bottleneck/tests/data/test_410_A | 4 + geom_bottleneck/tests/data/test_410_B | 4 + geom_bottleneck/tests/data/test_411_A | 4 + geom_bottleneck/tests/data/test_411_B | 4 + geom_bottleneck/tests/data/test_412_A | 4 + geom_bottleneck/tests/data/test_412_B | 4 + geom_bottleneck/tests/data/test_413_A | 4 + geom_bottleneck/tests/data/test_413_B | 4 + geom_bottleneck/tests/data/test_414_A | 4 + geom_bottleneck/tests/data/test_414_B | 4 + geom_bottleneck/tests/data/test_415_A | 4 + geom_bottleneck/tests/data/test_415_B | 4 + geom_bottleneck/tests/data/test_416_A | 4 + geom_bottleneck/tests/data/test_416_B | 4 + geom_bottleneck/tests/data/test_417_A | 4 + geom_bottleneck/tests/data/test_417_B | 4 + geom_bottleneck/tests/data/test_418_A | 4 + geom_bottleneck/tests/data/test_418_B | 4 + geom_bottleneck/tests/data/test_419_A | 4 + geom_bottleneck/tests/data/test_419_B | 4 + geom_bottleneck/tests/data/test_420_A | 5 + geom_bottleneck/tests/data/test_420_B | 5 + geom_bottleneck/tests/data/test_421_A | 5 + geom_bottleneck/tests/data/test_421_B | 5 + geom_bottleneck/tests/data/test_422_A | 5 + geom_bottleneck/tests/data/test_422_B | 5 + geom_bottleneck/tests/data/test_423_A | 5 + geom_bottleneck/tests/data/test_423_B | 5 + geom_bottleneck/tests/data/test_424_A | 5 + geom_bottleneck/tests/data/test_424_B | 5 + geom_bottleneck/tests/data/test_425_A | 5 + geom_bottleneck/tests/data/test_425_B | 5 + geom_bottleneck/tests/data/test_426_A | 5 + geom_bottleneck/tests/data/test_426_B | 5 + geom_bottleneck/tests/data/test_427_A | 5 + geom_bottleneck/tests/data/test_427_B | 5 + geom_bottleneck/tests/data/test_428_A | 5 + geom_bottleneck/tests/data/test_428_B | 5 + geom_bottleneck/tests/data/test_429_A | 5 + geom_bottleneck/tests/data/test_429_B | 5 + geom_bottleneck/tests/data/test_430_A | 5 + geom_bottleneck/tests/data/test_430_B | 5 + geom_bottleneck/tests/data/test_431_A | 5 + geom_bottleneck/tests/data/test_431_B | 5 + geom_bottleneck/tests/data/test_432_A | 5 + geom_bottleneck/tests/data/test_432_B | 5 + geom_bottleneck/tests/data/test_433_A | 5 + geom_bottleneck/tests/data/test_433_B | 5 + geom_bottleneck/tests/data/test_434_A | 5 + geom_bottleneck/tests/data/test_434_B | 5 + geom_bottleneck/tests/data/test_435_A | 5 + geom_bottleneck/tests/data/test_435_B | 5 + geom_bottleneck/tests/data/test_436_A | 5 + geom_bottleneck/tests/data/test_436_B | 5 + geom_bottleneck/tests/data/test_437_A | 5 + geom_bottleneck/tests/data/test_437_B | 5 + geom_bottleneck/tests/data/test_438_A | 5 + geom_bottleneck/tests/data/test_438_B | 5 + geom_bottleneck/tests/data/test_439_A | 5 + geom_bottleneck/tests/data/test_439_B | 5 + geom_bottleneck/tests/data/test_440_A | 6 + geom_bottleneck/tests/data/test_440_B | 6 + geom_bottleneck/tests/data/test_441_A | 6 + geom_bottleneck/tests/data/test_441_B | 6 + geom_bottleneck/tests/data/test_442_A | 6 + geom_bottleneck/tests/data/test_442_B | 6 + geom_bottleneck/tests/data/test_443_A | 6 + geom_bottleneck/tests/data/test_443_B | 6 + geom_bottleneck/tests/data/test_444_A | 6 + geom_bottleneck/tests/data/test_444_B | 6 + geom_bottleneck/tests/data/test_445_A | 6 + geom_bottleneck/tests/data/test_445_B | 6 + geom_bottleneck/tests/data/test_446_A | 6 + geom_bottleneck/tests/data/test_446_B | 6 + geom_bottleneck/tests/data/test_447_A | 6 + geom_bottleneck/tests/data/test_447_B | 6 + geom_bottleneck/tests/data/test_448_A | 6 + geom_bottleneck/tests/data/test_448_B | 6 + geom_bottleneck/tests/data/test_449_A | 6 + geom_bottleneck/tests/data/test_449_B | 6 + geom_bottleneck/tests/data/test_450_A | 6 + geom_bottleneck/tests/data/test_450_B | 6 + geom_bottleneck/tests/data/test_451_A | 6 + geom_bottleneck/tests/data/test_451_B | 6 + geom_bottleneck/tests/data/test_452_A | 6 + geom_bottleneck/tests/data/test_452_B | 6 + geom_bottleneck/tests/data/test_453_A | 6 + geom_bottleneck/tests/data/test_453_B | 6 + geom_bottleneck/tests/data/test_454_A | 6 + geom_bottleneck/tests/data/test_454_B | 6 + geom_bottleneck/tests/data/test_455_A | 6 + geom_bottleneck/tests/data/test_455_B | 6 + geom_bottleneck/tests/data/test_456_A | 6 + geom_bottleneck/tests/data/test_456_B | 6 + geom_bottleneck/tests/data/test_457_A | 6 + geom_bottleneck/tests/data/test_457_B | 6 + geom_bottleneck/tests/data/test_458_A | 6 + geom_bottleneck/tests/data/test_458_B | 6 + geom_bottleneck/tests/data/test_459_A | 6 + geom_bottleneck/tests/data/test_459_B | 6 + geom_bottleneck/tests/data/test_460_A | 7 + geom_bottleneck/tests/data/test_460_B | 7 + geom_bottleneck/tests/data/test_461_A | 7 + geom_bottleneck/tests/data/test_461_B | 7 + geom_bottleneck/tests/data/test_462_A | 7 + geom_bottleneck/tests/data/test_462_B | 7 + geom_bottleneck/tests/data/test_463_A | 7 + geom_bottleneck/tests/data/test_463_B | 7 + geom_bottleneck/tests/data/test_464_A | 7 + geom_bottleneck/tests/data/test_464_B | 7 + geom_bottleneck/tests/data/test_465_A | 7 + geom_bottleneck/tests/data/test_465_B | 7 + geom_bottleneck/tests/data/test_466_A | 7 + geom_bottleneck/tests/data/test_466_B | 7 + geom_bottleneck/tests/data/test_467_A | 7 + geom_bottleneck/tests/data/test_467_B | 7 + geom_bottleneck/tests/data/test_468_A | 7 + geom_bottleneck/tests/data/test_468_B | 7 + geom_bottleneck/tests/data/test_469_A | 7 + geom_bottleneck/tests/data/test_469_B | 7 + geom_bottleneck/tests/data/test_470_A | 7 + geom_bottleneck/tests/data/test_470_B | 7 + geom_bottleneck/tests/data/test_471_A | 7 + geom_bottleneck/tests/data/test_471_B | 7 + geom_bottleneck/tests/data/test_472_A | 7 + geom_bottleneck/tests/data/test_472_B | 7 + geom_bottleneck/tests/data/test_473_A | 7 + geom_bottleneck/tests/data/test_473_B | 7 + geom_bottleneck/tests/data/test_474_A | 7 + geom_bottleneck/tests/data/test_474_B | 7 + geom_bottleneck/tests/data/test_475_A | 7 + geom_bottleneck/tests/data/test_475_B | 7 + geom_bottleneck/tests/data/test_476_A | 7 + geom_bottleneck/tests/data/test_476_B | 7 + geom_bottleneck/tests/data/test_477_A | 7 + geom_bottleneck/tests/data/test_477_B | 7 + geom_bottleneck/tests/data/test_478_A | 7 + geom_bottleneck/tests/data/test_478_B | 7 + geom_bottleneck/tests/data/test_479_A | 7 + geom_bottleneck/tests/data/test_479_B | 7 + geom_bottleneck/tests/data/test_480_A | 8 + geom_bottleneck/tests/data/test_480_B | 8 + geom_bottleneck/tests/data/test_481_A | 8 + geom_bottleneck/tests/data/test_481_B | 8 + geom_bottleneck/tests/data/test_482_A | 8 + geom_bottleneck/tests/data/test_482_B | 8 + geom_bottleneck/tests/data/test_483_A | 8 + geom_bottleneck/tests/data/test_483_B | 8 + geom_bottleneck/tests/data/test_484_A | 8 + geom_bottleneck/tests/data/test_484_B | 8 + geom_bottleneck/tests/data/test_485_A | 8 + geom_bottleneck/tests/data/test_485_B | 8 + geom_bottleneck/tests/data/test_486_A | 8 + geom_bottleneck/tests/data/test_486_B | 8 + geom_bottleneck/tests/data/test_487_A | 8 + geom_bottleneck/tests/data/test_487_B | 8 + geom_bottleneck/tests/data/test_488_A | 8 + geom_bottleneck/tests/data/test_488_B | 8 + geom_bottleneck/tests/data/test_489_A | 8 + geom_bottleneck/tests/data/test_489_B | 8 + geom_bottleneck/tests/data/test_490_A | 8 + geom_bottleneck/tests/data/test_490_B | 8 + geom_bottleneck/tests/data/test_491_A | 8 + geom_bottleneck/tests/data/test_491_B | 8 + geom_bottleneck/tests/data/test_492_A | 8 + geom_bottleneck/tests/data/test_492_B | 8 + geom_bottleneck/tests/data/test_493_A | 8 + geom_bottleneck/tests/data/test_493_B | 8 + geom_bottleneck/tests/data/test_494_A | 8 + geom_bottleneck/tests/data/test_494_B | 8 + geom_bottleneck/tests/data/test_495_A | 8 + geom_bottleneck/tests/data/test_495_B | 8 + geom_bottleneck/tests/data/test_496_A | 8 + geom_bottleneck/tests/data/test_496_B | 8 + geom_bottleneck/tests/data/test_497_A | 8 + geom_bottleneck/tests/data/test_497_B | 8 + geom_bottleneck/tests/data/test_498_A | 8 + geom_bottleneck/tests/data/test_498_B | 8 + geom_bottleneck/tests/data/test_499_A | 8 + geom_bottleneck/tests/data/test_499_B | 8 + geom_bottleneck/tests/data/test_500_A | 9 + geom_bottleneck/tests/data/test_500_B | 9 + geom_bottleneck/tests/data/test_501_A | 9 + geom_bottleneck/tests/data/test_501_B | 9 + geom_bottleneck/tests/data/test_502_A | 9 + geom_bottleneck/tests/data/test_502_B | 9 + geom_bottleneck/tests/data/test_503_A | 9 + geom_bottleneck/tests/data/test_503_B | 9 + geom_bottleneck/tests/data/test_504_A | 9 + geom_bottleneck/tests/data/test_504_B | 9 + geom_bottleneck/tests/data/test_505_A | 9 + geom_bottleneck/tests/data/test_505_B | 9 + geom_bottleneck/tests/data/test_506_A | 9 + geom_bottleneck/tests/data/test_506_B | 9 + geom_bottleneck/tests/data/test_507_A | 9 + geom_bottleneck/tests/data/test_507_B | 9 + geom_bottleneck/tests/data/test_508_A | 9 + geom_bottleneck/tests/data/test_508_B | 9 + geom_bottleneck/tests/data/test_509_A | 9 + geom_bottleneck/tests/data/test_509_B | 9 + geom_bottleneck/tests/data/test_510_A | 9 + geom_bottleneck/tests/data/test_510_B | 9 + geom_bottleneck/tests/data/test_511_A | 9 + geom_bottleneck/tests/data/test_511_B | 9 + geom_bottleneck/tests/data/test_512_A | 9 + geom_bottleneck/tests/data/test_512_B | 9 + geom_bottleneck/tests/data/test_513_A | 9 + geom_bottleneck/tests/data/test_513_B | 9 + geom_bottleneck/tests/data/test_514_A | 9 + geom_bottleneck/tests/data/test_514_B | 9 + geom_bottleneck/tests/data/test_515_A | 9 + geom_bottleneck/tests/data/test_515_B | 9 + geom_bottleneck/tests/data/test_516_A | 9 + geom_bottleneck/tests/data/test_516_B | 9 + geom_bottleneck/tests/data/test_517_A | 9 + geom_bottleneck/tests/data/test_517_B | 9 + geom_bottleneck/tests/data/test_518_A | 9 + geom_bottleneck/tests/data/test_518_B | 9 + geom_bottleneck/tests/data/test_519_A | 9 + geom_bottleneck/tests/data/test_519_B | 9 + geom_bottleneck/tests/data/test_520_A | 10 + geom_bottleneck/tests/data/test_520_B | 10 + geom_bottleneck/tests/data/test_521_A | 10 + geom_bottleneck/tests/data/test_521_B | 10 + geom_bottleneck/tests/data/test_522_A | 10 + geom_bottleneck/tests/data/test_522_B | 10 + geom_bottleneck/tests/data/test_523_A | 10 + geom_bottleneck/tests/data/test_523_B | 10 + geom_bottleneck/tests/data/test_524_A | 10 + geom_bottleneck/tests/data/test_524_B | 10 + geom_bottleneck/tests/data/test_525_A | 10 + geom_bottleneck/tests/data/test_525_B | 10 + geom_bottleneck/tests/data/test_526_A | 10 + geom_bottleneck/tests/data/test_526_B | 10 + geom_bottleneck/tests/data/test_527_A | 10 + geom_bottleneck/tests/data/test_527_B | 10 + geom_bottleneck/tests/data/test_528_A | 10 + geom_bottleneck/tests/data/test_528_B | 10 + geom_bottleneck/tests/data/test_529_A | 10 + geom_bottleneck/tests/data/test_529_B | 10 + geom_bottleneck/tests/data/test_530_A | 10 + geom_bottleneck/tests/data/test_530_B | 10 + geom_bottleneck/tests/data/test_531_A | 10 + geom_bottleneck/tests/data/test_531_B | 10 + geom_bottleneck/tests/data/test_532_A | 10 + geom_bottleneck/tests/data/test_532_B | 10 + geom_bottleneck/tests/data/test_533_A | 10 + geom_bottleneck/tests/data/test_533_B | 10 + geom_bottleneck/tests/data/test_534_A | 10 + geom_bottleneck/tests/data/test_534_B | 10 + geom_bottleneck/tests/data/test_535_A | 10 + geom_bottleneck/tests/data/test_535_B | 10 + geom_bottleneck/tests/data/test_536_A | 10 + geom_bottleneck/tests/data/test_536_B | 10 + geom_bottleneck/tests/data/test_537_A | 10 + geom_bottleneck/tests/data/test_537_B | 10 + geom_bottleneck/tests/data/test_538_A | 10 + geom_bottleneck/tests/data/test_538_B | 10 + geom_bottleneck/tests/data/test_539_A | 10 + geom_bottleneck/tests/data/test_539_B | 10 + geom_bottleneck/tests/data/test_540_A | 20 + geom_bottleneck/tests/data/test_540_B | 20 + geom_bottleneck/tests/data/test_541_A | 20 + geom_bottleneck/tests/data/test_541_B | 20 + geom_bottleneck/tests/data/test_542_A | 20 + geom_bottleneck/tests/data/test_542_B | 20 + geom_bottleneck/tests/data/test_543_A | 20 + geom_bottleneck/tests/data/test_543_B | 20 + geom_bottleneck/tests/data/test_544_A | 20 + geom_bottleneck/tests/data/test_544_B | 20 + geom_bottleneck/tests/data/test_545_A | 20 + geom_bottleneck/tests/data/test_545_B | 20 + geom_bottleneck/tests/data/test_546_A | 20 + geom_bottleneck/tests/data/test_546_B | 20 + geom_bottleneck/tests/data/test_547_A | 20 + geom_bottleneck/tests/data/test_547_B | 20 + geom_bottleneck/tests/data/test_548_A | 20 + geom_bottleneck/tests/data/test_548_B | 20 + geom_bottleneck/tests/data/test_549_A | 20 + geom_bottleneck/tests/data/test_549_B | 20 + geom_bottleneck/tests/data/test_550_A | 20 + geom_bottleneck/tests/data/test_550_B | 20 + geom_bottleneck/tests/data/test_551_A | 20 + geom_bottleneck/tests/data/test_551_B | 20 + geom_bottleneck/tests/data/test_552_A | 20 + geom_bottleneck/tests/data/test_552_B | 20 + geom_bottleneck/tests/data/test_553_A | 20 + geom_bottleneck/tests/data/test_553_B | 20 + geom_bottleneck/tests/data/test_554_A | 20 + geom_bottleneck/tests/data/test_554_B | 20 + geom_bottleneck/tests/data/test_555_A | 20 + geom_bottleneck/tests/data/test_555_B | 20 + geom_bottleneck/tests/data/test_556_A | 20 + geom_bottleneck/tests/data/test_556_B | 20 + geom_bottleneck/tests/data/test_557_A | 20 + geom_bottleneck/tests/data/test_557_B | 20 + geom_bottleneck/tests/data/test_558_A | 20 + geom_bottleneck/tests/data/test_558_B | 20 + geom_bottleneck/tests/data/test_559_A | 20 + geom_bottleneck/tests/data/test_559_B | 20 + geom_bottleneck/tests/data/test_560_A | 30 + geom_bottleneck/tests/data/test_560_B | 30 + geom_bottleneck/tests/data/test_561_A | 30 + geom_bottleneck/tests/data/test_561_B | 30 + geom_bottleneck/tests/data/test_562_A | 30 + geom_bottleneck/tests/data/test_562_B | 30 + geom_bottleneck/tests/data/test_563_A | 30 + geom_bottleneck/tests/data/test_563_B | 30 + geom_bottleneck/tests/data/test_564_A | 30 + geom_bottleneck/tests/data/test_564_B | 30 + geom_bottleneck/tests/data/test_565_A | 30 + geom_bottleneck/tests/data/test_565_B | 30 + geom_bottleneck/tests/data/test_566_A | 30 + geom_bottleneck/tests/data/test_566_B | 30 + geom_bottleneck/tests/data/test_567_A | 30 + geom_bottleneck/tests/data/test_567_B | 30 + geom_bottleneck/tests/data/test_568_A | 30 + geom_bottleneck/tests/data/test_568_B | 30 + geom_bottleneck/tests/data/test_569_A | 30 + geom_bottleneck/tests/data/test_569_B | 30 + geom_bottleneck/tests/data/test_570_A | 30 + geom_bottleneck/tests/data/test_570_B | 30 + geom_bottleneck/tests/data/test_571_A | 30 + geom_bottleneck/tests/data/test_571_B | 30 + geom_bottleneck/tests/data/test_572_A | 30 + geom_bottleneck/tests/data/test_572_B | 30 + geom_bottleneck/tests/data/test_573_A | 30 + geom_bottleneck/tests/data/test_573_B | 30 + geom_bottleneck/tests/data/test_574_A | 30 + geom_bottleneck/tests/data/test_574_B | 30 + geom_bottleneck/tests/data/test_575_A | 30 + geom_bottleneck/tests/data/test_575_B | 30 + geom_bottleneck/tests/data/test_576_A | 30 + geom_bottleneck/tests/data/test_576_B | 30 + geom_bottleneck/tests/data/test_577_A | 30 + geom_bottleneck/tests/data/test_577_B | 30 + geom_bottleneck/tests/data/test_578_A | 30 + geom_bottleneck/tests/data/test_578_B | 30 + geom_bottleneck/tests/data/test_579_A | 30 + geom_bottleneck/tests/data/test_579_B | 30 + geom_bottleneck/tests/data/test_580_A | 50 + geom_bottleneck/tests/data/test_580_B | 50 + geom_bottleneck/tests/data/test_581_A | 50 + geom_bottleneck/tests/data/test_581_B | 50 + geom_bottleneck/tests/data/test_582_A | 50 + geom_bottleneck/tests/data/test_582_B | 50 + geom_bottleneck/tests/data/test_583_A | 50 + geom_bottleneck/tests/data/test_583_B | 50 + geom_bottleneck/tests/data/test_584_A | 50 + geom_bottleneck/tests/data/test_584_B | 50 + geom_bottleneck/tests/data/test_585_A | 50 + geom_bottleneck/tests/data/test_585_B | 50 + geom_bottleneck/tests/data/test_586_A | 50 + geom_bottleneck/tests/data/test_586_B | 50 + geom_bottleneck/tests/data/test_587_A | 50 + geom_bottleneck/tests/data/test_587_B | 50 + geom_bottleneck/tests/data/test_588_A | 50 + geom_bottleneck/tests/data/test_588_B | 50 + geom_bottleneck/tests/data/test_589_A | 50 + geom_bottleneck/tests/data/test_589_B | 50 + geom_bottleneck/tests/data/test_590_A | 50 + geom_bottleneck/tests/data/test_590_B | 50 + geom_bottleneck/tests/data/test_591_A | 50 + geom_bottleneck/tests/data/test_591_B | 50 + geom_bottleneck/tests/data/test_592_A | 50 + geom_bottleneck/tests/data/test_592_B | 50 + geom_bottleneck/tests/data/test_593_A | 50 + geom_bottleneck/tests/data/test_593_B | 50 + geom_bottleneck/tests/data/test_594_A | 50 + geom_bottleneck/tests/data/test_594_B | 50 + geom_bottleneck/tests/data/test_595_A | 50 + geom_bottleneck/tests/data/test_595_B | 50 + geom_bottleneck/tests/data/test_596_A | 50 + geom_bottleneck/tests/data/test_596_B | 50 + geom_bottleneck/tests/data/test_597_A | 50 + geom_bottleneck/tests/data/test_597_B | 50 + geom_bottleneck/tests/data/test_598_A | 50 + geom_bottleneck/tests/data/test_598_B | 50 + geom_bottleneck/tests/data/test_599_A | 50 + geom_bottleneck/tests/data/test_599_B | 50 + geom_bottleneck/tests/data/test_600_A | 100 + geom_bottleneck/tests/data/test_600_B | 100 + geom_bottleneck/tests/data/test_601_A | 100 + geom_bottleneck/tests/data/test_601_B | 100 + geom_bottleneck/tests/data/test_602_A | 100 + geom_bottleneck/tests/data/test_602_B | 100 + geom_bottleneck/tests/data/test_603_A | 100 + geom_bottleneck/tests/data/test_603_B | 100 + geom_bottleneck/tests/data/test_604_A | 100 + geom_bottleneck/tests/data/test_604_B | 100 + geom_bottleneck/tests/data/test_605_A | 100 + geom_bottleneck/tests/data/test_605_B | 100 + geom_bottleneck/tests/data/test_606_A | 100 + geom_bottleneck/tests/data/test_606_B | 100 + geom_bottleneck/tests/data/test_607_A | 100 + geom_bottleneck/tests/data/test_607_B | 100 + geom_bottleneck/tests/data/test_608_A | 100 + geom_bottleneck/tests/data/test_608_B | 100 + geom_bottleneck/tests/data/test_609_A | 100 + geom_bottleneck/tests/data/test_609_B | 100 + geom_bottleneck/tests/data/test_610_A | 100 + geom_bottleneck/tests/data/test_610_B | 100 + geom_bottleneck/tests/data/test_611_A | 100 + geom_bottleneck/tests/data/test_611_B | 100 + geom_bottleneck/tests/data/test_612_A | 100 + geom_bottleneck/tests/data/test_612_B | 100 + geom_bottleneck/tests/data/test_613_A | 100 + geom_bottleneck/tests/data/test_613_B | 100 + geom_bottleneck/tests/data/test_614_A | 100 + geom_bottleneck/tests/data/test_614_B | 100 + geom_bottleneck/tests/data/test_615_A | 100 + geom_bottleneck/tests/data/test_615_B | 100 + geom_bottleneck/tests/data/test_616_A | 100 + geom_bottleneck/tests/data/test_616_B | 100 + geom_bottleneck/tests/data/test_617_A | 100 + geom_bottleneck/tests/data/test_617_B | 100 + geom_bottleneck/tests/data/test_618_A | 100 + geom_bottleneck/tests/data/test_618_B | 100 + geom_bottleneck/tests/data/test_619_A | 100 + geom_bottleneck/tests/data/test_619_B | 100 + geom_bottleneck/tests/data/test_620_A | 2 + geom_bottleneck/tests/data/test_620_B | 2 + geom_bottleneck/tests/data/test_621_A | 2 + geom_bottleneck/tests/data/test_621_B | 2 + geom_bottleneck/tests/data/test_622_A | 2 + geom_bottleneck/tests/data/test_622_B | 2 + geom_bottleneck/tests/data/test_623_A | 2 + geom_bottleneck/tests/data/test_623_B | 2 + geom_bottleneck/tests/data/test_624_A | 2 + geom_bottleneck/tests/data/test_624_B | 2 + geom_bottleneck/tests/data/test_625_A | 2 + geom_bottleneck/tests/data/test_625_B | 2 + geom_bottleneck/tests/data/test_626_A | 2 + geom_bottleneck/tests/data/test_626_B | 2 + geom_bottleneck/tests/data/test_627_A | 2 + geom_bottleneck/tests/data/test_627_B | 2 + geom_bottleneck/tests/data/test_628_A | 2 + geom_bottleneck/tests/data/test_628_B | 2 + geom_bottleneck/tests/data/test_629_A | 2 + geom_bottleneck/tests/data/test_629_B | 2 + geom_bottleneck/tests/data/test_630_A | 2 + geom_bottleneck/tests/data/test_630_B | 2 + geom_bottleneck/tests/data/test_631_A | 2 + geom_bottleneck/tests/data/test_631_B | 2 + geom_bottleneck/tests/data/test_632_A | 2 + geom_bottleneck/tests/data/test_632_B | 2 + geom_bottleneck/tests/data/test_633_A | 2 + geom_bottleneck/tests/data/test_633_B | 2 + geom_bottleneck/tests/data/test_634_A | 2 + geom_bottleneck/tests/data/test_634_B | 2 + geom_bottleneck/tests/data/test_635_A | 2 + geom_bottleneck/tests/data/test_635_B | 2 + geom_bottleneck/tests/data/test_636_A | 2 + geom_bottleneck/tests/data/test_636_B | 2 + geom_bottleneck/tests/data/test_637_A | 2 + geom_bottleneck/tests/data/test_637_B | 2 + geom_bottleneck/tests/data/test_638_A | 2 + geom_bottleneck/tests/data/test_638_B | 2 + geom_bottleneck/tests/data/test_639_A | 2 + geom_bottleneck/tests/data/test_639_B | 2 + geom_bottleneck/tests/data/test_640_A | 3 + geom_bottleneck/tests/data/test_640_B | 3 + geom_bottleneck/tests/data/test_641_A | 3 + geom_bottleneck/tests/data/test_641_B | 3 + geom_bottleneck/tests/data/test_642_A | 3 + geom_bottleneck/tests/data/test_642_B | 3 + geom_bottleneck/tests/data/test_643_A | 3 + geom_bottleneck/tests/data/test_643_B | 3 + geom_bottleneck/tests/data/test_644_A | 3 + geom_bottleneck/tests/data/test_644_B | 3 + geom_bottleneck/tests/data/test_645_A | 3 + geom_bottleneck/tests/data/test_645_B | 3 + geom_bottleneck/tests/data/test_646_A | 3 + geom_bottleneck/tests/data/test_646_B | 3 + geom_bottleneck/tests/data/test_647_A | 3 + geom_bottleneck/tests/data/test_647_B | 3 + geom_bottleneck/tests/data/test_648_A | 3 + geom_bottleneck/tests/data/test_648_B | 3 + geom_bottleneck/tests/data/test_649_A | 3 + geom_bottleneck/tests/data/test_649_B | 3 + geom_bottleneck/tests/data/test_650_A | 3 + geom_bottleneck/tests/data/test_650_B | 3 + geom_bottleneck/tests/data/test_651_A | 3 + geom_bottleneck/tests/data/test_651_B | 3 + geom_bottleneck/tests/data/test_652_A | 3 + geom_bottleneck/tests/data/test_652_B | 3 + geom_bottleneck/tests/data/test_653_A | 3 + geom_bottleneck/tests/data/test_653_B | 3 + geom_bottleneck/tests/data/test_654_A | 3 + geom_bottleneck/tests/data/test_654_B | 3 + geom_bottleneck/tests/data/test_655_A | 3 + geom_bottleneck/tests/data/test_655_B | 3 + geom_bottleneck/tests/data/test_656_A | 3 + geom_bottleneck/tests/data/test_656_B | 3 + geom_bottleneck/tests/data/test_657_A | 3 + geom_bottleneck/tests/data/test_657_B | 3 + geom_bottleneck/tests/data/test_658_A | 3 + geom_bottleneck/tests/data/test_658_B | 3 + geom_bottleneck/tests/data/test_659_A | 3 + geom_bottleneck/tests/data/test_659_B | 3 + geom_bottleneck/tests/data/test_660_A | 4 + geom_bottleneck/tests/data/test_660_B | 4 + geom_bottleneck/tests/data/test_661_A | 4 + geom_bottleneck/tests/data/test_661_B | 4 + geom_bottleneck/tests/data/test_662_A | 4 + geom_bottleneck/tests/data/test_662_B | 4 + geom_bottleneck/tests/data/test_663_A | 4 + geom_bottleneck/tests/data/test_663_B | 4 + geom_bottleneck/tests/data/test_664_A | 4 + geom_bottleneck/tests/data/test_664_B | 4 + geom_bottleneck/tests/data/test_665_A | 4 + geom_bottleneck/tests/data/test_665_B | 4 + geom_bottleneck/tests/data/test_666_A | 4 + geom_bottleneck/tests/data/test_666_B | 4 + geom_bottleneck/tests/data/test_667_A | 4 + geom_bottleneck/tests/data/test_667_B | 4 + geom_bottleneck/tests/data/test_668_A | 4 + geom_bottleneck/tests/data/test_668_B | 4 + geom_bottleneck/tests/data/test_669_A | 4 + geom_bottleneck/tests/data/test_669_B | 4 + geom_bottleneck/tests/data/test_670_A | 4 + geom_bottleneck/tests/data/test_670_B | 4 + geom_bottleneck/tests/data/test_671_A | 4 + geom_bottleneck/tests/data/test_671_B | 4 + geom_bottleneck/tests/data/test_672_A | 4 + geom_bottleneck/tests/data/test_672_B | 4 + geom_bottleneck/tests/data/test_673_A | 4 + geom_bottleneck/tests/data/test_673_B | 4 + geom_bottleneck/tests/data/test_674_A | 4 + geom_bottleneck/tests/data/test_674_B | 4 + geom_bottleneck/tests/data/test_675_A | 4 + geom_bottleneck/tests/data/test_675_B | 4 + geom_bottleneck/tests/data/test_676_A | 4 + geom_bottleneck/tests/data/test_676_B | 4 + geom_bottleneck/tests/data/test_677_A | 4 + geom_bottleneck/tests/data/test_677_B | 4 + geom_bottleneck/tests/data/test_678_A | 4 + geom_bottleneck/tests/data/test_678_B | 4 + geom_bottleneck/tests/data/test_679_A | 4 + geom_bottleneck/tests/data/test_679_B | 4 + geom_bottleneck/tests/data/test_680_A | 5 + geom_bottleneck/tests/data/test_680_B | 5 + geom_bottleneck/tests/data/test_681_A | 5 + geom_bottleneck/tests/data/test_681_B | 5 + geom_bottleneck/tests/data/test_682_A | 5 + geom_bottleneck/tests/data/test_682_B | 5 + geom_bottleneck/tests/data/test_683_A | 5 + geom_bottleneck/tests/data/test_683_B | 5 + geom_bottleneck/tests/data/test_684_A | 5 + geom_bottleneck/tests/data/test_684_B | 5 + geom_bottleneck/tests/data/test_685_A | 5 + geom_bottleneck/tests/data/test_685_B | 5 + geom_bottleneck/tests/data/test_686_A | 5 + geom_bottleneck/tests/data/test_686_B | 5 + geom_bottleneck/tests/data/test_687_A | 5 + geom_bottleneck/tests/data/test_687_B | 5 + geom_bottleneck/tests/data/test_688_A | 5 + geom_bottleneck/tests/data/test_688_B | 5 + geom_bottleneck/tests/data/test_689_A | 5 + geom_bottleneck/tests/data/test_689_B | 5 + geom_bottleneck/tests/data/test_690_A | 5 + geom_bottleneck/tests/data/test_690_B | 5 + geom_bottleneck/tests/data/test_691_A | 5 + geom_bottleneck/tests/data/test_691_B | 5 + geom_bottleneck/tests/data/test_692_A | 5 + geom_bottleneck/tests/data/test_692_B | 5 + geom_bottleneck/tests/data/test_693_A | 5 + geom_bottleneck/tests/data/test_693_B | 5 + geom_bottleneck/tests/data/test_694_A | 5 + geom_bottleneck/tests/data/test_694_B | 5 + geom_bottleneck/tests/data/test_695_A | 5 + geom_bottleneck/tests/data/test_695_B | 5 + geom_bottleneck/tests/data/test_696_A | 5 + geom_bottleneck/tests/data/test_696_B | 5 + geom_bottleneck/tests/data/test_697_A | 5 + geom_bottleneck/tests/data/test_697_B | 5 + geom_bottleneck/tests/data/test_698_A | 5 + geom_bottleneck/tests/data/test_698_B | 5 + geom_bottleneck/tests/data/test_699_A | 5 + geom_bottleneck/tests/data/test_699_B | 5 + geom_bottleneck/tests/data/test_700_A | 6 + geom_bottleneck/tests/data/test_700_B | 6 + geom_bottleneck/tests/data/test_701_A | 6 + geom_bottleneck/tests/data/test_701_B | 6 + geom_bottleneck/tests/data/test_702_A | 6 + geom_bottleneck/tests/data/test_702_B | 6 + geom_bottleneck/tests/data/test_703_A | 6 + geom_bottleneck/tests/data/test_703_B | 6 + geom_bottleneck/tests/data/test_704_A | 6 + geom_bottleneck/tests/data/test_704_B | 6 + geom_bottleneck/tests/data/test_705_A | 6 + geom_bottleneck/tests/data/test_705_B | 6 + geom_bottleneck/tests/data/test_706_A | 6 + geom_bottleneck/tests/data/test_706_B | 6 + geom_bottleneck/tests/data/test_707_A | 6 + geom_bottleneck/tests/data/test_707_B | 6 + geom_bottleneck/tests/data/test_708_A | 6 + geom_bottleneck/tests/data/test_708_B | 6 + geom_bottleneck/tests/data/test_709_A | 6 + geom_bottleneck/tests/data/test_709_B | 6 + geom_bottleneck/tests/data/test_710_A | 6 + geom_bottleneck/tests/data/test_710_B | 6 + geom_bottleneck/tests/data/test_711_A | 6 + geom_bottleneck/tests/data/test_711_B | 6 + geom_bottleneck/tests/data/test_712_A | 6 + geom_bottleneck/tests/data/test_712_B | 6 + geom_bottleneck/tests/data/test_713_A | 6 + geom_bottleneck/tests/data/test_713_B | 6 + geom_bottleneck/tests/data/test_714_A | 6 + geom_bottleneck/tests/data/test_714_B | 6 + geom_bottleneck/tests/data/test_715_A | 6 + geom_bottleneck/tests/data/test_715_B | 6 + geom_bottleneck/tests/data/test_716_A | 6 + geom_bottleneck/tests/data/test_716_B | 6 + geom_bottleneck/tests/data/test_717_A | 6 + geom_bottleneck/tests/data/test_717_B | 6 + geom_bottleneck/tests/data/test_718_A | 6 + geom_bottleneck/tests/data/test_718_B | 6 + geom_bottleneck/tests/data/test_719_A | 6 + geom_bottleneck/tests/data/test_719_B | 6 + geom_bottleneck/tests/data/test_720_A | 7 + geom_bottleneck/tests/data/test_720_B | 7 + geom_bottleneck/tests/data/test_721_A | 7 + geom_bottleneck/tests/data/test_721_B | 7 + geom_bottleneck/tests/data/test_722_A | 7 + geom_bottleneck/tests/data/test_722_B | 7 + geom_bottleneck/tests/data/test_723_A | 7 + geom_bottleneck/tests/data/test_723_B | 7 + geom_bottleneck/tests/data/test_724_A | 7 + geom_bottleneck/tests/data/test_724_B | 7 + geom_bottleneck/tests/data/test_725_A | 7 + geom_bottleneck/tests/data/test_725_B | 7 + geom_bottleneck/tests/data/test_726_A | 7 + geom_bottleneck/tests/data/test_726_B | 7 + geom_bottleneck/tests/data/test_727_A | 7 + geom_bottleneck/tests/data/test_727_B | 7 + geom_bottleneck/tests/data/test_728_A | 7 + geom_bottleneck/tests/data/test_728_B | 7 + geom_bottleneck/tests/data/test_729_A | 7 + geom_bottleneck/tests/data/test_729_B | 7 + geom_bottleneck/tests/data/test_730_A | 7 + geom_bottleneck/tests/data/test_730_B | 7 + geom_bottleneck/tests/data/test_731_A | 7 + geom_bottleneck/tests/data/test_731_B | 7 + geom_bottleneck/tests/data/test_732_A | 7 + geom_bottleneck/tests/data/test_732_B | 7 + geom_bottleneck/tests/data/test_733_A | 7 + geom_bottleneck/tests/data/test_733_B | 7 + geom_bottleneck/tests/data/test_734_A | 7 + geom_bottleneck/tests/data/test_734_B | 7 + geom_bottleneck/tests/data/test_735_A | 7 + geom_bottleneck/tests/data/test_735_B | 7 + geom_bottleneck/tests/data/test_736_A | 7 + geom_bottleneck/tests/data/test_736_B | 7 + geom_bottleneck/tests/data/test_737_A | 7 + geom_bottleneck/tests/data/test_737_B | 7 + geom_bottleneck/tests/data/test_738_A | 7 + geom_bottleneck/tests/data/test_738_B | 7 + geom_bottleneck/tests/data/test_739_A | 7 + geom_bottleneck/tests/data/test_739_B | 7 + geom_bottleneck/tests/data/test_740_A | 8 + geom_bottleneck/tests/data/test_740_B | 8 + geom_bottleneck/tests/data/test_741_A | 8 + geom_bottleneck/tests/data/test_741_B | 8 + geom_bottleneck/tests/data/test_742_A | 8 + geom_bottleneck/tests/data/test_742_B | 8 + geom_bottleneck/tests/data/test_743_A | 8 + geom_bottleneck/tests/data/test_743_B | 8 + geom_bottleneck/tests/data/test_744_A | 8 + geom_bottleneck/tests/data/test_744_B | 8 + geom_bottleneck/tests/data/test_745_A | 8 + geom_bottleneck/tests/data/test_745_B | 8 + geom_bottleneck/tests/data/test_746_A | 8 + geom_bottleneck/tests/data/test_746_B | 8 + geom_bottleneck/tests/data/test_747_A | 8 + geom_bottleneck/tests/data/test_747_B | 8 + geom_bottleneck/tests/data/test_748_A | 8 + geom_bottleneck/tests/data/test_748_B | 8 + geom_bottleneck/tests/data/test_749_A | 8 + geom_bottleneck/tests/data/test_749_B | 8 + geom_bottleneck/tests/data/test_750_A | 8 + geom_bottleneck/tests/data/test_750_B | 8 + geom_bottleneck/tests/data/test_751_A | 8 + geom_bottleneck/tests/data/test_751_B | 8 + geom_bottleneck/tests/data/test_752_A | 8 + geom_bottleneck/tests/data/test_752_B | 8 + geom_bottleneck/tests/data/test_753_A | 8 + geom_bottleneck/tests/data/test_753_B | 8 + geom_bottleneck/tests/data/test_754_A | 8 + geom_bottleneck/tests/data/test_754_B | 8 + geom_bottleneck/tests/data/test_755_A | 8 + geom_bottleneck/tests/data/test_755_B | 8 + geom_bottleneck/tests/data/test_756_A | 8 + geom_bottleneck/tests/data/test_756_B | 8 + geom_bottleneck/tests/data/test_757_A | 8 + geom_bottleneck/tests/data/test_757_B | 8 + geom_bottleneck/tests/data/test_758_A | 8 + geom_bottleneck/tests/data/test_758_B | 8 + geom_bottleneck/tests/data/test_759_A | 8 + geom_bottleneck/tests/data/test_759_B | 8 + geom_bottleneck/tests/data/test_760_A | 9 + geom_bottleneck/tests/data/test_760_B | 9 + geom_bottleneck/tests/data/test_761_A | 9 + geom_bottleneck/tests/data/test_761_B | 9 + geom_bottleneck/tests/data/test_762_A | 9 + geom_bottleneck/tests/data/test_762_B | 9 + geom_bottleneck/tests/data/test_763_A | 9 + geom_bottleneck/tests/data/test_763_B | 9 + geom_bottleneck/tests/data/test_764_A | 9 + geom_bottleneck/tests/data/test_764_B | 9 + geom_bottleneck/tests/data/test_765_A | 9 + geom_bottleneck/tests/data/test_765_B | 9 + geom_bottleneck/tests/data/test_766_A | 9 + geom_bottleneck/tests/data/test_766_B | 9 + geom_bottleneck/tests/data/test_767_A | 9 + geom_bottleneck/tests/data/test_767_B | 9 + geom_bottleneck/tests/data/test_768_A | 9 + geom_bottleneck/tests/data/test_768_B | 9 + geom_bottleneck/tests/data/test_769_A | 9 + geom_bottleneck/tests/data/test_769_B | 9 + geom_bottleneck/tests/data/test_770_A | 9 + geom_bottleneck/tests/data/test_770_B | 9 + geom_bottleneck/tests/data/test_771_A | 9 + geom_bottleneck/tests/data/test_771_B | 9 + geom_bottleneck/tests/data/test_772_A | 9 + geom_bottleneck/tests/data/test_772_B | 9 + geom_bottleneck/tests/data/test_773_A | 9 + geom_bottleneck/tests/data/test_773_B | 9 + geom_bottleneck/tests/data/test_774_A | 9 + geom_bottleneck/tests/data/test_774_B | 9 + geom_bottleneck/tests/data/test_775_A | 9 + geom_bottleneck/tests/data/test_775_B | 9 + geom_bottleneck/tests/data/test_776_A | 9 + geom_bottleneck/tests/data/test_776_B | 9 + geom_bottleneck/tests/data/test_777_A | 9 + geom_bottleneck/tests/data/test_777_B | 9 + geom_bottleneck/tests/data/test_778_A | 9 + geom_bottleneck/tests/data/test_778_B | 9 + geom_bottleneck/tests/data/test_779_A | 9 + geom_bottleneck/tests/data/test_779_B | 9 + geom_bottleneck/tests/data/test_780_A | 10 + geom_bottleneck/tests/data/test_780_B | 10 + geom_bottleneck/tests/data/test_781_A | 10 + geom_bottleneck/tests/data/test_781_B | 10 + geom_bottleneck/tests/data/test_782_A | 10 + geom_bottleneck/tests/data/test_782_B | 10 + geom_bottleneck/tests/data/test_783_A | 10 + geom_bottleneck/tests/data/test_783_B | 10 + geom_bottleneck/tests/data/test_784_A | 10 + geom_bottleneck/tests/data/test_784_B | 10 + geom_bottleneck/tests/data/test_785_A | 10 + geom_bottleneck/tests/data/test_785_B | 10 + geom_bottleneck/tests/data/test_786_A | 10 + geom_bottleneck/tests/data/test_786_B | 10 + geom_bottleneck/tests/data/test_787_A | 10 + geom_bottleneck/tests/data/test_787_B | 10 + geom_bottleneck/tests/data/test_788_A | 10 + geom_bottleneck/tests/data/test_788_B | 10 + geom_bottleneck/tests/data/test_789_A | 10 + geom_bottleneck/tests/data/test_789_B | 10 + geom_bottleneck/tests/data/test_790_A | 10 + geom_bottleneck/tests/data/test_790_B | 10 + geom_bottleneck/tests/data/test_791_A | 10 + geom_bottleneck/tests/data/test_791_B | 10 + geom_bottleneck/tests/data/test_792_A | 10 + geom_bottleneck/tests/data/test_792_B | 10 + geom_bottleneck/tests/data/test_793_A | 10 + geom_bottleneck/tests/data/test_793_B | 10 + geom_bottleneck/tests/data/test_794_A | 10 + geom_bottleneck/tests/data/test_794_B | 10 + geom_bottleneck/tests/data/test_795_A | 10 + geom_bottleneck/tests/data/test_795_B | 10 + geom_bottleneck/tests/data/test_796_A | 10 + geom_bottleneck/tests/data/test_796_B | 10 + geom_bottleneck/tests/data/test_797_A | 10 + geom_bottleneck/tests/data/test_797_B | 10 + geom_bottleneck/tests/data/test_798_A | 10 + geom_bottleneck/tests/data/test_798_B | 10 + geom_bottleneck/tests/data/test_799_A | 10 + geom_bottleneck/tests/data/test_799_B | 10 + geom_bottleneck/tests/data/test_800_A | 20 + geom_bottleneck/tests/data/test_800_B | 20 + geom_bottleneck/tests/data/test_801_A | 20 + geom_bottleneck/tests/data/test_801_B | 20 + geom_bottleneck/tests/data/test_802_A | 20 + geom_bottleneck/tests/data/test_802_B | 20 + geom_bottleneck/tests/data/test_803_A | 20 + geom_bottleneck/tests/data/test_803_B | 20 + geom_bottleneck/tests/data/test_804_A | 20 + geom_bottleneck/tests/data/test_804_B | 20 + geom_bottleneck/tests/data/test_805_A | 20 + geom_bottleneck/tests/data/test_805_B | 20 + geom_bottleneck/tests/data/test_806_A | 20 + geom_bottleneck/tests/data/test_806_B | 20 + geom_bottleneck/tests/data/test_807_A | 20 + geom_bottleneck/tests/data/test_807_B | 20 + geom_bottleneck/tests/data/test_808_A | 20 + geom_bottleneck/tests/data/test_808_B | 20 + geom_bottleneck/tests/data/test_809_A | 20 + geom_bottleneck/tests/data/test_809_B | 20 + geom_bottleneck/tests/data/test_810_A | 20 + geom_bottleneck/tests/data/test_810_B | 20 + geom_bottleneck/tests/data/test_811_A | 20 + geom_bottleneck/tests/data/test_811_B | 20 + geom_bottleneck/tests/data/test_812_A | 20 + geom_bottleneck/tests/data/test_812_B | 20 + geom_bottleneck/tests/data/test_813_A | 20 + geom_bottleneck/tests/data/test_813_B | 20 + geom_bottleneck/tests/data/test_814_A | 20 + geom_bottleneck/tests/data/test_814_B | 20 + geom_bottleneck/tests/data/test_815_A | 20 + geom_bottleneck/tests/data/test_815_B | 20 + geom_bottleneck/tests/data/test_816_A | 20 + geom_bottleneck/tests/data/test_816_B | 20 + geom_bottleneck/tests/data/test_817_A | 20 + geom_bottleneck/tests/data/test_817_B | 20 + geom_bottleneck/tests/data/test_818_A | 20 + geom_bottleneck/tests/data/test_818_B | 20 + geom_bottleneck/tests/data/test_819_A | 20 + geom_bottleneck/tests/data/test_819_B | 20 + geom_bottleneck/tests/data/test_820_A | 30 + geom_bottleneck/tests/data/test_820_B | 30 + geom_bottleneck/tests/data/test_821_A | 30 + geom_bottleneck/tests/data/test_821_B | 30 + geom_bottleneck/tests/data/test_822_A | 30 + geom_bottleneck/tests/data/test_822_B | 30 + geom_bottleneck/tests/data/test_823_A | 30 + geom_bottleneck/tests/data/test_823_B | 30 + geom_bottleneck/tests/data/test_824_A | 30 + geom_bottleneck/tests/data/test_824_B | 30 + geom_bottleneck/tests/data/test_825_A | 30 + geom_bottleneck/tests/data/test_825_B | 30 + geom_bottleneck/tests/data/test_826_A | 30 + geom_bottleneck/tests/data/test_826_B | 30 + geom_bottleneck/tests/data/test_827_A | 30 + geom_bottleneck/tests/data/test_827_B | 30 + geom_bottleneck/tests/data/test_828_A | 30 + geom_bottleneck/tests/data/test_828_B | 30 + geom_bottleneck/tests/data/test_829_A | 30 + geom_bottleneck/tests/data/test_829_B | 30 + geom_bottleneck/tests/data/test_830_A | 30 + geom_bottleneck/tests/data/test_830_B | 30 + geom_bottleneck/tests/data/test_831_A | 30 + geom_bottleneck/tests/data/test_831_B | 30 + geom_bottleneck/tests/data/test_832_A | 30 + geom_bottleneck/tests/data/test_832_B | 30 + geom_bottleneck/tests/data/test_833_A | 30 + geom_bottleneck/tests/data/test_833_B | 30 + geom_bottleneck/tests/data/test_834_A | 30 + geom_bottleneck/tests/data/test_834_B | 30 + geom_bottleneck/tests/data/test_835_A | 30 + geom_bottleneck/tests/data/test_835_B | 30 + geom_bottleneck/tests/data/test_836_A | 30 + geom_bottleneck/tests/data/test_836_B | 30 + geom_bottleneck/tests/data/test_837_A | 30 + geom_bottleneck/tests/data/test_837_B | 30 + geom_bottleneck/tests/data/test_838_A | 30 + geom_bottleneck/tests/data/test_838_B | 30 + geom_bottleneck/tests/data/test_839_A | 30 + geom_bottleneck/tests/data/test_839_B | 30 + geom_bottleneck/tests/data/test_840_A | 50 + geom_bottleneck/tests/data/test_840_B | 50 + geom_bottleneck/tests/data/test_841_A | 50 + geom_bottleneck/tests/data/test_841_B | 50 + geom_bottleneck/tests/data/test_842_A | 50 + geom_bottleneck/tests/data/test_842_B | 50 + geom_bottleneck/tests/data/test_843_A | 50 + geom_bottleneck/tests/data/test_843_B | 50 + geom_bottleneck/tests/data/test_844_A | 50 + geom_bottleneck/tests/data/test_844_B | 50 + geom_bottleneck/tests/data/test_845_A | 50 + geom_bottleneck/tests/data/test_845_B | 50 + geom_bottleneck/tests/data/test_846_A | 50 + geom_bottleneck/tests/data/test_846_B | 50 + geom_bottleneck/tests/data/test_847_A | 50 + geom_bottleneck/tests/data/test_847_B | 50 + geom_bottleneck/tests/data/test_848_A | 50 + geom_bottleneck/tests/data/test_848_B | 50 + geom_bottleneck/tests/data/test_849_A | 50 + geom_bottleneck/tests/data/test_849_B | 50 + geom_bottleneck/tests/data/test_850_A | 50 + geom_bottleneck/tests/data/test_850_B | 50 + geom_bottleneck/tests/data/test_851_A | 50 + geom_bottleneck/tests/data/test_851_B | 50 + geom_bottleneck/tests/data/test_852_A | 50 + geom_bottleneck/tests/data/test_852_B | 50 + geom_bottleneck/tests/data/test_853_A | 50 + geom_bottleneck/tests/data/test_853_B | 50 + geom_bottleneck/tests/data/test_854_A | 50 + geom_bottleneck/tests/data/test_854_B | 50 + geom_bottleneck/tests/data/test_855_A | 50 + geom_bottleneck/tests/data/test_855_B | 50 + geom_bottleneck/tests/data/test_856_A | 50 + geom_bottleneck/tests/data/test_856_B | 50 + geom_bottleneck/tests/data/test_857_A | 50 + geom_bottleneck/tests/data/test_857_B | 50 + geom_bottleneck/tests/data/test_858_A | 50 + geom_bottleneck/tests/data/test_858_B | 50 + geom_bottleneck/tests/data/test_859_A | 50 + geom_bottleneck/tests/data/test_859_B | 50 + geom_bottleneck/tests/data/test_860_A | 100 + geom_bottleneck/tests/data/test_860_B | 100 + geom_bottleneck/tests/data/test_861_A | 100 + geom_bottleneck/tests/data/test_861_B | 100 + geom_bottleneck/tests/data/test_862_A | 100 + geom_bottleneck/tests/data/test_862_B | 100 + geom_bottleneck/tests/data/test_863_A | 100 + geom_bottleneck/tests/data/test_863_B | 100 + geom_bottleneck/tests/data/test_864_A | 100 + geom_bottleneck/tests/data/test_864_B | 100 + geom_bottleneck/tests/data/test_865_A | 100 + geom_bottleneck/tests/data/test_865_B | 100 + geom_bottleneck/tests/data/test_866_A | 100 + geom_bottleneck/tests/data/test_866_B | 100 + geom_bottleneck/tests/data/test_867_A | 100 + geom_bottleneck/tests/data/test_867_B | 100 + geom_bottleneck/tests/data/test_868_A | 100 + geom_bottleneck/tests/data/test_868_B | 100 + geom_bottleneck/tests/data/test_869_A | 100 + geom_bottleneck/tests/data/test_869_B | 100 + geom_bottleneck/tests/data/test_870_A | 100 + geom_bottleneck/tests/data/test_870_B | 100 + geom_bottleneck/tests/data/test_871_A | 100 + geom_bottleneck/tests/data/test_871_B | 100 + geom_bottleneck/tests/data/test_872_A | 100 + geom_bottleneck/tests/data/test_872_B | 100 + geom_bottleneck/tests/data/test_873_A | 100 + geom_bottleneck/tests/data/test_873_B | 100 + geom_bottleneck/tests/data/test_874_A | 100 + geom_bottleneck/tests/data/test_874_B | 100 + geom_bottleneck/tests/data/test_875_A | 100 + geom_bottleneck/tests/data/test_875_B | 100 + geom_bottleneck/tests/data/test_876_A | 100 + geom_bottleneck/tests/data/test_876_B | 100 + geom_bottleneck/tests/data/test_877_A | 100 + geom_bottleneck/tests/data/test_877_B | 100 + geom_bottleneck/tests/data/test_878_A | 100 + geom_bottleneck/tests/data/test_878_B | 100 + geom_bottleneck/tests/data/test_879_A | 100 + geom_bottleneck/tests/data/test_879_B | 100 + geom_bottleneck/tests/data/test_list.txt | 790 ++++ geom_bottleneck/tests/data/test_list.txt.bak | 792 ++++ geom_bottleneck/tests/data/ws_tests/test_100_A | 100 + .../tests/data/ws_tests/test_100_A.pd.dipha | Bin 0 -> 2424 bytes geom_bottleneck/tests/data/ws_tests/test_100_B | 100 + .../tests/data/ws_tests/test_100_B.pd.dipha | Bin 0 -> 2424 bytes geom_bottleneck/tests/data/ws_tests/test_200_A | 200 + geom_bottleneck/tests/data/ws_tests/test_200_B | 200 + geom_bottleneck/tests/data/ws_tests/test_5000_A | 5000 ++++++++++++++++++++ geom_bottleneck/tests/data/ws_tests/test_5000_B | 5000 ++++++++++++++++++++ geom_bottleneck/tests/data/ws_tests/test_5_A | 5 + .../tests/data/ws_tests/test_5_A.pd.dipha | Bin 0 -> 144 bytes geom_bottleneck/tests/data/ws_tests/test_5_B | 5 + .../tests/data/ws_tests/test_5_B.pd.dipha | Bin 0 -> 144 bytes geom_bottleneck/tests/data/ws_tests/test_diag1_A | 1 + .../tests/data/ws_tests/test_diag1_A.pd.dipha | Bin 0 -> 48 bytes geom_bottleneck/tests/data/ws_tests/test_diag1_B | 1 + .../tests/data/ws_tests/test_diag1_B.pd.dipha | Bin 0 -> 48 bytes geom_bottleneck/tests/data/ws_tests/test_diag2_A | 1 + .../tests/data/ws_tests/test_diag2_A.pd.dipha | Bin 0 -> 48 bytes geom_bottleneck/tests/data/ws_tests/test_diag2_B | 1 + .../tests/data/ws_tests/test_diag2_B.pd.dipha | Bin 0 -> 48 bytes geom_bottleneck/tests/data/ws_tests/test_diag3_A | 220 + .../tests/data/ws_tests/test_diag3_A.pd.dipha | Bin 0 -> 5304 bytes geom_bottleneck/tests/data/ws_tests/test_diag3_B | 193 + .../tests/data/ws_tests/test_diag3_B.pd.dipha | Bin 0 -> 4656 bytes geom_bottleneck/tests/data/ws_tests/test_list.txt | 21 + geom_bottleneck/tests/test_hera_bottleneck.cpp | 169 +- 1626 files changed, 54929 insertions(+), 501 deletions(-) create mode 100644 geom_bottleneck/tests/data/test_001_A create mode 100644 geom_bottleneck/tests/data/test_001_B create mode 100644 geom_bottleneck/tests/data/test_002_A create mode 100644 geom_bottleneck/tests/data/test_002_B create mode 100644 geom_bottleneck/tests/data/test_003_A create mode 100644 geom_bottleneck/tests/data/test_003_B create mode 100644 geom_bottleneck/tests/data/test_004_A create mode 100644 geom_bottleneck/tests/data/test_004_B create mode 100644 geom_bottleneck/tests/data/test_005_A create mode 100644 geom_bottleneck/tests/data/test_005_B create mode 100644 geom_bottleneck/tests/data/test_006_A create mode 100644 geom_bottleneck/tests/data/test_006_B create mode 100644 geom_bottleneck/tests/data/test_007_A create mode 100644 geom_bottleneck/tests/data/test_007_B create mode 100644 geom_bottleneck/tests/data/test_008_A create mode 100644 geom_bottleneck/tests/data/test_008_B create mode 100644 geom_bottleneck/tests/data/test_009_A create mode 100644 geom_bottleneck/tests/data/test_009_B create mode 100644 geom_bottleneck/tests/data/test_010_A create mode 100644 geom_bottleneck/tests/data/test_010_B create mode 100644 geom_bottleneck/tests/data/test_011_A create mode 100644 geom_bottleneck/tests/data/test_011_B create mode 100644 geom_bottleneck/tests/data/test_012_A create mode 100644 geom_bottleneck/tests/data/test_012_B create mode 100644 geom_bottleneck/tests/data/test_013_A create mode 100644 geom_bottleneck/tests/data/test_013_B create mode 100644 geom_bottleneck/tests/data/test_014_A create mode 100644 geom_bottleneck/tests/data/test_014_B create mode 100644 geom_bottleneck/tests/data/test_015_A create mode 100644 geom_bottleneck/tests/data/test_015_B create mode 100644 geom_bottleneck/tests/data/test_016_A create mode 100644 geom_bottleneck/tests/data/test_016_B create mode 100644 geom_bottleneck/tests/data/test_100_A create mode 100644 geom_bottleneck/tests/data/test_100_B create mode 100644 geom_bottleneck/tests/data/test_101_A create mode 100644 geom_bottleneck/tests/data/test_101_B create mode 100644 geom_bottleneck/tests/data/test_102_A create mode 100644 geom_bottleneck/tests/data/test_102_B create mode 100644 geom_bottleneck/tests/data/test_103_A create mode 100644 geom_bottleneck/tests/data/test_103_B create mode 100644 geom_bottleneck/tests/data/test_104_A create mode 100644 geom_bottleneck/tests/data/test_104_B create mode 100644 geom_bottleneck/tests/data/test_105_A create mode 100644 geom_bottleneck/tests/data/test_105_B create mode 100644 geom_bottleneck/tests/data/test_106_A create mode 100644 geom_bottleneck/tests/data/test_106_B create mode 100644 geom_bottleneck/tests/data/test_107_A create mode 100644 geom_bottleneck/tests/data/test_107_B create mode 100644 geom_bottleneck/tests/data/test_108_A create mode 100644 geom_bottleneck/tests/data/test_108_B create mode 100644 geom_bottleneck/tests/data/test_109_A create mode 100644 geom_bottleneck/tests/data/test_109_B create mode 100644 geom_bottleneck/tests/data/test_110_A create mode 100644 geom_bottleneck/tests/data/test_110_B create mode 100644 geom_bottleneck/tests/data/test_111_A create mode 100644 geom_bottleneck/tests/data/test_111_B create mode 100644 geom_bottleneck/tests/data/test_112_A create mode 100644 geom_bottleneck/tests/data/test_112_B create mode 100644 geom_bottleneck/tests/data/test_113_A create mode 100644 geom_bottleneck/tests/data/test_113_B create mode 100644 geom_bottleneck/tests/data/test_114_A create mode 100644 geom_bottleneck/tests/data/test_114_B create mode 100644 geom_bottleneck/tests/data/test_115_A create mode 100644 geom_bottleneck/tests/data/test_115_B create mode 100644 geom_bottleneck/tests/data/test_116_A create mode 100644 geom_bottleneck/tests/data/test_116_B create mode 100644 geom_bottleneck/tests/data/test_117_A create mode 100644 geom_bottleneck/tests/data/test_117_B create mode 100644 geom_bottleneck/tests/data/test_118_A create mode 100644 geom_bottleneck/tests/data/test_118_B create mode 100644 geom_bottleneck/tests/data/test_119_A create mode 100644 geom_bottleneck/tests/data/test_119_B create mode 100644 geom_bottleneck/tests/data/test_120_A create mode 100644 geom_bottleneck/tests/data/test_120_B create mode 100644 geom_bottleneck/tests/data/test_121_A create mode 100644 geom_bottleneck/tests/data/test_121_B create mode 100644 geom_bottleneck/tests/data/test_122_A create mode 100644 geom_bottleneck/tests/data/test_122_B create mode 100644 geom_bottleneck/tests/data/test_123_A create mode 100644 geom_bottleneck/tests/data/test_123_B create mode 100644 geom_bottleneck/tests/data/test_124_A create mode 100644 geom_bottleneck/tests/data/test_124_B create mode 100644 geom_bottleneck/tests/data/test_125_A create mode 100644 geom_bottleneck/tests/data/test_125_B create mode 100644 geom_bottleneck/tests/data/test_126_A create mode 100644 geom_bottleneck/tests/data/test_126_B create mode 100644 geom_bottleneck/tests/data/test_127_A create mode 100644 geom_bottleneck/tests/data/test_127_B create mode 100644 geom_bottleneck/tests/data/test_128_A create mode 100644 geom_bottleneck/tests/data/test_128_B create mode 100644 geom_bottleneck/tests/data/test_129_A create mode 100644 geom_bottleneck/tests/data/test_129_B create mode 100644 geom_bottleneck/tests/data/test_130_A create mode 100644 geom_bottleneck/tests/data/test_130_B create mode 100644 geom_bottleneck/tests/data/test_131_A create mode 100644 geom_bottleneck/tests/data/test_131_B create mode 100644 geom_bottleneck/tests/data/test_132_A create mode 100644 geom_bottleneck/tests/data/test_132_B create mode 100644 geom_bottleneck/tests/data/test_133_A create mode 100644 geom_bottleneck/tests/data/test_133_B create mode 100644 geom_bottleneck/tests/data/test_134_A create mode 100644 geom_bottleneck/tests/data/test_134_B create mode 100644 geom_bottleneck/tests/data/test_135_A create mode 100644 geom_bottleneck/tests/data/test_135_B create mode 100644 geom_bottleneck/tests/data/test_136_A create mode 100644 geom_bottleneck/tests/data/test_136_B create mode 100644 geom_bottleneck/tests/data/test_137_A create mode 100644 geom_bottleneck/tests/data/test_137_B create mode 100644 geom_bottleneck/tests/data/test_138_A create mode 100644 geom_bottleneck/tests/data/test_138_B create mode 100644 geom_bottleneck/tests/data/test_139_A create mode 100644 geom_bottleneck/tests/data/test_139_B create mode 100644 geom_bottleneck/tests/data/test_140_A create mode 100644 geom_bottleneck/tests/data/test_140_B create mode 100644 geom_bottleneck/tests/data/test_141_A create mode 100644 geom_bottleneck/tests/data/test_141_B create mode 100644 geom_bottleneck/tests/data/test_142_A create mode 100644 geom_bottleneck/tests/data/test_142_B create mode 100644 geom_bottleneck/tests/data/test_143_A create mode 100644 geom_bottleneck/tests/data/test_143_B create mode 100644 geom_bottleneck/tests/data/test_144_A create mode 100644 geom_bottleneck/tests/data/test_144_B create mode 100644 geom_bottleneck/tests/data/test_145_A create mode 100644 geom_bottleneck/tests/data/test_145_B create mode 100644 geom_bottleneck/tests/data/test_146_A create mode 100644 geom_bottleneck/tests/data/test_146_B create mode 100644 geom_bottleneck/tests/data/test_147_A create mode 100644 geom_bottleneck/tests/data/test_147_B create mode 100644 geom_bottleneck/tests/data/test_148_A create mode 100644 geom_bottleneck/tests/data/test_148_B create mode 100644 geom_bottleneck/tests/data/test_149_A create mode 100644 geom_bottleneck/tests/data/test_149_B create mode 100644 geom_bottleneck/tests/data/test_150_A create mode 100644 geom_bottleneck/tests/data/test_150_B create mode 100644 geom_bottleneck/tests/data/test_151_A create mode 100644 geom_bottleneck/tests/data/test_151_B create mode 100644 geom_bottleneck/tests/data/test_152_A create mode 100644 geom_bottleneck/tests/data/test_152_B create mode 100644 geom_bottleneck/tests/data/test_153_A create mode 100644 geom_bottleneck/tests/data/test_153_B create mode 100644 geom_bottleneck/tests/data/test_154_A create mode 100644 geom_bottleneck/tests/data/test_154_B create mode 100644 geom_bottleneck/tests/data/test_155_A create mode 100644 geom_bottleneck/tests/data/test_155_B create mode 100644 geom_bottleneck/tests/data/test_156_A create mode 100644 geom_bottleneck/tests/data/test_156_B create mode 100644 geom_bottleneck/tests/data/test_157_A create mode 100644 geom_bottleneck/tests/data/test_157_B create mode 100644 geom_bottleneck/tests/data/test_158_A create mode 100644 geom_bottleneck/tests/data/test_158_B create mode 100644 geom_bottleneck/tests/data/test_159_A create mode 100644 geom_bottleneck/tests/data/test_159_B create mode 100644 geom_bottleneck/tests/data/test_160_A create mode 100644 geom_bottleneck/tests/data/test_160_B create mode 100644 geom_bottleneck/tests/data/test_161_A create mode 100644 geom_bottleneck/tests/data/test_161_B create mode 100644 geom_bottleneck/tests/data/test_162_A create mode 100644 geom_bottleneck/tests/data/test_162_B create mode 100644 geom_bottleneck/tests/data/test_163_A create mode 100644 geom_bottleneck/tests/data/test_163_B create mode 100644 geom_bottleneck/tests/data/test_164_A create mode 100644 geom_bottleneck/tests/data/test_164_B create mode 100644 geom_bottleneck/tests/data/test_165_A create mode 100644 geom_bottleneck/tests/data/test_165_B create mode 100644 geom_bottleneck/tests/data/test_166_A create mode 100644 geom_bottleneck/tests/data/test_166_B create mode 100644 geom_bottleneck/tests/data/test_167_A create mode 100644 geom_bottleneck/tests/data/test_167_B create mode 100644 geom_bottleneck/tests/data/test_168_A create mode 100644 geom_bottleneck/tests/data/test_168_B create mode 100644 geom_bottleneck/tests/data/test_169_A create mode 100644 geom_bottleneck/tests/data/test_169_B create mode 100644 geom_bottleneck/tests/data/test_170_A create mode 100644 geom_bottleneck/tests/data/test_170_B create mode 100644 geom_bottleneck/tests/data/test_171_A create mode 100644 geom_bottleneck/tests/data/test_171_B create mode 100644 geom_bottleneck/tests/data/test_172_A create mode 100644 geom_bottleneck/tests/data/test_172_B create mode 100644 geom_bottleneck/tests/data/test_173_A create mode 100644 geom_bottleneck/tests/data/test_173_B create mode 100644 geom_bottleneck/tests/data/test_174_A create mode 100644 geom_bottleneck/tests/data/test_174_B create mode 100644 geom_bottleneck/tests/data/test_175_A create mode 100644 geom_bottleneck/tests/data/test_175_B create mode 100644 geom_bottleneck/tests/data/test_176_A create mode 100644 geom_bottleneck/tests/data/test_176_B create mode 100644 geom_bottleneck/tests/data/test_177_A create mode 100644 geom_bottleneck/tests/data/test_177_B create mode 100644 geom_bottleneck/tests/data/test_178_A create mode 100644 geom_bottleneck/tests/data/test_178_B create mode 100644 geom_bottleneck/tests/data/test_179_A create mode 100644 geom_bottleneck/tests/data/test_179_B create mode 100644 geom_bottleneck/tests/data/test_180_A create mode 100644 geom_bottleneck/tests/data/test_180_B create mode 100644 geom_bottleneck/tests/data/test_181_A create mode 100644 geom_bottleneck/tests/data/test_181_B create mode 100644 geom_bottleneck/tests/data/test_182_A create mode 100644 geom_bottleneck/tests/data/test_182_B create mode 100644 geom_bottleneck/tests/data/test_183_A create mode 100644 geom_bottleneck/tests/data/test_183_B create mode 100644 geom_bottleneck/tests/data/test_184_A create mode 100644 geom_bottleneck/tests/data/test_184_B create mode 100644 geom_bottleneck/tests/data/test_185_A create mode 100644 geom_bottleneck/tests/data/test_185_B create mode 100644 geom_bottleneck/tests/data/test_186_A create mode 100644 geom_bottleneck/tests/data/test_186_B create mode 100644 geom_bottleneck/tests/data/test_187_A create mode 100644 geom_bottleneck/tests/data/test_187_B create mode 100644 geom_bottleneck/tests/data/test_188_A create mode 100644 geom_bottleneck/tests/data/test_188_B create mode 100644 geom_bottleneck/tests/data/test_189_A create mode 100644 geom_bottleneck/tests/data/test_189_B create mode 100644 geom_bottleneck/tests/data/test_190_A create mode 100644 geom_bottleneck/tests/data/test_190_B create mode 100644 geom_bottleneck/tests/data/test_191_A create mode 100644 geom_bottleneck/tests/data/test_191_B create mode 100644 geom_bottleneck/tests/data/test_192_A create mode 100644 geom_bottleneck/tests/data/test_192_B create mode 100644 geom_bottleneck/tests/data/test_193_A create mode 100644 geom_bottleneck/tests/data/test_193_B create mode 100644 geom_bottleneck/tests/data/test_194_A create mode 100644 geom_bottleneck/tests/data/test_194_B create mode 100644 geom_bottleneck/tests/data/test_195_A create mode 100644 geom_bottleneck/tests/data/test_195_B create mode 100644 geom_bottleneck/tests/data/test_196_A create mode 100644 geom_bottleneck/tests/data/test_196_B create mode 100644 geom_bottleneck/tests/data/test_197_A create mode 100644 geom_bottleneck/tests/data/test_197_B create mode 100644 geom_bottleneck/tests/data/test_198_A create mode 100644 geom_bottleneck/tests/data/test_198_B create mode 100644 geom_bottleneck/tests/data/test_199_A create mode 100644 geom_bottleneck/tests/data/test_199_B create mode 100644 geom_bottleneck/tests/data/test_200_A create mode 100644 geom_bottleneck/tests/data/test_200_B create mode 100644 geom_bottleneck/tests/data/test_201_A create mode 100644 geom_bottleneck/tests/data/test_201_B create mode 100644 geom_bottleneck/tests/data/test_202_A create mode 100644 geom_bottleneck/tests/data/test_202_B create mode 100644 geom_bottleneck/tests/data/test_203_A create mode 100644 geom_bottleneck/tests/data/test_203_B create mode 100644 geom_bottleneck/tests/data/test_204_A create mode 100644 geom_bottleneck/tests/data/test_204_B create mode 100644 geom_bottleneck/tests/data/test_205_A create mode 100644 geom_bottleneck/tests/data/test_205_B create mode 100644 geom_bottleneck/tests/data/test_206_A create mode 100644 geom_bottleneck/tests/data/test_206_B create mode 100644 geom_bottleneck/tests/data/test_207_A create mode 100644 geom_bottleneck/tests/data/test_207_B create mode 100644 geom_bottleneck/tests/data/test_208_A create mode 100644 geom_bottleneck/tests/data/test_208_B create mode 100644 geom_bottleneck/tests/data/test_209_A create mode 100644 geom_bottleneck/tests/data/test_209_B create mode 100644 geom_bottleneck/tests/data/test_210_A create mode 100644 geom_bottleneck/tests/data/test_210_B create mode 100644 geom_bottleneck/tests/data/test_211_A create mode 100644 geom_bottleneck/tests/data/test_211_B create mode 100644 geom_bottleneck/tests/data/test_212_A create mode 100644 geom_bottleneck/tests/data/test_212_B create mode 100644 geom_bottleneck/tests/data/test_213_A create mode 100644 geom_bottleneck/tests/data/test_213_B create mode 100644 geom_bottleneck/tests/data/test_214_A create mode 100644 geom_bottleneck/tests/data/test_214_B create mode 100644 geom_bottleneck/tests/data/test_215_A create mode 100644 geom_bottleneck/tests/data/test_215_B create mode 100644 geom_bottleneck/tests/data/test_216_A create mode 100644 geom_bottleneck/tests/data/test_216_B create mode 100644 geom_bottleneck/tests/data/test_217_A create mode 100644 geom_bottleneck/tests/data/test_217_B create mode 100644 geom_bottleneck/tests/data/test_218_A create mode 100644 geom_bottleneck/tests/data/test_218_B create mode 100644 geom_bottleneck/tests/data/test_219_A create mode 100644 geom_bottleneck/tests/data/test_219_B create mode 100644 geom_bottleneck/tests/data/test_220_A create mode 100644 geom_bottleneck/tests/data/test_220_B create mode 100644 geom_bottleneck/tests/data/test_221_A create mode 100644 geom_bottleneck/tests/data/test_221_B create mode 100644 geom_bottleneck/tests/data/test_222_A create mode 100644 geom_bottleneck/tests/data/test_222_B create mode 100644 geom_bottleneck/tests/data/test_223_A create mode 100644 geom_bottleneck/tests/data/test_223_B create mode 100644 geom_bottleneck/tests/data/test_224_A create mode 100644 geom_bottleneck/tests/data/test_224_B create mode 100644 geom_bottleneck/tests/data/test_225_A create mode 100644 geom_bottleneck/tests/data/test_225_B create mode 100644 geom_bottleneck/tests/data/test_226_A create mode 100644 geom_bottleneck/tests/data/test_226_B create mode 100644 geom_bottleneck/tests/data/test_227_A create mode 100644 geom_bottleneck/tests/data/test_227_B create mode 100644 geom_bottleneck/tests/data/test_228_A create mode 100644 geom_bottleneck/tests/data/test_228_B create mode 100644 geom_bottleneck/tests/data/test_229_A create mode 100644 geom_bottleneck/tests/data/test_229_B create mode 100644 geom_bottleneck/tests/data/test_230_A create mode 100644 geom_bottleneck/tests/data/test_230_B create mode 100644 geom_bottleneck/tests/data/test_231_A create mode 100644 geom_bottleneck/tests/data/test_231_B create mode 100644 geom_bottleneck/tests/data/test_232_A create mode 100644 geom_bottleneck/tests/data/test_232_B create mode 100644 geom_bottleneck/tests/data/test_233_A create mode 100644 geom_bottleneck/tests/data/test_233_B create mode 100644 geom_bottleneck/tests/data/test_234_A create mode 100644 geom_bottleneck/tests/data/test_234_B create mode 100644 geom_bottleneck/tests/data/test_235_A create mode 100644 geom_bottleneck/tests/data/test_235_B create mode 100644 geom_bottleneck/tests/data/test_236_A create mode 100644 geom_bottleneck/tests/data/test_236_B create mode 100644 geom_bottleneck/tests/data/test_237_A create mode 100644 geom_bottleneck/tests/data/test_237_B create mode 100644 geom_bottleneck/tests/data/test_238_A create mode 100644 geom_bottleneck/tests/data/test_238_B create mode 100644 geom_bottleneck/tests/data/test_239_A create mode 100644 geom_bottleneck/tests/data/test_239_B create mode 100644 geom_bottleneck/tests/data/test_240_A create mode 100644 geom_bottleneck/tests/data/test_240_B create mode 100644 geom_bottleneck/tests/data/test_241_A create mode 100644 geom_bottleneck/tests/data/test_241_B create mode 100644 geom_bottleneck/tests/data/test_242_A create mode 100644 geom_bottleneck/tests/data/test_242_B create mode 100644 geom_bottleneck/tests/data/test_243_A create mode 100644 geom_bottleneck/tests/data/test_243_B create mode 100644 geom_bottleneck/tests/data/test_244_A create mode 100644 geom_bottleneck/tests/data/test_244_B create mode 100644 geom_bottleneck/tests/data/test_245_A create mode 100644 geom_bottleneck/tests/data/test_245_B create mode 100644 geom_bottleneck/tests/data/test_246_A create mode 100644 geom_bottleneck/tests/data/test_246_B create mode 100644 geom_bottleneck/tests/data/test_247_A create mode 100644 geom_bottleneck/tests/data/test_247_B create mode 100644 geom_bottleneck/tests/data/test_248_A create mode 100644 geom_bottleneck/tests/data/test_248_B create mode 100644 geom_bottleneck/tests/data/test_249_A create mode 100644 geom_bottleneck/tests/data/test_249_B create mode 100644 geom_bottleneck/tests/data/test_250_A create mode 100644 geom_bottleneck/tests/data/test_250_B create mode 100644 geom_bottleneck/tests/data/test_251_A create mode 100644 geom_bottleneck/tests/data/test_251_B create mode 100644 geom_bottleneck/tests/data/test_252_A create mode 100644 geom_bottleneck/tests/data/test_252_B create mode 100644 geom_bottleneck/tests/data/test_253_A create mode 100644 geom_bottleneck/tests/data/test_253_B create mode 100644 geom_bottleneck/tests/data/test_254_A create mode 100644 geom_bottleneck/tests/data/test_254_B create mode 100644 geom_bottleneck/tests/data/test_255_A create mode 100644 geom_bottleneck/tests/data/test_255_B create mode 100644 geom_bottleneck/tests/data/test_256_A create mode 100644 geom_bottleneck/tests/data/test_256_B create mode 100644 geom_bottleneck/tests/data/test_257_A create mode 100644 geom_bottleneck/tests/data/test_257_B create mode 100644 geom_bottleneck/tests/data/test_258_A create mode 100644 geom_bottleneck/tests/data/test_258_B create mode 100644 geom_bottleneck/tests/data/test_259_A create mode 100644 geom_bottleneck/tests/data/test_259_B create mode 100644 geom_bottleneck/tests/data/test_260_A create mode 100644 geom_bottleneck/tests/data/test_260_B create mode 100644 geom_bottleneck/tests/data/test_261_A create mode 100644 geom_bottleneck/tests/data/test_261_B create mode 100644 geom_bottleneck/tests/data/test_262_A create mode 100644 geom_bottleneck/tests/data/test_262_B create mode 100644 geom_bottleneck/tests/data/test_263_A create mode 100644 geom_bottleneck/tests/data/test_263_B create mode 100644 geom_bottleneck/tests/data/test_264_A create mode 100644 geom_bottleneck/tests/data/test_264_B create mode 100644 geom_bottleneck/tests/data/test_265_A create mode 100644 geom_bottleneck/tests/data/test_265_B create mode 100644 geom_bottleneck/tests/data/test_266_A create mode 100644 geom_bottleneck/tests/data/test_266_B create mode 100644 geom_bottleneck/tests/data/test_267_A create mode 100644 geom_bottleneck/tests/data/test_267_B create mode 100644 geom_bottleneck/tests/data/test_268_A create mode 100644 geom_bottleneck/tests/data/test_268_B create mode 100644 geom_bottleneck/tests/data/test_269_A create mode 100644 geom_bottleneck/tests/data/test_269_B create mode 100644 geom_bottleneck/tests/data/test_270_A create mode 100644 geom_bottleneck/tests/data/test_270_B create mode 100644 geom_bottleneck/tests/data/test_271_A create mode 100644 geom_bottleneck/tests/data/test_271_B create mode 100644 geom_bottleneck/tests/data/test_272_A create mode 100644 geom_bottleneck/tests/data/test_272_B create mode 100644 geom_bottleneck/tests/data/test_273_A create mode 100644 geom_bottleneck/tests/data/test_273_B create mode 100644 geom_bottleneck/tests/data/test_274_A create mode 100644 geom_bottleneck/tests/data/test_274_B create mode 100644 geom_bottleneck/tests/data/test_275_A create mode 100644 geom_bottleneck/tests/data/test_275_B create mode 100644 geom_bottleneck/tests/data/test_276_A create mode 100644 geom_bottleneck/tests/data/test_276_B create mode 100644 geom_bottleneck/tests/data/test_277_A create mode 100644 geom_bottleneck/tests/data/test_277_B create mode 100644 geom_bottleneck/tests/data/test_278_A create mode 100644 geom_bottleneck/tests/data/test_278_B create mode 100644 geom_bottleneck/tests/data/test_279_A create mode 100644 geom_bottleneck/tests/data/test_279_B create mode 100644 geom_bottleneck/tests/data/test_280_A create mode 100644 geom_bottleneck/tests/data/test_280_B create mode 100644 geom_bottleneck/tests/data/test_281_A create mode 100644 geom_bottleneck/tests/data/test_281_B create mode 100644 geom_bottleneck/tests/data/test_282_A create mode 100644 geom_bottleneck/tests/data/test_282_B create mode 100644 geom_bottleneck/tests/data/test_283_A create mode 100644 geom_bottleneck/tests/data/test_283_B create mode 100644 geom_bottleneck/tests/data/test_284_A create mode 100644 geom_bottleneck/tests/data/test_284_B create mode 100644 geom_bottleneck/tests/data/test_285_A create mode 100644 geom_bottleneck/tests/data/test_285_B create mode 100644 geom_bottleneck/tests/data/test_286_A create mode 100644 geom_bottleneck/tests/data/test_286_B create mode 100644 geom_bottleneck/tests/data/test_287_A create mode 100644 geom_bottleneck/tests/data/test_287_B create mode 100644 geom_bottleneck/tests/data/test_288_A create mode 100644 geom_bottleneck/tests/data/test_288_B create mode 100644 geom_bottleneck/tests/data/test_289_A create mode 100644 geom_bottleneck/tests/data/test_289_B create mode 100644 geom_bottleneck/tests/data/test_290_A create mode 100644 geom_bottleneck/tests/data/test_290_B create mode 100644 geom_bottleneck/tests/data/test_291_A create mode 100644 geom_bottleneck/tests/data/test_291_B create mode 100644 geom_bottleneck/tests/data/test_292_A create mode 100644 geom_bottleneck/tests/data/test_292_B create mode 100644 geom_bottleneck/tests/data/test_293_A create mode 100644 geom_bottleneck/tests/data/test_293_B create mode 100644 geom_bottleneck/tests/data/test_294_A create mode 100644 geom_bottleneck/tests/data/test_294_B create mode 100644 geom_bottleneck/tests/data/test_295_A create mode 100644 geom_bottleneck/tests/data/test_295_B create mode 100644 geom_bottleneck/tests/data/test_296_A create mode 100644 geom_bottleneck/tests/data/test_296_B create mode 100644 geom_bottleneck/tests/data/test_297_A create mode 100644 geom_bottleneck/tests/data/test_297_B create mode 100644 geom_bottleneck/tests/data/test_298_A create mode 100644 geom_bottleneck/tests/data/test_298_B create mode 100644 geom_bottleneck/tests/data/test_299_A create mode 100644 geom_bottleneck/tests/data/test_299_B create mode 100644 geom_bottleneck/tests/data/test_300_A create mode 100644 geom_bottleneck/tests/data/test_300_B create mode 100644 geom_bottleneck/tests/data/test_301_A create mode 100644 geom_bottleneck/tests/data/test_301_B create mode 100644 geom_bottleneck/tests/data/test_302_A create mode 100644 geom_bottleneck/tests/data/test_302_B create mode 100644 geom_bottleneck/tests/data/test_303_A create mode 100644 geom_bottleneck/tests/data/test_303_B create mode 100644 geom_bottleneck/tests/data/test_304_A create mode 100644 geom_bottleneck/tests/data/test_304_B create mode 100644 geom_bottleneck/tests/data/test_305_A create mode 100644 geom_bottleneck/tests/data/test_305_B create mode 100644 geom_bottleneck/tests/data/test_306_A create mode 100644 geom_bottleneck/tests/data/test_306_B create mode 100644 geom_bottleneck/tests/data/test_307_A create mode 100644 geom_bottleneck/tests/data/test_307_B create mode 100644 geom_bottleneck/tests/data/test_308_A create mode 100644 geom_bottleneck/tests/data/test_308_B create mode 100644 geom_bottleneck/tests/data/test_309_A create mode 100644 geom_bottleneck/tests/data/test_309_B create mode 100644 geom_bottleneck/tests/data/test_310_A create mode 100644 geom_bottleneck/tests/data/test_310_B create mode 100644 geom_bottleneck/tests/data/test_311_A create mode 100644 geom_bottleneck/tests/data/test_311_B create mode 100644 geom_bottleneck/tests/data/test_312_A create mode 100644 geom_bottleneck/tests/data/test_312_B create mode 100644 geom_bottleneck/tests/data/test_313_A create mode 100644 geom_bottleneck/tests/data/test_313_B create mode 100644 geom_bottleneck/tests/data/test_314_A create mode 100644 geom_bottleneck/tests/data/test_314_B create mode 100644 geom_bottleneck/tests/data/test_315_A create mode 100644 geom_bottleneck/tests/data/test_315_B create mode 100644 geom_bottleneck/tests/data/test_316_A create mode 100644 geom_bottleneck/tests/data/test_316_B create mode 100644 geom_bottleneck/tests/data/test_317_A create mode 100644 geom_bottleneck/tests/data/test_317_B create mode 100644 geom_bottleneck/tests/data/test_318_A create mode 100644 geom_bottleneck/tests/data/test_318_B create mode 100644 geom_bottleneck/tests/data/test_319_A create mode 100644 geom_bottleneck/tests/data/test_319_B create mode 100644 geom_bottleneck/tests/data/test_320_A create mode 100644 geom_bottleneck/tests/data/test_320_B create mode 100644 geom_bottleneck/tests/data/test_321_A create mode 100644 geom_bottleneck/tests/data/test_321_B create mode 100644 geom_bottleneck/tests/data/test_322_A create mode 100644 geom_bottleneck/tests/data/test_322_B create mode 100644 geom_bottleneck/tests/data/test_323_A create mode 100644 geom_bottleneck/tests/data/test_323_B create mode 100644 geom_bottleneck/tests/data/test_324_A create mode 100644 geom_bottleneck/tests/data/test_324_B create mode 100644 geom_bottleneck/tests/data/test_325_A create mode 100644 geom_bottleneck/tests/data/test_325_B create mode 100644 geom_bottleneck/tests/data/test_326_A create mode 100644 geom_bottleneck/tests/data/test_326_B create mode 100644 geom_bottleneck/tests/data/test_327_A create mode 100644 geom_bottleneck/tests/data/test_327_B create mode 100644 geom_bottleneck/tests/data/test_328_A create mode 100644 geom_bottleneck/tests/data/test_328_B create mode 100644 geom_bottleneck/tests/data/test_329_A create mode 100644 geom_bottleneck/tests/data/test_329_B create mode 100644 geom_bottleneck/tests/data/test_330_A create mode 100644 geom_bottleneck/tests/data/test_330_B create mode 100644 geom_bottleneck/tests/data/test_331_A create mode 100644 geom_bottleneck/tests/data/test_331_B create mode 100644 geom_bottleneck/tests/data/test_332_A create mode 100644 geom_bottleneck/tests/data/test_332_B create mode 100644 geom_bottleneck/tests/data/test_333_A create mode 100644 geom_bottleneck/tests/data/test_333_B create mode 100644 geom_bottleneck/tests/data/test_334_A create mode 100644 geom_bottleneck/tests/data/test_334_B create mode 100644 geom_bottleneck/tests/data/test_335_A create mode 100644 geom_bottleneck/tests/data/test_335_B create mode 100644 geom_bottleneck/tests/data/test_336_A create mode 100644 geom_bottleneck/tests/data/test_336_B create mode 100644 geom_bottleneck/tests/data/test_337_A create mode 100644 geom_bottleneck/tests/data/test_337_B create mode 100644 geom_bottleneck/tests/data/test_338_A create mode 100644 geom_bottleneck/tests/data/test_338_B create mode 100644 geom_bottleneck/tests/data/test_339_A create mode 100644 geom_bottleneck/tests/data/test_339_B create mode 100644 geom_bottleneck/tests/data/test_340_A create mode 100644 geom_bottleneck/tests/data/test_340_B create mode 100644 geom_bottleneck/tests/data/test_341_A create mode 100644 geom_bottleneck/tests/data/test_341_B create mode 100644 geom_bottleneck/tests/data/test_342_A create mode 100644 geom_bottleneck/tests/data/test_342_B create mode 100644 geom_bottleneck/tests/data/test_343_A create mode 100644 geom_bottleneck/tests/data/test_343_B create mode 100644 geom_bottleneck/tests/data/test_344_A create mode 100644 geom_bottleneck/tests/data/test_344_B create mode 100644 geom_bottleneck/tests/data/test_345_A create mode 100644 geom_bottleneck/tests/data/test_345_B create mode 100644 geom_bottleneck/tests/data/test_346_A create mode 100644 geom_bottleneck/tests/data/test_346_B create mode 100644 geom_bottleneck/tests/data/test_347_A create mode 100644 geom_bottleneck/tests/data/test_347_B create mode 100644 geom_bottleneck/tests/data/test_348_A create mode 100644 geom_bottleneck/tests/data/test_348_B create mode 100644 geom_bottleneck/tests/data/test_349_A create mode 100644 geom_bottleneck/tests/data/test_349_B create mode 100644 geom_bottleneck/tests/data/test_350_A create mode 100644 geom_bottleneck/tests/data/test_350_B create mode 100644 geom_bottleneck/tests/data/test_351_A create mode 100644 geom_bottleneck/tests/data/test_351_B create mode 100644 geom_bottleneck/tests/data/test_352_A create mode 100644 geom_bottleneck/tests/data/test_352_B create mode 100644 geom_bottleneck/tests/data/test_353_A create mode 100644 geom_bottleneck/tests/data/test_353_B create mode 100644 geom_bottleneck/tests/data/test_354_A create mode 100644 geom_bottleneck/tests/data/test_354_B create mode 100644 geom_bottleneck/tests/data/test_355_A create mode 100644 geom_bottleneck/tests/data/test_355_B create mode 100644 geom_bottleneck/tests/data/test_356_A create mode 100644 geom_bottleneck/tests/data/test_356_B create mode 100644 geom_bottleneck/tests/data/test_357_A create mode 100644 geom_bottleneck/tests/data/test_357_B create mode 100644 geom_bottleneck/tests/data/test_358_A create mode 100644 geom_bottleneck/tests/data/test_358_B create mode 100644 geom_bottleneck/tests/data/test_359_A create mode 100644 geom_bottleneck/tests/data/test_359_B create mode 100644 geom_bottleneck/tests/data/test_360_A create mode 100644 geom_bottleneck/tests/data/test_360_B create mode 100644 geom_bottleneck/tests/data/test_361_A create mode 100644 geom_bottleneck/tests/data/test_361_B create mode 100644 geom_bottleneck/tests/data/test_362_A create mode 100644 geom_bottleneck/tests/data/test_362_B create mode 100644 geom_bottleneck/tests/data/test_363_A create mode 100644 geom_bottleneck/tests/data/test_363_B create mode 100644 geom_bottleneck/tests/data/test_364_A create mode 100644 geom_bottleneck/tests/data/test_364_B create mode 100644 geom_bottleneck/tests/data/test_365_A create mode 100644 geom_bottleneck/tests/data/test_365_B create mode 100644 geom_bottleneck/tests/data/test_366_A create mode 100644 geom_bottleneck/tests/data/test_366_B create mode 100644 geom_bottleneck/tests/data/test_367_A create mode 100644 geom_bottleneck/tests/data/test_367_B create mode 100644 geom_bottleneck/tests/data/test_368_A create mode 100644 geom_bottleneck/tests/data/test_368_B create mode 100644 geom_bottleneck/tests/data/test_369_A create mode 100644 geom_bottleneck/tests/data/test_369_B create mode 100644 geom_bottleneck/tests/data/test_370_A create mode 100644 geom_bottleneck/tests/data/test_370_B create mode 100644 geom_bottleneck/tests/data/test_371_A create mode 100644 geom_bottleneck/tests/data/test_371_B create mode 100644 geom_bottleneck/tests/data/test_372_A create mode 100644 geom_bottleneck/tests/data/test_372_B create mode 100644 geom_bottleneck/tests/data/test_373_A create mode 100644 geom_bottleneck/tests/data/test_373_B create mode 100644 geom_bottleneck/tests/data/test_374_A create mode 100644 geom_bottleneck/tests/data/test_374_B create mode 100644 geom_bottleneck/tests/data/test_375_A create mode 100644 geom_bottleneck/tests/data/test_375_B create mode 100644 geom_bottleneck/tests/data/test_376_A create mode 100644 geom_bottleneck/tests/data/test_376_B create mode 100644 geom_bottleneck/tests/data/test_377_A create mode 100644 geom_bottleneck/tests/data/test_377_B create mode 100644 geom_bottleneck/tests/data/test_378_A create mode 100644 geom_bottleneck/tests/data/test_378_B create mode 100644 geom_bottleneck/tests/data/test_379_A create mode 100644 geom_bottleneck/tests/data/test_379_B create mode 100644 geom_bottleneck/tests/data/test_380_A create mode 100644 geom_bottleneck/tests/data/test_380_B create mode 100644 geom_bottleneck/tests/data/test_381_A create mode 100644 geom_bottleneck/tests/data/test_381_B create mode 100644 geom_bottleneck/tests/data/test_382_A create mode 100644 geom_bottleneck/tests/data/test_382_B create mode 100644 geom_bottleneck/tests/data/test_383_A create mode 100644 geom_bottleneck/tests/data/test_383_B create mode 100644 geom_bottleneck/tests/data/test_384_A create mode 100644 geom_bottleneck/tests/data/test_384_B create mode 100644 geom_bottleneck/tests/data/test_385_A create mode 100644 geom_bottleneck/tests/data/test_385_B create mode 100644 geom_bottleneck/tests/data/test_386_A create mode 100644 geom_bottleneck/tests/data/test_386_B create mode 100644 geom_bottleneck/tests/data/test_387_A create mode 100644 geom_bottleneck/tests/data/test_387_B create mode 100644 geom_bottleneck/tests/data/test_388_A create mode 100644 geom_bottleneck/tests/data/test_388_B create mode 100644 geom_bottleneck/tests/data/test_389_A create mode 100644 geom_bottleneck/tests/data/test_389_B create mode 100644 geom_bottleneck/tests/data/test_390_A create mode 100644 geom_bottleneck/tests/data/test_390_B create mode 100644 geom_bottleneck/tests/data/test_391_A create mode 100644 geom_bottleneck/tests/data/test_391_B create mode 100644 geom_bottleneck/tests/data/test_392_A create mode 100644 geom_bottleneck/tests/data/test_392_B create mode 100644 geom_bottleneck/tests/data/test_393_A create mode 100644 geom_bottleneck/tests/data/test_393_B create mode 100644 geom_bottleneck/tests/data/test_394_A create mode 100644 geom_bottleneck/tests/data/test_394_B create mode 100644 geom_bottleneck/tests/data/test_395_A create mode 100644 geom_bottleneck/tests/data/test_395_B create mode 100644 geom_bottleneck/tests/data/test_396_A create mode 100644 geom_bottleneck/tests/data/test_396_B create mode 100644 geom_bottleneck/tests/data/test_397_A create mode 100644 geom_bottleneck/tests/data/test_397_B create mode 100644 geom_bottleneck/tests/data/test_398_A create mode 100644 geom_bottleneck/tests/data/test_398_B create mode 100644 geom_bottleneck/tests/data/test_399_A create mode 100644 geom_bottleneck/tests/data/test_399_B create mode 100644 geom_bottleneck/tests/data/test_400_A create mode 100644 geom_bottleneck/tests/data/test_400_B create mode 100644 geom_bottleneck/tests/data/test_401_A create mode 100644 geom_bottleneck/tests/data/test_401_B create mode 100644 geom_bottleneck/tests/data/test_402_A create mode 100644 geom_bottleneck/tests/data/test_402_B create mode 100644 geom_bottleneck/tests/data/test_403_A create mode 100644 geom_bottleneck/tests/data/test_403_B create mode 100644 geom_bottleneck/tests/data/test_404_A create mode 100644 geom_bottleneck/tests/data/test_404_B create mode 100644 geom_bottleneck/tests/data/test_405_A create mode 100644 geom_bottleneck/tests/data/test_405_B create mode 100644 geom_bottleneck/tests/data/test_406_A create mode 100644 geom_bottleneck/tests/data/test_406_B create mode 100644 geom_bottleneck/tests/data/test_407_A create mode 100644 geom_bottleneck/tests/data/test_407_B create mode 100644 geom_bottleneck/tests/data/test_408_A create mode 100644 geom_bottleneck/tests/data/test_408_B create mode 100644 geom_bottleneck/tests/data/test_409_A create mode 100644 geom_bottleneck/tests/data/test_409_B create mode 100644 geom_bottleneck/tests/data/test_410_A create mode 100644 geom_bottleneck/tests/data/test_410_B create mode 100644 geom_bottleneck/tests/data/test_411_A create mode 100644 geom_bottleneck/tests/data/test_411_B create mode 100644 geom_bottleneck/tests/data/test_412_A create mode 100644 geom_bottleneck/tests/data/test_412_B create mode 100644 geom_bottleneck/tests/data/test_413_A create mode 100644 geom_bottleneck/tests/data/test_413_B create mode 100644 geom_bottleneck/tests/data/test_414_A create mode 100644 geom_bottleneck/tests/data/test_414_B create mode 100644 geom_bottleneck/tests/data/test_415_A create mode 100644 geom_bottleneck/tests/data/test_415_B create mode 100644 geom_bottleneck/tests/data/test_416_A create mode 100644 geom_bottleneck/tests/data/test_416_B create mode 100644 geom_bottleneck/tests/data/test_417_A create mode 100644 geom_bottleneck/tests/data/test_417_B create mode 100644 geom_bottleneck/tests/data/test_418_A create mode 100644 geom_bottleneck/tests/data/test_418_B create mode 100644 geom_bottleneck/tests/data/test_419_A create mode 100644 geom_bottleneck/tests/data/test_419_B create mode 100644 geom_bottleneck/tests/data/test_420_A create mode 100644 geom_bottleneck/tests/data/test_420_B create mode 100644 geom_bottleneck/tests/data/test_421_A create mode 100644 geom_bottleneck/tests/data/test_421_B create mode 100644 geom_bottleneck/tests/data/test_422_A create mode 100644 geom_bottleneck/tests/data/test_422_B create mode 100644 geom_bottleneck/tests/data/test_423_A create mode 100644 geom_bottleneck/tests/data/test_423_B create mode 100644 geom_bottleneck/tests/data/test_424_A create mode 100644 geom_bottleneck/tests/data/test_424_B create mode 100644 geom_bottleneck/tests/data/test_425_A create mode 100644 geom_bottleneck/tests/data/test_425_B create mode 100644 geom_bottleneck/tests/data/test_426_A create mode 100644 geom_bottleneck/tests/data/test_426_B create mode 100644 geom_bottleneck/tests/data/test_427_A create mode 100644 geom_bottleneck/tests/data/test_427_B create mode 100644 geom_bottleneck/tests/data/test_428_A create mode 100644 geom_bottleneck/tests/data/test_428_B create mode 100644 geom_bottleneck/tests/data/test_429_A create mode 100644 geom_bottleneck/tests/data/test_429_B create mode 100644 geom_bottleneck/tests/data/test_430_A create mode 100644 geom_bottleneck/tests/data/test_430_B create mode 100644 geom_bottleneck/tests/data/test_431_A create mode 100644 geom_bottleneck/tests/data/test_431_B create mode 100644 geom_bottleneck/tests/data/test_432_A create mode 100644 geom_bottleneck/tests/data/test_432_B create mode 100644 geom_bottleneck/tests/data/test_433_A create mode 100644 geom_bottleneck/tests/data/test_433_B create mode 100644 geom_bottleneck/tests/data/test_434_A create mode 100644 geom_bottleneck/tests/data/test_434_B create mode 100644 geom_bottleneck/tests/data/test_435_A create mode 100644 geom_bottleneck/tests/data/test_435_B create mode 100644 geom_bottleneck/tests/data/test_436_A create mode 100644 geom_bottleneck/tests/data/test_436_B create mode 100644 geom_bottleneck/tests/data/test_437_A create mode 100644 geom_bottleneck/tests/data/test_437_B create mode 100644 geom_bottleneck/tests/data/test_438_A create mode 100644 geom_bottleneck/tests/data/test_438_B create mode 100644 geom_bottleneck/tests/data/test_439_A create mode 100644 geom_bottleneck/tests/data/test_439_B create mode 100644 geom_bottleneck/tests/data/test_440_A create mode 100644 geom_bottleneck/tests/data/test_440_B create mode 100644 geom_bottleneck/tests/data/test_441_A create mode 100644 geom_bottleneck/tests/data/test_441_B create mode 100644 geom_bottleneck/tests/data/test_442_A create mode 100644 geom_bottleneck/tests/data/test_442_B create mode 100644 geom_bottleneck/tests/data/test_443_A create mode 100644 geom_bottleneck/tests/data/test_443_B create mode 100644 geom_bottleneck/tests/data/test_444_A create mode 100644 geom_bottleneck/tests/data/test_444_B create mode 100644 geom_bottleneck/tests/data/test_445_A create mode 100644 geom_bottleneck/tests/data/test_445_B create mode 100644 geom_bottleneck/tests/data/test_446_A create mode 100644 geom_bottleneck/tests/data/test_446_B create mode 100644 geom_bottleneck/tests/data/test_447_A create mode 100644 geom_bottleneck/tests/data/test_447_B create mode 100644 geom_bottleneck/tests/data/test_448_A create mode 100644 geom_bottleneck/tests/data/test_448_B create mode 100644 geom_bottleneck/tests/data/test_449_A create mode 100644 geom_bottleneck/tests/data/test_449_B create mode 100644 geom_bottleneck/tests/data/test_450_A create mode 100644 geom_bottleneck/tests/data/test_450_B create mode 100644 geom_bottleneck/tests/data/test_451_A create mode 100644 geom_bottleneck/tests/data/test_451_B create mode 100644 geom_bottleneck/tests/data/test_452_A create mode 100644 geom_bottleneck/tests/data/test_452_B create mode 100644 geom_bottleneck/tests/data/test_453_A create mode 100644 geom_bottleneck/tests/data/test_453_B create mode 100644 geom_bottleneck/tests/data/test_454_A create mode 100644 geom_bottleneck/tests/data/test_454_B create mode 100644 geom_bottleneck/tests/data/test_455_A create mode 100644 geom_bottleneck/tests/data/test_455_B create mode 100644 geom_bottleneck/tests/data/test_456_A create mode 100644 geom_bottleneck/tests/data/test_456_B create mode 100644 geom_bottleneck/tests/data/test_457_A create mode 100644 geom_bottleneck/tests/data/test_457_B create mode 100644 geom_bottleneck/tests/data/test_458_A create mode 100644 geom_bottleneck/tests/data/test_458_B create mode 100644 geom_bottleneck/tests/data/test_459_A create mode 100644 geom_bottleneck/tests/data/test_459_B create mode 100644 geom_bottleneck/tests/data/test_460_A create mode 100644 geom_bottleneck/tests/data/test_460_B create mode 100644 geom_bottleneck/tests/data/test_461_A create mode 100644 geom_bottleneck/tests/data/test_461_B create mode 100644 geom_bottleneck/tests/data/test_462_A create mode 100644 geom_bottleneck/tests/data/test_462_B create mode 100644 geom_bottleneck/tests/data/test_463_A create mode 100644 geom_bottleneck/tests/data/test_463_B create mode 100644 geom_bottleneck/tests/data/test_464_A create mode 100644 geom_bottleneck/tests/data/test_464_B create mode 100644 geom_bottleneck/tests/data/test_465_A create mode 100644 geom_bottleneck/tests/data/test_465_B create mode 100644 geom_bottleneck/tests/data/test_466_A create mode 100644 geom_bottleneck/tests/data/test_466_B create mode 100644 geom_bottleneck/tests/data/test_467_A create mode 100644 geom_bottleneck/tests/data/test_467_B create mode 100644 geom_bottleneck/tests/data/test_468_A create mode 100644 geom_bottleneck/tests/data/test_468_B create mode 100644 geom_bottleneck/tests/data/test_469_A create mode 100644 geom_bottleneck/tests/data/test_469_B create mode 100644 geom_bottleneck/tests/data/test_470_A create mode 100644 geom_bottleneck/tests/data/test_470_B create mode 100644 geom_bottleneck/tests/data/test_471_A create mode 100644 geom_bottleneck/tests/data/test_471_B create mode 100644 geom_bottleneck/tests/data/test_472_A create mode 100644 geom_bottleneck/tests/data/test_472_B create mode 100644 geom_bottleneck/tests/data/test_473_A create mode 100644 geom_bottleneck/tests/data/test_473_B create mode 100644 geom_bottleneck/tests/data/test_474_A create mode 100644 geom_bottleneck/tests/data/test_474_B create mode 100644 geom_bottleneck/tests/data/test_475_A create mode 100644 geom_bottleneck/tests/data/test_475_B create mode 100644 geom_bottleneck/tests/data/test_476_A create mode 100644 geom_bottleneck/tests/data/test_476_B create mode 100644 geom_bottleneck/tests/data/test_477_A create mode 100644 geom_bottleneck/tests/data/test_477_B create mode 100644 geom_bottleneck/tests/data/test_478_A create mode 100644 geom_bottleneck/tests/data/test_478_B create mode 100644 geom_bottleneck/tests/data/test_479_A create mode 100644 geom_bottleneck/tests/data/test_479_B create mode 100644 geom_bottleneck/tests/data/test_480_A create mode 100644 geom_bottleneck/tests/data/test_480_B create mode 100644 geom_bottleneck/tests/data/test_481_A create mode 100644 geom_bottleneck/tests/data/test_481_B create mode 100644 geom_bottleneck/tests/data/test_482_A create mode 100644 geom_bottleneck/tests/data/test_482_B create mode 100644 geom_bottleneck/tests/data/test_483_A create mode 100644 geom_bottleneck/tests/data/test_483_B create mode 100644 geom_bottleneck/tests/data/test_484_A create mode 100644 geom_bottleneck/tests/data/test_484_B create mode 100644 geom_bottleneck/tests/data/test_485_A create mode 100644 geom_bottleneck/tests/data/test_485_B create mode 100644 geom_bottleneck/tests/data/test_486_A create mode 100644 geom_bottleneck/tests/data/test_486_B create mode 100644 geom_bottleneck/tests/data/test_487_A create mode 100644 geom_bottleneck/tests/data/test_487_B create mode 100644 geom_bottleneck/tests/data/test_488_A create mode 100644 geom_bottleneck/tests/data/test_488_B create mode 100644 geom_bottleneck/tests/data/test_489_A create mode 100644 geom_bottleneck/tests/data/test_489_B create mode 100644 geom_bottleneck/tests/data/test_490_A create mode 100644 geom_bottleneck/tests/data/test_490_B create mode 100644 geom_bottleneck/tests/data/test_491_A create mode 100644 geom_bottleneck/tests/data/test_491_B create mode 100644 geom_bottleneck/tests/data/test_492_A create mode 100644 geom_bottleneck/tests/data/test_492_B create mode 100644 geom_bottleneck/tests/data/test_493_A create mode 100644 geom_bottleneck/tests/data/test_493_B create mode 100644 geom_bottleneck/tests/data/test_494_A create mode 100644 geom_bottleneck/tests/data/test_494_B create mode 100644 geom_bottleneck/tests/data/test_495_A create mode 100644 geom_bottleneck/tests/data/test_495_B create mode 100644 geom_bottleneck/tests/data/test_496_A create mode 100644 geom_bottleneck/tests/data/test_496_B create mode 100644 geom_bottleneck/tests/data/test_497_A create mode 100644 geom_bottleneck/tests/data/test_497_B create mode 100644 geom_bottleneck/tests/data/test_498_A create mode 100644 geom_bottleneck/tests/data/test_498_B create mode 100644 geom_bottleneck/tests/data/test_499_A create mode 100644 geom_bottleneck/tests/data/test_499_B create mode 100644 geom_bottleneck/tests/data/test_500_A create mode 100644 geom_bottleneck/tests/data/test_500_B create mode 100644 geom_bottleneck/tests/data/test_501_A create mode 100644 geom_bottleneck/tests/data/test_501_B create mode 100644 geom_bottleneck/tests/data/test_502_A create mode 100644 geom_bottleneck/tests/data/test_502_B create mode 100644 geom_bottleneck/tests/data/test_503_A create mode 100644 geom_bottleneck/tests/data/test_503_B create mode 100644 geom_bottleneck/tests/data/test_504_A create mode 100644 geom_bottleneck/tests/data/test_504_B create mode 100644 geom_bottleneck/tests/data/test_505_A create mode 100644 geom_bottleneck/tests/data/test_505_B create mode 100644 geom_bottleneck/tests/data/test_506_A create mode 100644 geom_bottleneck/tests/data/test_506_B create mode 100644 geom_bottleneck/tests/data/test_507_A create mode 100644 geom_bottleneck/tests/data/test_507_B create mode 100644 geom_bottleneck/tests/data/test_508_A create mode 100644 geom_bottleneck/tests/data/test_508_B create mode 100644 geom_bottleneck/tests/data/test_509_A create mode 100644 geom_bottleneck/tests/data/test_509_B create mode 100644 geom_bottleneck/tests/data/test_510_A create mode 100644 geom_bottleneck/tests/data/test_510_B create mode 100644 geom_bottleneck/tests/data/test_511_A create mode 100644 geom_bottleneck/tests/data/test_511_B create mode 100644 geom_bottleneck/tests/data/test_512_A create mode 100644 geom_bottleneck/tests/data/test_512_B create mode 100644 geom_bottleneck/tests/data/test_513_A create mode 100644 geom_bottleneck/tests/data/test_513_B create mode 100644 geom_bottleneck/tests/data/test_514_A create mode 100644 geom_bottleneck/tests/data/test_514_B create mode 100644 geom_bottleneck/tests/data/test_515_A create mode 100644 geom_bottleneck/tests/data/test_515_B create mode 100644 geom_bottleneck/tests/data/test_516_A create mode 100644 geom_bottleneck/tests/data/test_516_B create mode 100644 geom_bottleneck/tests/data/test_517_A create mode 100644 geom_bottleneck/tests/data/test_517_B create mode 100644 geom_bottleneck/tests/data/test_518_A create mode 100644 geom_bottleneck/tests/data/test_518_B create mode 100644 geom_bottleneck/tests/data/test_519_A create mode 100644 geom_bottleneck/tests/data/test_519_B create mode 100644 geom_bottleneck/tests/data/test_520_A create mode 100644 geom_bottleneck/tests/data/test_520_B create mode 100644 geom_bottleneck/tests/data/test_521_A create mode 100644 geom_bottleneck/tests/data/test_521_B create mode 100644 geom_bottleneck/tests/data/test_522_A create mode 100644 geom_bottleneck/tests/data/test_522_B create mode 100644 geom_bottleneck/tests/data/test_523_A create mode 100644 geom_bottleneck/tests/data/test_523_B create mode 100644 geom_bottleneck/tests/data/test_524_A create mode 100644 geom_bottleneck/tests/data/test_524_B create mode 100644 geom_bottleneck/tests/data/test_525_A create mode 100644 geom_bottleneck/tests/data/test_525_B create mode 100644 geom_bottleneck/tests/data/test_526_A create mode 100644 geom_bottleneck/tests/data/test_526_B create mode 100644 geom_bottleneck/tests/data/test_527_A create mode 100644 geom_bottleneck/tests/data/test_527_B create mode 100644 geom_bottleneck/tests/data/test_528_A create mode 100644 geom_bottleneck/tests/data/test_528_B create mode 100644 geom_bottleneck/tests/data/test_529_A create mode 100644 geom_bottleneck/tests/data/test_529_B create mode 100644 geom_bottleneck/tests/data/test_530_A create mode 100644 geom_bottleneck/tests/data/test_530_B create mode 100644 geom_bottleneck/tests/data/test_531_A create mode 100644 geom_bottleneck/tests/data/test_531_B create mode 100644 geom_bottleneck/tests/data/test_532_A create mode 100644 geom_bottleneck/tests/data/test_532_B create mode 100644 geom_bottleneck/tests/data/test_533_A create mode 100644 geom_bottleneck/tests/data/test_533_B create mode 100644 geom_bottleneck/tests/data/test_534_A create mode 100644 geom_bottleneck/tests/data/test_534_B create mode 100644 geom_bottleneck/tests/data/test_535_A create mode 100644 geom_bottleneck/tests/data/test_535_B create mode 100644 geom_bottleneck/tests/data/test_536_A create mode 100644 geom_bottleneck/tests/data/test_536_B create mode 100644 geom_bottleneck/tests/data/test_537_A create mode 100644 geom_bottleneck/tests/data/test_537_B create mode 100644 geom_bottleneck/tests/data/test_538_A create mode 100644 geom_bottleneck/tests/data/test_538_B create mode 100644 geom_bottleneck/tests/data/test_539_A create mode 100644 geom_bottleneck/tests/data/test_539_B create mode 100644 geom_bottleneck/tests/data/test_540_A create mode 100644 geom_bottleneck/tests/data/test_540_B create mode 100644 geom_bottleneck/tests/data/test_541_A create mode 100644 geom_bottleneck/tests/data/test_541_B create mode 100644 geom_bottleneck/tests/data/test_542_A create mode 100644 geom_bottleneck/tests/data/test_542_B create mode 100644 geom_bottleneck/tests/data/test_543_A create mode 100644 geom_bottleneck/tests/data/test_543_B create mode 100644 geom_bottleneck/tests/data/test_544_A create mode 100644 geom_bottleneck/tests/data/test_544_B create mode 100644 geom_bottleneck/tests/data/test_545_A create mode 100644 geom_bottleneck/tests/data/test_545_B create mode 100644 geom_bottleneck/tests/data/test_546_A create mode 100644 geom_bottleneck/tests/data/test_546_B create mode 100644 geom_bottleneck/tests/data/test_547_A create mode 100644 geom_bottleneck/tests/data/test_547_B create mode 100644 geom_bottleneck/tests/data/test_548_A create mode 100644 geom_bottleneck/tests/data/test_548_B create mode 100644 geom_bottleneck/tests/data/test_549_A create mode 100644 geom_bottleneck/tests/data/test_549_B create mode 100644 geom_bottleneck/tests/data/test_550_A create mode 100644 geom_bottleneck/tests/data/test_550_B create mode 100644 geom_bottleneck/tests/data/test_551_A create mode 100644 geom_bottleneck/tests/data/test_551_B create mode 100644 geom_bottleneck/tests/data/test_552_A create mode 100644 geom_bottleneck/tests/data/test_552_B create mode 100644 geom_bottleneck/tests/data/test_553_A create mode 100644 geom_bottleneck/tests/data/test_553_B create mode 100644 geom_bottleneck/tests/data/test_554_A create mode 100644 geom_bottleneck/tests/data/test_554_B create mode 100644 geom_bottleneck/tests/data/test_555_A create mode 100644 geom_bottleneck/tests/data/test_555_B create mode 100644 geom_bottleneck/tests/data/test_556_A create mode 100644 geom_bottleneck/tests/data/test_556_B create mode 100644 geom_bottleneck/tests/data/test_557_A create mode 100644 geom_bottleneck/tests/data/test_557_B create mode 100644 geom_bottleneck/tests/data/test_558_A create mode 100644 geom_bottleneck/tests/data/test_558_B create mode 100644 geom_bottleneck/tests/data/test_559_A create mode 100644 geom_bottleneck/tests/data/test_559_B create mode 100644 geom_bottleneck/tests/data/test_560_A create mode 100644 geom_bottleneck/tests/data/test_560_B create mode 100644 geom_bottleneck/tests/data/test_561_A create mode 100644 geom_bottleneck/tests/data/test_561_B create mode 100644 geom_bottleneck/tests/data/test_562_A create mode 100644 geom_bottleneck/tests/data/test_562_B create mode 100644 geom_bottleneck/tests/data/test_563_A create mode 100644 geom_bottleneck/tests/data/test_563_B create mode 100644 geom_bottleneck/tests/data/test_564_A create mode 100644 geom_bottleneck/tests/data/test_564_B create mode 100644 geom_bottleneck/tests/data/test_565_A create mode 100644 geom_bottleneck/tests/data/test_565_B create mode 100644 geom_bottleneck/tests/data/test_566_A create mode 100644 geom_bottleneck/tests/data/test_566_B create mode 100644 geom_bottleneck/tests/data/test_567_A create mode 100644 geom_bottleneck/tests/data/test_567_B create mode 100644 geom_bottleneck/tests/data/test_568_A create mode 100644 geom_bottleneck/tests/data/test_568_B create mode 100644 geom_bottleneck/tests/data/test_569_A create mode 100644 geom_bottleneck/tests/data/test_569_B create mode 100644 geom_bottleneck/tests/data/test_570_A create mode 100644 geom_bottleneck/tests/data/test_570_B create mode 100644 geom_bottleneck/tests/data/test_571_A create mode 100644 geom_bottleneck/tests/data/test_571_B create mode 100644 geom_bottleneck/tests/data/test_572_A create mode 100644 geom_bottleneck/tests/data/test_572_B create mode 100644 geom_bottleneck/tests/data/test_573_A create mode 100644 geom_bottleneck/tests/data/test_573_B create mode 100644 geom_bottleneck/tests/data/test_574_A create mode 100644 geom_bottleneck/tests/data/test_574_B create mode 100644 geom_bottleneck/tests/data/test_575_A create mode 100644 geom_bottleneck/tests/data/test_575_B create mode 100644 geom_bottleneck/tests/data/test_576_A create mode 100644 geom_bottleneck/tests/data/test_576_B create mode 100644 geom_bottleneck/tests/data/test_577_A create mode 100644 geom_bottleneck/tests/data/test_577_B create mode 100644 geom_bottleneck/tests/data/test_578_A create mode 100644 geom_bottleneck/tests/data/test_578_B create mode 100644 geom_bottleneck/tests/data/test_579_A create mode 100644 geom_bottleneck/tests/data/test_579_B create mode 100644 geom_bottleneck/tests/data/test_580_A create mode 100644 geom_bottleneck/tests/data/test_580_B create mode 100644 geom_bottleneck/tests/data/test_581_A create mode 100644 geom_bottleneck/tests/data/test_581_B create mode 100644 geom_bottleneck/tests/data/test_582_A create mode 100644 geom_bottleneck/tests/data/test_582_B create mode 100644 geom_bottleneck/tests/data/test_583_A create mode 100644 geom_bottleneck/tests/data/test_583_B create mode 100644 geom_bottleneck/tests/data/test_584_A create mode 100644 geom_bottleneck/tests/data/test_584_B create mode 100644 geom_bottleneck/tests/data/test_585_A create mode 100644 geom_bottleneck/tests/data/test_585_B create mode 100644 geom_bottleneck/tests/data/test_586_A create mode 100644 geom_bottleneck/tests/data/test_586_B create mode 100644 geom_bottleneck/tests/data/test_587_A create mode 100644 geom_bottleneck/tests/data/test_587_B create mode 100644 geom_bottleneck/tests/data/test_588_A create mode 100644 geom_bottleneck/tests/data/test_588_B create mode 100644 geom_bottleneck/tests/data/test_589_A create mode 100644 geom_bottleneck/tests/data/test_589_B create mode 100644 geom_bottleneck/tests/data/test_590_A create mode 100644 geom_bottleneck/tests/data/test_590_B create mode 100644 geom_bottleneck/tests/data/test_591_A create mode 100644 geom_bottleneck/tests/data/test_591_B create mode 100644 geom_bottleneck/tests/data/test_592_A create mode 100644 geom_bottleneck/tests/data/test_592_B create mode 100644 geom_bottleneck/tests/data/test_593_A create mode 100644 geom_bottleneck/tests/data/test_593_B create mode 100644 geom_bottleneck/tests/data/test_594_A create mode 100644 geom_bottleneck/tests/data/test_594_B create mode 100644 geom_bottleneck/tests/data/test_595_A create mode 100644 geom_bottleneck/tests/data/test_595_B create mode 100644 geom_bottleneck/tests/data/test_596_A create mode 100644 geom_bottleneck/tests/data/test_596_B create mode 100644 geom_bottleneck/tests/data/test_597_A create mode 100644 geom_bottleneck/tests/data/test_597_B create mode 100644 geom_bottleneck/tests/data/test_598_A create mode 100644 geom_bottleneck/tests/data/test_598_B create mode 100644 geom_bottleneck/tests/data/test_599_A create mode 100644 geom_bottleneck/tests/data/test_599_B create mode 100644 geom_bottleneck/tests/data/test_600_A create mode 100644 geom_bottleneck/tests/data/test_600_B create mode 100644 geom_bottleneck/tests/data/test_601_A create mode 100644 geom_bottleneck/tests/data/test_601_B create mode 100644 geom_bottleneck/tests/data/test_602_A create mode 100644 geom_bottleneck/tests/data/test_602_B create mode 100644 geom_bottleneck/tests/data/test_603_A create mode 100644 geom_bottleneck/tests/data/test_603_B create mode 100644 geom_bottleneck/tests/data/test_604_A create mode 100644 geom_bottleneck/tests/data/test_604_B create mode 100644 geom_bottleneck/tests/data/test_605_A create mode 100644 geom_bottleneck/tests/data/test_605_B create mode 100644 geom_bottleneck/tests/data/test_606_A create mode 100644 geom_bottleneck/tests/data/test_606_B create mode 100644 geom_bottleneck/tests/data/test_607_A create mode 100644 geom_bottleneck/tests/data/test_607_B create mode 100644 geom_bottleneck/tests/data/test_608_A create mode 100644 geom_bottleneck/tests/data/test_608_B create mode 100644 geom_bottleneck/tests/data/test_609_A create mode 100644 geom_bottleneck/tests/data/test_609_B create mode 100644 geom_bottleneck/tests/data/test_610_A create mode 100644 geom_bottleneck/tests/data/test_610_B create mode 100644 geom_bottleneck/tests/data/test_611_A create mode 100644 geom_bottleneck/tests/data/test_611_B create mode 100644 geom_bottleneck/tests/data/test_612_A create mode 100644 geom_bottleneck/tests/data/test_612_B create mode 100644 geom_bottleneck/tests/data/test_613_A create mode 100644 geom_bottleneck/tests/data/test_613_B create mode 100644 geom_bottleneck/tests/data/test_614_A create mode 100644 geom_bottleneck/tests/data/test_614_B create mode 100644 geom_bottleneck/tests/data/test_615_A create mode 100644 geom_bottleneck/tests/data/test_615_B create mode 100644 geom_bottleneck/tests/data/test_616_A create mode 100644 geom_bottleneck/tests/data/test_616_B create mode 100644 geom_bottleneck/tests/data/test_617_A create mode 100644 geom_bottleneck/tests/data/test_617_B create mode 100644 geom_bottleneck/tests/data/test_618_A create mode 100644 geom_bottleneck/tests/data/test_618_B create mode 100644 geom_bottleneck/tests/data/test_619_A create mode 100644 geom_bottleneck/tests/data/test_619_B create mode 100644 geom_bottleneck/tests/data/test_620_A create mode 100644 geom_bottleneck/tests/data/test_620_B create mode 100644 geom_bottleneck/tests/data/test_621_A create mode 100644 geom_bottleneck/tests/data/test_621_B create mode 100644 geom_bottleneck/tests/data/test_622_A create mode 100644 geom_bottleneck/tests/data/test_622_B create mode 100644 geom_bottleneck/tests/data/test_623_A create mode 100644 geom_bottleneck/tests/data/test_623_B create mode 100644 geom_bottleneck/tests/data/test_624_A create mode 100644 geom_bottleneck/tests/data/test_624_B create mode 100644 geom_bottleneck/tests/data/test_625_A create mode 100644 geom_bottleneck/tests/data/test_625_B create mode 100644 geom_bottleneck/tests/data/test_626_A create mode 100644 geom_bottleneck/tests/data/test_626_B create mode 100644 geom_bottleneck/tests/data/test_627_A create mode 100644 geom_bottleneck/tests/data/test_627_B create mode 100644 geom_bottleneck/tests/data/test_628_A create mode 100644 geom_bottleneck/tests/data/test_628_B create mode 100644 geom_bottleneck/tests/data/test_629_A create mode 100644 geom_bottleneck/tests/data/test_629_B create mode 100644 geom_bottleneck/tests/data/test_630_A create mode 100644 geom_bottleneck/tests/data/test_630_B create mode 100644 geom_bottleneck/tests/data/test_631_A create mode 100644 geom_bottleneck/tests/data/test_631_B create mode 100644 geom_bottleneck/tests/data/test_632_A create mode 100644 geom_bottleneck/tests/data/test_632_B create mode 100644 geom_bottleneck/tests/data/test_633_A create mode 100644 geom_bottleneck/tests/data/test_633_B create mode 100644 geom_bottleneck/tests/data/test_634_A create mode 100644 geom_bottleneck/tests/data/test_634_B create mode 100644 geom_bottleneck/tests/data/test_635_A create mode 100644 geom_bottleneck/tests/data/test_635_B create mode 100644 geom_bottleneck/tests/data/test_636_A create mode 100644 geom_bottleneck/tests/data/test_636_B create mode 100644 geom_bottleneck/tests/data/test_637_A create mode 100644 geom_bottleneck/tests/data/test_637_B create mode 100644 geom_bottleneck/tests/data/test_638_A create mode 100644 geom_bottleneck/tests/data/test_638_B create mode 100644 geom_bottleneck/tests/data/test_639_A create mode 100644 geom_bottleneck/tests/data/test_639_B create mode 100644 geom_bottleneck/tests/data/test_640_A create mode 100644 geom_bottleneck/tests/data/test_640_B create mode 100644 geom_bottleneck/tests/data/test_641_A create mode 100644 geom_bottleneck/tests/data/test_641_B create mode 100644 geom_bottleneck/tests/data/test_642_A create mode 100644 geom_bottleneck/tests/data/test_642_B create mode 100644 geom_bottleneck/tests/data/test_643_A create mode 100644 geom_bottleneck/tests/data/test_643_B create mode 100644 geom_bottleneck/tests/data/test_644_A create mode 100644 geom_bottleneck/tests/data/test_644_B create mode 100644 geom_bottleneck/tests/data/test_645_A create mode 100644 geom_bottleneck/tests/data/test_645_B create mode 100644 geom_bottleneck/tests/data/test_646_A create mode 100644 geom_bottleneck/tests/data/test_646_B create mode 100644 geom_bottleneck/tests/data/test_647_A create mode 100644 geom_bottleneck/tests/data/test_647_B create mode 100644 geom_bottleneck/tests/data/test_648_A create mode 100644 geom_bottleneck/tests/data/test_648_B create mode 100644 geom_bottleneck/tests/data/test_649_A create mode 100644 geom_bottleneck/tests/data/test_649_B create mode 100644 geom_bottleneck/tests/data/test_650_A create mode 100644 geom_bottleneck/tests/data/test_650_B create mode 100644 geom_bottleneck/tests/data/test_651_A create mode 100644 geom_bottleneck/tests/data/test_651_B create mode 100644 geom_bottleneck/tests/data/test_652_A create mode 100644 geom_bottleneck/tests/data/test_652_B create mode 100644 geom_bottleneck/tests/data/test_653_A create mode 100644 geom_bottleneck/tests/data/test_653_B create mode 100644 geom_bottleneck/tests/data/test_654_A create mode 100644 geom_bottleneck/tests/data/test_654_B create mode 100644 geom_bottleneck/tests/data/test_655_A create mode 100644 geom_bottleneck/tests/data/test_655_B create mode 100644 geom_bottleneck/tests/data/test_656_A create mode 100644 geom_bottleneck/tests/data/test_656_B create mode 100644 geom_bottleneck/tests/data/test_657_A create mode 100644 geom_bottleneck/tests/data/test_657_B create mode 100644 geom_bottleneck/tests/data/test_658_A create mode 100644 geom_bottleneck/tests/data/test_658_B create mode 100644 geom_bottleneck/tests/data/test_659_A create mode 100644 geom_bottleneck/tests/data/test_659_B create mode 100644 geom_bottleneck/tests/data/test_660_A create mode 100644 geom_bottleneck/tests/data/test_660_B create mode 100644 geom_bottleneck/tests/data/test_661_A create mode 100644 geom_bottleneck/tests/data/test_661_B create mode 100644 geom_bottleneck/tests/data/test_662_A create mode 100644 geom_bottleneck/tests/data/test_662_B create mode 100644 geom_bottleneck/tests/data/test_663_A create mode 100644 geom_bottleneck/tests/data/test_663_B create mode 100644 geom_bottleneck/tests/data/test_664_A create mode 100644 geom_bottleneck/tests/data/test_664_B create mode 100644 geom_bottleneck/tests/data/test_665_A create mode 100644 geom_bottleneck/tests/data/test_665_B create mode 100644 geom_bottleneck/tests/data/test_666_A create mode 100644 geom_bottleneck/tests/data/test_666_B create mode 100644 geom_bottleneck/tests/data/test_667_A create mode 100644 geom_bottleneck/tests/data/test_667_B create mode 100644 geom_bottleneck/tests/data/test_668_A create mode 100644 geom_bottleneck/tests/data/test_668_B create mode 100644 geom_bottleneck/tests/data/test_669_A create mode 100644 geom_bottleneck/tests/data/test_669_B create mode 100644 geom_bottleneck/tests/data/test_670_A create mode 100644 geom_bottleneck/tests/data/test_670_B create mode 100644 geom_bottleneck/tests/data/test_671_A create mode 100644 geom_bottleneck/tests/data/test_671_B create mode 100644 geom_bottleneck/tests/data/test_672_A create mode 100644 geom_bottleneck/tests/data/test_672_B create mode 100644 geom_bottleneck/tests/data/test_673_A create mode 100644 geom_bottleneck/tests/data/test_673_B create mode 100644 geom_bottleneck/tests/data/test_674_A create mode 100644 geom_bottleneck/tests/data/test_674_B create mode 100644 geom_bottleneck/tests/data/test_675_A create mode 100644 geom_bottleneck/tests/data/test_675_B create mode 100644 geom_bottleneck/tests/data/test_676_A create mode 100644 geom_bottleneck/tests/data/test_676_B create mode 100644 geom_bottleneck/tests/data/test_677_A create mode 100644 geom_bottleneck/tests/data/test_677_B create mode 100644 geom_bottleneck/tests/data/test_678_A create mode 100644 geom_bottleneck/tests/data/test_678_B create mode 100644 geom_bottleneck/tests/data/test_679_A create mode 100644 geom_bottleneck/tests/data/test_679_B create mode 100644 geom_bottleneck/tests/data/test_680_A create mode 100644 geom_bottleneck/tests/data/test_680_B create mode 100644 geom_bottleneck/tests/data/test_681_A create mode 100644 geom_bottleneck/tests/data/test_681_B create mode 100644 geom_bottleneck/tests/data/test_682_A create mode 100644 geom_bottleneck/tests/data/test_682_B create mode 100644 geom_bottleneck/tests/data/test_683_A create mode 100644 geom_bottleneck/tests/data/test_683_B create mode 100644 geom_bottleneck/tests/data/test_684_A create mode 100644 geom_bottleneck/tests/data/test_684_B create mode 100644 geom_bottleneck/tests/data/test_685_A create mode 100644 geom_bottleneck/tests/data/test_685_B create mode 100644 geom_bottleneck/tests/data/test_686_A create mode 100644 geom_bottleneck/tests/data/test_686_B create mode 100644 geom_bottleneck/tests/data/test_687_A create mode 100644 geom_bottleneck/tests/data/test_687_B create mode 100644 geom_bottleneck/tests/data/test_688_A create mode 100644 geom_bottleneck/tests/data/test_688_B create mode 100644 geom_bottleneck/tests/data/test_689_A create mode 100644 geom_bottleneck/tests/data/test_689_B create mode 100644 geom_bottleneck/tests/data/test_690_A create mode 100644 geom_bottleneck/tests/data/test_690_B create mode 100644 geom_bottleneck/tests/data/test_691_A create mode 100644 geom_bottleneck/tests/data/test_691_B create mode 100644 geom_bottleneck/tests/data/test_692_A create mode 100644 geom_bottleneck/tests/data/test_692_B create mode 100644 geom_bottleneck/tests/data/test_693_A create mode 100644 geom_bottleneck/tests/data/test_693_B create mode 100644 geom_bottleneck/tests/data/test_694_A create mode 100644 geom_bottleneck/tests/data/test_694_B create mode 100644 geom_bottleneck/tests/data/test_695_A create mode 100644 geom_bottleneck/tests/data/test_695_B create mode 100644 geom_bottleneck/tests/data/test_696_A create mode 100644 geom_bottleneck/tests/data/test_696_B create mode 100644 geom_bottleneck/tests/data/test_697_A create mode 100644 geom_bottleneck/tests/data/test_697_B create mode 100644 geom_bottleneck/tests/data/test_698_A create mode 100644 geom_bottleneck/tests/data/test_698_B create mode 100644 geom_bottleneck/tests/data/test_699_A create mode 100644 geom_bottleneck/tests/data/test_699_B create mode 100644 geom_bottleneck/tests/data/test_700_A create mode 100644 geom_bottleneck/tests/data/test_700_B create mode 100644 geom_bottleneck/tests/data/test_701_A create mode 100644 geom_bottleneck/tests/data/test_701_B create mode 100644 geom_bottleneck/tests/data/test_702_A create mode 100644 geom_bottleneck/tests/data/test_702_B create mode 100644 geom_bottleneck/tests/data/test_703_A create mode 100644 geom_bottleneck/tests/data/test_703_B create mode 100644 geom_bottleneck/tests/data/test_704_A create mode 100644 geom_bottleneck/tests/data/test_704_B create mode 100644 geom_bottleneck/tests/data/test_705_A create mode 100644 geom_bottleneck/tests/data/test_705_B create mode 100644 geom_bottleneck/tests/data/test_706_A create mode 100644 geom_bottleneck/tests/data/test_706_B create mode 100644 geom_bottleneck/tests/data/test_707_A create mode 100644 geom_bottleneck/tests/data/test_707_B create mode 100644 geom_bottleneck/tests/data/test_708_A create mode 100644 geom_bottleneck/tests/data/test_708_B create mode 100644 geom_bottleneck/tests/data/test_709_A create mode 100644 geom_bottleneck/tests/data/test_709_B create mode 100644 geom_bottleneck/tests/data/test_710_A create mode 100644 geom_bottleneck/tests/data/test_710_B create mode 100644 geom_bottleneck/tests/data/test_711_A create mode 100644 geom_bottleneck/tests/data/test_711_B create mode 100644 geom_bottleneck/tests/data/test_712_A create mode 100644 geom_bottleneck/tests/data/test_712_B create mode 100644 geom_bottleneck/tests/data/test_713_A create mode 100644 geom_bottleneck/tests/data/test_713_B create mode 100644 geom_bottleneck/tests/data/test_714_A create mode 100644 geom_bottleneck/tests/data/test_714_B create mode 100644 geom_bottleneck/tests/data/test_715_A create mode 100644 geom_bottleneck/tests/data/test_715_B create mode 100644 geom_bottleneck/tests/data/test_716_A create mode 100644 geom_bottleneck/tests/data/test_716_B create mode 100644 geom_bottleneck/tests/data/test_717_A create mode 100644 geom_bottleneck/tests/data/test_717_B create mode 100644 geom_bottleneck/tests/data/test_718_A create mode 100644 geom_bottleneck/tests/data/test_718_B create mode 100644 geom_bottleneck/tests/data/test_719_A create mode 100644 geom_bottleneck/tests/data/test_719_B create mode 100644 geom_bottleneck/tests/data/test_720_A create mode 100644 geom_bottleneck/tests/data/test_720_B create mode 100644 geom_bottleneck/tests/data/test_721_A create mode 100644 geom_bottleneck/tests/data/test_721_B create mode 100644 geom_bottleneck/tests/data/test_722_A create mode 100644 geom_bottleneck/tests/data/test_722_B create mode 100644 geom_bottleneck/tests/data/test_723_A create mode 100644 geom_bottleneck/tests/data/test_723_B create mode 100644 geom_bottleneck/tests/data/test_724_A create mode 100644 geom_bottleneck/tests/data/test_724_B create mode 100644 geom_bottleneck/tests/data/test_725_A create mode 100644 geom_bottleneck/tests/data/test_725_B create mode 100644 geom_bottleneck/tests/data/test_726_A create mode 100644 geom_bottleneck/tests/data/test_726_B create mode 100644 geom_bottleneck/tests/data/test_727_A create mode 100644 geom_bottleneck/tests/data/test_727_B create mode 100644 geom_bottleneck/tests/data/test_728_A create mode 100644 geom_bottleneck/tests/data/test_728_B create mode 100644 geom_bottleneck/tests/data/test_729_A create mode 100644 geom_bottleneck/tests/data/test_729_B create mode 100644 geom_bottleneck/tests/data/test_730_A create mode 100644 geom_bottleneck/tests/data/test_730_B create mode 100644 geom_bottleneck/tests/data/test_731_A create mode 100644 geom_bottleneck/tests/data/test_731_B create mode 100644 geom_bottleneck/tests/data/test_732_A create mode 100644 geom_bottleneck/tests/data/test_732_B create mode 100644 geom_bottleneck/tests/data/test_733_A create mode 100644 geom_bottleneck/tests/data/test_733_B create mode 100644 geom_bottleneck/tests/data/test_734_A create mode 100644 geom_bottleneck/tests/data/test_734_B create mode 100644 geom_bottleneck/tests/data/test_735_A create mode 100644 geom_bottleneck/tests/data/test_735_B create mode 100644 geom_bottleneck/tests/data/test_736_A create mode 100644 geom_bottleneck/tests/data/test_736_B create mode 100644 geom_bottleneck/tests/data/test_737_A create mode 100644 geom_bottleneck/tests/data/test_737_B create mode 100644 geom_bottleneck/tests/data/test_738_A create mode 100644 geom_bottleneck/tests/data/test_738_B create mode 100644 geom_bottleneck/tests/data/test_739_A create mode 100644 geom_bottleneck/tests/data/test_739_B create mode 100644 geom_bottleneck/tests/data/test_740_A create mode 100644 geom_bottleneck/tests/data/test_740_B create mode 100644 geom_bottleneck/tests/data/test_741_A create mode 100644 geom_bottleneck/tests/data/test_741_B create mode 100644 geom_bottleneck/tests/data/test_742_A create mode 100644 geom_bottleneck/tests/data/test_742_B create mode 100644 geom_bottleneck/tests/data/test_743_A create mode 100644 geom_bottleneck/tests/data/test_743_B create mode 100644 geom_bottleneck/tests/data/test_744_A create mode 100644 geom_bottleneck/tests/data/test_744_B create mode 100644 geom_bottleneck/tests/data/test_745_A create mode 100644 geom_bottleneck/tests/data/test_745_B create mode 100644 geom_bottleneck/tests/data/test_746_A create mode 100644 geom_bottleneck/tests/data/test_746_B create mode 100644 geom_bottleneck/tests/data/test_747_A create mode 100644 geom_bottleneck/tests/data/test_747_B create mode 100644 geom_bottleneck/tests/data/test_748_A create mode 100644 geom_bottleneck/tests/data/test_748_B create mode 100644 geom_bottleneck/tests/data/test_749_A create mode 100644 geom_bottleneck/tests/data/test_749_B create mode 100644 geom_bottleneck/tests/data/test_750_A create mode 100644 geom_bottleneck/tests/data/test_750_B create mode 100644 geom_bottleneck/tests/data/test_751_A create mode 100644 geom_bottleneck/tests/data/test_751_B create mode 100644 geom_bottleneck/tests/data/test_752_A create mode 100644 geom_bottleneck/tests/data/test_752_B create mode 100644 geom_bottleneck/tests/data/test_753_A create mode 100644 geom_bottleneck/tests/data/test_753_B create mode 100644 geom_bottleneck/tests/data/test_754_A create mode 100644 geom_bottleneck/tests/data/test_754_B create mode 100644 geom_bottleneck/tests/data/test_755_A create mode 100644 geom_bottleneck/tests/data/test_755_B create mode 100644 geom_bottleneck/tests/data/test_756_A create mode 100644 geom_bottleneck/tests/data/test_756_B create mode 100644 geom_bottleneck/tests/data/test_757_A create mode 100644 geom_bottleneck/tests/data/test_757_B create mode 100644 geom_bottleneck/tests/data/test_758_A create mode 100644 geom_bottleneck/tests/data/test_758_B create mode 100644 geom_bottleneck/tests/data/test_759_A create mode 100644 geom_bottleneck/tests/data/test_759_B create mode 100644 geom_bottleneck/tests/data/test_760_A create mode 100644 geom_bottleneck/tests/data/test_760_B create mode 100644 geom_bottleneck/tests/data/test_761_A create mode 100644 geom_bottleneck/tests/data/test_761_B create mode 100644 geom_bottleneck/tests/data/test_762_A create mode 100644 geom_bottleneck/tests/data/test_762_B create mode 100644 geom_bottleneck/tests/data/test_763_A create mode 100644 geom_bottleneck/tests/data/test_763_B create mode 100644 geom_bottleneck/tests/data/test_764_A create mode 100644 geom_bottleneck/tests/data/test_764_B create mode 100644 geom_bottleneck/tests/data/test_765_A create mode 100644 geom_bottleneck/tests/data/test_765_B create mode 100644 geom_bottleneck/tests/data/test_766_A create mode 100644 geom_bottleneck/tests/data/test_766_B create mode 100644 geom_bottleneck/tests/data/test_767_A create mode 100644 geom_bottleneck/tests/data/test_767_B create mode 100644 geom_bottleneck/tests/data/test_768_A create mode 100644 geom_bottleneck/tests/data/test_768_B create mode 100644 geom_bottleneck/tests/data/test_769_A create mode 100644 geom_bottleneck/tests/data/test_769_B create mode 100644 geom_bottleneck/tests/data/test_770_A create mode 100644 geom_bottleneck/tests/data/test_770_B create mode 100644 geom_bottleneck/tests/data/test_771_A create mode 100644 geom_bottleneck/tests/data/test_771_B create mode 100644 geom_bottleneck/tests/data/test_772_A create mode 100644 geom_bottleneck/tests/data/test_772_B create mode 100644 geom_bottleneck/tests/data/test_773_A create mode 100644 geom_bottleneck/tests/data/test_773_B create mode 100644 geom_bottleneck/tests/data/test_774_A create mode 100644 geom_bottleneck/tests/data/test_774_B create mode 100644 geom_bottleneck/tests/data/test_775_A create mode 100644 geom_bottleneck/tests/data/test_775_B create mode 100644 geom_bottleneck/tests/data/test_776_A create mode 100644 geom_bottleneck/tests/data/test_776_B create mode 100644 geom_bottleneck/tests/data/test_777_A create mode 100644 geom_bottleneck/tests/data/test_777_B create mode 100644 geom_bottleneck/tests/data/test_778_A create mode 100644 geom_bottleneck/tests/data/test_778_B create mode 100644 geom_bottleneck/tests/data/test_779_A create mode 100644 geom_bottleneck/tests/data/test_779_B create mode 100644 geom_bottleneck/tests/data/test_780_A create mode 100644 geom_bottleneck/tests/data/test_780_B create mode 100644 geom_bottleneck/tests/data/test_781_A create mode 100644 geom_bottleneck/tests/data/test_781_B create mode 100644 geom_bottleneck/tests/data/test_782_A create mode 100644 geom_bottleneck/tests/data/test_782_B create mode 100644 geom_bottleneck/tests/data/test_783_A create mode 100644 geom_bottleneck/tests/data/test_783_B create mode 100644 geom_bottleneck/tests/data/test_784_A create mode 100644 geom_bottleneck/tests/data/test_784_B create mode 100644 geom_bottleneck/tests/data/test_785_A create mode 100644 geom_bottleneck/tests/data/test_785_B create mode 100644 geom_bottleneck/tests/data/test_786_A create mode 100644 geom_bottleneck/tests/data/test_786_B create mode 100644 geom_bottleneck/tests/data/test_787_A create mode 100644 geom_bottleneck/tests/data/test_787_B create mode 100644 geom_bottleneck/tests/data/test_788_A create mode 100644 geom_bottleneck/tests/data/test_788_B create mode 100644 geom_bottleneck/tests/data/test_789_A create mode 100644 geom_bottleneck/tests/data/test_789_B create mode 100644 geom_bottleneck/tests/data/test_790_A create mode 100644 geom_bottleneck/tests/data/test_790_B create mode 100644 geom_bottleneck/tests/data/test_791_A create mode 100644 geom_bottleneck/tests/data/test_791_B create mode 100644 geom_bottleneck/tests/data/test_792_A create mode 100644 geom_bottleneck/tests/data/test_792_B create mode 100644 geom_bottleneck/tests/data/test_793_A create mode 100644 geom_bottleneck/tests/data/test_793_B create mode 100644 geom_bottleneck/tests/data/test_794_A create mode 100644 geom_bottleneck/tests/data/test_794_B create mode 100644 geom_bottleneck/tests/data/test_795_A create mode 100644 geom_bottleneck/tests/data/test_795_B create mode 100644 geom_bottleneck/tests/data/test_796_A create mode 100644 geom_bottleneck/tests/data/test_796_B create mode 100644 geom_bottleneck/tests/data/test_797_A create mode 100644 geom_bottleneck/tests/data/test_797_B create mode 100644 geom_bottleneck/tests/data/test_798_A create mode 100644 geom_bottleneck/tests/data/test_798_B create mode 100644 geom_bottleneck/tests/data/test_799_A create mode 100644 geom_bottleneck/tests/data/test_799_B create mode 100644 geom_bottleneck/tests/data/test_800_A create mode 100644 geom_bottleneck/tests/data/test_800_B create mode 100644 geom_bottleneck/tests/data/test_801_A create mode 100644 geom_bottleneck/tests/data/test_801_B create mode 100644 geom_bottleneck/tests/data/test_802_A create mode 100644 geom_bottleneck/tests/data/test_802_B create mode 100644 geom_bottleneck/tests/data/test_803_A create mode 100644 geom_bottleneck/tests/data/test_803_B create mode 100644 geom_bottleneck/tests/data/test_804_A create mode 100644 geom_bottleneck/tests/data/test_804_B create mode 100644 geom_bottleneck/tests/data/test_805_A create mode 100644 geom_bottleneck/tests/data/test_805_B create mode 100644 geom_bottleneck/tests/data/test_806_A create mode 100644 geom_bottleneck/tests/data/test_806_B create mode 100644 geom_bottleneck/tests/data/test_807_A create mode 100644 geom_bottleneck/tests/data/test_807_B create mode 100644 geom_bottleneck/tests/data/test_808_A create mode 100644 geom_bottleneck/tests/data/test_808_B create mode 100644 geom_bottleneck/tests/data/test_809_A create mode 100644 geom_bottleneck/tests/data/test_809_B create mode 100644 geom_bottleneck/tests/data/test_810_A create mode 100644 geom_bottleneck/tests/data/test_810_B create mode 100644 geom_bottleneck/tests/data/test_811_A create mode 100644 geom_bottleneck/tests/data/test_811_B create mode 100644 geom_bottleneck/tests/data/test_812_A create mode 100644 geom_bottleneck/tests/data/test_812_B create mode 100644 geom_bottleneck/tests/data/test_813_A create mode 100644 geom_bottleneck/tests/data/test_813_B create mode 100644 geom_bottleneck/tests/data/test_814_A create mode 100644 geom_bottleneck/tests/data/test_814_B create mode 100644 geom_bottleneck/tests/data/test_815_A create mode 100644 geom_bottleneck/tests/data/test_815_B create mode 100644 geom_bottleneck/tests/data/test_816_A create mode 100644 geom_bottleneck/tests/data/test_816_B create mode 100644 geom_bottleneck/tests/data/test_817_A create mode 100644 geom_bottleneck/tests/data/test_817_B create mode 100644 geom_bottleneck/tests/data/test_818_A create mode 100644 geom_bottleneck/tests/data/test_818_B create mode 100644 geom_bottleneck/tests/data/test_819_A create mode 100644 geom_bottleneck/tests/data/test_819_B create mode 100644 geom_bottleneck/tests/data/test_820_A create mode 100644 geom_bottleneck/tests/data/test_820_B create mode 100644 geom_bottleneck/tests/data/test_821_A create mode 100644 geom_bottleneck/tests/data/test_821_B create mode 100644 geom_bottleneck/tests/data/test_822_A create mode 100644 geom_bottleneck/tests/data/test_822_B create mode 100644 geom_bottleneck/tests/data/test_823_A create mode 100644 geom_bottleneck/tests/data/test_823_B create mode 100644 geom_bottleneck/tests/data/test_824_A create mode 100644 geom_bottleneck/tests/data/test_824_B create mode 100644 geom_bottleneck/tests/data/test_825_A create mode 100644 geom_bottleneck/tests/data/test_825_B create mode 100644 geom_bottleneck/tests/data/test_826_A create mode 100644 geom_bottleneck/tests/data/test_826_B create mode 100644 geom_bottleneck/tests/data/test_827_A create mode 100644 geom_bottleneck/tests/data/test_827_B create mode 100644 geom_bottleneck/tests/data/test_828_A create mode 100644 geom_bottleneck/tests/data/test_828_B create mode 100644 geom_bottleneck/tests/data/test_829_A create mode 100644 geom_bottleneck/tests/data/test_829_B create mode 100644 geom_bottleneck/tests/data/test_830_A create mode 100644 geom_bottleneck/tests/data/test_830_B create mode 100644 geom_bottleneck/tests/data/test_831_A create mode 100644 geom_bottleneck/tests/data/test_831_B create mode 100644 geom_bottleneck/tests/data/test_832_A create mode 100644 geom_bottleneck/tests/data/test_832_B create mode 100644 geom_bottleneck/tests/data/test_833_A create mode 100644 geom_bottleneck/tests/data/test_833_B create mode 100644 geom_bottleneck/tests/data/test_834_A create mode 100644 geom_bottleneck/tests/data/test_834_B create mode 100644 geom_bottleneck/tests/data/test_835_A create mode 100644 geom_bottleneck/tests/data/test_835_B create mode 100644 geom_bottleneck/tests/data/test_836_A create mode 100644 geom_bottleneck/tests/data/test_836_B create mode 100644 geom_bottleneck/tests/data/test_837_A create mode 100644 geom_bottleneck/tests/data/test_837_B create mode 100644 geom_bottleneck/tests/data/test_838_A create mode 100644 geom_bottleneck/tests/data/test_838_B create mode 100644 geom_bottleneck/tests/data/test_839_A create mode 100644 geom_bottleneck/tests/data/test_839_B create mode 100644 geom_bottleneck/tests/data/test_840_A create mode 100644 geom_bottleneck/tests/data/test_840_B create mode 100644 geom_bottleneck/tests/data/test_841_A create mode 100644 geom_bottleneck/tests/data/test_841_B create mode 100644 geom_bottleneck/tests/data/test_842_A create mode 100644 geom_bottleneck/tests/data/test_842_B create mode 100644 geom_bottleneck/tests/data/test_843_A create mode 100644 geom_bottleneck/tests/data/test_843_B create mode 100644 geom_bottleneck/tests/data/test_844_A create mode 100644 geom_bottleneck/tests/data/test_844_B create mode 100644 geom_bottleneck/tests/data/test_845_A create mode 100644 geom_bottleneck/tests/data/test_845_B create mode 100644 geom_bottleneck/tests/data/test_846_A create mode 100644 geom_bottleneck/tests/data/test_846_B create mode 100644 geom_bottleneck/tests/data/test_847_A create mode 100644 geom_bottleneck/tests/data/test_847_B create mode 100644 geom_bottleneck/tests/data/test_848_A create mode 100644 geom_bottleneck/tests/data/test_848_B create mode 100644 geom_bottleneck/tests/data/test_849_A create mode 100644 geom_bottleneck/tests/data/test_849_B create mode 100644 geom_bottleneck/tests/data/test_850_A create mode 100644 geom_bottleneck/tests/data/test_850_B create mode 100644 geom_bottleneck/tests/data/test_851_A create mode 100644 geom_bottleneck/tests/data/test_851_B create mode 100644 geom_bottleneck/tests/data/test_852_A create mode 100644 geom_bottleneck/tests/data/test_852_B create mode 100644 geom_bottleneck/tests/data/test_853_A create mode 100644 geom_bottleneck/tests/data/test_853_B create mode 100644 geom_bottleneck/tests/data/test_854_A create mode 100644 geom_bottleneck/tests/data/test_854_B create mode 100644 geom_bottleneck/tests/data/test_855_A create mode 100644 geom_bottleneck/tests/data/test_855_B create mode 100644 geom_bottleneck/tests/data/test_856_A create mode 100644 geom_bottleneck/tests/data/test_856_B create mode 100644 geom_bottleneck/tests/data/test_857_A create mode 100644 geom_bottleneck/tests/data/test_857_B create mode 100644 geom_bottleneck/tests/data/test_858_A create mode 100644 geom_bottleneck/tests/data/test_858_B create mode 100644 geom_bottleneck/tests/data/test_859_A create mode 100644 geom_bottleneck/tests/data/test_859_B create mode 100644 geom_bottleneck/tests/data/test_860_A create mode 100644 geom_bottleneck/tests/data/test_860_B create mode 100644 geom_bottleneck/tests/data/test_861_A create mode 100644 geom_bottleneck/tests/data/test_861_B create mode 100644 geom_bottleneck/tests/data/test_862_A create mode 100644 geom_bottleneck/tests/data/test_862_B create mode 100644 geom_bottleneck/tests/data/test_863_A create mode 100644 geom_bottleneck/tests/data/test_863_B create mode 100644 geom_bottleneck/tests/data/test_864_A create mode 100644 geom_bottleneck/tests/data/test_864_B create mode 100644 geom_bottleneck/tests/data/test_865_A create mode 100644 geom_bottleneck/tests/data/test_865_B create mode 100644 geom_bottleneck/tests/data/test_866_A create mode 100644 geom_bottleneck/tests/data/test_866_B create mode 100644 geom_bottleneck/tests/data/test_867_A create mode 100644 geom_bottleneck/tests/data/test_867_B create mode 100644 geom_bottleneck/tests/data/test_868_A create mode 100644 geom_bottleneck/tests/data/test_868_B create mode 100644 geom_bottleneck/tests/data/test_869_A create mode 100644 geom_bottleneck/tests/data/test_869_B create mode 100644 geom_bottleneck/tests/data/test_870_A create mode 100644 geom_bottleneck/tests/data/test_870_B create mode 100644 geom_bottleneck/tests/data/test_871_A create mode 100644 geom_bottleneck/tests/data/test_871_B create mode 100644 geom_bottleneck/tests/data/test_872_A create mode 100644 geom_bottleneck/tests/data/test_872_B create mode 100644 geom_bottleneck/tests/data/test_873_A create mode 100644 geom_bottleneck/tests/data/test_873_B create mode 100644 geom_bottleneck/tests/data/test_874_A create mode 100644 geom_bottleneck/tests/data/test_874_B create mode 100644 geom_bottleneck/tests/data/test_875_A create mode 100644 geom_bottleneck/tests/data/test_875_B create mode 100644 geom_bottleneck/tests/data/test_876_A create mode 100644 geom_bottleneck/tests/data/test_876_B create mode 100644 geom_bottleneck/tests/data/test_877_A create mode 100644 geom_bottleneck/tests/data/test_877_B create mode 100644 geom_bottleneck/tests/data/test_878_A create mode 100644 geom_bottleneck/tests/data/test_878_B create mode 100644 geom_bottleneck/tests/data/test_879_A create mode 100644 geom_bottleneck/tests/data/test_879_B create mode 100644 geom_bottleneck/tests/data/test_list.txt create mode 100644 geom_bottleneck/tests/data/test_list.txt.bak create mode 100644 geom_bottleneck/tests/data/ws_tests/test_100_A create mode 100644 geom_bottleneck/tests/data/ws_tests/test_100_A.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_100_B create mode 100644 geom_bottleneck/tests/data/ws_tests/test_100_B.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_200_A create mode 100644 geom_bottleneck/tests/data/ws_tests/test_200_B create mode 100644 geom_bottleneck/tests/data/ws_tests/test_5000_A create mode 100644 geom_bottleneck/tests/data/ws_tests/test_5000_B create mode 100644 geom_bottleneck/tests/data/ws_tests/test_5_A create mode 100644 geom_bottleneck/tests/data/ws_tests/test_5_A.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_5_B create mode 100644 geom_bottleneck/tests/data/ws_tests/test_5_B.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag1_A create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag1_A.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag1_B create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag1_B.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag2_A create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag2_A.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag2_B create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag2_B.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag3_A create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag3_A.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag3_B create mode 100644 geom_bottleneck/tests/data/ws_tests/test_diag3_B.pd.dipha create mode 100644 geom_bottleneck/tests/data/ws_tests/test_list.txt diff --git a/geom_bottleneck/example/bottleneck_dist.cpp b/geom_bottleneck/example/bottleneck_dist.cpp index 91c4190..8966789 100644 --- a/geom_bottleneck/example/bottleneck_dist.cpp +++ b/geom_bottleneck/example/bottleneck_dist.cpp @@ -57,6 +57,7 @@ int main(int argc, char* argv[]) } double res; + hera::bt::MatchingEdge e; if (argc >= 4) { // the third parameter is epsilon, // return approximate distance (faster) @@ -65,7 +66,7 @@ int main(int argc, char* argv[]) if (useSamplingHeur && diagramA.size() > heurThreshold && diagramB.size() > heurThreshold) { res = hera::bottleneckDistApproxHeur(diagramA, diagramB, delta); } else { - res = hera::bottleneckDistApprox(diagramA, diagramB, delta); + res = hera::bottleneckDistApprox(diagramA, diagramB, delta, e, true); } } else if (delta == 0.0) { res = hera::bottleneckDistExact(diagramA, diagramB, decPrecision); @@ -75,10 +76,12 @@ int main(int argc, char* argv[]) } } else { // only filenames have been supplied, return exact distance - res = hera::bottleneckDistExact(diagramA, diagramB, decPrecision); + res = hera::bottleneckDistExact(diagramA, diagramB, decPrecision, e, true); + } std::cout << std::setprecision(15) << res << std::endl; - + //std::cout << "Longest edge " << e.first.get_user_id() << " <-> " << e.second.get_user_id() << std::endl; + //std::cout << "Longest edge " << e.first << " <-> " << e.second << std::endl; // Alternative could be to construct DiagramPointSet // using the constructor with iterators. // May be useful if the same diagram is used multiple times diff --git a/geom_bottleneck/include/basic_defs_bt.h b/geom_bottleneck/include/basic_defs_bt.h index 954696e..a26d9a5 100644 --- a/geom_bottleneck/include/basic_defs_bt.h +++ b/geom_bottleneck/include/basic_defs_bt.h @@ -117,6 +117,7 @@ namespace hera { public: Type type; IdType id; + IdType user_id; // operators, constructors bool operator==(const DiagramPoint& other) const @@ -138,15 +139,17 @@ namespace hera { x(0.0), y(0.0), type(DiagramPoint::DIAG), - id(MinValidId - 1) + id(MinValidId - 1), + user_id(-1) { } - DiagramPoint(Real _x, Real _y, Type _type, IdType _id) : + DiagramPoint(Real _x, Real _y, Type _type, IdType _id, IdType _user_id) : x(_x), y(_y), type(_type), - id(_id) + id(_id), + user_id(_user_id) { if (_y == _x and _type != DIAG) { throw std::runtime_error("Point on the main diagonal must have DIAG type"); @@ -179,6 +182,28 @@ namespace hera { return y; } + IdType inline get_user_id() const + { + if (isNormal()) + return user_id; + else + return -1; + } + + Real inline get_persistence(const Real internal_p = get_infinity()) const + { + if (isDiagonal()) + return 0.0; + Real pers = (y - x) / 2; + if (internal_p == get_infinity()) { + return pers; + } else if (internal_p == 1.0) { + return 2 * pers; + } else { + return std::pow(static_cast(2), static_cast(1) / internal_p); + } + } + #ifndef FOR_R_TDA template @@ -191,9 +216,7 @@ namespace hera { } return output; } - #endif - }; template @@ -201,7 +224,7 @@ namespace hera { // compute l-inf distance between two diagram points template - Real distLInf(const DiagramPoint& a, const DiagramPoint& b) + inline Real distLInf(const DiagramPoint& a, const DiagramPoint& b) { if (a.isDiagonal() and b.isDiagonal()) { // distance between points on the diagonal is 0 @@ -211,9 +234,29 @@ namespace hera { return std::max(fabs(a.getRealX() - b.getRealX()), fabs(a.getRealY() - b.getRealY())); } + // this function works with points at infinity as well + // not needed in actual computation, since these points are processed + // separately, but is useful in tests + template + inline Real dist_l_inf_slow(const DiagramPoint& a, const DiagramPoint& b) + { + if (a.isDiagonal() and b.isDiagonal()) { + // distance between points on the diagonal is 0 + return 0.0; + } + // otherwise distance is a usual l-inf distance + Real dx = (a.getRealX() == b.getRealX()) ? 0.0 : fabs(a.getRealX() - b.getRealX()); + Real dy = (a.getRealY() == b.getRealY()) ? 0.0 : fabs(a.getRealY() - b.getRealY()); + Real result = std::max(dx, dy); + if (std::isnan(result)) + result = std::numeric_limits::infinity(); + return result; + } + + template - Real get_infinity() + inline Real get_infinity() { return Real(-1.0); } @@ -384,8 +427,9 @@ namespace hera { isLinked = false; clear(); IdType uniqueId = MinValidId + 1; + IdType user_id = 0; for (auto iter = begin_iter; iter != end_iter; ++iter) { - insert(DgmPoint(iter->first, iter->second, DgmPoint::NORMAL, uniqueId++)); + insert(DgmPoint(iter->first, iter->second, DgmPoint::NORMAL, uniqueId++, user_id++)); } } @@ -396,10 +440,11 @@ namespace hera { isLinked = false; clear(); IdType uniqueId = MinValidId + 1; + IdType user_id = 0; for (const auto& pt : dgm_cont) { Real x = Traits::get_x(pt); Real y = Traits::get_y(pt); - insert(DgmPoint(x, y, DgmPoint::NORMAL, uniqueId++)); + insert(DgmPoint(x, y, DgmPoint::NORMAL, uniqueId++, user_id++)); } } @@ -469,9 +514,9 @@ namespace hera { for (auto& pA : A) { if (pA.isNormal() and not pA.isInfinity()) { // add pA's projection to B - DgmPoint dpA { pA.getRealX(), pA.getRealY(), DgmPoint::NORMAL, uniqueId++ }; + DgmPoint dpA { pA.getRealX(), pA.getRealY(), DgmPoint::NORMAL, uniqueId++, pA.get_user_id() }; DgmPoint dpB { (pA.getRealX() + pA.getRealY()) / 2, (pA.getRealX() + pA.getRealY()) / 2, - DgmPoint::DIAG, uniqueId++ }; + DgmPoint::DIAG, uniqueId++, -1 }; newA.insert(dpA); newB.insert(dpB); } @@ -480,9 +525,9 @@ namespace hera { for (auto& pB : B) { if (pB.isNormal() and not pB.isInfinity()) { // add pB's projection to A - DgmPoint dpB { pB.getRealX(), pB.getRealY(), DgmPoint::NORMAL, uniqueId++ }; + DgmPoint dpB { pB.getRealX(), pB.getRealY(), DgmPoint::NORMAL, uniqueId++, pB.get_user_id() }; DgmPoint dpA { (pB.getRealX() + pB.getRealY()) / 2, (pB.getRealX() + pB.getRealY()) / 2, - DgmPoint::DIAG, uniqueId++ }; + DgmPoint::DIAG, uniqueId++, -1 }; newB.insert(dpB); newA.insert(dpA); } diff --git a/geom_bottleneck/include/bottleneck_detail.hpp b/geom_bottleneck/include/bottleneck_detail.hpp index ad6c882..8ec9c68 100644 --- a/geom_bottleneck/include/bottleneck_detail.hpp +++ b/geom_bottleneck/include/bottleneck_detail.hpp @@ -40,6 +40,7 @@ derivative works thereof, in binary and source code form. #include #include #include +#include #include "bottleneck_detail.h" @@ -106,31 +107,35 @@ namespace hera { distMax = std::max(distMax, infinityCost); } - template - inline Real getOneDimensionalCost(std::vector& set_A, std::vector& set_B) - { - if (set_A.size() != set_B.size()) { - return std::numeric_limits::infinity(); - } - - if (set_A.empty()) { - return Real(0.0); - } - - std::sort(set_A.begin(), set_A.end()); - std::sort(set_B.begin(), set_B.end()); - - Real result = 0.0; - for (size_t i = 0; i < set_A.size(); ++i) { - result = std::max(result, (std::fabs(set_A[i] - set_B[i]))); - } - - return result; - } + // template + // inline Real getOneDimensionalCost(std::vector& set_A, std::vector& set_B) + // { + // if (set_A.size() != set_B.size()) { + // return std::numeric_limits::infinity(); + // } + // + // if (set_A.empty()) { + // return Real(0.0); + // } + // + // std::sort(set_A.begin(), set_A.end()); + // std::sort(set_B.begin(), set_B.end()); + // + // Real result = 0.0; + // for (size_t i = 0; i < set_A.size(); ++i) { + // result = std::max(result, (std::fabs(set_A[i] - set_B[i]))); + // } + // + // return result; + // } template - using CostEdgePair = std::pair>; + struct CostEdgePair + { + Real cost; + typename hera::bt::MatchingEdge edge; + }; template using CoordPointPair = std::pair>; @@ -148,27 +153,31 @@ namespace hera { }; template - inline typename hera::bt::CostEdgePair getOneDimensionalCost(typename hera::bt::CoordPointVector& set_A, typename hera::bt::CoordPointVector& set_B) + inline typename hera::bt::CostEdgePair + getOneDimensionalCost(typename hera::bt::CoordPointVector& set_A, + typename hera::bt::CoordPointVector& set_B) { using MatchingEdgeR = hera::bt::MatchingEdge; + using CostEdgePairR = CostEdgePair; + if (set_A.size() != set_B.size()) { - return std::make_pair(std::numeric_limits::infinity(), MatchingEdgeR()); + return CostEdgePairR { std::numeric_limits::infinity(), MatchingEdgeR() }; } if (set_A.empty()) { - return std::make_pair(Real(0.0), MatchingEdgeR()); + return CostEdgePairR { Real(0.0), MatchingEdgeR() }; } std::sort(set_A.begin(), set_A.end(), CoordPointPairComparator()); std::sort(set_B.begin(), set_B.end(), CoordPointPairComparator()); - CostEdgePair result(-1.0, MatchingEdgeR()); + CostEdgePairR result { -1.0, MatchingEdgeR() }; for (size_t i = 0; i < set_A.size(); ++i) { Real curr_cost = std::fabs(set_A[i].first - set_B[i].first); - if (curr_cost > result.first) { - result.first = curr_cost; - result.second = MatchingEdgeR(set_A[i].second, set_B[i].second); + if (curr_cost > result.cost) { + result.cost = curr_cost; + result.edge = MatchingEdgeR(set_A[i].second, set_B[i].second); } } return result; @@ -176,23 +185,26 @@ namespace hera { template - inline Real getInfinityCost(const DiagramPointSet & A, const DiagramPointSet & B, - bool compute_longest_edge = false) + inline CostEdgePair getInfinityCost(const DiagramPointSet & A, const DiagramPointSet & B, + bool compute_longest_edge = false) { - std::vector x_plus_A, x_minus_A, y_plus_A, y_minus_A; - std::vector x_plus_B, x_minus_B, y_plus_B, y_minus_B; + using CostEdgePairR = CostEdgePair; + using CoordPointVectorR = CoordPointVector; + + CoordPointVectorR x_plus_A, x_minus_A, y_plus_A, y_minus_A; + CoordPointVectorR x_plus_B, x_minus_B, y_plus_B, y_minus_B; for (auto iter_A = A.cbegin(); iter_A != A.cend(); ++iter_A) { Real x = iter_A->getRealX(); Real y = iter_A->getRealY(); if (x == std::numeric_limits::infinity()) { - y_plus_A.push_back(y); + y_plus_A.emplace_back(y, *iter_A); } else if (x == -std::numeric_limits::infinity()) { - y_minus_A.push_back(y); + y_minus_A.emplace_back(y, *iter_A); } else if (y == std::numeric_limits::infinity()) { - x_plus_A.push_back(x); + x_plus_A.emplace_back(x, *iter_A); } else if (y == -std::numeric_limits::infinity()) { - x_minus_A.push_back(x); + x_minus_A.emplace_back(x, *iter_A); } } @@ -200,45 +212,60 @@ namespace hera { Real x = iter_B->getRealX(); Real y = iter_B->getRealY(); if (x == std::numeric_limits::infinity()) { - y_plus_B.push_back(y); + y_plus_B.emplace_back(y, *iter_B); } else if (x == -std::numeric_limits::infinity()) { - y_minus_B.push_back(y); + y_minus_B.emplace_back(y, *iter_B); } else if (y == std::numeric_limits::infinity()) { - x_plus_B.push_back(x); + x_plus_B.emplace_back(x, *iter_B); } else if (y == -std::numeric_limits::infinity()) { - x_minus_B.push_back(x); + x_minus_B.emplace_back(x, *iter_B); } } - Real infinity_cost = getOneDimensionalCost(x_plus_A, x_plus_B); - infinity_cost = std::max(infinity_cost, getOneDimensionalCost(x_minus_A, x_minus_B)); - infinity_cost = std::max(infinity_cost, getOneDimensionalCost(y_plus_A, y_plus_B)); - infinity_cost = std::max(infinity_cost, getOneDimensionalCost(y_minus_A, y_minus_B)); + CostEdgePairR result = getOneDimensionalCost(x_plus_A, x_plus_B); - return infinity_cost; + CostEdgePairR next_cost_edge = getOneDimensionalCost(x_minus_A, x_minus_B); + if (next_cost_edge.cost > result.cost) { + result = next_cost_edge; + } + + next_cost_edge = getOneDimensionalCost(y_plus_A, y_plus_B); + if (next_cost_edge.cost > result.cost) { + result = next_cost_edge; + } + + next_cost_edge = getOneDimensionalCost(y_minus_A, y_minus_B); + if (next_cost_edge.cost > result.cost) { + result = next_cost_edge; + } + + return result; } -// return the interval (distMin, distMax) such that: -// a) actual bottleneck distance between A and B is contained in the interval -// b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon + // return the interval (distMin, distMax) such that: + // a) actual bottleneck distance between A and B is contained in the interval + // b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon template inline std::pair - bottleneckDistApproxInterval(DiagramPointSet & A, DiagramPointSet & B, const Real epsilon, - MatchingEdge & edge, bool compute_longest_edge) + bottleneckDistApproxInterval(DiagramPointSet& A, DiagramPointSet& B, const Real epsilon, + MatchingEdge& edge, bool compute_longest_edge) { + using MatchingEdgeR = MatchingEdge; + using CostEdgePairR = CostEdgePair; + + edge = MatchingEdgeR(); // empty diagrams are not considered as error if (A.empty() and B.empty()) { return std::make_pair(0.0, 0.0); } - if (compute_longest_edge) { - auto inf_cost_edge = getInfinityCost(A, B, true); - } else { - } + CostEdgePairR inf_cost_edge = getInfinityCost(A, B, true); - Real infinity_cost = getInfinityCost(A, B); + Real infinity_cost = inf_cost_edge.cost; if (infinity_cost == std::numeric_limits::infinity()) { return std::make_pair(infinity_cost, infinity_cost); + } else { + edge = inf_cost_edge.edge; } // link diagrams A and B by adding projections @@ -254,15 +281,20 @@ namespace hera { BoundMatchOracle oracle(A, B, epsThreshold, useRangeSearch); // check for distance = 0 if (oracle.isMatchLess(2 * epsThreshold)) { - result.first = std::max(result.first, infinity_cost); - result.second = std::max(result.first, infinity_cost); + if (infinity_cost > epsThreshold) { + result.first = infinity_cost; + result.second = infinity_cost; + edge = inf_cost_edge.edge; + } return result; } // get a 3-approximation of maximal distance between A and B // as a starting value for probe distance Real distProbe { getFurthestDistance3Approx>(A, B) }; binarySearch(epsilon, result, oracle, infinity_cost, false, distProbe); - if (compute_longest_edge) { + // to compute longest edge a perfect matching is needed + if (compute_longest_edge and result.first > infinity_cost) { + oracle.isMatchLess(result.second); edge = oracle.get_longest_edge(); } return result; @@ -318,9 +350,9 @@ namespace hera { } -// return the interval (distMin, distMax) such that: -// a) actual bottleneck distance between A and B is contained in the interval -// b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon + // return the interval (distMin, distMax) such that: + // a) actual bottleneck distance between A and B is contained in the interval + // b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon template std::pair bottleneckDistApproxIntervalWithInitial(DiagramPointSet & A, DiagramPointSet & B, @@ -378,10 +410,10 @@ namespace hera { return result; } -// return the interval (distMin, distMax) such that: -// a) actual bottleneck distance between A and B is contained in the interval -// b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon -// use heuristic: initial estimate on sampled diagrams + // return the interval (distMin, distMax) such that: + // a) actual bottleneck distance between A and B is contained in the interval + // b) if the interval is not (0,0), then (distMax - distMin) / distMin < epsilon + // use heuristic: initial estimate on sampled diagrams template std::pair bottleneckDistApproxIntervalHeur(DiagramPointSet & A, DiagramPointSet & B, const Real epsilon, @@ -410,13 +442,13 @@ namespace hera { } -// get approximate distance, -// see bottleneckDistApproxInterval + // get approximate distance, + // see bottleneckDistApproxInterval template Real bottleneckDistApprox(DiagramPointSet & A, DiagramPointSet & B, const Real epsilon, MatchingEdge & longest_edge, bool compute_longest_edge) { - auto interval = bottleneckDistApproxInterval(A, B, epsilon, longest_edge); + auto interval = bottleneckDistApproxInterval(A, B, epsilon, longest_edge, compute_longest_edge); return interval.second; } @@ -444,7 +476,7 @@ namespace hera { distEpsilon = diff; } } - distEpsilon /= 3.0; + distEpsilon = std::min(diffThreshold, distEpsilon / 3.0); BoundMatchOracle oracle(A, B, distEpsilon, useRangeSearch); // binary search @@ -462,16 +494,19 @@ namespace hera { } } idxMid = static_cast(floor(idxMin + idxMax) / 2.0); + Real result = pairwiseDist[idxMid]; if (compute_longest_edge) { + oracle.isMatchLess(result + distEpsilon / 2.0); longest_edge = oracle.get_longest_edge(); } - return pairwiseDist[idxMid]; + return result; } template - Real bottleneckDistExact(DiagramPointSet & A, DiagramPointSet & B, MatchingEdge & longest_edge, - bool compute_longest_edge) + Real + bottleneckDistExact(DiagramPointSet & A, DiagramPointSet & B, MatchingEdge & longest_edge, + bool compute_longest_edge) { return bottleneckDistExact(A, B, 14, longest_edge, compute_longest_edge); } @@ -483,7 +518,10 @@ namespace hera { using DgmPoint = DiagramPoint; constexpr Real epsilon = 0.001; - auto interval = bottleneckDistApproxInterval(A, B, epsilon, longest_edge); + auto interval = bottleneckDistApproxInterval(A, B, epsilon, longest_edge, true); + // if the longest edge is on infinity, the answer is already exact + // this will be detected here and all the code after if + // may assume that the longest edge is on finite points if (interval.first == interval.second) { return interval.first; } @@ -504,7 +542,7 @@ namespace hera { // in this vector we store the distances between the points // that are candidates to realize - std::vector pairwiseDist; + std::set pairwiseDist; { // vector to store centers of vertical stripes // two for each point in A and the id of the corresponding point @@ -540,7 +578,7 @@ namespace hera { // check if distance fits into the interval we've found Real pwDist = distLInf(iterA->second, ptB); if (pwDist >= minDist and pwDist <= maxDist) { - pairwiseDist.push_back(pwDist); + pairwiseDist.insert(pwDist); } } } @@ -577,15 +615,19 @@ namespace hera { } Real pwDist = distLInf(iterA->second, ptB); if (pwDist >= minDist and pwDist <= maxDist) { - pairwiseDist.push_back(pwDist); + pairwiseDist.insert(pwDist); } } } } - std::sort(pairwiseDist.begin(), pairwiseDist.end()); + std::vector pw_dists; + pw_dists.reserve(pairwiseDist.size()); + for(Real d : pairwiseDist) { + pw_dists.push_back(d); + } - return bottleneckDistExactFromSortedPwDist(A, B, pairwiseDist, decPrecision, longest_edge, + return bottleneckDistExactFromSortedPwDist(A, B, pw_dists, decPrecision, longest_edge, compute_longest_edge); } diff --git a/geom_bottleneck/include/bound_match.hpp b/geom_bottleneck/include/bound_match.hpp index bb7dead..b95628f 100644 --- a/geom_bottleneck/include/bound_match.hpp +++ b/geom_bottleneck/include/bound_match.hpp @@ -45,442 +45,467 @@ derivative works thereof, in binary and source code form. #endif #ifndef FOR_R_TDA + #include + #endif -namespace hera{ -namespace bt { +namespace hera { + namespace bt { #ifndef FOR_R_TDA -template -std::ostream& operator<<(std::ostream& output, const Matching& m) -{ - output << "Matching: " << m.AToB.size() << " pairs ("; - if (!m.isPerfect()) { - output << "not"; - } - output << " perfect)" << std::endl; - for(auto atob : m.AToB) { - output << atob.first << " <-> " << atob.second << " distance: " << distLInf(atob.first, atob.second) << std::endl; - } - return output; -} + + template + std::ostream& operator<<(std::ostream& output, const Matching & m) + { + output << "Matching: " << m.AToB.size() << " pairs ("; + if (!m.isPerfect()) { + output << "not"; + } + output << " perfect)" << std::endl; + for (auto atob : m.AToB) { + output << atob.first << " <-> " << atob.second << " distance: " << distLInf(atob.first, atob.second) + << std::endl; + } + return output; + } + #endif -template -void Matching::sanityCheck() const -{ + template + void Matching::sanityCheck() const + { #ifdef DEBUG_MATCHING - assert( AToB.size() == BToA.size() ); - for(auto aToBPair : AToB) { - auto bToAPair = BToA.find(aToBPair.second); - assert(bToAPair != BToA.end()); - assert( aToBPair.first == bToAPair->second); - } + assert( AToB.size() == BToA.size() ); + for(auto aToBPair : AToB) { + auto bToAPair = BToA.find(aToBPair.second); + assert(bToAPair != BToA.end()); + assert( aToBPair.first == bToAPair->second); + } #endif -} - -template -bool Matching::isPerfect() const -{ - return AToB.size() == A.size(); -} - -template -void Matching::matchVertices(const DgmPoint& pA, const DgmPoint& pB) -{ - assert(A.hasElement(pA)); - assert(B.hasElement(pB)); - AToB.erase(pA); - AToB.insert( {{ pA, pB }} ); - BToA.erase(pB); - BToA.insert( {{ pB, pA }} ); -} - -template -bool Matching::getMatchedVertex(const DgmPoint& p, DgmPoint& result) const -{ - sanityCheck(); - auto inA = AToB.find(p); - if (inA != AToB.end()) { - result = inA->second; - return true; - } else { - auto inB = BToA.find(p); - if (inB != BToA.end()) { - result = inB->second; - return true; } - } - return false; -} - - -template -void Matching::checkAugPath(const Path& augPath) const -{ - assert(augPath.size() % 2 == 0); - for(size_t idx = 0; idx < augPath.size(); ++idx) { - bool mustBeExposed { idx == 0 or idx == augPath.size() - 1 }; - if (isExposed(augPath[idx]) != mustBeExposed) { + + template + bool Matching::isPerfect() const + { + return AToB.size() == A.size(); + } + + template + void Matching::matchVertices(const DgmPoint& pA, const DgmPoint& pB) + { + assert(A.hasElement(pA)); + assert(B.hasElement(pB)); + AToB.erase(pA); + AToB.insert({{ pA, pB }}); + BToA.erase(pB); + BToA.insert({{ pB, pA }}); + } + + template + bool Matching::getMatchedVertex(const DgmPoint& p, DgmPoint& result) const + { + sanityCheck(); + auto inA = AToB.find(p); + if (inA != AToB.end()) { + result = inA->second; + return true; + } else { + auto inB = BToA.find(p); + if (inB != BToA.end()) { + result = inB->second; + return true; + } + } + return false; + } + + + template + void Matching::checkAugPath(const Path& augPath) const + { + assert(augPath.size() % 2 == 0); + for (size_t idx = 0; idx < augPath.size(); ++idx) { + bool mustBeExposed { idx == 0 or idx == augPath.size() - 1 }; + if (isExposed(augPath[idx]) != mustBeExposed) { #ifndef FOR_R_TDA - std::cerr << "mustBeExposed = " << mustBeExposed << ", idx = " << idx << ", point " << augPath[idx] << std::endl; + std::cerr << "mustBeExposed = " << mustBeExposed << ", idx = " << idx << ", point " << augPath[idx] + << std::endl; #endif + } + assert(isExposed(augPath[idx]) == mustBeExposed); + DgmPoint matchedVertex; + if (idx % 2 == 0) { + assert(A.hasElement(augPath[idx])); + if (not mustBeExposed) { + getMatchedVertex(augPath[idx], matchedVertex); + assert(matchedVertex == augPath[idx - 1]); + } + } else { + assert(B.hasElement(augPath[idx])); + if (not mustBeExposed) { + getMatchedVertex(augPath[idx], matchedVertex); + assert(matchedVertex == augPath[idx + 1]); + } + } + } } - assert( isExposed(augPath[idx]) == mustBeExposed ); - DgmPoint matchedVertex {0.0, 0.0, DgmPoint::DIAG, 1}; - if ( idx % 2 == 0 ) { - assert( A.hasElement(augPath[idx])); - if (not mustBeExposed) { - getMatchedVertex(augPath[idx], matchedVertex); - assert(matchedVertex == augPath[idx - 1]); + + // use augmenting path to increase + // the size of the matching + template + void Matching::increase(const Path& augPath) + { + sanityCheck(); + // check that augPath is an augmenting path + checkAugPath(augPath); + for (size_t idx = 0; idx < augPath.size() - 1; idx += 2) { + matchVertices(augPath[idx], augPath[idx + 1]); } - } else { - assert( B.hasElement(augPath[idx])); - if (not mustBeExposed) { - getMatchedVertex(augPath[idx], matchedVertex); - assert(matchedVertex == augPath[idx + 1]); + sanityCheck(); + } + + template + DiagramPointSet Matching::getExposedVertices(bool forA) const + { + sanityCheck(); + DgmPointSet result; + const DgmPointSet* setToSearch { forA ? &A : &B }; + const std::unordered_map* mapToSearch { forA ? &AToB : &BToA }; + for (auto it = setToSearch->cbegin(); it != setToSearch->cend(); ++it) { + if (mapToSearch->find((*it)) == mapToSearch->cend()) { + result.insert((*it)); + } } + return result; } - } -} - -// use augmenting path to increase -// the size of the matching -template -void Matching::increase(const Path& augPath) -{ - sanityCheck(); - // check that augPath is an augmenting path - checkAugPath(augPath); - for(size_t idx = 0; idx < augPath.size() - 1; idx += 2) { - matchVertices( augPath[idx], augPath[idx + 1]); - } - sanityCheck(); -} - -template -DiagramPointSet Matching::getExposedVertices(bool forA) const -{ - sanityCheck(); - DgmPointSet result; - const DgmPointSet* setToSearch { forA ? &A : &B }; - const std::unordered_map* mapToSearch { forA ? &AToB : &BToA }; - for(auto it = setToSearch->cbegin(); it != setToSearch->cend(); ++it) { - if (mapToSearch->find((*it)) == mapToSearch->cend()) { - result.insert((*it)); + + template + void Matching::getAllAdjacentVertices(const DgmPointSet& setIn, + DgmPointSet& setOut, + bool forA) const + { + sanityCheck(); + //bool isDebug {false}; + setOut.clear(); + const std::unordered_map* m; + m = (forA) ? &BToA : &AToB; + for (auto pit = setIn.cbegin(); pit != setIn.cend(); ++pit) { + auto findRes = m->find(*pit); + if (findRes != m->cend()) { + setOut.insert((*findRes).second); + } + } + sanityCheck(); } - } - return result; -} - -template -void Matching::getAllAdjacentVertices(const DgmPointSet& setIn, - DgmPointSet& setOut, - bool forA) const -{ - sanityCheck(); - //bool isDebug {false}; - setOut.clear(); - const std::unordered_map* m; - m = ( forA ) ? &BToA : &AToB; - for(auto pit = setIn.cbegin(); pit != setIn.cend(); ++pit) { - auto findRes = m->find(*pit); - if (findRes != m->cend()) { - setOut.insert((*findRes).second); + + template + bool Matching::isExposed(const DgmPoint& p) const + { + return (AToB.find(p) == AToB.end()) && (BToA.find(p) == BToA.end()); } - } - sanityCheck(); -} - -template -bool Matching::isExposed(const DgmPoint& p) const -{ - return ( AToB.find(p) == AToB.end() ) && ( BToA.find(p) == BToA.end() ); -} - -// remove all edges whose length is > newThreshold -template -void Matching::trimMatching(const R newThreshold) -{ - //bool isDebug { false }; - sanityCheck(); - for(auto aToBIter = AToB.begin(); aToBIter != AToB.end(); ) { - if ( distLInf(aToBIter->first, aToBIter->second) > newThreshold ) { - // remove edge from AToB and BToA - BToA.erase(aToBIter->second); - aToBIter = AToB.erase(aToBIter); - } else { - aToBIter++; + + // remove all edges whose length is > newThreshold + template + void Matching::trimMatching(const R newThreshold) + { + //bool isDebug { false }; + sanityCheck(); + for (auto aToBIter = AToB.begin(); aToBIter != AToB.end();) { + if (distLInf(aToBIter->first, aToBIter->second) > newThreshold) { + // remove edge from AToB and BToA + BToA.erase(aToBIter->second); + aToBIter = AToB.erase(aToBIter); + } else { + aToBIter++; + } + } + sanityCheck(); } - } - sanityCheck(); -} - -template -MatchingEdge Matching::get_longest_edge() const -{ - R max_dist = -1.0; - MatchingEdge edge; - for(const auto& x : AToB) { - if (max_dist < distLInf(x.first, x.second)) { - edge = x; + + template + MatchingEdge Matching::get_longest_edge() const + { + R max_dist = -1.0; + MatchingEdge edge; + for (const auto& x : AToB) { + //std::cout << "max_dist = " << max_dist << std::endl; + //std::cout << "distance = " << distLInf(x.first, x.second) << std::endl; + + // for now skew edges may appear in the matching + // but they should not be returned to user + // if currrent edge is a skew edge, there must another edge + // with the same cost + R curr_dist; + if (x.first.isDiagonal() and x.second.isNormal()) { + curr_dist = x.second.get_persistence(hera::get_infinity()); + } else if (x.first.isNormal() and x.second.isDiagonal()) { + curr_dist = x.first.get_persistence(hera::get_infinity()); + } else { + curr_dist = distLInf(x.first, x.second); + } + if (max_dist < curr_dist) { + max_dist = curr_dist; + edge = x; + //std::cout << "updated max_dist = " << max_dist << std::endl; + //std::cout << "updated edge = " << x.first << " <-> " << x.second << std::endl; + } + } + return edge; + } + + // ------- BoundMatchOracle -------------- + + template + BoundMatchOracle::BoundMatchOracle(DgmPointSet psA, DgmPointSet psB, + Real dEps, bool useRS) : + A(psA), B(psB), M(A, B), distEpsilon(dEps), useRangeSearch(useRS), prevQueryValue(0.0) + { + neighbOracle = std::unique_ptr(new NeighbOracle(psB, 0, distEpsilon)); } - } - return edge; -} - -// ------- BoundMatchOracle -------------- - -template -BoundMatchOracle::BoundMatchOracle(DgmPointSet psA, DgmPointSet psB, - Real dEps, bool useRS) : - A(psA), B(psB), M(A, B), distEpsilon(dEps), useRangeSearch(useRS), prevQueryValue(0.0) -{ - neighbOracle = std::unique_ptr(new NeighbOracle(psB, 0, distEpsilon)); -} - -template -bool BoundMatchOracle::isMatchLess(Real r) -{ + + template + bool BoundMatchOracle::isMatchLess(Real r) + { #ifdef VERBOSE_BOTTLENECK - std::chrono::high_resolution_clock hrClock; - std::chrono::time_point startMoment; - startMoment = hrClock.now(); + std::chrono::high_resolution_clock hrClock; + std::chrono::time_point startMoment; + startMoment = hrClock.now(); #endif - bool result = buildMatchingForThreshold(r); + bool result = buildMatchingForThreshold(r); #ifdef VERBOSE_BOTTLENECK - auto endMoment = hrClock.now(); - std::chrono::duration iterTime = endMoment - startMoment; - std::cout << "isMatchLess for r = " << r << " finished in " << std::chrono::duration(iterTime).count() << " ms." << std::endl; + auto endMoment = hrClock.now(); + std::chrono::duration iterTime = endMoment - startMoment; + std::cout << "isMatchLess for r = " << r << " finished in " << std::chrono::duration(iterTime).count() << " ms." << std::endl; #endif - return result; - -} - - -template -void BoundMatchOracle::removeFromLayer(const DgmPoint& p, const int layerIdx) { - //bool isDebug {false}; - layerGraph[layerIdx].erase(p); - if (layerOracles[layerIdx]) { - layerOracles[layerIdx]->deletePoint(p); - } -} - -// return true, if there exists an augmenting path from startVertex -// in this case the path is returned in result. -// startVertex must be an exposed vertex from L_1 (layer[0]) -template -bool BoundMatchOracle::buildAugmentingPath(const DgmPoint startVertex, Path& result) -{ - //bool isDebug {false}; - DgmPoint prevVertexA = startVertex; - result.clear(); - result.push_back(startVertex); - size_t evenLayerIdx {1}; - while ( evenLayerIdx < layerGraph.size() ) { - //for(size_t evenLayerIdx = 1; evenLayerIdx < layerGraph.size(); evenLayerIdx += 2) { - DgmPoint nextVertexB{0.0, 0.0, DgmPoint::DIAG, 1}; // next vertex from even layer - bool neighbFound = layerOracles[evenLayerIdx]->getNeighbour(prevVertexA, nextVertexB); - if (neighbFound) { - result.push_back(nextVertexB); - if ( layerGraph.size() == evenLayerIdx + 1) { - break; - } else { - // nextVertexB must be matched with some vertex from the next odd - // layer - DgmPoint nextVertexA {0.0, 0.0, DgmPoint::DIAG, 1}; - if (!M.getMatchedVertex(nextVertexB, nextVertexA)) { + return result; + + } + + + template + void BoundMatchOracle::removeFromLayer(const DgmPoint& p, const int layerIdx) + { + //bool isDebug {false}; + layerGraph[layerIdx].erase(p); + if (layerOracles[layerIdx]) { + layerOracles[layerIdx]->deletePoint(p); + } + } + + // return true, if there exists an augmenting path from startVertex + // in this case the path is returned in result. + // startVertex must be an exposed vertex from L_1 (layer[0]) + template + bool BoundMatchOracle::buildAugmentingPath(const DgmPoint startVertex, Path& result) + { + //bool isDebug {false}; + DgmPoint prevVertexA = startVertex; + result.clear(); + result.push_back(startVertex); + size_t evenLayerIdx { 1 }; + while (evenLayerIdx < layerGraph.size()) { + //for(size_t evenLayerIdx = 1; evenLayerIdx < layerGraph.size(); evenLayerIdx += 2) { + DgmPoint nextVertexB; // next vertex from even layer + bool neighbFound = layerOracles[evenLayerIdx]->getNeighbour(prevVertexA, nextVertexB); + if (neighbFound) { + result.push_back(nextVertexB); + if (layerGraph.size() == evenLayerIdx + 1) { + break; + } else { + // nextVertexB must be matched with some vertex from the next odd + // layer + DgmPoint nextVertexA; + if (!M.getMatchedVertex(nextVertexB, nextVertexA)) { #ifndef FOR_R_TDA - std::cerr << "Vertices in even layers must be matched! Unmatched: "; - std::cerr << nextVertexB << std::endl; - std::cerr << evenLayerIdx << "; " << layerGraph.size() << std::endl; + std::cerr << "Vertices in even layers must be matched! Unmatched: "; + std::cerr << nextVertexB << std::endl; + std::cerr << evenLayerIdx << "; " << layerGraph.size() << std::endl; #endif - throw std::runtime_error("Unmatched vertex in even layer"); + throw std::runtime_error("Unmatched vertex in even layer"); + } else { + assert(!(nextVertexA.getRealX() == 0 and nextVertexA.getRealY() == 0)); + result.push_back(nextVertexA); + prevVertexA = nextVertexA; + evenLayerIdx += 2; + continue; + } + } } else { - assert( ! (nextVertexA.getRealX() == 0 and nextVertexA.getRealY() == 0) ); - result.push_back(nextVertexA); - prevVertexA = nextVertexA; - evenLayerIdx += 2; - continue; + // prevVertexA has no neighbours in the next layer, + // backtrack + if (evenLayerIdx == 1) { + // startVertex is not connected to any vertices + // in the next layer, augm. path doesn't exist + removeFromLayer(startVertex, 0); + return false; + } else { + assert(evenLayerIdx >= 3); + assert(result.size() % 2 == 1); + result.pop_back(); + DgmPoint prevVertexB = result.back(); + result.pop_back(); + removeFromLayer(prevVertexA, evenLayerIdx - 1); + removeFromLayer(prevVertexB, evenLayerIdx - 2); + // we should proceed from the previous odd layer + assert(result.size() >= 1); + prevVertexA = result.back(); + evenLayerIdx -= 2; + continue; + } } + } // finished iterating over all layers + // remove all vertices in the augmenting paths + // the corresponding layers + for (size_t layerIdx = 0; layerIdx < result.size(); ++layerIdx) { + removeFromLayer(result[layerIdx], layerIdx); } - } else { - // prevVertexA has no neighbours in the next layer, - // backtrack - if (evenLayerIdx == 1) { - // startVertex is not connected to any vertices - // in the next layer, augm. path doesn't exist - removeFromLayer(startVertex, 0); - return false; - } else { - assert(evenLayerIdx >= 3); - assert(result.size() % 2 == 1); - result.pop_back(); - DgmPoint prevVertexB = result.back(); - result.pop_back(); - removeFromLayer(prevVertexA, evenLayerIdx-1); - removeFromLayer(prevVertexB, evenLayerIdx-2); - // we should proceed from the previous odd layer - assert(result.size() >= 1); - prevVertexA = result.back(); - evenLayerIdx -= 2; - continue; - } + return true; } - } // finished iterating over all layers - // remove all vertices in the augmenting paths - // the corresponding layers - for(size_t layerIdx = 0; layerIdx < result.size(); ++layerIdx) { - removeFromLayer(result[layerIdx], layerIdx); - } - return true; -} - - - - -template -bool BoundMatchOracle::buildMatchingForThreshold(const Real r) -{ - //bool isDebug {false}; - if (prevQueryValue > r) { - M.trimMatching(r); - } - prevQueryValue = r; - while(true) { - buildLayerGraph(r); - if (augPathExist) { - std::vector augmentingPaths; - DgmPointSet copyLG0; - for(DgmPoint p : layerGraph[0]) { - copyLG0.insert(p); - } - for(DgmPoint exposedVertex : copyLG0) { - Path augPath; - if (buildAugmentingPath(exposedVertex, augPath)) { - augmentingPaths.push_back(augPath); - } + + + template + bool BoundMatchOracle::buildMatchingForThreshold(const Real r) + { + //bool isDebug {false}; + if (prevQueryValue > r) { + M.trimMatching(r); } - if (augmentingPaths.empty()) { + prevQueryValue = r; + while (true) { + buildLayerGraph(r); + if (augPathExist) { + std::vector augmentingPaths; + DgmPointSet copyLG0; + for (DgmPoint p : layerGraph[0]) { + copyLG0.insert(p); + } + for (DgmPoint exposedVertex : copyLG0) { + Path augPath; + if (buildAugmentingPath(exposedVertex, augPath)) { + augmentingPaths.push_back(augPath); + } + } + if (augmentingPaths.empty()) { #ifndef FOR_R_TDA - std::cerr << "augmenting paths must exist, but were not found!" << std::endl; + std::cerr << "augmenting paths must exist, but were not found!" << std::endl; #endif - throw std::runtime_error("bad epsilon?"); - } - // swap all augmenting paths with matching to increase it - for(auto& augPath : augmentingPaths ) { - M.increase(augPath); + throw std::runtime_error("bad epsilon?"); + } + // swap all augmenting paths with matching to increase it + for (auto& augPath : augmentingPaths) { + M.increase(augPath); + } + } else { + return M.isPerfect(); + } } - } else { - return M.isPerfect(); } - } -} -template -void BoundMatchOracle::printLayerGraph(void) -{ + template + void BoundMatchOracle::printLayerGraph(void) + { #ifdef DEBUG_BOUND_MATCH - for(auto& layer : layerGraph) { - std::cout << "{ "; - for(auto& p : layer) { - std::cout << p << "; "; - } - std::cout << "\b\b }" << std::endl; - } + for(auto& layer : layerGraph) { + std::cout << "{ "; + for(auto& p : layer) { + std::cout << p << "; "; + } + std::cout << "\b\b }" << std::endl; + } #endif -} + } -template -void BoundMatchOracle::buildLayerGraph(Real r) -{ + template + void BoundMatchOracle::buildLayerGraph(Real r) + { #ifdef VERBOSE_BOTTLENECK - std::cout << "Entered buildLayerGraph, r = " << r << std::endl; + std::cout << "Entered buildLayerGraph, r = " << r << std::endl; #endif - layerGraph.clear(); - DgmPointSet L1 = M.getExposedVertices(); - layerGraph.push_back(L1); - neighbOracle->rebuild(B, r); - size_t k = 0; - DgmPointSet layerNextEven; - DgmPointSet layerNextOdd; - bool exposedVerticesFound {false}; - while(true) { - layerNextEven.clear(); - for( auto p : layerGraph[k]) { - bool neighbFound; - DgmPoint neighbour {0.0, 0.0, DgmPoint::DIAG, 1}; - if (useRangeSearch) { - std::vector neighbVec; - neighbOracle->getAllNeighbours(p, neighbVec); - neighbFound = !neighbVec.empty(); - for(auto& neighbPt : neighbVec) { - layerNextEven.insert(neighbPt); - if (!exposedVerticesFound and M.isExposed(neighbPt)) - exposedVerticesFound = true; - } - } else { - while(true) { - neighbFound = neighbOracle->getNeighbour(p, neighbour); - if (neighbFound) { - layerNextEven.insert(neighbour); - neighbOracle->deletePoint(neighbour); - if ((!exposedVerticesFound) && M.isExposed(neighbour)) { - exposedVerticesFound = true; + layerGraph.clear(); + DgmPointSet L1 = M.getExposedVertices(); + layerGraph.push_back(L1); + neighbOracle->rebuild(B, r); + size_t k = 0; + DgmPointSet layerNextEven; + DgmPointSet layerNextOdd; + bool exposedVerticesFound { false }; + while (true) { + layerNextEven.clear(); + for (auto p : layerGraph[k]) { + bool neighbFound; + //DgmPoint neighbour {0.0, 0.0, DgmPoint::DIAG, 1}; + DgmPoint neighbour; + if (useRangeSearch) { + std::vector neighbVec; + neighbOracle->getAllNeighbours(p, neighbVec); + neighbFound = !neighbVec.empty(); + for (auto& neighbPt : neighbVec) { + layerNextEven.insert(neighbPt); + if (!exposedVerticesFound and M.isExposed(neighbPt)) { + exposedVerticesFound = true; + } } } else { - break; + while (true) { + neighbFound = neighbOracle->getNeighbour(p, neighbour); + if (neighbFound) { + layerNextEven.insert(neighbour); + neighbOracle->deletePoint(neighbour); + if ((!exposedVerticesFound) && M.isExposed(neighbour)) { + exposedVerticesFound = true; + } + } else { + break; + } + } + } // without range search + } // all vertices from previous odd layer processed + if (layerNextEven.empty()) { + augPathExist = false; + break; + } + if (exposedVerticesFound) { + for (auto it = layerNextEven.cbegin(); it != layerNextEven.cend();) { + if (!M.isExposed(*it)) { + layerNextEven.erase(it++); + } else { + ++it; + } + } + layerGraph.push_back(layerNextEven); + augPathExist = true; + break; } - } // without range search - } // all vertices from previous odd layer processed - if (layerNextEven.empty()) { - augPathExist = false; - break; + layerGraph.push_back(layerNextEven); + M.getAllAdjacentVertices(layerNextEven, layerNextOdd); + layerGraph.push_back(layerNextOdd); + k += 2; + } + buildLayerOracles(r); + printLayerGraph(); } - if (exposedVerticesFound) { - for(auto it = layerNextEven.cbegin(); it != layerNextEven.cend(); ) { - if ( ! M.isExposed(*it) ) { - layerNextEven.erase(it++); + + // create geometric oracles for each even layer + // odd layers have NULL in layerOracles + template + void BoundMatchOracle::buildLayerOracles(Real r) + { + //bool isDebug {false}; + // free previously constructed oracles + layerOracles.clear(); + for (size_t layerIdx = 0; layerIdx < layerGraph.size(); ++layerIdx) { + if (layerIdx % 2 == 1) { + // even layer, build actual oracle + layerOracles.emplace_back(new NeighbOracle(layerGraph[layerIdx], r, distEpsilon)); } else { - ++it; + // odd layer + layerOracles.emplace_back(nullptr); } - } - layerGraph.push_back(layerNextEven); - augPathExist = true; - break; - } - layerGraph.push_back(layerNextEven); - M.getAllAdjacentVertices(layerNextEven, layerNextOdd); - layerGraph.push_back(layerNextOdd); - k += 2; - } - buildLayerOracles(r); - printLayerGraph(); - } - -// create geometric oracles for each even layer -// odd layers have NULL in layerOracles -template -void BoundMatchOracle::buildLayerOracles(Real r) -{ - //bool isDebug {false}; - // free previously constructed oracles - layerOracles.clear(); - for(size_t layerIdx = 0; layerIdx < layerGraph.size(); ++layerIdx) { - if (layerIdx % 2 == 1) { - // even layer, build actual oracle - layerOracles.emplace_back(new NeighbOracle(layerGraph[layerIdx], r, distEpsilon)); - } else { - // odd layer - layerOracles.emplace_back(nullptr); } - } -} -} // end namespace bt + } // end namespace bt } // end namespace hera #endif // HERA_BOUND_MATCH_HPP diff --git a/geom_bottleneck/include/dnn/local/kd-tree.hpp b/geom_bottleneck/include/dnn/local/kd-tree.hpp index 249fa55..5b84eb0 100644 --- a/geom_bottleneck/include/dnn/local/kd-tree.hpp +++ b/geom_bottleneck/include/dnn/local/kd-tree.hpp @@ -106,11 +106,11 @@ hera::bt::dnn::KDTree::OrderTree size_t next_i = (i + 1) % traits.dimension(); // Replace with a size condition instead? - if (b < m - 1) + if (m - b > 1) q.push(KDTreeNode(b, m, im, next_i)); else if (b < m) tree->parents_[im - 1] = im; - if (e > m + 2) + if (e - m > 2) q.push(KDTreeNode(m+1, e, im, next_i)); else if (e > m + 1) tree->parents_[im + 1] = im; @@ -210,7 +210,7 @@ void hera::bt::dnn::KDTree::search(PointHandle q, ResultsFunctor& rf) const DistanceType diffToWasserPower = (diff > 0 ? 1.0 : -1.0) * fabs(diff); size_t lm = m + 1 + (e - (m+1))/2 - tree_.begin(); - if ( subtree_n_elems[lm] > 0 ) { + if ( e > m + 1 and subtree_n_elems[lm] > 0 ) { if (e > m + 1 && diffToWasserPower >= -D) { nodes.push(KDTreeNode(m+1, e, i)); } diff --git a/geom_bottleneck/include/neighb_oracle.h b/geom_bottleneck/include/neighb_oracle.h index c3751b3..91ebc0e 100644 --- a/geom_bottleneck/include/neighb_oracle.h +++ b/geom_bottleneck/include/neighb_oracle.h @@ -179,7 +179,7 @@ public: // store normal items in kd-tree for(const auto& g : allPoints) { if (true) { - kdtreeItems[trueIdx] = dnnItemIdx; + kdtreeItems.push_back(dnnItemIdx); // index of items is id of dnn-point DnnPoint p(trueIdx); p[0] = g.getRealX(); diff --git a/geom_bottleneck/tests/data/test_001_A b/geom_bottleneck/tests/data/test_001_A new file mode 100644 index 0000000..8d04f96 --- /dev/null +++ b/geom_bottleneck/tests/data/test_001_A @@ -0,0 +1 @@ +1 2 diff --git a/geom_bottleneck/tests/data/test_001_B b/geom_bottleneck/tests/data/test_001_B new file mode 100644 index 0000000..9290688 --- /dev/null +++ b/geom_bottleneck/tests/data/test_001_B @@ -0,0 +1 @@ +4 6 diff --git a/geom_bottleneck/tests/data/test_002_A b/geom_bottleneck/tests/data/test_002_A new file mode 100644 index 0000000..8d04f96 --- /dev/null +++ b/geom_bottleneck/tests/data/test_002_A @@ -0,0 +1 @@ +1 2 diff --git a/geom_bottleneck/tests/data/test_002_B b/geom_bottleneck/tests/data/test_002_B new file mode 100644 index 0000000..a4cec9b --- /dev/null +++ b/geom_bottleneck/tests/data/test_002_B @@ -0,0 +1 @@ +1.1 2.2 diff --git a/geom_bottleneck/tests/data/test_003_A b/geom_bottleneck/tests/data/test_003_A new file mode 100644 index 0000000..fdf0acd --- /dev/null +++ b/geom_bottleneck/tests/data/test_003_A @@ -0,0 +1,2 @@ +1 2 +2 inf diff --git a/geom_bottleneck/tests/data/test_003_B b/geom_bottleneck/tests/data/test_003_B new file mode 100644 index 0000000..ac429f9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_003_B @@ -0,0 +1,2 @@ +1.1 2.2 +4 inf diff --git a/geom_bottleneck/tests/data/test_004_A b/geom_bottleneck/tests/data/test_004_A new file mode 100644 index 0000000..fdf0acd --- /dev/null +++ b/geom_bottleneck/tests/data/test_004_A @@ -0,0 +1,2 @@ +1 2 +2 inf diff --git a/geom_bottleneck/tests/data/test_004_B b/geom_bottleneck/tests/data/test_004_B new file mode 100644 index 0000000..5769823 --- /dev/null +++ b/geom_bottleneck/tests/data/test_004_B @@ -0,0 +1,3 @@ +1.1 2.2 +4 inf +4 inf diff --git a/geom_bottleneck/tests/data/test_005_A b/geom_bottleneck/tests/data/test_005_A new file mode 100644 index 0000000..e28367d --- /dev/null +++ b/geom_bottleneck/tests/data/test_005_A @@ -0,0 +1,6 @@ +1 2 +2 inf +3 inf +10 inf +inf 21 +inf 44 diff --git a/geom_bottleneck/tests/data/test_005_B b/geom_bottleneck/tests/data/test_005_B new file mode 100644 index 0000000..7f6032b --- /dev/null +++ b/geom_bottleneck/tests/data/test_005_B @@ -0,0 +1,6 @@ +1.1 2.2 +4 inf +4 inf +12 inf +inf 20 +inf 40 diff --git a/geom_bottleneck/tests/data/test_006_A b/geom_bottleneck/tests/data/test_006_A new file mode 100644 index 0000000..b5184a5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_006_A @@ -0,0 +1,7 @@ +1 2 +2 inf +3 inf +10 inf +inf 21 +inf 44 +1 34 diff --git a/geom_bottleneck/tests/data/test_006_B b/geom_bottleneck/tests/data/test_006_B new file mode 100644 index 0000000..0d07369 --- /dev/null +++ b/geom_bottleneck/tests/data/test_006_B @@ -0,0 +1,7 @@ +2 40 +1.1 2.2 +4 inf +4 inf +12 inf +inf 20 +inf 40 diff --git a/geom_bottleneck/tests/data/test_007_A b/geom_bottleneck/tests/data/test_007_A new file mode 100644 index 0000000..e69de29 diff --git a/geom_bottleneck/tests/data/test_007_B b/geom_bottleneck/tests/data/test_007_B new file mode 100644 index 0000000..e69de29 diff --git a/geom_bottleneck/tests/data/test_008_A b/geom_bottleneck/tests/data/test_008_A new file mode 100644 index 0000000..e69de29 diff --git a/geom_bottleneck/tests/data/test_008_B b/geom_bottleneck/tests/data/test_008_B new file mode 100644 index 0000000..e69de29 diff --git a/geom_bottleneck/tests/data/test_009_A b/geom_bottleneck/tests/data/test_009_A new file mode 100644 index 0000000..e69de29 diff --git a/geom_bottleneck/tests/data/test_009_B b/geom_bottleneck/tests/data/test_009_B new file mode 100644 index 0000000..e69de29 diff --git a/geom_bottleneck/tests/data/test_010_A b/geom_bottleneck/tests/data/test_010_A new file mode 100644 index 0000000..8d126f0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_010_A @@ -0,0 +1,100 @@ +7.50638 7.78005 +0.991758 2.12178 +5.18481 6.61702 +6.14703 7.08581 +4.09936 4.83024 +3.79915 4.51283 +3.17645 3.75321 +0.61305 0.998622 +0.445643 1.13781 +6.38205 6.53669 +5.96392 6.44093 +7.21047 7.26005 +0.6703 1.26593 +0.529933 1.7027 +7.92495 8.83023 +2.1382 2.71695 +3.79209 4.5197 +5.23354 5.82214 +-0.395097 2.18831 +3.22028 3.88648 +5.56262 5.79949 +8.39623 9.37185 +2.7452 3.84539 +9.5022 10.2414 +1.01374 1.40504 +3.2029 3.89559 +7.61236 8.28485 +6.4371 6.909 +4.45616 5.35067 +1.57802 1.77895 +6.5991 7.76339 +6.66729 6.71714 +6.11898 6.57121 +2.60663 4.36396 +-0.259613 1.17683 +7.72857 9.48862 +4.68398 5.51521 +4.87447 5.4233 +6.86301 6.88244 +4.17814 4.25886 +8.70558 9.72902 +4.40873 4.57389 +6.1824 7.05049 +7.97557 8.79739 +8.52591 8.6985 +5.15336 5.27796 +9.70144 9.77031 +0.561778 1.39045 +9.32553 10.2456 +7.01495 7.74521 +6.83355 7.28255 +1.96721 3.01504 +5.78411 7.59464 +5.64012 6.10721 +3.7249 5.17086 +4.33297 5.91657 +7.11793 7.2545 +5.109 6.76878 +3.02787 3.04077 +0.999365 2.05566 +8.81392 8.9086 +6.20106 6.78943 +6.7987 7.05794 +0.438805 0.449602 +8.71793 9.79853 +-0.150282 0.51997 +5.72257 5.93156 +5.71098 6.09535 +9.0378 9.45942 +0.534987 0.872885 +7.72276 8.57754 +9.26069 9.40289 +4.148 4.80519 +1.04579 3.18109 +0.259767 0.93215 +0.250608 0.511569 +4.88108 5.62239 +4.6731 5.3348 +7.84979 7.93545 +0.912521 1.48142 +4.82553 5.38108 +6.02179 7.61665 +3.85848 6.39418 +5.10754 6.02118 +1.71956 1.86238 +6.47336 6.74034 +-0.0371018 0.212738 +3.97259 4.15465 +2.17413 3.20188 +4.49098 6.09812 +6.62445 7.84196 +6.57541 7.432 +6.81052 9.6653 +3.67502 4.69734 +3.92378 4.14743 +5.93127 6.46154 +0.63424 0.705454 +7.60129 9.23263 +4.23064 4.74575 +0.397705 1.24458 diff --git a/geom_bottleneck/tests/data/test_010_B b/geom_bottleneck/tests/data/test_010_B new file mode 100644 index 0000000..852799d --- /dev/null +++ b/geom_bottleneck/tests/data/test_010_B @@ -0,0 +1,100 @@ +5.8232 6.36308 +2.16066 2.48668 +2.38754 4.91418 +4.77403 5.43982 +0.291412 1.11147 +3.77337 5.2686 +8.31344 9.05384 +0.734064 1.14844 +7.57606 7.8521 +3.16719 3.86953 +2.55072 2.64932 +9.51707 9.6071 +0.304643 2.41784 +2.79925 3.28234 +5.32901 7.7576 +5.19903 6.30449 +1.87819 2.99454 +8.92272 9.67105 +4.62414 5.05592 +4.0079 4.64148 +2.26369 3.44573 +2.69335 3.13426 +1.90706 2.42652 +2.68113 2.79133 +1.41065 1.56018 +6.55282 7.18725 +5.72986 6.37151 +7.26968 8.22623 +3.32643 3.73606 +3.77325 4.63115 +1.05457 1.83651 +8.6815 8.85251 +3.91285 4.17139 +0.380936 0.842109 +7.33227 7.69334 +8.45635 8.923 +4.1769 5.08373 +0.501374 2.23328 +-0.161782 1.28908 +3.44716 3.4662 +3.15394 4.30243 +8.71416 9.3781 +6.3034 8.62893 +6.53824 7.04611 +0.6386 1.35269 +0.862088 0.960371 +5.12963 5.20203 +1.58695 2.0452 +6.57698 6.63228 +3.87747 4.45669 +1.51273 3.25669 +-0.0992804 0.667302 +4.7489 4.80059 +0.0280559 1.90471 +6.7462 8.27612 +0.915652 1.30007 +2.79556 3.77404 +9.87989 10.0722 +9.39105 9.84229 +7.57235 9.37122 +5.09426 6.44266 +6.3994 6.72037 +5.73441 6.99341 +6.9079 7.88049 +4.2003 4.41933 +-1.72447 2.25877 +9.04907 9.64323 +4.40473 5.3593 +9.31201 9.96079 +7.28343 8.74163 +3.0172 6.23779 +8.08422 8.56069 +6.83038 6.99863 +2.32038 3.1289 +7.42302 8.26286 +6.66905 7.18496 +0.730748 1.61335 +4.00564 5.73993 +2.81231 3.67489 +2.33178 2.37845 +9.03302 9.68681 +0.567816 0.755485 +7.89783 8.7621 +0.177662 0.332833 +-0.181569 1.36821 +6.22158 6.55787 +4.67115 5.16995 +0.806432 0.820738 +7.69636 7.87402 +4.40933 4.54995 +9.1329 9.15037 +8.87416 9.04329 +1.14349 1.8993 +3.29756 4.7172 +6.67873 8.31364 +6.91238 7.1654 +0.483084 1.55006 +2.66058 3.86294 +5.93347 6.06085 +7.40514 9.05071 diff --git a/geom_bottleneck/tests/data/test_011_A b/geom_bottleneck/tests/data/test_011_A new file mode 100644 index 0000000..164b71d --- /dev/null +++ b/geom_bottleneck/tests/data/test_011_A @@ -0,0 +1,200 @@ +0.471299 1.89241 +2.82136 3.97846 +8.81923 9.20678 +1.42474 1.65425 +8.36963 9.16097 +-0.236476 0.692489 +7.57182 8.06148 +2.89878 3.21958 +7.1285 7.51707 +5.75496 7.09461 +6.00081 6.10914 +9.60869 9.64676 +7.42889 8.97174 +7.26061 8.55944 +2.41226 2.5146 +8.5616 9.44847 +7.4946 8.86962 +5.42244 6.98028 +9.62386 9.96039 +7.70591 9.92849 +1.34119 3.2048 +3.92169 5.15228 +8.82955 9.60318 +7.94213 9.39997 +2.6716 4.02057 +0.375206 0.497663 +1.94572 3.65599 +1.03366 1.46356 +8.91855 10.1838 +7.11087 8.64425 +2.63266 2.78706 +8.93611 10.2943 +8.51999 9.28356 +1.31436 3.13725 +1.92871 4.00178 +8.30503 8.45555 +2.58739 2.82076 +3.20419 5.29453 +7.4015 8.13225 +9.07991 9.74729 +0.822366 0.938371 +2.90508 4.29367 +4.32385 5.4787 +3.63054 4.6918 +8.52962 9.87004 +1.16994 2.39465 +2.61903 3.33772 +4.15505 4.52942 +8.7068 9.66579 +8.10373 9.31351 +0.7954 1.23001 +7.82253 8.69505 +4.59616 5.91996 +1.02032 1.93931 +6.98421 8.46017 +8.42263 11.3447 +2.63444 3.7158 +7.49059 9.1137 +-0.122109 1.41074 +8.29578 8.81161 +6.24793 6.32368 +4.07212 4.39695 +5.32453 7.457 +8.3892 9.82048 +4.35981 4.78063 +5.49932 6.08321 +1.0107 1.53369 +2.48759 2.94139 +4.24977 5.52034 +1.93104 3.35207 +-0.733247 1.22412 +-0.354283 2.36812 +6.34728 6.44213 +5.98172 7.8753 +5.47963 6.82986 +6.01986 6.6588 +4.62793 5.22134 +7.73923 8.29761 +8.85565 9.51494 +5.55307 6.15804 +6.30963 7.17248 +9.4775 10.2636 +7.45333 7.74006 +1.79317 2.33273 +7.73056 8.44999 +3.94172 5.02778 +8.36177 9.85172 +5.91765 8.12935 +7.95436 8.97583 +5.06238 5.37907 +4.56153 4.97175 +9.47572 9.65038 +9.54745 9.922 +7.82271 8.66299 +4.19056 4.75156 +4.15657 5.72352 +0.213845 0.312444 +2.30944 2.6806 +2.42391 3.41888 +6.00512 6.88274 +6.64546 7.61145 +-0.204229 2.78228 +-0.417104 0.667252 +8.18696 8.67785 +9.27818 9.67924 +-0.0174685 0.21355 +5.91137 6.39606 +9.49268 10.1457 +2.11362 4.36526 +6.51084 7.82167 +6.07066 6.44843 +-0.653518 1.08588 +7.46736 7.87137 +5.26045 7.92188 +6.4171 6.8133 +6.73709 7.70383 +3.46451 4.23679 +0.122365 0.809853 +7.98627 8.0505 +1.71192 2.63047 +1.20624 2.12087 +4.6812 5.51566 +2.62672 2.67648 +4.203 5.1052 +5.26482 6.5186 +3.68166 3.74701 +2.72011 3.98338 +3.41652 3.71477 +2.26211 2.90374 +0.930209 1.43211 +1.98603 3.36662 +4.55838 5.9933 +5.66292 6.59838 +3.12432 3.87457 +6.54384 8.38959 +0.205059 0.331022 +8.70617 9.34121 +7.02182 7.38679 +2.36908 2.84197 +9.13221 9.76563 +7.50113 9.49245 +8.15671 8.45093 +1.9517 2.20923 +3.23368 3.43695 +2.97273 4.10133 +7.36338 8.96733 +4.77525 5.18347 +9.47774 10.3537 +1.75218 1.97051 +5.42544 6.18939 +9.75801 10.0151 +6.31285 6.38327 +8.43389 8.721 +7.6108 7.81113 +8.72029 10.3153 +5.18655 7.1101 +7.96243 8.43151 +0.798103 0.860125 +1.1289 2.77549 +5.91084 6.03085 +4.95884 5.46913 +5.88125 6.49667 +7.9394 8.9545 +5.07492 5.55063 +5.92251 6.08548 +3.88602 5.41487 +1.40122 2.15276 +8.74244 8.83223 +4.75577 6.60338 +0.921272 1.44873 +3.77361 3.90348 +8.8999 9.8518 +3.11077 4.85674 +8.56185 10.6345 +8.76335 9.00169 +6.8734 8.60197 +4.54408 4.93892 +5.57849 6.31727 +7.95161 8.30843 +1.55798 2.4957 +3.86082 3.97131 +6.45433 7.17065 +0.96021 2.32897 +6.84576 6.89531 +8.59095 8.70199 +3.57754 4.26457 +5.27979 5.74385 +2.06602 2.90525 +3.0856 4.18179 +2.76214 3.9982 +2.11943 5.4285 +3.1197 3.24389 +0.495798 1.23632 +3.18253 3.99433 +7.02072 8.37949 +2.77905 3.42643 +1.57093 2.30655 +7.10979 7.14006 +6.20994 6.72092 +8.15136 8.33899 diff --git a/geom_bottleneck/tests/data/test_011_B b/geom_bottleneck/tests/data/test_011_B new file mode 100644 index 0000000..761943d --- /dev/null +++ b/geom_bottleneck/tests/data/test_011_B @@ -0,0 +1,200 @@ +1.17434 1.46837 +2.58198 4.16589 +0.234041 0.968658 +1.52703 1.59579 +6.7103 7.44033 +3.19227 4.41539 +5.42556 5.57369 +3.45417 4.86089 +3.82256 4.1092 +7.82551 7.90784 +3.9384 4.71796 +5.60335 5.9054 +7.96663 9.8987 +6.30305 6.64853 +7.33246 10.5316 +0.623312 1.09008 +2.63041 2.64616 +5.36028 6.28956 +4.64202 5.91858 +7.55219 7.96304 +7.73736 9.18221 +1.67114 1.84851 +5.07514 5.12159 +7.03732 7.05228 +7.5006 7.59212 +0.244947 1.55875 +0.0170454 1.10485 +1.95394 3.53669 +5.66015 6.01949 +5.88211 7.64639 +7.46698 9.27085 +6.37429 7.10154 +4.54535 4.81932 +8.21203 9.35896 +4.89933 6.20802 +3.68683 4.17831 +0.477467 0.828394 +6.17871 6.77834 +9.77523 9.92676 +0.854808 2.38709 +7.93326 8.3553 +2.10917 2.27771 +4.07045 4.72793 +8.2016 8.8011 +2.9205 3.95746 +2.89806 4.39725 +5.5654 5.78669 +9.5219 9.98543 +7.08591 7.19588 +8.35359 9.57893 +9.81348 10.0345 +8.5994 9.71835 +5.43903 7.25234 +1.82768 2.92724 +4.44952 6.79754 +5.66747 7.34386 +5.88153 6.39253 +3.34008 4.22032 +2.46068 2.76051 +0.370778 2.61681 +6.02508 6.26809 +4.32654 4.93262 +7.41536 7.99616 +8.84229 9.87911 +3.8551 5.84353 +1.56832 2.34694 +6.96099 7.42028 +8.15753 8.72014 +9.23141 10.3815 +7.4484 7.80228 +0.473671 0.874895 +3.15689 3.50687 +3.58122 4.09945 +3.55022 3.74767 +4.42708 5.80211 +4.40956 4.68699 +3.80576 4.61856 +7.29965 8.28614 +7.40582 8.15308 +1.69789 1.77669 +1.66419 3.44308 +0.473997 0.872506 +7.83959 8.52898 +6.22416 6.36949 +-0.187159 0.871822 +0.232336 0.585965 +9.29905 9.44357 +1.4459 2.40589 +2.83008 3.19758 +1.15291 2.12112 +2.58686 3.33896 +6.79362 7.88068 +0.228178 1.48318 +5.60001 6.20258 +4.97803 7.10992 +1.70429 1.962 +2.72659 3.13886 +9.22714 9.25889 +3.84694 3.88778 +-0.282077 1.48155 +9.28756 9.58517 +4.34069 5.59751 +8.63909 8.76839 +8.86236 10.7642 +6.77597 8.41888 +7.30621 8.64164 +0.685607 1.22755 +2.91514 3.22638 +2.72098 3.66837 +8.17528 8.32638 +5.19632 5.7506 +7.34177 8.70639 +5.74082 6.35524 +5.95975 6.69284 +9.40187 10.4488 +2.92761 3.36735 +0.399531 3.13082 +4.83399 4.92635 +7.74539 8.56852 +1.76322 3.5086 +6.54479 6.72963 +7.64362 8.12404 +1.35542 1.45313 +0.214385 0.718085 +1.7006 3.21962 +5.91009 6.47862 +2.21093 2.34636 +5.96919 6.79365 +6.59951 8.22203 +1.54571 1.59397 +3.27012 3.79128 +0.32455 0.622995 +1.73926 2.78017 +9.81035 9.84077 +7.38441 7.85171 +8.90372 9.34186 +7.26323 8.41174 +5.7363 5.97348 +8.25473 10.1281 +2.3981 2.52096 +8.53783 9.63442 +8.51755 9.2735 +6.48614 6.773 +3.40182 3.65137 +2.1353 3.04852 +2.95397 3.73285 +6.98063 7.4963 +4.50189 5.26384 +0.21416 1.49363 +0.632196 1.36307 +6.57833 6.60481 +8.0634 9.33903 +2.79759 2.94462 +4.43747 4.58861 +6.48733 6.86569 +2.28008 3.47037 +6.87452 7.77431 +-0.156821 2.71557 +0.72595 1.78862 +1.97586 2.38196 +8.61839 9.1468 +4.55496 5.68986 +0.26923 1.15728 +9.63757 9.7236 +1.39497 1.96698 +4.8643 5.04172 +6.64675 7.66435 +2.56256 2.6015 +-0.381989 0.611211 +0.676336 1.26896 +8.95304 9.03243 +5.62058 6.07997 +3.36522 4.04276 +8.64868 10.5024 +4.75813 5.19834 +1.96608 2.05864 +9.01449 9.10397 +3.72786 4.51921 +5.6938 6.96584 +1.73499 2.9314 +2.73099 3.41409 +8.77171 9.07665 +4.63865 4.67649 +8.6698 9.30782 +-0.168259 2.09581 +9.29672 9.56 +0.372544 2.60567 +0.450487 1.32919 +6.95341 7.6399 +3.4403 5.24993 +5.53469 6.97831 +-0.79664 1.21306 +5.68831 6.14413 +8.85601 8.95444 +3.83309 5.211 +5.51573 6.5114 +3.64009 3.99648 +4.40759 4.99283 +1.85198 2.6457 +2.72645 3.74803 diff --git a/geom_bottleneck/tests/data/test_012_A b/geom_bottleneck/tests/data/test_012_A new file mode 100644 index 0000000..094c6e0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_012_A @@ -0,0 +1,5000 @@ +0.471299 1.89241 +2.82136 3.97846 +8.81923 9.20678 +1.42474 1.65425 +8.36963 9.16097 +-0.236476 0.692489 +7.57182 8.06148 +2.89878 3.21958 +7.1285 7.51707 +5.75496 7.09461 +6.00081 6.10914 +9.60869 9.64676 +7.42889 8.97174 +7.26061 8.55944 +2.41226 2.5146 +8.5616 9.44847 +7.4946 8.86962 +5.42244 6.98028 +9.62386 9.96039 +7.70591 9.92849 +1.34119 3.2048 +3.92169 5.15228 +8.82955 9.60318 +7.94213 9.39997 +2.6716 4.02057 +0.375206 0.497663 +1.94572 3.65599 +1.03366 1.46356 +8.91855 10.1838 +7.11087 8.64425 +2.63266 2.78706 +8.93611 10.2943 +8.51999 9.28356 +1.31436 3.13725 +1.92871 4.00178 +8.30503 8.45555 +2.58739 2.82076 +3.20419 5.29453 +7.4015 8.13225 +9.07991 9.74729 +0.822366 0.938371 +2.90508 4.29367 +4.32385 5.4787 +3.63054 4.6918 +8.52962 9.87004 +1.16994 2.39465 +2.61903 3.33772 +4.15505 4.52942 +8.7068 9.66579 +8.10373 9.31351 +0.7954 1.23001 +7.82253 8.69505 +4.59616 5.91996 +1.02032 1.93931 +6.98421 8.46017 +8.42263 11.3447 +2.63444 3.7158 +7.49059 9.1137 +-0.122109 1.41074 +8.29578 8.81161 +6.24793 6.32368 +4.07212 4.39695 +5.32453 7.457 +8.3892 9.82048 +4.35981 4.78063 +5.49932 6.08321 +1.0107 1.53369 +2.48759 2.94139 +4.24977 5.52034 +1.93104 3.35207 +-0.733247 1.22412 +-0.354283 2.36812 +6.34728 6.44213 +5.98172 7.8753 +5.47963 6.82986 +6.01986 6.6588 +4.62793 5.22134 +7.73923 8.29761 +8.85565 9.51494 +5.55307 6.15804 +6.30963 7.17248 +9.4775 10.2636 +7.45333 7.74006 +1.79317 2.33273 +7.73056 8.44999 +3.94172 5.02778 +8.36177 9.85172 +5.91765 8.12935 +7.95436 8.97583 +5.06238 5.37907 +4.56153 4.97175 +9.47572 9.65038 +9.54745 9.922 +7.82271 8.66299 +4.19056 4.75156 +4.15657 5.72352 +0.213845 0.312444 +2.30944 2.6806 +2.42391 3.41888 +6.00512 6.88274 +6.64546 7.61145 +-0.204229 2.78228 +-0.417104 0.667252 +8.18696 8.67785 +9.27818 9.67924 +-0.0174685 0.21355 +5.91137 6.39606 +9.49268 10.1457 +2.11362 4.36526 +6.51084 7.82167 +6.07066 6.44843 +-0.653518 1.08588 +7.46736 7.87137 +5.26045 7.92188 +6.4171 6.8133 +6.73709 7.70383 +3.46451 4.23679 +0.122365 0.809853 +7.98627 8.0505 +1.71192 2.63047 +1.20624 2.12087 +4.6812 5.51566 +2.62672 2.67648 +4.203 5.1052 +5.26482 6.5186 +3.68166 3.74701 +2.72011 3.98338 +3.41652 3.71477 +2.26211 2.90374 +0.930209 1.43211 +1.98603 3.36662 +4.55838 5.9933 +5.66292 6.59838 +3.12432 3.87457 +6.54384 8.38959 +0.205059 0.331022 +8.70617 9.34121 +7.02182 7.38679 +2.36908 2.84197 +9.13221 9.76563 +7.50113 9.49245 +8.15671 8.45093 +1.9517 2.20923 +3.23368 3.43695 +2.97273 4.10133 +7.36338 8.96733 +4.77525 5.18347 +9.47774 10.3537 +1.75218 1.97051 +5.42544 6.18939 +9.75801 10.0151 +6.31285 6.38327 +8.43389 8.721 +7.6108 7.81113 +8.72029 10.3153 +5.18655 7.1101 +7.96243 8.43151 +0.798103 0.860125 +1.1289 2.77549 +5.91084 6.03085 +4.95884 5.46913 +5.88125 6.49667 +7.9394 8.9545 +5.07492 5.55063 +5.92251 6.08548 +3.88602 5.41487 +1.40122 2.15276 +8.74244 8.83223 +4.75577 6.60338 +0.921272 1.44873 +3.77361 3.90348 +8.8999 9.8518 +3.11077 4.85674 +8.56185 10.6345 +8.76335 9.00169 +6.8734 8.60197 +4.54408 4.93892 +5.57849 6.31727 +7.95161 8.30843 +1.55798 2.4957 +3.86082 3.97131 +6.45433 7.17065 +0.96021 2.32897 +6.84576 6.89531 +8.59095 8.70199 +3.57754 4.26457 +5.27979 5.74385 +2.06602 2.90525 +3.0856 4.18179 +2.76214 3.9982 +2.11943 5.4285 +3.1197 3.24389 +0.495798 1.23632 +3.18253 3.99433 +7.02072 8.37949 +2.77905 3.42643 +1.57093 2.30655 +7.10979 7.14006 +6.20994 6.72092 +8.15136 8.33899 +0.903753 1.57921 +0.380744 1.88053 +1.3164 1.79885 +0.199366 0.576639 +5.53683 6.49433 +8.8705 9.14396 +3.1401 3.98761 +4.82675 6.69396 +7.28593 8.08916 +8.11312 9.92914 +3.25737 3.42109 +2.58413 4.57223 +2.65202 2.77196 +-0.31616 1.51568 +4.1621 5.29563 +4.49155 5.21037 +7.28481 7.31722 +9.70568 10.0406 +2.39057 2.85874 +2.30626 3.16244 +1.15896 2.09616 +5.91343 7.33024 +-0.172181 0.177363 +5.08934 6.10928 +7.15508 7.55315 +4.43036 4.68093 +6.00772 6.49566 +7.9247 8.43809 +1.57028 2.52328 +3.45458 4.43692 +3.18257 4.83824 +1.48243 1.91225 +2.59025 2.99596 +6.93059 8.34359 +4.53752 7.51216 +6.42857 6.51513 +5.5663 6.13877 +7.54367 7.56485 +9.01229 9.19913 +2.84158 3.23347 +0.42959 0.620618 +8.77033 9.33787 +8.06103 8.30989 +6.48425 7.83668 +4.66949 6.00205 +4.46683 4.66247 +8.96738 9.07714 +0.463093 0.514808 +7.72986 9.44537 +6.31391 6.8289 +0.883295 1.70946 +3.73278 3.98015 +6.73453 6.92514 +3.58434 4.43262 +0.236286 1.4601 +2.00505 2.38684 +3.845 4.20708 +1.18852 3.04911 +0.766784 1.00641 +7.38781 8.11216 +8.9396 9.27589 +0.369822 1.53322 +8.76527 9.23987 +0.663408 0.803445 +9.69209 10.1455 +9.73379 10.234 +3.47602 4.89968 +4.12754 5.45249 +7.31984 8.57369 +0.989101 1.47678 +5.57662 5.83292 +4.99092 6.85044 +4.35272 4.3683 +0.0517815 1.92227 +7.2694 7.80634 +1.35565 1.42783 +8.5638 8.91707 +1.74557 2.74123 +2.18226 2.19664 +-0.901334 1.32691 +0.866613 1.03788 +5.30895 6.31774 +7.70178 8.5675 +4.06894 4.16071 +2.59697 3.53162 +4.30201 5.34212 +4.08762 4.19091 +-0.516192 0.848397 +9.85911 10.1066 +0.472991 1.40069 +6.26012 7.0054 +0.707801 2.15445 +1.73825 1.87193 +0.206301 0.831746 +7.77872 7.92715 +4.94477 5.60361 +3.86216 5.16839 +1.35166 1.54482 +2.91721 3.56193 +4.57242 4.75913 +7.09303 8.29678 +8.18431 8.92151 +6.80303 10.87 +1.29208 1.72027 +1.22224 1.31693 +5.26756 6.26459 +2.55221 3.94397 +6.58902 6.78354 +7.85917 8.89791 +6.59279 7.63115 +4.45787 7.26828 +3.48759 5.33991 +2.13838 3.86589 +1.53368 3.57313 +1.41722 3.19336 +3.48388 4.11958 +1.53756 2.98451 +7.29083 8.22109 +1.2713 2.16915 +6.94685 7.31029 +6.2494 7.04676 +3.00376 3.02028 +1.25232 1.43301 +1.50413 2.25 +2.89098 4.77198 +4.50766 5.89294 +5.5403 6.07893 +-0.101858 0.409209 +3.87963 6.1053 +-0.19564 1.46589 +-0.342077 0.694623 +6.63875 7.42223 +7.89982 9.05857 +4.91121 5.48031 +5.90743 8.35815 +7.13881 8.21597 +4.11493 5.08147 +3.59673 3.77176 +8.08236 8.3237 +1.35842 1.48934 +5.42963 5.85906 +4.60778 4.9734 +-0.607198 0.91225 +5.40263 5.7017 +5.08624 5.63236 +7.34529 9.02233 +7.30013 8.12907 +6.56106 6.75585 +6.82576 7.25434 +2.96037 3.56454 +3.60283 4.09137 +6.35408 6.71888 +-0.688103 0.84579 +8.45128 8.69771 +6.31749 7.3294 +5.82223 6.04761 +1.72983 2.38205 +6.94974 7.76985 +9.681 10.0141 +8.65394 9.2456 +2.52904 3.39548 +6.66609 7.35785 +4.18963 4.5473 +3.58643 3.80513 +2.88796 3.82413 +0.992066 1.1477 +4.57942 5.15419 +3.02826 4.32268 +5.91565 6.82087 +4.13694 5.13393 +6.28717 6.53257 +1.3149 2.36944 +0.488974 0.981461 +4.32763 4.98272 +-0.420836 0.63619 +7.13406 7.31362 +0.367782 1.91138 +6.14763 6.16713 +0.837933 1.92794 +9.3781 10.0609 +3.22887 5.44584 +5.91554 6.65974 +5.68608 6.02435 +7.99715 8.55953 +5.37106 5.38574 +0.254544 0.374268 +0.184701 0.917061 +9.38005 9.54042 +6.86741 7.35628 +0.87398 1.69093 +7.75845 8.53773 +0.370425 1.35335 +0.699837 0.810893 +3.73223 4.32089 +3.81804 3.85752 +4.85936 5.10097 +2.70381 3.10519 +3.82523 5.27699 +9.13422 10.3317 +4.62775 4.77988 +7.91139 7.95504 +2.72614 4.79958 +0.863357 1.88643 +4.14155 5.02327 +2.49683 4.11585 +1.06741 1.11516 +6.20979 8.38443 +0.936362 2.46703 +6.58231 7.85063 +1.89469 2.31422 +8.70668 9.14006 +5.76486 6.1122 +3.15778 3.76679 +0.248282 2.19881 +1.25317 1.92694 +7.81837 9.53067 +-0.582906 0.818904 +8.34194 8.37845 +4.4913 5.10164 +3.86376 5.5453 +6.94054 7.68699 +2.07462 2.5811 +0.518698 2.1529 +3.51773 4.60946 +8.39915 8.98446 +1.63685 2.19755 +6.60737 9.05917 +2.06667 3.23994 +3.18822 3.31219 +2.44332 3.22088 +4.755 4.87118 +4.34245 4.91565 +4.64562 4.8104 +2.73282 3.35646 +9.48057 9.86441 +0.640899 1.03356 +0.789475 0.925731 +1.4247 1.58347 +1.47747 2.25408 +8.8612 9.81597 +8.44147 10.6885 +9.07046 10.0877 +0.350125 1.15765 +4.45375 5.73964 +4.06526 4.26457 +7.50776 8.23491 +1.55452 1.63786 +2.8399 4.52559 +1.34319 1.47951 +5.21572 5.65702 +5.85695 6.75574 +8.21826 10.657 +-0.0479956 1.79162 +1.72905 1.78113 +3.35685 4.03797 +3.7123 5.82296 +8.56751 10.2992 +4.07987 4.25273 +5.8347 6.07253 +3.25283 3.99065 +9.31995 10.3647 +0.649025 1.14496 +1.06966 2.04182 +7.59831 7.85826 +3.35263 3.84374 +4.91371 5.10148 +8.0875 9.23421 +3.00484 5.14282 +8.60448 9.09442 +5.61429 6.24037 +3.4729 4.17907 +7.18702 7.26274 +0.729966 0.928899 +2.27264 2.81241 +2.67248 3.91661 +3.98443 4.64406 +5.50463 6.92435 +-0.257961 0.905736 +5.71363 6.67387 +4.12643 4.66467 +3.97623 4.64917 +9.71227 9.8243 +8.66674 8.97634 +7.94673 8.73904 +7.45228 8.14466 +3.78405 4.81189 +4.05505 5.00011 +2.84957 3.15451 +6.93785 7.58172 +1.85006 1.96814 +6.82256 7.00166 +2.42727 2.68161 +8.06129 8.76308 +1.53758 3.67482 +2.5057 4.18495 +7.09618 7.79664 +1.12843 1.46228 +1.61447 2.2668 +5.58639 5.70776 +8.15398 8.34959 +2.49733 2.57643 +5.18817 5.32462 +5.62963 5.86377 +1.95215 2.26641 +7.22129 7.23255 +5.99833 6.18639 +6.20875 7.13868 +6.814 7.6597 +7.41314 9.49798 +5.48819 6.31634 +4.81318 5.08156 +9.15434 9.42787 +4.83201 5.43295 +1.44477 2.6455 +8.8907 10.4727 +3.19487 3.21255 +1.47291 3.13113 +4.14796 5.10058 +5.85016 8.41212 +7.58183 8.53659 +9.5978 10.2877 +1.5954 2.58394 +2.65561 4.0975 +-0.157024 0.16627 +7.04379 7.75368 +2.39896 2.7728 +2.42376 3.58085 +0.158653 0.857045 +7.82101 9.01833 +6.80499 7.35261 +6.62833 6.66255 +4.90229 5.45681 +8.50205 8.69236 +2.01845 2.06924 +8.2503 9.04222 +4.58265 5.52758 +8.6176 9.74887 +1.28468 1.77019 +5.40424 6.20705 +0.943905 1.98023 +4.2702 4.41287 +3.89454 4.4814 +0.585132 1.56351 +9.45354 10.5374 +3.7501 5.07553 +7.53248 8.14004 +4.60026 4.78921 +1.61073 4.22368 +6.22591 7.40966 +0.57866 1.0522 +5.877 6.55882 +3.54573 3.7731 +7.64294 7.66103 +8.2399 9.14032 +0.307808 0.571367 +7.89791 9.25734 +5.2852 5.84332 +0.45713 2.42223 +7.73426 8.48158 +8.0058 9.46405 +8.03189 8.41868 +1.54624 1.98914 +7.24167 7.27699 +8.61226 8.83199 +5.38365 6.52599 +0.827018 1.51428 +7.19285 7.48372 +-0.0969552 2.16007 +4.08084 6.32563 +9.16026 10.2604 +0.206147 0.717435 +4.00643 4.8093 +2.16139 3.14759 +1.73359 3.13485 +9.1103 9.36052 +7.05621 7.43901 +4.83509 6.07581 +5.67164 7.89488 +7.93353 8.18454 +2.59566 3.1842 +3.62521 4.95121 +3.0297 3.18649 +1.08515 2.69289 +3.77063 5.7789 +0.106035 1.27409 +0.601099 2.13481 +6.98837 7.58833 +9.22955 9.79149 +1.6398 1.78726 +2.30423 3.34814 +2.3912 2.81842 +4.71724 6.16966 +5.13553 5.5016 +5.34117 5.45075 +9.32776 10.0676 +4.54244 5.29058 +4.01337 5.73188 +8.17427 8.39652 +1.96122 2.6921 +0.594267 1.00176 +-0.136973 0.977133 +6.41362 6.78056 +1.68388 2.39891 +9.50795 10.2315 +-0.262703 1.15557 +8.72229 9.683 +5.41821 5.67519 +4.93514 7.15867 +4.07046 4.26702 +-0.00866106 0.252353 +8.65877 10.1527 +2.10958 3.40353 +2.94947 3.43201 +6.32014 7.06279 +2.55034 2.89646 +3.87777 5.68044 +2.05325 3.00968 +5.11855 6.55784 +8.99618 9.22608 +3.36303 3.84902 +2.6234 3.70832 +7.35189 8.30856 +6.43777 7.28495 +5.33954 5.48055 +0.15999 0.391114 +3.4492 5.07088 +2.38503 2.42742 +3.88912 4.93246 +2.76303 4.54991 +6.56261 7.60381 +3.64198 3.72471 +1.70542 1.78806 +9.71115 9.88315 +0.471586 1.82377 +9.27611 10.5725 +0.486889 0.851587 +4.39234 5.10637 +9.54209 9.8955 +6.99602 7.42461 +2.98797 3.74623 +5.89424 6.4498 +9.63845 9.86333 +4.39828 5.18646 +2.30118 3.5758 +8.68128 9.56011 +9.00505 10.4304 +-0.22184 0.233296 +6.48492 7.60283 +1.54156 2.60693 +4.06808 6.39369 +5.52361 6.26241 +-0.698727 0.745524 +2.30742 2.41924 +0.655833 1.65752 +6.94733 7.81866 +7.83136 9.10651 +6.45284 7.1931 +6.09683 6.66159 +9.03299 9.4163 +1.86392 3.26189 +0.54863 2.07194 +0.364026 1.38376 +0.706954 1.0736 +-0.111015 0.584367 +1.54265 2.1413 +0.501172 0.57928 +2.09411 2.28902 +1.89894 4.09104 +8.72895 8.87045 +5.27709 5.72545 +0.164581 1.64188 +8.39203 8.73608 +8.21523 8.45002 +9.62006 10.1665 +4.79076 6.26442 +3.44189 3.68669 +8.93789 9.38343 +7.07036 7.64194 +8.34396 9.56445 +8.29992 8.64954 +5.82566 7.83287 +2.43008 3.4476 +1.81121 2.12203 +4.36108 4.3842 +6.28756 6.95939 +3.8698 5.79519 +0.644581 0.699162 +9.71982 10.2422 +4.86545 5.00544 +8.3808 9.29356 +1.34495 1.40972 +1.03641 2.01838 +8.55609 9.99958 +1.40813 3.46097 +3.20928 4.08838 +8.24345 9.11587 +1.27604 2.03462 +8.28298 8.46252 +2.20644 3.19585 +1.91396 2.30108 +4.2553 5.66006 +7.34925 8.38275 +6.28319 7.22199 +8.42171 9.62596 +1.12059 1.18262 +1.37555 1.84196 +4.39663 4.93639 +9.28044 9.58437 +5.47407 6.88593 +8.36529 8.49813 +9.40208 10.5922 +-0.451389 1.92404 +2.89431 3.19453 +6.51433 8.02158 +5.52163 6.06786 +7.63525 9.86457 +4.13898 5.05845 +0.136662 0.503748 +6.13492 6.74997 +8.37416 9.18971 +8.64164 8.82663 +0.941173 1.16158 +6.9073 8.26916 +8.37278 8.44326 +8.8951 9.20427 +8.40149 9.17577 +3.60361 4.57183 +8.67263 10.1127 +5.89716 6.45412 +1.97285 2.35593 +7.22973 8.13467 +9.55645 9.92529 +0.261578 0.836274 +9.04414 9.45485 +6.18043 6.54229 +8.88579 9.54087 +1.82613 2.93849 +5.7599 5.96366 +5.23105 5.5541 +0.425229 1.44436 +0.32065 2.60892 +7.83655 9.48786 +2.3168 3.45972 +2.35466 3.23342 +8.24494 8.27258 +7.32678 7.74264 +8.37275 10.0741 +4.17337 4.98348 +-0.162009 0.724431 +9.49757 9.76377 +8.69435 9.08089 +4.13841 4.7514 +7.26358 7.55514 +6.91912 6.93 +6.7883 7.18296 +-0.614315 1.1857 +6.05907 7.33557 +4.86704 4.87705 +8.50012 9.14836 +1.83683 3.09895 +6.16389 8.39248 +3.03556 4.41004 +4.72416 5.05782 +1.98183 3.19183 +2.77103 5.71501 +4.90002 4.9817 +0.269258 0.725628 +5.59551 7.05038 +2.95416 3.09633 +2.17662 3.18385 +6.67536 7.56762 +7.31678 7.39321 +3.84158 3.85359 +4.38203 5.10149 +0.816784 1.09918 +0.70131 0.739502 +0.276631 2.32633 +9.15839 9.49433 +0.721295 1.97673 +2.63875 2.75437 +5.00344 5.5645 +2.24555 2.81234 +7.74465 9.07646 +2.35244 4.90632 +0.812093 0.954419 +3.97904 5.2071 +4.19177 4.83646 +0.853012 1.331 +2.64112 3.25613 +0.0894716 1.61954 +3.39617 3.40859 +1.56906 2.28518 +2.37258 4.36515 +1.60997 1.7561 +5.15275 5.33281 +6.47824 7.47529 +2.51145 3.29949 +2.71094 2.77785 +8.84653 9.48398 +1.3246 1.66664 +7.43718 7.5546 +3.68985 4.24649 +4.50553 4.51669 +4.15617 4.54887 +8.55319 10.2136 +2.1448 3.55805 +4.64594 4.71505 +1.71763 1.99977 +4.98066 5.46709 +7.7779 8.36497 +-0.0604997 0.301294 +5.11873 7.32867 +4.94567 5.5986 +5.32645 6.26835 +2.5768 3.13511 +3.31604 3.87555 +1.60834 2.68762 +3.30552 3.85211 +4.26741 4.98636 +0.820475 1.18854 +7.91501 10.7203 +5.17391 5.30351 +4.00452 5.75141 +2.37722 3.4602 +2.2373 2.94837 +1.62462 3.48264 +7.98507 9.2566 +5.32504 5.56388 +0.760614 0.7802 +0.855659 1.01522 +3.11231 4.43223 +5.62821 6.21564 +4.96845 5.35921 +8.10559 9.11106 +1.02533 1.13103 +6.99976 7.0788 +1.87628 2.58801 +1.11023 2.24655 +5.23343 5.45086 +0.95875 2.25343 +7.45917 8.23614 +2.72245 3.04663 +8.66816 8.70698 +5.55734 7.12262 +1.01935 1.88271 +0.804417 1.76187 +7.82703 8.78426 +4.77321 6.15199 +2.91503 3.69352 +0.776735 1.08883 +5.19981 5.46442 +9.06483 10.4008 +7.72082 8.26398 +2.9854 3.26573 +0.584028 2.60443 +0.700994 1.10379 +5.47612 5.94502 +-0.318442 0.986786 +5.0704 5.08055 +3.83732 4.4826 +5.60843 6.59005 +8.81432 9.7851 +6.28792 6.65284 +1.16812 2.27701 +7.15234 9.66795 +9.02188 9.15339 +1.76112 2.04839 +7.49419 7.6204 +5.1765 5.497 +1.45855 1.94969 +1.35003 1.55822 +2.50453 2.86815 +7.10451 8.51352 +3.87727 4.1124 +1.84876 2.79351 +3.01661 4.05396 +-0.16814 0.366484 +-0.538895 0.608786 +7.59933 9.00744 +0.938648 2.38471 +5.76934 6.16572 +8.20416 8.62505 +8.64542 8.7264 +2.75784 2.7828 +0.794451 1.97817 +9.21331 10.5156 +8.46671 8.80572 +3.94814 5.16845 +6.73654 6.97397 +4.05301 4.93008 +6.37833 6.77985 +7.21161 8.15994 +3.74993 4.61029 +-0.127938 1.09853 +2.82957 4.28816 +6.50564 6.59445 +8.37926 8.48332 +0.757443 1.74585 +0.232438 0.972293 +6.99187 8.7098 +7.20368 8.44301 +4.4801 6.07501 +4.34015 6.1495 +2.19394 3.22334 +7.29817 8.41021 +1.16627 2.68901 +4.62423 5.08039 +0.955655 2.22882 +1.45862 3.07065 +1.69815 2.56291 +4.01179 4.36587 +7.135 7.75829 +6.6823 7.27765 +5.44745 5.67195 +4.94594 5.42067 +0.267772 0.301939 +0.676432 1.6296 +1.37335 1.91645 +1.89051 2.38631 +4.84386 6.30539 +8.95613 10.944 +2.18119 2.41821 +5.74901 6.16952 +7.5431 7.88071 +9.05278 9.8128 +0.201334 1.65323 +2.82787 3.82083 +3.07073 3.08475 +8.99671 10.1766 +5.43261 6.12137 +4.83693 4.86848 +6.31804 7.21544 +2.34491 3.2562 +6.05941 6.53725 +-0.483381 1.17347 +5.53777 5.72651 +3.28875 3.47472 +3.94609 4.9418 +7.45585 8.6871 +1.50066 2.57215 +8.10112 8.67954 +6.24737 6.42635 +0.64413 1.05759 +7.1741 8.21476 +0.502722 1.77462 +0.783663 1.74174 +9.52704 9.9109 +-0.473873 2.01013 +7.07946 7.11474 +0.857335 1.6501 +4.00225 4.84453 +5.40598 6.30573 +8.18802 8.30067 +9.00412 10.9588 +9.8362 10.1517 +7.62735 8.37572 +3.41477 4.63099 +2.51254 2.81559 +6.36702 6.56061 +5.11842 5.35515 +5.21873 5.73296 +5.73528 7.77276 +3.64993 4.66826 +7.12664 8.46553 +8.7257 9.16851 +1.27615 2.20376 +7.46188 8.20752 +2.64939 2.66373 +4.94147 6.0509 +6.3805 7.48841 +6.25197 7.12327 +0.0885331 1.2682 +4.97356 6.58488 +4.11917 4.27267 +9.08793 9.70385 +0.897277 1.31702 +6.87538 8.25544 +1.55565 1.59492 +2.62483 3.54274 +1.49631 2.92263 +9.45305 9.97728 +6.24087 6.4577 +3.94636 5.13669 +-0.000956745 1.08235 +1.46134 1.83767 +9.18517 10.6601 +-0.740186 1.81269 +5.81977 6.15818 +7.0529 7.99421 +6.17753 7.49749 +8.63091 9.04205 +9.65219 10.1558 +3.12839 4.99211 +2.97262 4.07384 +4.28605 4.33171 +4.15906 5.6805 +1.35165 1.50732 +0.524207 2.12307 +5.32468 7.01472 +3.16982 4.87893 +6.88786 8.34191 +3.81703 5.22335 +3.86772 4.37359 +8.19386 10.0705 +1.73155 3.16695 +4.31685 4.62261 +9.40618 9.89612 +4.41215 5.19659 +2.35595 2.63543 +7.88481 8.14203 +7.17062 10.3534 +9.41379 10.389 +7.99867 9.01239 +3.31382 4.04915 +5.39222 6.07657 +8.5187 8.65976 +9.30132 10.6131 +7.17351 7.93596 +4.80134 6.72724 +3.59756 4.65182 +1.08248 1.17479 +1.03124 1.06871 +6.43154 6.95098 +-0.102199 0.59801 +4.94795 5.18081 +6.39126 7.30258 +1.52738 2.04271 +1.80373 2.33093 +2.72251 3.01677 +0.296722 1.10844 +6.39104 6.51567 +8.70965 8.78714 +2.07858 4.41695 +1.91027 2.9718 +1.42944 2.01864 +1.96347 2.73397 +4.0701 4.22456 +4.02859 4.05107 +7.10977 7.98092 +8.21148 9.54287 +6.59231 7.65109 +0.144191 0.830665 +2.0192 2.23704 +8.03482 8.39591 +8.90473 9.98543 +2.18284 2.70166 +3.05569 3.54238 +8.35319 9.39539 +2.00803 2.42866 +2.35282 3.13763 +2.20155 2.79377 +1.76531 2.94892 +7.52749 7.72567 +3.02266 3.24778 +4.01741 4.22521 +9.75263 9.91571 +6.45502 6.67838 +2.24912 3.47262 +1.84372 2.26517 +4.09559 5.71188 +1.43811 2.33732 +3.89171 4.16905 +3.01506 3.9725 +0.0273168 1.51766 +5.04118 5.80507 +3.08517 4.17316 +8.81637 8.8332 +8.74055 9.50143 +2.36904 2.69008 +6.39733 6.44221 +8.53272 9.51114 +9.48423 9.55002 +8.65645 9.04872 +6.66352 7.48009 +5.64389 7.88656 +5.75301 6.6759 +3.28645 4.22757 +4.99482 5.82988 +3.00004 4.0273 +1.45249 1.56662 +4.96263 5.32195 +7.91351 8.1437 +1.02034 1.56249 +0.71376 1.73319 +0.709968 1.44651 +9.01414 9.54799 +4.02116 4.68005 +7.10903 7.27075 +7.21322 8.71031 +1.6644 2.27186 +3.71304 4.68764 +9.66257 10.1452 +5.34477 5.46136 +9.27722 10.583 +3.82328 4.83316 +4.77019 5.07928 +9.07112 9.23836 +6.99091 7.25634 +2.11871 2.3054 +7.88242 7.98572 +0.570809 0.714073 +8.51532 9.49151 +0.329247 2.48897 +4.78202 5.36476 +1.47969 2.78867 +6.75011 7.36769 +2.31162 2.39533 +3.50434 4.48026 +5.84603 6.28861 +7.5337 7.62538 +1.09955 2.85741 +6.09915 7.20381 +0.933825 2.37925 +0.576363 2.0182 +3.12126 3.22507 +2.85313 3.02656 +3.25724 3.92077 +5.48575 6.58011 +1.02824 1.65415 +8.68703 9.06219 +3.28389 3.86349 +5.80264 6.12775 +7.11846 7.47444 +1.29638 3.38601 +6.37908 7.05986 +-0.592438 0.854361 +0.39233 1.17768 +2.1497 3.94423 +2.42336 2.43441 +6.94806 8.30626 +0.79865 1.4173 +1.41455 1.43684 +0.240074 1.16712 +4.18593 5.9929 +6.161 6.564 +0.726091 1.90706 +0.375606 0.694866 +4.09349 4.26452 +2.01652 2.68038 +8.99301 9.90549 +8.93909 9.17673 +1.10427 2.01247 +9.12668 9.15282 +1.08098 1.55374 +0.377836 0.414809 +7.28611 8.86318 +8.3542 8.53251 +3.86353 4.12875 +6.7631 7.40068 +4.61679 4.78182 +2.12935 3.45492 +3.68233 4.0457 +6.68131 8.22111 +8.79197 8.80474 +1.8915 2.26287 +0.387586 3.073 +6.46798 7.57381 +7.79742 9.34526 +-1.21538 1.67303 +2.07845 2.66028 +3.14148 4.46647 +1.66789 2.73375 +8.49821 10.0574 +8.42537 8.89906 +0.618349 2.72887 +6.8229 7.54501 +6.99343 7.35322 +7.34223 8.68781 +3.18834 3.98274 +8.86908 10.2535 +3.39839 3.76171 +0.188168 0.392276 +1.68187 3.53401 +6.50423 6.71714 +7.61191 8.89715 +1.68463 2.09275 +5.94627 7.6003 +2.15865 3.24126 +7.93639 8.53826 +2.99626 3.43273 +7.71028 8.41172 +3.19472 4.60878 +8.36123 8.92549 +8.92975 9.02783 +2.87187 3.49672 +6.76949 7.71139 +8.09121 9.31151 +6.84199 7.44009 +0.730655 0.800873 +7.5208 7.54109 +6.75992 7.55017 +6.09818 6.17399 +0.639209 1.27283 +3.01917 3.22327 +1.69181 2.60614 +9.49245 9.5842 +-0.418034 1.08035 +5.77705 6.4705 +6.79362 8.51993 +9.73155 9.81609 +3.71503 3.92022 +6.18589 6.77634 +3.94124 4.23942 +7.59911 8.05275 +3.68865 5.10948 +7.63926 8.63019 +-0.049855 0.0844425 +-0.41188 0.807786 +1.35962 1.81039 +5.40579 6.15098 +1.38594 2.0059 +6.93444 8.71958 +7.01229 9.38008 +-0.0974976 0.962679 +4.74131 6.59152 +1.02343 1.59245 +1.55629 1.9128 +6.28353 8.38021 +5.66349 5.79644 +1.72629 2.28563 +1.64539 2.82654 +0.359466 1.05106 +4.37569 4.82703 +5.87657 6.37853 +1.46316 1.65333 +7.44494 7.5985 +1.16846 1.98579 +4.43371 4.93234 +2.31838 2.47777 +7.52687 8.44423 +6.08056 7.42253 +9.16144 9.94783 +4.74382 4.95616 +0.248344 1.05335 +6.12345 7.43941 +9.45647 9.99799 +3.77124 4.75199 +3.31315 3.44873 +-0.0909828 1.51271 +7.03234 8.02546 +8.11403 9.11461 +6.734 7.34799 +1.08903 1.18319 +2.72871 4.31607 +6.53688 7.52754 +1.07868 1.27792 +6.28409 6.56795 +4.89866 5.79458 +9.06994 9.1221 +2.54989 3.14338 +3.69971 5.71717 +3.7113 4.55076 +8.91864 9.64522 +8.75634 8.82359 +9.02242 9.03869 +3.59945 4.20169 +4.98557 5.07401 +4.81526 5.74009 +7.264 8.63749 +2.79579 4.43389 +2.87204 4.66432 +2.32487 3.72127 +3.99704 4.72567 +8.17229 9.0158 +-0.72926 0.823658 +2.52355 3.32725 +5.3446 6.63868 +4.48935 7.37833 +3.08173 3.0968 +2.41585 3.23026 +9.23187 10.5413 +5.50099 5.51888 +1.29634 1.88846 +-0.0113225 1.41526 +6.34508 7.53417 +0.383019 2.25144 +5.0649 5.40222 +3.08221 3.76296 +9.29111 10.6833 +2.19714 2.94735 +8.75711 9.48583 +8.61564 8.69349 +1.9362 3.96191 +3.7962 4.44382 +7.78501 9.03843 +5.79649 7.29675 +6.03048 7.4316 +1.31105 4.36446 +6.5882 7.03622 +4.88148 7.12474 +6.62305 6.90973 +2.27488 2.73731 +8.42703 9.28888 +7.72928 8.53989 +7.27021 8.63879 +0.992908 1.92001 +-0.282737 0.511292 +7.88963 8.03117 +6.93371 8.26148 +-0.0346633 0.403617 +8.7827 8.82558 +5.16876 5.59742 +8.61275 8.73843 +5.70578 6.02783 +9.08706 9.35903 +9.32728 9.83021 +9.20058 10.2497 +6.79824 7.3024 +7.17979 7.51783 +0.918555 2.67878 +7.9662 8.63241 +8.85903 10.3145 +9.34614 10.1964 +9.05027 9.79872 +8.28959 8.45837 +1.32518 2.04557 +8.72848 9.16742 +5.92126 6.77277 +8.31504 8.78631 +1.02487 1.70172 +4.45204 4.72842 +8.20636 10.4724 +5.86211 6.25457 +6.15754 7.71303 +8.37832 8.82577 +4.25233 4.59417 +9.41451 9.95324 +9.372 10.4461 +1.8346 2.7144 +8.00681 8.14717 +7.03997 7.06753 +7.16892 7.70102 +7.01781 7.46799 +1.78526 1.7969 +1.63304 2.2011 +8.59718 8.61083 +9.43498 10.3636 +4.98718 5.32487 +3.65451 4.89601 +8.82368 9.11333 +-0.104862 0.598773 +4.97756 5.62342 +1.99876 3.24686 +2.32242 4.01096 +4.04914 4.77892 +3.81545 4.32583 +3.30153 3.46783 +3.14287 4.04718 +8.65711 8.76768 +9.09385 10.6898 +4.82771 5.64405 +5.98783 6.36785 +7.93397 9.6543 +4.89726 5.65486 +5.08717 5.22314 +6.59377 7.23748 +3.58289 3.98597 +0.177884 0.397629 +5.30856 5.79257 +2.53943 3.98007 +6.51217 6.59644 +0.196888 1.99904 +3.8709 4.1901 +2.37646 2.50997 +7.03837 8.13287 +6.8674 6.89535 +0.576964 2.08851 +0.902928 2.86981 +8.59261 9.20279 +5.96621 7.49899 +0.617602 1.83267 +2.29189 2.6361 +4.34207 4.61026 +6.19963 6.76443 +1.15955 1.44068 +5.25852 6.33905 +6.37306 7.53103 +9.13334 10.039 +8.67743 9.93959 +5.62973 6.04375 +8.32286 8.77042 +3.28772 6.1722 +4.97902 5.47249 +3.37765 5.07238 +4.58025 4.84341 +2.76807 3.18817 +4.27581 4.43023 +6.92572 7.68461 +0.279247 1.0561 +1.10903 2.61106 +6.71708 6.73132 +2.66415 3.75702 +8.0513 9.80334 +4.82466 6.04232 +2.59971 2.85768 +9.04689 9.73945 +3.48338 5.16622 +7.90925 8.92774 +7.30264 8.06247 +7.59087 8.26476 +0.150315 0.423068 +8.62726 9.74636 +9.01983 9.71707 +6.84007 7.40541 +8.87829 9.48342 +2.69214 3.71481 +0.580036 0.77289 +9.474 9.83397 +5.80151 6.08527 +3.63837 5.27137 +8.5848 8.65779 +7.88338 8.13276 +3.27992 4.20963 +6.21244 7.28079 +-0.348924 1.38478 +5.26688 5.93787 +3.78941 5.01009 +6.41929 8.38529 +1.41724 1.67733 +0.212821 1.58246 +0.0697189 0.160497 +9.57839 10.2377 +9.03332 9.70645 +4.94572 5.15163 +3.16999 4.536 +5.77494 6.68359 +5.89258 6.11852 +7.72257 8.21668 +8.42501 8.44905 +8.7196 8.86465 +4.392 5.1076 +1.88249 2.54422 +1.38092 1.60326 +5.04142 6.37374 +4.31795 5.91152 +1.79399 2.09314 +6.65405 8.32262 +1.36356 1.58538 +5.45456 6.55824 +4.95807 6.22848 +8.72077 10.2825 +0.745968 2.01546 +6.85041 7.11076 +4.82028 5.34442 +5.77673 8.01294 +8.58582 9.33714 +8.49884 9.21533 +9.05574 9.4096 +3.19932 3.27024 +9.50227 9.96685 +0.771636 1.0617 +9.00621 9.36397 +-0.097167 1.39463 +7.79622 8.43537 +8.05228 10.1504 +2.21685 4.17072 +1.82476 2.45381 +4.34408 4.56578 +9.27538 9.54701 +6.80153 7.44115 +7.38884 7.84448 +7.17526 8.00165 +5.85812 7.67326 +5.25545 6.30791 +5.68518 5.94055 +3.77685 4.1545 +0.530928 0.737248 +3.9772 4.59563 +8.96322 9.45618 +7.98322 8.44165 +3.42929 4.22329 +3.66445 4.7583 +-0.183652 0.434842 +3.16492 3.95726 +6.87407 7.89944 +5.08921 5.7745 +2.85466 3.04505 +7.12685 7.41248 +0.715419 0.876676 +3.47441 5.21753 +9.13594 9.87799 +5.52459 6.35691 +5.12544 6.12935 +2.44296 2.91543 +2.75148 4.19886 +1.43478 4.3919 +6.6352 7.07768 +4.72283 5.11506 +6.36434 7.69268 +2.32643 2.75289 +5.46566 6.22854 +6.37995 6.76989 +1.52564 3.55871 +1.05807 2.19393 +1.95374 4.08727 +8.11273 8.12767 +2.85955 4.71355 +4.89009 6.88516 +2.06859 2.25512 +7.50556 8.77923 +4.43353 5.11915 +5.16308 5.9695 +1.12072 1.69277 +3.96494 4.38143 +7.06931 7.89524 +0.514522 1.51265 +6.56389 7.01146 +1.51362 1.8541 +4.90339 5.51209 +2.11422 3.15457 +2.50094 3.92557 +8.24319 8.62826 +-0.0843505 0.710377 +6.35956 7.89457 +-0.790954 1.2964 +4.02253 5.19193 +2.7425 3.46763 +9.41469 10.1367 +1.57636 2.25105 +3.18647 3.38738 +8.36644 9.66791 +0.180846 0.461221 +7.07675 7.71881 +0.265366 1.19275 +5.43007 6.4854 +9.13912 9.23294 +9.52905 10.4029 +1.18712 2.66227 +5.22714 5.62601 +1.87413 2.8716 +5.71882 6.16374 +5.38169 6.13948 +-0.196005 0.236738 +5.36803 6.4395 +8.27713 8.71262 +8.82031 8.8598 +-0.53845 0.564783 +1.80716 1.94173 +5.67905 7.47291 +2.37779 3.64893 +0.574727 0.766424 +4.60701 4.86591 +3.17989 4.37738 +1.36777 3.15112 +1.48092 3.06573 +3.37009 4.06028 +4.17179 6.2073 +6.47953 6.88994 +5.74431 6.5253 +4.88827 5.49049 +5.44148 5.59239 +1.66153 2.63132 +7.69387 7.82267 +5.20911 5.48488 +-0.103218 0.497402 +7.18003 7.33324 +6.54305 8.81732 +0.278108 1.27452 +2.38323 2.94772 +1.2461 2.03246 +5.47052 5.75781 +7.31505 7.35895 +2.22248 4.23589 +0.0305319 0.430773 +8.32043 10.1222 +6.11732 7.09764 +5.08797 5.74991 +6.62491 7.34164 +5.55795 5.66083 +3.27549 4.13145 +1.0113 3.24631 +0.0717186 0.519738 +7.82905 9.30839 +9.90251 9.98691 +0.841457 0.952276 +-0.133927 0.510174 +1.14614 2.82218 +2.59767 4.19742 +3.41095 3.95265 +3.38951 3.75838 +8.86766 9.19437 +9.27927 10.261 +2.33249 2.79402 +5.69681 5.93469 +4.02502 5.38732 +0.797157 1.22845 +7.23558 7.8651 +1.1253 1.99184 +8.58296 8.64267 +-0.400141 0.74698 +3.46677 3.50526 +6.03252 6.64842 +5.8493 6.68938 +3.53209 3.84014 +7.22078 8.98106 +6.21943 7.69944 +0.887198 2.07323 +3.36591 4.57442 +4.30143 6.41179 +4.07556 4.54276 +8.77552 10.0615 +6.7247 7.04044 +9.05494 10.1126 +7.46604 7.80632 +3.38601 3.8043 +5.60475 7.02788 +9.09811 9.4654 +9.33447 9.80012 +8.66499 10.1002 +3.87007 3.88281 +2.87624 3.11359 +5.92385 6.80801 +4.49711 5.01863 +8.84524 9.36225 +6.40944 6.82093 +2.90915 3.68288 +3.96801 4.82534 +5.51744 5.84233 +3.2959 3.44409 +0.18526 0.207322 +5.49717 5.72648 +6.9522 7.1952 +0.769572 1.79343 +5.95522 6.03918 +6.54327 7.7475 +2.13516 3.83957 +-0.388892 0.775076 +1.30128 2.29414 +9.76761 10.1604 +7.38731 8.66002 +7.09229 7.43495 +9.1379 9.52432 +6.75942 7.88717 +7.42824 8.82063 +6.93078 8.19884 +2.307 2.93836 +8.38254 8.84691 +3.90159 5.37938 +0.0413204 0.112203 +0.638217 1.53943 +0.88678 2.49435 +1.99104 2.60847 +6.61595 7.65064 +2.37641 4.71719 +7.94945 9.21404 +5.44594 7.13646 +5.45737 6.12335 +7.39207 8.02885 +5.51588 7.39341 +8.1581 10.0632 +0.197869 1.44516 +-0.0161139 0.73487 +4.24155 4.7304 +0.00374564 1.26481 +8.1878 8.20011 +-0.115544 1.74771 +0.912347 2.52922 +2.72234 4.83268 +6.45577 7.07776 +9.74201 10.1772 +7.11008 8.72914 +4.41921 4.8673 +7.97673 8.36658 +0.438659 0.647061 +4.35086 5.44482 +8.22919 9.34379 +3.53242 5.65576 +1.126 2.32177 +5.95118 6.51364 +3.10519 3.9447 +1.28889 2.26267 +7.04255 7.67791 +3.12614 3.17626 +8.09968 8.49162 +6.07924 7.219 +5.99554 6.52549 +9.14378 9.5773 +5.82872 6.53112 +9.3361 10.1704 +4.3751 6.51675 +3.288 3.98328 +4.56342 4.80185 +7.16574 7.43901 +7.7638 8.47758 +7.31514 7.78499 +7.98942 9.50252 +4.31211 4.70724 +2.9094 3.33304 +0.108736 0.668815 +8.08409 9.11098 +-0.0053985 0.589992 +1.31926 2.72153 +2.28664 2.38813 +7.95237 8.26388 +-0.0283047 0.452099 +7.50295 8.71708 +7.72356 8.63468 +3.48953 3.89579 +7.73814 8.73456 +4.54487 5.45817 +6.45109 7.00312 +3.99915 5.41716 +6.81436 8.5682 +6.86726 7.55999 +2.67863 3.7053 +2.6837 3.39567 +2.84347 2.91724 +5.79383 5.80493 +2.41217 3.0619 +8.78163 9.0998 +1.43456 2.50854 +6.73393 8.53005 +3.02563 3.56456 +3.34628 4.2934 +2.44985 2.92819 +1.38262 2.89341 +4.56337 5.75702 +0.275735 1.16604 +1.39763 2.8108 +9.69128 9.90361 +8.54868 9.66756 +3.01838 3.72831 +8.34017 10.5262 +1.82721 3.0476 +5.9732 6.83307 +2.77874 4.25603 +1.71987 3.1227 +6.33773 7.89103 +1.31982 2.82992 +4.21601 4.9627 +6.68166 6.72653 +0.87708 1.06828 +1.03483 1.26625 +2.996 4.03087 +1.54718 1.57452 +2.33087 2.38226 +2.29464 3.36496 +2.03064 3.41867 +5.8456 6.10406 +7.54614 8.2874 +1.42938 2.89154 +2.65935 3.53883 +3.98845 4.42049 +6.85632 7.15487 +8.12038 9.34993 +0.873558 1.32129 +6.61595 8.00766 +9.49147 9.81947 +-0.0225601 0.328769 +-0.481519 1.37204 +6.31457 7.45251 +4.59738 5.81395 +4.83304 5.63008 +1.95746 2.78657 +2.97889 3.74408 +9.08327 10.702 +3.58219 4.93634 +7.87068 9.77851 +0.330978 1.36031 +4.78145 5.36918 +4.94672 5.56644 +7.66806 8.08613 +4.78512 6.35461 +5.17367 5.74386 +8.65884 9.97088 +9.22053 9.60447 +6.15061 6.58817 +0.0875971 0.541643 +6.45597 7.92002 +0.636824 1.05267 +5.31677 6.12838 +6.51127 6.6731 +0.459551 1.69382 +5.75106 6.41377 +3.68438 4.67415 +9.36302 9.78281 +5.46195 7.99215 +2.55471 2.59231 +-0.0640245 1.33755 +9.36027 10.6198 +2.67955 2.77882 +3.51443 4.10619 +6.83904 7.23692 +2.59553 2.81418 +7.74628 8.95169 +3.86464 3.90067 +3.32377 3.992 +1.43737 2.52191 +3.83927 3.99402 +5.24426 5.35179 +0.833857 1.05277 +8.4062 8.51964 +9.62299 9.66254 +3.55427 5.19048 +1.7003 2.62107 +6.8059 7.49246 +-0.761104 0.773528 +1.37137 1.95048 +2.1222 2.59387 +0.633505 2.04796 +0.605156 1.04336 +7.22842 8.3365 +4.28716 5.28921 +8.14286 9.52015 +7.62467 9.18603 +1.11029 1.81278 +5.05654 5.13597 +0.862653 0.97827 +7.24766 7.92167 +8.80103 8.91467 +3.05841 4.82292 +1.28204 1.55969 +1.58886 2.57874 +0.0537678 1.28837 +8.09303 9.71678 +8.37599 8.85705 +3.18107 4.01971 +6.67019 7.75848 +6.29836 8.21603 +0.86271 1.30358 +3.86126 6.49694 +5.84446 6.24913 +0.475025 0.598151 +6.3477 7.08327 +3.60161 4.51824 +7.13317 8.13858 +4.89052 6.23701 +5.69441 5.99027 +7.18735 8.34853 +9.30182 9.34894 +6.06589 6.15141 +8.05917 8.89642 +5.6136 7.14058 +0.838337 0.959487 +0.56421 2.00841 +6.46876 6.63629 +2.4434 3.92184 +7.97216 9.45372 +8.17926 8.66756 +1.86522 2.01888 +0.983342 1.89079 +2.07322 2.09765 +3.52974 4.73717 +3.24973 4.88691 +5.47789 5.95384 +4.11218 4.57076 +6.61174 7.47165 +8.09302 8.36193 +1.67911 1.69022 +4.436 6.17515 +5.6544 5.74951 +1.50354 1.76043 +4.41433 4.83589 +1.82528 3.53979 +3.98749 4.65527 +6.42503 7.5787 +8.69554 10.1767 +8.39215 8.56999 +8.71646 9.66209 +1.59091 3.39622 +6.12574 6.94955 +7.92527 8.25049 +9.19858 9.49137 +2.73382 2.97747 +4.56558 5.94738 +8.33983 8.58548 +9.00798 9.01838 +4.93268 5.28383 +3.15356 3.58606 +8.28171 8.79351 +1.47358 1.9581 +0.891797 2.05345 +1.56032 2.38159 +2.5152 3.80485 +8.0963 9.88138 +1.1262 1.89279 +7.99336 8.2352 +5.25067 5.41251 +4.57532 5.20101 +1.87911 4.59415 +4.25142 4.70467 +8.18782 8.76989 +9.20478 9.3612 +7.70898 9.7752 +0.655865 0.958924 +4.8883 5.77477 +3.03279 3.47456 +1.01979 1.41661 +8.94219 10.6987 +2.49348 4.58195 +2.44003 3.29005 +3.4725 3.55572 +9.3917 9.95851 +7.08658 7.47686 +3.56413 4.44089 +-0.47868 1.11453 +6.82615 8.00596 +3.49451 3.74705 +8.13286 8.47976 +7.01732 8.82556 +1.19064 1.48887 +5.28851 6.88637 +8.83175 9.49879 +0.939903 1.17024 +7.49124 9.01906 +2.9285 4.23224 +5.68296 6.86273 +8.53897 8.77886 +2.9107 5.01232 +0.748655 1.10265 +4.77258 5.12626 +3.995 4.75289 +2.71467 4.26926 +6.21665 7.16233 +4.53883 5.75731 +4.37153 4.76125 +7.47635 8.75777 +4.82013 6.4699 +9.36015 9.58451 +4.43054 5.86752 +2.10934 2.34705 +3.00306 3.06539 +7.81957 8.44081 +1.97221 3.06916 +0.153393 0.503956 +5.05611 5.27536 +5.73277 5.89001 +3.64807 4.85582 +6.13416 6.1528 +3.85511 4.14045 +0.411725 1.36529 +2.26932 2.5447 +3.51164 4.93266 +2.50955 4.34201 +8.74663 9.39268 +6.2229 6.39303 +4.38059 4.91592 +7.29109 8.62318 +6.31801 6.99532 +9.75036 10.0514 +1.69019 2.41527 +4.20462 5.27729 +6.32944 6.94729 +3.5736 5.21496 +4.48316 4.61828 +1.76915 2.43263 +2.42026 4.09159 +2.08762 2.43074 +5.48161 6.02473 +5.51826 7.47042 +2.78026 3.1552 +7.89469 9.49867 +3.09084 4.54697 +7.20417 7.42408 +5.36528 5.74851 +1.86239 2.41988 +1.55994 2.85743 +4.40182 4.6638 +7.91619 9.01242 +3.08119 3.74714 +1.54108 2.08538 +3.61461 3.64631 +8.76851 9.66257 +-0.645571 1.3366 +-0.707083 1.21005 +7.19571 8.23405 +5.42865 5.89329 +2.12897 2.59222 +0.603102 0.930391 +3.75025 4.63181 +6.14867 6.4526 +7.30947 7.51461 +7.83183 8.79802 +6.06658 8.53246 +1.67895 2.50063 +1.14179 2.04478 +8.59583 8.90112 +-0.918885 1.30717 +0.182607 0.613593 +3.3335 3.77196 +0.783053 2.4368 +6.49331 7.60104 +2.85101 3.28637 +7.42273 7.66905 +3.96433 5.02573 +8.26262 8.40749 +9.24451 9.32783 +4.89036 7.07214 +6.45431 6.96815 +5.20701 6.58747 +7.40142 7.98615 +4.19768 4.9831 +3.32546 3.88811 +-0.471996 0.967855 +9.36172 9.63532 +1.96831 3.00632 +7.537 9.72671 +4.67746 4.81135 +3.10782 4.93642 +4.94809 6.54855 +4.16763 5.25628 +9.04992 10.316 +0.668935 0.680886 +4.02935 4.84503 +5.32499 5.76636 +5.32267 7.15457 +5.18886 5.23491 +4.37053 5.36801 +2.39955 2.74657 +8.19764 8.86645 +4.24706 5.69703 +1.87851 2.36988 +0.886553 1.05064 +7.27428 7.90224 +9.08417 9.44879 +3.11534 4.02019 +6.3284 7.39925 +4.96029 5.59076 +2.58248 3.11741 +7.76513 8.13505 +4.93613 6.51523 +0.565355 1.70512 +2.12366 3.0319 +5.32422 6.84146 +-0.135396 1.08591 +3.7901 4.86303 +4.49677 5.41847 +0.615748 0.834712 +0.64784 1.81859 +6.65505 7.13894 +-1.12744 1.61017 +0.550814 1.24316 +6.66639 6.89866 +6.19271 8.17468 +3.09382 3.78684 +4.41221 4.95889 +7.96091 8.48824 +8.32129 10.2917 +2.13168 2.19835 +1.4635 2.38989 +5.78102 6.42215 +1.70153 3.20616 +5.35068 5.71016 +4.27702 4.37203 +5.13888 6.04764 +4.79644 5.37927 +6.75314 7.66368 +6.04484 6.84064 +4.34947 4.45643 +9.08755 10.396 +0.88804 2.17441 +6.86788 7.88301 +7.94296 8.61664 +8.02387 8.79591 +1.79024 2.40559 +5.50404 6.01044 +7.76772 8.1932 +1.174 1.23693 +6.20571 6.9224 +4.20863 4.48702 +4.16743 4.39075 +-0.11965 0.120778 +7.01234 7.52619 +5.91415 6.46151 +5.28713 5.72354 +6.26981 6.31237 +0.643056 1.43864 +1.62562 1.99875 +0.544992 0.721386 +6.92522 7.09165 +-0.107048 1.12273 +0.644674 0.91244 +8.56904 9.01883 +2.23079 2.56598 +9.79034 10.1123 +8.13788 8.4131 +1.86753 1.95236 +2.97577 3.33272 +8.57454 10.0193 +1.20043 1.53408 +3.43515 3.86571 +5.79075 6.41293 +1.71558 2.52845 +2.39907 3.46652 +9.08289 9.91182 +0.859644 1.07475 +5.30144 5.42157 +-0.441497 0.890794 +3.55044 4.14918 +-0.340115 1.19239 +6.5534 6.76908 +0.836514 2.09196 +8.15747 8.96484 +4.80087 5.14227 +7.72071 8.88223 +5.11901 5.65559 +4.44996 4.63562 +-0.328404 1.3002 +0.90759 1.34556 +5.94839 6.35058 +1.76504 1.78344 +1.32585 2.08994 +7.18641 8.20945 +0.62657 1.06025 +6.28086 6.40975 +5.05525 5.16143 +5.82694 8.07685 +6.23677 7.55394 +-0.226265 0.661443 +1.42599 2.36325 +9.04445 9.92971 +-0.169286 0.185741 +8.34636 10.9042 +9.52494 10.0475 +8.39989 10.1377 +3.89956 4.70428 +3.98673 4.97185 +5.43008 5.67936 +7.76475 7.98591 +4.46895 4.73188 +0.584662 1.54474 +2.12622 2.79994 +1.40578 2.2461 +1.45171 2.02105 +2.05665 3.04611 +2.29818 2.68118 +1.77344 2.98698 +4.92092 5.55302 +7.18758 8.37525 +8.83407 10.0565 +2.91182 4.71932 +6.47293 6.74664 +2.49238 3.69749 +0.487234 0.541003 +4.703 4.92744 +9.8867 9.94918 +1.7713 1.9792 +5.68316 6.90242 +5.62485 6.70656 +7.24837 9.60197 +7.71147 7.76519 +5.22324 5.30661 +9.11258 9.28071 +8.2827 8.90115 +8.90865 9.42138 +7.47233 8.72308 +4.89712 5.65153 +4.12392 4.20239 +5.65325 6.55887 +8.65945 9.05845 +7.9165 8.36489 +1.4952 2.43991 +5.49665 5.80793 +1.67206 2.55302 +0.943544 1.58521 +0.47 0.860959 +6.47638 7.43101 +4.38434 5.97278 +8.12782 9.10574 +5.78143 6.6539 +9.23616 9.40513 +1.6845 2.00736 +6.56955 7.37847 +7.42993 9.04718 +-0.179632 0.450904 +8.65819 9.07724 +7.86567 8.80824 +1.85428 2.7755 +2.29222 2.65374 +4.03614 4.51729 +6.9326 7.07635 +5.50807 6.498 +6.17637 7.26432 +8.7688 9.16308 +7.65 8.88604 +3.74495 4.29991 +8.5671 10.5661 +7.41964 8.21083 +8.04302 9.78783 +0.269663 0.317601 +8.29804 9.40991 +3.90673 4.22298 +8.82384 10.9441 +7.27081 8.19548 +1.30184 1.98993 +8.13028 8.92385 +7.21224 7.35137 +5.02122 5.69666 +0.817219 0.974073 +-0.128067 0.589359 +2.12137 2.74019 +5.24657 5.44714 +1.55805 3.10332 +9.91031 10.0748 +7.13941 7.9143 +-0.183908 0.934079 +3.987 4.11053 +3.26678 3.67608 +9.75921 10.1121 +0.755391 1.06346 +7.28479 7.49982 +1.37522 3.80623 +0.944351 1.46531 +9.49278 10.2372 +8.28946 8.67597 +9.43537 9.58003 +7.73357 8.756 +2.64043 2.8687 +4.70448 6.99929 +3.82199 3.89343 +3.43825 4.10908 +4.42362 5.69086 +8.08536 8.60142 +8.43208 9.31272 +7.5889 8.39208 +7.90112 7.9734 +6.10381 6.80568 +8.76283 8.80151 +1.46728 2.53288 +1.68884 2.47102 +7.63343 8.29838 +9.18852 9.5558 +0.977174 1.4792 +4.7577 5.74873 +4.66433 6.37375 +-0.0952277 0.378184 +5.30929 6.07469 +4.98811 5.16146 +3.0744 5.59799 +0.944909 1.25222 +1.38561 2.51277 +3.77811 4.23459 +2.11604 3.32458 +0.920929 1.17187 +5.23496 6.34905 +6.9953 7.65745 +4.81803 4.89553 +4.69301 5.36777 +-0.208926 2.6111 +7.97334 9.83269 +-0.396673 0.779988 +5.91367 6.47682 +6.27249 6.83533 +5.58931 6.89679 +2.03394 2.67025 +-0.197752 0.383167 +4.69751 7.695 +4.5989 6.07875 +3.7285 4.27396 +7.9807 8.27693 +-0.00248985 1.30934 +2.68016 3.916 +0.881558 1.14567 +4.77066 5.05302 +0.552268 0.919467 +2.46862 2.65199 +1.4009 2.51701 +-0.171185 1.28252 +9.27842 9.90243 +3.51778 3.57728 +6.10071 6.92163 +9.05387 10.0894 +5.52995 5.89082 +8.40216 9.0272 +9.02911 10.1602 +4.85818 7.38829 +1.6762 2.32334 +6.45416 8.62337 +5.44592 6.0245 +3.45876 3.94274 +9.07144 9.16725 +6.51885 7.6363 +7.92593 9.01986 +0.270702 1.57395 +6.11245 6.70173 +1.37658 2.19068 +2.42668 3.43827 +7.98226 8.43306 +3.72269 4.74654 +8.16252 8.58873 +8.81456 9.5363 +-0.338386 0.864811 +1.90693 2.25796 +3.5305 4.17475 +6.07997 7.67393 +0.53347 1.68815 +7.31182 8.44458 +7.77462 8.33613 +3.79975 4.15552 +9.08822 9.9771 +-0.101698 1.05442 +8.44869 9.95724 +-0.0318759 0.532673 +8.09238 9.51356 +5.51514 6.60799 +8.66528 10.3297 +8.25556 9.97893 +-0.220428 0.247563 +0.00453913 0.540444 +1.53599 1.61735 +3.77213 5.06896 +2.65332 2.75864 +6.05811 6.43112 +0.302534 0.803651 +0.393766 1.11611 +9.31035 9.62387 +0.568281 1.7765 +-0.721118 1.27387 +1.83573 2.62578 +1.39953 1.91158 +6.51883 8.52813 +2.60154 2.95054 +6.58322 9.37818 +5.61178 5.67661 +9.56511 10.2767 +9.09174 10.0697 +2.55846 3.39943 +8.38146 9.06138 +7.97019 8.18074 +6.1426 6.42787 +1.15876 1.55463 +2.93483 2.96376 +7.23883 7.29158 +9.64606 10.0674 +4.89825 6.70366 +7.35635 7.96328 +2.2702 2.36797 +-0.0464389 0.395244 +1.14883 2.10411 +4.7309 5.10593 +6.07946 7.37741 +5.50202 6.28822 +3.66574 3.96271 +1.9944 2.3862 +7.58159 7.59275 +1.98712 3.30587 +2.10317 2.89161 +9.66889 9.97287 +1.57327 2.15421 +8.14125 8.30983 +3.77185 4.12658 +8.51624 9.51485 +9.25211 9.722 +2.06312 3.0453 +9.34954 9.91254 +7.31475 8.89322 +7.85044 9.20242 +0.226243 1.28465 +0.0260868 0.575177 +9.40743 10.1655 +4.04324 5.05341 +1.02626 1.48332 +3.33074 3.72025 +9.2005 9.61387 +6.68317 7.14109 +6.82083 8.6312 +4.34816 4.50329 +-0.48874 0.975608 +4.26651 5.68526 +4.89731 5.57569 +2.68984 3.5661 +0.499714 1.01055 +9.01902 9.36142 +3.22067 4.59054 +0.65132 0.860512 +1.6791 2.36642 +8.28222 8.7579 +2.84349 3.24134 +5.64949 6.09512 +3.44026 4.43245 +2.60889 2.6248 +-0.00849234 0.984046 +7.5745 8.65675 +2.07464 2.6488 +2.59747 2.65772 +6.36828 7.42208 +3.83342 4.50127 +5.41167 5.7011 +6.53606 7.53796 +8.21975 9.56176 +1.90113 3.08684 +7.74402 7.82057 +4.26515 5.11327 +5.42743 5.59215 +8.69709 10.0912 +2.87019 3.94798 +9.27013 9.54627 +9.30568 10.2136 +9.02985 9.62917 +3.7589 4.59642 +6.59359 6.86939 +3.26574 4.83488 +5.14545 7.70086 +7.43163 8.05103 +5.72972 5.74457 +0.490113 1.31151 +7.018 7.42627 +6.22976 6.27589 +9.07732 9.30419 +4.3917 4.42663 +8.50298 10.3728 +6.18671 7.53619 +3.51053 4.097 +2.17172 3.56595 +6.08046 6.23691 +9.07361 10.9129 +3.95757 4.11333 +-0.136516 0.78995 +1.34923 3.47002 +0.0562579 0.686502 +9.10943 10.2731 +5.80174 6.16971 +7.86011 7.87649 +5.34384 5.51645 +6.32167 6.76387 +7.70566 8.28038 +-0.319903 0.867682 +-0.372564 0.570014 +8.83696 10.8439 +7.78947 9.38211 +9.25815 10.1092 +5.59721 5.67148 +0.234719 2.42489 +1.06314 2.87416 +1.75391 2.69799 +5.4536 6.66068 +1.35696 1.87102 +2.17418 3.1459 +7.61817 7.98287 +2.92194 3.18393 +7.68243 7.83261 +9.33163 10.5531 +1.14227 2.50228 +5.47911 5.70857 +9.88123 10.0758 +8.81249 8.83145 +6.02747 6.43183 +4.81158 5.79178 +6.65666 7.5047 +4.89085 5.56569 +0.935564 1.71547 +-0.0452879 1.16222 +4.03524 4.6206 +5.88518 6.02658 +2.06227 2.9581 +0.207246 2.2404 +2.81757 3.70318 +0.704257 1.98403 +2.38486 3.30039 +3.57073 4.78358 +1.53721 3.00546 +8.37852 8.39527 +1.54619 1.59789 +1.00447 1.40778 +5.31977 6.43861 +3.82175 3.83209 +3.37738 4.44002 +5.46644 5.97254 +3.88191 5.00688 +4.88046 5.39031 +4.15092 4.93679 +1.75182 2.07399 +1.16434 1.76541 +3.37032 4.29676 +3.1685 3.98533 +1.28787 1.59775 +5.86338 6.17993 +3.8645 4.25757 +1.83947 2.48092 +0.184795 0.586724 +3.13752 3.76447 +2.14264 3.03248 +5.78182 5.9029 +2.47969 3.8088 +2.59206 3.08362 +-0.354871 1.03627 +7.94041 8.05947 +9.48014 9.93817 +0.992727 1.48877 +6.1525 7.51387 +5.00071 6.15665 +7.42074 8.27606 +9.6539 9.83042 +1.08984 1.46387 +5.46282 6.95907 +4.74506 5.13968 +0.357565 1.91464 +9.07652 9.65474 +0.201095 0.646211 +7.04306 7.69131 +1.17728 1.2237 +5.92183 6.29165 +-0.41356 0.491524 +8.38339 10.4509 +8.08648 8.11344 +3.32474 3.39522 +5.762 5.83732 +2.26778 2.55548 +4.86127 5.92868 +3.75949 5.16608 +4.83431 5.88632 +2.65122 3.31344 +9.30295 9.38948 +6.03391 6.32749 +5.12035 5.59414 +5.68785 5.979 +7.89553 9.15202 +2.54445 2.74715 +2.36337 2.49709 +4.71661 6.12198 +3.72447 4.68735 +1.0541 1.53187 +3.45178 4.80929 +7.90773 8.26212 +8.1816 9.18627 +0.322569 0.871041 +7.24823 7.32699 +1.7003 2.78087 +9.70927 10.2515 +3.75922 4.01081 +1.06949 1.40253 +1.21774 1.4734 +6.02123 6.32973 +2.76396 3.09484 +2.80358 3.00026 +5.25666 6.31369 +4.71714 5.30669 +4.37906 4.50557 +7.40824 7.44969 +7.89081 9.18263 +8.8136 10.3074 +9.1757 9.37261 +7.1938 8.51137 +0.580081 2.32678 +2.02497 2.95434 +6.01446 6.78851 +8.54365 9.21454 +3.03567 3.27089 +0.650657 1.5716 +5.05518 6.36521 +1.64301 2.76399 +4.15989 4.34183 +3.72791 3.98156 +3.91372 4.06182 +3.04507 3.88871 +3.82596 4.25694 +3.36492 5.00402 +6.50019 8.17974 +3.54621 3.81009 +0.546921 2.09811 +5.1789 5.9826 +4.98983 6.31221 +2.47557 2.63878 +4.64568 4.81101 +9.1462 9.21888 +7.37417 7.5276 +2.21604 2.50113 +8.29804 10.2722 +5.1282 6.06353 +8.58281 10.1589 +6.47084 7.04085 +6.27806 6.72674 +7.11554 7.85687 +6.01085 6.02773 +5.46694 7.52872 +9.51078 9.85387 +3.36627 4.06552 +2.96126 5.12635 +3.09314 3.40691 +5.05456 6.62548 +7.56469 8.97053 +1.33727 2.87482 +5.6572 6.28169 +0.120924 0.296475 +7.09139 7.41322 +2.10076 3.28507 +8.74998 10.1094 +7.45072 9.50796 +7.75294 8.59218 +0.740374 2.44897 +7.63001 8.91562 +4.30743 4.81716 +6.40813 7.29159 +6.30213 7.35987 +6.44392 7.32584 +8.41155 9.4466 +-0.377892 0.689618 +5.88857 6.70983 +6.67779 7.70668 +4.831 5.17464 +2.62342 3.82764 +8.57453 9.29283 +7.32648 7.96725 +9.32937 9.9726 +7.30774 7.65754 +3.97456 4.59876 +5.73092 7.20962 +1.958 2.10551 +3.2115 3.81482 +5.76497 7.42425 +2.77219 3.29692 +4.95297 5.14843 +5.96367 6.3619 +2.49872 4.61736 +8.21817 8.23425 +2.13615 2.61877 +7.84121 9.55011 +8.63416 10.2773 +5.61084 6.32053 +4.86002 5.79944 +9.07858 10.688 +5.95829 6.42504 +3.3289 4.17849 +3.27989 4.91625 +8.28046 9.23021 +2.18691 2.6072 +1.3962 1.75013 +2.13627 3.73117 +2.11128 2.57303 +7.22357 7.50136 +7.43862 8.03136 +2.80578 3.02886 +0.176906 0.761142 +5.99314 6.6075 +1.90398 3.3925 +5.48264 6.73579 +7.18447 7.49811 +3.24434 5.05219 +5.53263 6.04178 +1.71172 2.45682 +0.297266 0.481632 +2.62582 3.36142 +0.243865 1.49321 +8.86142 10.169 +3.93193 4.39404 +4.98182 5.15675 +7.99209 9.73159 +8.18033 9.45596 +4.25235 4.41546 +1.59603 2.15581 +6.47724 8.69649 +5.24138 7.93131 +3.4267 3.49003 +0.0439912 0.316407 +1.99983 3.87206 +-0.103124 0.568771 +4.62451 4.80117 +2.89065 4.16315 +5.82817 7.43232 +6.89255 7.82189 +5.71037 6.81241 +4.34551 5.24905 +7.33931 7.3741 +-0.855192 1.27129 +8.94842 9.10813 +9.19877 9.68412 +6.42658 7.77968 +-0.0669636 0.430107 +6.40366 7.40701 +8.91175 9.24059 +3.21388 4.21676 +3.38557 3.79509 +4.24411 4.97032 +7.259 7.34896 +2.55995 3.18361 +8.77438 10.5503 +8.18685 9.79378 +2.78397 4.4563 +8.6891 9.38337 +6.51749 7.59374 +2.52346 3.46101 +8.40526 9.35647 +5.26942 6.33572 +4.15094 5.00668 +0.471666 1.53842 +7.63441 7.96745 +2.39974 3.7814 +2.71989 3.02994 +8.12085 8.33493 +6.19474 6.84381 +6.6133 8.31417 +5.1758 6.94983 +8.66241 8.79095 +6.10878 8.22083 +8.81883 9.08031 +8.28969 8.45176 +7.19851 8.37836 +1.5722 1.6836 +4.57814 6.95063 +7.66128 8.10631 +0.742483 3.08515 +1.15026 1.98074 +3.90133 4.12003 +7.61145 7.73433 +8.32187 10.2933 +0.407205 1.08089 +1.26545 2.60796 +2.70646 3.92753 +-0.196551 1.83536 +-0.413063 1.23838 +0.264484 0.556192 +6.30158 6.96097 +-0.66246 0.809062 +9.34243 10.3521 +8.70093 8.79679 +0.745195 1.92911 +9.12892 9.68193 +7.98533 8.30538 +6.23671 7.04296 +6.5603 6.95483 +7.08133 7.10563 +2.15769 2.41541 +8.24752 8.73978 +5.27693 5.61904 +0.317419 1.48404 +3.48029 5.46979 +7.38901 8.56554 +1.06587 1.62384 +5.54926 6.04924 +4.46577 6.48749 +5.349 6.15584 +8.04249 8.17359 +3.37651 3.56179 +3.64706 5.57403 +4.49844 5.26404 +3.93361 4.92128 +5.82184 6.29881 +0.984273 1.70318 +1.12773 1.80726 +3.11675 3.17451 +5.07913 5.46291 +0.615591 1.81465 +1.08948 2.77847 +7.97412 8.07365 +5.05207 5.82497 +0.0407709 0.558817 +6.11142 6.48205 +3.4461 3.57315 +8.6547 8.80553 +8.18965 9.64194 +5.55564 7.9703 +4.01776 4.16989 +2.4668 2.82018 +0.911925 2.56662 +4.68814 5.03614 +7.4899 8.49036 +8.40912 9.14001 +2.32725 3.16377 +0.0723972 1.42049 +6.6441 6.6953 +3.65586 4.38222 +6.35844 6.57833 +4.44435 5.73077 +1.81779 2.57257 +4.17692 4.59722 +8.54682 9.38058 +1.61135 1.81629 +3.91926 5.00536 +9.78302 9.85143 +1.25632 3.10345 +5.53191 6.08174 +-0.231868 0.676811 +1.03054 2.58105 +0.0402172 0.690608 +0.974571 1.25234 +5.22227 5.92302 +8.05843 10.1439 +8.48938 8.50755 +0.0965782 1.24008 +6.53821 7.47765 +0.189991 0.475204 +8.48963 8.54995 +9.68363 10.0534 +1.49381 2.71302 +6.75552 7.41283 +7.91075 9.15302 +0.520922 1.40928 +1.17957 2.11221 +4.00122 4.40686 +7.32467 7.9273 +6.39126 7.90248 +6.50534 8.19308 +7.19888 7.22234 +-0.136797 0.731889 +0.870318 1.25614 +2.07126 2.28297 +6.10995 7.60408 +3.02174 3.90102 +-0.657541 1.57517 +0.993121 2.66255 +7.27232 7.50832 +2.16079 3.75428 +9.27397 9.75098 +8.36865 8.5545 +4.56641 4.97607 +3.60746 4.34616 +6.31304 7.70611 +2.91442 3.7602 +4.85814 6.70407 +4.45876 5.67661 +8.06749 8.82229 +2.02826 3.59873 +1.92922 2.50088 +2.63867 3.48117 +2.17665 2.54826 +8.62674 9.10675 +0.96648 1.47671 +8.86336 9.53978 +5.52747 5.80829 +0.77099 3.06106 +2.2307 2.53877 +6.29165 6.63018 +4.44717 5.04651 +3.80894 4.63054 +7.47519 7.87072 +0.933668 1.9949 +-0.712945 1.21558 +7.30206 8.38376 +5.80281 7.00022 +7.96578 8.6558 +0.24063 0.706466 +4.41893 4.58472 +4.0132 4.92768 +5.29626 6.09397 +3.43602 4.00728 +0.780945 1.66499 +8.83861 9.15168 +9.06411 9.75544 +3.45618 3.62529 +9.51413 10.0148 +0.842106 1.75695 +1.06485 1.44192 +6.89987 8.05314 +7.89154 8.73313 +8.71675 9.79526 +2.40574 2.58062 +8.55952 8.78132 +5.61716 6.06282 +3.71059 3.77929 +2.50187 2.99137 +6.92852 7.23184 +7.00442 7.93869 +8.82232 8.8756 +4.10389 4.53702 +7.6907 7.77577 +9.31554 10.2674 +8.51082 8.70339 +4.83332 6.70311 +4.6904 5.42892 +4.71407 5.67695 +4.12047 4.44089 +7.51845 8.26858 +1.31781 1.9397 +6.26854 8.02093 +6.92072 7.77774 +0.438156 2.18909 +0.898035 1.72074 +3.81121 3.8643 +1.01676 1.34308 +9.28445 9.42801 +2.43133 4.43516 +4.33664 5.9904 +2.19178 2.37244 +1.5457 1.79785 +2.23781 2.6481 +6.8365 6.87073 +0.82568 2.74775 +9.59404 9.89262 +8.48394 9.15107 +6.16085 6.42224 +3.5667 5.97689 +4.16931 7.41638 +6.95636 7.0982 +6.87987 7.09233 +3.12619 3.14821 +7.76636 7.98459 +4.60371 5.59136 +3.92189 4.88302 +6.90694 8.19858 +3.85132 5.19015 +8.05045 8.32483 +4.8338 6.05032 +1.93576 3.18873 +2.4182 3.55039 +5.56905 5.8172 +4.18436 6.01283 +3.04944 3.85936 +7.83585 8.95233 +1.76281 3.0558 +3.44143 3.6317 +8.69887 9.40371 +5.67867 5.73236 +0.859809 1.76578 +6.92284 7.13601 +8.27495 9.13414 +5.44385 6.42599 +-0.941603 1.8215 +7.88161 8.79447 +0.965018 1.17732 +5.56442 5.79546 +8.79032 10.9909 +5.28632 5.79175 +4.80998 6.07002 +8.4021 9.81107 +3.16415 5.08682 +-0.212163 1.2052 +5.683 5.83625 +0.738527 1.31842 +2.03835 2.52756 +7.4543 8.91243 +-0.568869 1.44659 +3.58855 4.42371 +6.33058 7.18779 +-0.645579 1.94313 +2.18149 2.24157 +3.80281 4.67323 +5.14628 5.97452 +2.55239 3.45685 +3.56586 6.23355 +6.74752 7.19693 +8.99006 10.5533 +0.259833 0.99882 +8.9005 9.75401 +7.28058 8.41075 +4.57803 5.70104 +9.82823 9.90251 +6.94375 7.42033 +7.8878 8.81951 +5.01137 5.52693 +2.25503 2.28817 +6.65772 7.11107 +0.647512 2.04416 +4.34796 4.5706 +4.5395 4.91529 +2.65423 3.49531 +7.97384 8.78377 +5.53873 5.76806 +9.78641 10.1351 +6.01664 6.44407 +3.47406 3.75187 +4.59421 4.81804 +1.20641 2.00488 +2.48904 2.80768 +5.77372 6.10692 +2.49363 3.24499 +1.8483 2.62965 +2.28556 3.22209 +3.17819 4.51426 +3.5548 4.23276 +3.25239 3.57895 +0.613317 2.44862 +3.82234 4.78976 +4.72809 6.46528 +9.54107 10.4426 +9.20052 10.1921 +8.24152 9.89817 +5.17594 6.19462 +7.83364 8.17082 +5.67992 6.36464 +8.9943 10.1426 +2.20598 3.0081 +3.38199 5.16464 +0.599928 1.35804 +0.841211 1.60761 +5.29338 5.89919 +1.11061 2.29219 +3.41512 3.95907 +7.9375 10.0203 +8.73852 9.66917 +9.95092 10.0162 +4.02544 4.30219 +4.1461 5.37827 +1.08089 1.59196 +7.87513 8.21121 +7.85673 8.0973 +0.96237 1.56519 +2.45532 2.61678 +6.1829 6.23637 +0.135135 0.613518 +3.18324 3.78587 +5.64796 7.20194 +0.861169 1.71661 +9.66005 10.1169 +0.880774 1.12452 +1.29389 1.57658 +5.60299 5.89759 +5.53642 7.07306 +0.540268 1.31836 +6.60244 7.98105 +4.21877 4.57159 +3.15367 4.75356 +7.81055 8.40378 +8.00942 8.10861 +5.78071 6.35646 +3.15993 4.99293 +2.36526 2.78444 +8.1361 8.76071 +1.40066 2.96474 +-0.17906 1.05877 +5.94933 6.6808 +3.43187 4.05553 +3.02912 4.68942 +2.1506 2.29413 +2.3516 2.38305 +2.87496 3.0851 +6.71294 8.99858 +3.76177 5.52545 +1.58417 2.57063 +2.74646 4.27445 +5.48407 6.60696 +-0.133321 0.716559 +3.53886 3.58196 +2.28729 2.40198 +-0.209646 1.21263 +6.62795 7.32318 +0.714781 0.880466 +2.96831 4.05932 +6.00935 6.38896 +5.39798 6.11983 +8.47679 9.70468 +1.4339 1.74845 +2.35223 4.75732 +4.31357 4.9642 +5.26493 7.70538 +7.91888 8.94851 +6.51439 7.69469 +7.69015 7.85411 +3.94274 5.15373 +6.25852 7.32402 +2.73567 3.43236 +7.09564 8.42242 +2.55932 4.29066 +1.79489 1.84559 +8.86427 9.35669 +7.23854 8.27062 +7.8488 7.98307 +0.710888 2.22424 +0.0413624 1.10578 +1.54302 1.97696 +1.64924 3.01081 +8.15535 10.2397 +0.305662 1.63835 +8.20375 9.03123 +1.66617 2.08748 +4.01691 4.88505 +3.32856 4.10709 +5.15342 5.44616 +5.80751 7.38872 +0.485341 1.07648 +3.98267 4.20211 +6.96867 9.37655 +9.48055 9.85181 +8.39277 9.50424 +2.47589 2.79873 +3.48046 5.37417 +4.98279 6.01686 +1.29845 2.31199 +-0.204348 2.50289 +0.23488 1.00378 +6.26899 7.14823 +4.62903 5.49672 +0.199052 0.822066 +6.97297 7.69083 +4.23783 4.65198 +0.530497 0.839143 +6.61355 8.22831 +-0.0103941 2.16307 +0.148601 1.20044 +0.314438 0.67632 +3.43415 4.06208 +1.95498 3.25728 +4.23094 4.84942 +9.5493 10.0057 +2.64964 3.52073 +8.21388 9.1622 +-0.112496 0.47622 +7.97551 8.19546 +2.16155 2.6289 +0.38442 1.46032 +3.85675 3.91557 +1.00605 1.42016 +2.4853 3.53086 +-0.0765625 0.504366 +8.11302 8.46334 +7.18135 7.80218 +6.46466 8.12336 +3.75968 5.33954 +9.08789 9.73677 +6.47459 7.49454 +0.90148 1.47681 +3.44733 3.54163 +7.32968 7.909 +1.30055 2.75407 +8.78735 8.92461 +8.21764 8.59414 +0.888162 1.08404 +5.65195 6.26421 +6.23881 7.33284 +8.69731 9.88088 +3.55695 5.36909 +6.49248 7.02755 +2.31407 3.01952 +5.7803 6.1286 +6.30415 8.01577 +7.73864 8.27496 +0.741078 1.69184 +4.94671 5.68254 +3.28226 5.02894 +1.97446 2.60413 +3.26555 5.54754 +2.56179 3.41897 +3.20058 3.32486 +6.96915 7.69055 +6.89302 7.39856 +1.9659 2.61404 +1.31107 1.36867 +6.23573 6.33677 +0.17616 0.517772 +8.55548 8.79155 +9.61632 10.2651 +2.20331 2.34017 +6.93195 7.42939 +1.25398 2.23119 +1.06577 1.41048 +5.99156 7.09818 +3.34821 4.1271 +4.61618 6.90956 +2.30853 3.52875 +0.0518063 0.113732 +5.38513 6.09734 +1.73468 2.64838 +7.24679 7.63999 +4.18175 5.06728 +7.09602 7.13414 +9.06191 9.11605 +6.2309 7.67675 +3.96576 4.63237 +-0.552645 1.37948 +5.76964 6.89903 +4.9272 7.5832 +4.59003 6.49719 +4.12281 6.9664 +5.12256 5.58387 +1.78859 2.76954 +4.36808 5.05712 +8.41165 9.54483 +8.11513 8.43405 +8.42016 9.52715 +8.50598 9.34564 +1.80028 1.83558 +8.08502 8.43726 +6.96667 8.12021 +5.4726 6.26772 +7.1141 9.29989 +7.83324 8.1744 +8.74368 9.16491 +2.5515 3.01706 +5.92375 6.44495 +7.45628 8.41582 +9.04829 9.71503 +4.58856 4.75356 +7.26064 7.32462 +1.81695 2.40529 +6.88067 7.95052 +1.91408 2.02663 +1.32005 1.45025 +7.47733 8.42004 +4.99403 5.85297 +0.95744 2.28875 +-0.089503 0.536888 +1.09978 2.48865 +1.9959 3.098 +0.376116 0.448329 +3.98908 6.49684 +9.10178 9.51012 +5.41394 7.31529 +6.60708 7.59071 +4.38466 5.76203 +1.84355 2.60304 +0.658705 0.933522 +6.98725 7.05509 +5.60064 6.98804 +1.0603 1.1521 +4.06192 4.46156 +0.351018 1.00807 +9.17113 10.2192 +6.71641 6.74659 +8.85392 10.5272 +4.50816 5.22908 +1.13934 2.43196 +3.3746 3.57576 +7.62137 9.3234 +6.93482 7.16058 +5.66506 6.44324 +5.13364 5.86068 +1.97257 2.03803 +2.69746 2.73067 +0.989591 1.38342 +4.18819 4.69676 +4.31608 5.12265 +2.79556 4.87763 +3.55387 5.34421 +-0.112466 0.585639 +2.43156 2.70221 +5.88314 7.08322 +-0.450332 1.29858 +1.22202 2.46588 +6.74433 7.32925 +5.14596 5.37435 +6.76754 7.41799 +1.48762 2.45958 +4.57241 5.3382 +4.17465 5.02296 +6.48856 7.5576 +0.383566 0.823394 +8.50875 9.08734 +1.79393 2.24548 +5.06812 6.49508 +3.55364 3.61502 +5.58973 6.58885 +0.631097 2.10041 +0.323995 0.941782 +8.8798 10.1036 +6.37114 6.88202 +6.9393 7.83288 +3.09503 3.41759 +3.65269 3.70305 +5.61676 5.8924 +1.90199 2.38446 +4.23683 5.35609 +9.18649 9.88878 +8.28736 8.37734 +3.04805 5.03593 +8.02926 8.38975 +3.58161 4.01331 +3.20923 3.48207 +6.85118 8.78281 +5.06518 7.49843 +1.57456 3.05552 +3.0154 4.23782 +2.83557 3.24854 +1.29358 1.89328 +1.42911 2.72661 +3.17067 3.96651 +0.353554 1.48472 +3.46227 4.25611 +6.17639 7.24657 +5.60878 7.13562 +4.11129 5.52476 +9.17596 9.4123 +3.08339 3.65766 +4.083 4.63013 +0.628465 1.92141 +7.81989 8.39386 +3.35589 3.87531 +5.35974 5.41743 +4.48321 4.64376 +0.888177 1.37343 +8.49061 8.50063 +5.09078 6.01801 +9.65314 9.99342 +1.60502 3.0115 +1.37928 2.77642 +6.60322 8.94046 +6.74573 7.45157 +-0.291156 0.325249 +6.1518 6.66827 +5.38199 6.46959 +3.50128 5.22692 +1.31774 1.70159 +0.550546 1.48845 +7.51187 7.85496 +4.2014 5.23193 +3.88255 3.97209 +2.60555 2.84958 +5.15706 6.00036 +2.99284 3.27867 +0.395077 0.768383 +3.30863 3.60594 +0.0325231 0.379208 +6.55183 7.33346 +1.44554 2.95846 +0.245421 1.29751 +3.98808 5.41226 +5.90242 6.266 +4.11097 5.02597 +0.134753 0.929866 +0.609287 1.16311 +0.231832 1.06825 +6.22093 7.05584 +9.18429 9.80637 +0.544139 1.30185 +1.69143 2.90306 +6.75109 8.67893 +5.49641 6.76104 +8.91712 10.0271 +7.09126 8.12404 +8.82958 10.2847 +0.569249 0.69421 +3.59288 5.8053 +9.25068 9.4226 +8.51607 9.26259 +5.00906 5.17068 +1.83467 2.99102 +7.32006 7.64842 +0.405532 0.603773 +6.41882 6.60495 +0.721592 1.44375 +2.78393 4.46732 +7.14806 7.16117 +5.12868 5.27918 +2.74138 3.1737 +2.95394 4.26547 +7.82827 8.21028 +9.06982 10.7279 +0.108376 0.290131 +6.34574 6.97141 +4.39022 5.50801 +7.98339 8.79674 +3.80026 4.71831 +5.43594 5.66916 +1.6743 2.61476 +4.29763 5.47402 +7.95714 8.69311 +3.4152 3.7387 +8.01715 8.8941 +6.53723 7.44437 +-0.0222108 1.04503 +4.96242 6.01648 +1.70885 1.75511 +7.62434 8.53526 +6.82863 7.39782 +8.19967 9.22283 +1.99719 2.11323 +-0.0124079 0.240201 +4.48577 4.87935 +2.586 4.41666 +6.37848 6.67092 +4.39606 5.67983 +9.39761 10.1095 +7.10866 7.15796 +3.91993 4.52129 +5.10552 5.36997 +7.08963 8.32694 +9.12669 9.58509 +9.26894 10.1974 +0.737413 1.26523 +2.77833 5.28516 +3.19039 4.36857 +4.32954 5.45614 +4.98069 5.49295 +7.54745 8.76142 +5.70425 7.05749 +-0.250513 0.36578 +4.76997 5.89607 +2.03075 2.32111 +6.54141 6.55896 +4.19799 4.45091 +8.7796 9.11915 +5.75014 6.05646 +5.36885 5.42775 +-0.00433056 0.865304 +3.65169 5.4751 +0.23625 0.872926 +0.0386337 0.792214 +4.40245 4.56789 +6.44567 7.42162 +5.51394 5.98005 +3.50146 3.83147 +8.47573 9.85647 +7.91378 8.47044 +9.44297 9.90241 +5.962 6.68782 +4.49034 4.86927 +2.17774 3.47061 +8.80614 9.26595 +7.92096 8.13838 +7.80209 7.93317 +7.78915 8.29735 +6.98111 7.162 +0.491059 1.14901 +8.97965 9.38792 +3.30207 3.53207 +3.17127 4.43581 +3.97564 4.43746 +6.79008 7.17877 +5.61669 7.51263 +4.0853 5.38748 +4.42181 6.32041 +8.08599 8.9095 +2.46938 2.55499 +1.20692 2.06351 +1.98995 2.35216 +8.17116 9.17158 +7.53414 8.37086 +3.7744 4.46197 +3.29464 4.38 +7.33246 7.81959 +4.89572 6.2831 +-0.152496 1.56427 +0.636242 0.938556 +5.62066 6.06096 +9.42994 10.473 +8.95446 9.46311 +0.277891 2.80311 +6.92968 7.29845 +2.75677 3.02975 +2.2859 2.51308 +2.96683 3.03857 +6.44584 6.49518 +8.33607 8.60407 +7.20303 7.7616 +7.07205 7.46849 +2.35677 2.7904 +5.86404 6.12906 +2.42371 4.62735 +3.27237 4.11016 +0.0668578 0.644021 +6.77371 7.45187 +3.66596 5.21874 +0.718034 0.755944 +6.06162 7.05 +6.91473 7.09753 +5.0749 6.08914 +0.759874 1.11978 +8.54591 9.64997 +3.97266 4.70679 +1.51133 3.17164 +7.21772 7.69877 +8.00719 8.37052 +0.284003 0.38001 +4.08842 4.16227 +5.04461 5.79973 +4.60604 5.31979 +2.2461 2.28157 +6.25631 7.69766 +9.12404 9.67586 +7.73134 8.98923 +1.0513 1.46408 +9.17225 9.42567 +3.66795 4.29168 +8.84403 9.28497 +9.93613 9.94729 +3.16615 5.09374 +-0.149675 1.43397 +2.30855 2.48392 +0.843172 0.951801 +8.32945 8.8506 +8.97012 9.94697 +2.8559 2.92359 +-0.321715 0.89173 +7.48565 7.71775 +1.44301 1.47795 +6.6649 6.76187 +9.10721 9.93599 +1.82207 3.03935 +3.61893 4.5306 +2.53746 3.81243 +0.424528 1.29026 +9.51874 9.68841 +7.94954 8.14396 +7.49282 7.52655 +3.04604 3.69656 +9.45461 9.47212 +7.69209 8.16412 +0.607135 1.16564 +0.150291 0.450632 +3.28914 4.01085 +5.45597 6.02921 +8.16157 8.36605 +9.76573 10.2325 +0.151994 1.07074 +1.3748 1.68548 +2.29854 2.63593 +7.92162 8.68895 +1.28795 1.61949 +7.85469 8.26683 +4.32268 6.33174 +6.13964 6.3596 +1.25714 1.88002 +2.05006 2.28294 +8.31864 8.34151 +9.0613 10.0715 +-0.041568 0.25139 +6.79984 6.81686 +5.10674 5.70583 +5.92937 7.01652 +7.57649 8.05834 +0.937157 2.25362 +7.48567 7.59746 +2.33403 2.88942 +7.3805 7.73421 +5.586 5.75327 +0.828854 2.12988 +8.22741 8.59954 +9.69214 10.1207 +6.55359 7.08114 +1.85342 2.634 +6.08756 7.28893 +6.34993 6.93474 +8.93548 10.1463 +5.49445 5.8338 +1.47951 2.14646 +2.62089 2.75888 +2.35352 3.10539 +4.98774 5.28931 +4.92239 5.40697 +7.52674 8.78948 +4.52451 4.83819 +5.45854 5.75838 +5.51553 6.3901 +4.82905 6.44407 +6.20655 6.4483 +5.68116 7.06109 +7.97301 9.15827 +8.8854 9.91623 +9.60198 10.2449 +1.93322 2.67684 +0.441852 1.87646 +5.19981 5.71385 +2.54799 2.5809 +4.34591 5.02655 +7.54678 8.75202 +6.1496 7.19033 +1.13658 1.30756 +1.38724 2.08252 +2.13624 2.30419 +8.49196 9.41369 +-0.21387 0.685093 +2.47875 4.19982 +3.69093 4.00543 +5.70643 6.50331 +7.07443 8.83588 +6.85756 7.68937 +1.69241 1.83242 +0.140565 0.502156 +2.15007 3.23784 +4.97403 5.69757 +5.08315 6.25554 +3.45026 4.01942 +3.37482 4.73009 +7.4154 8.34013 +6.95399 7.59768 +8.07995 9.86199 +8.43993 8.88645 +7.66844 8.12742 +-0.0200687 0.435846 +4.47984 5.9416 +7.66804 10.0801 +4.14578 5.98717 +0.256533 0.89254 +6.43216 7.4474 +3.60295 4.79419 +3.90129 4.29812 +5.30606 5.58674 +9.11552 9.79229 +5.60702 5.85299 +2.39514 2.64865 +4.51164 4.60227 +6.31154 6.77441 +3.12239 3.13505 +7.50962 7.89478 +3.90928 4.88831 +9.64625 10.0629 +5.9465 6.02877 +2.08554 2.10477 +0.087547 0.34748 +2.34295 2.53703 +6.846 7.3043 +1.37869 2.11446 +4.03371 4.26278 +5.38623 6.40917 +4.75848 6.25417 +6.03478 6.15991 +-0.585543 1.2091 +2.52824 3.57712 +3.95687 5.40914 +4.42955 4.71909 +2.9328 3.98848 +5.40471 6.97056 +7.64789 9.30279 +6.19595 7.07492 +8.27328 9.41596 +8.29855 9.13665 +2.54035 3.10488 +8.25038 8.87903 +5.66599 5.88701 +7.40067 8.71195 +6.63762 6.67694 +-0.0163105 1.72666 +4.77743 6.60356 +0.567991 1.14977 +5.96841 6.42987 +3.02266 4.58424 +6.72121 7.35492 +7.51477 8.65223 +8.55055 8.81014 +5.59759 5.82816 +0.218944 1.82542 +1.03197 2.36652 +7.84302 9.1594 +2.11542 4.7332 +6.37618 6.92981 +1.34963 1.59353 +0.516281 1.08859 +-0.0151152 0.0624718 +6.45603 7.23063 +4.76865 5.46588 +7.5893 8.42021 +1.04534 1.99034 +2.62638 3.04997 +5.00254 5.98512 +7.7588 9.44547 +6.82186 7.34321 +8.7629 9.82272 +-0.309554 0.54858 +4.19843 4.92981 +5.62327 6.80846 +6.40599 7.6073 +6.1547 6.53898 +3.93941 4.44985 +3.28342 3.72778 +7.17256 7.23035 +2.31269 3.05437 +7.99132 8.20926 +7.19338 8.08381 +7.29139 7.96441 +4.25818 4.4208 +0.802894 0.81938 +0.990115 1.04066 +0.443898 0.490936 +3.44459 3.95977 +9.07812 10.3145 +7.86709 8.26338 +-0.230114 0.390748 +7.50905 8.49199 +-0.715424 1.97535 +2.92248 3.12903 +5.44209 6.62431 +0.991914 1.99037 +5.92275 6.7724 +9.10818 9.2797 +4.46434 4.83462 +4.21122 5.48353 +1.8721 3.40764 +7.04713 7.60526 +3.76581 4.76317 +7.00667 7.36475 +6.87244 7.39431 +7.6349 8.46695 +-0.0728922 0.351194 +5.02925 5.6834 +1.45779 2.83702 +0.339175 1.46574 +6.40414 6.9165 +6.30401 6.91007 +5.6392 5.78172 +5.63288 6.44639 +7.45285 8.89031 +4.09741 4.57929 +8.76728 9.06448 +1.62324 1.84552 +5.72509 6.54553 +8.65273 10.3652 +7.3362 7.8953 +8.96224 10.3113 +0.217316 1.7827 +1.28523 2.90127 +8.78746 9.11602 +8.6075 9.9606 +-0.647788 0.779976 +4.9702 5.47602 +4.15553 4.57497 +1.08174 2.80993 +4.01011 4.8145 +6.79603 7.2317 +4.3711 4.43566 +9.65087 9.79922 +8.19407 9.21784 +3.04008 4.94094 +6.0883 7.23919 +6.88708 6.97172 +0.438073 2.00665 +8.53083 8.83004 +4.22258 4.65233 +6.72856 7.61085 +3.17591 3.18978 +5.07955 5.6938 +2.09043 2.55351 +3.28085 4.43556 +7.29225 8.03925 +7.78034 7.82608 +6.59677 7.67719 +5.56032 6.38139 +8.72663 8.82535 +2.96505 3.11983 +1.67192 2.11727 +7.85386 8.49025 +6.30965 6.72799 +8.53082 9.3801 +2.8976 3.39972 +8.90427 9.44661 +-0.0665785 0.410254 +4.58099 5.81135 +1.88015 2.21838 +3.38693 4.10149 +7.46378 7.68246 +8.80985 9.72212 +6.54877 7.25642 +7.18249 7.71509 +7.41978 8.64805 +1.00839 1.78626 +0.39421 0.526751 +7.13516 7.28317 +7.28011 7.80573 +1.90158 2.49032 +1.66181 4.17994 +8.81106 9.21133 +9.46151 10.5007 +0.52585 0.575082 +7.66495 8.64072 +7.72794 8.50991 +4.92409 6.23879 +2.28769 3.21774 +3.62671 4.40932 +5.77688 7.31314 +8.94253 10.0664 +0.416618 0.635111 +1.81377 2.41356 +7.91755 8.83363 +1.62715 1.82626 +8.22065 9.51656 +0.020228 0.724724 +8.81119 9.95764 +8.66509 9.61079 +5.28201 5.32152 +3.95724 4.22138 +7.09339 7.77685 +9.63428 10.1514 +3.69117 3.779 +3.82195 4.76757 +5.75824 6.62265 +3.69984 4.75163 +3.58259 4.8788 +8.32635 8.85873 +5.81959 7.32506 +8.11265 9.14304 +2.20118 3.32511 +7.79582 8.52691 +6.5891 7.13584 +0.385393 0.440656 +1.13414 1.9951 +1.76482 2.69977 +4.76194 5.82757 +6.33633 7.5348 +4.7663 5.65083 +1.98298 3.01285 +0.956973 2.38629 +5.60955 7.65827 +9.11064 9.14351 +2.99933 3.37975 +3.36304 4.57437 +3.89886 4.50733 +8.73838 9.3514 +9.11824 9.66042 +1.47961 2.93909 +0.615297 1.13217 +1.70646 2.32478 +4.35168 4.99362 +0.986601 1.18332 +4.01551 4.92342 +7.68944 9.86838 +4.47611 4.85316 +0.051839 0.86288 +3.59624 5.5628 +7.08729 8.90374 +9.53464 9.9196 +4.69871 5.74189 +8.43146 10.6889 +3.23774 3.77777 +9.35399 9.62741 +1.15259 2.69451 +6.6368 7.33773 +5.26395 6.09857 +6.87415 7.21717 +-0.925645 1.06118 +8.49641 8.67659 +2.31486 3.25354 +2.51057 2.58303 +0.921997 1.48762 +6.29777 6.74738 +4.03945 4.27305 +7.1668 7.3471 +8.44572 8.80343 +7.16937 7.84526 +8.89008 9.4332 +7.01815 7.66319 +-0.420804 0.982878 +1.59755 1.64672 +0.700814 0.72579 +6.3138 7.37379 +8.49276 9.93522 +-0.795656 0.819657 +0.772253 1.05926 +0.917593 1.3917 +3.30076 4.12274 +-0.0237176 0.260552 +6.82385 7.49119 +6.98638 7.52012 +8.24915 9.08397 +4.17486 4.25908 +3.08435 4.64404 +8.17114 9.91412 +8.95923 9.3751 +0.596707 1.89462 +0.982917 1.40236 +6.79552 7.36657 +8.2599 9.69551 +8.85126 10.4342 +7.98967 9.14514 +0.766355 1.63286 +7.76211 7.99247 +5.23163 5.89338 +4.4707 5.50457 +9.257 9.27862 +2.11049 2.59654 +1.65501 2.06238 +0.551768 2.10873 +0.0285582 0.194421 +3.66153 3.85615 +5.07097 5.55806 +5.29145 5.80735 +2.03499 3.0863 +0.73171 2.29494 +2.63023 3.6417 +6.17478 6.25997 +5.79646 6.46363 +9.10633 10.5516 +7.23415 7.84823 +6.49951 7.1506 +9.94647 10.0242 +7.91236 8.09097 +7.8127 7.97662 +3.34238 3.42907 +8.50796 9.8311 +8.75792 8.98028 +9.34125 10.4441 +2.84413 3.71602 +1.49884 2.35652 +7.52317 9.18955 +9.5587 10.3525 +4.85436 6.1181 +5.91369 6.12194 +6.88463 8.34471 +1.51952 2.99156 +4.29022 5.12674 +8.0229 8.41246 +2.44841 3.04779 +7.59975 7.91485 +2.74491 3.62575 +0.0169968 0.240919 +5.85351 6.29039 +4.99825 5.93439 +2.153 3.35304 +1.19032 1.41763 +6.13337 7.80615 +7.05013 7.89364 +8.38056 9.92 +6.35525 6.64521 +3.93342 5.15885 +2.87656 3.47116 +3.56176 4.41159 +6.72084 7.9171 +8.03801 9.12442 +1.03329 2.56255 +7.64542 8.61709 +2.85627 2.89437 +8.8303 9.79838 +1.08032 2.34573 +7.51366 8.39169 +9.09685 10.3677 +6.753 7.41904 +-0.217662 1.42059 +6.72492 7.97553 +7.99325 8.8976 +0.765372 1.10894 +4.37958 6.04671 +8.72027 9.58928 +6.00234 7.29277 +8.43912 9.25356 +2.98816 3.17389 +0.4292 0.552167 +1.69827 2.80318 +5.99904 7.09981 +4.68367 5.87791 +-0.203208 1.09587 +2.65367 3.28472 +3.87051 3.88111 +6.36178 7.18853 +-0.0815935 0.200848 +6.82255 7.18488 +4.99295 5.08405 +2.67155 3.08447 +5.82099 6.77145 +8.76434 9.01086 +5.94982 6.18665 +3.23369 3.71743 +0.934129 2.73456 +1.13233 1.24208 +8.21931 9.03906 +6.25425 6.69972 +0.971299 4.21205 +5.68426 6.45281 +2.85786 3.3955 +8.17715 8.88439 +2.72802 5.01235 +6.12811 6.53711 +5.22878 6.45864 +0.453655 0.922032 +0.466162 0.85262 +2.40916 2.64759 +5.63583 6.37476 +2.18434 3.14105 +0.912811 2.08432 +8.9464 10.1515 +6.77323 7.27133 +0.7167 1.60579 +5.89813 6.32997 +7.66593 8.4611 +6.54145 6.88337 +5.95421 6.21188 +1.10383 1.92226 +5.37168 5.65707 +1.51874 1.66339 +4.60748 5.00384 +8.97354 10.5394 +2.05022 3.20373 +8.17316 8.19283 +2.33792 2.72643 +8.81577 9.3704 +5.95738 6.59855 +5.69025 6.17335 +6.91889 7.88142 +2.17529 2.81528 +6.65046 7.19698 +7.10694 8.78046 +2.09613 2.47484 +1.92423 2.25333 +-0.0906039 0.861376 +6.61481 7.70609 +6.7448 6.84276 +3.43655 5.28405 +6.05404 6.48902 +3.24637 3.36149 +5.69528 5.77157 +5.12352 5.31024 +7.65858 8.80828 +3.69209 4.4851 +0.25765 1.29637 +3.1537 4.13191 +3.12328 3.83765 +2.99798 4.8748 +4.49566 4.67827 +3.50822 4.03987 +8.00334 8.34084 +8.61039 9.00704 +0.0332147 0.166124 +4.55193 5.36546 +4.20308 4.31589 +0.955466 1.20095 +-0.382972 1.47625 +0.803913 1.01916 +3.78333 4.0707 +6.58604 6.70173 +3.02066 3.82562 +1.16515 2.2816 +7.87242 8.24214 +4.057 4.60368 +2.84714 3.59726 +2.77804 3.69136 +-0.139996 1.36416 +4.50647 6.37579 +8.86647 10.1549 +9.24372 10.1442 +0.743107 1.84722 +6.18761 7.65841 +0.214887 0.443938 +8.8513 9.55063 +4.04856 5.79916 +6.69671 7.10025 +6.97477 7.79702 +4.82551 5.10538 +0.821772 2.85828 +9.3086 9.74805 +5.45623 6.66668 +7.64296 8.67451 +7.53052 8.31024 +7.45352 7.5063 +1.31412 1.4979 +7.81176 8.48083 +0.228964 1.73207 +5.52579 5.93103 +6.58544 8.48938 +2.75407 4.18746 +3.21396 3.96298 +1.13806 2.34106 +0.899331 2.87945 +5.69016 6.61624 +2.48172 2.58082 +0.676004 1.43405 +3.41766 3.9503 +0.104554 0.298373 +6.50673 8.21831 +6.00349 6.69385 +9.62453 10.3147 +4.09379 6.02911 +-1.12803 1.68823 +1.83324 3.43133 +8.30576 9.09288 +-0.363911 0.405218 +1.91686 3.34928 +6.98331 7.15885 +-0.31591 0.996789 +0.145813 0.35408 +5.32016 6.13679 +6.99664 7.48644 +-0.140875 0.821045 +9.0119 9.19742 +1.69616 1.72453 +4.38064 5.07542 +6.85898 7.55478 +3.9145 4.27935 +5.77592 6.16806 +1.45345 3.01301 +4.13024 5.59662 +8.14557 8.41669 +4.00075 4.829 +-0.283024 1.59436 +5.92468 7.17507 +6.84458 7.18356 +1.06987 1.42839 +8.618 8.66235 +0.432802 1.59512 +3.78058 4.36051 +1.6113 4.21135 +6.73475 7.01057 +6.74819 6.90498 +6.93146 8.54681 +9.02605 9.91613 +3.888 4.00526 +1.07958 2.27915 +4.78456 5.10764 +3.92952 4.89555 +9.09348 9.30304 +6.73107 7.21036 +7.42366 7.73225 +4.04079 4.72919 +1.21726 1.34683 +8.82903 9.73504 +0.577663 1.00786 +1.56822 2.08675 +4.84315 5.44994 +1.01008 1.16524 +5.99782 6.01535 +0.996739 1.75305 +4.76128 6.39012 +8.93563 9.51972 +-0.0698166 0.453543 +5.9084 6.95139 +0.535401 0.692258 +4.80729 5.48335 +3.42581 4.76147 +3.58715 4.43541 +7.50236 7.71227 +5.19742 5.87901 +1.79752 2.43097 +7.29762 7.57608 +5.65169 6.47762 +6.02249 7.93642 +0.840131 2.81176 +6.2646 6.96911 +7.46014 8.17136 +9.79049 9.94054 +4.61094 5.35819 +7.30902 7.41873 +1.21883 1.84621 +6.41743 6.57736 +1.53114 1.62859 +6.73237 7.47083 +6.05618 7.56831 +7.63374 8.16821 +5.20839 6.05382 +0.619043 1.44065 +2.38657 4.88786 +3.88289 5.18788 +4.42283 4.51106 +9.15575 9.22388 +3.18678 3.72243 +3.20638 3.65935 +4.2219 4.97961 +4.63725 6.90959 +2.57123 2.59101 +4.08581 4.37325 +6.53926 6.80412 +1.77475 3.89149 +9.22854 10.426 +2.67375 4.36551 +3.17194 4.0433 +1.10304 2.0348 +3.67233 4.04957 +3.23526 3.5012 +5.17684 6.47301 +4.4 4.67662 +4.15842 5.85903 +5.88496 6.61616 +7.26489 7.51279 +4.17402 6.6997 +-0.540216 0.54573 +4.36063 4.60442 +9.18146 9.96239 +0.977216 2.42032 +9.09143 9.61178 +5.06686 6.23076 +2.04772 2.92048 +1.4154 2.00707 +7.80442 9.54824 +4.55549 4.7148 +7.56964 8.80172 +1.35347 3.21648 +9.12751 10.0605 +1.81735 2.06061 +5.63798 8.0918 +6.79492 7.98002 +9.23053 10.1299 +1.74639 2.02724 +3.71825 4.09879 +2.4995 3.42493 +4.1255 5.66758 +4.75493 6.99687 +8.22481 8.72036 +6.13689 7.53026 +5.41315 5.66358 +4.21425 5.62743 +6.22936 6.44392 +2.02303 2.96414 +-0.0655462 0.130508 +6.1487 6.70994 +4.36674 6.24985 +7.51129 7.63176 +7.9729 8.98613 +3.92117 4.15596 +4.54398 5.43399 +6.34248 6.92305 +-0.550253 1.16167 +9.15142 9.53717 +8.99354 9.65952 +6.28988 7.90053 +3.36505 3.782 +8.80005 9.70553 +1.99947 2.18573 +1.15023 2.07069 +0.253723 1.32958 +2.0392 2.93977 +2.89024 3.00836 +8.16735 8.2049 +1.49508 2.95258 +6.19092 7.44552 +2.33328 3.06758 +6.44166 7.4649 +7.34749 7.79488 +7.5557 8.04141 +2.76812 5.13617 +7.97308 9.25668 +4.73539 5.22234 +7.53377 8.41651 +-0.355405 1.36499 +4.72111 4.73744 +-1.22753 1.84842 +5.5033 5.63808 +3.95421 4.19313 +6.24752 6.98229 +4.49694 5.07277 +3.70871 4.30093 +1.31984 1.50116 +7.16044 8.70868 +2.44587 3.34659 +6.08322 7.20376 +2.75012 2.82555 +0.0394442 0.863634 +3.90896 4.73696 +4.77494 5.04158 +8.41473 8.82932 +1.7049 2.71024 +9.01684 10.1044 +4.57959 5.01066 +3.2484 4.21875 +1.11596 2.88792 +3.53616 4.14001 +5.80672 5.82478 +5.85844 7.70293 +6.18239 6.30124 +2.22913 3.23412 +2.97521 3.08481 +2.2749 3.70611 +2.3457 3.86609 +2.71695 4.04473 +7.22863 7.40115 +1.80428 2.39815 +1.80781 2.33028 +2.78662 3.14936 +9.40717 9.94906 +6.54968 6.80773 +2.76862 3.24492 +1.96034 2.87404 +3.53295 3.54927 +5.36042 5.67073 +8.63339 8.93752 +0.932415 1.70402 +4.32923 4.55594 +9.3491 10.4969 +0.121416 1.15499 +-0.172998 1.36319 +2.02349 2.29887 +1.75352 2.35329 +0.502555 2.01665 +6.71754 6.80014 +3.35175 3.93337 +7.17133 7.9851 +8.51299 9.95771 +5.86103 6.36734 +1.44593 3.46008 +4.49699 4.60855 +2.29261 3.10053 +6.68713 8.19499 +5.43776 6.84387 +8.58591 9.02134 +5.24746 6.15595 +1.3847 2.5074 +6.62143 7.07775 +1.7101 2.077 +9.70898 10.2789 +6.67451 7.92058 +2.56858 3.60374 +1.61917 2.60482 +1.77902 2.16908 +4.76209 6.00461 +3.8894 3.98269 +7.0278 7.276 +5.4866 5.59417 +1.69306 2.92506 +2.45744 3.76592 +2.5689 2.80611 +5.98283 6.06154 +9.5267 9.9626 +9.55652 10.4128 +6.6111 6.64606 +3.38826 4.26111 +3.61887 3.73455 +4.14924 6.13796 +7.15863 7.28212 +5.78984 6.56662 +2.09304 2.2681 +4.39867 4.88557 +6.20907 6.81034 +4.63336 4.91476 +0.939805 2.43621 +1.56774 5.13599 +8.40908 9.82058 +2.06273 2.20306 +2.53524 5.01482 +2.9314 3.23661 +2.48535 3.47368 +0.366389 1.4699 +8.81131 9.01654 +2.05102 2.87972 +1.9699 2.22723 +6.18333 6.98224 +1.3425 2.4443 +0.767883 1.77423 +3.1538 3.43248 +0.891006 0.903458 +5.7136 5.8713 +0.437569 1.37539 +3.98533 5.01646 +8.65764 9.89518 +3.74889 3.98561 +7.74507 8.30657 +8.24671 8.43006 +6.88467 7.42036 +1.99426 2.03522 +1.90486 2.04181 +1.12911 1.71807 +9.25253 10.105 +1.92989 2.0346 +5.60044 6.25585 +9.16848 10.087 +6.67824 6.72257 +1.88522 2.80222 +0.242758 0.852689 +5.09249 7.71484 +5.54974 6.44414 +7.66767 8.72936 +3.48884 3.83156 +3.4697 5.14646 +8.48582 8.7692 +6.76259 7.06897 +7.83856 8.62005 +5.81853 6.76571 +2.04803 2.94439 +6.85396 7.22985 +6.52449 7.39764 +9.26838 9.34809 +4.64449 5.64975 +7.51845 7.80279 +-1.27268 1.65344 +0.686101 4.20373 +7.80552 8.37119 +7.20419 8.35284 +9.33962 9.87975 +4.31238 5.58683 +2.39198 3.84398 +1.29248 2.59269 +4.71612 6.195 +5.27332 6.52174 +7.71492 7.84702 +8.18064 8.72233 +1.55223 2.31294 +6.34374 7.31758 +6.48966 6.92611 +2.62268 3.09895 +4.09064 5.06197 +2.66367 4.12126 +1.53391 2.93092 +8.64516 8.70655 +9.20047 9.28957 +4.00474 4.11716 +8.5418 9.45901 +8.73386 9.73253 +9.22596 9.63179 +1.34204 2.7834 +8.4489 9.21027 +7.75158 8.51085 +5.98856 6.11212 +1.29906 2.08111 +9.24315 9.76291 +6.84345 6.91607 +5.88294 5.90545 +3.03022 3.39941 +3.22222 3.4089 +1.12791 1.65898 +6.70232 7.36336 +8.60042 8.82377 +1.26451 1.30362 +2.76682 2.92693 +1.54763 2.19582 +6.5865 7.24173 +4.15242 4.21742 +8.39615 8.78524 +1.67017 2.08717 +9.03012 9.97041 +2.31463 2.45877 +8.29872 8.51813 +1.66689 2.51919 +-0.807606 1.47794 +1.31452 1.94418 +0.0739222 0.512106 +4.23577 4.25889 +7.45273 7.97505 +3.34234 3.46608 +7.97304 9.14131 +1.9029 2.99946 +8.84087 9.79689 +4.92769 5.68685 +2.74004 3.04513 +0.889257 2.20448 +3.10574 3.9758 +3.91547 4.32303 +7.17475 8.07377 +5.92903 8.03738 +1.57974 1.65527 +3.76339 4.2285 +2.28263 2.7559 +9.53105 9.87477 +2.10154 3.2222 +4.23683 5.34347 +1.38769 2.48482 +5.39838 5.51872 +8.50975 10.1382 +8.04108 9.21474 +8.5252 9.67823 +8.893 10.7726 +7.1294 8.18211 +1.15642 1.73882 +0.436911 0.756698 +3.66142 3.71659 +6.37686 6.7 +8.88506 8.99896 +2.31891 3.79061 +2.61615 2.81909 +1.35216 1.39571 +3.04217 3.52564 +7.8409 9.34099 +0.470596 1.49157 +6.94014 7.18365 +8.05483 8.49979 +8.18511 8.25608 +7.03597 8.45251 +2.47411 2.65172 +0.112716 0.193057 +4.45039 5.10584 +4.53906 5.80013 +5.11702 5.27151 +1.24211 1.90757 +4.64114 4.72912 +1.77254 3.45037 +-0.1275 0.99675 +5.69637 7.67722 +2.21252 2.44032 +3.89623 4.40192 +2.79904 3.15569 +8.37911 9.42424 +5.27199 6.2026 +1.84791 3.75411 +0.522801 0.54806 +3.83644 4.64785 +6.65497 7.55638 +6.75104 6.98564 +2.34979 2.98049 +8.27176 8.60459 +5.07773 5.44064 +1.16934 1.98872 +4.2914 5.37557 +6.83462 7.95408 +3.91405 5.73229 +7.77473 8.53538 +9.23441 9.90185 +4.03659 5.2473 +5.99336 7.8004 +4.2432 5.89276 +6.39847 7.81276 +9.13909 10.4164 +1.12009 2.5649 +2.35157 3.18468 +4.46918 5.55572 +3.82512 5.53666 +7.18238 8.10193 +8.40911 9.23639 +8.99555 10.4192 +6.69547 8.87825 +4.79012 5.34858 +9.23615 10.0986 +-0.590587 1.14603 +2.74289 3.48244 +-0.248403 1.1591 +3.35663 3.7229 +7.37504 7.6481 +6.64796 7.64695 +0.778081 2.41212 +4.49242 4.7772 +8.01419 8.109 +6.6494 7.76619 +8.86331 10.1205 +0.817273 0.937855 +8.00019 8.21556 +6.19405 6.54794 +6.11798 7.30421 +3.40164 4.28921 +5.31927 6.21584 +2.79377 3.40938 +3.59494 3.90321 +7.79218 10.3132 +2.99546 3.86111 +1.71916 3.40283 +6.1768 6.81915 +7.59629 8.68568 +1.59724 2.348 +6.20151 6.5391 +6.30798 6.70478 +0.489786 1.51322 +1.28396 1.86775 +5.18031 5.43007 +6.61276 7.70565 +1.4909 2.11165 +4.56163 5.49277 +1.93598 4.35147 +3.65568 5.00224 +1.68028 2.00363 +7.82874 8.67399 +1.23053 2.87598 +-0.164275 0.194491 +2.58349 4.01302 +1.23279 2.02984 +0.599702 1.09257 +9.50965 9.80164 +2.33108 3.58037 +4.38659 4.62378 +2.65097 2.87349 +0.0537058 0.576502 +4.20415 5.15693 +5.41458 5.98382 +4.37747 5.10347 +2.62536 2.70073 +6.96845 8.15356 +6.91533 8.41638 +9.36431 9.58863 +6.13019 7.25915 +2.7818 3.4951 +9.44641 10.1301 +2.68817 4.19772 +5.65664 5.6814 +8.25308 10.498 +3.50374 3.64458 +1.47063 1.78567 +8.21901 8.98152 +3.99261 4.47339 +2.51395 3.38788 +4.66178 5.24959 +9.08415 10.3467 +5.92351 7.20447 +1.74145 2.35957 +7.62653 8.96797 +6.43542 7.68775 +5.49047 6.56355 +4.9225 6.22555 +0.257967 0.704837 +3.42488 3.52873 +8.67606 9.77824 +5.12981 6.37856 +5.97359 6.32151 +1.58517 2.28129 +0.530687 1.54545 +7.04056 8.15296 +1.8541 3.1902 +9.46286 10.0098 +3.17967 4.02237 +3.49966 3.80271 +6.24894 6.49618 +1.19944 1.59215 +5.30422 6.94823 +7.49137 7.78584 +7.02669 8.16282 +2.21673 3.36471 +7.66183 8.34763 +4.13876 4.87421 +3.0199 4.07124 +8.40439 8.82943 +-0.274649 0.429602 +6.11215 7.65609 +3.34781 5.03006 +1.28231 1.77258 +7.57256 8.59456 +5.36208 5.81735 +7.18511 8.96618 +8.86053 9.49567 +5.39097 5.93211 +6.59094 7.26553 +3.69159 4.01914 +8.73797 8.81611 +1.41144 1.82827 +7.83555 8.07567 +6.13821 8.44907 +5.83432 6.48744 +2.93596 4.66271 +7.03215 7.59658 +1.65252 2.45337 +2.91358 4.90129 +8.94415 9.14642 +5.21005 6.1166 +0.33225 1.17039 +7.40089 8.07586 +9.30427 9.40776 +2.34188 2.81124 +1.02811 3.3344 +6.28117 7.62089 +4.80105 7.10049 +8.90252 10.0057 +2.20932 2.33093 +8.20746 10.6268 +4.31887 5.23945 +9.258 9.8985 +3.80742 4.15057 +1.11313 1.23711 +9.53067 9.70165 +7.95467 8.67187 +9.66031 9.83223 +3.61385 4.09571 +0.623148 0.652817 +7.77809 8.62118 +0.86157 1.98606 +3.12528 3.75815 +1.9363 3.22621 +8.23521 8.99175 +8.95406 10.4487 +3.38526 3.90652 +0.34281 2.0226 +0.739384 0.793829 +3.55637 3.96384 +6.1562 7.28647 +5.30211 7.51385 +1.46275 1.78688 +-0.0144662 0.868488 +0.0740443 0.119828 +9.26206 9.83923 +0.743397 1.40754 +4.68823 6.62985 +8.8291 9.17373 +4.66711 5.09313 +4.023 4.44994 +5.68937 5.79194 +8.04835 8.06763 +6.94662 8.00075 +0.774686 1.13428 +0.381819 2.34757 +2.1235 2.63524 +5.42795 6.89998 +6.07662 6.29083 +6.47821 6.7872 +2.58305 2.6192 +-0.598336 1.23458 +4.29089 5.43332 +8.09914 8.28229 +5.05925 5.35258 +0.181705 0.444466 +3.27849 4.79932 +0.310314 1.43125 +1.13836 2.76825 +1.2529 4.09336 +0.198106 0.608625 +1.77442 2.23777 +6.29823 6.64574 +1.22125 1.37929 +1.77592 3.04011 +1.43999 2.90926 +4.20495 5.32396 +4.98874 5.33211 +8.36483 8.67875 +5.65373 7.14132 +2.8303 3.05037 +3.41509 3.54032 +7.21702 7.85857 +5.79848 5.8913 +4.52711 5.65511 +2.04663 2.66919 +5.76363 6.77903 +-0.153046 0.77878 +4.37474 4.49936 +6.86786 7.81999 +8.92084 9.16368 +7.5975 8.56954 +0.197493 1.07503 +3.99803 4.67019 +9.35123 9.60094 +1.46442 2.4256 +5.21501 5.79612 +8.80879 8.99085 +-0.109252 1.30631 +7.34965 7.87947 +7.08703 8.12723 +0.985946 2.14663 +0.48521 0.856118 +6.57719 6.70623 +8.71165 8.72286 +3.16883 4.8714 +-0.21189 0.412944 +3.6526 4.37121 +0.364649 1.3363 +9.27722 9.35135 +3.47517 3.8793 +5.67149 6.28631 +6.52789 6.61039 +9.36323 10.4189 +4.30743 6.18638 +7.93653 9.4877 +8.24024 8.41475 +2.75692 3.13935 +8.80223 9.1489 +3.42656 3.90557 +8.96598 9.3217 +1.99582 4.84803 +5.1178 5.8688 +4.47901 5.73433 +7.30397 7.85527 +0.18463 0.656832 +7.80806 8.41666 +8.50023 9.42628 +7.67563 8.64756 +9.46783 9.52169 +2.06797 3.3107 +5.08863 5.10167 +0.82146 1.39055 +7.5428 8.04736 +9.09407 10.8208 +9.15219 9.99706 +1.61637 3.46354 +5.3812 5.96247 +9.34115 9.73575 +6.49221 7.30031 +1.56337 3.39704 +8.463 8.60841 +-0.322779 0.658242 +8.50173 8.72125 +0.854851 1.83405 +7.81945 8.12841 +2.60724 3.19985 +5.03714 5.55331 +1.85041 3.36816 +7.26119 7.64364 +5.75223 5.99653 +4.00026 4.43863 +5.00939 6.03009 +6.22879 6.6638 +6.44231 7.18622 +1.66002 1.88587 +2.59781 2.84919 +4.96399 5.40545 +5.70327 6.95018 +6.97141 7.08346 +3.98535 4.6179 +5.96795 7.14997 +5.07581 5.8262 +4.65665 4.98851 +8.65646 8.70986 +3.04175 3.19155 +0.796073 1.0952 +8.24859 8.57828 +5.26952 6.34245 +7.94685 8.78542 +0.193963 0.968524 +6.61159 6.80186 +9.37533 9.79195 +8.94048 9.74959 +5.77272 6.48616 +6.0092 7.86718 +2.52621 2.58938 +8.91347 9.22421 +4.20466 5.45909 +4.82157 5.09167 +7.35464 7.36611 +5.12413 6.45063 +2.12404 2.81187 +8.88875 9.20752 +2.59731 3.20587 +1.54772 2.08968 +6.70449 7.08952 +-0.0967146 0.888521 +3.10207 4.34815 +1.20807 2.35497 +6.00753 6.08492 +3.21837 4.00446 +4.34095 6.0963 +4.24821 4.79576 +4.49523 6.6669 +1.49483 2.52552 +0.0411497 0.641526 +8.3854 9.20954 +8.12419 8.93702 +0.0201515 1.06914 +1.57617 3.44176 +1.4173 1.76847 +5.42261 6.51539 +6.6744 8.46109 +3.05234 3.59179 +6.49059 7.24618 +7.01989 7.69901 +2.34664 2.90601 +9.17324 9.86754 +5.50919 5.70258 +2.40486 4.6009 +3.74368 4.00093 +6.9211 7.33554 +7.41358 8.7413 +8.78284 9.62033 +2.96753 3.01602 +-0.200693 0.535532 +6.4383 6.45049 +8.28835 9.42148 +4.2379 5.35128 +4.68397 5.04593 +5.7185 7.03177 +5.37494 6.43977 +2.99518 4.08138 +7.28064 7.54638 +9.10622 10.4907 +1.23839 1.50915 +6.7823 9.24533 +8.45679 8.62427 +0.106718 0.69304 +2.84119 3.50375 +3.60466 4.51338 +8.04709 8.19023 +3.31632 3.48054 +5.9027 7.46331 +-0.621072 1.13003 +8.57167 8.69262 +0.301047 1.42246 +1.24229 2.44616 +0.962706 1.55754 +8.77327 9.55275 +1.77899 2.44335 +0.368575 1.84726 +9.05918 9.07832 +6.61723 7.68015 +8.59899 8.80383 +-0.133927 0.20271 +5.69266 5.74809 +0.68202 1.52342 +7.17359 7.91482 +5.74049 7.34297 +7.88371 7.9683 +1.58749 2.26543 +3.96728 4.45988 +5.4354 6.88336 +1.68706 1.6976 +6.56907 7.40696 +0.518151 0.724124 +8.99155 9.36995 +6.00506 7.91529 +5.26967 6.11536 +2.37416 2.50887 +8.47983 9.31509 +2.38155 2.54346 +8.08415 9.65214 +1.00693 3.19203 +1.6523 1.73553 +6.85283 6.9958 +4.11425 4.90193 +1.39597 1.58725 +5.05551 5.19458 +5.89969 6.11394 +5.9148 7.26824 +9.32271 9.93989 +1.62911 2.58215 +5.43399 6.14203 +3.11393 3.58792 +8.57619 9.3788 +2.23349 2.7884 +8.09022 8.54326 +9.7114 9.87076 +5.91086 6.10885 +7.35805 7.57276 +0.650002 0.879866 +3.24977 3.75531 +2.73948 3.41051 +3.08006 4.62772 +3.71868 4.31519 +4.13905 5.78577 +1.77297 3.02983 +5.85931 5.89333 +3.68972 3.93193 +1.43922 2.98425 +6.51534 8.33386 +6.6821 7.50874 +1.2541 2.11722 +5.40634 5.54411 +4.55502 4.60346 +4.32484 4.68497 +3.40711 4.31975 +9.20893 10.0853 +6.12594 6.9009 +0.12664 0.347193 +7.53378 8.82258 +7.79572 8.91645 +2.50098 3.39701 +4.17873 4.97732 +1.05822 2.47032 +3.1012 4.97736 +8.42126 8.74568 +7.83301 8.17843 +9.26618 10.584 +3.02667 3.7128 +8.30654 8.69242 +2.87173 3.43275 +6.59917 7.54843 +7.03447 8.20283 +5.75718 6.40637 +2.62899 4.1855 +-0.520148 0.902194 +5.1538 5.61763 +1.25625 2.33142 +4.16336 4.3384 +3.01296 3.41026 +3.16515 3.26305 +2.40944 3.21897 +6.80742 8.57141 +1.15125 1.54824 +8.72251 9.50878 +3.15703 4.04482 +0.470308 0.726093 +0.199979 0.878243 +7.8908 9.17915 +6.91793 7.16038 +4.64783 5.00217 +2.21237 3.03073 +1.5825 1.63362 +3.18806 5.20795 +5.92725 5.95595 +4.65027 5.09868 +6.42204 6.87201 +8.08637 9.40221 +4.95542 6.16185 +7.45987 7.57979 +8.826 9.13961 +4.42078 5.27977 +7.26216 8.97585 +2.26919 3.33512 +9.4077 9.81908 +0.722223 1.03378 +-0.0497795 1.19355 +8.22686 9.31082 +0.0733766 0.93037 +7.47883 7.9062 +5.28731 5.74181 +1.78496 3.61348 +0.690987 0.764344 +2.56442 3.54999 +4.27944 5.43124 +4.04412 5.35376 +0.663756 1.88268 +1.73567 1.78553 +8.07666 9.41842 +7.70138 8.42873 +9.27113 9.55873 +0.982413 2.5565 +0.994807 1.02007 +5.01226 5.31923 +8.87435 10.0597 +1.74836 3.22578 +0.151528 0.191719 +5.82608 6.06438 +1.17239 1.59955 +3.18515 4.11049 +1.92258 3.70604 +1.63692 1.8266 +1.83542 2.66228 +2.21954 3.11425 +3.97546 4.3928 +0.731374 2.05705 +5.44809 5.96359 +9.85934 10.0553 +8.42169 9.63654 +6.68148 8.43446 +2.00014 3.3485 +0.735924 1.73 +1.61833 3.05643 +7.87934 8.67316 +8.67441 10.0032 +0.794573 1.2493 +6.11926 6.41441 +5.2715 5.82597 +9.41854 9.46625 +3.46299 4.06742 +5.6487 5.79053 +1.46503 3.43496 +0.9957 1.53939 +2.4714 3.1301 +0.887049 1.6196 +3.04884 3.19662 +1.24337 2.05758 +7.61142 8.55766 +0.998279 1.64425 +4.74917 5.85236 +2.97632 3.94611 +4.11786 5.62709 +7.40498 7.62083 +1.47854 3.64736 +2.1176 2.64511 +4.55533 5.89436 +7.44618 9.79926 +-0.410242 0.737348 +5.719 6.30861 +8.33692 8.38222 +8.78122 9.98195 +3.75452 4.26866 +2.23771 2.44985 +6.72455 7.61362 +5.9797 6.58846 +6.72885 7.60315 +-0.710302 1.18332 +7.73287 9.383 +6.61213 7.67394 +4.12945 5.68527 +-0.300887 0.341615 +5.77978 6.41534 +8.34001 9.96874 +1.62323 1.8283 +1.71788 2.23905 +7.43484 8.0418 +3.47322 3.8047 +3.47311 3.51261 +7.82093 8.86377 +2.46973 2.99125 +7.91166 8.55065 +3.39807 3.43599 +8.94792 10.0437 +7.70859 8.32487 +5.86852 7.13103 +7.64996 9.19033 +6.66742 7.8092 +7.88241 8.58675 +9.42939 10.3479 diff --git a/geom_bottleneck/tests/data/test_012_B b/geom_bottleneck/tests/data/test_012_B new file mode 100644 index 0000000..5f6e43c --- /dev/null +++ b/geom_bottleneck/tests/data/test_012_B @@ -0,0 +1,5000 @@ +1.17434 1.46837 +2.58198 4.16589 +0.234041 0.968658 +1.52703 1.59579 +6.7103 7.44033 +3.19227 4.41539 +5.42556 5.57369 +3.45417 4.86089 +3.82256 4.1092 +7.82551 7.90784 +3.9384 4.71796 +5.60335 5.9054 +7.96663 9.8987 +6.30305 6.64853 +7.33246 10.5316 +0.623312 1.09008 +2.63041 2.64616 +5.36028 6.28956 +4.64202 5.91858 +7.55219 7.96304 +7.73736 9.18221 +1.67114 1.84851 +5.07514 5.12159 +7.03732 7.05228 +7.5006 7.59212 +0.244947 1.55875 +0.0170454 1.10485 +1.95394 3.53669 +5.66015 6.01949 +5.88211 7.64639 +7.46698 9.27085 +6.37429 7.10154 +4.54535 4.81932 +8.21203 9.35896 +4.89933 6.20802 +3.68683 4.17831 +0.477467 0.828394 +6.17871 6.77834 +9.77523 9.92676 +0.854808 2.38709 +7.93326 8.3553 +2.10917 2.27771 +4.07045 4.72793 +8.2016 8.8011 +2.9205 3.95746 +2.89806 4.39725 +5.5654 5.78669 +9.5219 9.98543 +7.08591 7.19588 +8.35359 9.57893 +9.81348 10.0345 +8.5994 9.71835 +5.43903 7.25234 +1.82768 2.92724 +4.44952 6.79754 +5.66747 7.34386 +5.88153 6.39253 +3.34008 4.22032 +2.46068 2.76051 +0.370778 2.61681 +6.02508 6.26809 +4.32654 4.93262 +7.41536 7.99616 +8.84229 9.87911 +3.8551 5.84353 +1.56832 2.34694 +6.96099 7.42028 +8.15753 8.72014 +9.23141 10.3815 +7.4484 7.80228 +0.473671 0.874895 +3.15689 3.50687 +3.58122 4.09945 +3.55022 3.74767 +4.42708 5.80211 +4.40956 4.68699 +3.80576 4.61856 +7.29965 8.28614 +7.40582 8.15308 +1.69789 1.77669 +1.66419 3.44308 +0.473997 0.872506 +7.83959 8.52898 +6.22416 6.36949 +-0.187159 0.871822 +0.232336 0.585965 +9.29905 9.44357 +1.4459 2.40589 +2.83008 3.19758 +1.15291 2.12112 +2.58686 3.33896 +6.79362 7.88068 +0.228178 1.48318 +5.60001 6.20258 +4.97803 7.10992 +1.70429 1.962 +2.72659 3.13886 +9.22714 9.25889 +3.84694 3.88778 +-0.282077 1.48155 +9.28756 9.58517 +4.34069 5.59751 +8.63909 8.76839 +8.86236 10.7642 +6.77597 8.41888 +7.30621 8.64164 +0.685607 1.22755 +2.91514 3.22638 +2.72098 3.66837 +8.17528 8.32638 +5.19632 5.7506 +7.34177 8.70639 +5.74082 6.35524 +5.95975 6.69284 +9.40187 10.4488 +2.92761 3.36735 +0.399531 3.13082 +4.83399 4.92635 +7.74539 8.56852 +1.76322 3.5086 +6.54479 6.72963 +7.64362 8.12404 +1.35542 1.45313 +0.214385 0.718085 +1.7006 3.21962 +5.91009 6.47862 +2.21093 2.34636 +5.96919 6.79365 +6.59951 8.22203 +1.54571 1.59397 +3.27012 3.79128 +0.32455 0.622995 +1.73926 2.78017 +9.81035 9.84077 +7.38441 7.85171 +8.90372 9.34186 +7.26323 8.41174 +5.7363 5.97348 +8.25473 10.1281 +2.3981 2.52096 +8.53783 9.63442 +8.51755 9.2735 +6.48614 6.773 +3.40182 3.65137 +2.1353 3.04852 +2.95397 3.73285 +6.98063 7.4963 +4.50189 5.26384 +0.21416 1.49363 +0.632196 1.36307 +6.57833 6.60481 +8.0634 9.33903 +2.79759 2.94462 +4.43747 4.58861 +6.48733 6.86569 +2.28008 3.47037 +6.87452 7.77431 +-0.156821 2.71557 +0.72595 1.78862 +1.97586 2.38196 +8.61839 9.1468 +4.55496 5.68986 +0.26923 1.15728 +9.63757 9.7236 +1.39497 1.96698 +4.8643 5.04172 +6.64675 7.66435 +2.56256 2.6015 +-0.381989 0.611211 +0.676336 1.26896 +8.95304 9.03243 +5.62058 6.07997 +3.36522 4.04276 +8.64868 10.5024 +4.75813 5.19834 +1.96608 2.05864 +9.01449 9.10397 +3.72786 4.51921 +5.6938 6.96584 +1.73499 2.9314 +2.73099 3.41409 +8.77171 9.07665 +4.63865 4.67649 +8.6698 9.30782 +-0.168259 2.09581 +9.29672 9.56 +0.372544 2.60567 +0.450487 1.32919 +6.95341 7.6399 +3.4403 5.24993 +5.53469 6.97831 +-0.79664 1.21306 +5.68831 6.14413 +8.85601 8.95444 +3.83309 5.211 +5.51573 6.5114 +3.64009 3.99648 +4.40759 4.99283 +1.85198 2.6457 +2.72645 3.74803 +2.04751 3.00998 +3.19365 3.9383 +8.09529 9.45596 +8.88173 9.5618 +0.609816 2.67806 +1.57288 2.60884 +1.68354 1.80124 +4.92058 5.9959 +1.48728 1.84885 +0.299669 0.413905 +9.02156 9.56731 +7.50854 8.49023 +0.667131 1.89987 +2.22472 2.58793 +5.84395 8.79426 +2.35839 2.66935 +3.43111 3.69982 +6.71023 7.36801 +6.75697 9.0991 +2.35352 2.85316 +6.73054 7.39006 +9.48673 10.1493 +6.71226 6.72805 +9.22083 9.71889 +8.36513 9.33921 +0.0652672 0.319993 +3.26467 4.60881 +7.62269 7.79878 +6.48608 6.69515 +6.21737 6.88645 +6.56094 6.9699 +1.61317 2.7167 +5.08621 6.29754 +2.24676 2.8076 +3.09943 3.93921 +9.74093 10.0968 +0.417699 1.6381 +9.2958 10.2973 +3.6663 4.1369 +0.0229943 0.448065 +9.2928 10.1833 +3.66334 4.22032 +0.812172 2.19952 +7.88025 8.71192 +8.69379 9.34922 +1.70691 2.95352 +8.28737 8.29985 +5.22491 5.354 +4.03526 4.14084 +6.49359 7.05924 +0.24853 1.44718 +7.86936 8.75135 +5.76 6.68919 +5.85437 6.14314 +5.86292 6.0516 +2.35692 2.91295 +0.0990674 1.29386 +2.9911 3.56188 +0.552671 0.638929 +5.80756 6.22761 +1.21067 1.77175 +4.51882 4.72936 +1.99969 2.89732 +3.65968 6.61987 +0.478582 1.33355 +0.259061 0.289813 +3.89264 5.02474 +0.349236 0.438003 +7.70442 8.1729 +7.90389 10.1876 +3.06898 3.15219 +4.77811 5.29095 +9.76561 9.89451 +4.14295 4.2489 +0.540224 2.28623 +9.60749 10.2284 +8.49555 9.00307 +7.89668 9.76886 +4.12631 4.70897 +7.87898 7.91814 +9.29858 9.52908 +9.24009 9.91544 +3.73498 4.70275 +5.44467 5.9274 +2.13453 4.85697 +2.29607 2.88771 +0.807842 1.82319 +0.319005 2.08473 +1.62 1.63649 +2.20431 3.23869 +2.00132 2.77136 +6.64752 6.71706 +8.12249 8.28379 +7.55541 7.7813 +3.51763 3.64484 +9.21075 10.2811 +2.24501 2.54426 +5.64566 6.46452 +6.72307 8.56698 +3.91728 4.60262 +4.02535 4.29548 +3.0499 3.53135 +1.30677 2.32194 +9.36908 9.90669 +3.92387 4.33848 +2.87312 3.08243 +4.49167 5.2749 +5.43143 6.74905 +6.94595 9.16539 +1.9784 2.00429 +9.42478 10.2226 +3.7185 3.96576 +9.37729 9.50574 +5.34283 6.89736 +4.95341 5.84626 +2.91654 4.28413 +8.26544 9.3076 +6.23114 7.20273 +1.02585 2.21446 +1.6718 2.29591 +2.28926 2.73452 +-0.648145 1.105 +1.44194 2.18562 +6.78584 8.37985 +2.00402 2.08248 +1.64076 2.04067 +0.0419044 0.455962 +5.51723 5.72098 +5.42117 6.81165 +5.70331 5.81707 +4.97889 5.60741 +3.38797 4.46846 +7.20995 7.66784 +3.45388 4.23386 +3.11057 4.35995 +3.29476 4.04676 +2.0519 2.94719 +5.37101 5.38271 +5.99383 6.64188 +7.48444 7.6377 +2.15043 3.05399 +1.54093 1.83799 +5.59223 5.87222 +5.8005 6.08042 +6.1208 7.22563 +1.2938 2.17454 +4.92405 5.0402 +6.91336 7.79688 +1.47978 1.99762 +9.00494 10.8315 +5.84805 6.15303 +4.95368 5.49096 +8.21704 8.31192 +0.715222 2.33517 +0.904183 2.54741 +3.42349 3.74906 +0.627978 2.37092 +8.41477 8.72651 +3.55373 5.58652 +4.12685 4.61533 +0.775274 1.41263 +4.78915 5.08639 +6.35791 8.15015 +2.88242 3.63509 +2.78526 3.07834 +0.39129 1.15933 +3.26615 4.74531 +8.78873 9.8888 +7.25612 7.45972 +4.97452 5.30012 +0.757255 1.35518 +1.29516 2.52446 +4.66838 4.96648 +-0.0720209 0.832726 +2.68276 3.21123 +8.44253 10.0311 +3.40809 4.70506 +1.09617 2.35452 +5.19302 6.73599 +1.25316 1.58101 +6.2056 7.10099 +7.7666 8.52777 +0.301239 1.37275 +0.522829 0.731575 +6.73869 6.96826 +2.41703 3.20567 +4.94617 6.22052 +5.41524 7.68272 +6.0408 6.29938 +0.0642067 0.600878 +6.32122 6.63505 +3.25427 4.70611 +5.88704 6.1678 +8.71533 9.08476 +6.25575 6.88392 +1.54462 1.56366 +3.95938 4.03326 +2.54671 3.66798 +8.48603 9.10156 +3.37369 4.65454 +5.25469 5.64636 +7.02624 7.36449 +8.17061 8.44321 +9.23147 10.1149 +1.45589 2.25886 +6.47702 8.25307 +7.69088 7.91753 +0.442832 0.616926 +8.35355 8.83222 +7.65142 9.58906 +4.04877 5.17345 +0.76012 1.8686 +6.54877 7.40058 +7.41774 7.65429 +8.69655 9.3325 +4.8302 6.25306 +1.77203 1.90284 +3.67485 4.94569 +6.60162 6.72031 +3.05924 3.35235 +0.0823162 1.3486 +8.42991 8.86331 +6.81596 6.83527 +-0.0174808 1.6745 +-0.758131 1.08928 +4.14423 5.46342 +9.26253 9.85714 +7.42749 8.58214 +4.88849 5.86936 +8.99339 9.38141 +8.85301 9.18285 +2.64303 3.45658 +7.1133 8.66473 +3.50745 3.8629 +7.81615 7.83244 +2.94991 3.8741 +7.91822 8.8362 +-0.0553088 1.19059 +7.35558 7.77948 +2.11257 2.20563 +8.57533 9.16338 +2.3515 3.13009 +4.13239 5.38696 +2.20763 2.93941 +7.2451 7.3211 +0.834388 1.57413 +4.47024 6.17855 +4.75947 6.80913 +2.99607 3.54732 +8.15998 8.80718 +8.94688 9.27971 +4.46335 4.9522 +5.30725 5.69786 +7.63989 7.86974 +6.69589 7.69565 +5.34018 6.08115 +8.59515 9.62264 +1.80557 3.22507 +8.62429 8.94242 +1.34532 1.95042 +8.60707 8.80741 +8.03275 9.40327 +4.30357 4.39095 +8.97954 10.7076 +2.18143 3.51825 +3.98695 5.62062 +2.48813 2.60622 +5.56957 6.43776 +5.18249 5.55459 +3.45373 3.64101 +-0.00345662 0.570597 +3.61127 4.69761 +9.37858 10.6205 +7.24635 8.19639 +4.70142 4.80735 +3.30055 5.14257 +0.860415 1.31635 +4.72924 5.46893 +7.47391 7.72644 +6.22287 6.57754 +0.181652 1.01366 +2.14494 2.80736 +2.16406 3.19383 +8.52991 9.22722 +8.74411 9.06935 +0.575831 1.02699 +2.47315 3.0331 +4.2872 4.59813 +5.82293 7.03604 +2.08982 2.25319 +7.3626 8.41994 +1.23867 3.10885 +7.397 7.78026 +6.78837 7.32977 +0.829368 1.56617 +9.23075 9.35172 +6.76562 7.23578 +0.42851 0.839401 +4.83626 5.5852 +0.150032 2.45322 +2.16811 2.47439 +5.60245 5.81188 +7.43707 7.46519 +0.167317 1.44642 +4.9732 7.58343 +8.67391 10.2957 +0.318592 0.639284 +3.365 4.25929 +7.83683 8.88895 +5.20557 5.30114 +0.940347 1.74022 +5.39149 7.13464 +1.10826 1.27913 +1.9147 2.31276 +0.935283 2.49181 +3.67898 4.33336 +5.10125 6.07734 +0.348807 0.839242 +0.310986 0.58381 +2.03594 2.43119 +5.49755 5.94215 +1.94885 3.34409 +9.66806 9.97883 +4.79099 5.45155 +4.81158 5.30001 +5.17667 5.90019 +9.64168 9.99177 +1.14899 1.22792 +0.466236 0.952985 +6.93679 7.72282 +2.97285 3.23931 +9.22517 9.24315 +7.25783 7.46414 +4.37304 4.51815 +4.01069 4.02979 +0.843132 1.80443 +4.78572 6.04237 +6.02471 6.38074 +4.99536 7.76852 +4.97442 5.17384 +0.731231 1.49497 +2.2797 2.90845 +9.13211 10.341 +4.19545 5.08597 +6.13127 7.09817 +2.65124 5.02208 +5.40235 7.12912 +6.86258 6.91991 +8.24317 8.55273 +7.6877 7.69875 +3.33922 3.53776 +0.089484 0.40755 +1.34909 1.68726 +8.43113 8.72899 +4.90038 5.55994 +0.308089 0.490555 +5.42628 7.1433 +2.11647 2.56987 +3.56934 4.1619 +8.35794 9.24416 +8.8645 9.69151 +5.10701 6.0036 +7.66385 7.8412 +2.89952 4.55221 +6.01533 6.38269 +-0.945182 1.07304 +1.79537 1.85576 +-0.0313338 0.501067 +8.85689 8.87522 +1.61143 1.7773 +9.53229 9.84943 +3.51669 3.81091 +-0.448016 1.10903 +3.16889 3.439 +4.30534 4.36372 +6.20158 8.09618 +2.20949 5.23616 +3.29459 4.17079 +3.90101 4.05611 +5.89688 6.85702 +0.734474 1.04471 +7.84341 8.02702 +8.69431 10.1086 +9.73194 9.92195 +7.63516 7.70631 +8.51416 9.33072 +-0.0712911 0.361001 +2.76979 3.22708 +5.34404 7.5165 +5.64429 5.79865 +0.0755012 0.363483 +5.05631 7.27153 +-0.60164 1.09659 +0.457228 0.876186 +4.27092 5.38033 +8.63891 9.04134 +6.29608 7.04242 +8.97795 9.93013 +5.00385 5.57737 +8.48068 9.44885 +7.35543 7.78492 +3.55698 4.01035 +-0.268117 0.649128 +0.633184 0.66254 +4.54216 4.81132 +6.15574 6.35276 +4.3663 6.36286 +1.45231 2.07039 +7.37031 7.9157 +5.30961 6.3506 +5.80757 5.81762 +4.91767 4.97519 +3.45667 3.60965 +1.7934 2.3807 +4.33289 5.41047 +1.16021 1.29979 +3.75172 4.53521 +3.10835 3.1275 +2.68167 3.00314 +4.10639 4.24094 +4.90776 5.74069 +7.30861 7.86666 +3.52822 3.70998 +5.22222 5.28033 +0.00866476 0.326377 +7.73247 8.61481 +4.25231 4.77499 +8.41148 8.54604 +2.95389 3.63497 +7.76126 9.69124 +6.41218 6.69682 +4.86285 6.44503 +1.84783 1.9065 +4.08788 4.11706 +9.17473 9.50133 +5.15091 5.78649 +1.27694 3.33579 +2.92648 3.37855 +9.37392 10.5123 +4.81878 6.34991 +8.38702 8.83716 +5.07771 6.33618 +1.47438 1.75588 +6.20935 7.11166 +1.08286 1.38 +1.40048 2.0157 +6.60355 7.26234 +5.28396 5.90003 +8.9525 9.59216 +-0.0305792 0.544664 +-0.571491 0.735471 +6.287 7.03679 +5.35225 5.4104 +0.095812 0.605976 +4.33523 4.4048 +6.13288 6.80949 +4.14654 5.5505 +-0.213214 0.260592 +7.56188 7.83088 +7.8132 8.65963 +8.02469 9.3254 +0.00641711 0.420562 +7.49269 8.15849 +9.26359 9.4366 +5.74008 7.86317 +8.62729 9.78825 +4.28946 6.20553 +3.19174 4.54991 +4.16992 4.25203 +2.46138 4.11583 +1.92971 2.16701 +3.43028 3.80842 +6.98297 7.28388 +7.51884 7.55947 +7.79102 9.44326 +0.416342 1.32311 +9.35398 9.85201 +8.72997 9.10384 +6.23398 6.88888 +7.46984 7.4875 +5.92603 6.66938 +1.77761 2.58697 +0.835966 2.06139 +9.63284 10.3565 +6.13677 6.42768 +0.151375 0.382404 +8.10315 8.13441 +5.52283 6.28113 +1.00873 2.44226 +2.5239 3.89871 +5.40599 6.72653 +3.43407 4.0068 +1.22444 1.26601 +7.04395 7.80599 +3.75987 3.77123 +6.43597 7.06249 +8.34435 8.87418 +8.25853 9.04009 +0.415321 2.32725 +0.639046 1.75525 +7.83226 8.12538 +9.55429 10.2734 +3.658 4.35867 +1.8588 3.93292 +7.38922 8.16823 +8.53626 9.23024 +0.848152 1.13412 +6.31667 7.2348 +3.81584 4.62621 +9.24748 10.7408 +2.75953 2.95288 +5.70188 6.62278 +4.22202 4.45368 +3.24616 3.88779 +1.05053 2.09846 +8.67718 9.52693 +2.14107 2.71959 +1.10518 2.69689 +5.01476 5.54139 +4.69244 5.20358 +8.88285 9.93012 +2.55228 2.77382 +6.72118 7.50057 +7.58999 8.71573 +1.83763 2.13481 +4.86135 5.27995 +4.39794 5.42117 +1.42512 2.98262 +4.80489 5.34701 +2.7993 5.13702 +7.52122 8.41729 +9.08613 9.37543 +1.1555 1.3935 +7.34071 8.0428 +8.33361 8.40349 +2.514 2.54741 +8.25732 8.41758 +1.65337 2.57964 +4.20527 5.06565 +0.723443 1.06987 +5.85836 6.64701 +7.908 8.07591 +5.01839 7.0105 +3.15908 5.10364 +4.3574 6.67192 +2.06662 2.46437 +7.5595 8.9108 +7.94919 9.20231 +4.11889 5.49714 +7.28151 7.51881 +1.30685 2.09479 +3.08479 4.47364 +4.50916 5.91511 +7.31605 7.63868 +3.14469 4.07035 +8.38431 8.87993 +7.42277 7.64967 +4.22472 4.26323 +8.49871 8.90746 +7.44431 8.09014 +8.35213 8.7504 +3.85634 4.37584 +9.12975 9.77042 +-0.326056 1.17374 +3.53802 4.06211 +6.81775 6.8467 +8.19106 8.64489 +4.20526 5.37727 +2.74081 3.72143 +0.49642 1.10775 +7.76606 8.00524 +4.79825 6.38926 +1.99478 3.20484 +4.69853 6.29508 +5.73058 7.18643 +8.11708 8.64257 +9.62375 9.84838 +5.95271 6.38989 +9.0193 9.93848 +3.91188 4.10834 +6.065 6.60546 +2.62354 3.60072 +8.53665 9.06824 +6.40691 7.44693 +1.62959 2.5825 +9.4128 9.87031 +6.24697 6.62684 +3.31136 3.45626 +4.80347 4.9935 +9.21711 9.53416 +-0.491547 1.72886 +4.75174 4.87217 +0.86329 1.53331 +2.4586 4.2578 +5.10301 6.2815 +5.08302 5.86788 +6.12434 6.78948 +9.68323 10.0973 +3.52576 4.40424 +4.9925 6.89084 +0.846638 1.80782 +1.09709 1.7685 +8.38592 9.03312 +9.56243 10.2682 +5.03592 6.6429 +7.8609 8.04599 +1.21404 1.31975 +7.47824 9.2063 +1.47849 2.68795 +1.2909 2.06381 +5.21288 5.54616 +6.27218 6.99345 +4.77622 5.08494 +3.30665 4.14735 +3.38947 3.55545 +7.71197 8.53162 +1.10565 1.50806 +0.7889 0.984689 +2.88598 3.33244 +5.70958 5.81232 +5.16567 6.24511 +6.91255 7.25784 +-0.401084 0.753156 +4.81138 6.20671 +1.67301 3.58501 +7.19478 8.25624 +1.24428 2.2523 +4.31631 5.33357 +0.589196 1.02017 +5.69207 6.97803 +2.3854 3.25501 +4.1362 4.91135 +8.9932 10.3184 +7.95871 8.45158 +4.03213 5.26347 +3.09506 4.06425 +-0.0310321 0.738171 +7.35733 7.61512 +2.48488 2.96253 +4.72098 5.69867 +5.5395 5.96914 +3.17854 4.283 +6.50012 7.33744 +1.93266 3.00941 +1.49319 2.71826 +9.0187 9.13099 +7.15259 7.40691 +8.71939 8.93257 +1.57203 3.11249 +0.933429 2.16903 +2.99663 3.71667 +2.06144 2.81311 +7.9072 8.2103 +0.490069 0.614737 +7.84111 9.70812 +1.15363 1.6421 +1.15475 1.43307 +8.2228 9.92116 +7.76825 8.40724 +6.15122 7.31322 +7.1427 7.49294 +2.30516 2.7019 +2.03336 4.03387 +8.3918 9.85707 +8.57214 9.59345 +3.8057 4.1119 +8.9223 9.38556 +9.32051 9.60504 +7.13349 7.69154 +1.71855 2.00425 +5.10333 6.0605 +-0.149137 0.80973 +0.466224 3.1698 +4.19165 4.29604 +1.64018 2.3161 +9.40397 9.89211 +5.21738 7.06323 +0.525526 1.0331 +8.06992 8.08704 +9.81539 10.0915 +9.33514 9.50521 +5.95494 6.54519 +9.21466 9.35909 +4.96603 5.18164 +3.89238 5.53056 +5.04546 6.32916 +8.63758 8.65805 +7.03226 7.57074 +0.32029 1.10893 +0.194176 0.992252 +8.79061 9.50848 +0.239137 0.300717 +7.7234 8.43747 +3.43679 4.28954 +8.31382 9.18928 +1.39612 1.67253 +6.95733 7.39846 +1.29129 2.12185 +7.93611 10.2305 +3.67764 4.17562 +1.38149 2.42407 +2.2847 2.48412 +9.28655 10.0661 +2.94115 3.21326 +7.04238 7.91536 +5.06012 5.61526 +8.95611 9.91736 +2.18524 3.44007 +1.0692 1.10987 +4.37019 5.18443 +5.82014 6.441 +1.68642 1.70458 +4.93783 4.9535 +9.42003 10.1196 +-0.356795 1.30987 +1.37778 2.80527 +9.54126 10.1758 +8.67413 10.5984 +0.914291 2.0697 +6.08696 7.09832 +2.82202 3.31103 +4.07818 5.50195 +2.85223 3.67449 +6.03006 7.10863 +8.84655 10.528 +5.08031 6.2001 +1.00272 2.74191 +0.169102 0.223253 +0.025089 1.26534 +-0.203339 0.64667 +0.899666 1.48885 +0.74235 1.49976 +6.28212 6.80412 +5.65159 5.93106 +2.1686 2.7445 +5.02936 5.43091 +8.07124 8.80499 +8.65696 8.95802 +7.68394 8.365 +8.65062 8.69146 +0.058248 1.19535 +5.74545 5.84057 +6.05244 6.52152 +9.3878 10.3328 +7.71379 8.88044 +3.32961 4.54105 +8.51987 8.62854 +4.10821 4.16902 +9.47639 9.78723 +4.72417 4.84793 +2.32867 2.94068 +9.52275 9.57815 +5.32867 6.96127 +4.32462 5.1508 +4.46919 6.45961 +8.62661 10.9533 +0.0244049 0.56156 +1.49207 1.73164 +7.03156 7.81168 +5.88587 5.89732 +8.43632 9.65085 +7.52612 8.06726 +4.82464 5.6193 +3.8062 3.90356 +2.42708 2.51646 +2.06458 2.45877 +0.427218 2.24283 +7.42616 8.11513 +0.617708 1.01833 +8.74218 9.03592 +-0.213346 0.599112 +9.05291 9.59124 +5.20365 5.54277 +2.85289 3.99509 +3.08468 4.58456 +0.136826 0.685254 +3.87191 3.99021 +0.970836 1.49673 +2.44355 2.53584 +8.88615 9.94545 +3.90591 4.52798 +1.52518 2.50658 +7.21268 9.07745 +0.767314 1.23833 +8.62975 9.42367 +6.71524 7.67686 +7.61205 8.48292 +5.312 5.65087 +4.75627 5.96261 +7.90674 8.0753 +7.37887 7.71478 +3.74483 5.52984 +2.7187 2.85544 +4.7902 5.62159 +2.89671 5.19815 +7.37268 8.72506 +7.11916 8.28301 +9.19814 9.75279 +1.2085 2.60113 +-0.632009 0.889734 +7.99858 8.39743 +6.48346 7.10822 +6.30616 7.06648 +5.56514 6.51183 +2.41505 3.56224 +6.83749 8.84447 +9.05111 9.46906 +7.77476 8.4091 +6.11378 6.31232 +4.42882 5.69917 +5.88107 8.052 +3.75437 4.08893 +2.70487 2.77664 +7.26028 9.77257 +1.44621 2.73267 +2.0384 2.60397 +2.95402 3.68949 +6.04766 6.4054 +0.716046 1.77698 +1.5084 1.72988 +2.58426 2.80376 +8.05255 8.59793 +6.06336 6.20709 +3.29813 4.31473 +2.53477 4.92554 +8.78711 9.88634 +9.26627 9.82082 +6.70683 6.81257 +8.25978 8.99788 +7.28054 7.64237 +5.14556 5.20711 +4.20431 5.87866 +8.96592 9.97597 +4.06216 4.41519 +8.49174 11.0491 +5.24547 6.03094 +4.65885 5.95835 +5.09606 6.34846 +6.30463 6.65933 +6.48022 9.56168 +1.38088 2.98143 +0.486911 1.16767 +8.16327 9.34821 +0.768885 0.782616 +4.51699 6.08086 +9.55086 9.70242 +2.86802 3.72489 +1.88496 2.18749 +4.31876 4.33726 +8.38871 9.45631 +8.80634 9.36198 +5.232 6.42399 +9.86919 10.0492 +3.61902 4.53086 +3.13118 4.42364 +2.69395 3.1816 +-0.303144 1.32309 +4.28871 4.36739 +3.8631 4.08745 +4.9291 4.98968 +7.14273 7.25505 +2.56623 2.59122 +6.01753 7.72265 +6.76051 7.53954 +6.76933 8.14741 +0.933137 1.83537 +7.9357 8.57904 +5.55847 5.59984 +4.25563 4.3345 +4.28087 5.21348 +8.88534 9.06554 +1.88575 2.94002 +5.26613 6.04562 +0.514249 1.45538 +0.130644 0.501645 +4.30564 4.86337 +1.57246 2.38451 +0.303814 1.77474 +4.22675 5.02783 +6.75381 6.78634 +5.64096 5.9725 +6.76159 6.98142 +2.35569 2.39119 +3.29794 4.95962 +6.55055 7.03366 +5.31474 5.69404 +9.01335 9.16988 +8.58306 9.37831 +7.06522 7.07778 +1.14695 1.74744 +3.15507 3.22865 +5.5925 7.14168 +2.14679 3.68767 +7.54789 9.71878 +1.5667 2.08742 +-0.604726 1.66718 +0.306012 0.54799 +2.61731 5.08257 +0.80957 1.74655 +8.22035 8.81637 +4.401 5.449 +8.89389 9.01988 +4.80574 4.9322 +2.19895 2.88565 +9.06688 10.8095 +1.23727 1.58699 +7.14836 7.92057 +4.65155 6.15149 +0.563061 2.16535 +7.66764 8.0341 +8.32324 8.42774 +4.54541 5.11069 +8.0237 8.09992 +7.26113 8.09404 +2.55196 3.20317 +8.1236 8.60951 +1.90437 3.23006 +0.888133 2.50365 +1.13618 1.69444 +2.60463 3.01696 +7.2311 7.73229 +5.06501 6.01487 +3.9893 4.10116 +1.45278 1.56937 +2.74601 3.80778 +9.40705 10.3843 +3.02533 3.52213 +8.7097 9.2268 +8.73145 10.5552 +2.56059 3.5742 +6.27328 7.57089 +3.23291 3.30811 +6.33804 7.20304 +7.63648 8.34564 +9.82053 9.93597 +3.14924 4.58629 +5.28253 6.33733 +1.99411 2.04104 +0.305593 0.420302 +5.39668 6.64188 +7.99992 9.37823 +5.25169 5.65987 +0.109291 0.875734 +3.08589 5.50296 +6.51358 6.62588 +5.34687 5.58204 +0.043587 0.932787 +-0.0264143 0.28677 +8.09722 8.37087 +5.46612 6.30285 +2.89146 3.49892 +6.73278 7.11762 +5.03068 5.90176 +1.7459 2.87727 +0.207707 0.448933 +7.00453 7.63105 +6.02789 7.87991 +8.1917 8.95854 +7.49014 8.73215 +8.48402 9.22063 +1.0467 2.4687 +0.241901 1.38802 +2.65867 2.81258 +5.46725 6.59448 +3.40578 3.75607 +4.2495 4.26392 +5.6608 6.213 +2.99705 3.88852 +6.17231 6.72018 +-0.17415 0.492739 +4.89596 6.49895 +4.68876 6.60218 +-0.0510568 1.46013 +8.87099 9.28179 +3.98894 4.5838 +-0.20015 1.59214 +8.80756 9.51828 +7.74921 8.53538 +-0.380041 0.440574 +2.69409 3.91466 +2.42747 4.56745 +6.25881 7.75647 +7.2941 7.77193 +2.60806 2.90251 +0.325028 1.22219 +8.29921 9.01416 +3.85524 5.45451 +5.2612 5.71877 +2.92849 3.73937 +8.6242 8.70808 +7.28153 7.35797 +1.65378 2.87917 +3.46034 4.24143 +3.99989 4.3199 +1.15266 3.60328 +4.8464 6.4887 +4.67021 4.68421 +6.96861 7.31554 +0.00723008 0.817047 +7.59589 8.88352 +5.56725 6.08465 +9.02409 9.19527 +5.81681 6.74193 +1.98221 2.98678 +8.76392 10.7646 +4.3903 4.50531 +1.0186 2.01838 +2.66674 2.74505 +2.41105 3.44579 +8.98295 9.18995 +8.14385 8.98779 +2.69613 3.60144 +0.445704 1.51319 +-0.634889 0.860409 +6.32737 7.10112 +7.88824 8.06838 +3.76271 4.43529 +7.66487 9.30221 +8.73974 9.59191 +3.08965 3.43006 +8.9518 9.96154 +0.727194 1.55228 +6.35214 7.12234 +2.71987 3.22996 +7.12786 7.4379 +-0.346107 0.837469 +8.47103 9.05987 +9.15744 10.628 +8.3237 10.093 +1.15052 1.16223 +6.95959 7.35423 +7.69488 8.44145 +4.21694 5.65913 +3.10562 3.37534 +9.73437 9.78252 +5.0458 5.53479 +7.80485 8.5163 +2.0442 3.75748 +-0.459177 0.498702 +7.38032 8.32195 +0.909659 2.11175 +7.08657 7.56877 +1.84997 3.10206 +4.2517 4.53819 +6.71655 7.04117 +1.06604 1.29153 +2.69273 3.31633 +2.19732 2.84826 +-0.723032 0.774865 +-0.289734 1.44645 +5.87194 7.71917 +1.01576 2.83685 +0.981927 0.998558 +3.07172 3.73201 +-0.112577 1.12642 +3.54063 3.67007 +7.21571 8.53815 +0.109957 0.839052 +6.86046 7.17211 +9.40878 9.69478 +0.989391 1.69046 +8.22287 8.8147 +1.48203 2.83308 +5.86418 8.0993 +0.749797 1.09852 +1.82996 2.50847 +0.28178 0.496017 +2.60694 3.00872 +8.6254 10.1698 +6.11641 6.41537 +7.19529 7.21342 +1.8214 2.17517 +0.991201 1.3788 +2.84924 3.12362 +5.75821 7.13843 +6.7106 7.35932 +6.6055 6.6829 +7.97105 8.58613 +1.56087 1.95845 +6.36782 7.10926 +2.43382 2.74699 +7.40509 8.8029 +8.42459 8.63142 +6.26128 7.55043 +4.6465 5.4431 +2.93214 3.29517 +0.157602 0.545214 +6.05931 6.72188 +1.7908 3.11731 +2.39217 3.58736 +7.07421 7.43852 +8.13419 9.74991 +9.53094 9.65319 +2.35726 3.68679 +-0.108561 0.874853 +6.87136 8.84157 +3.40803 4.58835 +7.50448 7.89932 +4.29762 5.53867 +0.863755 2.30032 +7.24847 7.95342 +2.89618 2.98849 +-0.928261 1.61922 +0.974105 2.91262 +6.99271 7.25856 +3.60995 5.01832 +1.26865 1.79704 +9.62217 9.80719 +1.02656 1.35514 +7.16502 7.32934 +3.12092 3.28857 +2.81374 3.84317 +8.73626 10.7585 +3.36982 3.61446 +5.08437 5.78949 +2.90218 3.0862 +9.2309 10.2523 +5.0967 5.48926 +9.73088 9.92708 +1.54013 2.78301 +6.73707 10.0789 +6.41735 6.838 +2.57935 3.04287 +5.719 6.70352 +5.42474 5.62732 +4.23904 4.69787 +4.16528 4.28736 +7.73477 8.84143 +4.90346 5.87324 +5.1969 6.14087 +3.48793 4.14182 +0.648493 1.07987 +6.88101 6.97932 +7.67342 8.74418 +5.16759 6.3871 +9.16292 9.49569 +8.77422 10.4817 +-0.358149 1.04178 +9.54616 10.3424 +3.12027 4.26504 +3.81223 4.73004 +1.2386 3.32247 +8.21963 8.42629 +9.10312 9.51016 +6.96107 7.43045 +2.98587 3.12365 +0.198165 0.211424 +5.19716 6.10856 +6.10553 6.3327 +3.98176 5.11099 +1.02512 1.04242 +4.27949 5.71947 +-0.457956 0.538807 +7.99877 9.48581 +5.88782 7.73303 +1.21496 2.85825 +8.46962 8.7862 +9.50182 10.1527 +5.85223 7.76234 +2.48368 2.52439 +2.35426 2.77405 +0.397056 0.482679 +0.160423 1.15786 +4.47109 4.8633 +4.74523 5.84196 +5.39177 5.75218 +9.00754 10.3249 +3.74813 4.03273 +3.08633 4.08426 +4.62672 5.29012 +1.92055 3.01442 +3.79279 4.5603 +9.52431 9.68334 +2.8126 3.32592 +-0.313688 0.490785 +9.06695 9.36835 +2.60321 4.14185 +4.40231 4.99535 +9.32205 10.1041 +5.3879 5.44349 +0.308728 1.0956 +9.05758 9.08283 +1.90313 2.50914 +7.1391 7.59459 +7.47357 7.95993 +1.25267 2.34827 +3.33222 4.36522 +8.78126 9.38611 +0.635979 1.62283 +8.3492 8.57545 +-0.572557 1.60517 +8.28855 9.03937 +3.47934 3.90271 +4.64498 5.43501 +0.872177 2.62011 +7.3893 7.58876 +2.14063 2.88063 +1.69361 1.75261 +4.19727 4.86483 +0.814676 1.27639 +8.19899 8.58203 +8.3394 8.99896 +9.31768 10.1694 +4.99218 5.19949 +4.2459 4.75266 +9.6314 9.64249 +4.038 4.75708 +7.92398 8.8579 +4.30747 4.54161 +7.51776 7.78258 +3.77611 5.1385 +3.53275 3.90278 +1.78619 2.12474 +3.18736 3.55159 +8.36759 8.52587 +5.52526 5.7843 +7.64174 8.09773 +4.37925 5.85699 +3.94295 5.31298 +-0.464623 0.795523 +7.02408 7.7048 +0.0690458 1.0008 +1.05445 1.32797 +0.126093 0.712612 +-0.809973 1.33869 +3.45568 3.96532 +0.433875 1.78679 +8.94667 9.65034 +1.98575 2.76936 +6.47974 7.67912 +2.74186 3.34153 +7.82655 9.32112 +4.71441 6.14932 +0.741177 1.76987 +8.05021 8.23239 +0.818503 0.882959 +7.13341 7.43399 +8.45939 8.93395 +4.44558 5.70161 +3.05657 3.86962 +8.75469 8.85537 +1.0922 2.23475 +6.00278 7.51598 +0.0530968 0.582206 +4.01788 5.48223 +1.30808 2.81869 +8.18848 8.59771 +2.43691 2.80685 +8.54045 10.6178 +7.58523 7.91634 +6.70183 7.49962 +5.81501 7.29783 +0.661853 1.58021 +6.50997 7.20411 +0.334292 1.40252 +-0.329585 0.742961 +2.38756 2.48935 +2.78114 3.58788 +7.97227 8.55379 +3.36753 4.57472 +5.14486 5.31457 +3.99691 5.47708 +6.36404 6.8741 +3.22519 4.63321 +1.80583 2.21824 +8.20747 9.42947 +5.90819 6.94368 +6.58559 6.85933 +2.99108 4.03832 +7.20963 9.6252 +3.10244 3.87265 +7.23018 7.91389 +7.18084 9.61063 +6.74145 6.86507 +8.40721 9.5751 +7.12352 9.45614 +2.06653 2.51786 +4.9155 5.04183 +1.34304 2.92777 +0.571315 1.17285 +8.05396 8.28214 +5.29142 6.24974 +8.93797 9.23051 +4.6108 5.45568 +6.46124 7.53124 +3.16695 4.37505 +2.76803 2.82764 +4.1531 4.84927 +8.19433 9.00383 +5.12114 6.22952 +2.2542 4.74849 +0.621192 0.871537 +1.37403 2.28895 +0.305704 1.3287 +8.70471 9.53085 +2.29164 3.56607 +2.42106 3.37382 +1.14309 2.03085 +9.17624 10.3281 +1.88864 2.70161 +0.932647 1.2473 +5.72385 6.55694 +5.25496 5.38675 +5.85771 6.69626 +7.37247 7.93094 +7.73499 7.98782 +4.91417 5.27506 +3.51127 3.84403 +6.96198 7.27686 +6.51176 7.74735 +4.19954 5.08222 +1.58115 1.83842 +2.11889 2.3408 +1.94427 2.00422 +5.59977 6.86555 +9.46942 10.3491 +9.18904 10.1988 +1.71938 3.01547 +4.3515 5.4951 +2.53792 5.85188 +0.3884 1.36228 +5.02469 5.62368 +6.82402 7.72203 +-0.320478 0.821539 +0.0885656 0.248783 +3.01725 3.44385 +6.63776 7.74386 +6.57899 7.9332 +4.82656 5.18327 +3.91909 4.43955 +0.0708319 0.101395 +2.59796 4.22775 +-0.433109 1.26978 +-0.434274 0.624336 +3.22018 4.25282 +4.63351 4.776 +8.889 9.56332 +5.35952 5.46531 +8.73832 9.22756 +2.03432 2.34194 +0.477994 1.43353 +1.2029 2.86844 +5.09945 5.76855 +8.89076 9.01771 +5.30284 6.31732 +1.56375 3.17543 +5.4773 6.36897 +5.30934 5.35073 +7.20096 7.7075 +6.51046 7.12888 +9.37127 10.0531 +-0.0484323 0.348687 +1.83241 2.2143 +8.28633 8.60462 +2.51014 3.65817 +3.27798 3.58685 +1.41567 2.23302 +7.50794 8.10378 +-0.0579575 2.10373 +-0.856005 0.96621 +2.96238 3.48434 +1.36304 1.90594 +2.9997 3.41214 +7.2763 8.087 +1.69207 2.74419 +5.41625 5.83917 +9.22139 9.53794 +1.17477 1.51576 +6.74597 7.90871 +0.678913 1.73759 +5.70863 5.7214 +8.88411 8.93377 +3.44409 4.54586 +0.958963 1.53878 +8.29904 9.3867 +2.52433 3.60238 +8.16257 8.21986 +2.11395 4.23455 +6.85451 7.40364 +0.20286 0.639736 +2.05848 2.49034 +0.547013 0.77336 +7.83609 8.11903 +2.16539 2.29286 +3.94232 4.31368 +8.53475 8.54519 +4.77462 6.4158 +4.08395 4.68214 +1.56902 2.23811 +1.61337 3.11768 +1.51181 1.65521 +0.0821202 2.09269 +4.77622 5.16243 +4.62148 5.75837 +0.613158 0.952696 +1.89128 3.04792 +7.57509 8.92834 +2.70465 4.2941 +4.95906 5.12442 +8.0927 8.17277 +0.796512 1.3215 +5.74134 6.45291 +9.68479 9.78978 +5.89261 6.2292 +6.11377 7.9339 +2.20571 2.67129 +3.46228 4.27058 +5.26723 6.2653 +4.04391 4.26562 +0.380382 0.818995 +7.58108 7.7618 +5.02375 6.13042 +4.20178 4.66297 +2.83039 3.0221 +2.36072 2.45545 +6.68854 9.20726 +2.91388 3.42464 +9.33373 9.73449 +7.75844 7.94625 +2.72414 2.89669 +6.65438 7.96623 +1.00647 1.05385 +2.63018 4.9432 +0.152187 1.60259 +8.86332 10.3631 +2.31523 2.6815 +8.00509 8.61794 +1.69711 1.75938 +8.65442 8.73697 +4.23917 4.32001 +9.66851 10.1925 +6.93943 7.49814 +8.51986 9.03561 +2.10317 2.5175 +0.539549 1.75683 +6.29423 7.93236 +8.64345 9.54556 +1.44069 1.6814 +9.10017 9.77088 +6.16731 7.40496 +0.570043 1.93192 +2.65761 3.88544 +1.46895 1.52688 +-0.369067 0.540647 +2.04868 2.72065 +2.1286 2.27858 +5.90157 6.16431 +1.55581 2.51851 +3.29705 3.81635 +3.4137 4.10991 +8.48699 10.1364 +8.43437 9.4642 +-0.037842 1.47589 +0.541735 1.7805 +0.499576 2.36065 +4.1415 4.72435 +4.77598 6.16872 +3.30388 3.61854 +6.43796 7.85966 +5.27157 5.70871 +0.919258 2.18653 +4.00961 4.07902 +3.78201 4.23596 +4.50464 4.791 +3.70253 5.30916 +8.59228 8.70036 +4.31103 5.69049 +5.31775 5.34378 +2.24198 2.64194 +6.66937 7.41675 +7.21753 8.42057 +4.35399 4.52398 +6.90698 7.30084 +3.44296 5.44378 +3.36719 4.89951 +3.38624 5.33856 +3.44877 3.53693 +5.81398 6.3016 +7.24655 7.33127 +3.86142 4.53134 +3.85894 6.88112 +6.45704 6.95699 +6.90997 8.24088 +5.68813 5.7611 +0.699911 0.824323 +6.73758 8.42517 +9.34644 10.07 +0.289929 1.30554 +8.30644 8.49113 +6.47667 7.16073 +4.28093 4.90236 +8.32678 8.57064 +7.09205 7.92316 +5.55599 5.63919 +1.0104 2.22875 +1.72237 3.53668 +2.54699 3.14823 +-0.668582 1.25485 +1.25582 1.37003 +1.35044 1.57807 +6.17083 6.30811 +0.618816 1.20065 +-0.540992 1.21634 +2.06673 4.28857 +9.03398 10.8112 +8.73735 9.22814 +1.30178 2.7599 +6.0221 7.34889 +8.30124 8.52159 +1.92023 3.34545 +2.99331 4.93358 +3.8412 3.93379 +1.455 2.77005 +0.538664 2.1118 +4.16926 4.26053 +0.699746 0.937609 +6.36024 6.6511 +2.34698 4.84463 +8.11109 8.76496 +4.05425 4.67773 +8.2284 9.78568 +1.64423 1.80353 +5.70109 6.93764 +7.2091 9.67224 +4.47015 5.23311 +4.29326 5.36144 +7.93151 8.96494 +4.61889 4.96487 +5.38473 5.43594 +9.35456 9.66489 +1.23737 3.04121 +1.16077 1.19519 +5.91037 7.55679 +6.88344 7.60181 +6.39705 8.65039 +1.61791 2.93041 +9.68285 10.1396 +9.03129 9.05839 +7.0683 8.29875 +7.19624 7.41696 +7.5266 8.38738 +-0.254571 1.01098 +1.30218 2.03222 +7.6432 7.73031 +4.99495 6.04757 +2.79394 3.29394 +0.31505 3.55963 +7.55382 8.18787 +6.00032 6.27664 +1.49355 1.79767 +5.21191 7.19537 +3.47816 3.75801 +2.10272 2.39494 +1.31887 1.93829 +7.14313 7.63055 +7.3141 7.77239 +6.03409 6.17265 +4.24946 4.53165 +0.0569272 2.56109 +8.44766 11.4872 +4.22879 4.28007 +6.92817 6.98775 +8.08859 9.0206 +-0.0748418 1.48605 +6.56698 7.0488 +4.46624 5.4952 +3.66085 4.05778 +6.44711 8.93943 +2.45735 2.49339 +0.0606673 0.416191 +-0.183838 0.750464 +7.08561 7.67275 +6.65423 6.90808 +0.0598735 0.364072 +5.2228 5.41543 +3.14042 3.19043 +2.40069 3.02829 +1.80441 2.1849 +3.47491 3.95775 +5.49162 6.63934 +2.03332 2.32288 +3.17234 5.25109 +2.58274 2.59951 +9.37994 9.97097 +4.71509 6.77966 +5.18915 6.84982 +6.12508 7.04354 +0.811202 1.98808 +1.46825 3.66984 +2.44386 4.15623 +7.60169 7.68242 +-0.43208 1.22222 +5.40569 5.66153 +0.391742 1.79408 +6.77742 8.43115 +9.12828 9.3851 +6.39541 6.80626 +5.17919 6.29326 +6.57263 8.12999 +3.439 4.62236 +8.40525 9.80086 +7.60986 7.70099 +1.32123 1.44213 +0.526574 1.92338 +9.57195 9.79591 +9.52103 9.63159 +3.79775 4.20608 +4.74446 4.89606 +9.00085 9.60025 +1.26279 2.08363 +4.13639 4.49232 +6.59409 7.18315 +1.0637 1.78425 +5.4213 6.87661 +4.24407 4.30987 +9.79732 10.1204 +4.24597 4.83541 +8.47705 8.5145 +4.34095 4.93842 +5.68168 6.96086 +7.48654 7.91072 +8.32005 8.45111 +5.24065 5.3032 +3.25982 3.94442 +5.58106 6.18764 +4.4243 5.58619 +6.36467 7.07082 +2.70051 3.56014 +5.94534 6.87688 +7.33638 7.7645 +4.57067 5.86652 +7.83993 8.36854 +9.03617 9.11629 +7.44672 7.95614 +6.05876 6.3594 +4.02496 4.97119 +3.01438 4.36109 +7.4932 7.92357 +7.51661 7.53354 +7.60692 8.49678 +1.76088 2.59103 +7.08578 7.39566 +4.83605 5.42933 +-0.186592 0.847663 +1.15879 2.33996 +8.11815 9.35472 +6.02584 7.62549 +0.881084 1.00015 +5.39067 6.27026 +0.910755 0.97444 +5.32174 5.65652 +7.69388 8.24928 +3.40521 3.7615 +5.60321 6.92388 +8.25096 8.34324 +0.00108913 2.16897 +0.508035 0.66573 +-0.0517816 0.0876197 +3.26472 4.30955 +1.99494 2.14903 +2.089 4.32368 +5.17378 5.75964 +2.8779 3.54361 +6.56459 6.90645 +1.43196 2.88337 +1.48917 1.94009 +3.40807 4.25784 +8.0334 8.13458 +8.22254 9.6175 +2.96308 3.14349 +5.04768 5.71252 +3.9977 4.72614 +1.44384 1.60782 +7.78147 8.19817 +7.03854 7.50085 +5.90747 7.06091 +2.89169 4.31831 +2.46167 3.16529 +9.13228 9.1504 +2.57975 3.05313 +5.75976 6.52958 +8.10499 8.98982 +8.43162 8.76377 +0.422917 0.668254 +1.69046 2.09962 +5.50386 6.66954 +0.0897183 0.564514 +3.50103 4.1041 +3.91918 4.52559 +4.39297 6.18876 +3.90396 4.90868 +9.69362 9.85528 +6.27994 6.95062 +8.01563 9.09433 +8.25641 9.72944 +8.22072 8.35423 +1.27059 1.61352 +8.53312 8.96235 +3.49185 3.9042 +5.79579 6.046 +0.489013 1.2147 +4.00074 4.177 +2.66625 2.93036 +7.20267 9.34958 +7.44659 8.54707 +8.99915 10.1143 +7.59922 7.82031 +8.38502 9.03222 +0.160075 0.294398 +4.14549 4.3927 +9.35554 10.248 +-0.159435 0.467922 +2.17272 3.72336 +8.63811 8.79976 +4.23215 4.66461 +6.99516 8.2035 +6.45212 7.88791 +6.20141 6.28633 +7.69396 8.82204 +4.50807 5.96315 +8.51725 8.89286 +0.939492 2.12064 +7.4615 7.62666 +8.46681 9.11769 +3.92828 5.40884 +9.05622 9.40015 +0.229625 0.860838 +2.05694 2.52113 +-0.217927 0.574255 +9.55146 10.3256 +8.31497 8.3417 +3.52833 4.47013 +7.7131 8.52058 +2.15462 2.66777 +5.7674 6.17553 +3.3358 4.10589 +2.06642 3.00412 +2.43387 2.85242 +5.09473 5.84276 +7.3287 7.54846 +4.64254 5.11465 +4.05785 4.93614 +4.25413 5.43513 +2.96476 3.15378 +3.53732 4.48239 +2.34137 4.01272 +2.24879 3.40626 +3.43323 4.49055 +0.871415 1.33068 +0.508929 1.65611 +4.92057 4.94743 +7.03376 7.35193 +5.73043 6.47264 +7.82417 9.93642 +5.24102 5.9178 +2.38528 4.1676 +6.27437 7.19631 +9.29267 9.53262 +4.10098 5.24964 +0.383714 0.833317 +5.97628 7.92987 +8.15799 8.96819 +8.1687 8.29862 +8.16289 10.5149 +7.38205 7.89765 +3.81883 4.15607 +9.46915 9.61755 +1.50756 1.51863 +2.34236 2.84689 +0.398473 1.15027 +1.05302 1.49155 +8.71687 9.35232 +1.0502 1.40395 +7.83685 8.76302 +7.7731 8.46899 +5.56618 5.97458 +2.90035 4.12043 +6.40644 6.68706 +3.95201 4.37075 +7.1831 7.67748 +9.42789 10.0914 +5.45198 7.01256 +8.64609 9.45756 +6.01864 6.31515 +7.64621 8.65533 +5.45654 5.76553 +2.04332 2.75476 +5.49454 5.85693 +6.13688 6.21927 +2.66255 2.7385 +4.8326 6.43772 +9.12704 9.45287 +-0.294488 0.318697 +2.26979 2.35516 +4.12949 5.58506 +3.01416 3.62246 +6.64697 7.10221 +6.44307 6.82985 +4.10484 4.73148 +7.42589 7.6029 +5.33055 5.50395 +2.46474 3.05847 +5.43677 5.59206 +2.13807 2.3988 +-0.38424 1.8121 +0.00916704 0.219304 +8.62621 10.2262 +3.33927 4.51169 +5.45656 7.13165 +5.29253 6.57917 +3.51704 3.9421 +8.63729 9.13361 +3.92626 4.3469 +6.83104 7.52695 +1.22258 2.28191 +0.447646 0.789809 +7.96543 8.54328 +2.24269 2.42571 +4.4161 5.40481 +0.813992 2.21792 +0.694664 0.974182 +6.50017 6.88902 +4.00723 4.65882 +9.05784 9.85062 +6.80276 6.98196 +0.105446 0.379881 +0.416982 0.53336 +9.01269 9.55204 +3.27197 4.23315 +6.7017 6.89704 +4.21512 4.42378 +4.86735 6.90949 +4.52235 5.36878 +2.62205 3.55746 +-0.551048 0.555476 +1.63274 2.71251 +4.26739 4.88085 +8.23129 9.77405 +2.49409 3.96851 +6.66387 6.88886 +7.72383 8.90611 +3.18511 3.27281 +0.73722 1.64435 +7.90329 9.02868 +6.94845 7.06773 +0.509461 1.54928 +4.63885 5.51652 +9.24395 9.5121 +1.00007 1.57161 +5.31349 5.45437 +0.929284 1.71034 +7.05985 7.63288 +7.38418 7.45373 +4.14937 6.5167 +7.49989 8.6081 +9.28313 9.57721 +4.41285 5.1497 +2.96148 3.09221 +1.58256 1.66419 +4.45116 5.43488 +5.70927 7.11699 +3.61105 3.93153 +5.92285 6.63773 +3.50065 4.48453 +7.97338 8.96464 +0.541394 0.965435 +4.46469 5.03925 +7.33695 7.6484 +9.64234 9.6938 +4.16378 4.17886 +7.10741 7.31549 +1.51829 2.62477 +2.1892 2.9684 +9.23767 10.0462 +7.87649 7.97087 +7.05385 7.85952 +6.91232 7.50277 +6.60185 7.81572 +2.27112 3.90211 +5.74452 8.2018 +6.25117 6.26911 +0.525893 1.53447 +0.392956 0.959233 +3.51591 4.71055 +3.10449 5.41156 +7.35964 7.65642 +2.89831 3.54334 +3.42338 3.68259 +4.75496 5.51419 +3.8792 4.48395 +2.18007 4.13236 +3.15798 3.16864 +8.91248 9.21598 +8.54636 9.34037 +7.93697 9.79709 +6.40205 8.9653 +9.67332 10.2252 +4.31771 5.25423 +7.27485 7.3725 +6.22971 7.11411 +1.16538 2.16762 +1.40443 1.6876 +3.14915 4.58847 +7.13761 8.72165 +4.38448 5.88699 +7.98309 9.19449 +8.491 9.05597 +5.55043 6.19359 +2.44006 3.36071 +9.56522 9.79903 +1.86129 2.00225 +1.65239 2.11478 +7.59392 8.4655 +2.44709 2.68538 +6.80932 7.04694 +8.8212 9.4182 +0.276845 0.956468 +8.17008 8.5538 +0.77864 2.06897 +6.78458 7.68692 +0.504907 2.67518 +5.56963 6.9058 +3.42691 3.5414 +2.52065 2.71583 +5.09924 6.26696 +0.223724 0.610039 +3.61258 5.29324 +0.388393 3.11131 +2.87763 4.45415 +8.26438 10.1169 +5.89742 8.17506 +1.89686 2.66651 +5.33662 5.68228 +3.37496 5.67291 +2.25713 2.36127 +0.402185 0.716342 +6.4231 6.79227 +3.22707 4.69314 +7.85092 8.77413 +3.31322 3.72455 +5.43021 7.7167 +8.5883 9.00864 +1.21371 1.71836 +6.35584 7.9706 +5.44438 5.50414 +5.31325 6.11217 +6.08888 6.78794 +7.70604 8.13257 +1.29858 2.48753 +5.54083 6.38817 +8.23948 9.82646 +7.5575 9.0224 +8.00415 9.39763 +0.488455 1.55358 +4.48727 5.20741 +6.46648 7.02349 +0.355939 0.611119 +9.4892 10.2189 +2.61893 2.82832 +0.268193 1.24687 +3.01964 5.19554 +6.29954 7.42795 +8.70796 9.48366 +5.39307 6.64597 +2.47001 2.60746 +5.30949 7.46529 +6.07973 6.16835 +0.764507 1.6144 +7.94123 8.52143 +1.88244 1.96592 +6.42103 7.02205 +7.673 7.73208 +6.66891 7.80675 +6.9305 7.5431 +6.62335 6.93873 +4.34846 5.77621 +0.49878 2.82928 +2.65221 2.80109 +7.45348 7.74372 +4.10129 5.26894 +3.87782 4.19855 +4.62113 5.22658 +2.84558 2.88185 +2.53209 2.86065 +8.94932 9.21967 +6.48046 6.89614 +5.81885 6.66829 +6.49129 6.62015 +8.5663 9.58685 +2.43346 3.89849 +9.36561 9.45886 +1.40232 2.65 +6.66 6.74041 +2.87007 3.49668 +4.71138 6.0184 +5.03638 6.08494 +7.77735 8.14253 +1.0301 1.27179 +2.58337 4.04699 +6.95419 7.89775 +7.81164 8.62551 +3.37669 3.96217 +4.68541 5.58692 +4.79697 6.34841 +3.95334 4.81962 +9.44006 10.0941 +4.91098 5.12386 +8.44273 10.1565 +3.6685 3.73156 +5.07599 5.33357 +-0.138235 0.260923 +2.71154 3.45603 +5.75096 6.16127 +4.4775 4.64308 +6.80557 8.97442 +5.49408 5.76652 +8.31937 9.12886 +3.26479 5.51673 +2.57425 3.03145 +2.42465 3.92714 +7.86505 8.50835 +3.29229 3.43549 +4.08537 4.69709 +7.83885 8.60616 +1.61622 2.72716 +9.10228 9.41907 +8.49325 9.46612 +-0.174644 0.351716 +1.95648 2.14825 +8.28844 8.4428 +4.35888 5.59521 +5.1396 5.22537 +0.330835 0.879566 +6.14972 6.82967 +3.14811 4.89049 +-0.231668 1.08277 +3.13526 4.94545 +8.32674 8.91046 +5.22364 5.48006 +9.84318 9.88416 +-1.07813 1.6965 +1.5095 2.0328 +8.03716 8.2792 +-1.01307 1.46703 +8.22096 9.0055 +8.9917 9.0415 +5.60623 6.74537 +3.15991 3.19314 +3.13863 3.26451 +0.739618 0.896958 +0.67599 1.18486 +3.37355 4.06303 +0.38605 0.410067 +3.03297 3.46387 +3.45867 3.79806 +8.67249 9.53278 +-0.213855 0.787363 +1.52316 2.61117 +8.31846 8.59736 +4.84685 4.94042 +7.41901 7.82623 +4.99029 5.09747 +5.3637 5.37612 +3.22123 4.77749 +3.21668 5.74743 +3.48748 4.59962 +8.00016 8.56269 +1.63631 2.42239 +1.05159 3.72319 +7.22643 7.95706 +5.65694 5.99195 +9.4469 9.66915 +0.857984 1.59867 +4.05869 5.69955 +2.65788 3.07259 +1.8038 3.38748 +3.91934 4.89922 +6.18534 6.70342 +2.85076 3.20176 +8.1897 9.9614 +0.685531 2.05322 +3.31097 4.00809 +8.26537 8.63475 +2.90508 4.07797 +1.25213 2.31285 +3.05752 4.03741 +-0.481913 0.605629 +1.87958 2.19386 +7.28689 7.76316 +4.82075 5.20688 +-0.08115 0.31839 +3.50085 5.89363 +1.31184 3.30269 +4.03137 4.81493 +6.11688 6.13923 +7.93584 8.43321 +4.9838 5.3733 +3.8174 4.11979 +8.56196 9.02824 +2.87809 3.89589 +7.95309 8.05432 +3.47469 3.63716 +6.61009 7.12576 +8.87374 9.79588 +7.31513 7.99089 +5.78084 6.68535 +4.96985 5.59877 +2.20236 2.52473 +0.661014 1.11035 +6.36183 6.58403 +6.67947 6.85093 +-0.242005 0.513902 +0.442966 1.72024 +6.4587 6.74016 +6.67958 8.0837 +8.98524 9.56405 +6.91409 7.59877 +3.73596 3.97705 +5.51193 5.96437 +3.72029 4.50126 +3.09896 3.23616 +8.83312 8.91774 +0.32173 0.486199 +4.21092 4.59955 +2.61616 4.07081 +1.89049 2.65559 +4.96401 5.00629 +9.33156 9.70914 +3.72455 4.61054 +8.91265 9.6563 +7.12401 8.04324 +6.65393 7.25572 +1.04032 1.24927 +3.0174 5.56006 +1.47645 2.26867 +3.49833 4.37416 +6.16877 6.34452 +6.47417 6.90595 +4.27056 4.92535 +7.60439 9.35352 +0.426219 0.754405 +8.5291 8.68579 +5.84717 6.64632 +1.99513 2.5284 +5.10669 7.83064 +6.99006 7.37272 +0.871836 1.5934 +3.6572 4.38875 +0.154617 0.290737 +5.91634 6.50415 +5.33982 5.45293 +6.92602 6.94691 +0.349512 1.61427 +8.02048 8.99943 +5.75598 7.34946 +5.86948 6.51327 +5.11707 5.6181 +6.27656 7.10043 +8.48922 9.73833 +8.35863 8.69746 +6.67829 7.07852 +8.51257 9.50383 +3.76636 4.33757 +4.82804 5.57166 +5.17892 5.61254 +1.35188 1.94069 +6.04969 6.06833 +5.34181 5.82455 +5.71714 6.71234 +0.966462 2.56278 +7.95169 8.15951 +6.53583 6.89673 +6.73246 8.34493 +8.71111 9.76467 +7.53215 9.56537 +0.619041 0.736713 +9.24399 9.50151 +8.57184 9.88538 +2.82682 3.77294 +4.2649 4.84602 +8.6621 8.96426 +8.04469 8.3189 +7.81877 8.42944 +2.78031 5.16589 +1.23076 1.43577 +8.35385 8.49632 +3.27901 3.66774 +0.595941 1.41354 +3.37123 5.16685 +9.11003 9.95515 +-0.25959 0.32069 +1.44153 1.70148 +1.61595 1.70799 +7.8201 8.53423 +8.5402 9.36947 +8.39125 9.8221 +6.2909 6.35773 +0.000933745 0.920054 +-0.21358 0.491025 +4.00874 4.03866 +3.43552 3.55874 +7.85942 7.98987 +7.6681 8.06748 +6.19541 7.14765 +8.53891 8.96393 +2.38789 3.26866 +-0.0162847 1.18379 +1.04764 1.52755 +0.400798 0.55475 +6.32001 6.94897 +5.9692 6.2012 +1.20784 2.67873 +3.58247 4.46372 +-0.229647 0.559407 +5.65979 5.73489 +2.32795 2.78462 +0.706144 1.55147 +4.56527 4.6636 +5.98901 7.20908 +9.27329 9.95152 +1.31296 1.70529 +5.82933 6.41329 +4.17452 5.29881 +4.15885 5.25117 +0.35549 1.3511 +1.0591 2.4463 +8.87597 9.55625 +6.66826 8.57255 +0.355945 1.40613 +5.39729 6.10218 +3.78791 4.37501 +9.53885 9.87184 +2.67568 2.82552 +4.44836 4.52939 +5.96764 7.40168 +6.35578 6.98546 +0.636857 1.19517 +3.3986 5.55448 +1.46493 2.66884 +-0.0676901 1.80921 +7.83396 8.53452 +8.3508 9.04561 +4.03407 6.0066 +0.997538 3.30635 +7.83064 8.03466 +4.57652 4.97461 +3.85952 4.15471 +0.960261 2.1069 +0.522458 1.52989 +8.81627 9.00768 +0.172256 1.29455 +5.69294 6.15752 +6.86391 7.75307 +2.32429 2.95415 +1.83191 1.90364 +0.400855 0.705649 +5.23264 5.39972 +5.19047 5.79842 +2.40804 2.89401 +0.462887 1.43874 +6.70213 7.90229 +4.37985 4.95797 +3.73768 4.30645 +0.756797 2.11146 +0.458724 0.472099 +3.93098 6.47147 +5.5294 6.00365 +2.97106 3.42174 +5.75875 5.80235 +7.96799 9.02105 +5.36254 7.22823 +6.56124 7.39973 +9.49234 9.57879 +2.87576 3.59509 +3.49182 4.28124 +8.68021 9.94486 +9.60199 10.1276 +9.70115 9.81776 +3.09609 3.98732 +5.00113 8.15031 +5.21248 5.74835 +9.23337 9.5696 +2.92777 3.56297 +2.52044 3.04905 +4.79908 5.05762 +1.98626 3.69659 +4.78726 6.20637 +7.39711 7.42831 +4.44319 4.78716 +9.28452 10.0832 +8.00774 8.85707 +9.22947 10.0523 +4.38653 4.86012 +5.15285 5.23106 +8.95413 9.75947 +2.90286 3.32407 +0.348694 1.39738 +-0.0660432 0.293424 +4.09079 4.2922 +6.0407 7.23031 +2.83771 3.72237 +8.54697 9.38898 +2.16742 3.45018 +8.83255 9.30343 +3.59112 3.6531 +7.53452 7.81898 +7.11781 7.19773 +8.2892 10.0259 +4.91072 5.06031 +5.8232 7.25924 +7.0641 8.31604 +9.477 9.63892 +5.8003 6.58306 +9.63988 10.2754 +0.654364 1.02398 +5.9488 6.85043 +7.86867 8.99891 +9.202 9.46902 +4.17932 4.20271 +6.50328 6.71085 +7.19848 8.15579 +5.62459 5.75449 +-0.159668 0.791409 +7.55683 8.7315 +1.03278 1.423 +0.751457 0.808785 +6.2203 6.50634 +1.64418 2.98238 +6.87468 7.00652 +6.36966 6.7117 +7.69893 8.89535 +0.419794 1.05032 +2.73928 4.31548 +0.409245 1.55228 +6.03905 6.39323 +0.409695 0.789834 +4.39148 4.40935 +1.14673 3.23607 +5.85562 6.44503 +6.87394 6.88742 +3.761 4.35136 +7.2208 8.01436 +6.49839 6.54002 +4.70791 5.91886 +4.24906 5.96619 +2.53482 3.91496 +-0.369254 0.69193 +4.81351 6.31088 +9.76066 10.0736 +1.4413 1.55942 +7.21917 8.88908 +6.03521 7.56826 +1.25568 1.42024 +5.47575 6.04431 +1.43099 1.99979 +5.1004 6.04088 +6.54798 6.56118 +1.0142 3.1564 +1.75267 2.1453 +1.28133 1.36044 +9.60996 10.0563 +1.14397 1.50247 +6.86688 7.08724 +8.38287 9.18041 +0.132076 1.27657 +6.52553 6.9301 +0.223917 1.41325 +1.18902 1.79753 +1.40084 1.75678 +1.94524 2.51929 +1.98276 2.62875 +0.763281 1.05483 +7.97952 8.51249 +1.059 3.05463 +5.33401 5.85094 +8.37442 8.64374 +6.62865 6.67315 +1.01707 1.64386 +0.113335 2.23523 +6.71906 8.00216 +-0.886574 1.29366 +4.20078 4.85294 +8.43336 9.06988 +3.55413 4.40768 +6.69076 9.01132 +6.18982 7.14109 +7.14381 7.7046 +8.63195 9.47031 +8.88052 9.84886 +3.34443 3.62637 +4.5862 4.72832 +4.95757 5.23571 +2.85993 4.04966 +1.43846 2.27425 +5.43112 6.30496 +-0.452609 1.55525 +7.17706 7.71287 +5.78537 5.79579 +8.51102 8.9466 +-0.472904 0.810489 +3.83688 4.24045 +8.04432 9.04582 +1.57259 3.37136 +1.22231 1.33582 +5.73006 6.26477 +2.90855 4.22125 +9.39717 9.4287 +3.63873 4.16094 +0.442035 2.08889 +0.294491 1.31124 +3.14755 3.86305 +6.57634 9.44898 +2.19051 2.41878 +4.99277 5.12569 +4.10425 4.9423 +4.83547 5.62769 +5.73879 5.78179 +8.90329 9.81905 +5.60168 6.17538 +5.83843 6.66128 +1.84271 2.57406 +3.01047 3.33662 +2.85037 3.79158 +3.49007 4.46877 +8.58942 9.51529 +0.613753 1.12824 +8.23757 9.54707 +9.27134 9.4196 +6.27126 6.56417 +2.17206 2.33018 +3.53588 5.17162 +8.6312 10.0868 +5.76342 6.66164 +9.01501 9.90984 +3.22004 4.18954 +4.37918 4.68595 +2.00928 3.49815 +6.64229 7.06693 +2.85962 4.58794 +8.45587 9.8897 +2.8481 3.65956 +8.65849 8.67336 +6.48486 6.58637 +5.82336 7.45254 +4.02267 4.59696 +2.24997 2.83815 +8.16201 8.55518 +7.40645 9.07085 +1.43137 1.50333 +8.7212 10.9419 +1.50523 2.44124 +1.92455 2.85819 +4.50866 4.53052 +5.75781 5.81275 +1.71013 2.0282 +9.31592 9.9015 +6.14972 8.18798 +1.85705 2.20068 +4.80971 5.10509 +3.31201 3.58168 +8.61824 9.31861 +7.19497 7.86933 +3.25381 4.53472 +5.62799 6.29537 +9.00659 10.021 +9.15156 9.74827 +2.0324 2.80741 +0.714403 1.00476 +1.26522 1.80417 +-0.362995 0.41758 +7.08785 7.71544 +5.55685 5.74045 +0.428866 3.03773 +7.61574 8.94894 +9.07256 9.69772 +4.49537 5.06822 +5.66388 6.48899 +1.69126 2.69607 +9.90539 10.0783 +6.56455 8.27128 +6.61988 7.86616 +7.42012 7.64493 +2.99922 3.35282 +4.69379 5.18947 +0.87894 1.30518 +9.47632 9.61234 +0.665754 0.855958 +-0.422778 2.11197 +3.38786 4.15441 +7.57236 8.75855 +1.89832 3.50224 +-0.185929 1.0777 +3.32911 5.53465 +6.91111 8.69247 +6.97456 7.86905 +4.75518 5.0948 +4.23733 5.83368 +8.52456 8.56086 +0.0978267 0.136564 +7.4668 7.99757 +5.52851 5.80858 +8.5833 8.88589 +5.10603 6.41348 +4.70682 6.59981 +8.60265 9.19477 +5.04514 6.24014 +4.49041 4.88669 +7.40925 9.15624 +0.80364 1.35315 +7.11604 8.01153 +0.267749 0.714089 +0.121521 0.822226 +9.30556 9.81307 +2.11398 2.92567 +5.97722 6.08022 +7.13483 7.22211 +8.00161 9.27274 +4.87681 5.51654 +3.11843 3.84311 +5.17747 5.98482 +3.6077 4.46306 +1.37454 2.2443 +4.93385 5.96357 +2.92184 4.0964 +4.88767 5.56353 +2.87394 3.76336 +0.326521 0.622872 +2.42056 2.45007 +-0.527891 0.827211 +6.73151 7.20155 +1.82048 2.54905 +1.35563 1.88701 +3.64202 4.10669 +5.22846 5.23953 +6.06271 6.46993 +2.71418 3.2081 +6.41179 7.57176 +7.45823 7.79609 +1.01227 1.39137 +9.0872 9.20132 +5.083 5.64038 +5.63236 5.97945 +-0.317645 0.822313 +0.865396 2.65587 +5.71839 5.98983 +1.50978 2.08611 +2.95824 3.70996 +0.264301 1.02233 +8.22351 8.98589 +4.87805 5.24127 +2.31329 3.46752 +6.19539 6.69676 +5.18643 5.40947 +7.15453 7.66643 +1.20694 2.25111 +7.87378 7.89093 +5.16514 5.604 +8.68354 9.01395 +7.33753 9.37499 +2.94627 4.06036 +8.64337 8.85727 +0.0353092 1.0128 +6.98437 7.35718 +6.77073 6.79959 +3.13559 3.70735 +7.40139 8.27017 +4.01174 4.39788 +3.22281 5.11647 +7.79256 8.58737 +0.642233 1.39694 +7.18603 8.69453 +3.37803 3.59355 +0.762287 0.84262 +4.21823 4.52565 +0.894924 1.35434 +0.844327 1.19938 +5.57958 7.05431 +-0.631066 1.55134 +3.78962 4.17935 +9.15329 10.4824 +5.47536 5.52975 +8.81243 9.16088 +4.45989 4.94123 +8.68235 9.45112 +8.04719 10.3938 +8.87349 9.40483 +0.502543 0.570283 +2.08512 2.47652 +-0.654512 0.804355 +3.68569 5.21711 +5.33017 5.80226 +3.44991 5.31415 +-0.00417763 2.95077 +7.17784 7.9318 +1.2721 1.31642 +5.24415 5.64173 +2.79434 3.28746 +4.54991 6.49276 +4.74707 5.12555 +7.36365 8.15777 +0.913049 1.79828 +1.47498 1.83425 +2.64271 3.38567 +4.78159 5.44718 +7.6087 7.66442 +-0.484393 0.909893 +3.16824 3.23757 +4.43021 5.90284 +4.25954 4.74995 +6.58742 7.24125 +1.86151 2.27069 +3.16459 4.5945 +1.06471 2.08965 +3.31028 3.83029 +1.52593 2.47521 +0.703789 1.42451 +1.47969 1.68923 +2.92352 4.24089 +9.84088 9.93485 +3.18205 4.27817 +7.39345 7.78945 +3.78808 5.41572 +4.38624 6.75693 +6.93065 7.16977 +1.01289 2.19807 +3.37006 3.54196 +5.50238 5.58285 +-0.225113 1.99347 +1.67796 1.86943 +6.1999 6.35102 +3.80494 4.74814 +1.13294 2.02639 +1.1965 2.6548 +-0.284453 0.856092 +4.26565 5.02196 +9.66948 9.88874 +6.20287 6.25528 +4.38154 6.65806 +3.77411 4.3075 +5.77177 6.78486 +9.16311 9.816 +3.22861 3.42009 +3.36573 4.34724 +6.76951 7.58025 +4.83813 5.23042 +3.87192 4.37372 +5.56859 5.90066 +-0.368163 1.4593 +5.44031 7.81671 +2.66342 2.99253 +6.11846 7.69499 +4.98811 5.17531 +4.45078 4.67513 +4.88206 4.94128 +2.51813 3.0268 +0.461292 1.15264 +2.34766 4.48652 +0.198819 2.23425 +6.85634 6.98248 +0.912438 1.81872 +4.84933 6.34912 +5.15613 5.82891 +0.172772 0.994083 +3.37381 3.64549 +1.98836 3.2697 +1.64344 2.06049 +0.766585 3.09305 +7.8979 8.28046 +4.34856 5.01341 +6.69809 7.24239 +5.19034 7.04959 +5.3747 6.92123 +7.8893 10.1251 +6.11207 6.99125 +5.37115 6.84111 +9.04786 9.11002 +6.45326 6.64415 +-0.76294 0.92832 +0.980411 1.8166 +3.05536 3.50031 +6.10827 7.55786 +6.57848 9.06264 +7.66855 8.861 +4.80276 4.82283 +1.99932 3.2877 +9.45229 9.80653 +0.457474 0.778684 +5.44444 5.95239 +5.60974 8.05169 +7.64656 7.79632 +6.78372 7.65134 +6.93878 7.82023 +9.08292 9.55308 +9.16329 9.25802 +1.4909 2.38688 +4.31881 5.3564 +5.12535 5.60119 +2.44591 2.54637 +7.36929 7.80452 +2.13707 2.97655 +9.73557 9.94588 +1.96637 3.36097 +0.857068 2.29643 +5.58224 5.91142 +8.90714 9.0255 +9.77988 10.0711 +0.41121 0.970955 +-0.518356 0.91447 +7.58725 7.71255 +8.1435 8.78712 +6.5487 7.17991 +4.94961 5.50283 +8.14086 9.03281 +3.51281 5.24806 +3.5786 3.84066 +6.27435 8.37735 +8.65263 9.5555 +2.87484 3.56117 +5.57707 6.55879 +-0.111276 0.264178 +3.60894 4.15477 +2.82322 3.64397 +8.40669 9.1127 +8.43089 10.5298 +1.38472 2.2453 +1.74464 2.00472 +4.01588 4.67572 +0.408869 0.938602 +2.06155 3.46067 +4.4871 5.08963 +2.4435 3.87355 +1.32864 2.55801 +4.78579 5.26122 +7.43027 7.57749 +6.90971 7.32716 +8.01095 9.46872 +9.41627 10.524 +8.83143 10.4474 +0.631816 1.75513 +1.72965 2.17123 +-0.513239 1.1886 +6.75616 6.7984 +2.49278 4.26493 +0.230011 0.966298 +3.78506 4.95013 +2.03886 3.14808 +7.87309 10.5637 +3.54564 3.58055 +1.91974 2.9194 +4.8503 4.98668 +4.66494 4.83558 +7.57916 8.24358 +4.78743 5.38547 +2.81034 3.34534 +1.00297 2.0138 +6.87593 7.17736 +3.93157 5.0655 +3.10361 4.05519 +8.22876 8.38326 +7.48377 8.31026 +2.23106 3.4905 +0.130934 0.606709 +1.22344 2.55898 +7.55829 7.92597 +4.10977 4.86263 +0.122756 0.264176 +3.8357 4.15854 +1.28414 2.13031 +0.280029 0.805504 +2.88245 4.1704 +5.57936 6.94781 +6.22719 6.33201 +-0.761013 1.16475 +6.16636 7.12566 +2.98935 3.192 +2.23263 2.34362 +3.9082 4.11692 +2.66865 3.5275 +1.87676 2.43966 +4.60035 5.39332 +2.74287 3.73097 +2.81953 3.96666 +5.73644 6.04042 +4.02179 4.52419 +3.26438 4.07346 +1.22509 2.13719 +7.91885 9.71846 +1.28152 1.48079 +7.97918 9.26344 +8.75682 9.8677 +7.25678 7.45362 +8.16161 8.87066 +1.21873 2.37224 +7.76739 9.06346 +3.89932 5.03406 +3.53901 4.37006 +2.93795 4.04333 +6.36543 6.72985 +4.72622 4.98804 +1.86205 1.99008 +0.784581 2.05264 +0.978519 2.91723 +3.9067 6.47195 +0.735425 2.38151 +8.37394 8.41609 +6.91804 7.23374 +9.39259 10.1026 +7.28732 7.43466 +4.75982 5.44264 +6.71504 7.53933 +2.17125 2.54358 +0.703562 1.39087 +-0.221711 0.541965 +9.22839 9.39159 +9.53465 9.97585 +1.44304 2.53666 +7.886 8.85051 +9.33174 10.1632 +2.60898 3.42889 +1.73658 2.02589 +6.31651 6.77762 +7.26755 8.34499 +9.01312 10.9837 +7.47361 8.96251 +7.98365 8.02586 +1.40065 3.44891 +9.44617 9.55391 +8.24265 9.34849 +9.366 10.4216 +0.375354 1.17522 +3.37114 3.38278 +-0.742469 1.07634 +4.29988 4.81879 +4.18605 7.21928 +7.41047 8.29198 +6.68173 7.60225 +3.24292 3.30695 +1.8951 3.42167 +3.97359 4.2857 +4.72621 5.80575 +4.75014 5.02239 +6.43454 6.94568 +7.16601 8.10355 +2.16685 2.23666 +6.70852 8.63284 +8.16988 8.95848 +0.277002 1.30648 +1.5803 2.28632 +2.22634 2.34679 +0.200623 0.814959 +5.27457 6.51651 +2.49533 2.90705 +6.48922 6.69528 +8.18879 8.63551 +2.75159 3.633 +0.884853 1.56434 +1.87488 3.98951 +4.24783 5.17713 +6.22499 6.56095 +5.68238 5.99272 +3.75553 3.85012 +4.87543 5.39966 +6.62671 8.72493 +3.50262 4.05131 +5.38952 5.4974 +7.84971 7.94051 +5.39123 6.66564 +5.43986 6.17256 +7.48968 7.7677 +4.2685 4.57296 +1.75169 4.11058 +5.03634 5.16102 +4.68003 4.84715 +8.36249 9.98761 +8.94297 10.6969 +6.21572 6.24305 +7.90303 8.0672 +7.90426 8.41244 +5.98512 7.93187 +5.13297 5.27136 +6.58367 7.4971 +4.72663 5.22956 +7.99667 8.59246 +4.3303 5.92188 +1.3132 1.80875 +7.70104 9.20947 +1.78862 2.00473 +9.63678 9.65571 +-0.264416 0.318054 +2.70004 3.40777 +2.74642 3.73608 +3.6494 3.6743 +8.03113 9.22851 +1.07526 1.3116 +4.05436 5.33291 +4.60907 6.03605 +7.83426 9.10358 +2.27997 2.77309 +5.63139 6.92616 +4.40717 5.25214 +1.98986 3.5062 +2.42393 2.9584 +1.94336 3.08456 +1.20185 3.01827 +0.641733 2.10095 +7.25046 8.29391 +0.640392 1.26451 +3.9588 4.85492 +6.83036 7.41101 +6.48581 7.08757 +6.48734 8.47856 +9.55084 10.3774 +-0.173137 1.26574 +2.32702 2.58775 +2.7463 3.13914 +7.86951 8.62807 +5.96916 7.92759 +0.217046 1.70373 +1.04207 1.05755 +4.79058 5.07902 +4.19024 5.35395 +9.00175 9.83715 +8.37554 9.275 +4.5204 4.82999 +3.49936 4.75519 +7.07916 7.74619 +6.66726 7.35282 +7.39513 8.55523 +7.50381 9.60708 +1.39304 2.26927 +2.84101 4.76376 +1.21779 1.59353 +4.7893 5.70143 +9.12195 9.57131 +5.40461 6.15443 +2.86445 4.26837 +8.01324 10.9082 +2.96659 3.8042 +2.4897 4.59323 +6.37887 7.15878 +7.00143 7.6419 +3.22491 3.41843 +1.22852 3.31783 +2.09881 2.56121 +4.43205 4.67051 +4.39328 4.66715 +2.38355 3.39058 +0.638802 1.59399 +5.32717 5.81376 +8.00353 9.72007 +8.77281 9.81649 +8.95552 9.86609 +2.90915 3.96556 +3.88176 4.93124 +6.45945 7.69942 +-0.108577 1.57424 +0.304992 0.320561 +6.47789 6.5515 +1.98211 2.05312 +6.2741 7.35626 +9.45057 9.67918 +5.2916 5.48037 +0.158802 0.712187 +6.42002 6.84323 +9.11085 9.13063 +9.42446 9.95882 +6.03624 6.96469 +9.2473 9.6286 +7.10342 8.71163 +3.34072 3.35187 +7.4602 8.58506 +8.7963 8.81873 +0.323615 2.22687 +0.326746 1.76681 +2.20062 2.76862 +7.55181 7.85006 +0.941035 1.28117 +8.76643 9.60019 +9.19731 9.33092 +6.0479 6.57293 +6.12725 6.24356 +7.53078 8.92488 +3.1841 3.48283 +1.85544 2.01888 +7.3849 9.29183 +5.03915 5.27721 +4.77142 5.46282 +-0.291696 1.14641 +1.61367 2.20867 +5.31853 6.69431 +2.52731 3.13139 +4.86677 5.18106 +4.50183 4.60969 +5.95881 6.09964 +2.41939 4.42026 +6.92003 7.17891 +4.29584 5.48557 +8.02803 9.06315 +2.82326 3.49599 +5.8647 5.87561 +2.38814 3.62688 +6.32418 7.17662 +5.99907 6.5059 +3.84698 4.14446 +9.80728 9.82132 +5.2366 6.30871 +9.81878 9.91004 +1.53024 1.83525 +2.98035 3.68531 +4.5418 6.98786 +5.19561 5.9846 +0.946068 1.46672 +3.26948 4.71928 +6.13476 7.68682 +8.36934 9.65072 +6.40074 7.14762 +1.01349 1.80493 +8.4514 10.25 +-0.180382 0.682704 +1.03041 1.63565 +5.64642 6.96069 +2.73598 3.67485 +5.8705 6.66157 +4.68343 4.7176 +5.83787 7.6818 +1.42529 2.234 +3.73726 4.19241 +5.38341 5.81884 +1.13088 1.69073 +0.968034 1.98828 +1.06007 1.11039 +3.50129 4.51807 +5.83133 6.77904 +-0.334945 1.29129 +0.326706 1.16015 +9.15028 10.4391 +5.13047 6.79712 +1.06952 1.38997 +5.79345 6.49898 +7.88149 8.5143 +8.00404 8.09794 +8.22725 8.28904 +6.38406 6.61356 +6.32166 6.73458 +7.17066 7.32049 +1.64338 3.79327 +7.92135 8.55568 +7.15578 7.42231 +6.70701 7.65427 +5.76608 7.63064 +3.54163 4.08662 +3.81402 6.76906 +4.5998 4.61865 +9.01471 9.18718 +5.21234 5.73335 +0.946018 1.39917 +6.99714 8.29739 +5.64458 6.93965 +3.39809 5.70907 +6.32284 6.83604 +8.50347 8.53097 +3.90118 4.85721 +9.41198 9.62076 +4.41514 5.55152 +7.69979 7.81249 +5.34434 5.37105 +7.25274 7.76114 +7.67383 7.92718 +5.82851 6.29417 +0.935651 1.2842 +0.639586 0.786771 +6.39823 8.31226 +3.67546 4.89035 +9.20323 9.57287 +2.33896 2.99576 +8.51933 8.80243 +0.983098 1.11084 +8.48215 9.42998 +7.29586 7.3914 +2.00695 2.89046 +2.60909 2.62433 +2.04118 2.92033 +7.60386 9.01419 +7.32896 7.73342 +9.51693 9.54891 +5.1323 5.24962 +6.35326 7.18302 +2.50952 3.51872 +3.4149 3.57431 +9.18412 10.4976 +5.68123 6.42697 +5.87758 6.0124 +6.3202 6.64588 +8.2547 9.98176 +5.50949 5.7854 +0.0824268 0.128178 +2.17292 3.76233 +7.22786 7.68214 +5.09326 6.4151 +4.30171 4.86688 +2.39206 3.47399 +7.95152 8.35556 +2.40133 2.936 +2.77819 3.87516 +3.252 4.33376 +9.54269 9.7513 +6.6747 6.73043 +0.611474 1.97158 +7.65864 8.53689 +1.58345 1.8017 +2.56917 2.8152 +8.5424 8.8301 +4.98159 5.44499 +5.82482 6.03578 +3.55509 4.90785 +5.77028 5.94747 +0.163965 1.1379 +2.85039 2.94261 +4.24343 4.67273 +3.22636 4.06084 +6.03662 6.21018 +4.55495 5.07697 +1.91173 2.51739 +6.54894 7.24036 +5.55502 6.92676 +0.245707 0.586188 +2.28044 3.29563 +4.71378 5.25198 +8.28953 8.44891 +9.42282 10.179 +5.0548 5.73614 +6.3203 6.43659 +6.54178 8.82077 +3.67181 4.17365 +8.51445 8.96445 +1.69648 2.84524 +0.194222 0.920147 +2.48533 2.59803 +1.66002 1.6739 +4.79833 4.95404 +1.09801 1.11009 +6.62529 7.4066 +8.0099 8.37262 +3.55429 4.11824 +6.2666 7.12137 +7.83222 8.01342 +9.37156 9.72961 +1.1647 4.04434 +4.50719 5.09068 +3.25175 3.75482 +8.28659 9.30848 +7.30009 8.60755 +-1.12073 1.21016 +0.310087 0.725712 +8.3746 9.13511 +9.11925 10.2234 +9.68703 9.7137 +0.603098 0.844291 +5.88373 6.99327 +0.852802 1.43297 +3.7463 5.82283 +7.69639 8.25446 +-0.337322 0.977113 +8.76606 9.16618 +3.43527 3.6616 +3.93587 5.39471 +5.66569 7.20462 +5.34999 5.7193 +3.25589 3.706 +1.52012 2.55985 +4.74228 5.43725 +5.15323 5.51652 +7.77237 8.33717 +-0.0514419 0.914127 +9.27182 9.59476 +8.14192 9.74859 +6.42702 7.20331 +7.51351 7.68358 +7.0947 7.46059 +7.97635 8.59449 +2.39931 2.66008 +5.79481 5.94673 +4.41054 4.81613 +2.72202 3.61239 +2.86039 3.44719 +1.81115 3.28151 +-0.566995 0.734214 +9.61998 9.72024 +7.4163 7.61821 +0.42522 0.552659 +3.17617 4.36942 +0.740294 1.36953 +7.13755 8.39966 +0.219186 0.892588 +3.78307 5.2905 +0.783026 1.76155 +3.01893 3.33055 +3.12143 3.5713 +-0.792679 0.92539 +0.668572 1.12961 +3.88619 4.30545 +7.59276 8.1776 +4.71509 5.05622 +6.53406 7.04242 +1.581 2.21984 +4.7144 5.51372 +2.76338 3.50211 +0.16364 0.293599 +5.92365 6.10636 +3.11174 4.29165 +5.49295 6.48717 +-0.503239 0.795707 +7.30558 8.12408 +2.10674 4.13456 +7.11985 8.01932 +1.34672 1.48739 +4.05778 5.69084 +2.83686 2.9115 +6.4471 6.53909 +0.467374 1.84371 +2.76467 2.94177 +4.87867 5.33932 +0.892878 1.96273 +1.13934 2.27205 +7.76918 8.39409 +6.72181 7.43901 +7.0836 8.68472 +7.12924 7.56332 +0.689172 1.62922 +9.41146 9.91043 +0.398265 1.27579 +6.29966 7.4874 +5.09438 5.65334 +6.04623 6.4687 +5.75305 6.89731 +0.308118 0.459501 +3.63692 4.30501 +3.1755 3.71009 +7.32787 7.52785 +2.23235 4.09978 +2.71191 2.91513 +0.209457 0.840713 +7.31489 7.38296 +6.21245 6.91111 +5.75983 5.96049 +5.92056 8.24518 +-0.354452 0.489638 +4.05894 5.34828 +1.56299 1.57414 +2.85083 3.27455 +8.78323 10.0012 +0.208502 1.26471 +6.10824 6.79285 +5.55114 8.03968 +6.13077 6.32342 +7.34865 7.82592 +3.94835 4.75016 +7.8268 8.72249 +4.85131 5.07903 +5.40398 6.0134 +2.85971 3.85293 +0.126379 1.45545 +3.15768 4.28388 +9.64566 9.70016 +4.47514 6.31064 +6.44995 7.2894 +4.70992 6.13777 +3.91128 4.22263 +7.35627 8.07739 +2.49215 2.68749 +8.09946 9.16929 +0.925679 1.92784 +8.48437 8.63892 +7.2255 9.18109 +-0.00840282 0.0168954 +5.91933 6.6274 +4.16086 4.64302 +8.27009 8.47868 +1.73372 2.93094 +8.17421 9.17705 +9.19136 9.43222 +0.0653594 0.648416 +8.69 8.96184 +8.99355 9.40832 +6.25088 6.26945 +6.72391 7.38424 +9.59708 10.3496 +6.00971 6.18818 +4.64468 5.75797 +3.64832 5.30079 +5.99378 7.8792 +6.5388 6.99379 +7.31694 8.43802 +3.66227 4.92638 +9.55964 10.3796 +-0.14433 0.29095 +3.56716 3.71252 +3.82062 4.27788 +8.10405 9.35275 +7.17891 7.46539 +1.17698 1.29602 +4.48829 5.03134 +7.18025 8.13852 +9.42388 10.3634 +5.2158 6.17469 +5.22926 6.52397 +5.16731 6.40625 +6.53348 7.269 +2.07834 2.39172 +9.65044 10.1519 +8.64551 10.1294 +9.29006 10.5993 +1.50639 2.83173 +5.71675 5.99216 +3.0783 3.35571 +0.115401 1.31431 +8.03988 8.11942 +3.11917 4.53956 +1.14552 1.1646 +5.34782 6.43017 +0.0701702 1.0368 +0.183335 0.440704 +6.33438 7.71607 +2.11533 2.64323 +7.12104 7.13366 +7.21548 8.26968 +3.13445 4.13568 +4.57452 4.74602 +2.60889 3.69846 +7.21184 7.47573 +6.87651 7.03405 +2.65431 3.94352 +1.50006 1.70087 +6.16344 7.54429 +7.02057 7.73067 +8.27833 9.01489 +0.500833 0.597845 +8.34751 9.88925 +2.80242 2.91837 +5.29424 6.079 +8.36276 9.10074 +0.216887 0.268335 +1.30798 3.16393 +3.93851 4.22658 +2.58028 3.14744 +9.31131 10.3451 +7.37262 8.84852 +4.45306 5.6723 +3.74535 4.0721 +4.90174 5.63875 +3.41847 4.65199 +3.10265 3.82548 +6.56126 6.97557 +2.57449 2.95098 +7.97418 9.06301 +9.2203 9.66829 +4.64922 4.96305 +8.83034 10.115 +6.6685 6.89847 +7.36585 7.48669 +8.66761 9.39287 +0.562216 0.961875 +7.56292 7.81006 +8.50715 8.95572 +0.572825 2.24755 +5.9367 6.06766 +-0.769578 0.776163 +4.48224 4.9553 +8.21069 9.29643 +8.57206 9.47175 +1.10032 1.21371 +3.76306 3.87152 +6.46197 8.18457 +6.96501 9.70727 +3.42357 3.93484 +0.818601 2.42743 +-0.119739 0.397938 +-0.378761 0.523892 +8.03394 9.35409 +3.60283 3.98864 +2.21789 2.70607 +-0.255329 0.319063 +6.20806 6.22609 +7.1283 8.04391 +3.73565 4.03638 +8.5374 9.10987 +5.22675 5.35072 +7.51777 7.58439 +9.12636 10.4159 +9.15003 9.40672 +0.217863 1.19883 +9.42416 9.9178 +2.55337 3.8088 +7.03655 7.98242 +9.17171 9.8047 +0.110162 0.722738 +3.16467 3.58897 +6.47244 7.12961 +1.0456 1.65614 +1.58456 1.62844 +1.79039 1.84035 +6.24286 7.07838 +9.08631 9.11684 +3.05068 3.40838 +2.81212 4.03665 +2.52011 3.09841 +8.06001 8.16356 +7.07649 7.52685 +2.47666 2.86548 +8.66241 8.95103 +-0.298116 0.662697 +0.822443 2.46125 +2.07619 2.33674 +4.84135 6.21034 +7.49625 8.13026 +7.85854 8.29618 +3.01722 3.37062 +6.54393 7.30306 +2.21113 2.30166 +8.32138 8.57349 +6.2995 6.33514 +3.0018 3.56886 +4.63378 5.52214 +6.71908 8.96715 +2.29809 2.95581 +8.34947 8.71096 +4.96902 5.32075 +9.51051 9.72733 +3.311 4.77789 +3.50233 3.66309 +4.95177 5.76002 +6.12876 7.22391 +6.27743 6.79393 +3.60638 3.6833 +5.20305 5.50848 +7.16065 8.88358 +9.45049 10.2539 +6.16892 7.0314 +8.08479 9.74516 +0.0717867 0.669987 +2.17569 3.34098 +4.81716 5.7509 +7.63999 8.01157 +5.87228 6.60363 +3.39621 4.35575 +4.96079 5.07901 +7.57639 8.82003 +8.27285 8.52609 +0.665858 1.64782 +1.74256 2.07126 +6.19512 6.4258 +0.664592 1.30896 +0.180682 1.43746 +6.46752 6.81303 +2.55562 3.08708 +9.33695 9.63312 +6.33821 6.77092 +7.88252 8.55026 +8.17937 8.45385 +-0.415294 0.793096 +5.22077 5.54553 +8.67808 9.10041 +1.72096 1.92024 +0.492778 1.48076 +2.29514 2.88531 +0.0934389 1.37614 +8.40297 9.11121 +3.66605 3.91717 +-0.274468 0.867811 +9.41428 9.56659 +1.22657 2.12792 +8.71336 9.85384 +5.09347 5.42905 +2.02877 2.36652 +5.99112 7.40703 +0.911618 3.48138 +4.84352 5.11131 +1.16309 2.08613 +5.58561 5.84805 +0.663543 1.08921 +1.83189 3.93269 +4.07731 4.38879 +4.04789 4.9989 +2.09457 3.61279 +2.00982 2.94396 +7.37537 7.66574 +5.08648 5.80122 +9.19959 10.2263 +4.26136 4.86194 +6.67875 7.61134 +1.27462 2.48399 +7.2237 7.82324 +-0.0141009 0.0441377 +8.32069 8.36192 +2.82562 3.0717 +-0.528918 1.25301 +1.90486 3.04714 +1.34489 1.75301 +3.14332 4.03322 +8.55351 10.8681 +9.09824 10.3828 +0.496868 0.622499 +7.11112 7.62765 +0.335233 0.528962 +6.71335 7.13937 +6.78574 7.71172 +9.13568 9.22251 +7.10299 7.64765 +3.64747 4.06685 +8.64041 9.40111 +2.43515 2.93081 +2.95476 3.68588 +0.0863751 0.777976 +6.5891 8.18165 +8.80986 10.0735 +0.568868 1.63785 +4.41677 5.42049 +8.72857 9.88426 +3.67467 4.25442 +8.98168 10.1087 +5.08611 5.50098 +1.28982 2.34422 +-0.914176 0.969847 +4.35042 4.42735 +4.02282 5.08164 +9.00566 9.4791 +2.71821 3.24065 +3.20252 3.24988 +8.61559 9.6733 +3.15157 4.7685 +3.59348 4.67872 +0.286864 0.36279 +8.40374 10.528 +7.53647 8.13523 +6.81591 6.90226 +7.68111 9.10704 +8.37958 8.73818 +3.25808 4.40893 +1.50348 3.00641 +0.20803 1.40949 +3.93771 4.84177 +2.79232 3.35329 +4.2666 4.63588 +0.341784 1.46241 +1.53063 2.06724 +8.58212 8.86194 +8.95411 9.70651 +8.71591 9.26292 +6.66088 6.7009 +3.95881 5.93917 +8.5823 8.76007 +-0.308958 0.34174 +1.03188 1.37677 +7.52675 9.84031 +4.27952 4.32984 +1.83465 2.27607 +8.12096 8.64922 +2.22605 4.40067 +0.00929139 0.871342 +0.376531 1.29354 +3.5257 4.30165 +1.95846 4.09589 +-0.200922 0.799272 +0.24432 1.76673 +4.73477 5.06514 +8.97059 9.2276 +2.89618 2.93969 +0.168256 1.03325 +3.44522 3.83622 +2.74889 2.76042 +6.07155 6.7979 +9.06484 9.09804 +7.56658 9.29215 +4.3084 5.45621 +-0.0786996 1.12809 +8.48249 9.74107 +6.4196 6.61469 +1.57119 1.87612 +3.15463 3.86251 +2.0089 2.57741 +6.53618 7.12035 +7.07901 7.29396 +0.114756 0.887413 +8.90806 9.65731 +4.0921 5.23407 +2.63441 2.92344 +4.31769 4.98832 +8.90336 9.26837 +8.25313 8.91204 +2.87758 4.00212 +-0.708243 0.789072 +3.28656 4.55872 +5.73177 5.80293 +5.40596 5.5844 +4.09318 4.57774 +6.16178 7.00613 +8.5514 10.5495 +6.83987 7.3056 +1.06341 1.97923 +7.82153 9.00722 +0.923069 1.42337 +1.83408 2.82331 +5.75305 7.23576 +0.241909 0.96721 +1.16645 2.10491 +5.41819 6.09839 +7.49242 7.69495 +0.347233 0.383681 +2.33245 2.53467 +4.91249 5.27759 +8.11182 9.2758 +0.0955456 0.548659 +-0.359909 0.48055 +1.64759 3.47097 +6.37855 7.40015 +0.423283 2.08857 +4.10068 4.46856 +2.58389 2.69626 +0.848483 2.72258 +8.67321 8.88903 +2.07607 3.42398 +3.11033 3.80741 +2.24735 3.48626 +8.11883 8.7687 +0.29959 1.41603 +4.84924 5.13641 +1.44102 1.74592 +1.13437 2.50296 +1.75876 3.09859 +4.75363 5.90838 +7.36423 8.20074 +5.51578 6.42652 +0.915633 1.86015 +9.44679 10.3479 +2.61691 3.60215 +6.26524 7.2538 +2.74326 3.12649 +5.83934 6.98592 +9.1111 10.4891 +2.27066 2.82709 +8.19359 8.67233 +0.834236 1.7066 +6.19288 7.21392 +-0.249843 0.891821 +2.5652 3.25132 +5.25356 5.88905 +3.99545 4.18918 +1.93186 2.51527 +4.44621 4.82421 +5.89181 7.36963 +2.77321 3.60627 +2.76444 3.88016 +2.50062 2.66105 +1.14846 1.66146 +2.951 4.81656 +3.81976 4.01061 +4.75674 5.59916 +6.74092 7.08289 +2.09989 2.32514 +0.220723 0.865303 +5.48107 5.71875 +1.48372 2.88941 +0.484577 1.12051 +8.93618 9.7185 +1.89769 3.65655 +2.0129 3.55214 +9.23173 10.3694 +0.286189 1.22753 +0.453785 1.55541 +2.24068 2.6541 +8.80917 10.4969 +7.12801 7.15222 +9.25745 9.9103 +5.73429 6.76901 +7.54454 8.47157 +1.96008 3.74997 +8.00837 9.25665 +1.66384 2.07613 +5.53014 5.97461 +-1.32495 1.33319 +4.58479 5.2263 +7.92048 8.75668 +6.87595 7.02522 +0.157713 0.389585 +7.48277 7.51261 +8.10714 8.38399 +0.0802723 0.587088 +1.13024 1.71135 +5.71769 6.84757 +3.08261 4.31054 +2.95952 5.09762 +6.62815 7.44256 +5.0805 5.8499 +3.38489 3.73265 +1.10644 2.18331 +4.70493 7.31686 +2.2253 2.6338 +0.778359 1.6265 +6.94211 7.2149 +4.20976 4.99342 +7.47792 7.67881 +7.06219 8.76137 +4.97677 6.12206 +6.30829 6.69361 +6.19977 6.76781 +9.67636 10.2172 +3.41958 3.69137 +0.374486 0.943711 +4.00837 4.80107 +8.85401 10.1325 +6.0938 7.8919 +1.51055 3.08998 +8.94594 10.3139 +1.06714 2.65511 +0.703202 0.850595 +4.87735 6.00659 +8.3067 8.39924 +7.78071 8.3155 +1.98737 2.81116 +6.86323 8.07974 +1.03479 1.34584 +0.490512 0.670211 +5.82122 6.1901 +5.50836 6.63385 +7.9192 8.9606 +0.913719 2.18983 +4.97151 5.70909 +4.19907 4.37712 +2.01188 2.63318 +7.84813 9.3771 +5.32667 7.48502 +8.50951 10.1006 +-0.551637 0.930509 +1.06511 2.23353 +1.91111 3.42663 +9.37528 9.55327 +7.27975 7.38741 +3.46676 4.83165 +7.36137 8.70333 +-0.295762 0.623228 +8.48558 8.81076 +2.71689 3.41873 +6.49265 8.11042 +5.25516 5.57336 +6.10462 7.05991 +8.76997 9.15164 +7.86196 8.30651 +7.82765 9.24604 +5.98573 6.34182 +6.45367 7.47857 +3.27018 5.10835 +1.3079 2.37423 +-0.261387 0.338113 +7.60683 8.81791 +4.7346 7.41988 +5.25597 5.28517 +3.76704 4.52226 +3.91774 6.66976 +5.69618 8.92667 +1.86148 3.07531 +5.57404 6.51438 +9.39049 9.77921 +2.38692 4.21416 +6.84909 7.23633 +7.2379 7.58761 +4.73485 6.11606 +7.80013 8.08105 +1.72701 3.40244 +2.44475 4.4072 +9.72565 9.77726 +3.35288 4.06493 +8.91215 9.92325 +8.67991 9.65865 +0.253195 0.764339 +4.23564 5.59497 +1.84752 2.14986 +-0.502957 0.528737 +1.32656 2.11347 +9.81563 10.0213 +7.60114 8.05035 +8.51797 8.83342 +-0.394604 1.41267 +7.71614 8.63514 +0.530249 0.968898 +2.90463 3.01675 +7.58098 8.71658 +-0.253747 1.28827 +1.832 2.39006 +7.2268 7.27225 +3.84076 4.66703 +2.2564 2.73185 +7.31508 8.46008 +4.99387 5.64948 +7.21239 7.79983 +7.60231 7.8473 +0.555482 1.41892 +1.25539 1.73665 +8.41561 8.96404 +5.06771 5.17664 +0.0655744 2.10718 +8.00222 8.65909 +7.48841 7.83609 +6.30909 6.89448 +9.1697 9.55942 +1.36259 2.22582 +-0.923854 0.994771 +3.43724 4.64053 +8.09411 8.19574 +4.84869 5.52805 +2.69802 3.4119 +9.0613 9.29405 +0.565216 0.687165 +5.93495 6.57426 +1.86925 2.75493 +1.41068 2.00824 +1.60612 1.62471 +3.11499 5.89909 +2.69806 3.90538 +3.76301 4.22135 +3.30065 4.70725 +5.56461 7.02137 +8.35335 8.99287 +4.79259 4.88508 +6.7911 7.52912 +8.14843 8.28583 +3.67629 5.06406 +5.71462 7.04747 +9.06721 9.99733 +4.87932 6.8586 +8.00814 9.57664 +7.03069 7.51623 +9.0989 9.57644 +2.70873 3.91296 +1.64425 1.7007 +6.53716 6.99033 +8.29874 8.74509 +1.88941 2.57626 +4.65337 5.23247 +9.04723 9.06665 +3.52258 3.61496 +1.1207 1.80143 +0.680601 1.98384 +2.94593 5.38692 +2.65685 2.67932 +9.00469 10.2054 +6.44318 7.2657 +4.66656 5.33893 +3.41719 4.72453 +3.12403 4.21748 +6.67973 6.81775 +3.54347 4.14978 +3.02554 3.50812 +3.91883 3.93657 +7.31721 7.89895 +1.86275 2.85473 +6.23266 6.4449 +7.59855 9.38013 +9.07084 9.49309 +0.557656 2.6851 +6.899 7.37693 +4.23162 5.84314 +8.54108 9.37672 +3.9513 4.79746 +7.299 8.29678 +5.58879 5.88551 +9.14992 9.22385 +9.1914 9.31788 +4.95663 5.56316 +2.16516 2.39538 +0.722262 1.89664 +7.76447 7.80026 +2.77772 3.39136 +9.59513 9.78635 +1.02728 1.2181 +7.32631 7.56611 +7.37389 7.46163 +6.87949 8.18689 +8.95602 9.81169 +5.85364 6.63434 +0.129136 2.13484 +7.09608 7.71167 +7.1487 8.34258 +7.48738 8.3172 +8.77247 9.95985 +7.6706 9.56828 +8.14268 8.61726 +6.5455 7.90871 +4.57866 4.78453 +3.63937 4.42349 +5.18905 5.36516 +4.68884 5.62995 +5.88338 7.83824 +-0.002979 0.145818 +4.42981 4.77141 +0.558593 1.07999 +6.91713 7.36159 +5.13948 6.20805 +3.34368 4.07112 +7.27365 7.8383 +9.6898 9.9514 +6.14332 6.75102 +2.16534 2.78843 +2.8007 4.37952 +7.67047 7.72955 +8.77377 9.85092 +1.26087 1.55193 +6.29788 6.58511 +7.68178 9.05777 +0.383336 1.21247 +2.55185 4.30874 +8.91971 9.21836 +3.67638 4.68596 +8.13843 9.13684 +-0.424353 1.97502 +2.71499 2.93977 +0.104447 0.387901 +4.09592 4.67009 +0.808593 0.920798 +5.01258 6.30662 +4.97668 6.57412 +8.44135 9.03816 +2.78932 3.72809 +6.71337 7.15128 +4.27234 4.50127 +6.78266 9.70351 +6.48026 7.51491 +7.36296 8.42283 +4.80339 7.3704 +6.24735 7.3132 +0.134626 0.364187 +2.73854 4.09422 +0.809997 1.19657 +6.41154 6.50244 +7.16847 8.56485 +1.53582 3.33985 +1.92874 2.86427 +6.95941 7.01378 +5.8592 6.54917 +2.51802 2.75622 +3.3894 3.6957 +2.2547 2.64693 +8.62054 9.1951 +8.86378 10.0003 +1.87892 2.28732 +3.83146 4.21484 +1.53262 1.99692 +7.86048 7.93125 +1.79437 2.68269 +3.92781 4.24119 +5.43044 5.47935 +0.322904 0.618854 +3.42383 5.18531 +4.00989 5.83612 +7.06304 8.76582 +5.88039 6.77654 +8.638 8.9479 +1.73391 2.09002 +1.04861 2.84779 +-0.313019 0.557659 +3.35245 4.1308 +9.05373 9.57205 +5.85684 6.49193 +6.00719 6.86421 +4.25244 4.65772 +5.15865 5.61529 +8.78498 9.77544 +8.33803 9.26452 +3.42915 4.92279 +8.29884 8.94035 +5.10232 5.35924 +4.33571 4.86695 +7.86184 7.90029 +7.34345 7.36214 +0.201624 0.800371 +9.05882 10.5503 +4.32188 5.03154 +-0.0456982 1.22298 +2.90921 3.60013 +1.69306 2.36564 +7.79029 9.15059 +4.65205 5.06538 +6.34552 8.32176 +7.92695 9.32585 +7.17903 8.09903 +9.53561 9.60287 +0.365723 1.23929 +0.542889 0.849053 +8.15061 8.93512 +6.40042 6.41053 +5.82666 6.5488 +1.00893 1.83717 +1.76021 2.11893 +7.61076 8.6242 +2.32513 3.4856 +4.39023 6.01094 +-0.11754 0.421848 +6.76371 6.94513 +4.67607 5.58732 +-0.201992 0.765553 +7.42926 7.44429 +2.57485 2.85339 +2.74138 4.13421 +8.21645 9.18107 +6.28184 6.4996 +7.129 7.74678 +7.76842 8.74924 +3.5359 4.35892 +3.04103 3.24376 +2.29389 2.92164 +6.96306 7.64415 +8.82053 9.04584 +1.19911 2.06167 +5.91357 7.6773 +0.150241 1.23291 +4.48681 5.41762 +6.89156 8.13443 +5.37828 5.79944 +2.13694 2.91102 +1.35932 2.08272 +6.14309 6.23278 +4.03202 5.88521 +7.23417 7.43704 +1.2501 2.60793 +2.12334 3.65727 +7.05722 8.77078 +0.437873 0.585933 +6.33338 9.16643 +2.44724 4.40234 +2.92012 3.64047 +1.2039 3.25195 +8.6611 10.0398 +8.0088 9.13622 +5.96562 7.08515 +5.45181 6.65246 +0.742546 2.38958 +4.12919 4.93571 +0.428823 0.84483 +1.45226 2.5869 +9.50727 10.0211 +7.69194 8.66273 +1.25706 2.44554 +5.23247 5.47762 +0.499178 1.70722 +7.26569 8.72467 +3.59815 5.50022 +1.03601 2.43445 +0.092414 0.927635 +3.7917 3.995 +6.21977 8.40398 +3.1513 3.81188 +9.80482 10.0951 +8.65564 9.33687 +2.06164 3.49152 +2.09754 2.34929 +0.66126 2.31888 +5.34832 6.82603 +7.91038 8.59105 +0.695523 0.800961 +2.33406 2.71629 +8.37774 10.9253 +9.7682 10.106 +9.44382 9.5743 +8.78009 9.47645 +1.87309 3.04127 +1.86724 2.13913 +3.30049 3.52416 +7.18508 7.6648 +1.3736 2.12153 +2.41879 5.06716 +1.87815 2.29743 +1.76646 2.06335 +9.73034 9.95475 +0.497489 0.686102 +6.96908 7.17338 +9.23111 10.0148 +3.30981 4.21787 +9.53311 10.3734 +-0.067709 0.147251 +8.44557 8.82047 +7.10407 7.47639 +0.834352 1.36908 +9.1598 10.6508 +4.22018 4.38279 +3.8295 3.95462 +3.97302 4.97247 +1.55856 2.31013 +0.0217962 0.486978 +1.69845 2.65786 +-0.489562 0.582187 +5.10621 5.6055 +9.8478 9.85919 +6.15389 6.92324 +7.11469 8.0418 +3.20625 3.78209 +5.93389 7.66892 +1.15134 1.18023 +6.84797 7.4239 +2.9483 3.22279 +-0.43205 0.764755 +7.17846 7.33313 +5.4729 8.26894 +6.19512 7.32132 +0.591934 0.767568 +0.49266 1.80691 +9.08272 9.72242 +5.85683 6.36905 +5.27625 7.13913 +3.60853 3.98155 +0.642811 1.10253 +1.27117 1.5329 +8.76096 9.61776 +4.9498 5.12847 +7.53282 7.80438 +1.40487 1.65657 +3.45329 3.84307 +3.25698 3.49614 +2.38651 2.89802 +8.23114 8.99016 +9.58516 10.4145 +5.5185 6.27733 +0.583068 0.892249 +1.93142 2.35084 +7.94845 9.22667 +2.47963 3.9005 +3.46106 3.86301 +7.77744 8.43735 +1.41072 1.73969 +9.12904 10.4307 +3.52227 3.66861 +5.4743 5.86487 +-0.51727 1.63657 +5.09861 7.03162 +5.14763 5.93411 +3.23526 3.47376 +0.9702 1.74063 +9.28366 10.3322 +1.80257 1.92265 +8.63597 9.08467 +4.16006 4.97753 +6.37418 6.39374 +5.82376 6.62429 +7.74751 8.68962 +1.63821 2.53399 +4.9864 6.40969 +0.680772 0.995608 +3.74344 3.83319 +0.898055 1.8593 +2.36839 2.39307 +7.21046 7.51006 +0.60893 2.91523 +3.15017 4.30412 +5.02219 6.28886 +4.60541 4.73379 +8.41196 8.58978 +8.84706 10.8198 +6.95807 7.54952 +5.54729 6.9315 +4.62574 4.73423 +3.35252 3.59865 +1.02207 1.71791 +3.16408 3.73993 +0.639222 1.69519 +7.57978 8.05813 +2.41371 2.77174 +8.65544 10.093 +6.31988 6.70758 +6.5301 8.39328 +0.578825 1.20331 +1.1243 2.07824 +5.86555 6.72397 +6.37103 6.81736 +1.12086 3.46541 +2.59503 3.44073 +5.27128 5.3616 +2.87331 3.4352 +5.48408 6.67916 +3.36016 4.09125 +0.813671 0.9811 +0.812162 3.22209 +6.85104 6.86306 +0.671311 0.979685 +2.75962 2.82659 +2.42186 2.49827 +7.82974 9.59669 +3.48851 3.60085 +8.47775 10.9574 +8.6863 10.6155 +0.196484 1.07469 +1.19293 1.45012 +5.79166 6.18466 +6.51597 6.6793 +9.78341 10.1992 +8.17879 9.59257 +6.96178 8.73165 +4.09161 4.31908 +3.19514 3.4072 +5.5101 6.32978 +0.188435 1.84481 +9.41738 10.0379 +1.46994 1.6294 +4.21915 5.39529 +5.46567 5.86638 +8.19414 9.201 +4.38616 4.55193 +2.31105 2.73345 +6.05897 6.12297 +8.84135 9.74232 +9.44943 10.2225 +3.27501 3.66059 +0.524904 1.74374 +7.7228 8.43799 +5.13274 5.82863 +8.2787 8.94491 +1.61463 2.03499 +7.04346 8.69977 +0.938308 2.38676 +0.00208037 0.0186158 +1.98744 2.05864 +7.05787 8.16211 +1.68383 2.04684 +2.24812 2.28257 +0.685061 1.2947 +2.25379 2.92827 +6.0052 6.24797 +7.06213 7.86344 +0.751849 2.96376 +0.0977921 0.513746 +8.43792 9.10545 +2.80769 3.09276 +9.19308 9.59741 +4.74365 4.99708 +8.41385 8.58422 +4.28093 5.9281 +4.26205 4.75417 +1.48035 1.61363 +1.4264 1.80922 +3.48365 4.52935 +1.78396 2.96351 +8.4134 8.96536 +8.65646 9.34781 +1.88027 2.97804 +8.92531 9.02743 +6.91815 7.88895 +5.68023 7.37521 +3.93105 4.6123 +0.385874 1.30785 +1.80151 2.24385 +8.43781 9.33927 +6.69643 8.001 +6.12062 6.673 +4.8316 6.63067 +9.00443 9.08204 +1.5651 2.65023 +3.57517 4.40231 +5.85127 8.02219 +8.02586 10.018 +2.00514 2.75138 +6.32104 7.84285 +8.90914 9.78319 +4.91325 6.27817 +3.87406 4.80327 +8.57887 9.30685 +1.40351 1.71079 +-0.217977 0.224497 +8.37711 9.56393 +5.54644 5.77714 +8.18206 8.36015 +0.774967 1.97899 +9.10434 10.1721 +9.39621 10.1135 +4.80108 4.90605 +9.45978 9.96227 +2.85412 4.05215 +5.71985 7.16735 +2.35081 2.82214 +9.34881 10.5899 +7.13014 7.82872 +4.54931 4.89725 +9.41397 9.9131 +8.90226 9.55276 +8.27995 9.83651 +9.2767 9.6053 +0.388751 1.40317 +5.01478 5.88869 +6.41521 7.21754 +1.22552 1.39067 +3.75771 3.81571 +4.39362 6.04592 +8.82639 8.84544 +4.59289 4.89208 +1.52235 1.64285 +1.85893 4.52056 +1.91781 2.78253 +3.34677 4.54987 +9.26905 10.6019 +7.10958 8.02083 +0.765257 1.66957 +2.17169 2.70214 +4.2293 6.38089 +1.41111 2.45992 +5.76864 6.85715 +2.19944 2.93182 +9.03727 9.6454 +3.82652 4.35225 +2.52642 3.09725 +7.77868 9.35844 +0.337665 1.00787 +1.92021 2.04418 +4.41862 5.95486 +9.47606 9.62386 +1.12113 1.55658 +5.26701 7.09712 +8.81478 9.34863 +6.29447 7.43847 +2.82379 3.57268 +7.9735 8.79936 +3.30176 5.50666 +6.36009 6.8864 +4.13583 5.00627 +0.510514 0.882245 +6.93864 7.78543 +2.04039 2.4298 +3.18337 3.19424 +4.20059 4.67088 +0.316687 0.707377 +0.169106 1.68194 +8.26665 10.2362 +1.1124 1.78306 +2.84603 3.33142 +9.48756 9.96651 +9.4301 9.7316 +0.234674 1.23981 +0.493232 0.522565 +1.342 1.41739 +2.57196 4.08221 +1.54201 2.52284 +5.32049 6.00052 +8.54218 8.59452 +-0.030524 1.64476 +2.31645 2.72528 +4.71898 4.92827 +0.0872997 1.74969 +0.994278 1.76964 +1.34411 2.77952 +0.156817 2.10245 +5.78094 6.34389 +3.09336 3.10563 +8.14245 9.0928 +9.34202 9.75484 +9.78415 10.0211 +4.68383 5.19384 +6.09441 7.90512 +6.74941 6.76118 +1.78693 1.91697 +2.34369 2.62141 +-0.20756 0.829082 +3.57681 5.11448 +2.44234 4.45153 +4.84521 5.31902 +1.80487 3.64498 +2.46125 3.02549 +-0.334514 0.64288 +8.06406 8.49886 +1.74559 2.54474 +6.05883 6.46529 +9.00014 10.2271 +8.00064 8.5061 +0.909467 0.980765 +8.65862 8.69736 +8.11457 8.77049 +3.93237 5.02485 +4.64507 5.34852 +3.92405 4.19449 +5.02381 5.21722 +3.76203 3.78396 +6.74925 7.34781 +8.2556 8.63585 +3.92521 3.99739 +1.44641 2.31509 +0.23516 0.917239 +4.4614 6.35489 +3.33221 3.95247 +1.73289 2.07919 +6.92385 7.55052 +8.74351 9.41125 +9.41451 10.1785 +7.4001 8.81081 +2.97038 3.12524 +7.26043 7.77569 +5.56625 5.59344 +5.70977 6.33362 +7.61443 8.43218 +1.05308 1.82947 +0.377602 1.57633 +6.42483 7.51505 +4.73011 5.43693 +7.72 8.09098 +9.20063 9.82287 +6.88273 7.35327 +6.88423 7.68356 +3.55293 3.6227 +0.947096 1.76021 +3.66411 5.67117 +9.31422 10.1035 +6.84847 6.98956 +2.16221 4.45806 +0.853284 3.15932 +2.48673 2.89793 +3.37633 3.90938 +1.6141 1.66363 +1.6658 3.01723 +0.419408 1.01736 +0.712239 0.791538 +2.25249 3.62425 +8.09772 10.2367 +1.46651 1.48148 +1.73233 2.0489 +7.42679 9.23232 +7.97446 9.53281 +2.74677 4.03955 +-0.169412 0.872795 +4.90663 5.40277 +7.62122 9.49334 +6.55971 7.34259 +3.71957 5.03775 +3.33226 4.06459 +0.634912 1.52603 +3.65506 4.09318 +4.31463 4.60534 +8.58287 9.85385 +0.334759 0.7232 +2.14027 2.866 +6.06611 6.3625 +2.53013 3.18764 +4.30913 4.89247 +6.53234 6.92328 +7.66419 8.61762 +1.37598 2.26754 +8.06279 8.80692 +5.28688 5.70608 +0.509396 1.34606 +8.80589 9.29765 +9.3801 10.3988 +0.402662 0.597735 +5.87213 6.63371 +2.79136 3.763 +6.20615 7.25189 +7.54065 9.62156 +4.12107 5.04454 +5.60294 6.69246 +1.20845 1.49272 +1.75679 2.56397 +2.83939 3.85147 +6.21362 6.71341 +9.01824 9.2388 +4.66617 5.04944 +1.48766 2.55674 +8.89442 9.42175 +5.29411 5.39531 +6.66271 8.68733 +0.730461 1.42466 +6.22927 6.55086 +0.566776 1.17299 +3.06104 4.17775 +5.28026 5.73966 +5.76071 7.61585 +7.83786 9.58106 +6.32199 6.46961 +8.89555 9.17429 +3.85772 4.97805 +6.63352 8.79211 +7.87234 7.94131 +6.53479 7.87979 +3.90293 4.50376 +6.21371 7.31788 +1.00497 1.75003 +6.90351 8.02435 +2.29142 3.9809 +6.26632 6.45283 +-0.0354471 1.31727 +8.80046 9.20169 +7.86905 8.36819 +0.848737 1.82393 +7.98136 9.40712 +3.97765 4.95399 +8.70252 9.26275 +3.13412 4.29389 +2.06446 3.55839 +7.67918 8.44509 +5.96082 6.40336 +1.20461 2.36924 +4.76741 5.74978 +9.41217 9.94305 +7.36736 8.07119 +3.44102 3.56957 +3.59893 4.52751 +4.2613 6.41628 +1.65321 3.02235 +3.70067 3.86657 +0.0176327 1.1215 +4.13592 4.88595 +8.73668 9.0834 +1.80944 2.95584 +6.05721 6.93009 +5.08206 5.38626 +1.86749 1.89392 +3.58284 4.10506 +0.0885586 1.47709 +5.46502 5.93066 +8.45338 8.47878 +3.46789 4.02317 +0.975506 1.15814 +7.12758 7.60073 +7.99582 8.56746 +3.11435 3.83805 +4.51166 4.52472 +8.39096 8.75934 +8.42208 9.66019 +2.48498 4.73703 +3.50301 4.81264 +6.40196 7.0733 +8.52138 8.82265 +1.49822 1.74634 +7.08547 7.93508 +3.47832 4.42948 +6.08646 6.20865 +4.46334 4.65278 +3.80008 4.08214 +3.4853 5.44308 +5.48109 6.18681 +6.59161 8.04307 +7.36554 7.38201 +5.2144 5.31725 +4.62607 7.25804 +1.24345 1.81263 +5.49248 8.16867 +6.4056 8.26316 +7.67828 8.56923 +2.46187 2.56974 +2.22942 3.27248 +7.14933 8.06682 +2.3236 2.95462 +4.18028 4.80535 +4.981 5.54215 +7.23261 7.34863 +4.96309 6.06396 +4.24402 4.44364 +0.917707 1.32687 +1.19806 1.65106 +3.7725 5.31412 +9.70021 9.84203 +5.99824 7.77474 +3.32636 3.84266 +8.59841 9.07653 +7.9916 9.14415 +0.786519 1.84655 +0.166394 1.47834 +2.87633 3.52808 +7.53804 9.56807 +6.14406 6.16189 +1.63428 3.96845 +1.10307 1.58897 +1.30032 2.85313 +7.89803 8.32723 +8.77593 8.90136 +1.68804 2.69447 +4.5956 4.6743 +7.39643 8.29839 +6.93629 7.82243 +6.10289 7.677 +1.83835 2.34295 +1.04506 1.91684 +8.95277 9.43817 +0.36153 0.643665 +1.02408 3.18963 +4.02972 4.40301 +2.80428 2.82552 +6.51718 6.64956 +0.185341 1.56607 +6.1658 7.59364 +4.09288 4.11687 +6.90205 7.16338 +5.0755 5.39478 +4.5614 4.83286 +5.8489 8.76295 +9.70079 10.0431 +8.44334 8.54714 +3.00139 3.66327 +5.34458 6.38895 +7.11481 7.96865 +4.66776 5.15678 +0.390138 0.53352 +2.01116 3.32839 +6.78761 6.97068 +4.57477 5.0724 +1.14098 1.36134 +7.4559 8.30327 +0.700932 2.40437 +1.90469 1.99046 +4.30064 5.11485 +7.84433 8.48543 +5.96212 7.49882 +3.93055 3.96317 +0.546327 1.04814 +8.96011 9.0404 +7.89255 8.06149 +0.669924 2.6944 +-0.00972314 0.837474 +6.07199 6.37467 +2.73659 3.19833 +5.9576 7.10966 +9.1316 9.14737 +5.26101 6.59184 +5.77697 8.08876 +0.68623 0.782805 +0.842619 1.39893 +5.82075 6.15957 +4.36394 4.88479 +7.1828 7.90107 +3.3331 4.39923 +6.54243 7.24966 +2.809 2.96491 +4.18514 4.61948 +4.95453 5.33929 +8.33288 9.52867 +9.05785 10.4276 +2.58917 4.74403 +1.34279 1.89014 +4.93626 5.75424 +7.75031 7.92788 +9.00904 9.02402 +3.91286 5.15124 +6.98486 7.34688 +-0.173169 0.415019 +0.652242 1.51556 +3.50184 5.30486 +3.72563 4.09022 +4.60463 6.58985 +3.34219 4.31833 +2.55445 2.58651 +6.14573 6.3669 +4.52336 6.37342 +9.37606 9.76836 +2.4198 3.36929 +2.89109 3.66974 +5.62463 6.05989 +0.674219 1.84165 +0.590017 1.71153 +1.54622 2.10277 +6.48003 6.55663 +3.56355 3.98573 +0.743671 1.87049 +3.27833 6.0722 +4.76267 6.9967 +2.80188 4.03037 +0.372694 0.482111 +5.73987 5.9529 +8.84732 9.49033 +0.833944 1.8157 +4.06126 4.36615 +0.884619 2.34622 +6.86723 6.99141 +8.07737 9.05193 +8.35903 9.00761 +8.84777 9.74001 +8.58058 9.05479 +8.28076 8.44566 +4.55155 5.65475 +2.44314 3.38966 +3.22172 4.50395 +7.1808 7.90376 +0.639636 1.72606 +5.46807 5.94322 +9.02146 9.87864 +-0.628472 0.655557 +4.29775 5.9553 +6.77525 7.38152 +6.51827 6.93542 +8.95252 9.52939 +0.755406 1.19973 +7.69455 7.86912 +0.170143 1.12949 +7.69254 8.08221 +2.08238 3.27051 +1.28662 1.78628 +1.21208 2.79391 +-0.155739 1.7071 +8.28833 9.10011 +5.77789 6.6954 +1.98395 2.35216 +5.77469 6.05177 +2.77565 5.81092 +-1.53416 2.30576 +6.93529 8.04506 +3.91553 4.55593 +5.57201 6.29071 +1.54149 1.86613 +4.09163 4.31234 +8.47834 11.1229 +5.70376 7.02981 +2.24683 3.79925 +5.4793 6.41036 +5.27644 6.81729 +0.13273 0.371437 +1.22959 1.41618 +0.551957 1.03276 +2.01269 2.4018 +8.77113 9.09395 +8.11753 8.46262 +0.39406 0.783705 +5.35964 5.48227 +7.24727 8.23233 +7.74525 8.85748 +0.0115736 0.882607 +1.78575 2.19684 +8.32514 9.0503 +3.11074 3.34975 +0.847464 2.13237 +0.310898 0.393528 +8.68841 10.518 +1.10032 1.83755 +2.42286 3.02554 +1.16364 2.80986 +1.46419 2.11421 +7.46021 7.90273 +6.86556 7.62542 +1.91466 3.79843 +3.1056 3.83969 +3.41591 4.26565 +0.285122 1.21372 +3.75441 5.52385 +1.07643 2.63403 +6.17341 7.67244 +9.13122 9.5132 +4.39696 6.15885 +3.7207 4.07729 +6.80782 7.1958 +6.65933 6.67105 +8.51535 8.7263 +5.98305 7.17759 +2.19609 2.46108 +8.21186 8.96908 +2.94729 3.60562 +3.31907 3.9297 +0.463492 0.626603 +2.62143 3.55089 +5.76898 6.79002 +1.45502 1.56525 +4.80797 5.62389 +5.87337 6.70588 +2.92765 3.50929 +0.412987 0.951057 +3.64594 4.40269 +-0.043401 0.502176 +4.54802 5.44613 +1.20218 1.8732 +2.75547 2.96745 +7.10348 7.7945 +9.74845 9.98835 +4.83718 6.4836 +2.30563 2.5903 +4.74016 6.30789 +6.42192 6.93329 +5.37294 6.73938 +2.4365 3.05787 +1.08283 3.79193 +4.90426 5.93563 +3.8874 4.83301 +0.13909 0.983027 +4.07407 5.61421 +8.62875 10.6851 +8.10233 8.29952 +2.23047 2.4691 +7.34617 7.39475 +1.66309 2.3032 +7.11207 10.0686 +4.52412 6.38666 +2.48323 2.96878 +7.47877 8.86547 +2.67607 4.33436 +6.83659 8.21075 +2.87313 3.39011 +2.81911 4.07729 +0.227877 0.657898 +6.57843 7.14311 +-0.591405 1.56925 +7.08018 7.59 +9.09558 9.3923 +9.48544 9.79474 +0.740233 2.33129 +8.51111 11.134 +7.79219 8.0281 +1.73821 1.89316 +9.21077 9.29488 +5.38354 6.46025 +4.30403 4.5472 +0.0893758 0.919238 +7.94464 8.51053 +5.27119 6.3741 +5.22476 6.00588 diff --git a/geom_bottleneck/tests/data/test_013_A b/geom_bottleneck/tests/data/test_013_A new file mode 100644 index 0000000..51cff1c --- /dev/null +++ b/geom_bottleneck/tests/data/test_013_A @@ -0,0 +1,5 @@ +7.50638 7.78005 +0.991758 2.12178 +5.18481 6.61702 +6.14703 7.08581 +4.09936 4.83024 diff --git a/geom_bottleneck/tests/data/test_013_B b/geom_bottleneck/tests/data/test_013_B new file mode 100644 index 0000000..be62ed3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_013_B @@ -0,0 +1,5 @@ +5.8232 6.36308 +2.16066 2.48668 +2.38754 4.91418 +4.77403 5.43982 +0.291412 1.11147 diff --git a/geom_bottleneck/tests/data/test_014_A b/geom_bottleneck/tests/data/test_014_A new file mode 100644 index 0000000..f7f90ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_014_A @@ -0,0 +1 @@ +1.0 1.0 diff --git a/geom_bottleneck/tests/data/test_014_B b/geom_bottleneck/tests/data/test_014_B new file mode 100644 index 0000000..a167a4f --- /dev/null +++ b/geom_bottleneck/tests/data/test_014_B @@ -0,0 +1 @@ +5.0 5.0 diff --git a/geom_bottleneck/tests/data/test_015_A b/geom_bottleneck/tests/data/test_015_A new file mode 100644 index 0000000..a167a4f --- /dev/null +++ b/geom_bottleneck/tests/data/test_015_A @@ -0,0 +1 @@ +5.0 5.0 diff --git a/geom_bottleneck/tests/data/test_015_B b/geom_bottleneck/tests/data/test_015_B new file mode 100644 index 0000000..a167a4f --- /dev/null +++ b/geom_bottleneck/tests/data/test_015_B @@ -0,0 +1 @@ +5.0 5.0 diff --git a/geom_bottleneck/tests/data/test_016_A b/geom_bottleneck/tests/data/test_016_A new file mode 100644 index 0000000..151d4b1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_016_A @@ -0,0 +1,220 @@ +1.391781911475341 1.391781911475341 +1.395142124726278 1.395142124726278 +1.514181227875788 1.514181227875788 +1.528291566797427 1.528291566797427 +1.585389310674157 1.585389310674157 +1.629232116709072 1.629232116709072 +1.641428662445941 1.641428662445941 +1.646998748860116 1.646998748860116 +1.652915988616469 1.652915988616469 +1.69199679556404 1.69199679556404 +1.705727462482595 1.705727462482595 +1.706819293048617 1.706819293048617 +1.720175733750729 1.720175733750729 +1.728031840308488 1.728031840308488 +1.73797421040929 1.73797421040929 +1.739519744204842 1.739519744204842 +1.76132425248022 1.76132425248022 +1.767766952966369 1.767766952966369 +1.792444271021371 1.792444271021371 +1.831487552809192 1.831487552809192 +1.837086616049901 1.837086616049901 +1.851186504948943 1.851186504948943 +1.860502132730509 1.860502132730509 +1.8619433117852 1.8619433117852 +1.878229072834972 1.878229072834972 +1.880655074837347 1.880655074837347 +1.883647832802556 1.883647832802556 +1.884127769927503 1.884127769927503 +1.892969784466709 1.892969784466709 +1.916936460787894 1.916936460787894 +1.931545068229315 1.931545068229315 +1.937626522143119 1.937626522143119 +1.942267721488891 1.942267721488891 +1.963295334827521 1.963295334827521 +1.975655395743736 1.975655395743736 +1.981448090925679 1.981448090925679 +1.986220565173897 1.986220565173897 +1.98709020812351 1.98709020812351 +1.989420269013254 1.989420269013254 +2.007874648480185 2.007874648480185 +2.012179388983059 2.012179388983059 +2.019051972834053 2.019051972834053 +2.023278848058142 2.023278848058142 +2.026190677562545 2.026190677562545 +2.041594763633561 2.041594763633561 +2.042508934597344 2.042508934597344 +2.04305394648524 2.04305394648524 +2.052514683218775 2.052514683218775 +2.059038785694094 2.059038785694094 +2.062577320792516 2.062577320792516 +2.063488177732052 2.063488177732052 +2.067806664626417 2.067806664626417 +2.073013782498534 2.073013782498534 +2.08646120854976 2.08646120854976 +2.098476357223667 2.098476357223667 +2.101378199886176 2.101378199886176 +2.101927506425904 2.101927506425904 +2.12671744783454 2.12671744783454 +2.143966150630584 2.143966150630584 +2.145312642688415 2.145312642688415 +2.148704396208969 2.148704396208969 +2.153092682531471 2.153092682531471 +2.157553654759374 2.157553654759374 +2.176659075756566 2.176659075756566 +2.177260578806816 2.177260578806816 +2.179141269427014 2.179141269427014 +2.201895416482074 2.201895416482074 +2.202563945779844 2.202563945779844 +2.205113735193028 2.205113735193028 +2.207345865351049 2.207345865351049 +2.208922099676958 2.208922099676958 +2.218057898922937 2.218057898922937 +2.228610453267036 2.228610453267036 +2.241314066596301 2.241314066596301 +2.242145210071643 2.242145210071643 +2.253976266568437 2.253976266568437 +2.255324860119305 2.255324860119305 +2.271300972641221 2.271300972641221 +2.279438361991067 2.279438361991067 +2.286592331830957 2.286592331830957 +2.287159411646074 2.287159411646074 +2.296653147995115 2.296653147995115 +2.301754785182811 2.301754785182811 +2.30409930499031 2.30409930499031 +2.32141477565108 2.32141477565108 +2.347789281926012 2.347789281926012 +2.347827987256373 2.347827987256373 +2.349391321950732 2.349391321950732 +2.350129292983257 2.350129292983257 +2.358679083392328 2.358679083392328 +2.372845273125388 2.372845273125388 +2.385040766846267 2.385040766846267 +2.42114588843816 2.42114588843816 +2.425116524931602 2.425116524931602 +2.426518521893022 2.426518521893022 +2.43211651886311 2.43211651886311 +2.441302771998711 2.441302771998711 +2.446429340510857 2.446429340510857 +2.446547553904861 2.446547553904861 +2.45764765793376 2.45764765793376 +2.461222149682938 2.461222149682938 +2.467900747394114 2.467900747394114 +2.473214152160872 2.473214152160872 +2.5 2.5 +2.503557913626332 2.503557913626332 +2.504315621146863 2.504315621146863 +2.515634290122204 2.515634290122204 +2.516231935083851 2.516231935083851 +2.517558892374071 2.517558892374071 +2.526325773757754 2.526325773757754 +2.531164001388939 2.531164001388939 +2.53128061055404 2.53128061055404 +2.539387277827314 2.539387277827314 +2.540864599180268 2.540864599180268 +2.548084457784768 2.548084457784768 +2.548923292215475 2.548923292215475 +2.551730202825644 2.551730202825644 +2.553178578801818 2.553178578801818 +2.560295747947446 2.560295747947446 +2.566321603108612 2.566321603108612 +2.568932286976676 2.568932286976676 +2.574887688783916 2.574887688783916 +2.581809142325336 2.581809142325336 +2.584541960262555 2.584541960262555 +2.585511915815223 2.585511915815223 +2.592970592044868 2.592970592044868 +2.596055336381078 2.596055336381078 +2.598560573626668 2.598560573626668 +2.614019084614256 2.614019084614256 +2.618463725327216 2.618463725327216 +2.622883674481145 2.622883674481145 +2.627791161528314 2.627791161528314 +2.63535653879261 2.63535653879261 +2.654825898255443 2.654825898255443 +2.660423271276714 2.660423271276714 +2.667148030102869 2.667148030102869 +2.67012591760915 2.67012591760915 +2.698712599567882 2.698712599567882 +2.72180967799905 2.72180967799905 +2.732466204434637 2.732466204434637 +2.734187392905275 2.734187392905275 +2.737296308103857 2.737296308103857 +2.745724923243991 2.745724923243991 +2.749541709159369 2.749541709159369 +2.752925621447035 2.752925621447035 +2.754183973113479 2.754183973113479 +2.763972022430258 2.763972022430258 +2.766941997926879 2.766941997926879 +2.773850925522978 2.773850925522978 +2.777506755238121 2.777506755238121 +2.780333194223143 2.780333194223143 +2.783060349483276 2.783060349483276 +2.78679029681548 2.78679029681548 +2.786792895521339 2.786792895521339 +2.795170825459034 2.795170825459034 +2.801104989227437 2.801104989227437 +2.80525433080833 2.80525433080833 +2.805376738133109 2.805376738133109 +2.806844454092663 2.806844454092663 +2.811611818684648 2.811611818684648 +2.811994908451803 2.811994908451803 +2.816002798930236 2.816002798930236 +2.816814002472584 2.816814002472584 +2.818569391261086 2.818569391261086 +2.821660827076439 2.821660827076439 +2.822317588351085 2.822317588351085 +2.824910409962511 2.824910409962511 +2.829322097471409 2.829322097471409 +2.833852169620359 2.833852169620359 +2.839287537694811 2.839287537694811 +2.841714730677953 2.841714730677953 +2.841715058318205 2.841715058318205 +2.851653306950001 2.851653306950001 +2.853639002902003 2.853639002902003 +2.85515962291442 2.85515962291442 +2.855333736885793 2.855333736885793 +2.872540314564304 2.872540314564304 +2.879449214478037 2.879449214478037 +2.881003856158217 2.881003856158217 +2.881074731438092 2.881074731438092 +2.893589165559115 2.893589165559115 +2.898664743213686 2.898664743213686 +2.90387832180792 2.90387832180792 +2.919095859678745 2.919095859678745 +2.924945175440496 2.924945175440496 +2.931795145696962 2.931795145696962 +2.932285006979528 2.932285006979528 +2.934606807227626 2.934606807227626 +2.936392671567475 2.936392671567475 +2.953794710898493 2.953794710898493 +2.958055395706548 2.958055395706548 +2.960407744013656 2.960407744013656 +2.960759715914242 2.960759715914242 +2.969702548922556 2.969702548922556 +2.970149844982665 2.970149844982665 +2.978953970679893 2.978953970679893 +2.979075864664287 2.979075864664287 +2.984665519558418 2.984665519558418 +3.04548240149063 3.04548240149063 +3.050688336416719 3.050688336416719 +3.05773927378742 3.05773927378742 +3.059596740753369 3.059596740753369 +3.059762479996741 3.059762479996741 +3.088543279751235 3.088543279751235 +3.093580813520995 3.093580813520995 +3.104787362108069 3.104787362108069 +3.173380191779681 3.173380191779681 +3.583124637167399 3.583124637167399 +3.630658112409034 3.630658112409034 +3.631421639368965 3.631421639368965 +3.751087101339956 3.751087101339956 +3.800845709568037 3.800845709568037 +3.846558940956666 3.846558940956666 +4 4 +4 4 +4.076238038291317 4.076238038291317 +4.455547086147983 4.455547086147983 +5.356087357608394 5.356087357608394 +5.54364842773721 5.54364842773721 +7.587654388717225 7.587654388717225 diff --git a/geom_bottleneck/tests/data/test_016_B b/geom_bottleneck/tests/data/test_016_B new file mode 100644 index 0000000..bb8655a --- /dev/null +++ b/geom_bottleneck/tests/data/test_016_B @@ -0,0 +1,193 @@ +1.167089173446239 1.167089173446239 +1.256234452640111 1.256234452640111 +1.303693422257498 1.303693422257498 +1.413255970488646 1.413255970488646 +1.697910382446573 1.697910382446573 +1.718844728805093 1.718844728805093 +1.734124820632724 1.734124820632724 +1.749572938304276 1.749572938304276 +1.770320424526358 1.770320424526358 +1.786344763036807 1.786344763036807 +1.810054737907635 1.810054737907635 +1.815127306170105 1.815127306170105 +1.837806648681218 1.837806648681218 +1.870552189043019 1.870552189043019 +1.897240351979503 1.897240351979503 +1.935562152643027 1.935562152643027 +1.952562418976663 1.952562418976663 +1.959552126104175 1.959552126104175 +1.979899732318601 1.979899732318601 +2.00044500769347 2.00044500769347 +2.028951227523087 2.028951227523087 +2.037678749316724 2.037678749316724 +2.047911420446857 2.047911420446857 +2.075181804515723 2.075181804515723 +2.077245386452578 2.077245386452578 +2.084751316684838 2.084751316684838 +2.084860886126203 2.084860886126203 +2.103286477421968 2.103286477421968 +2.106856827309345 2.106856827309345 +2.113139266068691 2.113139266068691 +2.114594962503455 2.114594962503455 +2.115917727493158 2.115917727493158 +2.122335878797089 2.122335878797089 +2.127359082726206 2.127359082726206 +2.131673381033273 2.131673381033273 +2.155015793320908 2.155015793320908 +2.162480684365264 2.162480684365264 +2.195207236194009 2.195207236194009 +2.203279931784429 2.203279931784429 +2.205567995563669 2.205567995563669 +2.212933962936773 2.212933962936773 +2.215081271089993 2.215081271089993 +2.225989037578865 2.225989037578865 +2.24218929203347 2.24218929203347 +2.246321319993257 2.246321319993257 +2.280059407166517 2.280059407166517 +2.284117669032543 2.284117669032543 +2.293233992770926 2.293233992770926 +2.298815356955373 2.298815356955373 +2.300542634724628 2.300542634724628 +2.326408290042679 2.326408290042679 +2.328797162040625 2.328797162040625 +2.36025798094028 2.36025798094028 +2.365031313604634 2.365031313604634 +2.372266311053883 2.372266311053883 +2.400053902049271 2.400053902049271 +2.409134054334209 2.409134054334209 +2.411368235895246 2.411368235895246 +2.415934766378347 2.415934766378347 +2.420989857074179 2.420989857074179 +2.422520269961376 2.422520269961376 +2.43377629944218 2.43377629944218 +2.449308615746858 2.449308615746858 +2.452936540056068 2.452936540056068 +2.453698388060092 2.453698388060092 +2.454711357943602 2.454711357943602 +2.459202673400056 2.459202673400056 +2.493778305287384 2.493778305287384 +2.537394117473177 2.537394117473177 +2.544674753106669 2.544674753106669 +2.558904304820755 2.558904304820755 +2.563089994365716 2.563089994365716 +2.565476194422898 2.565476194422898 +2.599756049189921 2.599756049189921 +2.603619661709009 2.603619661709009 +2.609775379385211 2.609775379385211 +2.622552038976658 2.622552038976658 +2.623798471910885 2.623798471910885 +2.635711198661633 2.635711198661633 +2.644229304223612 2.644229304223612 +2.661919064427223 2.661919064427223 +2.666783921498494 2.666783921498494 +2.675503310152301 2.675503310152301 +2.684228699964661 2.684228699964661 +2.696854617267681 2.696854617267681 +2.700538654666735 2.700538654666735 +2.744886611436907 2.744886611436907 +2.748618547996708 2.748618547996708 +2.757981496641135 2.757981496641135 +2.774766825791652 2.774766825791652 +2.784491736143893 2.784491736143893 +2.796482184304273 2.796482184304273 +2.800849254751463 2.800849254751463 +2.816963410000067 2.816963410000067 +2.825207379914743 2.825207379914743 +2.831286409028398 2.831286409028398 +2.844827082550712 2.844827082550712 +2.853558438121966 2.853558438121966 +2.859806035663089 2.859806035663089 +2.878956033959891 2.878956033959891 +2.886422825109222 2.886422825109222 +2.891566924618832 2.891566924618832 +2.892028419188578 2.892028419188578 +2.893138900330932 2.893138900330932 +2.894250936382814 2.894250936382814 +2.90112201577666 2.90112201577666 +2.902172795370005 2.902172795370005 +2.90967533504119 2.90967533504119 +2.919687125962211 2.919687125962211 +2.923711238894001 2.923711238894001 +2.929041907338841 2.929041907338841 +2.938734873084349 2.938734873084349 +2.939642428979572 2.939642428979572 +2.943010909640486 2.943010909640486 +2.944210926048103 2.944210926048103 +2.951091358234723 2.951091358234723 +2.953950275008233 2.953950275008233 +2.966943157369611 2.966943157369611 +2.982522008227535 2.982522008227535 +2.992174049247434 2.992174049247434 +2.993098995839607 2.993098995839607 +2.995311055519335 2.995311055519335 +2.996708164866609 2.996708164866609 +2.999922110096644 2.999922110096644 +3 3 +3.000364533251431 3.000364533251431 +3.003840990677832 3.003840990677832 +3.006672301312824 3.006672301312824 +3.016489409140306 3.016489409140306 +3.021123787004333 3.021123787004333 +3.039117818612596 3.039117818612596 +3.039555193616473 3.039555193616473 +3.049952247267922 3.049952247267922 +3.057673482371216 3.057673482371216 +3.06920083507411 3.06920083507411 +3.075505231082782 3.075505231082782 +3.079038628197304 3.079038628197304 +3.084265889701239 3.084265889701239 +3.086837468106297 3.086837468106297 +3.103873984398081 3.103873984398081 +3.11528125482979 3.11528125482979 +3.119720021802376 3.119720021802376 +3.132543753577128 3.132543753577128 +3.141822873359038 3.141822873359038 +3.143502053175705 3.143502053175705 +3.153232877003746 3.153232877003746 +3.157586960809866 3.157586960809866 +3.157966892275408 3.157966892275408 +3.163583225161638 3.163583225161638 +3.178188125342772 3.178188125342772 +3.178475867931057 3.178475867931057 +3.179372297765929 3.179372297765929 +3.186437137237586 3.186437137237586 +3.188053957464282 3.188053957464282 +3.199351610026191 3.199351610026191 +3.204566427513051 3.204566427513051 +3.22885278850648 3.22885278850648 +3.229088648916556 3.229088648916556 +3.236685523936269 3.236685523936269 +3.239854786600373 3.239854786600373 +3.255809161351669 3.255809161351669 +3.287718056143732 3.287718056143732 +3.294038308299402 3.294038308299402 +3.313688277153076 3.313688277153076 +3.325783245946608 3.325783245946608 +3.331072954808429 3.331072954808429 +3.354962852285211 3.354962852285211 +3.357502741262644 3.357502741262644 +3.373668509804576 3.373668509804576 +3.408653045775418 3.408653045775418 +3.416281541503763 3.416281541503763 +3.443144279972986 3.443144279972986 +3.492970564191033 3.492970564191033 +3.493767805580122 3.493767805580122 +3.559084134799019 3.559084134799019 +3.559898699300211 3.559898699300211 +3.833585501974904 3.833585501974904 +4.099502076836052 4.099502076836052 +4.484082147277348 4.484082147277348 +4.505718324707756 4.505718324707756 +4.891723119528026 4.891723119528026 +5.065300494905414 5.065300494905414 +5.188599238535201 5.188599238535201 +5.36134479630535 5.36134479630535 +5.609786508140671 5.609786508140671 +7.08640314680382 7.08640314680382 +7.113765883549079 7.113765883549079 +7.328944131981744 7.328944131981744 +7.63625182217108 7.63625182217108 +7.716743341311718 7.716743341311718 +7.938093404092351 7.938093404092351 +8.112783377863046 8.112783377863046 +8.131485096731454 8.131485096731454 diff --git a/geom_bottleneck/tests/data/test_100_A b/geom_bottleneck/tests/data/test_100_A new file mode 100644 index 0000000..e02a950 --- /dev/null +++ b/geom_bottleneck/tests/data/test_100_A @@ -0,0 +1,2 @@ +0 3 +6 12 diff --git a/geom_bottleneck/tests/data/test_100_B b/geom_bottleneck/tests/data/test_100_B new file mode 100644 index 0000000..f757173 --- /dev/null +++ b/geom_bottleneck/tests/data/test_100_B @@ -0,0 +1,2 @@ +3 5 +5 13 diff --git a/geom_bottleneck/tests/data/test_101_A b/geom_bottleneck/tests/data/test_101_A new file mode 100644 index 0000000..5fe22b1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_101_A @@ -0,0 +1,2 @@ +8 11 +9 11 diff --git a/geom_bottleneck/tests/data/test_101_B b/geom_bottleneck/tests/data/test_101_B new file mode 100644 index 0000000..ea19ef6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_101_B @@ -0,0 +1,2 @@ +3 6 +5 8 diff --git a/geom_bottleneck/tests/data/test_102_A b/geom_bottleneck/tests/data/test_102_A new file mode 100644 index 0000000..1cd65e9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_102_A @@ -0,0 +1,2 @@ +7 8 +9 16 diff --git a/geom_bottleneck/tests/data/test_102_B b/geom_bottleneck/tests/data/test_102_B new file mode 100644 index 0000000..3ffa9cb --- /dev/null +++ b/geom_bottleneck/tests/data/test_102_B @@ -0,0 +1,2 @@ +1 10 +9 12 diff --git a/geom_bottleneck/tests/data/test_103_A b/geom_bottleneck/tests/data/test_103_A new file mode 100644 index 0000000..d4c86c9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_103_A @@ -0,0 +1,2 @@ +5 7 +10 15 diff --git a/geom_bottleneck/tests/data/test_103_B b/geom_bottleneck/tests/data/test_103_B new file mode 100644 index 0000000..c9a898a --- /dev/null +++ b/geom_bottleneck/tests/data/test_103_B @@ -0,0 +1,2 @@ +1 2 +1 7 diff --git a/geom_bottleneck/tests/data/test_104_A b/geom_bottleneck/tests/data/test_104_A new file mode 100644 index 0000000..373ae44 --- /dev/null +++ b/geom_bottleneck/tests/data/test_104_A @@ -0,0 +1,2 @@ +6 11 +3 6 diff --git a/geom_bottleneck/tests/data/test_104_B b/geom_bottleneck/tests/data/test_104_B new file mode 100644 index 0000000..e382a3b --- /dev/null +++ b/geom_bottleneck/tests/data/test_104_B @@ -0,0 +1,2 @@ +3 9 +10 17 diff --git a/geom_bottleneck/tests/data/test_105_A b/geom_bottleneck/tests/data/test_105_A new file mode 100644 index 0000000..21b1cc4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_105_A @@ -0,0 +1,2 @@ +5 14 +2 7 diff --git a/geom_bottleneck/tests/data/test_105_B b/geom_bottleneck/tests/data/test_105_B new file mode 100644 index 0000000..3ab6543 --- /dev/null +++ b/geom_bottleneck/tests/data/test_105_B @@ -0,0 +1,2 @@ +5 12 +3 12 diff --git a/geom_bottleneck/tests/data/test_106_A b/geom_bottleneck/tests/data/test_106_A new file mode 100644 index 0000000..8d3ffb8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_106_A @@ -0,0 +1,2 @@ +7 11 +7 15 diff --git a/geom_bottleneck/tests/data/test_106_B b/geom_bottleneck/tests/data/test_106_B new file mode 100644 index 0000000..760ada5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_106_B @@ -0,0 +1,2 @@ +4 12 +6 13 diff --git a/geom_bottleneck/tests/data/test_107_A b/geom_bottleneck/tests/data/test_107_A new file mode 100644 index 0000000..79a621d --- /dev/null +++ b/geom_bottleneck/tests/data/test_107_A @@ -0,0 +1,2 @@ +9 19 +1 7 diff --git a/geom_bottleneck/tests/data/test_107_B b/geom_bottleneck/tests/data/test_107_B new file mode 100644 index 0000000..43e4294 --- /dev/null +++ b/geom_bottleneck/tests/data/test_107_B @@ -0,0 +1,2 @@ +0 1 +1 3 diff --git a/geom_bottleneck/tests/data/test_108_A b/geom_bottleneck/tests/data/test_108_A new file mode 100644 index 0000000..c2035e5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_108_A @@ -0,0 +1,2 @@ +9 19 +7 16 diff --git a/geom_bottleneck/tests/data/test_108_B b/geom_bottleneck/tests/data/test_108_B new file mode 100644 index 0000000..618c2c8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_108_B @@ -0,0 +1,2 @@ +5 13 +0 9 diff --git a/geom_bottleneck/tests/data/test_109_A b/geom_bottleneck/tests/data/test_109_A new file mode 100644 index 0000000..d16f551 --- /dev/null +++ b/geom_bottleneck/tests/data/test_109_A @@ -0,0 +1,2 @@ +8 9 +3 10 diff --git a/geom_bottleneck/tests/data/test_109_B b/geom_bottleneck/tests/data/test_109_B new file mode 100644 index 0000000..02f9518 --- /dev/null +++ b/geom_bottleneck/tests/data/test_109_B @@ -0,0 +1,2 @@ +4 9 +6 13 diff --git a/geom_bottleneck/tests/data/test_110_A b/geom_bottleneck/tests/data/test_110_A new file mode 100644 index 0000000..f013fd8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_110_A @@ -0,0 +1,2 @@ +3 5 +1 10 diff --git a/geom_bottleneck/tests/data/test_110_B b/geom_bottleneck/tests/data/test_110_B new file mode 100644 index 0000000..f443b07 --- /dev/null +++ b/geom_bottleneck/tests/data/test_110_B @@ -0,0 +1,2 @@ +7 10 +3 5 diff --git a/geom_bottleneck/tests/data/test_111_A b/geom_bottleneck/tests/data/test_111_A new file mode 100644 index 0000000..fcadd44 --- /dev/null +++ b/geom_bottleneck/tests/data/test_111_A @@ -0,0 +1,2 @@ +10 19 +3 4 diff --git a/geom_bottleneck/tests/data/test_111_B b/geom_bottleneck/tests/data/test_111_B new file mode 100644 index 0000000..569a5d5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_111_B @@ -0,0 +1,2 @@ +5 6 +10 15 diff --git a/geom_bottleneck/tests/data/test_112_A b/geom_bottleneck/tests/data/test_112_A new file mode 100644 index 0000000..7d421ec --- /dev/null +++ b/geom_bottleneck/tests/data/test_112_A @@ -0,0 +1,2 @@ +1 5 +7 8 diff --git a/geom_bottleneck/tests/data/test_112_B b/geom_bottleneck/tests/data/test_112_B new file mode 100644 index 0000000..ec7a9a1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_112_B @@ -0,0 +1,2 @@ +4 11 +9 17 diff --git a/geom_bottleneck/tests/data/test_113_A b/geom_bottleneck/tests/data/test_113_A new file mode 100644 index 0000000..c3b3312 --- /dev/null +++ b/geom_bottleneck/tests/data/test_113_A @@ -0,0 +1,2 @@ +5 12 +0 3 diff --git a/geom_bottleneck/tests/data/test_113_B b/geom_bottleneck/tests/data/test_113_B new file mode 100644 index 0000000..ca287ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_113_B @@ -0,0 +1,2 @@ +3 13 +6 11 diff --git a/geom_bottleneck/tests/data/test_114_A b/geom_bottleneck/tests/data/test_114_A new file mode 100644 index 0000000..112e9d3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_114_A @@ -0,0 +1,2 @@ +6 15 +2 6 diff --git a/geom_bottleneck/tests/data/test_114_B b/geom_bottleneck/tests/data/test_114_B new file mode 100644 index 0000000..dabf69d --- /dev/null +++ b/geom_bottleneck/tests/data/test_114_B @@ -0,0 +1,2 @@ +6 7 +1 4 diff --git a/geom_bottleneck/tests/data/test_115_A b/geom_bottleneck/tests/data/test_115_A new file mode 100644 index 0000000..c467eae --- /dev/null +++ b/geom_bottleneck/tests/data/test_115_A @@ -0,0 +1,2 @@ +10 18 +0 1 diff --git a/geom_bottleneck/tests/data/test_115_B b/geom_bottleneck/tests/data/test_115_B new file mode 100644 index 0000000..e14dd59 --- /dev/null +++ b/geom_bottleneck/tests/data/test_115_B @@ -0,0 +1,2 @@ +2 3 +4 8 diff --git a/geom_bottleneck/tests/data/test_116_A b/geom_bottleneck/tests/data/test_116_A new file mode 100644 index 0000000..1828c98 --- /dev/null +++ b/geom_bottleneck/tests/data/test_116_A @@ -0,0 +1,2 @@ +8 9 +9 14 diff --git a/geom_bottleneck/tests/data/test_116_B b/geom_bottleneck/tests/data/test_116_B new file mode 100644 index 0000000..f63039f --- /dev/null +++ b/geom_bottleneck/tests/data/test_116_B @@ -0,0 +1,2 @@ +5 13 +9 18 diff --git a/geom_bottleneck/tests/data/test_117_A b/geom_bottleneck/tests/data/test_117_A new file mode 100644 index 0000000..280d9bc --- /dev/null +++ b/geom_bottleneck/tests/data/test_117_A @@ -0,0 +1,2 @@ +10 15 +9 14 diff --git a/geom_bottleneck/tests/data/test_117_B b/geom_bottleneck/tests/data/test_117_B new file mode 100644 index 0000000..595260c --- /dev/null +++ b/geom_bottleneck/tests/data/test_117_B @@ -0,0 +1,2 @@ +9 15 +6 11 diff --git a/geom_bottleneck/tests/data/test_118_A b/geom_bottleneck/tests/data/test_118_A new file mode 100644 index 0000000..2ecae80 --- /dev/null +++ b/geom_bottleneck/tests/data/test_118_A @@ -0,0 +1,2 @@ +9 10 +4 11 diff --git a/geom_bottleneck/tests/data/test_118_B b/geom_bottleneck/tests/data/test_118_B new file mode 100644 index 0000000..13fc15b --- /dev/null +++ b/geom_bottleneck/tests/data/test_118_B @@ -0,0 +1,2 @@ +5 14 +7 13 diff --git a/geom_bottleneck/tests/data/test_119_A b/geom_bottleneck/tests/data/test_119_A new file mode 100644 index 0000000..db12f3c --- /dev/null +++ b/geom_bottleneck/tests/data/test_119_A @@ -0,0 +1,2 @@ +2 12 +2 5 diff --git a/geom_bottleneck/tests/data/test_119_B b/geom_bottleneck/tests/data/test_119_B new file mode 100644 index 0000000..79ccbdd --- /dev/null +++ b/geom_bottleneck/tests/data/test_119_B @@ -0,0 +1,2 @@ +2 7 +2 3 diff --git a/geom_bottleneck/tests/data/test_120_A b/geom_bottleneck/tests/data/test_120_A new file mode 100644 index 0000000..cd31ead --- /dev/null +++ b/geom_bottleneck/tests/data/test_120_A @@ -0,0 +1,3 @@ +5 13 +9 10 +3 4 diff --git a/geom_bottleneck/tests/data/test_120_B b/geom_bottleneck/tests/data/test_120_B new file mode 100644 index 0000000..148cbca --- /dev/null +++ b/geom_bottleneck/tests/data/test_120_B @@ -0,0 +1,3 @@ +2 6 +5 6 +3 12 diff --git a/geom_bottleneck/tests/data/test_121_A b/geom_bottleneck/tests/data/test_121_A new file mode 100644 index 0000000..864cde5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_121_A @@ -0,0 +1,3 @@ +10 16 +7 14 +5 8 diff --git a/geom_bottleneck/tests/data/test_121_B b/geom_bottleneck/tests/data/test_121_B new file mode 100644 index 0000000..cc2c1dc --- /dev/null +++ b/geom_bottleneck/tests/data/test_121_B @@ -0,0 +1,3 @@ +9 15 +5 10 +0 3 diff --git a/geom_bottleneck/tests/data/test_122_A b/geom_bottleneck/tests/data/test_122_A new file mode 100644 index 0000000..681d074 --- /dev/null +++ b/geom_bottleneck/tests/data/test_122_A @@ -0,0 +1,3 @@ +5 6 +8 9 +5 11 diff --git a/geom_bottleneck/tests/data/test_122_B b/geom_bottleneck/tests/data/test_122_B new file mode 100644 index 0000000..e8681e6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_122_B @@ -0,0 +1,3 @@ +7 8 +0 1 +6 12 diff --git a/geom_bottleneck/tests/data/test_123_A b/geom_bottleneck/tests/data/test_123_A new file mode 100644 index 0000000..2c53b51 --- /dev/null +++ b/geom_bottleneck/tests/data/test_123_A @@ -0,0 +1,3 @@ +5 8 +4 6 +9 10 diff --git a/geom_bottleneck/tests/data/test_123_B b/geom_bottleneck/tests/data/test_123_B new file mode 100644 index 0000000..0acdfb7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_123_B @@ -0,0 +1,3 @@ +9 14 +5 14 +4 5 diff --git a/geom_bottleneck/tests/data/test_124_A b/geom_bottleneck/tests/data/test_124_A new file mode 100644 index 0000000..f43cb9a --- /dev/null +++ b/geom_bottleneck/tests/data/test_124_A @@ -0,0 +1,3 @@ +0 1 +8 16 +4 7 diff --git a/geom_bottleneck/tests/data/test_124_B b/geom_bottleneck/tests/data/test_124_B new file mode 100644 index 0000000..51dd494 --- /dev/null +++ b/geom_bottleneck/tests/data/test_124_B @@ -0,0 +1,3 @@ +7 8 +0 1 +4 6 diff --git a/geom_bottleneck/tests/data/test_125_A b/geom_bottleneck/tests/data/test_125_A new file mode 100644 index 0000000..e0b6720 --- /dev/null +++ b/geom_bottleneck/tests/data/test_125_A @@ -0,0 +1,3 @@ +9 11 +6 13 +1 10 diff --git a/geom_bottleneck/tests/data/test_125_B b/geom_bottleneck/tests/data/test_125_B new file mode 100644 index 0000000..cf4f98c --- /dev/null +++ b/geom_bottleneck/tests/data/test_125_B @@ -0,0 +1,3 @@ +7 16 +10 11 +7 16 diff --git a/geom_bottleneck/tests/data/test_126_A b/geom_bottleneck/tests/data/test_126_A new file mode 100644 index 0000000..f504606 --- /dev/null +++ b/geom_bottleneck/tests/data/test_126_A @@ -0,0 +1,3 @@ +4 8 +5 14 +1 6 diff --git a/geom_bottleneck/tests/data/test_126_B b/geom_bottleneck/tests/data/test_126_B new file mode 100644 index 0000000..f5b5fda --- /dev/null +++ b/geom_bottleneck/tests/data/test_126_B @@ -0,0 +1,3 @@ +1 2 +8 12 +7 8 diff --git a/geom_bottleneck/tests/data/test_127_A b/geom_bottleneck/tests/data/test_127_A new file mode 100644 index 0000000..20f8541 --- /dev/null +++ b/geom_bottleneck/tests/data/test_127_A @@ -0,0 +1,3 @@ +7 8 +10 15 +3 4 diff --git a/geom_bottleneck/tests/data/test_127_B b/geom_bottleneck/tests/data/test_127_B new file mode 100644 index 0000000..36f6cf3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_127_B @@ -0,0 +1,3 @@ +0 1 +8 11 +2 3 diff --git a/geom_bottleneck/tests/data/test_128_A b/geom_bottleneck/tests/data/test_128_A new file mode 100644 index 0000000..9e2c50e --- /dev/null +++ b/geom_bottleneck/tests/data/test_128_A @@ -0,0 +1,3 @@ +9 17 +0 4 +0 3 diff --git a/geom_bottleneck/tests/data/test_128_B b/geom_bottleneck/tests/data/test_128_B new file mode 100644 index 0000000..0fdae08 --- /dev/null +++ b/geom_bottleneck/tests/data/test_128_B @@ -0,0 +1,3 @@ +10 18 +7 10 +1 2 diff --git a/geom_bottleneck/tests/data/test_129_A b/geom_bottleneck/tests/data/test_129_A new file mode 100644 index 0000000..dc289de --- /dev/null +++ b/geom_bottleneck/tests/data/test_129_A @@ -0,0 +1,3 @@ +8 17 +5 10 +9 16 diff --git a/geom_bottleneck/tests/data/test_129_B b/geom_bottleneck/tests/data/test_129_B new file mode 100644 index 0000000..3216111 --- /dev/null +++ b/geom_bottleneck/tests/data/test_129_B @@ -0,0 +1,3 @@ +10 19 +8 17 +2 11 diff --git a/geom_bottleneck/tests/data/test_130_A b/geom_bottleneck/tests/data/test_130_A new file mode 100644 index 0000000..db70054 --- /dev/null +++ b/geom_bottleneck/tests/data/test_130_A @@ -0,0 +1,3 @@ +10 11 +10 19 +4 6 diff --git a/geom_bottleneck/tests/data/test_130_B b/geom_bottleneck/tests/data/test_130_B new file mode 100644 index 0000000..80c5a30 --- /dev/null +++ b/geom_bottleneck/tests/data/test_130_B @@ -0,0 +1,3 @@ +4 14 +0 8 +3 9 diff --git a/geom_bottleneck/tests/data/test_131_A b/geom_bottleneck/tests/data/test_131_A new file mode 100644 index 0000000..720cdb3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_131_A @@ -0,0 +1,3 @@ +9 15 +3 4 +2 5 diff --git a/geom_bottleneck/tests/data/test_131_B b/geom_bottleneck/tests/data/test_131_B new file mode 100644 index 0000000..55bb437 --- /dev/null +++ b/geom_bottleneck/tests/data/test_131_B @@ -0,0 +1,3 @@ +10 20 +10 15 +7 10 diff --git a/geom_bottleneck/tests/data/test_132_A b/geom_bottleneck/tests/data/test_132_A new file mode 100644 index 0000000..dec8f13 --- /dev/null +++ b/geom_bottleneck/tests/data/test_132_A @@ -0,0 +1,3 @@ +6 16 +2 4 +10 11 diff --git a/geom_bottleneck/tests/data/test_132_B b/geom_bottleneck/tests/data/test_132_B new file mode 100644 index 0000000..8844484 --- /dev/null +++ b/geom_bottleneck/tests/data/test_132_B @@ -0,0 +1,3 @@ +6 8 +5 14 +3 4 diff --git a/geom_bottleneck/tests/data/test_133_A b/geom_bottleneck/tests/data/test_133_A new file mode 100644 index 0000000..b46cb4f --- /dev/null +++ b/geom_bottleneck/tests/data/test_133_A @@ -0,0 +1,3 @@ +4 10 +9 15 +1 7 diff --git a/geom_bottleneck/tests/data/test_133_B b/geom_bottleneck/tests/data/test_133_B new file mode 100644 index 0000000..7a5d26a --- /dev/null +++ b/geom_bottleneck/tests/data/test_133_B @@ -0,0 +1,3 @@ +4 5 +3 6 +1 10 diff --git a/geom_bottleneck/tests/data/test_134_A b/geom_bottleneck/tests/data/test_134_A new file mode 100644 index 0000000..4abd1e5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_134_A @@ -0,0 +1,3 @@ +1 4 +6 13 +10 15 diff --git a/geom_bottleneck/tests/data/test_134_B b/geom_bottleneck/tests/data/test_134_B new file mode 100644 index 0000000..aed169c --- /dev/null +++ b/geom_bottleneck/tests/data/test_134_B @@ -0,0 +1,3 @@ +8 17 +8 16 +7 12 diff --git a/geom_bottleneck/tests/data/test_135_A b/geom_bottleneck/tests/data/test_135_A new file mode 100644 index 0000000..bbe9e95 --- /dev/null +++ b/geom_bottleneck/tests/data/test_135_A @@ -0,0 +1,3 @@ +7 15 +1 4 +2 6 diff --git a/geom_bottleneck/tests/data/test_135_B b/geom_bottleneck/tests/data/test_135_B new file mode 100644 index 0000000..3c84c03 --- /dev/null +++ b/geom_bottleneck/tests/data/test_135_B @@ -0,0 +1,3 @@ +6 10 +2 8 +1 7 diff --git a/geom_bottleneck/tests/data/test_136_A b/geom_bottleneck/tests/data/test_136_A new file mode 100644 index 0000000..a68856e --- /dev/null +++ b/geom_bottleneck/tests/data/test_136_A @@ -0,0 +1,3 @@ +0 1 +9 14 +7 11 diff --git a/geom_bottleneck/tests/data/test_136_B b/geom_bottleneck/tests/data/test_136_B new file mode 100644 index 0000000..c03df54 --- /dev/null +++ b/geom_bottleneck/tests/data/test_136_B @@ -0,0 +1,3 @@ +4 6 +3 4 +8 12 diff --git a/geom_bottleneck/tests/data/test_137_A b/geom_bottleneck/tests/data/test_137_A new file mode 100644 index 0000000..179d357 --- /dev/null +++ b/geom_bottleneck/tests/data/test_137_A @@ -0,0 +1,3 @@ +5 6 +7 14 +5 9 diff --git a/geom_bottleneck/tests/data/test_137_B b/geom_bottleneck/tests/data/test_137_B new file mode 100644 index 0000000..42541ae --- /dev/null +++ b/geom_bottleneck/tests/data/test_137_B @@ -0,0 +1,3 @@ +10 16 +1 3 +6 7 diff --git a/geom_bottleneck/tests/data/test_138_A b/geom_bottleneck/tests/data/test_138_A new file mode 100644 index 0000000..9c39dfb --- /dev/null +++ b/geom_bottleneck/tests/data/test_138_A @@ -0,0 +1,3 @@ +0 4 +9 14 +10 20 diff --git a/geom_bottleneck/tests/data/test_138_B b/geom_bottleneck/tests/data/test_138_B new file mode 100644 index 0000000..826d759 --- /dev/null +++ b/geom_bottleneck/tests/data/test_138_B @@ -0,0 +1,3 @@ +8 13 +7 8 +10 18 diff --git a/geom_bottleneck/tests/data/test_139_A b/geom_bottleneck/tests/data/test_139_A new file mode 100644 index 0000000..7f74c9f --- /dev/null +++ b/geom_bottleneck/tests/data/test_139_A @@ -0,0 +1,3 @@ +6 7 +9 14 +4 5 diff --git a/geom_bottleneck/tests/data/test_139_B b/geom_bottleneck/tests/data/test_139_B new file mode 100644 index 0000000..ba4ab64 --- /dev/null +++ b/geom_bottleneck/tests/data/test_139_B @@ -0,0 +1,3 @@ +9 11 +7 11 +9 10 diff --git a/geom_bottleneck/tests/data/test_140_A b/geom_bottleneck/tests/data/test_140_A new file mode 100644 index 0000000..fec44cc --- /dev/null +++ b/geom_bottleneck/tests/data/test_140_A @@ -0,0 +1,4 @@ +9 11 +6 7 +4 12 +1 8 diff --git a/geom_bottleneck/tests/data/test_140_B b/geom_bottleneck/tests/data/test_140_B new file mode 100644 index 0000000..af8aa1c --- /dev/null +++ b/geom_bottleneck/tests/data/test_140_B @@ -0,0 +1,4 @@ +9 10 +1 2 +2 10 +2 8 diff --git a/geom_bottleneck/tests/data/test_141_A b/geom_bottleneck/tests/data/test_141_A new file mode 100644 index 0000000..db65086 --- /dev/null +++ b/geom_bottleneck/tests/data/test_141_A @@ -0,0 +1,4 @@ +7 13 +2 12 +5 13 +6 8 diff --git a/geom_bottleneck/tests/data/test_141_B b/geom_bottleneck/tests/data/test_141_B new file mode 100644 index 0000000..022c192 --- /dev/null +++ b/geom_bottleneck/tests/data/test_141_B @@ -0,0 +1,4 @@ +5 10 +9 12 +10 18 +8 11 diff --git a/geom_bottleneck/tests/data/test_142_A b/geom_bottleneck/tests/data/test_142_A new file mode 100644 index 0000000..10bbe2d --- /dev/null +++ b/geom_bottleneck/tests/data/test_142_A @@ -0,0 +1,4 @@ +6 15 +4 5 +6 9 +8 17 diff --git a/geom_bottleneck/tests/data/test_142_B b/geom_bottleneck/tests/data/test_142_B new file mode 100644 index 0000000..82b6b28 --- /dev/null +++ b/geom_bottleneck/tests/data/test_142_B @@ -0,0 +1,4 @@ +8 12 +8 11 +3 5 +8 17 diff --git a/geom_bottleneck/tests/data/test_143_A b/geom_bottleneck/tests/data/test_143_A new file mode 100644 index 0000000..1db8047 --- /dev/null +++ b/geom_bottleneck/tests/data/test_143_A @@ -0,0 +1,4 @@ +5 6 +0 2 +5 10 +6 10 diff --git a/geom_bottleneck/tests/data/test_143_B b/geom_bottleneck/tests/data/test_143_B new file mode 100644 index 0000000..5c5a6a7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_143_B @@ -0,0 +1,4 @@ +8 14 +5 7 +1 11 +4 10 diff --git a/geom_bottleneck/tests/data/test_144_A b/geom_bottleneck/tests/data/test_144_A new file mode 100644 index 0000000..594f4c4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_144_A @@ -0,0 +1,4 @@ +10 15 +6 13 +1 2 +1 6 diff --git a/geom_bottleneck/tests/data/test_144_B b/geom_bottleneck/tests/data/test_144_B new file mode 100644 index 0000000..aa3cd6d --- /dev/null +++ b/geom_bottleneck/tests/data/test_144_B @@ -0,0 +1,4 @@ +0 8 +10 13 +9 18 +8 11 diff --git a/geom_bottleneck/tests/data/test_145_A b/geom_bottleneck/tests/data/test_145_A new file mode 100644 index 0000000..41ea529 --- /dev/null +++ b/geom_bottleneck/tests/data/test_145_A @@ -0,0 +1,4 @@ +2 10 +3 11 +10 17 +3 8 diff --git a/geom_bottleneck/tests/data/test_145_B b/geom_bottleneck/tests/data/test_145_B new file mode 100644 index 0000000..5bcbaf0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_145_B @@ -0,0 +1,4 @@ +6 13 +10 15 +7 15 +6 10 diff --git a/geom_bottleneck/tests/data/test_146_A b/geom_bottleneck/tests/data/test_146_A new file mode 100644 index 0000000..18c1b4a --- /dev/null +++ b/geom_bottleneck/tests/data/test_146_A @@ -0,0 +1,4 @@ +3 5 +6 11 +1 8 +2 5 diff --git a/geom_bottleneck/tests/data/test_146_B b/geom_bottleneck/tests/data/test_146_B new file mode 100644 index 0000000..24e5821 --- /dev/null +++ b/geom_bottleneck/tests/data/test_146_B @@ -0,0 +1,4 @@ +5 12 +4 10 +5 11 +2 7 diff --git a/geom_bottleneck/tests/data/test_147_A b/geom_bottleneck/tests/data/test_147_A new file mode 100644 index 0000000..bce747d --- /dev/null +++ b/geom_bottleneck/tests/data/test_147_A @@ -0,0 +1,4 @@ +9 11 +1 2 +10 12 +10 15 diff --git a/geom_bottleneck/tests/data/test_147_B b/geom_bottleneck/tests/data/test_147_B new file mode 100644 index 0000000..c545851 --- /dev/null +++ b/geom_bottleneck/tests/data/test_147_B @@ -0,0 +1,4 @@ +4 6 +7 14 +4 12 +7 10 diff --git a/geom_bottleneck/tests/data/test_148_A b/geom_bottleneck/tests/data/test_148_A new file mode 100644 index 0000000..cd7482f --- /dev/null +++ b/geom_bottleneck/tests/data/test_148_A @@ -0,0 +1,4 @@ +5 9 +0 7 +7 11 +7 13 diff --git a/geom_bottleneck/tests/data/test_148_B b/geom_bottleneck/tests/data/test_148_B new file mode 100644 index 0000000..a761bd3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_148_B @@ -0,0 +1,4 @@ +7 9 +2 8 +1 2 +4 11 diff --git a/geom_bottleneck/tests/data/test_149_A b/geom_bottleneck/tests/data/test_149_A new file mode 100644 index 0000000..81fff07 --- /dev/null +++ b/geom_bottleneck/tests/data/test_149_A @@ -0,0 +1,4 @@ +2 4 +1 9 +7 13 +4 14 diff --git a/geom_bottleneck/tests/data/test_149_B b/geom_bottleneck/tests/data/test_149_B new file mode 100644 index 0000000..1acd048 --- /dev/null +++ b/geom_bottleneck/tests/data/test_149_B @@ -0,0 +1,4 @@ +9 12 +0 6 +4 10 +0 4 diff --git a/geom_bottleneck/tests/data/test_150_A b/geom_bottleneck/tests/data/test_150_A new file mode 100644 index 0000000..8f4862d --- /dev/null +++ b/geom_bottleneck/tests/data/test_150_A @@ -0,0 +1,4 @@ +9 11 +7 16 +0 1 +0 3 diff --git a/geom_bottleneck/tests/data/test_150_B b/geom_bottleneck/tests/data/test_150_B new file mode 100644 index 0000000..d55101f --- /dev/null +++ b/geom_bottleneck/tests/data/test_150_B @@ -0,0 +1,4 @@ +7 14 +4 5 +7 16 +8 14 diff --git a/geom_bottleneck/tests/data/test_151_A b/geom_bottleneck/tests/data/test_151_A new file mode 100644 index 0000000..1915b6a --- /dev/null +++ b/geom_bottleneck/tests/data/test_151_A @@ -0,0 +1,4 @@ +3 13 +10 11 +7 14 +2 11 diff --git a/geom_bottleneck/tests/data/test_151_B b/geom_bottleneck/tests/data/test_151_B new file mode 100644 index 0000000..065a2c7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_151_B @@ -0,0 +1,4 @@ +6 9 +10 15 +7 8 +7 12 diff --git a/geom_bottleneck/tests/data/test_152_A b/geom_bottleneck/tests/data/test_152_A new file mode 100644 index 0000000..43ed98e --- /dev/null +++ b/geom_bottleneck/tests/data/test_152_A @@ -0,0 +1,4 @@ +10 11 +2 5 +2 5 +0 3 diff --git a/geom_bottleneck/tests/data/test_152_B b/geom_bottleneck/tests/data/test_152_B new file mode 100644 index 0000000..5e179b7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_152_B @@ -0,0 +1,4 @@ +4 8 +5 12 +6 8 +3 5 diff --git a/geom_bottleneck/tests/data/test_153_A b/geom_bottleneck/tests/data/test_153_A new file mode 100644 index 0000000..16f5a34 --- /dev/null +++ b/geom_bottleneck/tests/data/test_153_A @@ -0,0 +1,4 @@ +0 9 +10 11 +10 16 +1 9 diff --git a/geom_bottleneck/tests/data/test_153_B b/geom_bottleneck/tests/data/test_153_B new file mode 100644 index 0000000..a82ae69 --- /dev/null +++ b/geom_bottleneck/tests/data/test_153_B @@ -0,0 +1,4 @@ +0 3 +3 10 +6 14 +4 7 diff --git a/geom_bottleneck/tests/data/test_154_A b/geom_bottleneck/tests/data/test_154_A new file mode 100644 index 0000000..73246c1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_154_A @@ -0,0 +1,4 @@ +2 5 +5 15 +2 5 +3 7 diff --git a/geom_bottleneck/tests/data/test_154_B b/geom_bottleneck/tests/data/test_154_B new file mode 100644 index 0000000..6650b45 --- /dev/null +++ b/geom_bottleneck/tests/data/test_154_B @@ -0,0 +1,4 @@ +3 4 +9 16 +5 12 +1 6 diff --git a/geom_bottleneck/tests/data/test_155_A b/geom_bottleneck/tests/data/test_155_A new file mode 100644 index 0000000..9ce2859 --- /dev/null +++ b/geom_bottleneck/tests/data/test_155_A @@ -0,0 +1,4 @@ +10 14 +7 10 +9 10 +4 12 diff --git a/geom_bottleneck/tests/data/test_155_B b/geom_bottleneck/tests/data/test_155_B new file mode 100644 index 0000000..c852368 --- /dev/null +++ b/geom_bottleneck/tests/data/test_155_B @@ -0,0 +1,4 @@ +6 10 +2 8 +4 8 +1 11 diff --git a/geom_bottleneck/tests/data/test_156_A b/geom_bottleneck/tests/data/test_156_A new file mode 100644 index 0000000..e79fcd1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_156_A @@ -0,0 +1,4 @@ +2 4 +6 12 +1 9 +4 14 diff --git a/geom_bottleneck/tests/data/test_156_B b/geom_bottleneck/tests/data/test_156_B new file mode 100644 index 0000000..05cd916 --- /dev/null +++ b/geom_bottleneck/tests/data/test_156_B @@ -0,0 +1,4 @@ +2 12 +7 12 +7 11 +2 4 diff --git a/geom_bottleneck/tests/data/test_157_A b/geom_bottleneck/tests/data/test_157_A new file mode 100644 index 0000000..257f007 --- /dev/null +++ b/geom_bottleneck/tests/data/test_157_A @@ -0,0 +1,4 @@ +8 17 +7 9 +10 16 +1 9 diff --git a/geom_bottleneck/tests/data/test_157_B b/geom_bottleneck/tests/data/test_157_B new file mode 100644 index 0000000..da76a0c --- /dev/null +++ b/geom_bottleneck/tests/data/test_157_B @@ -0,0 +1,4 @@ +9 11 +3 6 +0 3 +2 3 diff --git a/geom_bottleneck/tests/data/test_158_A b/geom_bottleneck/tests/data/test_158_A new file mode 100644 index 0000000..ec64dab --- /dev/null +++ b/geom_bottleneck/tests/data/test_158_A @@ -0,0 +1,4 @@ +2 4 +9 15 +8 16 +8 11 diff --git a/geom_bottleneck/tests/data/test_158_B b/geom_bottleneck/tests/data/test_158_B new file mode 100644 index 0000000..407c843 --- /dev/null +++ b/geom_bottleneck/tests/data/test_158_B @@ -0,0 +1,4 @@ +10 17 +10 15 +1 8 +10 17 diff --git a/geom_bottleneck/tests/data/test_159_A b/geom_bottleneck/tests/data/test_159_A new file mode 100644 index 0000000..bbf8d13 --- /dev/null +++ b/geom_bottleneck/tests/data/test_159_A @@ -0,0 +1,4 @@ +9 13 +5 6 +3 6 +5 7 diff --git a/geom_bottleneck/tests/data/test_159_B b/geom_bottleneck/tests/data/test_159_B new file mode 100644 index 0000000..fbe6d45 --- /dev/null +++ b/geom_bottleneck/tests/data/test_159_B @@ -0,0 +1,4 @@ +2 5 +4 5 +9 14 +10 11 diff --git a/geom_bottleneck/tests/data/test_160_A b/geom_bottleneck/tests/data/test_160_A new file mode 100644 index 0000000..c712c5a --- /dev/null +++ b/geom_bottleneck/tests/data/test_160_A @@ -0,0 +1,5 @@ +3 10 +1 10 +5 15 +0 9 +8 9 diff --git a/geom_bottleneck/tests/data/test_160_B b/geom_bottleneck/tests/data/test_160_B new file mode 100644 index 0000000..90edf6f --- /dev/null +++ b/geom_bottleneck/tests/data/test_160_B @@ -0,0 +1,5 @@ +3 11 +0 8 +0 3 +4 7 +1 11 diff --git a/geom_bottleneck/tests/data/test_161_A b/geom_bottleneck/tests/data/test_161_A new file mode 100644 index 0000000..4cbae18 --- /dev/null +++ b/geom_bottleneck/tests/data/test_161_A @@ -0,0 +1,5 @@ +9 11 +8 10 +3 6 +4 14 +5 10 diff --git a/geom_bottleneck/tests/data/test_161_B b/geom_bottleneck/tests/data/test_161_B new file mode 100644 index 0000000..e166afb --- /dev/null +++ b/geom_bottleneck/tests/data/test_161_B @@ -0,0 +1,5 @@ +0 3 +8 14 +8 13 +0 2 +1 2 diff --git a/geom_bottleneck/tests/data/test_162_A b/geom_bottleneck/tests/data/test_162_A new file mode 100644 index 0000000..e16e9a3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_162_A @@ -0,0 +1,5 @@ +4 5 +7 17 +4 8 +10 16 +4 7 diff --git a/geom_bottleneck/tests/data/test_162_B b/geom_bottleneck/tests/data/test_162_B new file mode 100644 index 0000000..78ab6a3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_162_B @@ -0,0 +1,5 @@ +6 14 +9 10 +1 9 +7 17 +7 8 diff --git a/geom_bottleneck/tests/data/test_163_A b/geom_bottleneck/tests/data/test_163_A new file mode 100644 index 0000000..6836e59 --- /dev/null +++ b/geom_bottleneck/tests/data/test_163_A @@ -0,0 +1,5 @@ +6 12 +6 11 +7 15 +9 11 +1 6 diff --git a/geom_bottleneck/tests/data/test_163_B b/geom_bottleneck/tests/data/test_163_B new file mode 100644 index 0000000..9d9e6e2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_163_B @@ -0,0 +1,5 @@ +0 6 +1 11 +2 3 +7 14 +7 10 diff --git a/geom_bottleneck/tests/data/test_164_A b/geom_bottleneck/tests/data/test_164_A new file mode 100644 index 0000000..a4187bd --- /dev/null +++ b/geom_bottleneck/tests/data/test_164_A @@ -0,0 +1,5 @@ +0 2 +6 14 +7 16 +9 10 +2 6 diff --git a/geom_bottleneck/tests/data/test_164_B b/geom_bottleneck/tests/data/test_164_B new file mode 100644 index 0000000..8597409 --- /dev/null +++ b/geom_bottleneck/tests/data/test_164_B @@ -0,0 +1,5 @@ +2 10 +5 13 +4 13 +4 6 +8 16 diff --git a/geom_bottleneck/tests/data/test_165_A b/geom_bottleneck/tests/data/test_165_A new file mode 100644 index 0000000..15b9f15 --- /dev/null +++ b/geom_bottleneck/tests/data/test_165_A @@ -0,0 +1,5 @@ +1 9 +6 15 +6 7 +10 18 +6 7 diff --git a/geom_bottleneck/tests/data/test_165_B b/geom_bottleneck/tests/data/test_165_B new file mode 100644 index 0000000..8056eab --- /dev/null +++ b/geom_bottleneck/tests/data/test_165_B @@ -0,0 +1,5 @@ +8 15 +3 13 +8 17 +1 9 +9 18 diff --git a/geom_bottleneck/tests/data/test_166_A b/geom_bottleneck/tests/data/test_166_A new file mode 100644 index 0000000..8257649 --- /dev/null +++ b/geom_bottleneck/tests/data/test_166_A @@ -0,0 +1,5 @@ +2 10 +4 12 +0 4 +10 18 +3 11 diff --git a/geom_bottleneck/tests/data/test_166_B b/geom_bottleneck/tests/data/test_166_B new file mode 100644 index 0000000..02499eb --- /dev/null +++ b/geom_bottleneck/tests/data/test_166_B @@ -0,0 +1,5 @@ +0 6 +6 16 +3 11 +10 19 +5 15 diff --git a/geom_bottleneck/tests/data/test_167_A b/geom_bottleneck/tests/data/test_167_A new file mode 100644 index 0000000..416f645 --- /dev/null +++ b/geom_bottleneck/tests/data/test_167_A @@ -0,0 +1,5 @@ +4 7 +0 5 +1 9 +7 8 +4 10 diff --git a/geom_bottleneck/tests/data/test_167_B b/geom_bottleneck/tests/data/test_167_B new file mode 100644 index 0000000..2ab78e5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_167_B @@ -0,0 +1,5 @@ +3 13 +3 13 +4 12 +4 13 +3 10 diff --git a/geom_bottleneck/tests/data/test_168_A b/geom_bottleneck/tests/data/test_168_A new file mode 100644 index 0000000..57f9e66 --- /dev/null +++ b/geom_bottleneck/tests/data/test_168_A @@ -0,0 +1,5 @@ +9 10 +3 8 +7 17 +10 11 +5 7 diff --git a/geom_bottleneck/tests/data/test_168_B b/geom_bottleneck/tests/data/test_168_B new file mode 100644 index 0000000..6d5d9c5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_168_B @@ -0,0 +1,5 @@ +10 18 +1 9 +4 9 +4 14 +8 14 diff --git a/geom_bottleneck/tests/data/test_169_A b/geom_bottleneck/tests/data/test_169_A new file mode 100644 index 0000000..7db2396 --- /dev/null +++ b/geom_bottleneck/tests/data/test_169_A @@ -0,0 +1,5 @@ +9 12 +10 14 +10 17 +5 6 +4 5 diff --git a/geom_bottleneck/tests/data/test_169_B b/geom_bottleneck/tests/data/test_169_B new file mode 100644 index 0000000..58d7cec --- /dev/null +++ b/geom_bottleneck/tests/data/test_169_B @@ -0,0 +1,5 @@ +0 2 +9 10 +4 11 +10 13 +2 5 diff --git a/geom_bottleneck/tests/data/test_170_A b/geom_bottleneck/tests/data/test_170_A new file mode 100644 index 0000000..7d30592 --- /dev/null +++ b/geom_bottleneck/tests/data/test_170_A @@ -0,0 +1,5 @@ +5 11 +8 14 +6 13 +1 11 +6 15 diff --git a/geom_bottleneck/tests/data/test_170_B b/geom_bottleneck/tests/data/test_170_B new file mode 100644 index 0000000..86d8ccc --- /dev/null +++ b/geom_bottleneck/tests/data/test_170_B @@ -0,0 +1,5 @@ +1 3 +1 3 +4 7 +7 15 +5 13 diff --git a/geom_bottleneck/tests/data/test_171_A b/geom_bottleneck/tests/data/test_171_A new file mode 100644 index 0000000..30ce17c --- /dev/null +++ b/geom_bottleneck/tests/data/test_171_A @@ -0,0 +1,5 @@ +0 7 +3 5 +4 14 +8 14 +3 12 diff --git a/geom_bottleneck/tests/data/test_171_B b/geom_bottleneck/tests/data/test_171_B new file mode 100644 index 0000000..487dcb5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_171_B @@ -0,0 +1,5 @@ +7 13 +3 7 +0 5 +4 14 +5 12 diff --git a/geom_bottleneck/tests/data/test_172_A b/geom_bottleneck/tests/data/test_172_A new file mode 100644 index 0000000..69232cf --- /dev/null +++ b/geom_bottleneck/tests/data/test_172_A @@ -0,0 +1,5 @@ +3 4 +7 10 +8 14 +9 11 +2 12 diff --git a/geom_bottleneck/tests/data/test_172_B b/geom_bottleneck/tests/data/test_172_B new file mode 100644 index 0000000..1ab31ab --- /dev/null +++ b/geom_bottleneck/tests/data/test_172_B @@ -0,0 +1,5 @@ +7 9 +8 10 +9 13 +3 9 +3 7 diff --git a/geom_bottleneck/tests/data/test_173_A b/geom_bottleneck/tests/data/test_173_A new file mode 100644 index 0000000..d88d368 --- /dev/null +++ b/geom_bottleneck/tests/data/test_173_A @@ -0,0 +1,5 @@ +5 8 +7 9 +7 11 +1 9 +5 6 diff --git a/geom_bottleneck/tests/data/test_173_B b/geom_bottleneck/tests/data/test_173_B new file mode 100644 index 0000000..a331c9c --- /dev/null +++ b/geom_bottleneck/tests/data/test_173_B @@ -0,0 +1,5 @@ +1 5 +6 9 +2 5 +1 4 +6 10 diff --git a/geom_bottleneck/tests/data/test_174_A b/geom_bottleneck/tests/data/test_174_A new file mode 100644 index 0000000..a97b65b --- /dev/null +++ b/geom_bottleneck/tests/data/test_174_A @@ -0,0 +1,5 @@ +4 14 +2 7 +9 19 +6 9 +0 2 diff --git a/geom_bottleneck/tests/data/test_174_B b/geom_bottleneck/tests/data/test_174_B new file mode 100644 index 0000000..98da402 --- /dev/null +++ b/geom_bottleneck/tests/data/test_174_B @@ -0,0 +1,5 @@ +4 11 +10 17 +7 8 +0 8 +3 9 diff --git a/geom_bottleneck/tests/data/test_175_A b/geom_bottleneck/tests/data/test_175_A new file mode 100644 index 0000000..dc8bedd --- /dev/null +++ b/geom_bottleneck/tests/data/test_175_A @@ -0,0 +1,5 @@ +8 11 +5 11 +7 13 +8 14 +4 12 diff --git a/geom_bottleneck/tests/data/test_175_B b/geom_bottleneck/tests/data/test_175_B new file mode 100644 index 0000000..b5bd41f --- /dev/null +++ b/geom_bottleneck/tests/data/test_175_B @@ -0,0 +1,5 @@ +4 12 +10 20 +10 20 +3 13 +9 16 diff --git a/geom_bottleneck/tests/data/test_176_A b/geom_bottleneck/tests/data/test_176_A new file mode 100644 index 0000000..dff782a --- /dev/null +++ b/geom_bottleneck/tests/data/test_176_A @@ -0,0 +1,5 @@ +10 13 +9 10 +8 15 +5 9 +5 13 diff --git a/geom_bottleneck/tests/data/test_176_B b/geom_bottleneck/tests/data/test_176_B new file mode 100644 index 0000000..8724366 --- /dev/null +++ b/geom_bottleneck/tests/data/test_176_B @@ -0,0 +1,5 @@ +2 8 +6 7 +0 9 +5 11 +4 12 diff --git a/geom_bottleneck/tests/data/test_177_A b/geom_bottleneck/tests/data/test_177_A new file mode 100644 index 0000000..556caf8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_177_A @@ -0,0 +1,5 @@ +4 7 +2 3 +6 7 +2 4 +0 7 diff --git a/geom_bottleneck/tests/data/test_177_B b/geom_bottleneck/tests/data/test_177_B new file mode 100644 index 0000000..91583a5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_177_B @@ -0,0 +1,5 @@ +8 17 +10 13 +4 6 +3 8 +0 5 diff --git a/geom_bottleneck/tests/data/test_178_A b/geom_bottleneck/tests/data/test_178_A new file mode 100644 index 0000000..e223edb --- /dev/null +++ b/geom_bottleneck/tests/data/test_178_A @@ -0,0 +1,5 @@ +2 3 +9 15 +8 10 +7 15 +5 11 diff --git a/geom_bottleneck/tests/data/test_178_B b/geom_bottleneck/tests/data/test_178_B new file mode 100644 index 0000000..2ab0b73 --- /dev/null +++ b/geom_bottleneck/tests/data/test_178_B @@ -0,0 +1,5 @@ +10 17 +2 9 +0 9 +8 12 +4 14 diff --git a/geom_bottleneck/tests/data/test_179_A b/geom_bottleneck/tests/data/test_179_A new file mode 100644 index 0000000..7b11730 --- /dev/null +++ b/geom_bottleneck/tests/data/test_179_A @@ -0,0 +1,5 @@ +3 13 +5 14 +7 14 +3 11 +10 15 diff --git a/geom_bottleneck/tests/data/test_179_B b/geom_bottleneck/tests/data/test_179_B new file mode 100644 index 0000000..e160b9f --- /dev/null +++ b/geom_bottleneck/tests/data/test_179_B @@ -0,0 +1,5 @@ +2 9 +2 10 +1 4 +3 6 +0 7 diff --git a/geom_bottleneck/tests/data/test_180_A b/geom_bottleneck/tests/data/test_180_A new file mode 100644 index 0000000..a830fb1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_180_A @@ -0,0 +1,6 @@ +9 19 +6 7 +9 17 +0 3 +7 8 +8 14 diff --git a/geom_bottleneck/tests/data/test_180_B b/geom_bottleneck/tests/data/test_180_B new file mode 100644 index 0000000..0ed2108 --- /dev/null +++ b/geom_bottleneck/tests/data/test_180_B @@ -0,0 +1,6 @@ +0 10 +1 11 +10 12 +5 6 +10 16 +5 14 diff --git a/geom_bottleneck/tests/data/test_181_A b/geom_bottleneck/tests/data/test_181_A new file mode 100644 index 0000000..e29de9c --- /dev/null +++ b/geom_bottleneck/tests/data/test_181_A @@ -0,0 +1,6 @@ +1 4 +1 2 +9 19 +3 6 +8 11 +4 8 diff --git a/geom_bottleneck/tests/data/test_181_B b/geom_bottleneck/tests/data/test_181_B new file mode 100644 index 0000000..dacaa51 --- /dev/null +++ b/geom_bottleneck/tests/data/test_181_B @@ -0,0 +1,6 @@ +6 11 +8 15 +8 12 +10 11 +4 7 +5 10 diff --git a/geom_bottleneck/tests/data/test_182_A b/geom_bottleneck/tests/data/test_182_A new file mode 100644 index 0000000..e545af0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_182_A @@ -0,0 +1,6 @@ +8 10 +2 6 +6 14 +5 6 +6 7 +0 2 diff --git a/geom_bottleneck/tests/data/test_182_B b/geom_bottleneck/tests/data/test_182_B new file mode 100644 index 0000000..ffee041 --- /dev/null +++ b/geom_bottleneck/tests/data/test_182_B @@ -0,0 +1,6 @@ +8 11 +6 8 +0 5 +7 13 +6 9 +10 19 diff --git a/geom_bottleneck/tests/data/test_183_A b/geom_bottleneck/tests/data/test_183_A new file mode 100644 index 0000000..0681b8d --- /dev/null +++ b/geom_bottleneck/tests/data/test_183_A @@ -0,0 +1,6 @@ +8 13 +5 7 +1 5 +5 11 +3 7 +0 3 diff --git a/geom_bottleneck/tests/data/test_183_B b/geom_bottleneck/tests/data/test_183_B new file mode 100644 index 0000000..da3af74 --- /dev/null +++ b/geom_bottleneck/tests/data/test_183_B @@ -0,0 +1,6 @@ +10 20 +6 11 +9 10 +1 4 +0 8 +7 14 diff --git a/geom_bottleneck/tests/data/test_184_A b/geom_bottleneck/tests/data/test_184_A new file mode 100644 index 0000000..a252760 --- /dev/null +++ b/geom_bottleneck/tests/data/test_184_A @@ -0,0 +1,6 @@ +3 7 +1 10 +2 5 +0 5 +1 4 +2 3 diff --git a/geom_bottleneck/tests/data/test_184_B b/geom_bottleneck/tests/data/test_184_B new file mode 100644 index 0000000..788be62 --- /dev/null +++ b/geom_bottleneck/tests/data/test_184_B @@ -0,0 +1,6 @@ +8 14 +10 11 +3 5 +5 9 +6 8 +9 10 diff --git a/geom_bottleneck/tests/data/test_185_A b/geom_bottleneck/tests/data/test_185_A new file mode 100644 index 0000000..8922d7a --- /dev/null +++ b/geom_bottleneck/tests/data/test_185_A @@ -0,0 +1,6 @@ +4 10 +8 10 +5 9 +9 13 +9 18 +8 14 diff --git a/geom_bottleneck/tests/data/test_185_B b/geom_bottleneck/tests/data/test_185_B new file mode 100644 index 0000000..fc90091 --- /dev/null +++ b/geom_bottleneck/tests/data/test_185_B @@ -0,0 +1,6 @@ +0 10 +4 5 +3 10 +1 11 +4 9 +4 14 diff --git a/geom_bottleneck/tests/data/test_186_A b/geom_bottleneck/tests/data/test_186_A new file mode 100644 index 0000000..894dc49 --- /dev/null +++ b/geom_bottleneck/tests/data/test_186_A @@ -0,0 +1,6 @@ +1 8 +10 11 +3 10 +8 9 +3 13 +9 13 diff --git a/geom_bottleneck/tests/data/test_186_B b/geom_bottleneck/tests/data/test_186_B new file mode 100644 index 0000000..c0b49c0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_186_B @@ -0,0 +1,6 @@ +6 15 +8 9 +4 7 +0 10 +1 9 +1 2 diff --git a/geom_bottleneck/tests/data/test_187_A b/geom_bottleneck/tests/data/test_187_A new file mode 100644 index 0000000..f2181af --- /dev/null +++ b/geom_bottleneck/tests/data/test_187_A @@ -0,0 +1,6 @@ +9 11 +8 11 +10 11 +3 8 +7 17 +3 5 diff --git a/geom_bottleneck/tests/data/test_187_B b/geom_bottleneck/tests/data/test_187_B new file mode 100644 index 0000000..ab13d0f --- /dev/null +++ b/geom_bottleneck/tests/data/test_187_B @@ -0,0 +1,6 @@ +6 10 +10 19 +5 11 +6 13 +10 16 +10 20 diff --git a/geom_bottleneck/tests/data/test_188_A b/geom_bottleneck/tests/data/test_188_A new file mode 100644 index 0000000..8290582 --- /dev/null +++ b/geom_bottleneck/tests/data/test_188_A @@ -0,0 +1,6 @@ +4 9 +10 20 +0 4 +5 6 +8 9 +5 6 diff --git a/geom_bottleneck/tests/data/test_188_B b/geom_bottleneck/tests/data/test_188_B new file mode 100644 index 0000000..6acfc2e --- /dev/null +++ b/geom_bottleneck/tests/data/test_188_B @@ -0,0 +1,6 @@ +9 19 +6 11 +0 2 +5 12 +3 11 +7 11 diff --git a/geom_bottleneck/tests/data/test_189_A b/geom_bottleneck/tests/data/test_189_A new file mode 100644 index 0000000..468967c --- /dev/null +++ b/geom_bottleneck/tests/data/test_189_A @@ -0,0 +1,6 @@ +8 11 +4 8 +6 7 +9 15 +10 11 +2 3 diff --git a/geom_bottleneck/tests/data/test_189_B b/geom_bottleneck/tests/data/test_189_B new file mode 100644 index 0000000..299edf6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_189_B @@ -0,0 +1,6 @@ +6 10 +2 6 +2 9 +1 3 +7 10 +8 15 diff --git a/geom_bottleneck/tests/data/test_190_A b/geom_bottleneck/tests/data/test_190_A new file mode 100644 index 0000000..01b3e3c --- /dev/null +++ b/geom_bottleneck/tests/data/test_190_A @@ -0,0 +1,6 @@ +8 17 +9 10 +1 3 +9 16 +7 10 +8 14 diff --git a/geom_bottleneck/tests/data/test_190_B b/geom_bottleneck/tests/data/test_190_B new file mode 100644 index 0000000..26d2d2a --- /dev/null +++ b/geom_bottleneck/tests/data/test_190_B @@ -0,0 +1,6 @@ +8 9 +10 15 +10 12 +8 14 +4 5 +4 10 diff --git a/geom_bottleneck/tests/data/test_191_A b/geom_bottleneck/tests/data/test_191_A new file mode 100644 index 0000000..e89e4b8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_191_A @@ -0,0 +1,6 @@ +10 15 +2 7 +9 16 +6 14 +6 12 +4 13 diff --git a/geom_bottleneck/tests/data/test_191_B b/geom_bottleneck/tests/data/test_191_B new file mode 100644 index 0000000..80022bc --- /dev/null +++ b/geom_bottleneck/tests/data/test_191_B @@ -0,0 +1,6 @@ +8 18 +5 11 +2 7 +7 16 +6 9 +7 17 diff --git a/geom_bottleneck/tests/data/test_192_A b/geom_bottleneck/tests/data/test_192_A new file mode 100644 index 0000000..8e0e64f --- /dev/null +++ b/geom_bottleneck/tests/data/test_192_A @@ -0,0 +1,6 @@ +9 15 +1 9 +2 11 +1 8 +9 11 +7 8 diff --git a/geom_bottleneck/tests/data/test_192_B b/geom_bottleneck/tests/data/test_192_B new file mode 100644 index 0000000..dcfe162 --- /dev/null +++ b/geom_bottleneck/tests/data/test_192_B @@ -0,0 +1,6 @@ +8 16 +10 17 +8 9 +2 9 +2 12 +7 11 diff --git a/geom_bottleneck/tests/data/test_193_A b/geom_bottleneck/tests/data/test_193_A new file mode 100644 index 0000000..6c2bcc8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_193_A @@ -0,0 +1,6 @@ +5 10 +4 13 +6 7 +7 8 +7 8 +6 12 diff --git a/geom_bottleneck/tests/data/test_193_B b/geom_bottleneck/tests/data/test_193_B new file mode 100644 index 0000000..fb271c9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_193_B @@ -0,0 +1,6 @@ +7 12 +2 5 +9 18 +1 6 +7 16 +1 5 diff --git a/geom_bottleneck/tests/data/test_194_A b/geom_bottleneck/tests/data/test_194_A new file mode 100644 index 0000000..2de1094 --- /dev/null +++ b/geom_bottleneck/tests/data/test_194_A @@ -0,0 +1,6 @@ +9 14 +7 12 +3 10 +1 9 +3 10 +0 1 diff --git a/geom_bottleneck/tests/data/test_194_B b/geom_bottleneck/tests/data/test_194_B new file mode 100644 index 0000000..5879993 --- /dev/null +++ b/geom_bottleneck/tests/data/test_194_B @@ -0,0 +1,6 @@ +6 15 +4 9 +3 7 +2 3 +0 2 +2 12 diff --git a/geom_bottleneck/tests/data/test_195_A b/geom_bottleneck/tests/data/test_195_A new file mode 100644 index 0000000..d109838 --- /dev/null +++ b/geom_bottleneck/tests/data/test_195_A @@ -0,0 +1,6 @@ +0 9 +7 8 +9 15 +2 6 +3 8 +9 15 diff --git a/geom_bottleneck/tests/data/test_195_B b/geom_bottleneck/tests/data/test_195_B new file mode 100644 index 0000000..6c66513 --- /dev/null +++ b/geom_bottleneck/tests/data/test_195_B @@ -0,0 +1,6 @@ +3 9 +2 3 +3 10 +7 16 +4 7 +1 6 diff --git a/geom_bottleneck/tests/data/test_196_A b/geom_bottleneck/tests/data/test_196_A new file mode 100644 index 0000000..4094acd --- /dev/null +++ b/geom_bottleneck/tests/data/test_196_A @@ -0,0 +1,6 @@ +6 8 +8 12 +0 4 +3 11 +4 14 +9 14 diff --git a/geom_bottleneck/tests/data/test_196_B b/geom_bottleneck/tests/data/test_196_B new file mode 100644 index 0000000..e5ed3ad --- /dev/null +++ b/geom_bottleneck/tests/data/test_196_B @@ -0,0 +1,6 @@ +4 10 +2 3 +7 8 +2 8 +5 12 +9 10 diff --git a/geom_bottleneck/tests/data/test_197_A b/geom_bottleneck/tests/data/test_197_A new file mode 100644 index 0000000..771897b --- /dev/null +++ b/geom_bottleneck/tests/data/test_197_A @@ -0,0 +1,6 @@ +4 10 +9 11 +0 6 +4 8 +9 14 +9 14 diff --git a/geom_bottleneck/tests/data/test_197_B b/geom_bottleneck/tests/data/test_197_B new file mode 100644 index 0000000..1cfe6aa --- /dev/null +++ b/geom_bottleneck/tests/data/test_197_B @@ -0,0 +1,6 @@ +7 13 +6 7 +5 11 +3 13 +6 14 +10 15 diff --git a/geom_bottleneck/tests/data/test_198_A b/geom_bottleneck/tests/data/test_198_A new file mode 100644 index 0000000..6966ac4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_198_A @@ -0,0 +1,6 @@ +10 17 +3 7 +7 8 +9 15 +0 3 +10 20 diff --git a/geom_bottleneck/tests/data/test_198_B b/geom_bottleneck/tests/data/test_198_B new file mode 100644 index 0000000..6e9d9d4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_198_B @@ -0,0 +1,6 @@ +3 11 +4 7 +6 15 +8 15 +7 10 +2 10 diff --git a/geom_bottleneck/tests/data/test_199_A b/geom_bottleneck/tests/data/test_199_A new file mode 100644 index 0000000..8556563 --- /dev/null +++ b/geom_bottleneck/tests/data/test_199_A @@ -0,0 +1,6 @@ +7 17 +3 13 +10 15 +9 17 +7 8 +5 14 diff --git a/geom_bottleneck/tests/data/test_199_B b/geom_bottleneck/tests/data/test_199_B new file mode 100644 index 0000000..a43e0df --- /dev/null +++ b/geom_bottleneck/tests/data/test_199_B @@ -0,0 +1,6 @@ +7 17 +7 17 +9 14 +4 13 +1 8 +1 10 diff --git a/geom_bottleneck/tests/data/test_200_A b/geom_bottleneck/tests/data/test_200_A new file mode 100644 index 0000000..b0a7fbd --- /dev/null +++ b/geom_bottleneck/tests/data/test_200_A @@ -0,0 +1,7 @@ +9 10 +0 10 +7 8 +1 6 +8 14 +0 3 +6 9 diff --git a/geom_bottleneck/tests/data/test_200_B b/geom_bottleneck/tests/data/test_200_B new file mode 100644 index 0000000..fcbab9a --- /dev/null +++ b/geom_bottleneck/tests/data/test_200_B @@ -0,0 +1,7 @@ +2 7 +0 7 +2 4 +8 12 +7 12 +10 16 +5 6 diff --git a/geom_bottleneck/tests/data/test_201_A b/geom_bottleneck/tests/data/test_201_A new file mode 100644 index 0000000..07d880d --- /dev/null +++ b/geom_bottleneck/tests/data/test_201_A @@ -0,0 +1,7 @@ +4 5 +1 7 +0 8 +4 5 +9 14 +8 9 +2 10 diff --git a/geom_bottleneck/tests/data/test_201_B b/geom_bottleneck/tests/data/test_201_B new file mode 100644 index 0000000..70b22f4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_201_B @@ -0,0 +1,7 @@ +5 6 +6 16 +1 2 +2 3 +4 12 +6 15 +8 18 diff --git a/geom_bottleneck/tests/data/test_202_A b/geom_bottleneck/tests/data/test_202_A new file mode 100644 index 0000000..b8fe1b9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_202_A @@ -0,0 +1,7 @@ +0 6 +4 14 +9 10 +9 18 +5 12 +5 12 +1 7 diff --git a/geom_bottleneck/tests/data/test_202_B b/geom_bottleneck/tests/data/test_202_B new file mode 100644 index 0000000..ee6e2e0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_202_B @@ -0,0 +1,7 @@ +5 6 +7 17 +1 6 +3 11 +7 15 +10 20 +3 4 diff --git a/geom_bottleneck/tests/data/test_203_A b/geom_bottleneck/tests/data/test_203_A new file mode 100644 index 0000000..71a1737 --- /dev/null +++ b/geom_bottleneck/tests/data/test_203_A @@ -0,0 +1,7 @@ +4 9 +10 20 +5 9 +0 9 +0 8 +5 9 +0 10 diff --git a/geom_bottleneck/tests/data/test_203_B b/geom_bottleneck/tests/data/test_203_B new file mode 100644 index 0000000..d217cda --- /dev/null +++ b/geom_bottleneck/tests/data/test_203_B @@ -0,0 +1,7 @@ +3 12 +1 9 +9 17 +7 14 +6 10 +10 20 +7 12 diff --git a/geom_bottleneck/tests/data/test_204_A b/geom_bottleneck/tests/data/test_204_A new file mode 100644 index 0000000..011da68 --- /dev/null +++ b/geom_bottleneck/tests/data/test_204_A @@ -0,0 +1,7 @@ +9 14 +2 3 +9 14 +6 7 +2 3 +6 13 +10 11 diff --git a/geom_bottleneck/tests/data/test_204_B b/geom_bottleneck/tests/data/test_204_B new file mode 100644 index 0000000..c5d6236 --- /dev/null +++ b/geom_bottleneck/tests/data/test_204_B @@ -0,0 +1,7 @@ +9 10 +0 4 +4 7 +8 15 +8 9 +7 10 +10 11 diff --git a/geom_bottleneck/tests/data/test_205_A b/geom_bottleneck/tests/data/test_205_A new file mode 100644 index 0000000..d082be1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_205_A @@ -0,0 +1,7 @@ +8 17 +9 12 +2 11 +0 8 +10 11 +0 7 +8 18 diff --git a/geom_bottleneck/tests/data/test_205_B b/geom_bottleneck/tests/data/test_205_B new file mode 100644 index 0000000..30a242c --- /dev/null +++ b/geom_bottleneck/tests/data/test_205_B @@ -0,0 +1,7 @@ +10 17 +9 18 +6 11 +6 7 +10 17 +3 13 +8 17 diff --git a/geom_bottleneck/tests/data/test_206_A b/geom_bottleneck/tests/data/test_206_A new file mode 100644 index 0000000..15ee45b --- /dev/null +++ b/geom_bottleneck/tests/data/test_206_A @@ -0,0 +1,7 @@ +5 7 +8 17 +4 7 +7 17 +9 11 +0 8 +9 10 diff --git a/geom_bottleneck/tests/data/test_206_B b/geom_bottleneck/tests/data/test_206_B new file mode 100644 index 0000000..f8c89ef --- /dev/null +++ b/geom_bottleneck/tests/data/test_206_B @@ -0,0 +1,7 @@ +5 15 +9 17 +10 13 +6 13 +0 6 +10 16 +8 15 diff --git a/geom_bottleneck/tests/data/test_207_A b/geom_bottleneck/tests/data/test_207_A new file mode 100644 index 0000000..2015b9e --- /dev/null +++ b/geom_bottleneck/tests/data/test_207_A @@ -0,0 +1,7 @@ +4 9 +9 17 +9 10 +9 15 +2 3 +8 13 +9 13 diff --git a/geom_bottleneck/tests/data/test_207_B b/geom_bottleneck/tests/data/test_207_B new file mode 100644 index 0000000..036a8ca --- /dev/null +++ b/geom_bottleneck/tests/data/test_207_B @@ -0,0 +1,7 @@ +10 18 +1 3 +10 15 +5 14 +7 15 +0 1 +10 13 diff --git a/geom_bottleneck/tests/data/test_208_A b/geom_bottleneck/tests/data/test_208_A new file mode 100644 index 0000000..a1e6af4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_208_A @@ -0,0 +1,7 @@ +6 14 +2 7 +6 16 +7 14 +8 13 +2 5 +5 9 diff --git a/geom_bottleneck/tests/data/test_208_B b/geom_bottleneck/tests/data/test_208_B new file mode 100644 index 0000000..f21e91b --- /dev/null +++ b/geom_bottleneck/tests/data/test_208_B @@ -0,0 +1,7 @@ +3 10 +8 16 +2 11 +10 18 +2 6 +3 7 +3 8 diff --git a/geom_bottleneck/tests/data/test_209_A b/geom_bottleneck/tests/data/test_209_A new file mode 100644 index 0000000..545aae9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_209_A @@ -0,0 +1,7 @@ +10 18 +5 8 +4 7 +10 16 +4 10 +2 9 +1 6 diff --git a/geom_bottleneck/tests/data/test_209_B b/geom_bottleneck/tests/data/test_209_B new file mode 100644 index 0000000..2cf3171 --- /dev/null +++ b/geom_bottleneck/tests/data/test_209_B @@ -0,0 +1,7 @@ +10 11 +1 2 +0 6 +10 11 +9 11 +10 17 +1 2 diff --git a/geom_bottleneck/tests/data/test_210_A b/geom_bottleneck/tests/data/test_210_A new file mode 100644 index 0000000..799debc --- /dev/null +++ b/geom_bottleneck/tests/data/test_210_A @@ -0,0 +1,7 @@ +1 3 +6 7 +10 11 +7 16 +4 5 +2 5 +10 18 diff --git a/geom_bottleneck/tests/data/test_210_B b/geom_bottleneck/tests/data/test_210_B new file mode 100644 index 0000000..7cb0519 --- /dev/null +++ b/geom_bottleneck/tests/data/test_210_B @@ -0,0 +1,7 @@ +3 7 +5 13 +6 11 +0 10 +10 18 +8 9 +1 4 diff --git a/geom_bottleneck/tests/data/test_211_A b/geom_bottleneck/tests/data/test_211_A new file mode 100644 index 0000000..6715acb --- /dev/null +++ b/geom_bottleneck/tests/data/test_211_A @@ -0,0 +1,7 @@ +9 15 +1 5 +10 11 +2 6 +6 8 +2 9 +8 11 diff --git a/geom_bottleneck/tests/data/test_211_B b/geom_bottleneck/tests/data/test_211_B new file mode 100644 index 0000000..9c7890f --- /dev/null +++ b/geom_bottleneck/tests/data/test_211_B @@ -0,0 +1,7 @@ +5 7 +3 9 +1 3 +1 2 +4 5 +4 7 +3 7 diff --git a/geom_bottleneck/tests/data/test_212_A b/geom_bottleneck/tests/data/test_212_A new file mode 100644 index 0000000..e3d327a --- /dev/null +++ b/geom_bottleneck/tests/data/test_212_A @@ -0,0 +1,7 @@ +3 6 +8 12 +7 15 +6 11 +9 16 +4 8 +7 12 diff --git a/geom_bottleneck/tests/data/test_212_B b/geom_bottleneck/tests/data/test_212_B new file mode 100644 index 0000000..ee57410 --- /dev/null +++ b/geom_bottleneck/tests/data/test_212_B @@ -0,0 +1,7 @@ +9 17 +1 2 +10 17 +1 10 +5 8 +5 7 +7 10 diff --git a/geom_bottleneck/tests/data/test_213_A b/geom_bottleneck/tests/data/test_213_A new file mode 100644 index 0000000..4b904df --- /dev/null +++ b/geom_bottleneck/tests/data/test_213_A @@ -0,0 +1,7 @@ +4 8 +0 2 +0 7 +0 4 +6 15 +8 14 +3 10 diff --git a/geom_bottleneck/tests/data/test_213_B b/geom_bottleneck/tests/data/test_213_B new file mode 100644 index 0000000..f5188b4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_213_B @@ -0,0 +1,7 @@ +8 9 +8 13 +9 10 +2 12 +4 7 +7 8 +3 12 diff --git a/geom_bottleneck/tests/data/test_214_A b/geom_bottleneck/tests/data/test_214_A new file mode 100644 index 0000000..3914579 --- /dev/null +++ b/geom_bottleneck/tests/data/test_214_A @@ -0,0 +1,7 @@ +4 10 +7 8 +8 15 +1 4 +6 13 +8 15 +8 9 diff --git a/geom_bottleneck/tests/data/test_214_B b/geom_bottleneck/tests/data/test_214_B new file mode 100644 index 0000000..f75c54f --- /dev/null +++ b/geom_bottleneck/tests/data/test_214_B @@ -0,0 +1,7 @@ +5 12 +2 12 +5 10 +1 8 +10 19 +0 6 +3 9 diff --git a/geom_bottleneck/tests/data/test_215_A b/geom_bottleneck/tests/data/test_215_A new file mode 100644 index 0000000..a8d6070 --- /dev/null +++ b/geom_bottleneck/tests/data/test_215_A @@ -0,0 +1,7 @@ +3 4 +4 5 +3 9 +7 15 +9 12 +1 2 +4 12 diff --git a/geom_bottleneck/tests/data/test_215_B b/geom_bottleneck/tests/data/test_215_B new file mode 100644 index 0000000..d956b59 --- /dev/null +++ b/geom_bottleneck/tests/data/test_215_B @@ -0,0 +1,7 @@ +4 13 +5 7 +2 6 +9 12 +0 6 +0 1 +6 12 diff --git a/geom_bottleneck/tests/data/test_216_A b/geom_bottleneck/tests/data/test_216_A new file mode 100644 index 0000000..67c5e86 --- /dev/null +++ b/geom_bottleneck/tests/data/test_216_A @@ -0,0 +1,7 @@ +10 13 +10 17 +5 10 +4 6 +9 12 +6 9 +2 6 diff --git a/geom_bottleneck/tests/data/test_216_B b/geom_bottleneck/tests/data/test_216_B new file mode 100644 index 0000000..802850d --- /dev/null +++ b/geom_bottleneck/tests/data/test_216_B @@ -0,0 +1,7 @@ +3 9 +9 13 +1 2 +4 13 +1 8 +0 2 +1 2 diff --git a/geom_bottleneck/tests/data/test_217_A b/geom_bottleneck/tests/data/test_217_A new file mode 100644 index 0000000..a37f46d --- /dev/null +++ b/geom_bottleneck/tests/data/test_217_A @@ -0,0 +1,7 @@ +3 7 +1 4 +3 8 +1 2 +1 3 +8 9 +5 14 diff --git a/geom_bottleneck/tests/data/test_217_B b/geom_bottleneck/tests/data/test_217_B new file mode 100644 index 0000000..4cac64e --- /dev/null +++ b/geom_bottleneck/tests/data/test_217_B @@ -0,0 +1,7 @@ +3 12 +9 10 +9 10 +5 14 +0 8 +5 8 +2 5 diff --git a/geom_bottleneck/tests/data/test_218_A b/geom_bottleneck/tests/data/test_218_A new file mode 100644 index 0000000..7ca83bc --- /dev/null +++ b/geom_bottleneck/tests/data/test_218_A @@ -0,0 +1,7 @@ +7 11 +6 14 +9 19 +6 8 +2 7 +4 8 +2 8 diff --git a/geom_bottleneck/tests/data/test_218_B b/geom_bottleneck/tests/data/test_218_B new file mode 100644 index 0000000..7c188f2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_218_B @@ -0,0 +1,7 @@ +2 4 +8 16 +3 13 +3 12 +1 11 +0 1 +5 7 diff --git a/geom_bottleneck/tests/data/test_219_A b/geom_bottleneck/tests/data/test_219_A new file mode 100644 index 0000000..275bc18 --- /dev/null +++ b/geom_bottleneck/tests/data/test_219_A @@ -0,0 +1,7 @@ +3 4 +8 10 +5 6 +3 7 +9 12 +5 6 +0 1 diff --git a/geom_bottleneck/tests/data/test_219_B b/geom_bottleneck/tests/data/test_219_B new file mode 100644 index 0000000..be6ab2a --- /dev/null +++ b/geom_bottleneck/tests/data/test_219_B @@ -0,0 +1,7 @@ +7 16 +1 2 +4 12 +9 17 +10 11 +9 14 +10 16 diff --git a/geom_bottleneck/tests/data/test_220_A b/geom_bottleneck/tests/data/test_220_A new file mode 100644 index 0000000..3b9ea09 --- /dev/null +++ b/geom_bottleneck/tests/data/test_220_A @@ -0,0 +1,8 @@ +8 18 +6 9 +7 12 +8 14 +7 8 +4 11 +9 18 +4 8 diff --git a/geom_bottleneck/tests/data/test_220_B b/geom_bottleneck/tests/data/test_220_B new file mode 100644 index 0000000..8e97d15 --- /dev/null +++ b/geom_bottleneck/tests/data/test_220_B @@ -0,0 +1,8 @@ +9 19 +5 9 +8 9 +2 10 +3 9 +2 5 +6 15 +9 14 diff --git a/geom_bottleneck/tests/data/test_221_A b/geom_bottleneck/tests/data/test_221_A new file mode 100644 index 0000000..2e229a8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_221_A @@ -0,0 +1,8 @@ +9 17 +4 10 +3 5 +9 18 +3 10 +9 18 +5 12 +0 10 diff --git a/geom_bottleneck/tests/data/test_221_B b/geom_bottleneck/tests/data/test_221_B new file mode 100644 index 0000000..e3c3c1b --- /dev/null +++ b/geom_bottleneck/tests/data/test_221_B @@ -0,0 +1,8 @@ +1 3 +1 2 +2 6 +10 19 +4 14 +10 18 +4 9 +9 19 diff --git a/geom_bottleneck/tests/data/test_222_A b/geom_bottleneck/tests/data/test_222_A new file mode 100644 index 0000000..fcb6c7f --- /dev/null +++ b/geom_bottleneck/tests/data/test_222_A @@ -0,0 +1,8 @@ +9 13 +6 10 +10 17 +9 14 +7 16 +2 4 +5 11 +10 13 diff --git a/geom_bottleneck/tests/data/test_222_B b/geom_bottleneck/tests/data/test_222_B new file mode 100644 index 0000000..512f188 --- /dev/null +++ b/geom_bottleneck/tests/data/test_222_B @@ -0,0 +1,8 @@ +1 11 +0 1 +8 10 +0 6 +9 19 +3 4 +2 6 +9 10 diff --git a/geom_bottleneck/tests/data/test_223_A b/geom_bottleneck/tests/data/test_223_A new file mode 100644 index 0000000..6f6cef5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_223_A @@ -0,0 +1,8 @@ +0 8 +2 6 +3 13 +9 16 +4 7 +4 14 +7 17 +6 7 diff --git a/geom_bottleneck/tests/data/test_223_B b/geom_bottleneck/tests/data/test_223_B new file mode 100644 index 0000000..07803f6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_223_B @@ -0,0 +1,8 @@ +7 9 +3 10 +0 9 +0 1 +1 5 +2 8 +0 1 +10 18 diff --git a/geom_bottleneck/tests/data/test_224_A b/geom_bottleneck/tests/data/test_224_A new file mode 100644 index 0000000..f33d061 --- /dev/null +++ b/geom_bottleneck/tests/data/test_224_A @@ -0,0 +1,8 @@ +5 12 +0 6 +5 11 +9 17 +9 10 +0 10 +0 4 +8 13 diff --git a/geom_bottleneck/tests/data/test_224_B b/geom_bottleneck/tests/data/test_224_B new file mode 100644 index 0000000..1b9ef36 --- /dev/null +++ b/geom_bottleneck/tests/data/test_224_B @@ -0,0 +1,8 @@ +8 14 +3 13 +3 4 +9 19 +8 16 +5 9 +4 14 +2 4 diff --git a/geom_bottleneck/tests/data/test_225_A b/geom_bottleneck/tests/data/test_225_A new file mode 100644 index 0000000..cc0d576 --- /dev/null +++ b/geom_bottleneck/tests/data/test_225_A @@ -0,0 +1,8 @@ +0 1 +9 17 +3 12 +9 19 +8 15 +7 15 +6 10 +1 10 diff --git a/geom_bottleneck/tests/data/test_225_B b/geom_bottleneck/tests/data/test_225_B new file mode 100644 index 0000000..b810b48 --- /dev/null +++ b/geom_bottleneck/tests/data/test_225_B @@ -0,0 +1,8 @@ +8 11 +4 8 +8 14 +3 8 +2 10 +8 15 +5 14 +6 16 diff --git a/geom_bottleneck/tests/data/test_226_A b/geom_bottleneck/tests/data/test_226_A new file mode 100644 index 0000000..e39728a --- /dev/null +++ b/geom_bottleneck/tests/data/test_226_A @@ -0,0 +1,8 @@ +10 12 +3 5 +10 13 +6 8 +8 14 +8 15 +8 17 +3 8 diff --git a/geom_bottleneck/tests/data/test_226_B b/geom_bottleneck/tests/data/test_226_B new file mode 100644 index 0000000..601abce --- /dev/null +++ b/geom_bottleneck/tests/data/test_226_B @@ -0,0 +1,8 @@ +3 4 +9 19 +3 7 +9 10 +1 4 +7 12 +0 1 +4 13 diff --git a/geom_bottleneck/tests/data/test_227_A b/geom_bottleneck/tests/data/test_227_A new file mode 100644 index 0000000..e98b204 --- /dev/null +++ b/geom_bottleneck/tests/data/test_227_A @@ -0,0 +1,8 @@ +10 11 +8 9 +2 8 +5 14 +6 16 +3 9 +7 8 +0 7 diff --git a/geom_bottleneck/tests/data/test_227_B b/geom_bottleneck/tests/data/test_227_B new file mode 100644 index 0000000..3d5a25e --- /dev/null +++ b/geom_bottleneck/tests/data/test_227_B @@ -0,0 +1,8 @@ +7 8 +9 14 +2 7 +7 17 +5 13 +4 6 +3 4 +6 16 diff --git a/geom_bottleneck/tests/data/test_228_A b/geom_bottleneck/tests/data/test_228_A new file mode 100644 index 0000000..a3edeae --- /dev/null +++ b/geom_bottleneck/tests/data/test_228_A @@ -0,0 +1,8 @@ +9 10 +1 6 +8 10 +0 9 +0 2 +7 13 +10 20 +1 10 diff --git a/geom_bottleneck/tests/data/test_228_B b/geom_bottleneck/tests/data/test_228_B new file mode 100644 index 0000000..64f78ac --- /dev/null +++ b/geom_bottleneck/tests/data/test_228_B @@ -0,0 +1,8 @@ +4 6 +9 12 +5 11 +9 16 +8 9 +7 16 +4 10 +3 4 diff --git a/geom_bottleneck/tests/data/test_229_A b/geom_bottleneck/tests/data/test_229_A new file mode 100644 index 0000000..c832a04 --- /dev/null +++ b/geom_bottleneck/tests/data/test_229_A @@ -0,0 +1,8 @@ +9 12 +1 10 +6 14 +4 9 +7 11 +3 12 +6 8 +4 12 diff --git a/geom_bottleneck/tests/data/test_229_B b/geom_bottleneck/tests/data/test_229_B new file mode 100644 index 0000000..0f232d0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_229_B @@ -0,0 +1,8 @@ +7 13 +2 11 +6 10 +6 10 +7 15 +10 14 +10 13 +10 14 diff --git a/geom_bottleneck/tests/data/test_230_A b/geom_bottleneck/tests/data/test_230_A new file mode 100644 index 0000000..11d75a8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_230_A @@ -0,0 +1,8 @@ +9 16 +3 5 +3 11 +0 7 +0 2 +10 16 +4 6 +8 16 diff --git a/geom_bottleneck/tests/data/test_230_B b/geom_bottleneck/tests/data/test_230_B new file mode 100644 index 0000000..f30b9d0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_230_B @@ -0,0 +1,8 @@ +4 11 +7 14 +8 17 +6 13 +0 1 +6 10 +8 10 +1 6 diff --git a/geom_bottleneck/tests/data/test_231_A b/geom_bottleneck/tests/data/test_231_A new file mode 100644 index 0000000..8d21ce3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_231_A @@ -0,0 +1,8 @@ +2 9 +1 11 +10 20 +7 16 +7 9 +0 7 +6 7 +6 7 diff --git a/geom_bottleneck/tests/data/test_231_B b/geom_bottleneck/tests/data/test_231_B new file mode 100644 index 0000000..f5d94fe --- /dev/null +++ b/geom_bottleneck/tests/data/test_231_B @@ -0,0 +1,8 @@ +7 10 +10 19 +8 9 +5 12 +7 17 +3 5 +10 11 +0 1 diff --git a/geom_bottleneck/tests/data/test_232_A b/geom_bottleneck/tests/data/test_232_A new file mode 100644 index 0000000..ccad736 --- /dev/null +++ b/geom_bottleneck/tests/data/test_232_A @@ -0,0 +1,8 @@ +1 6 +5 9 +9 10 +0 9 +0 8 +10 11 +2 7 +6 7 diff --git a/geom_bottleneck/tests/data/test_232_B b/geom_bottleneck/tests/data/test_232_B new file mode 100644 index 0000000..f132580 --- /dev/null +++ b/geom_bottleneck/tests/data/test_232_B @@ -0,0 +1,8 @@ +5 8 +4 5 +10 17 +10 16 +4 10 +5 14 +5 6 +0 7 diff --git a/geom_bottleneck/tests/data/test_233_A b/geom_bottleneck/tests/data/test_233_A new file mode 100644 index 0000000..fd2fa4e --- /dev/null +++ b/geom_bottleneck/tests/data/test_233_A @@ -0,0 +1,8 @@ +9 13 +2 6 +0 1 +6 14 +9 13 +0 1 +6 9 +2 9 diff --git a/geom_bottleneck/tests/data/test_233_B b/geom_bottleneck/tests/data/test_233_B new file mode 100644 index 0000000..3dc34c6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_233_B @@ -0,0 +1,8 @@ +8 12 +5 12 +1 5 +10 13 +1 7 +8 14 +7 15 +1 8 diff --git a/geom_bottleneck/tests/data/test_234_A b/geom_bottleneck/tests/data/test_234_A new file mode 100644 index 0000000..6ff3442 --- /dev/null +++ b/geom_bottleneck/tests/data/test_234_A @@ -0,0 +1,8 @@ +0 7 +5 13 +10 20 +1 2 +9 10 +10 17 +1 2 +0 7 diff --git a/geom_bottleneck/tests/data/test_234_B b/geom_bottleneck/tests/data/test_234_B new file mode 100644 index 0000000..36a2966 --- /dev/null +++ b/geom_bottleneck/tests/data/test_234_B @@ -0,0 +1,8 @@ +2 12 +1 2 +3 4 +1 4 +0 7 +7 8 +8 13 +9 18 diff --git a/geom_bottleneck/tests/data/test_235_A b/geom_bottleneck/tests/data/test_235_A new file mode 100644 index 0000000..40aec79 --- /dev/null +++ b/geom_bottleneck/tests/data/test_235_A @@ -0,0 +1,8 @@ +4 7 +10 11 +7 12 +2 7 +8 11 +9 11 +8 12 +7 16 diff --git a/geom_bottleneck/tests/data/test_235_B b/geom_bottleneck/tests/data/test_235_B new file mode 100644 index 0000000..910422b --- /dev/null +++ b/geom_bottleneck/tests/data/test_235_B @@ -0,0 +1,8 @@ +1 3 +9 15 +10 20 +6 16 +2 8 +3 9 +8 10 +9 14 diff --git a/geom_bottleneck/tests/data/test_236_A b/geom_bottleneck/tests/data/test_236_A new file mode 100644 index 0000000..8ca54db --- /dev/null +++ b/geom_bottleneck/tests/data/test_236_A @@ -0,0 +1,8 @@ +5 11 +10 15 +7 9 +8 14 +0 5 +1 7 +2 3 +6 11 diff --git a/geom_bottleneck/tests/data/test_236_B b/geom_bottleneck/tests/data/test_236_B new file mode 100644 index 0000000..0855757 --- /dev/null +++ b/geom_bottleneck/tests/data/test_236_B @@ -0,0 +1,8 @@ +4 5 +1 8 +1 2 +1 4 +8 17 +2 5 +3 10 +1 2 diff --git a/geom_bottleneck/tests/data/test_237_A b/geom_bottleneck/tests/data/test_237_A new file mode 100644 index 0000000..18a69fa --- /dev/null +++ b/geom_bottleneck/tests/data/test_237_A @@ -0,0 +1,8 @@ +1 6 +3 6 +4 8 +0 3 +7 14 +6 7 +2 5 +6 13 diff --git a/geom_bottleneck/tests/data/test_237_B b/geom_bottleneck/tests/data/test_237_B new file mode 100644 index 0000000..b2ad13f --- /dev/null +++ b/geom_bottleneck/tests/data/test_237_B @@ -0,0 +1,8 @@ +3 8 +6 16 +3 11 +6 15 +7 14 +6 11 +3 5 +8 14 diff --git a/geom_bottleneck/tests/data/test_238_A b/geom_bottleneck/tests/data/test_238_A new file mode 100644 index 0000000..d9011b0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_238_A @@ -0,0 +1,8 @@ +7 16 +3 12 +4 7 +7 13 +6 9 +5 8 +5 9 +3 4 diff --git a/geom_bottleneck/tests/data/test_238_B b/geom_bottleneck/tests/data/test_238_B new file mode 100644 index 0000000..788cf40 --- /dev/null +++ b/geom_bottleneck/tests/data/test_238_B @@ -0,0 +1,8 @@ +5 6 +0 10 +2 5 +1 2 +9 16 +0 8 +0 3 +5 12 diff --git a/geom_bottleneck/tests/data/test_239_A b/geom_bottleneck/tests/data/test_239_A new file mode 100644 index 0000000..dbb3bec --- /dev/null +++ b/geom_bottleneck/tests/data/test_239_A @@ -0,0 +1,8 @@ +2 10 +1 6 +10 20 +7 10 +2 7 +4 11 +0 5 +6 13 diff --git a/geom_bottleneck/tests/data/test_239_B b/geom_bottleneck/tests/data/test_239_B new file mode 100644 index 0000000..a0c12ac --- /dev/null +++ b/geom_bottleneck/tests/data/test_239_B @@ -0,0 +1,8 @@ +1 5 +1 3 +5 8 +9 16 +8 17 +9 13 +3 4 +4 7 diff --git a/geom_bottleneck/tests/data/test_240_A b/geom_bottleneck/tests/data/test_240_A new file mode 100644 index 0000000..2386a27 --- /dev/null +++ b/geom_bottleneck/tests/data/test_240_A @@ -0,0 +1,9 @@ +0 1 +10 15 +6 7 +5 14 +10 15 +9 12 +0 4 +10 11 +3 10 diff --git a/geom_bottleneck/tests/data/test_240_B b/geom_bottleneck/tests/data/test_240_B new file mode 100644 index 0000000..15439fb --- /dev/null +++ b/geom_bottleneck/tests/data/test_240_B @@ -0,0 +1,9 @@ +0 3 +3 6 +2 12 +3 4 +9 13 +0 3 +0 7 +10 17 +6 15 diff --git a/geom_bottleneck/tests/data/test_241_A b/geom_bottleneck/tests/data/test_241_A new file mode 100644 index 0000000..8ed0c54 --- /dev/null +++ b/geom_bottleneck/tests/data/test_241_A @@ -0,0 +1,9 @@ +1 10 +10 14 +3 4 +3 6 +7 12 +1 3 +9 14 +0 2 +1 11 diff --git a/geom_bottleneck/tests/data/test_241_B b/geom_bottleneck/tests/data/test_241_B new file mode 100644 index 0000000..fdac53a --- /dev/null +++ b/geom_bottleneck/tests/data/test_241_B @@ -0,0 +1,9 @@ +7 8 +8 14 +10 20 +10 16 +2 7 +0 8 +7 17 +1 2 +5 6 diff --git a/geom_bottleneck/tests/data/test_242_A b/geom_bottleneck/tests/data/test_242_A new file mode 100644 index 0000000..e1af329 --- /dev/null +++ b/geom_bottleneck/tests/data/test_242_A @@ -0,0 +1,9 @@ +0 3 +2 4 +5 14 +4 8 +0 7 +3 13 +5 11 +5 7 +10 19 diff --git a/geom_bottleneck/tests/data/test_242_B b/geom_bottleneck/tests/data/test_242_B new file mode 100644 index 0000000..b45d054 --- /dev/null +++ b/geom_bottleneck/tests/data/test_242_B @@ -0,0 +1,9 @@ +5 6 +6 13 +7 12 +2 10 +0 9 +2 11 +2 9 +8 10 +10 13 diff --git a/geom_bottleneck/tests/data/test_243_A b/geom_bottleneck/tests/data/test_243_A new file mode 100644 index 0000000..ed2d61b --- /dev/null +++ b/geom_bottleneck/tests/data/test_243_A @@ -0,0 +1,9 @@ +4 6 +10 11 +4 7 +8 14 +1 4 +9 15 +8 10 +4 11 +7 10 diff --git a/geom_bottleneck/tests/data/test_243_B b/geom_bottleneck/tests/data/test_243_B new file mode 100644 index 0000000..f0b5359 --- /dev/null +++ b/geom_bottleneck/tests/data/test_243_B @@ -0,0 +1,9 @@ +7 8 +1 9 +7 10 +5 6 +3 11 +10 12 +1 8 +3 13 +0 9 diff --git a/geom_bottleneck/tests/data/test_244_A b/geom_bottleneck/tests/data/test_244_A new file mode 100644 index 0000000..1d1e4a7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_244_A @@ -0,0 +1,9 @@ +4 14 +3 8 +0 3 +3 12 +9 16 +4 7 +6 12 +7 8 +5 13 diff --git a/geom_bottleneck/tests/data/test_244_B b/geom_bottleneck/tests/data/test_244_B new file mode 100644 index 0000000..5d9748f --- /dev/null +++ b/geom_bottleneck/tests/data/test_244_B @@ -0,0 +1,9 @@ +3 7 +3 8 +5 15 +4 7 +1 2 +0 10 +6 15 +8 9 +4 5 diff --git a/geom_bottleneck/tests/data/test_245_A b/geom_bottleneck/tests/data/test_245_A new file mode 100644 index 0000000..f17d580 --- /dev/null +++ b/geom_bottleneck/tests/data/test_245_A @@ -0,0 +1,9 @@ +5 6 +3 11 +7 9 +1 7 +5 14 +4 7 +9 19 +1 7 +4 6 diff --git a/geom_bottleneck/tests/data/test_245_B b/geom_bottleneck/tests/data/test_245_B new file mode 100644 index 0000000..4b67caa --- /dev/null +++ b/geom_bottleneck/tests/data/test_245_B @@ -0,0 +1,9 @@ +1 2 +6 7 +7 13 +1 9 +9 13 +2 8 +2 4 +4 5 +4 7 diff --git a/geom_bottleneck/tests/data/test_246_A b/geom_bottleneck/tests/data/test_246_A new file mode 100644 index 0000000..b4ddade --- /dev/null +++ b/geom_bottleneck/tests/data/test_246_A @@ -0,0 +1,9 @@ +10 15 +3 10 +2 7 +1 6 +2 3 +2 9 +9 10 +9 12 +8 18 diff --git a/geom_bottleneck/tests/data/test_246_B b/geom_bottleneck/tests/data/test_246_B new file mode 100644 index 0000000..6e0c12d --- /dev/null +++ b/geom_bottleneck/tests/data/test_246_B @@ -0,0 +1,9 @@ +4 9 +4 7 +6 11 +7 10 +0 3 +7 14 +7 17 +4 6 +10 15 diff --git a/geom_bottleneck/tests/data/test_247_A b/geom_bottleneck/tests/data/test_247_A new file mode 100644 index 0000000..4832963 --- /dev/null +++ b/geom_bottleneck/tests/data/test_247_A @@ -0,0 +1,9 @@ +5 14 +9 19 +4 5 +3 4 +2 7 +9 12 +10 11 +7 12 +8 12 diff --git a/geom_bottleneck/tests/data/test_247_B b/geom_bottleneck/tests/data/test_247_B new file mode 100644 index 0000000..17cc1f0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_247_B @@ -0,0 +1,9 @@ +4 12 +2 7 +1 2 +9 19 +4 14 +6 12 +8 11 +5 12 +9 10 diff --git a/geom_bottleneck/tests/data/test_248_A b/geom_bottleneck/tests/data/test_248_A new file mode 100644 index 0000000..adbf3d6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_248_A @@ -0,0 +1,9 @@ +8 9 +8 15 +2 12 +0 1 +8 14 +0 5 +7 17 +7 12 +7 10 diff --git a/geom_bottleneck/tests/data/test_248_B b/geom_bottleneck/tests/data/test_248_B new file mode 100644 index 0000000..39ee264 --- /dev/null +++ b/geom_bottleneck/tests/data/test_248_B @@ -0,0 +1,9 @@ +6 11 +1 10 +6 16 +10 13 +3 13 +10 16 +8 14 +8 16 +1 5 diff --git a/geom_bottleneck/tests/data/test_249_A b/geom_bottleneck/tests/data/test_249_A new file mode 100644 index 0000000..2b8a639 --- /dev/null +++ b/geom_bottleneck/tests/data/test_249_A @@ -0,0 +1,9 @@ +2 7 +2 4 +7 17 +2 11 +6 12 +3 12 +2 8 +5 6 +0 1 diff --git a/geom_bottleneck/tests/data/test_249_B b/geom_bottleneck/tests/data/test_249_B new file mode 100644 index 0000000..06b036c --- /dev/null +++ b/geom_bottleneck/tests/data/test_249_B @@ -0,0 +1,9 @@ +0 1 +8 11 +9 13 +3 11 +3 13 +7 15 +2 6 +4 5 +3 4 diff --git a/geom_bottleneck/tests/data/test_250_A b/geom_bottleneck/tests/data/test_250_A new file mode 100644 index 0000000..6934dd8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_250_A @@ -0,0 +1,9 @@ +0 8 +7 14 +5 12 +7 15 +9 19 +8 14 +6 15 +10 11 +9 19 diff --git a/geom_bottleneck/tests/data/test_250_B b/geom_bottleneck/tests/data/test_250_B new file mode 100644 index 0000000..0d387ac --- /dev/null +++ b/geom_bottleneck/tests/data/test_250_B @@ -0,0 +1,9 @@ +8 13 +7 14 +0 6 +4 14 +7 17 +6 8 +5 13 +0 1 +5 10 diff --git a/geom_bottleneck/tests/data/test_251_A b/geom_bottleneck/tests/data/test_251_A new file mode 100644 index 0000000..6fb7509 --- /dev/null +++ b/geom_bottleneck/tests/data/test_251_A @@ -0,0 +1,9 @@ +1 8 +6 13 +1 6 +10 15 +7 8 +3 6 +3 11 +7 12 +4 9 diff --git a/geom_bottleneck/tests/data/test_251_B b/geom_bottleneck/tests/data/test_251_B new file mode 100644 index 0000000..4ea7b4a --- /dev/null +++ b/geom_bottleneck/tests/data/test_251_B @@ -0,0 +1,9 @@ +5 11 +6 12 +2 9 +5 6 +0 5 +0 2 +6 10 +4 10 +10 19 diff --git a/geom_bottleneck/tests/data/test_252_A b/geom_bottleneck/tests/data/test_252_A new file mode 100644 index 0000000..0076fb9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_252_A @@ -0,0 +1,9 @@ +4 8 +5 15 +0 10 +8 15 +1 8 +4 6 +5 13 +7 10 +0 1 diff --git a/geom_bottleneck/tests/data/test_252_B b/geom_bottleneck/tests/data/test_252_B new file mode 100644 index 0000000..cf7fab7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_252_B @@ -0,0 +1,9 @@ +2 3 +4 6 +0 9 +4 7 +4 11 +6 10 +9 11 +1 5 +3 4 diff --git a/geom_bottleneck/tests/data/test_253_A b/geom_bottleneck/tests/data/test_253_A new file mode 100644 index 0000000..0916538 --- /dev/null +++ b/geom_bottleneck/tests/data/test_253_A @@ -0,0 +1,9 @@ +9 18 +1 10 +7 12 +0 6 +2 4 +1 10 +2 4 +1 2 +2 11 diff --git a/geom_bottleneck/tests/data/test_253_B b/geom_bottleneck/tests/data/test_253_B new file mode 100644 index 0000000..3ee1874 --- /dev/null +++ b/geom_bottleneck/tests/data/test_253_B @@ -0,0 +1,9 @@ +9 12 +6 11 +0 1 +6 7 +2 5 +6 8 +10 20 +9 17 +8 15 diff --git a/geom_bottleneck/tests/data/test_254_A b/geom_bottleneck/tests/data/test_254_A new file mode 100644 index 0000000..85af9cb --- /dev/null +++ b/geom_bottleneck/tests/data/test_254_A @@ -0,0 +1,9 @@ +1 9 +2 10 +4 7 +4 14 +3 9 +1 11 +7 16 +10 11 +5 15 diff --git a/geom_bottleneck/tests/data/test_254_B b/geom_bottleneck/tests/data/test_254_B new file mode 100644 index 0000000..573f5c5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_254_B @@ -0,0 +1,9 @@ +9 13 +0 1 +8 9 +8 9 +3 10 +5 14 +6 12 +3 5 +2 3 diff --git a/geom_bottleneck/tests/data/test_255_A b/geom_bottleneck/tests/data/test_255_A new file mode 100644 index 0000000..2fc0a84 --- /dev/null +++ b/geom_bottleneck/tests/data/test_255_A @@ -0,0 +1,9 @@ +10 11 +4 8 +2 10 +2 10 +3 8 +6 7 +8 14 +2 10 +4 11 diff --git a/geom_bottleneck/tests/data/test_255_B b/geom_bottleneck/tests/data/test_255_B new file mode 100644 index 0000000..04e0521 --- /dev/null +++ b/geom_bottleneck/tests/data/test_255_B @@ -0,0 +1,9 @@ +5 13 +8 12 +8 9 +4 10 +7 8 +1 7 +3 11 +10 15 +5 10 diff --git a/geom_bottleneck/tests/data/test_256_A b/geom_bottleneck/tests/data/test_256_A new file mode 100644 index 0000000..bb1df33 --- /dev/null +++ b/geom_bottleneck/tests/data/test_256_A @@ -0,0 +1,9 @@ +6 7 +7 8 +10 16 +2 5 +5 15 +7 9 +10 15 +9 18 +4 9 diff --git a/geom_bottleneck/tests/data/test_256_B b/geom_bottleneck/tests/data/test_256_B new file mode 100644 index 0000000..a9bb2f8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_256_B @@ -0,0 +1,9 @@ +0 10 +7 9 +9 10 +7 8 +1 2 +2 4 +8 15 +3 7 +0 2 diff --git a/geom_bottleneck/tests/data/test_257_A b/geom_bottleneck/tests/data/test_257_A new file mode 100644 index 0000000..ac06787 --- /dev/null +++ b/geom_bottleneck/tests/data/test_257_A @@ -0,0 +1,9 @@ +6 14 +9 16 +9 18 +4 7 +8 15 +7 9 +9 17 +1 2 +10 17 diff --git a/geom_bottleneck/tests/data/test_257_B b/geom_bottleneck/tests/data/test_257_B new file mode 100644 index 0000000..93ab86c --- /dev/null +++ b/geom_bottleneck/tests/data/test_257_B @@ -0,0 +1,9 @@ +2 3 +3 6 +10 13 +7 14 +0 8 +0 2 +9 12 +1 7 +0 1 diff --git a/geom_bottleneck/tests/data/test_258_A b/geom_bottleneck/tests/data/test_258_A new file mode 100644 index 0000000..b00d4c3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_258_A @@ -0,0 +1,9 @@ +4 11 +0 6 +5 6 +2 4 +2 7 +8 11 +3 8 +3 4 +7 10 diff --git a/geom_bottleneck/tests/data/test_258_B b/geom_bottleneck/tests/data/test_258_B new file mode 100644 index 0000000..f3ab79e --- /dev/null +++ b/geom_bottleneck/tests/data/test_258_B @@ -0,0 +1,9 @@ +6 15 +5 10 +9 10 +4 10 +7 8 +2 8 +8 18 +9 18 +5 9 diff --git a/geom_bottleneck/tests/data/test_259_A b/geom_bottleneck/tests/data/test_259_A new file mode 100644 index 0000000..30c4a56 --- /dev/null +++ b/geom_bottleneck/tests/data/test_259_A @@ -0,0 +1,9 @@ +4 5 +0 1 +4 7 +5 14 +2 8 +0 1 +9 13 +5 9 +10 13 diff --git a/geom_bottleneck/tests/data/test_259_B b/geom_bottleneck/tests/data/test_259_B new file mode 100644 index 0000000..8cb51f7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_259_B @@ -0,0 +1,9 @@ +6 15 +9 18 +7 8 +9 16 +9 15 +5 15 +9 10 +6 10 +5 6 diff --git a/geom_bottleneck/tests/data/test_260_A b/geom_bottleneck/tests/data/test_260_A new file mode 100644 index 0000000..83740c1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_260_A @@ -0,0 +1,10 @@ +1 4 +2 5 +3 7 +7 9 +4 13 +8 15 +10 19 +9 14 +10 18 +10 17 diff --git a/geom_bottleneck/tests/data/test_260_B b/geom_bottleneck/tests/data/test_260_B new file mode 100644 index 0000000..18e1128 --- /dev/null +++ b/geom_bottleneck/tests/data/test_260_B @@ -0,0 +1,10 @@ +0 4 +8 15 +4 6 +10 13 +6 7 +7 10 +8 13 +2 7 +4 13 +3 5 diff --git a/geom_bottleneck/tests/data/test_261_A b/geom_bottleneck/tests/data/test_261_A new file mode 100644 index 0000000..259e18a --- /dev/null +++ b/geom_bottleneck/tests/data/test_261_A @@ -0,0 +1,10 @@ +8 11 +6 11 +9 16 +7 17 +7 14 +9 11 +0 1 +9 14 +6 14 +0 10 diff --git a/geom_bottleneck/tests/data/test_261_B b/geom_bottleneck/tests/data/test_261_B new file mode 100644 index 0000000..2be943f --- /dev/null +++ b/geom_bottleneck/tests/data/test_261_B @@ -0,0 +1,10 @@ +8 18 +5 7 +9 12 +7 10 +3 6 +4 14 +9 15 +8 14 +1 9 +0 5 diff --git a/geom_bottleneck/tests/data/test_262_A b/geom_bottleneck/tests/data/test_262_A new file mode 100644 index 0000000..ccb706b --- /dev/null +++ b/geom_bottleneck/tests/data/test_262_A @@ -0,0 +1,10 @@ +1 8 +6 16 +7 13 +10 13 +7 11 +10 15 +10 17 +8 17 +0 3 +5 6 diff --git a/geom_bottleneck/tests/data/test_262_B b/geom_bottleneck/tests/data/test_262_B new file mode 100644 index 0000000..944d288 --- /dev/null +++ b/geom_bottleneck/tests/data/test_262_B @@ -0,0 +1,10 @@ +9 18 +7 8 +0 8 +8 15 +6 14 +6 11 +6 16 +7 17 +3 4 +4 7 diff --git a/geom_bottleneck/tests/data/test_263_A b/geom_bottleneck/tests/data/test_263_A new file mode 100644 index 0000000..6262062 --- /dev/null +++ b/geom_bottleneck/tests/data/test_263_A @@ -0,0 +1,10 @@ +0 9 +10 11 +4 13 +9 13 +4 6 +7 13 +4 5 +7 9 +10 11 +10 18 diff --git a/geom_bottleneck/tests/data/test_263_B b/geom_bottleneck/tests/data/test_263_B new file mode 100644 index 0000000..c9f8716 --- /dev/null +++ b/geom_bottleneck/tests/data/test_263_B @@ -0,0 +1,10 @@ +2 6 +6 13 +2 12 +3 13 +5 6 +10 16 +9 18 +9 16 +10 18 +10 20 diff --git a/geom_bottleneck/tests/data/test_264_A b/geom_bottleneck/tests/data/test_264_A new file mode 100644 index 0000000..8c79b6d --- /dev/null +++ b/geom_bottleneck/tests/data/test_264_A @@ -0,0 +1,10 @@ +3 11 +3 4 +8 12 +2 10 +7 12 +2 10 +10 13 +4 8 +2 9 +10 11 diff --git a/geom_bottleneck/tests/data/test_264_B b/geom_bottleneck/tests/data/test_264_B new file mode 100644 index 0000000..9b92607 --- /dev/null +++ b/geom_bottleneck/tests/data/test_264_B @@ -0,0 +1,10 @@ +7 11 +2 7 +4 12 +9 10 +10 12 +8 15 +8 12 +6 7 +2 11 +10 11 diff --git a/geom_bottleneck/tests/data/test_265_A b/geom_bottleneck/tests/data/test_265_A new file mode 100644 index 0000000..4de3ff9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_265_A @@ -0,0 +1,10 @@ +0 4 +1 2 +6 11 +9 19 +0 6 +9 19 +0 5 +4 5 +7 11 +9 14 diff --git a/geom_bottleneck/tests/data/test_265_B b/geom_bottleneck/tests/data/test_265_B new file mode 100644 index 0000000..f03f49f --- /dev/null +++ b/geom_bottleneck/tests/data/test_265_B @@ -0,0 +1,10 @@ +1 7 +5 10 +5 10 +4 6 +0 7 +4 12 +8 11 +10 15 +2 11 +8 17 diff --git a/geom_bottleneck/tests/data/test_266_A b/geom_bottleneck/tests/data/test_266_A new file mode 100644 index 0000000..95754d3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_266_A @@ -0,0 +1,10 @@ +7 8 +3 12 +0 5 +0 6 +1 5 +9 17 +6 11 +3 5 +2 11 +5 7 diff --git a/geom_bottleneck/tests/data/test_266_B b/geom_bottleneck/tests/data/test_266_B new file mode 100644 index 0000000..5a2d560 --- /dev/null +++ b/geom_bottleneck/tests/data/test_266_B @@ -0,0 +1,10 @@ +10 17 +5 13 +9 10 +3 4 +4 10 +6 12 +0 7 +6 14 +1 6 +4 10 diff --git a/geom_bottleneck/tests/data/test_267_A b/geom_bottleneck/tests/data/test_267_A new file mode 100644 index 0000000..d2c663e --- /dev/null +++ b/geom_bottleneck/tests/data/test_267_A @@ -0,0 +1,10 @@ +3 4 +10 20 +2 10 +1 7 +0 4 +0 10 +0 8 +3 4 +9 19 +7 13 diff --git a/geom_bottleneck/tests/data/test_267_B b/geom_bottleneck/tests/data/test_267_B new file mode 100644 index 0000000..aebae2b --- /dev/null +++ b/geom_bottleneck/tests/data/test_267_B @@ -0,0 +1,10 @@ +2 11 +4 5 +1 10 +3 9 +6 11 +0 8 +2 3 +0 3 +6 11 +7 12 diff --git a/geom_bottleneck/tests/data/test_268_A b/geom_bottleneck/tests/data/test_268_A new file mode 100644 index 0000000..d0e9835 --- /dev/null +++ b/geom_bottleneck/tests/data/test_268_A @@ -0,0 +1,10 @@ +3 4 +10 17 +8 17 +0 2 +4 8 +0 8 +4 5 +5 6 +1 2 +1 7 diff --git a/geom_bottleneck/tests/data/test_268_B b/geom_bottleneck/tests/data/test_268_B new file mode 100644 index 0000000..ac0c242 --- /dev/null +++ b/geom_bottleneck/tests/data/test_268_B @@ -0,0 +1,10 @@ +3 11 +3 6 +1 2 +8 9 +2 5 +4 13 +4 9 +9 18 +9 15 +9 13 diff --git a/geom_bottleneck/tests/data/test_269_A b/geom_bottleneck/tests/data/test_269_A new file mode 100644 index 0000000..62a1a47 --- /dev/null +++ b/geom_bottleneck/tests/data/test_269_A @@ -0,0 +1,10 @@ +10 17 +10 18 +3 10 +6 8 +3 5 +5 11 +5 12 +9 13 +6 16 +2 11 diff --git a/geom_bottleneck/tests/data/test_269_B b/geom_bottleneck/tests/data/test_269_B new file mode 100644 index 0000000..ecf44f6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_269_B @@ -0,0 +1,10 @@ +3 8 +2 9 +1 6 +8 11 +10 18 +4 12 +0 2 +0 1 +0 8 +0 4 diff --git a/geom_bottleneck/tests/data/test_270_A b/geom_bottleneck/tests/data/test_270_A new file mode 100644 index 0000000..6bd9f37 --- /dev/null +++ b/geom_bottleneck/tests/data/test_270_A @@ -0,0 +1,10 @@ +6 16 +3 8 +6 7 +5 10 +7 17 +1 2 +10 19 +10 18 +4 9 +9 14 diff --git a/geom_bottleneck/tests/data/test_270_B b/geom_bottleneck/tests/data/test_270_B new file mode 100644 index 0000000..5e177c7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_270_B @@ -0,0 +1,10 @@ +8 14 +10 14 +6 7 +3 8 +9 10 +3 7 +2 3 +2 3 +10 19 +8 15 diff --git a/geom_bottleneck/tests/data/test_271_A b/geom_bottleneck/tests/data/test_271_A new file mode 100644 index 0000000..12f7492 --- /dev/null +++ b/geom_bottleneck/tests/data/test_271_A @@ -0,0 +1,10 @@ +0 7 +0 6 +3 10 +3 6 +1 10 +10 11 +3 13 +9 16 +9 15 +10 20 diff --git a/geom_bottleneck/tests/data/test_271_B b/geom_bottleneck/tests/data/test_271_B new file mode 100644 index 0000000..1af6dd6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_271_B @@ -0,0 +1,10 @@ +9 10 +9 16 +10 14 +1 4 +8 14 +10 11 +9 10 +3 7 +6 14 +7 8 diff --git a/geom_bottleneck/tests/data/test_272_A b/geom_bottleneck/tests/data/test_272_A new file mode 100644 index 0000000..b6b67f0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_272_A @@ -0,0 +1,10 @@ +9 17 +6 16 +6 8 +1 2 +7 12 +1 4 +0 9 +9 16 +8 10 +10 11 diff --git a/geom_bottleneck/tests/data/test_272_B b/geom_bottleneck/tests/data/test_272_B new file mode 100644 index 0000000..9b12c0e --- /dev/null +++ b/geom_bottleneck/tests/data/test_272_B @@ -0,0 +1,10 @@ +1 11 +9 14 +8 9 +3 11 +7 15 +0 5 +0 8 +5 11 +0 1 +10 11 diff --git a/geom_bottleneck/tests/data/test_273_A b/geom_bottleneck/tests/data/test_273_A new file mode 100644 index 0000000..6ae8fde --- /dev/null +++ b/geom_bottleneck/tests/data/test_273_A @@ -0,0 +1,10 @@ +2 10 +8 9 +10 19 +3 7 +4 5 +1 8 +0 5 +6 9 +0 1 +4 10 diff --git a/geom_bottleneck/tests/data/test_273_B b/geom_bottleneck/tests/data/test_273_B new file mode 100644 index 0000000..42955e8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_273_B @@ -0,0 +1,10 @@ +9 19 +0 2 +0 1 +2 9 +7 9 +2 7 +3 6 +9 10 +2 3 +0 9 diff --git a/geom_bottleneck/tests/data/test_274_A b/geom_bottleneck/tests/data/test_274_A new file mode 100644 index 0000000..78e099d --- /dev/null +++ b/geom_bottleneck/tests/data/test_274_A @@ -0,0 +1,10 @@ +0 1 +10 11 +4 6 +9 15 +9 19 +4 7 +8 17 +0 7 +7 17 +4 14 diff --git a/geom_bottleneck/tests/data/test_274_B b/geom_bottleneck/tests/data/test_274_B new file mode 100644 index 0000000..59cac0c --- /dev/null +++ b/geom_bottleneck/tests/data/test_274_B @@ -0,0 +1,10 @@ +4 12 +2 7 +0 5 +3 10 +7 15 +3 8 +8 14 +8 11 +6 14 +6 16 diff --git a/geom_bottleneck/tests/data/test_275_A b/geom_bottleneck/tests/data/test_275_A new file mode 100644 index 0000000..9593ad1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_275_A @@ -0,0 +1,10 @@ +7 13 +2 3 +10 11 +5 10 +6 11 +10 16 +5 10 +5 9 +10 18 +10 11 diff --git a/geom_bottleneck/tests/data/test_275_B b/geom_bottleneck/tests/data/test_275_B new file mode 100644 index 0000000..46d793b --- /dev/null +++ b/geom_bottleneck/tests/data/test_275_B @@ -0,0 +1,10 @@ +9 19 +10 11 +8 9 +7 8 +4 8 +0 2 +4 12 +6 16 +4 9 +8 9 diff --git a/geom_bottleneck/tests/data/test_276_A b/geom_bottleneck/tests/data/test_276_A new file mode 100644 index 0000000..546a9ad --- /dev/null +++ b/geom_bottleneck/tests/data/test_276_A @@ -0,0 +1,10 @@ +6 16 +2 3 +0 6 +9 18 +3 13 +1 5 +1 6 +3 4 +7 11 +0 1 diff --git a/geom_bottleneck/tests/data/test_276_B b/geom_bottleneck/tests/data/test_276_B new file mode 100644 index 0000000..3b63537 --- /dev/null +++ b/geom_bottleneck/tests/data/test_276_B @@ -0,0 +1,10 @@ +9 17 +8 9 +7 10 +2 10 +2 11 +2 7 +6 11 +7 12 +10 18 +4 14 diff --git a/geom_bottleneck/tests/data/test_277_A b/geom_bottleneck/tests/data/test_277_A new file mode 100644 index 0000000..41ee575 --- /dev/null +++ b/geom_bottleneck/tests/data/test_277_A @@ -0,0 +1,10 @@ +6 8 +6 15 +0 10 +9 10 +5 10 +4 10 +0 5 +5 9 +8 9 +2 5 diff --git a/geom_bottleneck/tests/data/test_277_B b/geom_bottleneck/tests/data/test_277_B new file mode 100644 index 0000000..84ade69 --- /dev/null +++ b/geom_bottleneck/tests/data/test_277_B @@ -0,0 +1,10 @@ +0 2 +4 7 +3 12 +8 13 +2 3 +9 18 +8 16 +2 3 +10 20 +4 10 diff --git a/geom_bottleneck/tests/data/test_278_A b/geom_bottleneck/tests/data/test_278_A new file mode 100644 index 0000000..d2e3a7a --- /dev/null +++ b/geom_bottleneck/tests/data/test_278_A @@ -0,0 +1,10 @@ +8 10 +6 7 +9 19 +6 11 +4 6 +0 8 +5 6 +5 10 +1 10 +2 7 diff --git a/geom_bottleneck/tests/data/test_278_B b/geom_bottleneck/tests/data/test_278_B new file mode 100644 index 0000000..0046a8a --- /dev/null +++ b/geom_bottleneck/tests/data/test_278_B @@ -0,0 +1,10 @@ +1 2 +0 8 +9 19 +4 13 +0 10 +7 15 +2 3 +10 17 +2 12 +10 17 diff --git a/geom_bottleneck/tests/data/test_279_A b/geom_bottleneck/tests/data/test_279_A new file mode 100644 index 0000000..4e5619f --- /dev/null +++ b/geom_bottleneck/tests/data/test_279_A @@ -0,0 +1,10 @@ +5 9 +4 8 +5 7 +0 2 +8 17 +5 12 +3 5 +1 3 +3 10 +7 10 diff --git a/geom_bottleneck/tests/data/test_279_B b/geom_bottleneck/tests/data/test_279_B new file mode 100644 index 0000000..7ae40fa --- /dev/null +++ b/geom_bottleneck/tests/data/test_279_B @@ -0,0 +1,10 @@ +9 11 +2 5 +5 15 +4 11 +5 11 +9 10 +2 8 +10 14 +6 16 +7 16 diff --git a/geom_bottleneck/tests/data/test_280_A b/geom_bottleneck/tests/data/test_280_A new file mode 100644 index 0000000..3ac2922 --- /dev/null +++ b/geom_bottleneck/tests/data/test_280_A @@ -0,0 +1,20 @@ +5 8 +10 11 +0 1 +8 18 +0 7 +2 12 +3 6 +10 20 +9 14 +4 9 +6 7 +4 13 +3 4 +10 13 +6 7 +8 17 +8 9 +5 7 +5 6 +3 11 diff --git a/geom_bottleneck/tests/data/test_280_B b/geom_bottleneck/tests/data/test_280_B new file mode 100644 index 0000000..c5485cf --- /dev/null +++ b/geom_bottleneck/tests/data/test_280_B @@ -0,0 +1,20 @@ +9 16 +6 7 +4 12 +9 10 +5 12 +5 14 +1 4 +8 17 +4 14 +8 15 +6 14 +3 13 +7 17 +4 7 +0 2 +9 17 +3 4 +6 11 +0 10 +2 3 diff --git a/geom_bottleneck/tests/data/test_281_A b/geom_bottleneck/tests/data/test_281_A new file mode 100644 index 0000000..e9a4644 --- /dev/null +++ b/geom_bottleneck/tests/data/test_281_A @@ -0,0 +1,20 @@ +2 4 +3 4 +7 10 +9 14 +9 16 +8 10 +2 3 +0 10 +10 14 +7 14 +4 7 +4 6 +5 11 +1 7 +3 10 +7 8 +6 11 +0 1 +8 9 +7 16 diff --git a/geom_bottleneck/tests/data/test_281_B b/geom_bottleneck/tests/data/test_281_B new file mode 100644 index 0000000..f219b2a --- /dev/null +++ b/geom_bottleneck/tests/data/test_281_B @@ -0,0 +1,20 @@ +5 15 +8 17 +0 5 +5 11 +7 13 +5 9 +4 7 +3 9 +6 9 +2 10 +4 9 +6 13 +8 17 +8 12 +10 15 +4 11 +3 11 +0 2 +3 8 +1 6 diff --git a/geom_bottleneck/tests/data/test_282_A b/geom_bottleneck/tests/data/test_282_A new file mode 100644 index 0000000..946f3f2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_282_A @@ -0,0 +1,20 @@ +7 17 +1 10 +7 12 +2 12 +1 2 +2 11 +2 6 +7 10 +9 18 +2 12 +3 12 +8 9 +0 10 +5 6 +3 9 +9 13 +0 7 +6 7 +0 2 +4 13 diff --git a/geom_bottleneck/tests/data/test_282_B b/geom_bottleneck/tests/data/test_282_B new file mode 100644 index 0000000..ac3c7c8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_282_B @@ -0,0 +1,20 @@ +0 8 +10 18 +4 11 +1 10 +4 9 +4 8 +3 9 +0 6 +9 12 +9 10 +9 15 +0 3 +2 11 +6 11 +2 8 +1 3 +8 16 +0 5 +9 18 +4 11 diff --git a/geom_bottleneck/tests/data/test_283_A b/geom_bottleneck/tests/data/test_283_A new file mode 100644 index 0000000..0c4676e --- /dev/null +++ b/geom_bottleneck/tests/data/test_283_A @@ -0,0 +1,20 @@ +4 12 +6 9 +7 12 +10 16 +10 11 +1 2 +0 5 +4 7 +3 12 +4 7 +10 11 +3 5 +10 16 +6 7 +10 18 +7 8 +10 11 +4 10 +6 14 +2 4 diff --git a/geom_bottleneck/tests/data/test_283_B b/geom_bottleneck/tests/data/test_283_B new file mode 100644 index 0000000..23a83e7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_283_B @@ -0,0 +1,20 @@ +9 16 +7 17 +2 7 +0 1 +9 17 +8 10 +8 15 +10 17 +6 12 +7 8 +1 8 +2 12 +8 9 +3 6 +6 12 +3 6 +3 5 +2 6 +10 11 +7 13 diff --git a/geom_bottleneck/tests/data/test_284_A b/geom_bottleneck/tests/data/test_284_A new file mode 100644 index 0000000..4cec19a --- /dev/null +++ b/geom_bottleneck/tests/data/test_284_A @@ -0,0 +1,20 @@ +9 13 +2 11 +2 4 +6 7 +6 14 +6 13 +7 14 +0 8 +3 4 +2 9 +4 10 +4 11 +6 15 +1 3 +5 9 +4 5 +4 13 +7 11 +9 15 +7 16 diff --git a/geom_bottleneck/tests/data/test_284_B b/geom_bottleneck/tests/data/test_284_B new file mode 100644 index 0000000..f09aa28 --- /dev/null +++ b/geom_bottleneck/tests/data/test_284_B @@ -0,0 +1,20 @@ +9 11 +7 10 +3 5 +0 1 +5 11 +2 10 +3 5 +2 4 +7 15 +3 4 +10 13 +1 3 +8 14 +0 8 +1 11 +5 13 +0 1 +2 3 +0 6 +2 6 diff --git a/geom_bottleneck/tests/data/test_285_A b/geom_bottleneck/tests/data/test_285_A new file mode 100644 index 0000000..8e27a5a --- /dev/null +++ b/geom_bottleneck/tests/data/test_285_A @@ -0,0 +1,20 @@ +7 9 +7 12 +7 16 +4 14 +1 8 +3 13 +7 15 +4 5 +10 18 +10 16 +5 6 +6 12 +3 13 +5 9 +7 15 +1 2 +10 14 +5 6 +6 12 +3 9 diff --git a/geom_bottleneck/tests/data/test_285_B b/geom_bottleneck/tests/data/test_285_B new file mode 100644 index 0000000..16a8754 --- /dev/null +++ b/geom_bottleneck/tests/data/test_285_B @@ -0,0 +1,20 @@ +4 5 +4 9 +10 19 +1 5 +3 9 +10 11 +0 1 +2 12 +1 8 +7 15 +5 9 +8 10 +7 10 +9 18 +4 9 +3 10 +7 15 +7 14 +2 4 +5 7 diff --git a/geom_bottleneck/tests/data/test_286_A b/geom_bottleneck/tests/data/test_286_A new file mode 100644 index 0000000..f8083ac --- /dev/null +++ b/geom_bottleneck/tests/data/test_286_A @@ -0,0 +1,20 @@ +5 6 +10 11 +2 10 +0 6 +4 5 +7 8 +2 10 +4 12 +0 1 +7 15 +2 10 +10 13 +1 10 +9 14 +2 6 +2 8 +6 15 +3 4 +4 6 +2 11 diff --git a/geom_bottleneck/tests/data/test_286_B b/geom_bottleneck/tests/data/test_286_B new file mode 100644 index 0000000..6ba8e74 --- /dev/null +++ b/geom_bottleneck/tests/data/test_286_B @@ -0,0 +1,20 @@ +7 8 +3 4 +7 15 +10 14 +4 12 +4 8 +8 12 +4 8 +1 4 +10 12 +0 2 +0 1 +6 12 +7 11 +9 16 +3 11 +2 4 +10 14 +2 10 +6 8 diff --git a/geom_bottleneck/tests/data/test_287_A b/geom_bottleneck/tests/data/test_287_A new file mode 100644 index 0000000..5dd8f38 --- /dev/null +++ b/geom_bottleneck/tests/data/test_287_A @@ -0,0 +1,20 @@ +10 20 +8 9 +0 4 +6 14 +1 4 +3 7 +0 3 +10 13 +7 9 +4 6 +7 14 +3 13 +10 17 +4 13 +9 18 +2 3 +1 11 +10 16 +6 12 +4 13 diff --git a/geom_bottleneck/tests/data/test_287_B b/geom_bottleneck/tests/data/test_287_B new file mode 100644 index 0000000..6fff124 --- /dev/null +++ b/geom_bottleneck/tests/data/test_287_B @@ -0,0 +1,20 @@ +0 2 +6 7 +8 9 +2 10 +0 4 +7 8 +0 9 +1 4 +6 11 +0 2 +5 7 +9 18 +9 16 +5 14 +3 4 +5 14 +3 4 +6 9 +1 5 +7 10 diff --git a/geom_bottleneck/tests/data/test_288_A b/geom_bottleneck/tests/data/test_288_A new file mode 100644 index 0000000..567d877 --- /dev/null +++ b/geom_bottleneck/tests/data/test_288_A @@ -0,0 +1,20 @@ +8 12 +4 9 +5 14 +7 8 +4 11 +5 15 +2 10 +1 3 +0 7 +3 5 +1 3 +1 7 +8 13 +7 10 +5 6 +7 10 +3 6 +10 20 +10 17 +4 14 diff --git a/geom_bottleneck/tests/data/test_288_B b/geom_bottleneck/tests/data/test_288_B new file mode 100644 index 0000000..1d50cf6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_288_B @@ -0,0 +1,20 @@ +6 14 +8 11 +5 13 +1 10 +9 12 +9 19 +4 14 +0 2 +8 16 +1 10 +3 9 +0 3 +2 5 +2 4 +5 8 +2 11 +3 5 +6 16 +7 11 +5 11 diff --git a/geom_bottleneck/tests/data/test_289_A b/geom_bottleneck/tests/data/test_289_A new file mode 100644 index 0000000..39c74ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_289_A @@ -0,0 +1,20 @@ +3 4 +5 13 +8 18 +9 18 +4 10 +2 8 +1 10 +10 17 +2 3 +10 15 +2 3 +4 6 +7 8 +7 9 +8 12 +7 9 +8 15 +6 9 +0 2 +8 17 diff --git a/geom_bottleneck/tests/data/test_289_B b/geom_bottleneck/tests/data/test_289_B new file mode 100644 index 0000000..cb24888 --- /dev/null +++ b/geom_bottleneck/tests/data/test_289_B @@ -0,0 +1,20 @@ +1 11 +10 18 +6 16 +7 14 +8 16 +9 11 +2 3 +8 12 +4 5 +7 14 +5 10 +7 8 +2 12 +5 9 +0 1 +10 19 +1 5 +10 20 +3 10 +9 11 diff --git a/geom_bottleneck/tests/data/test_290_A b/geom_bottleneck/tests/data/test_290_A new file mode 100644 index 0000000..21e124b --- /dev/null +++ b/geom_bottleneck/tests/data/test_290_A @@ -0,0 +1,20 @@ +8 15 +6 10 +4 5 +10 20 +3 8 +0 10 +0 2 +3 9 +1 10 +3 11 +5 12 +6 7 +6 8 +3 6 +8 9 +9 15 +2 12 +8 12 +3 11 +4 9 diff --git a/geom_bottleneck/tests/data/test_290_B b/geom_bottleneck/tests/data/test_290_B new file mode 100644 index 0000000..d705f0e --- /dev/null +++ b/geom_bottleneck/tests/data/test_290_B @@ -0,0 +1,20 @@ +8 10 +1 2 +5 6 +2 9 +6 15 +3 8 +6 7 +4 11 +2 3 +10 14 +3 4 +3 4 +1 2 +2 11 +2 6 +6 7 +1 4 +8 16 +4 5 +9 12 diff --git a/geom_bottleneck/tests/data/test_291_A b/geom_bottleneck/tests/data/test_291_A new file mode 100644 index 0000000..0ba0226 --- /dev/null +++ b/geom_bottleneck/tests/data/test_291_A @@ -0,0 +1,20 @@ +10 11 +4 5 +4 13 +4 10 +9 13 +3 4 +8 13 +9 15 +2 8 +9 16 +8 14 +8 18 +1 6 +0 8 +8 16 +5 6 +9 19 +8 15 +8 13 +8 16 diff --git a/geom_bottleneck/tests/data/test_291_B b/geom_bottleneck/tests/data/test_291_B new file mode 100644 index 0000000..1c933ef --- /dev/null +++ b/geom_bottleneck/tests/data/test_291_B @@ -0,0 +1,20 @@ +2 9 +4 13 +8 13 +10 13 +8 18 +8 13 +5 14 +1 6 +5 6 +7 8 +2 12 +5 6 +6 10 +7 10 +0 6 +10 14 +2 3 +10 18 +5 12 +4 5 diff --git a/geom_bottleneck/tests/data/test_292_A b/geom_bottleneck/tests/data/test_292_A new file mode 100644 index 0000000..1929d2e --- /dev/null +++ b/geom_bottleneck/tests/data/test_292_A @@ -0,0 +1,20 @@ +7 8 +5 15 +7 11 +6 15 +2 8 +8 9 +7 9 +0 2 +4 8 +2 10 +0 2 +2 4 +1 3 +6 10 +2 10 +2 9 +10 13 +7 8 +5 8 +9 11 diff --git a/geom_bottleneck/tests/data/test_292_B b/geom_bottleneck/tests/data/test_292_B new file mode 100644 index 0000000..305f8b8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_292_B @@ -0,0 +1,20 @@ +4 6 +3 9 +8 12 +5 15 +10 12 +4 10 +4 6 +4 6 +0 8 +8 14 +7 14 +4 13 +4 10 +5 12 +10 19 +0 7 +3 10 +10 15 +0 2 +10 11 diff --git a/geom_bottleneck/tests/data/test_293_A b/geom_bottleneck/tests/data/test_293_A new file mode 100644 index 0000000..752bd33 --- /dev/null +++ b/geom_bottleneck/tests/data/test_293_A @@ -0,0 +1,20 @@ +8 15 +5 15 +10 11 +6 7 +10 13 +9 10 +6 8 +9 18 +0 4 +2 4 +2 9 +6 15 +0 1 +5 12 +7 12 +2 9 +3 13 +4 10 +10 16 +2 9 diff --git a/geom_bottleneck/tests/data/test_293_B b/geom_bottleneck/tests/data/test_293_B new file mode 100644 index 0000000..6ce5afb --- /dev/null +++ b/geom_bottleneck/tests/data/test_293_B @@ -0,0 +1,20 @@ +2 10 +8 11 +6 16 +0 10 +2 3 +10 17 +1 2 +7 16 +3 7 +0 3 +8 9 +2 7 +7 17 +3 13 +2 7 +5 11 +6 9 +10 20 +2 4 +3 8 diff --git a/geom_bottleneck/tests/data/test_294_A b/geom_bottleneck/tests/data/test_294_A new file mode 100644 index 0000000..556a43e --- /dev/null +++ b/geom_bottleneck/tests/data/test_294_A @@ -0,0 +1,20 @@ +5 13 +4 12 +6 7 +10 16 +5 14 +3 10 +2 10 +7 11 +5 15 +0 1 +4 14 +3 12 +0 8 +10 13 +0 1 +3 9 +5 6 +7 11 +4 13 +9 11 diff --git a/geom_bottleneck/tests/data/test_294_B b/geom_bottleneck/tests/data/test_294_B new file mode 100644 index 0000000..5a0896c --- /dev/null +++ b/geom_bottleneck/tests/data/test_294_B @@ -0,0 +1,20 @@ +1 10 +6 16 +6 10 +4 12 +6 12 +0 6 +3 9 +3 12 +5 14 +9 17 +10 18 +3 13 +2 10 +8 9 +9 16 +8 14 +5 12 +4 6 +9 10 +7 12 diff --git a/geom_bottleneck/tests/data/test_295_A b/geom_bottleneck/tests/data/test_295_A new file mode 100644 index 0000000..53b904f --- /dev/null +++ b/geom_bottleneck/tests/data/test_295_A @@ -0,0 +1,20 @@ +2 10 +10 20 +9 16 +2 9 +2 7 +7 11 +8 11 +10 12 +4 9 +4 13 +6 12 +7 8 +4 8 +7 15 +2 9 +9 11 +10 13 +9 19 +7 14 +5 13 diff --git a/geom_bottleneck/tests/data/test_295_B b/geom_bottleneck/tests/data/test_295_B new file mode 100644 index 0000000..61d13ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_295_B @@ -0,0 +1,20 @@ +3 13 +3 13 +8 17 +1 6 +3 9 +3 10 +5 12 +9 10 +5 7 +9 16 +2 6 +0 1 +4 8 +1 3 +5 15 +6 7 +7 10 +1 3 +5 13 +1 7 diff --git a/geom_bottleneck/tests/data/test_296_A b/geom_bottleneck/tests/data/test_296_A new file mode 100644 index 0000000..444d20f --- /dev/null +++ b/geom_bottleneck/tests/data/test_296_A @@ -0,0 +1,20 @@ +0 6 +4 10 +10 13 +0 6 +1 6 +10 19 +6 13 +1 2 +5 13 +6 14 +4 12 +1 8 +6 16 +2 9 +9 11 +9 19 +1 10 +3 4 +2 11 +4 8 diff --git a/geom_bottleneck/tests/data/test_296_B b/geom_bottleneck/tests/data/test_296_B new file mode 100644 index 0000000..476d729 --- /dev/null +++ b/geom_bottleneck/tests/data/test_296_B @@ -0,0 +1,20 @@ +1 3 +7 9 +4 10 +10 11 +0 5 +4 12 +1 2 +7 14 +10 19 +8 9 +3 12 +1 2 +1 5 +0 1 +10 17 +9 17 +1 7 +2 5 +2 5 +4 13 diff --git a/geom_bottleneck/tests/data/test_297_A b/geom_bottleneck/tests/data/test_297_A new file mode 100644 index 0000000..745d7f6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_297_A @@ -0,0 +1,20 @@ +6 9 +1 3 +7 10 +9 14 +9 18 +8 12 +2 3 +5 15 +8 14 +3 12 +5 6 +7 15 +6 16 +8 18 +6 13 +6 7 +3 8 +2 3 +9 13 +9 14 diff --git a/geom_bottleneck/tests/data/test_297_B b/geom_bottleneck/tests/data/test_297_B new file mode 100644 index 0000000..99b1ccc --- /dev/null +++ b/geom_bottleneck/tests/data/test_297_B @@ -0,0 +1,20 @@ +4 11 +9 18 +9 11 +2 7 +2 9 +4 12 +4 13 +10 18 +8 10 +2 5 +9 15 +2 9 +10 15 +6 15 +9 12 +10 20 +9 16 +8 11 +0 1 +2 12 diff --git a/geom_bottleneck/tests/data/test_298_A b/geom_bottleneck/tests/data/test_298_A new file mode 100644 index 0000000..d35fccc --- /dev/null +++ b/geom_bottleneck/tests/data/test_298_A @@ -0,0 +1,20 @@ +0 6 +9 10 +4 5 +7 13 +10 19 +7 12 +10 20 +2 6 +7 13 +7 8 +9 10 +4 8 +9 10 +7 14 +9 19 +10 16 +3 7 +2 3 +1 5 +3 4 diff --git a/geom_bottleneck/tests/data/test_298_B b/geom_bottleneck/tests/data/test_298_B new file mode 100644 index 0000000..5cf0d1c --- /dev/null +++ b/geom_bottleneck/tests/data/test_298_B @@ -0,0 +1,20 @@ +4 10 +6 8 +2 3 +6 15 +9 16 +10 11 +7 13 +5 6 +2 9 +6 13 +8 14 +9 15 +10 15 +10 12 +9 18 +3 4 +6 7 +1 9 +4 10 +3 7 diff --git a/geom_bottleneck/tests/data/test_299_A b/geom_bottleneck/tests/data/test_299_A new file mode 100644 index 0000000..3506828 --- /dev/null +++ b/geom_bottleneck/tests/data/test_299_A @@ -0,0 +1,20 @@ +9 10 +1 6 +7 16 +9 13 +3 8 +6 11 +1 9 +5 14 +3 7 +3 10 +5 11 +1 7 +1 5 +0 6 +6 14 +8 11 +10 13 +9 17 +4 10 +9 14 diff --git a/geom_bottleneck/tests/data/test_299_B b/geom_bottleneck/tests/data/test_299_B new file mode 100644 index 0000000..3600634 --- /dev/null +++ b/geom_bottleneck/tests/data/test_299_B @@ -0,0 +1,20 @@ +0 9 +7 13 +8 14 +8 9 +7 17 +0 5 +1 10 +0 5 +3 4 +10 19 +6 14 +8 9 +9 14 +1 6 +9 14 +3 5 +4 5 +8 18 +10 14 +10 18 diff --git a/geom_bottleneck/tests/data/test_300_A b/geom_bottleneck/tests/data/test_300_A new file mode 100644 index 0000000..2ab4a1e --- /dev/null +++ b/geom_bottleneck/tests/data/test_300_A @@ -0,0 +1,30 @@ +8 10 +1 4 +9 12 +0 1 +0 5 +2 9 +7 13 +6 7 +3 8 +2 7 +6 8 +8 12 +1 2 +0 1 +5 10 +4 5 +9 13 +8 15 +6 8 +9 17 +7 10 +8 16 +10 11 +6 8 +6 8 +5 11 +1 4 +9 13 +2 4 +2 3 diff --git a/geom_bottleneck/tests/data/test_300_B b/geom_bottleneck/tests/data/test_300_B new file mode 100644 index 0000000..a54300d --- /dev/null +++ b/geom_bottleneck/tests/data/test_300_B @@ -0,0 +1,30 @@ +9 10 +9 11 +6 10 +1 3 +5 8 +7 12 +4 9 +7 11 +1 9 +6 15 +3 9 +3 10 +1 6 +8 15 +1 11 +1 2 +10 11 +6 7 +7 8 +0 3 +10 11 +3 9 +3 9 +5 6 +0 4 +6 9 +2 3 +1 2 +10 11 +4 14 diff --git a/geom_bottleneck/tests/data/test_301_A b/geom_bottleneck/tests/data/test_301_A new file mode 100644 index 0000000..85f8ae5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_301_A @@ -0,0 +1,30 @@ +4 10 +5 9 +6 12 +0 1 +4 7 +4 6 +9 19 +4 9 +2 7 +4 13 +6 7 +4 5 +0 10 +7 8 +3 4 +8 12 +0 9 +8 14 +7 13 +8 14 +1 2 +4 5 +10 14 +4 5 +3 11 +7 12 +9 16 +0 1 +9 19 +9 15 diff --git a/geom_bottleneck/tests/data/test_301_B b/geom_bottleneck/tests/data/test_301_B new file mode 100644 index 0000000..4d9ef19 --- /dev/null +++ b/geom_bottleneck/tests/data/test_301_B @@ -0,0 +1,30 @@ +5 15 +2 9 +3 4 +2 12 +10 17 +0 7 +5 8 +5 7 +7 16 +2 4 +4 8 +1 4 +5 15 +1 2 +2 12 +0 10 +9 10 +2 11 +7 8 +10 19 +1 11 +10 14 +8 11 +6 7 +3 7 +8 16 +3 11 +7 13 +5 10 +8 10 diff --git a/geom_bottleneck/tests/data/test_302_A b/geom_bottleneck/tests/data/test_302_A new file mode 100644 index 0000000..be0e810 --- /dev/null +++ b/geom_bottleneck/tests/data/test_302_A @@ -0,0 +1,30 @@ +7 13 +9 18 +1 11 +5 11 +2 3 +5 10 +1 3 +1 9 +7 11 +5 15 +4 5 +3 5 +9 13 +5 13 +10 14 +7 8 +10 19 +4 5 +2 12 +3 7 +3 4 +8 16 +6 16 +6 7 +6 11 +0 2 +0 8 +7 17 +9 17 +0 3 diff --git a/geom_bottleneck/tests/data/test_302_B b/geom_bottleneck/tests/data/test_302_B new file mode 100644 index 0000000..38806fc --- /dev/null +++ b/geom_bottleneck/tests/data/test_302_B @@ -0,0 +1,30 @@ +9 17 +3 4 +7 14 +1 6 +8 18 +2 8 +8 16 +9 19 +2 5 +10 18 +9 15 +5 13 +3 13 +7 8 +1 3 +9 10 +0 8 +6 14 +10 11 +4 14 +4 14 +4 8 +2 4 +1 9 +7 8 +6 13 +8 9 +5 11 +10 18 +7 10 diff --git a/geom_bottleneck/tests/data/test_303_A b/geom_bottleneck/tests/data/test_303_A new file mode 100644 index 0000000..b277929 --- /dev/null +++ b/geom_bottleneck/tests/data/test_303_A @@ -0,0 +1,30 @@ +4 10 +2 11 +1 5 +9 18 +9 16 +8 11 +9 13 +1 11 +1 11 +9 13 +6 10 +6 15 +0 2 +0 1 +6 10 +1 3 +0 6 +7 8 +3 6 +4 11 +7 14 +8 16 +6 7 +6 7 +6 11 +0 4 +7 12 +1 5 +2 8 +0 1 diff --git a/geom_bottleneck/tests/data/test_303_B b/geom_bottleneck/tests/data/test_303_B new file mode 100644 index 0000000..2cff171 --- /dev/null +++ b/geom_bottleneck/tests/data/test_303_B @@ -0,0 +1,30 @@ +7 8 +5 11 +8 15 +2 3 +10 11 +7 17 +0 10 +5 10 +6 8 +4 8 +7 8 +5 12 +8 15 +5 11 +4 9 +9 17 +7 13 +8 13 +6 7 +3 11 +1 6 +6 8 +1 8 +5 10 +9 19 +8 9 +7 17 +1 6 +10 13 +10 19 diff --git a/geom_bottleneck/tests/data/test_304_A b/geom_bottleneck/tests/data/test_304_A new file mode 100644 index 0000000..2c3de43 --- /dev/null +++ b/geom_bottleneck/tests/data/test_304_A @@ -0,0 +1,30 @@ +0 2 +8 14 +1 2 +0 8 +0 6 +4 8 +5 12 +3 4 +2 3 +0 6 +10 11 +0 4 +0 10 +9 16 +9 10 +5 6 +6 11 +8 9 +0 1 +6 13 +8 18 +4 10 +9 18 +1 6 +5 7 +1 8 +9 13 +5 12 +4 5 +7 8 diff --git a/geom_bottleneck/tests/data/test_304_B b/geom_bottleneck/tests/data/test_304_B new file mode 100644 index 0000000..24402f6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_304_B @@ -0,0 +1,30 @@ +5 15 +2 7 +8 13 +4 5 +2 3 +6 9 +8 12 +8 12 +9 18 +10 12 +3 8 +5 9 +2 12 +9 19 +6 13 +6 12 +10 14 +0 2 +2 3 +1 10 +8 13 +10 20 +3 5 +1 8 +0 6 +2 3 +8 9 +5 6 +9 17 +6 9 diff --git a/geom_bottleneck/tests/data/test_305_A b/geom_bottleneck/tests/data/test_305_A new file mode 100644 index 0000000..aa88ed8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_305_A @@ -0,0 +1,30 @@ +1 5 +6 7 +7 15 +4 11 +9 12 +8 10 +4 7 +10 17 +9 10 +7 15 +4 7 +8 12 +9 10 +10 15 +1 5 +4 5 +2 10 +2 3 +4 14 +8 17 +1 10 +7 10 +2 4 +6 15 +8 10 +10 20 +3 7 +2 4 +6 10 +2 5 diff --git a/geom_bottleneck/tests/data/test_305_B b/geom_bottleneck/tests/data/test_305_B new file mode 100644 index 0000000..8edd827 --- /dev/null +++ b/geom_bottleneck/tests/data/test_305_B @@ -0,0 +1,30 @@ +8 13 +10 11 +0 1 +8 13 +2 3 +9 10 +0 4 +3 9 +8 11 +7 12 +3 8 +8 10 +10 14 +2 4 +1 7 +7 10 +6 7 +7 17 +6 14 +0 6 +8 17 +9 14 +2 7 +0 2 +3 12 +7 16 +10 16 +9 13 +8 13 +1 2 diff --git a/geom_bottleneck/tests/data/test_306_A b/geom_bottleneck/tests/data/test_306_A new file mode 100644 index 0000000..8baa725 --- /dev/null +++ b/geom_bottleneck/tests/data/test_306_A @@ -0,0 +1,30 @@ +3 13 +1 8 +7 14 +5 7 +0 1 +10 17 +5 8 +4 5 +6 8 +9 10 +3 10 +9 15 +8 18 +8 14 +5 15 +8 13 +8 9 +7 13 +1 8 +7 13 +3 9 +6 12 +6 9 +2 7 +7 10 +3 9 +8 13 +5 14 +10 11 +2 6 diff --git a/geom_bottleneck/tests/data/test_306_B b/geom_bottleneck/tests/data/test_306_B new file mode 100644 index 0000000..b33f874 --- /dev/null +++ b/geom_bottleneck/tests/data/test_306_B @@ -0,0 +1,30 @@ +8 10 +8 12 +6 9 +9 11 +5 7 +2 12 +0 9 +10 13 +0 1 +3 13 +1 6 +0 4 +2 12 +4 10 +10 14 +4 5 +9 10 +1 6 +4 12 +4 7 +4 13 +0 5 +10 17 +3 5 +2 3 +5 6 +7 11 +10 12 +2 9 +6 8 diff --git a/geom_bottleneck/tests/data/test_307_A b/geom_bottleneck/tests/data/test_307_A new file mode 100644 index 0000000..bce4bc1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_307_A @@ -0,0 +1,30 @@ +0 1 +9 18 +5 7 +2 7 +2 8 +10 17 +9 16 +9 16 +1 6 +7 15 +5 10 +1 2 +8 14 +0 1 +5 6 +2 8 +3 4 +5 12 +4 6 +5 12 +7 11 +8 9 +3 10 +6 13 +0 7 +0 4 +7 16 +10 16 +8 12 +6 8 diff --git a/geom_bottleneck/tests/data/test_307_B b/geom_bottleneck/tests/data/test_307_B new file mode 100644 index 0000000..fd4fcb5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_307_B @@ -0,0 +1,30 @@ +2 5 +3 9 +0 10 +10 14 +4 9 +0 1 +1 9 +3 13 +4 5 +10 16 +5 8 +8 15 +0 5 +0 9 +9 11 +2 3 +10 20 +8 9 +7 15 +4 13 +1 9 +5 8 +7 17 +3 5 +10 16 +2 11 +4 6 +3 7 +7 15 +5 10 diff --git a/geom_bottleneck/tests/data/test_308_A b/geom_bottleneck/tests/data/test_308_A new file mode 100644 index 0000000..55ab2aa --- /dev/null +++ b/geom_bottleneck/tests/data/test_308_A @@ -0,0 +1,30 @@ +3 5 +6 16 +0 3 +0 10 +6 7 +2 6 +7 12 +0 7 +6 9 +6 12 +0 4 +3 12 +2 10 +5 8 +10 16 +8 12 +0 8 +2 3 +6 12 +7 8 +0 4 +2 9 +0 8 +4 7 +10 16 +6 8 +9 14 +6 9 +0 1 +0 1 diff --git a/geom_bottleneck/tests/data/test_308_B b/geom_bottleneck/tests/data/test_308_B new file mode 100644 index 0000000..cdf0c84 --- /dev/null +++ b/geom_bottleneck/tests/data/test_308_B @@ -0,0 +1,30 @@ +3 11 +1 4 +0 3 +9 15 +2 8 +6 12 +3 13 +0 4 +1 5 +8 18 +6 15 +0 5 +6 16 +4 6 +3 11 +4 5 +0 1 +0 10 +4 6 +0 1 +6 7 +6 7 +8 9 +7 13 +8 15 +3 4 +1 7 +4 13 +6 16 +3 12 diff --git a/geom_bottleneck/tests/data/test_309_A b/geom_bottleneck/tests/data/test_309_A new file mode 100644 index 0000000..20cee09 --- /dev/null +++ b/geom_bottleneck/tests/data/test_309_A @@ -0,0 +1,30 @@ +5 15 +2 4 +5 11 +3 13 +5 15 +8 13 +1 10 +2 10 +7 8 +0 7 +9 13 +10 13 +4 14 +0 3 +10 17 +2 7 +5 15 +1 10 +9 11 +7 10 +10 15 +5 7 +0 4 +0 8 +1 2 +8 16 +3 10 +8 16 +3 4 +5 6 diff --git a/geom_bottleneck/tests/data/test_309_B b/geom_bottleneck/tests/data/test_309_B new file mode 100644 index 0000000..86fe46e --- /dev/null +++ b/geom_bottleneck/tests/data/test_309_B @@ -0,0 +1,30 @@ +2 4 +9 17 +4 11 +3 9 +8 13 +6 7 +0 8 +10 15 +10 13 +7 12 +7 14 +9 10 +0 10 +6 7 +6 13 +2 4 +2 3 +6 10 +9 19 +7 17 +2 6 +3 10 +8 17 +8 13 +1 6 +6 16 +10 11 +7 9 +6 13 +9 15 diff --git a/geom_bottleneck/tests/data/test_310_A b/geom_bottleneck/tests/data/test_310_A new file mode 100644 index 0000000..320f176 --- /dev/null +++ b/geom_bottleneck/tests/data/test_310_A @@ -0,0 +1,30 @@ +7 12 +8 15 +10 13 +4 5 +10 12 +6 14 +5 7 +1 8 +10 19 +0 4 +0 5 +10 11 +3 12 +0 6 +8 11 +6 15 +10 16 +1 2 +8 10 +4 5 +10 17 +9 15 +7 9 +7 11 +5 11 +9 13 +0 3 +4 7 +3 4 +10 18 diff --git a/geom_bottleneck/tests/data/test_310_B b/geom_bottleneck/tests/data/test_310_B new file mode 100644 index 0000000..3bcf21c --- /dev/null +++ b/geom_bottleneck/tests/data/test_310_B @@ -0,0 +1,30 @@ +8 10 +1 11 +4 8 +4 14 +3 13 +1 5 +1 9 +3 8 +0 7 +9 10 +1 4 +0 1 +7 17 +6 9 +4 6 +6 9 +2 12 +2 10 +8 14 +7 13 +1 9 +8 14 +1 6 +3 11 +5 8 +5 12 +2 10 +0 6 +4 5 +3 13 diff --git a/geom_bottleneck/tests/data/test_311_A b/geom_bottleneck/tests/data/test_311_A new file mode 100644 index 0000000..d98eb28 --- /dev/null +++ b/geom_bottleneck/tests/data/test_311_A @@ -0,0 +1,30 @@ +2 11 +6 10 +1 4 +2 7 +2 3 +9 15 +2 3 +9 12 +2 3 +5 15 +9 17 +2 6 +0 8 +4 7 +0 5 +0 9 +7 12 +7 12 +9 12 +6 9 +7 16 +1 2 +0 8 +4 12 +2 11 +9 13 +2 7 +5 15 +5 6 +4 10 diff --git a/geom_bottleneck/tests/data/test_311_B b/geom_bottleneck/tests/data/test_311_B new file mode 100644 index 0000000..311ede4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_311_B @@ -0,0 +1,30 @@ +2 3 +7 15 +6 12 +10 18 +10 14 +10 11 +8 9 +1 9 +5 11 +0 1 +10 19 +8 14 +10 12 +8 13 +7 14 +3 5 +10 14 +8 17 +9 10 +7 16 +2 3 +1 7 +9 15 +8 12 +0 1 +6 11 +8 15 +8 13 +2 8 +3 12 diff --git a/geom_bottleneck/tests/data/test_312_A b/geom_bottleneck/tests/data/test_312_A new file mode 100644 index 0000000..2745003 --- /dev/null +++ b/geom_bottleneck/tests/data/test_312_A @@ -0,0 +1,30 @@ +7 12 +0 7 +4 14 +0 6 +10 11 +8 9 +5 14 +5 6 +9 12 +4 8 +2 3 +1 4 +8 10 +2 8 +9 13 +7 12 +10 17 +1 2 +4 8 +3 5 +7 8 +1 5 +6 7 +7 16 +6 10 +10 17 +10 20 +2 5 +4 13 +2 9 diff --git a/geom_bottleneck/tests/data/test_312_B b/geom_bottleneck/tests/data/test_312_B new file mode 100644 index 0000000..4a7645b --- /dev/null +++ b/geom_bottleneck/tests/data/test_312_B @@ -0,0 +1,30 @@ +8 9 +4 10 +9 19 +5 13 +6 12 +4 6 +5 11 +5 6 +3 12 +7 10 +5 12 +7 8 +3 13 +5 14 +4 9 +6 15 +5 14 +4 13 +1 9 +5 13 +5 12 +1 10 +3 4 +7 13 +3 12 +7 11 +4 5 +7 9 +0 4 +0 9 diff --git a/geom_bottleneck/tests/data/test_313_A b/geom_bottleneck/tests/data/test_313_A new file mode 100644 index 0000000..db46821 --- /dev/null +++ b/geom_bottleneck/tests/data/test_313_A @@ -0,0 +1,30 @@ +8 14 +10 15 +7 16 +8 9 +1 10 +8 16 +0 10 +2 3 +4 8 +1 7 +2 6 +5 15 +0 7 +5 6 +0 9 +2 3 +5 6 +9 12 +3 7 +8 10 +10 17 +3 12 +10 13 +4 12 +2 8 +8 14 +6 10 +4 6 +0 7 +8 11 diff --git a/geom_bottleneck/tests/data/test_313_B b/geom_bottleneck/tests/data/test_313_B new file mode 100644 index 0000000..d387050 --- /dev/null +++ b/geom_bottleneck/tests/data/test_313_B @@ -0,0 +1,30 @@ +4 10 +4 11 +4 5 +2 8 +3 6 +1 5 +8 18 +1 4 +7 8 +5 8 +7 15 +10 18 +6 10 +9 17 +6 15 +0 7 +10 19 +8 10 +4 9 +5 14 +5 9 +4 5 +5 12 +5 9 +0 1 +7 9 +2 4 +0 7 +9 18 +8 11 diff --git a/geom_bottleneck/tests/data/test_314_A b/geom_bottleneck/tests/data/test_314_A new file mode 100644 index 0000000..03ad5db --- /dev/null +++ b/geom_bottleneck/tests/data/test_314_A @@ -0,0 +1,30 @@ +10 11 +10 11 +9 12 +2 11 +8 17 +3 10 +8 10 +10 14 +5 9 +5 6 +10 11 +9 17 +10 19 +3 8 +6 15 +10 20 +0 9 +8 12 +7 13 +4 6 +9 10 +6 15 +1 9 +3 9 +10 11 +10 15 +4 9 +8 13 +9 10 +6 9 diff --git a/geom_bottleneck/tests/data/test_314_B b/geom_bottleneck/tests/data/test_314_B new file mode 100644 index 0000000..eaa46d9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_314_B @@ -0,0 +1,30 @@ +10 20 +2 12 +8 13 +0 7 +6 7 +10 15 +10 20 +5 15 +7 8 +3 10 +5 7 +3 10 +0 4 +10 17 +4 9 +5 14 +9 16 +3 4 +6 7 +4 12 +4 10 +9 10 +0 10 +10 11 +1 6 +8 16 +7 16 +10 12 +6 13 +3 7 diff --git a/geom_bottleneck/tests/data/test_315_A b/geom_bottleneck/tests/data/test_315_A new file mode 100644 index 0000000..fa49507 --- /dev/null +++ b/geom_bottleneck/tests/data/test_315_A @@ -0,0 +1,30 @@ +9 16 +10 18 +6 7 +9 12 +1 5 +10 20 +9 14 +4 5 +7 13 +6 12 +1 9 +10 12 +5 8 +10 12 +7 16 +10 16 +1 9 +3 10 +1 4 +1 3 +0 6 +7 13 +1 2 +3 8 +6 13 +6 8 +3 10 +0 1 +9 18 +0 10 diff --git a/geom_bottleneck/tests/data/test_315_B b/geom_bottleneck/tests/data/test_315_B new file mode 100644 index 0000000..d5390e2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_315_B @@ -0,0 +1,30 @@ +1 2 +2 8 +0 2 +9 18 +1 11 +3 6 +6 7 +0 1 +8 14 +6 8 +5 6 +9 17 +5 6 +7 13 +7 9 +9 10 +7 15 +9 11 +3 4 +0 3 +8 16 +0 10 +8 15 +1 11 +8 16 +1 6 +9 17 +10 19 +7 10 +7 9 diff --git a/geom_bottleneck/tests/data/test_316_A b/geom_bottleneck/tests/data/test_316_A new file mode 100644 index 0000000..57ff91f --- /dev/null +++ b/geom_bottleneck/tests/data/test_316_A @@ -0,0 +1,30 @@ +6 16 +4 10 +6 10 +8 11 +1 2 +0 5 +7 16 +4 9 +9 11 +0 2 +0 7 +10 18 +3 6 +9 15 +8 15 +5 9 +7 17 +5 12 +9 19 +10 20 +1 2 +1 11 +3 4 +6 15 +10 18 +3 11 +10 19 +5 6 +1 5 +3 12 diff --git a/geom_bottleneck/tests/data/test_316_B b/geom_bottleneck/tests/data/test_316_B new file mode 100644 index 0000000..407332e --- /dev/null +++ b/geom_bottleneck/tests/data/test_316_B @@ -0,0 +1,30 @@ +4 7 +10 11 +3 4 +2 12 +3 4 +8 13 +3 4 +3 11 +10 11 +9 17 +5 12 +6 14 +10 17 +8 12 +8 9 +4 6 +10 14 +4 11 +5 10 +5 14 +6 7 +0 1 +8 13 +8 12 +3 8 +0 9 +7 8 +8 13 +10 11 +3 7 diff --git a/geom_bottleneck/tests/data/test_317_A b/geom_bottleneck/tests/data/test_317_A new file mode 100644 index 0000000..4b6204e --- /dev/null +++ b/geom_bottleneck/tests/data/test_317_A @@ -0,0 +1,30 @@ +5 6 +1 6 +6 10 +8 16 +7 15 +2 4 +8 17 +5 12 +0 2 +7 17 +2 11 +0 2 +8 10 +8 9 +0 8 +5 10 +2 9 +3 6 +8 9 +9 17 +4 12 +7 9 +1 11 +2 10 +9 19 +10 13 +7 10 +5 8 +5 8 +2 5 diff --git a/geom_bottleneck/tests/data/test_317_B b/geom_bottleneck/tests/data/test_317_B new file mode 100644 index 0000000..b30729a --- /dev/null +++ b/geom_bottleneck/tests/data/test_317_B @@ -0,0 +1,30 @@ +4 9 +0 7 +10 11 +4 5 +2 11 +4 9 +7 17 +7 14 +10 18 +2 6 +2 8 +2 7 +1 11 +5 14 +2 3 +6 9 +2 12 +1 4 +5 6 +5 11 +8 17 +4 12 +3 8 +1 4 +9 13 +0 7 +3 9 +3 4 +5 6 +3 11 diff --git a/geom_bottleneck/tests/data/test_318_A b/geom_bottleneck/tests/data/test_318_A new file mode 100644 index 0000000..2ea4ad5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_318_A @@ -0,0 +1,30 @@ +4 13 +0 5 +5 12 +3 8 +9 17 +6 16 +7 8 +9 14 +9 19 +6 15 +2 8 +1 2 +10 18 +5 11 +5 6 +8 10 +3 7 +1 11 +9 12 +8 9 +10 20 +2 6 +8 16 +9 19 +10 11 +7 11 +9 10 +8 18 +6 14 +2 4 diff --git a/geom_bottleneck/tests/data/test_318_B b/geom_bottleneck/tests/data/test_318_B new file mode 100644 index 0000000..64fd49d --- /dev/null +++ b/geom_bottleneck/tests/data/test_318_B @@ -0,0 +1,30 @@ +10 13 +6 16 +3 11 +10 20 +1 9 +1 10 +4 5 +5 10 +10 11 +1 8 +7 9 +10 11 +4 10 +0 8 +4 13 +7 9 +7 9 +7 15 +9 17 +2 11 +0 1 +6 13 +1 2 +10 13 +10 18 +7 12 +8 15 +4 10 +5 13 +3 11 diff --git a/geom_bottleneck/tests/data/test_319_A b/geom_bottleneck/tests/data/test_319_A new file mode 100644 index 0000000..f7ffeda --- /dev/null +++ b/geom_bottleneck/tests/data/test_319_A @@ -0,0 +1,30 @@ +8 12 +6 14 +2 8 +9 18 +10 16 +8 17 +5 15 +6 7 +1 7 +6 7 +7 9 +9 10 +4 9 +9 14 +6 11 +7 8 +8 14 +6 7 +5 14 +2 10 +0 1 +0 6 +4 5 +1 5 +4 13 +6 14 +5 14 +9 11 +0 7 +3 6 diff --git a/geom_bottleneck/tests/data/test_319_B b/geom_bottleneck/tests/data/test_319_B new file mode 100644 index 0000000..5529fa0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_319_B @@ -0,0 +1,30 @@ +6 7 +5 6 +4 5 +0 4 +5 6 +9 11 +1 2 +8 16 +4 9 +8 10 +7 9 +4 5 +5 15 +0 7 +8 14 +10 15 +5 7 +1 6 +5 6 +5 11 +1 10 +0 5 +5 15 +5 10 +0 2 +10 13 +0 9 +3 9 +10 11 +1 10 diff --git a/geom_bottleneck/tests/data/test_320_A b/geom_bottleneck/tests/data/test_320_A new file mode 100644 index 0000000..c7c7380 --- /dev/null +++ b/geom_bottleneck/tests/data/test_320_A @@ -0,0 +1,50 @@ +5 6 +0 6 +6 10 +5 10 +0 9 +0 4 +10 11 +7 13 +0 2 +4 8 +1 2 +4 13 +8 15 +1 7 +3 4 +5 14 +0 6 +7 16 +2 12 +3 11 +0 1 +3 4 +10 16 +3 8 +0 3 +1 9 +9 14 +5 6 +1 11 +6 9 +6 12 +0 6 +9 13 +4 8 +8 10 +4 9 +7 15 +5 7 +1 2 +8 15 +5 6 +6 12 +0 7 +0 9 +5 12 +1 3 +5 7 +4 12 +7 14 +9 16 diff --git a/geom_bottleneck/tests/data/test_320_B b/geom_bottleneck/tests/data/test_320_B new file mode 100644 index 0000000..2807b27 --- /dev/null +++ b/geom_bottleneck/tests/data/test_320_B @@ -0,0 +1,50 @@ +9 17 +7 13 +7 14 +7 10 +7 12 +2 10 +8 9 +0 1 +0 10 +0 8 +1 4 +2 11 +4 13 +8 13 +4 11 +1 5 +5 6 +2 4 +9 17 +5 15 +5 8 +7 9 +8 14 +9 10 +5 13 +8 13 +8 17 +1 11 +4 7 +3 10 +3 8 +10 20 +7 8 +10 15 +3 5 +8 12 +1 2 +7 16 +7 17 +1 10 +2 8 +4 12 +9 15 +5 7 +4 8 +5 14 +6 15 +7 16 +2 8 +5 14 diff --git a/geom_bottleneck/tests/data/test_321_A b/geom_bottleneck/tests/data/test_321_A new file mode 100644 index 0000000..b24cee9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_321_A @@ -0,0 +1,50 @@ +1 6 +1 7 +1 2 +4 13 +8 15 +1 10 +10 17 +7 17 +0 6 +7 15 +7 13 +9 14 +9 16 +7 12 +5 8 +6 16 +1 3 +8 13 +2 6 +2 10 +2 11 +0 1 +7 15 +4 6 +10 14 +9 10 +0 3 +9 10 +3 9 +7 10 +5 6 +8 18 +2 9 +9 17 +7 12 +9 18 +2 5 +6 8 +7 14 +9 13 +8 16 +9 19 +2 11 +9 16 +6 7 +5 6 +9 17 +8 15 +3 4 +7 14 diff --git a/geom_bottleneck/tests/data/test_321_B b/geom_bottleneck/tests/data/test_321_B new file mode 100644 index 0000000..be6f00b --- /dev/null +++ b/geom_bottleneck/tests/data/test_321_B @@ -0,0 +1,50 @@ +3 8 +8 13 +10 11 +9 11 +10 18 +3 10 +5 10 +9 18 +5 11 +5 7 +9 15 +10 13 +5 7 +6 14 +10 17 +4 10 +10 12 +10 17 +6 16 +3 8 +5 13 +9 12 +9 10 +10 12 +9 14 +7 16 +7 16 +10 14 +7 14 +3 4 +3 4 +8 18 +9 14 +5 9 +2 12 +9 17 +0 7 +2 4 +10 11 +7 14 +0 8 +1 9 +5 6 +2 4 +5 8 +3 12 +3 5 +1 5 +0 6 +4 14 diff --git a/geom_bottleneck/tests/data/test_322_A b/geom_bottleneck/tests/data/test_322_A new file mode 100644 index 0000000..18eed8e --- /dev/null +++ b/geom_bottleneck/tests/data/test_322_A @@ -0,0 +1,50 @@ +8 12 +6 11 +2 8 +0 2 +5 14 +6 8 +1 3 +5 9 +5 10 +6 13 +3 6 +10 14 +2 10 +8 11 +3 13 +3 8 +0 10 +0 3 +8 11 +2 12 +1 2 +10 11 +1 2 +7 16 +1 4 +8 11 +5 7 +8 17 +5 11 +3 8 +5 10 +1 4 +3 5 +4 5 +7 10 +4 13 +1 7 +0 1 +0 7 +6 16 +8 16 +4 11 +2 3 +10 13 +2 8 +7 9 +5 6 +4 10 +1 10 +0 7 diff --git a/geom_bottleneck/tests/data/test_322_B b/geom_bottleneck/tests/data/test_322_B new file mode 100644 index 0000000..f829c84 --- /dev/null +++ b/geom_bottleneck/tests/data/test_322_B @@ -0,0 +1,50 @@ +1 9 +1 8 +6 12 +8 18 +9 17 +5 7 +3 8 +10 11 +10 19 +8 14 +6 8 +6 13 +3 5 +7 16 +0 5 +1 10 +1 2 +0 2 +6 7 +8 17 +4 12 +0 3 +6 8 +0 6 +9 10 +10 11 +8 15 +4 7 +1 11 +7 10 +3 11 +6 16 +2 7 +8 9 +10 18 +0 5 +1 4 +10 12 +3 9 +7 8 +10 14 +7 14 +6 13 +9 16 +5 15 +0 2 +5 12 +9 10 +2 10 +6 7 diff --git a/geom_bottleneck/tests/data/test_323_A b/geom_bottleneck/tests/data/test_323_A new file mode 100644 index 0000000..c452dff --- /dev/null +++ b/geom_bottleneck/tests/data/test_323_A @@ -0,0 +1,50 @@ +2 3 +8 16 +7 16 +7 8 +10 11 +2 12 +5 13 +5 14 +9 10 +7 8 +2 12 +0 9 +1 11 +6 12 +9 19 +6 12 +8 10 +7 10 +10 19 +0 2 +6 12 +2 11 +9 10 +0 9 +9 15 +4 11 +2 5 +4 10 +5 10 +0 7 +8 14 +1 4 +9 16 +1 10 +10 12 +3 10 +2 5 +2 12 +10 15 +0 7 +9 14 +7 8 +5 6 +8 18 +0 5 +0 10 +5 13 +7 11 +9 19 +4 11 diff --git a/geom_bottleneck/tests/data/test_323_B b/geom_bottleneck/tests/data/test_323_B new file mode 100644 index 0000000..4a7c144 --- /dev/null +++ b/geom_bottleneck/tests/data/test_323_B @@ -0,0 +1,50 @@ +3 4 +3 12 +0 3 +0 5 +2 4 +5 8 +5 10 +8 18 +6 15 +1 9 +8 15 +5 11 +8 13 +4 6 +9 18 +3 4 +10 18 +2 11 +3 10 +3 4 +9 12 +6 13 +7 15 +7 11 +6 9 +3 11 +8 11 +8 13 +9 14 +5 14 +1 7 +6 14 +0 1 +10 17 +0 3 +10 13 +0 1 +3 4 +1 7 +4 6 +7 14 +2 12 +8 10 +3 8 +8 18 +8 18 +8 14 +5 9 +10 18 +5 7 diff --git a/geom_bottleneck/tests/data/test_324_A b/geom_bottleneck/tests/data/test_324_A new file mode 100644 index 0000000..330da65 --- /dev/null +++ b/geom_bottleneck/tests/data/test_324_A @@ -0,0 +1,50 @@ +0 3 +8 9 +4 7 +1 5 +4 5 +5 7 +5 11 +5 9 +2 4 +9 16 +9 15 +7 13 +5 10 +3 11 +8 12 +8 14 +4 7 +6 9 +5 12 +7 11 +4 9 +8 18 +8 13 +3 9 +5 12 +3 12 +3 4 +2 3 +9 17 +0 7 +4 8 +5 13 +1 4 +1 4 +5 6 +3 12 +3 4 +8 14 +3 13 +7 10 +3 4 +9 15 +4 10 +9 17 +5 8 +2 6 +2 9 +1 3 +6 12 +0 2 diff --git a/geom_bottleneck/tests/data/test_324_B b/geom_bottleneck/tests/data/test_324_B new file mode 100644 index 0000000..4fb3fef --- /dev/null +++ b/geom_bottleneck/tests/data/test_324_B @@ -0,0 +1,50 @@ +3 9 +2 3 +5 12 +1 8 +5 10 +3 5 +1 2 +6 13 +10 17 +5 14 +7 13 +2 6 +4 5 +2 12 +3 12 +4 9 +7 14 +5 7 +6 7 +4 7 +1 9 +4 13 +10 19 +2 11 +3 9 +10 16 +2 7 +3 5 +5 12 +7 14 +0 10 +4 5 +8 18 +1 5 +7 14 +4 13 +4 7 +6 9 +6 12 +2 11 +4 12 +4 5 +7 17 +8 13 +3 4 +2 6 +6 14 +5 6 +5 6 +6 13 diff --git a/geom_bottleneck/tests/data/test_325_A b/geom_bottleneck/tests/data/test_325_A new file mode 100644 index 0000000..0e38bad --- /dev/null +++ b/geom_bottleneck/tests/data/test_325_A @@ -0,0 +1,50 @@ +6 9 +5 6 +7 17 +4 13 +6 12 +3 9 +3 9 +2 11 +0 3 +4 5 +6 11 +6 7 +8 12 +4 5 +10 11 +9 10 +0 3 +4 6 +0 8 +6 13 +8 12 +7 14 +0 1 +0 1 +8 9 +9 14 +10 12 +3 6 +4 5 +5 13 +10 13 +8 16 +8 16 +2 6 +3 4 +8 16 +2 6 +8 17 +7 11 +0 2 +5 12 +5 9 +5 12 +1 11 +3 10 +5 12 +5 7 +4 5 +4 6 +4 11 diff --git a/geom_bottleneck/tests/data/test_325_B b/geom_bottleneck/tests/data/test_325_B new file mode 100644 index 0000000..807bb12 --- /dev/null +++ b/geom_bottleneck/tests/data/test_325_B @@ -0,0 +1,50 @@ +6 12 +6 12 +5 13 +10 13 +9 16 +4 11 +9 15 +1 9 +2 3 +9 19 +5 8 +10 11 +9 15 +10 13 +9 15 +6 10 +1 5 +9 12 +5 11 +5 8 +10 19 +9 13 +2 3 +7 10 +6 8 +5 12 +7 16 +2 12 +2 6 +10 15 +0 1 +2 10 +10 11 +0 6 +6 13 +3 13 +8 12 +10 11 +10 14 +4 13 +6 13 +0 4 +9 15 +5 15 +6 13 +9 10 +10 15 +2 10 +6 16 +1 9 diff --git a/geom_bottleneck/tests/data/test_326_A b/geom_bottleneck/tests/data/test_326_A new file mode 100644 index 0000000..2cb897b --- /dev/null +++ b/geom_bottleneck/tests/data/test_326_A @@ -0,0 +1,50 @@ +10 12 +3 12 +0 1 +2 7 +3 9 +6 14 +9 19 +3 7 +8 10 +1 2 +4 7 +1 4 +5 6 +10 16 +6 11 +4 9 +5 10 +5 6 +5 10 +3 6 +6 15 +3 7 +9 19 +4 6 +9 19 +4 13 +8 18 +10 12 +9 13 +1 3 +9 16 +9 10 +5 10 +6 12 +8 10 +3 9 +1 8 +7 8 +7 11 +9 13 +0 1 +9 12 +5 14 +10 13 +1 4 +0 8 +9 19 +4 11 +4 13 +7 11 diff --git a/geom_bottleneck/tests/data/test_326_B b/geom_bottleneck/tests/data/test_326_B new file mode 100644 index 0000000..6b37e39 --- /dev/null +++ b/geom_bottleneck/tests/data/test_326_B @@ -0,0 +1,50 @@ +1 8 +6 14 +7 9 +5 14 +8 12 +9 19 +0 5 +0 2 +9 10 +2 3 +4 9 +9 10 +9 10 +7 15 +1 4 +1 6 +9 16 +8 12 +2 9 +9 15 +7 8 +7 13 +0 1 +4 14 +7 17 +4 10 +7 12 +9 10 +5 12 +4 9 +7 8 +3 10 +10 11 +9 19 +1 2 +5 13 +6 13 +6 11 +6 8 +2 9 +5 9 +4 12 +10 18 +5 9 +9 12 +1 11 +7 8 +3 5 +7 17 +3 9 diff --git a/geom_bottleneck/tests/data/test_327_A b/geom_bottleneck/tests/data/test_327_A new file mode 100644 index 0000000..0d54292 --- /dev/null +++ b/geom_bottleneck/tests/data/test_327_A @@ -0,0 +1,50 @@ +8 17 +4 7 +1 11 +9 10 +4 7 +0 9 +10 13 +5 7 +2 6 +7 9 +8 9 +5 8 +4 5 +3 9 +5 13 +10 17 +1 4 +7 15 +1 6 +10 17 +3 11 +10 11 +1 6 +3 12 +5 10 +8 14 +2 11 +6 11 +9 14 +7 16 +1 9 +8 9 +0 5 +4 13 +4 5 +1 3 +10 17 +10 13 +7 11 +4 9 +7 8 +7 15 +0 10 +3 4 +2 3 +6 16 +10 18 +6 13 +9 11 +6 16 diff --git a/geom_bottleneck/tests/data/test_327_B b/geom_bottleneck/tests/data/test_327_B new file mode 100644 index 0000000..548eb3f --- /dev/null +++ b/geom_bottleneck/tests/data/test_327_B @@ -0,0 +1,50 @@ +1 6 +10 11 +1 9 +6 10 +7 17 +9 11 +7 10 +6 10 +4 13 +7 17 +7 11 +3 4 +2 5 +0 8 +8 10 +7 9 +3 7 +4 12 +8 10 +4 6 +9 17 +1 2 +1 5 +6 11 +0 4 +5 8 +5 6 +7 13 +5 10 +4 5 +8 17 +10 12 +7 8 +3 13 +2 3 +3 9 +10 17 +0 1 +0 1 +9 16 +7 8 +3 4 +1 10 +4 13 +1 2 +9 10 +1 2 +5 14 +2 6 +1 5 diff --git a/geom_bottleneck/tests/data/test_328_A b/geom_bottleneck/tests/data/test_328_A new file mode 100644 index 0000000..810b747 --- /dev/null +++ b/geom_bottleneck/tests/data/test_328_A @@ -0,0 +1,50 @@ +2 11 +0 5 +2 6 +5 14 +1 10 +10 12 +0 1 +4 5 +1 2 +8 16 +8 9 +4 13 +2 3 +4 6 +4 14 +0 5 +5 15 +7 12 +5 8 +5 6 +10 15 +7 8 +3 9 +0 10 +4 5 +4 7 +1 9 +10 13 +0 1 +9 10 +2 9 +2 3 +8 16 +4 5 +9 11 +2 9 +7 14 +8 11 +5 8 +10 19 +4 7 +5 14 +0 5 +4 5 +2 5 +3 8 +10 20 +1 11 +4 14 +3 11 diff --git a/geom_bottleneck/tests/data/test_328_B b/geom_bottleneck/tests/data/test_328_B new file mode 100644 index 0000000..e781d51 --- /dev/null +++ b/geom_bottleneck/tests/data/test_328_B @@ -0,0 +1,50 @@ +3 10 +5 8 +4 10 +4 5 +4 11 +4 6 +0 5 +7 11 +6 16 +3 4 +7 14 +1 7 +10 11 +10 11 +2 3 +2 11 +9 12 +2 3 +5 6 +2 4 +2 8 +7 9 +10 14 +4 13 +2 9 +10 11 +6 13 +5 8 +1 8 +7 11 +7 8 +10 17 +9 10 +3 8 +2 4 +10 14 +4 9 +10 19 +9 11 +3 5 +10 20 +9 10 +3 6 +6 15 +6 14 +9 19 +9 11 +5 12 +3 8 +3 9 diff --git a/geom_bottleneck/tests/data/test_329_A b/geom_bottleneck/tests/data/test_329_A new file mode 100644 index 0000000..b02fd14 --- /dev/null +++ b/geom_bottleneck/tests/data/test_329_A @@ -0,0 +1,50 @@ +8 13 +4 13 +0 1 +6 12 +3 12 +0 1 +7 8 +4 12 +2 6 +7 11 +4 8 +3 5 +2 6 +5 12 +2 12 +1 10 +3 10 +2 3 +3 10 +3 4 +2 4 +7 8 +9 16 +3 5 +5 6 +6 11 +3 12 +2 4 +10 11 +8 11 +8 11 +2 9 +0 6 +4 7 +0 1 +2 3 +2 5 +8 16 +8 9 +2 11 +6 16 +6 12 +10 17 +6 11 +3 9 +2 9 +10 11 +9 12 +4 5 +2 6 diff --git a/geom_bottleneck/tests/data/test_329_B b/geom_bottleneck/tests/data/test_329_B new file mode 100644 index 0000000..0ca3fcd --- /dev/null +++ b/geom_bottleneck/tests/data/test_329_B @@ -0,0 +1,50 @@ +0 9 +5 6 +0 5 +9 12 +10 20 +9 12 +7 14 +9 19 +2 3 +5 14 +0 4 +2 3 +8 9 +0 5 +2 5 +9 10 +3 4 +1 7 +7 13 +10 13 +2 11 +9 18 +0 5 +5 13 +1 9 +10 19 +3 5 +2 6 +0 4 +8 13 +10 11 +5 13 +0 2 +0 1 +6 16 +5 8 +8 9 +2 10 +0 3 +4 14 +8 11 +7 14 +1 2 +1 3 +3 5 +3 10 +9 17 +3 6 +3 4 +1 10 diff --git a/geom_bottleneck/tests/data/test_330_A b/geom_bottleneck/tests/data/test_330_A new file mode 100644 index 0000000..4cdb2c9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_330_A @@ -0,0 +1,50 @@ +7 13 +2 8 +2 4 +5 15 +4 10 +9 17 +2 9 +9 12 +6 7 +6 7 +5 15 +4 5 +5 6 +4 6 +0 7 +4 7 +0 2 +8 18 +1 11 +10 11 +5 13 +3 5 +3 11 +0 1 +1 2 +10 14 +1 6 +2 3 +5 15 +3 13 +8 10 +6 15 +10 14 +3 10 +7 17 +4 14 +2 8 +10 11 +9 18 +10 15 +6 12 +4 8 +0 7 +9 11 +6 7 +1 8 +10 15 +0 6 +1 7 +7 16 diff --git a/geom_bottleneck/tests/data/test_330_B b/geom_bottleneck/tests/data/test_330_B new file mode 100644 index 0000000..01f1570 --- /dev/null +++ b/geom_bottleneck/tests/data/test_330_B @@ -0,0 +1,50 @@ +7 10 +4 5 +2 9 +1 2 +7 10 +4 6 +1 9 +6 16 +0 1 +9 14 +6 11 +10 16 +6 9 +0 6 +0 5 +10 12 +4 14 +7 8 +0 3 +9 18 +8 14 +4 7 +1 9 +2 5 +8 9 +9 10 +2 6 +1 11 +2 8 +4 10 +0 4 +2 9 +3 4 +0 10 +5 14 +4 12 +5 11 +4 7 +2 9 +7 16 +8 14 +8 12 +2 9 +4 11 +4 7 +0 1 +6 7 +5 6 +4 12 +2 4 diff --git a/geom_bottleneck/tests/data/test_331_A b/geom_bottleneck/tests/data/test_331_A new file mode 100644 index 0000000..a271a66 --- /dev/null +++ b/geom_bottleneck/tests/data/test_331_A @@ -0,0 +1,50 @@ +10 17 +0 8 +5 8 +10 11 +8 9 +10 13 +10 20 +6 7 +7 12 +0 8 +4 7 +0 10 +8 9 +1 9 +3 8 +10 12 +7 12 +9 18 +6 13 +3 9 +5 9 +6 7 +9 18 +10 17 +6 14 +4 8 +5 14 +10 17 +10 11 +7 16 +5 11 +8 10 +7 14 +6 8 +10 17 +7 8 +3 5 +0 2 +4 10 +8 9 +1 2 +3 12 +1 4 +2 6 +0 1 +0 10 +9 10 +5 6 +5 9 +10 15 diff --git a/geom_bottleneck/tests/data/test_331_B b/geom_bottleneck/tests/data/test_331_B new file mode 100644 index 0000000..72a1a7b --- /dev/null +++ b/geom_bottleneck/tests/data/test_331_B @@ -0,0 +1,50 @@ +5 6 +9 13 +9 17 +8 9 +8 18 +4 14 +8 9 +6 9 +1 5 +8 15 +6 7 +0 1 +5 12 +9 15 +10 16 +2 4 +3 6 +10 14 +10 13 +3 10 +7 13 +9 13 +6 16 +2 3 +6 10 +8 12 +0 9 +2 3 +5 13 +10 12 +1 5 +5 11 +2 6 +1 10 +7 11 +4 5 +5 14 +1 10 +10 15 +3 11 +2 6 +4 10 +6 13 +1 9 +3 10 +6 15 +2 8 +8 14 +4 7 +9 14 diff --git a/geom_bottleneck/tests/data/test_332_A b/geom_bottleneck/tests/data/test_332_A new file mode 100644 index 0000000..c1e999a --- /dev/null +++ b/geom_bottleneck/tests/data/test_332_A @@ -0,0 +1,50 @@ +5 13 +10 20 +4 5 +4 5 +3 13 +9 13 +6 8 +10 11 +3 8 +6 9 +4 5 +2 10 +10 17 +4 13 +8 12 +7 13 +2 4 +10 16 +3 11 +7 16 +5 6 +5 11 +3 6 +8 10 +2 3 +6 9 +1 3 +5 9 +7 16 +6 11 +4 14 +6 15 +10 18 +10 15 +1 10 +2 12 +6 14 +3 12 +0 5 +5 8 +4 14 +9 13 +7 14 +8 9 +8 17 +9 19 +6 15 +5 15 +1 8 +7 12 diff --git a/geom_bottleneck/tests/data/test_332_B b/geom_bottleneck/tests/data/test_332_B new file mode 100644 index 0000000..1f4686e --- /dev/null +++ b/geom_bottleneck/tests/data/test_332_B @@ -0,0 +1,50 @@ +10 11 +5 11 +0 10 +5 9 +4 7 +10 14 +7 12 +10 19 +1 7 +4 8 +3 12 +10 20 +0 3 +4 11 +8 11 +3 13 +0 9 +6 8 +4 12 +6 9 +5 8 +9 12 +7 12 +8 14 +6 11 +0 5 +4 7 +10 19 +9 10 +10 11 +4 8 +10 14 +2 11 +10 11 +3 5 +0 6 +10 20 +9 19 +5 14 +4 11 +7 9 +9 15 +2 3 +2 4 +8 14 +10 14 +9 16 +2 7 +9 17 +7 13 diff --git a/geom_bottleneck/tests/data/test_333_A b/geom_bottleneck/tests/data/test_333_A new file mode 100644 index 0000000..c1cc126 --- /dev/null +++ b/geom_bottleneck/tests/data/test_333_A @@ -0,0 +1,50 @@ +7 12 +4 10 +2 5 +3 12 +8 15 +0 9 +0 6 +9 12 +6 16 +10 18 +5 13 +10 11 +2 3 +9 14 +10 19 +2 11 +9 10 +5 15 +9 19 +1 2 +7 8 +1 5 +8 10 +8 9 +2 3 +7 8 +3 4 +2 6 +0 10 +10 17 +7 16 +6 8 +1 2 +9 10 +10 19 +4 5 +4 10 +2 4 +8 11 +2 7 +2 7 +0 5 +3 7 +7 16 +5 15 +4 11 +7 16 +0 6 +7 8 +1 2 diff --git a/geom_bottleneck/tests/data/test_333_B b/geom_bottleneck/tests/data/test_333_B new file mode 100644 index 0000000..fd22364 --- /dev/null +++ b/geom_bottleneck/tests/data/test_333_B @@ -0,0 +1,50 @@ +0 3 +10 20 +6 13 +9 16 +3 4 +4 13 +2 3 +3 8 +5 13 +10 11 +3 5 +3 5 +7 10 +1 4 +1 2 +8 18 +0 10 +6 16 +5 8 +7 15 +4 10 +1 11 +5 9 +5 13 +1 2 +1 9 +3 8 +6 16 +7 8 +0 8 +9 15 +4 5 +10 11 +0 5 +2 5 +1 8 +10 16 +2 9 +8 14 +6 10 +9 18 +7 8 +9 16 +4 12 +10 15 +3 10 +6 10 +2 5 +4 14 +3 4 diff --git a/geom_bottleneck/tests/data/test_334_A b/geom_bottleneck/tests/data/test_334_A new file mode 100644 index 0000000..914d6c3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_334_A @@ -0,0 +1,50 @@ +8 13 +10 20 +2 3 +7 15 +9 17 +2 12 +5 6 +2 5 +6 13 +10 20 +3 8 +1 9 +3 13 +10 11 +1 5 +7 11 +5 15 +5 6 +9 11 +3 5 +3 8 +6 16 +8 12 +4 7 +0 4 +8 12 +5 15 +9 14 +5 6 +3 4 +1 8 +2 7 +4 7 +8 18 +3 9 +0 5 +0 10 +8 10 +8 14 +3 13 +3 9 +9 17 +5 15 +7 16 +1 9 +0 2 +1 9 +9 12 +5 13 +9 19 diff --git a/geom_bottleneck/tests/data/test_334_B b/geom_bottleneck/tests/data/test_334_B new file mode 100644 index 0000000..27524b9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_334_B @@ -0,0 +1,50 @@ +10 11 +9 14 +2 11 +10 17 +9 15 +4 9 +7 16 +9 12 +8 12 +7 11 +6 16 +3 12 +0 4 +9 15 +3 10 +2 9 +2 3 +6 7 +3 9 +5 8 +6 8 +4 5 +9 14 +6 10 +1 10 +10 12 +8 10 +7 12 +3 9 +4 9 +4 11 +5 10 +9 11 +7 8 +6 16 +8 17 +9 14 +4 14 +2 4 +1 2 +9 11 +7 13 +9 10 +2 9 +2 12 +2 4 +9 16 +7 17 +3 11 +8 9 diff --git a/geom_bottleneck/tests/data/test_335_A b/geom_bottleneck/tests/data/test_335_A new file mode 100644 index 0000000..1a400bc --- /dev/null +++ b/geom_bottleneck/tests/data/test_335_A @@ -0,0 +1,50 @@ +0 2 +6 11 +7 11 +7 12 +7 11 +9 10 +6 14 +4 5 +5 7 +7 16 +2 3 +10 15 +10 19 +9 16 +6 15 +7 14 +8 18 +7 15 +8 14 +10 11 +10 11 +5 9 +0 10 +9 11 +9 19 +0 6 +2 10 +8 15 +1 7 +5 12 +3 4 +1 6 +0 2 +9 16 +9 19 +10 16 +6 9 +1 9 +6 7 +9 10 +8 14 +4 8 +9 10 +1 10 +5 6 +9 11 +7 16 +0 9 +7 13 +7 9 diff --git a/geom_bottleneck/tests/data/test_335_B b/geom_bottleneck/tests/data/test_335_B new file mode 100644 index 0000000..93c3211 --- /dev/null +++ b/geom_bottleneck/tests/data/test_335_B @@ -0,0 +1,50 @@ +8 14 +9 15 +6 11 +4 14 +2 3 +7 13 +5 11 +8 14 +1 8 +9 12 +0 10 +3 5 +10 11 +0 2 +5 13 +6 12 +8 11 +4 10 +5 14 +6 15 +9 19 +4 6 +4 5 +9 16 +5 9 +5 6 +7 14 +9 11 +9 18 +1 9 +1 4 +6 12 +2 10 +8 14 +1 11 +2 4 +9 16 +3 9 +2 11 +7 12 +6 9 +0 8 +9 17 +9 15 +10 12 +0 7 +6 9 +8 13 +10 18 +6 15 diff --git a/geom_bottleneck/tests/data/test_336_A b/geom_bottleneck/tests/data/test_336_A new file mode 100644 index 0000000..5410dc3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_336_A @@ -0,0 +1,50 @@ +4 7 +9 16 +2 5 +0 8 +0 9 +10 11 +7 11 +2 3 +6 13 +6 9 +2 8 +7 16 +2 6 +5 14 +6 9 +7 17 +1 8 +0 4 +7 13 +9 13 +10 16 +0 2 +7 16 +8 17 +7 11 +6 7 +2 12 +5 12 +9 17 +6 7 +1 5 +9 12 +7 10 +6 11 +7 16 +6 11 +6 7 +2 6 +1 8 +10 14 +5 6 +2 7 +5 6 +2 11 +8 10 +6 10 +3 12 +3 11 +8 12 +8 10 diff --git a/geom_bottleneck/tests/data/test_336_B b/geom_bottleneck/tests/data/test_336_B new file mode 100644 index 0000000..8b60a46 --- /dev/null +++ b/geom_bottleneck/tests/data/test_336_B @@ -0,0 +1,50 @@ +6 15 +8 10 +0 10 +5 10 +1 10 +8 17 +2 9 +7 9 +9 12 +7 8 +8 9 +7 8 +4 14 +10 17 +3 8 +2 7 +1 10 +6 13 +9 16 +6 13 +2 4 +4 12 +2 3 +3 10 +6 13 +6 11 +6 13 +9 17 +4 5 +0 1 +5 6 +0 7 +1 8 +5 9 +0 7 +0 3 +8 10 +4 6 +10 16 +1 9 +1 10 +7 12 +1 3 +6 10 +5 6 +9 10 +6 7 +5 7 +8 12 +0 9 diff --git a/geom_bottleneck/tests/data/test_337_A b/geom_bottleneck/tests/data/test_337_A new file mode 100644 index 0000000..652b5f1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_337_A @@ -0,0 +1,50 @@ +3 5 +1 2 +6 14 +10 18 +3 10 +1 11 +1 7 +2 11 +1 2 +0 7 +2 8 +9 14 +8 10 +1 3 +5 11 +7 8 +6 14 +8 17 +2 10 +7 15 +0 2 +4 12 +10 18 +10 11 +2 6 +3 9 +0 4 +5 15 +4 10 +8 14 +5 12 +10 11 +9 16 +9 14 +3 4 +3 5 +1 10 +3 4 +10 11 +1 6 +6 10 +1 8 +9 10 +1 6 +5 6 +5 6 +3 13 +10 19 +5 9 +4 12 diff --git a/geom_bottleneck/tests/data/test_337_B b/geom_bottleneck/tests/data/test_337_B new file mode 100644 index 0000000..eba21bc --- /dev/null +++ b/geom_bottleneck/tests/data/test_337_B @@ -0,0 +1,50 @@ +0 7 +2 4 +5 14 +7 8 +10 18 +4 13 +2 9 +8 16 +1 9 +5 9 +6 13 +0 1 +10 17 +4 9 +8 15 +1 9 +9 17 +5 14 +7 14 +5 12 +9 18 +8 15 +3 12 +7 17 +1 4 +5 7 +5 15 +3 6 +2 5 +1 2 +4 6 +6 15 +3 7 +4 5 +1 9 +7 8 +10 14 +9 18 +9 13 +9 11 +2 6 +8 10 +2 8 +0 9 +0 10 +1 5 +0 1 +6 9 +6 10 +0 3 diff --git a/geom_bottleneck/tests/data/test_338_A b/geom_bottleneck/tests/data/test_338_A new file mode 100644 index 0000000..567256f --- /dev/null +++ b/geom_bottleneck/tests/data/test_338_A @@ -0,0 +1,50 @@ +9 16 +3 6 +8 18 +7 15 +5 7 +8 14 +2 6 +10 12 +1 5 +5 8 +2 11 +1 3 +7 15 +5 13 +10 16 +1 11 +4 6 +7 8 +4 5 +5 11 +7 12 +6 12 +7 15 +8 16 +4 14 +1 6 +4 13 +3 12 +0 1 +3 6 +4 5 +4 11 +8 9 +0 7 +2 10 +9 17 +1 11 +5 9 +1 8 +10 11 +1 7 +6 8 +7 16 +1 4 +10 17 +2 8 +6 10 +10 14 +1 11 +5 15 diff --git a/geom_bottleneck/tests/data/test_338_B b/geom_bottleneck/tests/data/test_338_B new file mode 100644 index 0000000..82c3d80 --- /dev/null +++ b/geom_bottleneck/tests/data/test_338_B @@ -0,0 +1,50 @@ +1 2 +10 14 +5 6 +8 17 +9 17 +1 6 +4 10 +3 13 +7 15 +5 6 +8 10 +2 5 +3 13 +5 15 +2 4 +8 10 +2 9 +1 3 +6 12 +3 6 +2 12 +2 10 +3 11 +0 2 +4 12 +7 12 +3 5 +6 7 +9 17 +8 9 +3 12 +10 20 +2 10 +3 5 +2 11 +7 17 +3 12 +2 6 +9 11 +4 12 +0 8 +9 11 +1 4 +2 7 +7 16 +0 8 +4 13 +4 5 +8 14 +8 11 diff --git a/geom_bottleneck/tests/data/test_339_A b/geom_bottleneck/tests/data/test_339_A new file mode 100644 index 0000000..9148a9c --- /dev/null +++ b/geom_bottleneck/tests/data/test_339_A @@ -0,0 +1,50 @@ +3 4 +10 13 +6 8 +8 10 +2 3 +3 6 +10 19 +6 14 +6 9 +0 8 +5 7 +10 15 +9 17 +2 3 +9 14 +6 14 +1 11 +4 9 +2 3 +9 16 +6 11 +3 8 +6 9 +10 12 +1 3 +3 13 +7 14 +4 9 +8 11 +7 9 +1 2 +9 11 +8 17 +0 2 +9 19 +5 14 +6 8 +10 14 +7 13 +0 10 +4 5 +0 9 +2 9 +0 5 +9 15 +3 9 +3 7 +7 16 +1 2 +10 18 diff --git a/geom_bottleneck/tests/data/test_339_B b/geom_bottleneck/tests/data/test_339_B new file mode 100644 index 0000000..385967f --- /dev/null +++ b/geom_bottleneck/tests/data/test_339_B @@ -0,0 +1,50 @@ +2 9 +3 4 +1 5 +8 12 +8 12 +5 14 +4 9 +4 10 +5 8 +3 8 +9 10 +0 3 +1 10 +0 7 +6 13 +4 7 +10 20 +7 8 +5 8 +9 18 +1 6 +5 8 +4 8 +7 12 +7 17 +10 18 +9 10 +8 16 +8 13 +7 16 +9 18 +0 1 +7 8 +3 13 +3 4 +1 8 +6 14 +5 14 +3 6 +6 9 +7 15 +5 13 +6 15 +2 12 +9 19 +7 15 +0 4 +3 12 +9 11 +10 11 diff --git a/geom_bottleneck/tests/data/test_340_A b/geom_bottleneck/tests/data/test_340_A new file mode 100644 index 0000000..4af25b1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_340_A @@ -0,0 +1,100 @@ +0 5 +10 19 +1 4 +6 9 +1 6 +3 11 +4 10 +9 12 +1 10 +7 12 +8 11 +3 4 +8 18 +9 15 +0 2 +9 12 +1 6 +0 8 +4 5 +2 10 +0 2 +4 10 +6 7 +7 13 +2 3 +0 9 +5 6 +0 10 +5 7 +6 15 +9 15 +1 2 +2 3 +9 14 +8 18 +4 10 +7 15 +5 8 +3 11 +10 14 +4 12 +8 13 +8 17 +2 4 +0 9 +10 19 +3 4 +0 5 +8 15 +1 9 +8 11 +9 16 +0 1 +3 6 +4 6 +2 9 +3 9 +5 11 +1 8 +6 12 +10 19 +5 6 +3 12 +0 2 +9 17 +0 3 +0 4 +10 20 +8 14 +2 10 +3 7 +7 12 +2 4 +8 9 +1 7 +3 13 +1 5 +6 7 +10 13 +9 10 +6 15 +9 11 +0 10 +6 8 +8 9 +5 9 +10 16 +5 11 +7 13 +2 6 +2 3 +5 7 +4 10 +9 19 +7 10 +1 8 +2 9 +10 13 +10 12 +7 11 diff --git a/geom_bottleneck/tests/data/test_340_B b/geom_bottleneck/tests/data/test_340_B new file mode 100644 index 0000000..0e3fa2a --- /dev/null +++ b/geom_bottleneck/tests/data/test_340_B @@ -0,0 +1,100 @@ +7 11 +8 16 +1 4 +8 12 +9 19 +2 5 +2 8 +2 9 +0 4 +1 9 +5 7 +5 9 +10 14 +1 9 +3 10 +0 8 +10 11 +2 10 +2 11 +9 15 +0 1 +0 10 +3 10 +5 12 +5 12 +1 2 +7 12 +0 1 +1 4 +6 15 +1 5 +9 13 +9 17 +9 19 +8 9 +4 6 +1 10 +5 9 +2 3 +7 8 +1 5 +1 4 +8 9 +6 14 +2 9 +1 8 +4 10 +8 10 +1 11 +7 10 +8 13 +5 9 +9 19 +8 9 +3 6 +10 11 +7 8 +3 8 +6 9 +4 12 +10 19 +5 8 +1 9 +8 13 +2 4 +1 8 +7 16 +3 9 +0 3 +1 4 +8 17 +8 9 +5 12 +9 19 +2 8 +0 1 +1 2 +6 10 +1 7 +7 15 +4 8 +2 5 +3 13 +4 7 +9 12 +8 15 +10 12 +9 12 +5 13 +6 15 +1 3 +4 9 +9 16 +7 8 +2 12 +10 19 +1 9 +2 5 +5 6 +9 12 diff --git a/geom_bottleneck/tests/data/test_341_A b/geom_bottleneck/tests/data/test_341_A new file mode 100644 index 0000000..932688b --- /dev/null +++ b/geom_bottleneck/tests/data/test_341_A @@ -0,0 +1,100 @@ +6 15 +6 7 +3 11 +8 15 +2 10 +10 13 +6 16 +9 10 +8 15 +3 12 +10 14 +1 8 +8 17 +1 8 +4 10 +7 12 +1 10 +7 10 +8 18 +3 5 +1 3 +1 6 +0 3 +10 19 +8 18 +4 7 +1 3 +2 8 +1 10 +4 13 +10 13 +10 17 +0 4 +6 12 +4 5 +3 8 +2 4 +4 10 +5 11 +9 14 +5 15 +2 11 +4 12 +5 11 +7 16 +5 7 +4 7 +6 7 +2 6 +3 12 +10 15 +7 12 +1 9 +0 1 +5 8 +1 8 +5 12 +1 3 +2 3 +4 10 +2 10 +10 19 +2 3 +4 13 +10 14 +3 4 +0 10 +5 7 +10 11 +8 11 +6 11 +7 17 +3 4 +0 6 +9 11 +3 12 +5 12 +9 10 +6 8 +4 11 +3 7 +2 6 +9 10 +8 18 +10 11 +2 9 +4 9 +4 13 +0 5 +10 17 +5 6 +6 16 +0 3 +0 8 +5 15 +5 12 +3 10 +8 11 +10 17 +4 6 diff --git a/geom_bottleneck/tests/data/test_341_B b/geom_bottleneck/tests/data/test_341_B new file mode 100644 index 0000000..68cc4b9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_341_B @@ -0,0 +1,100 @@ +9 15 +10 18 +2 5 +5 7 +3 13 +6 13 +0 1 +2 12 +2 11 +3 4 +3 5 +1 9 +4 7 +10 12 +3 8 +9 17 +10 20 +5 7 +3 5 +9 18 +9 12 +3 5 +0 7 +1 2 +6 14 +7 8 +0 2 +3 11 +10 18 +7 10 +0 4 +10 11 +6 12 +8 16 +7 17 +0 8 +0 10 +9 16 +8 15 +5 6 +5 10 +4 8 +4 10 +1 11 +6 7 +6 9 +1 10 +3 5 +10 20 +10 11 +2 8 +10 13 +9 14 +8 11 +10 11 +7 16 +8 10 +8 17 +5 14 +0 7 +7 8 +4 8 +6 14 +2 5 +10 15 +2 10 +2 4 +8 13 +6 14 +2 3 +7 8 +8 13 +4 8 +1 6 +1 9 +0 1 +7 14 +10 11 +2 7 +5 15 +0 4 +1 7 +0 6 +6 13 +6 15 +1 2 +2 4 +8 9 +0 1 +3 4 +8 9 +9 11 +9 16 +8 17 +1 3 +8 10 +8 9 +8 15 +1 3 +7 16 diff --git a/geom_bottleneck/tests/data/test_342_A b/geom_bottleneck/tests/data/test_342_A new file mode 100644 index 0000000..04cdc19 --- /dev/null +++ b/geom_bottleneck/tests/data/test_342_A @@ -0,0 +1,100 @@ +4 8 +4 5 +1 9 +4 13 +2 10 +7 15 +6 7 +8 17 +1 8 +6 7 +9 19 +8 12 +10 18 +5 7 +8 13 +9 12 +9 14 +1 2 +7 11 +9 11 +6 15 +2 12 +6 10 +0 7 +1 10 +2 5 +8 11 +3 13 +3 11 +3 10 +6 14 +1 10 +4 6 +3 13 +5 10 +3 9 +9 16 +3 4 +0 2 +9 10 +10 16 +5 12 +6 11 +4 7 +9 18 +10 16 +5 7 +6 12 +0 7 +5 9 +8 18 +4 7 +2 6 +8 17 +7 10 +7 10 +6 11 +8 9 +3 7 +8 16 +4 9 +6 12 +0 6 +4 12 +10 15 +10 17 +10 20 +3 11 +2 12 +0 9 +3 12 +4 5 +5 7 +3 7 +0 4 +5 9 +1 7 +6 13 +9 13 +8 9 +0 6 +3 10 +1 11 +0 2 +0 6 +3 9 +2 7 +4 7 +8 14 +2 7 +2 4 +4 7 +1 7 +10 13 +6 16 +5 15 +7 17 +7 10 +3 5 +7 10 diff --git a/geom_bottleneck/tests/data/test_342_B b/geom_bottleneck/tests/data/test_342_B new file mode 100644 index 0000000..e6aae99 --- /dev/null +++ b/geom_bottleneck/tests/data/test_342_B @@ -0,0 +1,100 @@ +9 16 +6 15 +1 4 +0 1 +3 5 +2 3 +10 20 +3 7 +0 10 +3 13 +7 8 +4 6 +7 14 +8 9 +8 14 +10 20 +1 9 +4 14 +4 5 +2 6 +6 8 +1 10 +7 14 +8 10 +4 8 +7 8 +7 12 +6 16 +6 7 +9 19 +8 12 +1 9 +1 3 +10 16 +3 6 +2 8 +0 2 +7 15 +2 3 +8 13 +5 8 +1 2 +10 11 +4 11 +5 12 +10 15 +7 8 +2 5 +6 13 +8 17 +8 14 +4 8 +6 11 +5 6 +0 7 +0 5 +8 13 +1 2 +6 11 +6 11 +8 9 +4 5 +4 8 +0 5 +3 9 +1 3 +8 9 +10 16 +8 17 +8 17 +3 4 +3 5 +8 12 +9 10 +9 10 +8 14 +3 10 +5 9 +1 4 +9 19 +0 2 +7 8 +6 8 +7 12 +6 12 +0 1 +9 11 +3 11 +5 6 +0 8 +2 4 +1 7 +3 4 +0 3 +9 17 +2 9 +1 6 +2 6 +7 15 +1 4 diff --git a/geom_bottleneck/tests/data/test_343_A b/geom_bottleneck/tests/data/test_343_A new file mode 100644 index 0000000..9759369 --- /dev/null +++ b/geom_bottleneck/tests/data/test_343_A @@ -0,0 +1,100 @@ +5 13 +5 9 +2 3 +6 14 +1 2 +3 6 +1 3 +9 14 +0 6 +1 8 +9 10 +4 5 +10 19 +6 13 +7 8 +10 16 +6 7 +10 18 +8 11 +2 8 +8 9 +5 10 +1 2 +10 14 +10 12 +8 17 +7 12 +9 12 +1 5 +2 4 +8 13 +2 11 +0 5 +4 8 +2 12 +2 10 +6 15 +1 2 +8 11 +8 18 +8 9 +7 9 +5 7 +0 10 +4 10 +5 13 +8 16 +5 11 +8 16 +7 9 +2 11 +8 12 +8 10 +9 16 +7 8 +5 15 +0 1 +6 7 +7 8 +6 7 +7 13 +9 16 +9 15 +3 11 +4 10 +2 10 +3 13 +0 1 +7 10 +9 10 +8 10 +3 4 +1 4 +1 6 +4 7 +4 10 +6 11 +10 13 +7 10 +9 14 +9 15 +7 9 +3 10 +6 8 +5 15 +8 11 +7 14 +8 18 +9 13 +9 15 +10 17 +3 13 +5 7 +8 16 +4 12 +9 10 +6 12 +1 9 +0 6 +5 11 diff --git a/geom_bottleneck/tests/data/test_343_B b/geom_bottleneck/tests/data/test_343_B new file mode 100644 index 0000000..e338ab2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_343_B @@ -0,0 +1,100 @@ +2 12 +5 9 +5 6 +10 19 +2 6 +6 14 +8 18 +6 9 +2 10 +5 7 +0 6 +7 10 +7 14 +10 15 +10 16 +6 16 +7 16 +3 8 +2 4 +2 11 +10 19 +7 15 +8 9 +7 11 +10 20 +9 11 +3 6 +6 15 +5 14 +2 3 +1 3 +5 11 +3 8 +2 9 +1 3 +10 20 +6 11 +0 9 +6 9 +0 5 +9 10 +2 7 +8 14 +9 19 +2 7 +10 11 +0 6 +4 7 +10 16 +9 12 +7 16 +5 12 +1 8 +4 12 +1 2 +1 8 +9 13 +9 14 +8 9 +4 9 +4 11 +9 19 +5 15 +2 3 +9 10 +8 15 +7 8 +9 10 +5 12 +2 12 +0 1 +3 4 +3 5 +5 14 +10 18 +3 10 +0 1 +9 10 +4 6 +10 18 +9 17 +6 7 +8 15 +3 11 +7 8 +6 12 +5 11 +0 10 +5 8 +6 15 +6 13 +0 4 +4 13 +6 9 +0 1 +0 1 +3 10 +8 17 +0 8 +9 18 diff --git a/geom_bottleneck/tests/data/test_344_A b/geom_bottleneck/tests/data/test_344_A new file mode 100644 index 0000000..e8e81ab --- /dev/null +++ b/geom_bottleneck/tests/data/test_344_A @@ -0,0 +1,100 @@ +2 11 +2 7 +2 7 +1 11 +2 6 +0 9 +2 8 +2 12 +0 9 +5 10 +6 10 +2 4 +9 19 +0 6 +0 6 +9 18 +6 7 +3 13 +3 9 +1 4 +1 9 +1 11 +9 19 +8 9 +7 13 +5 13 +10 14 +10 12 +1 3 +10 17 +2 4 +8 9 +8 18 +7 15 +3 13 +10 19 +0 2 +0 10 +2 7 +5 6 +9 14 +0 4 +7 14 +10 11 +3 5 +0 2 +8 18 +4 5 +10 16 +9 18 +6 16 +4 8 +3 4 +2 7 +4 14 +4 10 +4 10 +10 14 +8 9 +7 16 +1 7 +4 14 +6 7 +3 4 +9 10 +2 3 +7 13 +10 13 +10 14 +3 8 +0 6 +3 4 +1 10 +6 12 +4 6 +3 9 +3 9 +5 11 +10 13 +2 5 +9 16 +4 14 +3 5 +0 1 +10 19 +9 16 +10 14 +0 4 +1 3 +6 8 +7 14 +1 11 +0 6 +1 5 +8 9 +8 11 +7 16 +10 11 +1 7 +2 12 diff --git a/geom_bottleneck/tests/data/test_344_B b/geom_bottleneck/tests/data/test_344_B new file mode 100644 index 0000000..af72be5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_344_B @@ -0,0 +1,100 @@ +10 11 +8 9 +3 12 +2 10 +1 6 +4 8 +8 11 +7 17 +8 18 +9 10 +5 6 +2 9 +8 10 +1 8 +3 13 +5 12 +8 14 +7 14 +2 12 +10 15 +0 7 +7 8 +8 17 +8 10 +4 8 +6 7 +6 8 +2 3 +5 15 +2 11 +10 18 +6 13 +1 2 +6 16 +2 8 +8 11 +9 18 +8 14 +6 16 +10 20 +8 9 +0 7 +1 5 +7 16 +10 17 +1 2 +2 5 +2 6 +3 4 +7 9 +5 8 +5 7 +5 7 +1 11 +7 10 +7 17 +7 14 +5 7 +10 20 +0 2 +5 9 +0 1 +4 12 +5 6 +5 6 +2 9 +0 10 +10 11 +2 7 +8 9 +5 6 +0 2 +4 10 +6 13 +5 15 +9 11 +3 9 +6 10 +0 4 +6 9 +6 16 +10 15 +6 16 +0 8 +4 12 +10 15 +6 11 +8 11 +8 9 +3 12 +4 11 +5 11 +10 14 +9 14 +3 12 +7 8 +2 7 +8 12 +8 9 +4 12 diff --git a/geom_bottleneck/tests/data/test_345_A b/geom_bottleneck/tests/data/test_345_A new file mode 100644 index 0000000..584e4ed --- /dev/null +++ b/geom_bottleneck/tests/data/test_345_A @@ -0,0 +1,100 @@ +2 6 +6 16 +7 11 +0 4 +4 5 +3 9 +9 10 +6 12 +1 3 +9 16 +6 15 +10 14 +4 6 +6 7 +1 7 +2 8 +3 10 +9 10 +0 10 +0 1 +10 11 +3 8 +4 10 +9 15 +6 9 +0 3 +1 7 +1 3 +4 5 +8 12 +2 3 +6 14 +8 14 +1 9 +10 17 +4 5 +3 7 +9 10 +4 7 +7 12 +10 11 +6 11 +0 7 +6 8 +5 15 +1 5 +7 11 +5 7 +10 11 +9 14 +0 3 +8 12 +10 20 +0 10 +5 14 +5 8 +9 10 +3 12 +0 8 +1 11 +3 6 +3 5 +10 14 +3 12 +5 9 +5 13 +6 16 +7 15 +9 17 +7 12 +1 10 +7 10 +6 8 +3 12 +4 12 +5 9 +1 7 +7 16 +8 10 +1 11 +2 11 +4 10 +7 8 +5 15 +2 5 +3 10 +8 12 +9 12 +2 3 +0 3 +10 12 +0 10 +10 14 +4 6 +10 11 +8 17 +6 8 +10 16 +9 18 +5 7 diff --git a/geom_bottleneck/tests/data/test_345_B b/geom_bottleneck/tests/data/test_345_B new file mode 100644 index 0000000..8c3e758 --- /dev/null +++ b/geom_bottleneck/tests/data/test_345_B @@ -0,0 +1,100 @@ +2 5 +8 13 +1 3 +4 13 +3 12 +1 9 +8 14 +4 13 +9 14 +8 14 +7 16 +8 14 +7 8 +0 9 +3 12 +9 14 +9 10 +2 3 +3 6 +6 15 +9 15 +6 12 +0 6 +9 12 +4 9 +5 14 +9 13 +8 9 +5 15 +2 7 +8 10 +0 2 +7 11 +5 10 +7 15 +5 6 +1 8 +7 9 +9 15 +3 10 +1 2 +3 6 +0 5 +6 16 +2 8 +9 10 +4 11 +2 3 +4 8 +5 11 +9 15 +2 7 +5 14 +10 18 +1 3 +9 14 +10 16 +3 8 +9 14 +1 3 +9 13 +2 7 +1 2 +7 13 +1 8 +2 5 +4 5 +3 5 +1 2 +10 13 +6 16 +10 15 +1 7 +10 12 +0 10 +7 12 +9 14 +4 5 +4 5 +6 9 +9 19 +5 12 +9 10 +9 19 +10 18 +8 11 +7 17 +0 3 +3 13 +3 11 +4 8 +6 11 +1 6 +0 9 +9 12 +8 13 +1 10 +7 13 +6 12 +4 8 diff --git a/geom_bottleneck/tests/data/test_346_A b/geom_bottleneck/tests/data/test_346_A new file mode 100644 index 0000000..ab26e2f --- /dev/null +++ b/geom_bottleneck/tests/data/test_346_A @@ -0,0 +1,100 @@ +10 11 +1 11 +1 9 +0 5 +1 3 +10 18 +0 5 +4 5 +1 8 +8 16 +5 6 +9 13 +6 13 +4 5 +7 14 +8 9 +4 5 +9 11 +6 9 +9 18 +10 15 +8 15 +10 12 +3 7 +10 14 +3 9 +10 12 +3 9 +0 10 +5 8 +7 17 +8 11 +6 7 +10 17 +0 8 +0 1 +0 9 +8 10 +7 15 +8 17 +0 4 +0 3 +10 11 +7 10 +4 13 +4 9 +3 4 +4 5 +4 12 +4 11 +5 11 +3 4 +10 16 +0 2 +0 6 +8 10 +9 11 +7 15 +7 9 +5 11 +9 15 +7 8 +7 16 +4 14 +2 3 +5 8 +2 3 +9 15 +8 15 +6 15 +1 6 +2 5 +4 13 +6 12 +7 8 +0 2 +8 14 +4 9 +10 11 +10 16 +3 10 +7 16 +9 13 +1 2 +7 12 +3 5 +5 6 +4 12 +9 11 +6 7 +2 8 +9 10 +7 8 +0 6 +1 2 +5 9 +3 10 +3 13 +2 9 +2 9 diff --git a/geom_bottleneck/tests/data/test_346_B b/geom_bottleneck/tests/data/test_346_B new file mode 100644 index 0000000..5e30972 --- /dev/null +++ b/geom_bottleneck/tests/data/test_346_B @@ -0,0 +1,100 @@ +8 15 +1 8 +10 15 +8 13 +9 16 +3 13 +3 5 +1 8 +8 16 +6 12 +7 16 +4 14 +3 9 +0 8 +9 18 +4 14 +1 10 +6 12 +4 5 +10 14 +3 6 +9 10 +1 4 +6 16 +8 17 +6 7 +0 5 +1 9 +3 7 +8 14 +9 17 +10 15 +3 10 +4 14 +9 10 +9 16 +4 9 +2 12 +4 5 +6 14 +3 12 +10 16 +10 14 +6 12 +2 11 +4 11 +1 10 +5 6 +3 13 +10 19 +4 8 +0 2 +7 9 +6 7 +10 12 +9 18 +2 8 +6 9 +2 6 +4 11 +9 18 +8 14 +10 16 +9 13 +4 5 +1 6 +9 15 +8 9 +10 14 +1 2 +9 17 +10 15 +5 8 +8 11 +8 9 +10 17 +2 4 +5 6 +1 4 +1 4 +5 15 +7 13 +6 12 +10 12 +7 13 +9 10 +5 9 +0 5 +1 7 +2 3 +9 14 +4 10 +8 9 +3 12 +2 3 +4 11 +10 20 +10 13 +3 9 +8 16 diff --git a/geom_bottleneck/tests/data/test_347_A b/geom_bottleneck/tests/data/test_347_A new file mode 100644 index 0000000..0cfd08b --- /dev/null +++ b/geom_bottleneck/tests/data/test_347_A @@ -0,0 +1,100 @@ +0 3 +9 14 +9 11 +1 3 +7 8 +4 12 +7 8 +10 20 +8 13 +2 5 +8 9 +5 14 +8 9 +5 11 +10 14 +7 15 +4 9 +4 10 +1 2 +2 6 +6 12 +0 1 +7 8 +10 13 +4 9 +0 3 +2 3 +0 4 +3 6 +7 13 +0 1 +10 13 +3 4 +1 2 +0 5 +9 12 +1 11 +8 17 +3 4 +3 7 +4 9 +1 2 +1 9 +4 14 +10 11 +3 11 +8 9 +2 6 +4 7 +8 13 +7 10 +0 1 +10 19 +7 13 +6 11 +1 10 +4 12 +9 14 +5 12 +3 13 +0 1 +2 3 +4 8 +5 11 +8 18 +5 6 +0 3 +0 3 +5 8 +10 11 +3 9 +0 4 +8 11 +5 14 +3 7 +9 10 +6 7 +8 14 +9 18 +6 11 +7 8 +6 10 +4 9 +4 9 +9 14 +6 13 +6 13 +10 17 +7 17 +8 15 +7 9 +4 9 +4 14 +0 1 +5 15 +4 8 +0 7 +4 5 +7 16 +4 9 diff --git a/geom_bottleneck/tests/data/test_347_B b/geom_bottleneck/tests/data/test_347_B new file mode 100644 index 0000000..66d57ea --- /dev/null +++ b/geom_bottleneck/tests/data/test_347_B @@ -0,0 +1,100 @@ +10 11 +6 15 +5 11 +8 9 +8 12 +4 7 +6 7 +6 11 +10 16 +6 15 +9 19 +7 16 +10 12 +0 1 +9 13 +9 10 +10 15 +6 10 +10 12 +7 10 +9 17 +2 3 +10 19 +2 3 +5 13 +7 9 +9 16 +9 18 +9 16 +4 10 +1 11 +6 7 +9 10 +6 7 +3 4 +8 15 +6 16 +8 9 +6 8 +8 10 +0 6 +7 9 +5 10 +3 6 +1 5 +6 7 +6 9 +4 13 +5 7 +8 17 +10 16 +9 19 +5 9 +2 3 +6 7 +7 16 +4 10 +3 10 +6 9 +3 11 +9 18 +7 15 +8 16 +6 9 +8 10 +6 10 +0 3 +1 2 +2 3 +5 11 +5 9 +1 11 +10 11 +0 10 +9 14 +1 5 +3 4 +3 10 +6 12 +0 7 +5 9 +9 12 +8 16 +7 12 +1 11 +9 11 +5 15 +10 19 +2 8 +5 15 +4 6 +3 10 +4 13 +0 9 +5 6 +6 10 +2 3 +3 12 +1 10 +6 7 diff --git a/geom_bottleneck/tests/data/test_348_A b/geom_bottleneck/tests/data/test_348_A new file mode 100644 index 0000000..8cef3ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_348_A @@ -0,0 +1,100 @@ +8 16 +2 7 +7 12 +0 9 +9 12 +8 18 +1 3 +2 6 +3 8 +2 6 +3 11 +5 10 +8 9 +0 7 +5 11 +3 10 +3 7 +2 12 +5 12 +6 12 +3 9 +2 9 +1 2 +9 12 +0 9 +9 16 +6 10 +6 10 +2 4 +2 10 +7 8 +8 15 +4 14 +3 5 +8 10 +7 9 +10 19 +8 16 +7 8 +3 4 +8 13 +3 13 +0 1 +7 16 +7 13 +0 7 +7 11 +3 10 +4 14 +4 7 +1 2 +10 13 +8 14 +5 15 +7 11 +6 14 +9 10 +6 15 +2 12 +4 13 +1 4 +6 11 +1 2 +2 7 +3 4 +3 4 +2 8 +2 10 +8 18 +9 12 +9 13 +8 9 +4 10 +5 6 +6 10 +8 9 +5 15 +3 7 +2 10 +1 5 +6 7 +4 5 +5 8 +10 17 +5 8 +10 19 +5 15 +3 10 +8 18 +0 2 +9 13 +2 11 +1 7 +4 12 +5 7 +4 10 +5 13 +3 4 +7 15 +0 1 diff --git a/geom_bottleneck/tests/data/test_348_B b/geom_bottleneck/tests/data/test_348_B new file mode 100644 index 0000000..5db1829 --- /dev/null +++ b/geom_bottleneck/tests/data/test_348_B @@ -0,0 +1,100 @@ +8 18 +0 10 +5 12 +5 13 +5 6 +7 14 +3 9 +2 7 +0 1 +4 11 +10 11 +10 17 +7 8 +5 6 +1 6 +10 15 +8 9 +8 11 +5 6 +7 9 +4 6 +10 13 +6 14 +1 2 +5 6 +7 15 +1 9 +10 12 +9 10 +4 9 +7 10 +7 9 +8 16 +1 9 +5 10 +10 17 +4 5 +8 10 +5 15 +7 14 +5 10 +1 11 +7 11 +8 16 +1 10 +10 17 +2 6 +7 12 +4 5 +2 6 +0 7 +2 9 +10 11 +10 20 +7 17 +9 17 +2 8 +7 11 +2 4 +2 7 +7 10 +10 16 +6 13 +1 3 +2 10 +9 19 +2 12 +6 12 +4 5 +9 17 +1 6 +0 1 +4 10 +8 12 +0 8 +10 19 +2 11 +3 4 +0 1 +1 9 +9 14 +4 8 +2 10 +0 3 +7 15 +8 12 +7 15 +5 7 +8 11 +5 12 +2 11 +9 14 +10 12 +1 11 +7 9 +10 11 +1 5 +2 8 +6 15 +1 5 diff --git a/geom_bottleneck/tests/data/test_349_A b/geom_bottleneck/tests/data/test_349_A new file mode 100644 index 0000000..a3d008e --- /dev/null +++ b/geom_bottleneck/tests/data/test_349_A @@ -0,0 +1,100 @@ +9 18 +5 7 +10 20 +5 6 +8 12 +5 6 +7 14 +9 17 +9 11 +6 7 +3 4 +1 2 +7 9 +1 8 +3 6 +10 13 +2 9 +9 10 +0 8 +3 12 +2 12 +0 6 +7 16 +8 16 +7 8 +10 12 +6 7 +10 13 +3 9 +2 3 +8 14 +4 8 +7 12 +6 12 +6 16 +1 8 +7 13 +2 10 +9 16 +3 10 +0 8 +10 11 +1 2 +5 12 +10 20 +3 10 +7 14 +2 12 +2 10 +4 7 +6 15 +6 7 +3 13 +5 12 +6 9 +5 6 +10 17 +6 7 +4 5 +10 11 +9 13 +6 14 +4 9 +4 7 +5 9 +6 11 +10 13 +5 15 +3 6 +1 7 +7 12 +6 7 +3 9 +5 9 +0 2 +10 14 +3 4 +6 16 +5 13 +2 7 +9 16 +0 6 +9 11 +0 3 +1 10 +3 6 +10 16 +4 10 +10 11 +9 14 +3 13 +0 3 +8 10 +8 18 +5 13 +5 11 +9 18 +1 3 +8 12 +5 6 diff --git a/geom_bottleneck/tests/data/test_349_B b/geom_bottleneck/tests/data/test_349_B new file mode 100644 index 0000000..d66b5eb --- /dev/null +++ b/geom_bottleneck/tests/data/test_349_B @@ -0,0 +1,100 @@ +8 9 +2 3 +7 8 +4 14 +8 15 +3 8 +5 9 +1 3 +7 9 +0 5 +6 11 +3 12 +9 12 +4 10 +7 8 +10 14 +4 9 +5 6 +3 8 +7 15 +2 9 +3 4 +8 14 +7 11 +5 6 +10 19 +8 13 +2 5 +0 9 +0 8 +8 13 +4 8 +10 17 +10 14 +8 17 +2 6 +9 10 +6 10 +8 9 +0 2 +10 18 +6 9 +10 17 +0 3 +8 13 +9 12 +4 5 +8 14 +9 10 +1 2 +2 10 +8 15 +3 12 +4 9 +5 12 +3 11 +2 6 +3 7 +2 4 +5 10 +10 13 +2 4 +4 5 +1 2 +2 8 +2 3 +5 10 +6 7 +9 18 +8 9 +7 12 +2 4 +7 9 +7 14 +8 10 +10 11 +8 13 +10 15 +6 12 +10 16 +9 12 +9 16 +1 5 +2 9 +6 8 +8 10 +0 1 +1 3 +10 11 +7 16 +5 9 +7 13 +7 15 +6 10 +1 4 +10 15 +2 7 +2 7 +8 9 +3 13 diff --git a/geom_bottleneck/tests/data/test_350_A b/geom_bottleneck/tests/data/test_350_A new file mode 100644 index 0000000..734d037 --- /dev/null +++ b/geom_bottleneck/tests/data/test_350_A @@ -0,0 +1,100 @@ +4 13 +9 10 +7 11 +3 10 +1 9 +3 4 +3 11 +7 13 +9 15 +7 8 +7 14 +0 10 +1 6 +7 10 +3 4 +1 2 +7 12 +7 17 +3 11 +4 9 +7 16 +10 11 +3 13 +3 7 +4 5 +3 7 +6 9 +9 10 +0 8 +9 16 +10 13 +5 13 +3 8 +6 9 +10 11 +9 16 +10 11 +5 15 +9 13 +0 1 +10 17 +1 2 +10 20 +0 2 +9 17 +4 9 +10 16 +3 5 +9 18 +2 6 +4 12 +3 12 +7 9 +2 11 +5 13 +2 5 +0 5 +3 9 +3 7 +2 6 +8 15 +1 9 +3 4 +5 10 +3 4 +9 19 +6 8 +9 10 +3 13 +4 5 +1 4 +10 11 +9 13 +8 10 +10 12 +6 8 +1 6 +9 10 +1 5 +1 2 +8 9 +2 9 +3 4 +1 10 +0 7 +0 1 +1 10 +7 8 +4 11 +9 12 +7 17 +8 9 +4 8 +8 11 +9 16 +4 7 +3 5 +3 6 +5 6 +0 9 diff --git a/geom_bottleneck/tests/data/test_350_B b/geom_bottleneck/tests/data/test_350_B new file mode 100644 index 0000000..3cf03c4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_350_B @@ -0,0 +1,100 @@ +10 11 +7 8 +10 13 +1 2 +0 1 +9 10 +10 18 +9 18 +1 9 +0 10 +10 11 +10 14 +0 2 +8 17 +7 17 +8 13 +0 3 +4 11 +5 7 +9 14 +5 14 +1 4 +5 9 +3 5 +10 18 +3 13 +3 4 +4 7 +3 7 +8 13 +1 11 +0 3 +1 4 +10 20 +4 5 +0 9 +9 13 +6 12 +9 19 +7 16 +2 3 +5 6 +1 9 +0 8 +2 4 +8 15 +0 7 +5 6 +4 8 +2 6 +1 2 +8 10 +2 10 +0 1 +8 13 +10 12 +1 8 +2 8 +2 4 +9 12 +7 8 +6 14 +3 9 +1 6 +7 13 +4 7 +10 17 +7 8 +9 12 +8 10 +6 13 +5 14 +5 13 +10 14 +9 13 +1 2 +2 3 +7 11 +6 13 +10 11 +1 9 +1 3 +7 14 +5 14 +2 3 +3 6 +9 11 +10 15 +0 6 +8 16 +4 11 +1 8 +3 8 +2 5 +6 13 +3 6 +7 8 +10 15 +7 10 +3 4 diff --git a/geom_bottleneck/tests/data/test_351_A b/geom_bottleneck/tests/data/test_351_A new file mode 100644 index 0000000..3989d6c --- /dev/null +++ b/geom_bottleneck/tests/data/test_351_A @@ -0,0 +1,100 @@ +2 11 +9 18 +7 13 +10 12 +5 10 +8 11 +10 11 +0 1 +6 13 +2 12 +5 13 +6 8 +2 3 +4 6 +4 10 +5 12 +7 12 +6 13 +6 13 +7 17 +6 10 +6 14 +8 9 +1 9 +0 10 +7 10 +3 12 +9 14 +2 10 +10 14 +1 7 +1 6 +2 12 +7 13 +3 6 +4 5 +2 9 +7 8 +1 2 +8 12 +6 11 +7 8 +10 13 +3 10 +4 12 +5 8 +9 15 +8 15 +4 11 +6 7 +6 8 +9 18 +2 3 +10 20 +0 5 +10 20 +4 13 +10 12 +7 17 +8 16 +2 10 +9 11 +5 11 +5 15 +2 5 +3 12 +5 8 +6 9 +10 11 +3 8 +5 15 +3 13 +10 15 +8 10 +4 9 +4 6 +8 10 +8 17 +0 1 +1 2 +1 8 +7 14 +0 1 +1 5 +6 7 +1 6 +9 14 +8 12 +0 1 +2 10 +0 8 +4 10 +0 8 +3 4 +7 11 +9 13 +0 5 +3 9 +4 9 +2 4 diff --git a/geom_bottleneck/tests/data/test_351_B b/geom_bottleneck/tests/data/test_351_B new file mode 100644 index 0000000..b1c32d7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_351_B @@ -0,0 +1,100 @@ +9 18 +7 9 +6 14 +2 10 +6 7 +9 13 +3 12 +6 7 +4 7 +6 9 +3 4 +7 17 +0 9 +3 8 +0 3 +3 13 +10 15 +1 5 +1 7 +4 10 +2 9 +9 12 +4 11 +10 16 +2 7 +9 17 +1 8 +9 12 +5 8 +10 13 +2 11 +8 9 +5 6 +0 6 +0 5 +2 3 +9 12 +9 13 +8 10 +4 6 +1 4 +7 9 +4 5 +8 9 +5 7 +4 14 +5 9 +3 11 +4 8 +3 10 +4 13 +6 14 +6 13 +6 16 +9 18 +4 14 +3 4 +6 12 +2 6 +8 16 +9 13 +0 4 +9 18 +7 17 +0 5 +0 2 +7 8 +8 10 +0 1 +10 17 +2 7 +10 14 +7 9 +3 10 +1 11 +2 4 +7 13 +5 8 +2 7 +4 9 +8 14 +1 6 +2 4 +4 5 +6 12 +8 9 +0 4 +4 5 +0 7 +9 12 +8 9 +4 9 +8 9 +9 18 +3 10 +0 3 +10 16 +3 9 +3 7 +3 13 diff --git a/geom_bottleneck/tests/data/test_352_A b/geom_bottleneck/tests/data/test_352_A new file mode 100644 index 0000000..df81454 --- /dev/null +++ b/geom_bottleneck/tests/data/test_352_A @@ -0,0 +1,100 @@ +8 12 +1 7 +7 15 +10 15 +5 8 +1 7 +1 2 +1 7 +6 10 +6 12 +8 16 +0 10 +4 8 +1 2 +6 13 +7 11 +5 11 +5 6 +0 1 +8 17 +0 2 +0 4 +9 16 +9 16 +10 13 +5 12 +3 11 +4 9 +9 12 +9 13 +1 5 +1 2 +2 6 +1 7 +8 17 +7 8 +4 9 +9 13 +1 8 +7 9 +0 10 +7 8 +9 15 +5 11 +0 4 +6 9 +0 10 +10 19 +6 11 +0 10 +7 16 +9 10 +2 5 +6 7 +6 11 +5 14 +9 10 +6 11 +8 12 +7 11 +4 12 +9 11 +1 4 +5 7 +6 8 +3 4 +8 15 +2 5 +8 13 +1 2 +4 5 +5 12 +6 15 +6 10 +1 8 +0 9 +0 2 +9 18 +7 14 +4 8 +5 10 +0 10 +9 10 +0 10 +10 14 +0 1 +7 8 +9 14 +8 11 +8 12 +8 14 +7 16 +4 7 +4 14 +0 4 +2 3 +6 16 +9 16 +6 12 +8 17 diff --git a/geom_bottleneck/tests/data/test_352_B b/geom_bottleneck/tests/data/test_352_B new file mode 100644 index 0000000..9b30bae --- /dev/null +++ b/geom_bottleneck/tests/data/test_352_B @@ -0,0 +1,100 @@ +2 10 +0 1 +10 15 +7 14 +2 3 +0 9 +1 4 +5 6 +1 4 +2 8 +2 4 +0 6 +2 8 +0 1 +10 14 +5 11 +0 6 +10 17 +2 9 +10 16 +7 14 +4 11 +6 7 +3 6 +7 16 +2 8 +0 3 +1 2 +5 7 +10 12 +5 6 +1 3 +5 14 +5 14 +6 13 +8 16 +0 10 +6 12 +9 17 +3 5 +4 10 +3 6 +1 9 +1 9 +8 17 +3 4 +0 1 +1 9 +9 11 +6 7 +0 7 +3 4 +9 15 +9 13 +0 5 +1 10 +6 15 +10 19 +5 14 +1 11 +6 12 +4 13 +4 11 +2 3 +7 11 +2 5 +0 6 +0 2 +10 11 +1 5 +6 7 +2 10 +9 17 +0 5 +8 13 +2 12 +6 7 +1 6 +9 17 +8 14 +0 10 +1 2 +2 3 +2 10 +2 12 +4 6 +8 9 +7 8 +6 10 +7 17 +8 17 +10 19 +4 6 +7 9 +2 12 +2 10 +8 15 +0 4 +1 6 +2 5 diff --git a/geom_bottleneck/tests/data/test_353_A b/geom_bottleneck/tests/data/test_353_A new file mode 100644 index 0000000..3dda9d1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_353_A @@ -0,0 +1,100 @@ +1 11 +3 5 +3 5 +2 3 +9 10 +0 9 +6 9 +0 8 +8 10 +6 12 +1 10 +1 2 +0 8 +8 18 +0 7 +3 4 +2 7 +8 15 +1 5 +1 9 +2 11 +7 11 +3 12 +4 6 +0 2 +8 16 +0 1 +10 18 +4 9 +8 18 +1 8 +5 7 +8 16 +1 2 +4 10 +9 18 +3 5 +5 8 +2 10 +3 8 +8 16 +10 12 +0 1 +0 9 +3 7 +3 4 +3 6 +3 9 +8 10 +2 12 +6 10 +3 13 +2 6 +9 10 +6 10 +9 19 +3 5 +4 6 +8 9 +2 3 +5 6 +3 4 +3 7 +7 17 +8 12 +5 6 +1 2 +0 1 +6 10 +7 9 +5 15 +7 14 +2 9 +1 5 +4 5 +0 9 +1 9 +7 8 +1 7 +2 3 +10 16 +5 6 +5 10 +0 9 +1 11 +7 10 +7 17 +10 19 +1 2 +9 19 +10 14 +7 11 +9 14 +8 17 +1 2 +7 16 +2 9 +9 16 +3 4 +0 1 diff --git a/geom_bottleneck/tests/data/test_353_B b/geom_bottleneck/tests/data/test_353_B new file mode 100644 index 0000000..16ed654 --- /dev/null +++ b/geom_bottleneck/tests/data/test_353_B @@ -0,0 +1,100 @@ +1 9 +1 9 +9 14 +7 9 +9 18 +6 13 +1 2 +5 15 +7 8 +8 15 +5 11 +9 13 +1 8 +4 6 +10 11 +6 7 +4 10 +0 4 +3 7 +0 1 +10 11 +7 13 +0 2 +4 5 +10 18 +8 13 +4 11 +8 18 +8 15 +1 10 +6 13 +5 8 +10 15 +7 14 +2 3 +10 19 +5 8 +2 3 +7 14 +1 7 +1 9 +6 12 +2 8 +3 11 +5 13 +2 3 +10 16 +10 15 +2 10 +10 18 +3 6 +0 6 +1 4 +6 11 +1 3 +8 9 +8 16 +0 2 +8 12 +9 10 +1 4 +0 3 +0 2 +5 14 +3 11 +7 12 +7 17 +5 6 +10 16 +3 4 +0 6 +0 3 +0 1 +3 13 +6 7 +4 9 +7 9 +0 1 +10 13 +8 12 +0 6 +2 8 +10 13 +2 3 +7 13 +9 19 +4 7 +10 16 +1 5 +2 11 +3 13 +8 13 +3 9 +3 9 +3 13 +7 15 +0 2 +2 6 +7 14 +1 4 diff --git a/geom_bottleneck/tests/data/test_354_A b/geom_bottleneck/tests/data/test_354_A new file mode 100644 index 0000000..c701ef2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_354_A @@ -0,0 +1,100 @@ +6 16 +5 15 +0 2 +8 18 +10 15 +0 2 +3 5 +6 14 +1 9 +3 12 +6 8 +2 3 +2 11 +8 14 +10 15 +3 5 +10 12 +1 4 +3 4 +8 15 +10 15 +6 15 +10 16 +10 17 +3 11 +10 17 +2 3 +2 10 +5 9 +5 9 +8 16 +0 7 +7 15 +1 3 +0 1 +10 17 +10 12 +0 8 +4 11 +1 8 +5 8 +0 10 +2 4 +1 2 +7 11 +7 14 +4 5 +7 16 +3 7 +5 7 +8 9 +8 12 +2 3 +6 16 +6 16 +5 7 +5 14 +0 10 +9 16 +9 11 +6 16 +5 14 +5 11 +8 9 +4 10 +5 6 +1 2 +6 15 +1 5 +9 10 +8 9 +0 8 +4 5 +10 19 +7 11 +8 18 +3 4 +7 8 +2 9 +6 11 +1 2 +7 16 +0 2 +1 10 +10 11 +4 5 +9 12 +8 13 +1 11 +4 8 +0 1 +9 15 +0 7 +2 4 +1 6 +1 10 +8 15 +8 18 +8 10 +9 17 diff --git a/geom_bottleneck/tests/data/test_354_B b/geom_bottleneck/tests/data/test_354_B new file mode 100644 index 0000000..0a21b24 --- /dev/null +++ b/geom_bottleneck/tests/data/test_354_B @@ -0,0 +1,100 @@ +7 8 +3 12 +9 19 +5 13 +8 9 +4 14 +10 12 +1 4 +1 5 +8 16 +5 10 +7 10 +5 9 +4 7 +6 9 +6 7 +0 1 +7 8 +1 7 +9 19 +7 8 +3 13 +10 18 +8 13 +3 13 +6 15 +2 3 +3 13 +1 8 +9 18 +4 9 +9 10 +10 18 +6 9 +8 17 +1 5 +3 8 +1 11 +7 12 +0 1 +4 5 +7 16 +6 11 +3 5 +5 14 +6 11 +3 10 +7 8 +8 11 +7 13 +10 17 +1 9 +7 14 +1 10 +3 12 +7 15 +1 4 +7 10 +0 5 +3 9 +5 12 +7 16 +5 6 +0 10 +0 1 +3 5 +0 7 +1 6 +4 5 +3 8 +1 8 +2 3 +10 20 +4 10 +7 11 +0 4 +4 6 +5 8 +10 17 +9 10 +0 3 +0 3 +5 9 +9 19 +8 14 +9 14 +4 11 +10 17 +7 9 +6 7 +10 19 +9 10 +3 8 +2 11 +4 14 +9 16 +2 8 +2 5 +5 11 +10 18 diff --git a/geom_bottleneck/tests/data/test_355_A b/geom_bottleneck/tests/data/test_355_A new file mode 100644 index 0000000..48d49bd --- /dev/null +++ b/geom_bottleneck/tests/data/test_355_A @@ -0,0 +1,100 @@ +6 9 +0 2 +2 6 +4 6 +5 7 +8 14 +10 15 +8 9 +6 14 +9 15 +6 12 +1 9 +4 7 +1 4 +3 8 +0 2 +6 16 +6 7 +5 7 +9 11 +10 20 +3 11 +9 13 +2 5 +0 3 +7 14 +7 8 +10 18 +5 7 +4 11 +0 10 +7 16 +1 8 +7 15 +3 4 +3 5 +8 13 +9 12 +5 10 +9 13 +5 11 +8 16 +3 4 +4 11 +9 18 +1 3 +10 14 +5 6 +5 10 +8 11 +8 10 +7 14 +3 6 +9 17 +0 3 +0 2 +2 11 +4 8 +0 6 +7 14 +10 11 +5 7 +9 18 +2 8 +4 5 +1 11 +0 9 +9 10 +3 12 +10 19 +3 7 +7 14 +1 3 +8 9 +9 13 +0 8 +5 11 +6 13 +5 10 +10 15 +8 15 +6 12 +2 6 +2 4 +4 9 +3 6 +9 10 +5 10 +10 15 +9 17 +5 10 +6 11 +2 8 +4 5 +5 15 +2 3 +7 14 +4 10 +4 11 +8 10 diff --git a/geom_bottleneck/tests/data/test_355_B b/geom_bottleneck/tests/data/test_355_B new file mode 100644 index 0000000..cd9cec5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_355_B @@ -0,0 +1,100 @@ +4 11 +9 14 +8 12 +3 5 +5 11 +7 15 +7 15 +1 10 +1 6 +4 13 +7 8 +5 7 +1 2 +3 13 +2 5 +4 10 +6 7 +10 11 +2 6 +1 10 +4 5 +10 18 +5 9 +0 3 +8 9 +5 13 +4 5 +1 2 +4 9 +1 11 +5 15 +9 11 +2 3 +0 1 +4 11 +6 10 +8 10 +2 8 +3 5 +4 8 +10 20 +0 5 +3 13 +2 8 +0 10 +2 7 +10 11 +0 2 +8 12 +1 10 +3 9 +2 8 +6 7 +10 17 +4 5 +2 7 +5 8 +10 20 +5 13 +10 19 +4 13 +1 9 +6 12 +3 4 +4 5 +8 18 +7 14 +1 10 +7 14 +5 9 +1 6 +6 14 +7 8 +5 12 +4 14 +1 7 +2 8 +6 11 +7 13 +3 10 +3 4 +3 11 +9 10 +1 11 +9 10 +2 8 +10 19 +3 6 +10 13 +4 5 +7 16 +2 7 +4 7 +9 15 +9 17 +4 8 +5 8 +4 8 +0 1 +10 17 diff --git a/geom_bottleneck/tests/data/test_356_A b/geom_bottleneck/tests/data/test_356_A new file mode 100644 index 0000000..cb92f38 --- /dev/null +++ b/geom_bottleneck/tests/data/test_356_A @@ -0,0 +1,100 @@ +7 12 +5 6 +6 13 +1 6 +9 10 +10 11 +2 9 +4 14 +4 11 +5 14 +4 13 +6 12 +7 13 +8 9 +5 11 +6 14 +9 13 +0 3 +7 11 +3 13 +2 5 +0 6 +1 8 +3 9 +8 17 +1 7 +10 19 +0 4 +8 18 +0 7 +1 3 +1 10 +0 6 +1 5 +3 11 +0 3 +7 13 +10 11 +2 4 +2 5 +4 11 +4 14 +0 6 +2 11 +6 11 +3 4 +2 6 +6 16 +6 8 +9 13 +8 12 +7 16 +9 16 +4 8 +1 8 +9 19 +7 13 +9 19 +5 6 +3 10 +2 10 +2 10 +9 11 +9 18 +7 13 +7 11 +5 8 +8 13 +8 10 +7 13 +7 17 +6 15 +5 8 +5 9 +5 9 +7 10 +4 10 +9 13 +6 16 +4 12 +5 6 +9 17 +1 2 +2 7 +5 11 +2 12 +10 16 +1 10 +10 19 +5 9 +10 19 +5 10 +10 13 +10 13 +6 7 +10 19 +2 10 +4 6 +3 5 +1 11 diff --git a/geom_bottleneck/tests/data/test_356_B b/geom_bottleneck/tests/data/test_356_B new file mode 100644 index 0000000..365ed3f --- /dev/null +++ b/geom_bottleneck/tests/data/test_356_B @@ -0,0 +1,100 @@ +6 11 +8 12 +7 8 +3 4 +9 12 +8 15 +4 5 +8 18 +2 3 +0 2 +8 11 +1 2 +2 8 +9 13 +6 10 +10 20 +0 3 +7 12 +7 11 +10 20 +6 10 +8 14 +5 6 +5 10 +8 12 +6 16 +1 11 +3 9 +7 17 +8 17 +5 11 +6 16 +5 9 +9 19 +7 11 +0 8 +8 17 +6 13 +0 5 +10 19 +3 8 +0 8 +0 9 +9 16 +8 12 +3 4 +2 3 +1 2 +6 11 +3 4 +2 4 +3 11 +4 11 +8 15 +7 9 +8 10 +4 14 +9 12 +9 16 +1 2 +7 13 +5 11 +1 8 +9 12 +0 5 +10 13 +9 11 +5 14 +0 9 +10 20 +7 8 +4 10 +0 3 +3 12 +8 17 +1 9 +5 9 +2 3 +1 8 +6 7 +3 4 +1 8 +7 10 +1 10 +0 1 +4 6 +8 11 +9 13 +5 6 +10 14 +10 16 +1 6 +5 9 +10 20 +7 13 +3 11 +0 3 +0 7 +6 12 +1 9 diff --git a/geom_bottleneck/tests/data/test_357_A b/geom_bottleneck/tests/data/test_357_A new file mode 100644 index 0000000..de1e8eb --- /dev/null +++ b/geom_bottleneck/tests/data/test_357_A @@ -0,0 +1,100 @@ +6 11 +4 11 +5 10 +8 9 +4 12 +10 17 +0 1 +9 15 +3 7 +6 13 +7 8 +3 4 +4 12 +8 9 +2 4 +10 20 +3 4 +6 16 +6 16 +4 12 +5 6 +9 12 +1 8 +6 14 +8 13 +2 10 +4 14 +3 5 +7 12 +2 7 +3 6 +1 2 +4 5 +7 13 +3 8 +6 9 +4 9 +6 7 +1 6 +8 10 +10 15 +3 6 +10 19 +8 14 +8 9 +4 7 +7 11 +4 11 +2 5 +0 7 +10 13 +4 6 +5 6 +7 16 +2 10 +8 18 +4 5 +9 10 +8 9 +8 14 +0 1 +5 15 +2 9 +6 7 +8 10 +10 14 +8 11 +5 8 +1 5 +9 15 +3 10 +5 10 +1 5 +4 6 +3 11 +6 7 +9 12 +5 11 +1 6 +6 14 +0 5 +3 12 +2 10 +7 12 +7 15 +1 11 +8 12 +3 7 +10 14 +8 9 +8 9 +9 10 +2 12 +3 4 +1 10 +9 15 +1 7 +10 14 +1 3 +10 14 diff --git a/geom_bottleneck/tests/data/test_357_B b/geom_bottleneck/tests/data/test_357_B new file mode 100644 index 0000000..1c68b90 --- /dev/null +++ b/geom_bottleneck/tests/data/test_357_B @@ -0,0 +1,100 @@ +8 10 +0 5 +6 15 +7 17 +6 14 +3 4 +3 5 +0 9 +1 5 +1 2 +2 3 +6 7 +9 10 +3 13 +9 13 +8 11 +5 7 +2 11 +7 9 +10 11 +9 11 +10 12 +4 10 +8 9 +4 12 +8 11 +5 14 +0 1 +8 9 +9 13 +6 14 +7 10 +10 17 +2 10 +9 17 +8 16 +1 3 +9 19 +0 1 +7 15 +2 8 +1 2 +0 1 +2 3 +7 8 +6 11 +10 20 +3 12 +6 11 +7 9 +5 8 +5 14 +3 12 +8 17 +10 15 +9 14 +8 9 +7 13 +9 12 +1 7 +5 11 +5 11 +6 8 +8 9 +5 6 +3 10 +3 4 +1 3 +3 10 +7 8 +1 9 +3 13 +3 10 +7 14 +4 14 +1 10 +0 10 +9 10 +10 15 +1 2 +8 10 +3 4 +2 4 +2 3 +7 13 +3 6 +8 14 +5 6 +3 11 +8 14 +0 5 +3 10 +7 11 +3 11 +10 19 +8 9 +0 1 +10 20 +7 8 +0 8 diff --git a/geom_bottleneck/tests/data/test_358_A b/geom_bottleneck/tests/data/test_358_A new file mode 100644 index 0000000..2297dae --- /dev/null +++ b/geom_bottleneck/tests/data/test_358_A @@ -0,0 +1,100 @@ +7 12 +6 15 +1 4 +1 5 +7 9 +7 16 +0 2 +2 3 +6 12 +1 9 +9 12 +6 8 +8 9 +2 3 +6 11 +4 6 +7 11 +7 10 +8 9 +5 8 +6 8 +0 6 +9 18 +0 1 +7 14 +7 9 +7 14 +10 15 +3 10 +7 16 +8 15 +6 12 +7 9 +6 11 +3 8 +3 4 +4 6 +5 11 +10 16 +7 9 +2 8 +1 6 +8 9 +7 8 +7 14 +9 19 +4 9 +0 1 +3 4 +5 11 +2 12 +3 9 +9 16 +3 5 +0 8 +7 13 +7 17 +0 1 +4 12 +7 15 +8 11 +8 18 +4 8 +8 12 +8 18 +4 12 +4 10 +6 12 +9 14 +6 12 +9 11 +6 7 +0 5 +1 6 +8 17 +5 9 +5 14 +5 10 +9 19 +6 11 +3 4 +4 14 +1 11 +1 4 +10 19 +6 13 +3 4 +2 3 +2 7 +1 11 +5 11 +6 14 +1 6 +8 9 +7 8 +1 9 +2 8 +3 10 +10 17 +4 5 diff --git a/geom_bottleneck/tests/data/test_358_B b/geom_bottleneck/tests/data/test_358_B new file mode 100644 index 0000000..e2d7d03 --- /dev/null +++ b/geom_bottleneck/tests/data/test_358_B @@ -0,0 +1,100 @@ +6 7 +6 12 +10 13 +3 6 +9 10 +8 11 +3 13 +3 4 +10 16 +8 9 +3 5 +1 8 +4 5 +8 13 +9 18 +3 11 +3 13 +8 12 +7 11 +0 2 +4 7 +8 13 +7 16 +0 10 +1 9 +8 18 +1 9 +3 12 +1 10 +0 9 +9 16 +8 14 +0 7 +9 10 +0 3 +3 4 +6 8 +8 17 +9 16 +5 7 +0 2 +6 7 +1 6 +6 13 +4 5 +8 12 +9 14 +6 16 +9 14 +10 20 +4 14 +0 3 +9 18 +1 11 +6 13 +3 10 +9 13 +9 17 +6 16 +5 8 +3 4 +2 8 +9 15 +6 10 +8 18 +4 5 +3 5 +2 8 +3 11 +9 10 +3 11 +4 11 +9 12 +1 11 +0 10 +0 9 +8 12 +0 3 +9 14 +8 12 +6 14 +10 16 +3 8 +5 11 +1 6 +10 17 +0 2 +9 17 +8 10 +10 11 +9 13 +0 10 +5 11 +9 10 +4 5 +5 7 +4 14 +0 6 +0 1 +5 15 diff --git a/geom_bottleneck/tests/data/test_359_A b/geom_bottleneck/tests/data/test_359_A new file mode 100644 index 0000000..6e990e4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_359_A @@ -0,0 +1,100 @@ +7 8 +8 11 +7 8 +5 6 +4 5 +4 5 +7 8 +3 8 +2 8 +8 10 +2 3 +6 7 +0 5 +2 4 +8 17 +7 15 +8 9 +6 7 +10 11 +7 14 +9 10 +0 8 +3 7 +3 13 +3 12 +4 10 +9 17 +9 19 +5 14 +2 8 +9 19 +4 11 +2 12 +0 2 +4 12 +5 13 +1 3 +6 15 +2 12 +3 4 +0 10 +1 2 +9 19 +5 14 +3 7 +0 7 +10 12 +1 11 +1 8 +0 1 +5 11 +3 4 +1 4 +2 6 +8 12 +9 13 +10 13 +0 7 +9 18 +5 6 +2 4 +10 14 +7 8 +5 15 +9 10 +5 13 +0 9 +4 6 +2 3 +2 11 +9 15 +4 11 +1 7 +4 9 +6 14 +8 15 +3 11 +3 6 +8 13 +6 12 +7 9 +10 20 +9 19 +6 7 +2 12 +0 10 +10 13 +10 13 +5 15 +4 14 +9 15 +0 7 +7 13 +9 10 +5 10 +8 10 +8 17 +8 17 +0 9 +0 1 diff --git a/geom_bottleneck/tests/data/test_359_B b/geom_bottleneck/tests/data/test_359_B new file mode 100644 index 0000000..97c1bfe --- /dev/null +++ b/geom_bottleneck/tests/data/test_359_B @@ -0,0 +1,100 @@ +9 12 +2 11 +9 10 +10 12 +2 7 +4 7 +0 1 +9 11 +10 15 +4 12 +9 15 +9 18 +10 20 +7 8 +6 8 +10 20 +9 10 +8 18 +7 17 +3 4 +5 6 +1 8 +3 4 +9 18 +9 13 +5 15 +9 10 +5 11 +5 11 +9 11 +2 5 +9 16 +7 8 +0 4 +3 11 +1 7 +0 10 +5 12 +5 15 +2 3 +10 19 +9 12 +1 3 +5 11 +3 8 +9 15 +2 12 +9 16 +7 9 +1 2 +1 8 +4 13 +4 8 +0 1 +2 6 +1 6 +8 10 +6 12 +8 16 +8 17 +4 12 +9 12 +0 8 +3 10 +6 13 +4 5 +1 9 +5 9 +0 6 +6 7 +1 10 +7 17 +4 7 +5 15 +2 4 +9 14 +7 17 +5 13 +9 11 +0 7 +1 9 +3 8 +5 14 +1 7 +3 11 +1 10 +8 12 +10 11 +0 7 +7 14 +6 14 +0 10 +3 5 +10 18 +3 10 +6 7 +1 3 +1 3 +8 16 +7 16 diff --git a/geom_bottleneck/tests/data/test_360_A b/geom_bottleneck/tests/data/test_360_A new file mode 100644 index 0000000..d271aaa --- /dev/null +++ b/geom_bottleneck/tests/data/test_360_A @@ -0,0 +1,2 @@ +84 85 +52 129 diff --git a/geom_bottleneck/tests/data/test_360_B b/geom_bottleneck/tests/data/test_360_B new file mode 100644 index 0000000..2408922 --- /dev/null +++ b/geom_bottleneck/tests/data/test_360_B @@ -0,0 +1,2 @@ +74 97 +83 94 diff --git a/geom_bottleneck/tests/data/test_361_A b/geom_bottleneck/tests/data/test_361_A new file mode 100644 index 0000000..b4eea74 --- /dev/null +++ b/geom_bottleneck/tests/data/test_361_A @@ -0,0 +1,2 @@ +97 159 +60 73 diff --git a/geom_bottleneck/tests/data/test_361_B b/geom_bottleneck/tests/data/test_361_B new file mode 100644 index 0000000..3680b00 --- /dev/null +++ b/geom_bottleneck/tests/data/test_361_B @@ -0,0 +1,2 @@ +47 60 +95 167 diff --git a/geom_bottleneck/tests/data/test_362_A b/geom_bottleneck/tests/data/test_362_A new file mode 100644 index 0000000..1c4803d --- /dev/null +++ b/geom_bottleneck/tests/data/test_362_A @@ -0,0 +1,2 @@ +85 121 +2 61 diff --git a/geom_bottleneck/tests/data/test_362_B b/geom_bottleneck/tests/data/test_362_B new file mode 100644 index 0000000..37fc7aa --- /dev/null +++ b/geom_bottleneck/tests/data/test_362_B @@ -0,0 +1,2 @@ +41 67 +80 101 diff --git a/geom_bottleneck/tests/data/test_363_A b/geom_bottleneck/tests/data/test_363_A new file mode 100644 index 0000000..909ac51 --- /dev/null +++ b/geom_bottleneck/tests/data/test_363_A @@ -0,0 +1,2 @@ +77 159 +60 118 diff --git a/geom_bottleneck/tests/data/test_363_B b/geom_bottleneck/tests/data/test_363_B new file mode 100644 index 0000000..4c76429 --- /dev/null +++ b/geom_bottleneck/tests/data/test_363_B @@ -0,0 +1,2 @@ +52 73 +71 103 diff --git a/geom_bottleneck/tests/data/test_364_A b/geom_bottleneck/tests/data/test_364_A new file mode 100644 index 0000000..a6e34b7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_364_A @@ -0,0 +1,2 @@ +20 21 +70 88 diff --git a/geom_bottleneck/tests/data/test_364_B b/geom_bottleneck/tests/data/test_364_B new file mode 100644 index 0000000..ba5c4bf --- /dev/null +++ b/geom_bottleneck/tests/data/test_364_B @@ -0,0 +1,2 @@ +65 72 +81 164 diff --git a/geom_bottleneck/tests/data/test_365_A b/geom_bottleneck/tests/data/test_365_A new file mode 100644 index 0000000..6c9d44c --- /dev/null +++ b/geom_bottleneck/tests/data/test_365_A @@ -0,0 +1,2 @@ +9 64 +48 115 diff --git a/geom_bottleneck/tests/data/test_365_B b/geom_bottleneck/tests/data/test_365_B new file mode 100644 index 0000000..f9e51a7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_365_B @@ -0,0 +1,2 @@ +87 125 +74 132 diff --git a/geom_bottleneck/tests/data/test_366_A b/geom_bottleneck/tests/data/test_366_A new file mode 100644 index 0000000..fbf146c --- /dev/null +++ b/geom_bottleneck/tests/data/test_366_A @@ -0,0 +1,2 @@ +97 162 +27 43 diff --git a/geom_bottleneck/tests/data/test_366_B b/geom_bottleneck/tests/data/test_366_B new file mode 100644 index 0000000..7385b5f --- /dev/null +++ b/geom_bottleneck/tests/data/test_366_B @@ -0,0 +1,2 @@ +51 149 +65 126 diff --git a/geom_bottleneck/tests/data/test_367_A b/geom_bottleneck/tests/data/test_367_A new file mode 100644 index 0000000..48190bb --- /dev/null +++ b/geom_bottleneck/tests/data/test_367_A @@ -0,0 +1,2 @@ +36 104 +19 85 diff --git a/geom_bottleneck/tests/data/test_367_B b/geom_bottleneck/tests/data/test_367_B new file mode 100644 index 0000000..7e26c08 --- /dev/null +++ b/geom_bottleneck/tests/data/test_367_B @@ -0,0 +1,2 @@ +96 171 +17 21 diff --git a/geom_bottleneck/tests/data/test_368_A b/geom_bottleneck/tests/data/test_368_A new file mode 100644 index 0000000..4b4767d --- /dev/null +++ b/geom_bottleneck/tests/data/test_368_A @@ -0,0 +1,2 @@ +72 156 +84 129 diff --git a/geom_bottleneck/tests/data/test_368_B b/geom_bottleneck/tests/data/test_368_B new file mode 100644 index 0000000..3c72417 --- /dev/null +++ b/geom_bottleneck/tests/data/test_368_B @@ -0,0 +1,2 @@ +32 71 +88 129 diff --git a/geom_bottleneck/tests/data/test_369_A b/geom_bottleneck/tests/data/test_369_A new file mode 100644 index 0000000..d8a01b6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_369_A @@ -0,0 +1,2 @@ +56 128 +69 161 diff --git a/geom_bottleneck/tests/data/test_369_B b/geom_bottleneck/tests/data/test_369_B new file mode 100644 index 0000000..9f7da60 --- /dev/null +++ b/geom_bottleneck/tests/data/test_369_B @@ -0,0 +1,2 @@ +3 84 +92 119 diff --git a/geom_bottleneck/tests/data/test_370_A b/geom_bottleneck/tests/data/test_370_A new file mode 100644 index 0000000..bdc8979 --- /dev/null +++ b/geom_bottleneck/tests/data/test_370_A @@ -0,0 +1,2 @@ +49 140 +100 135 diff --git a/geom_bottleneck/tests/data/test_370_B b/geom_bottleneck/tests/data/test_370_B new file mode 100644 index 0000000..e145eb4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_370_B @@ -0,0 +1,2 @@ +28 51 +55 70 diff --git a/geom_bottleneck/tests/data/test_371_A b/geom_bottleneck/tests/data/test_371_A new file mode 100644 index 0000000..208a164 --- /dev/null +++ b/geom_bottleneck/tests/data/test_371_A @@ -0,0 +1,2 @@ +93 154 +54 138 diff --git a/geom_bottleneck/tests/data/test_371_B b/geom_bottleneck/tests/data/test_371_B new file mode 100644 index 0000000..7a2fc8a --- /dev/null +++ b/geom_bottleneck/tests/data/test_371_B @@ -0,0 +1,2 @@ +31 81 +88 143 diff --git a/geom_bottleneck/tests/data/test_372_A b/geom_bottleneck/tests/data/test_372_A new file mode 100644 index 0000000..dd3597a --- /dev/null +++ b/geom_bottleneck/tests/data/test_372_A @@ -0,0 +1,2 @@ +3 92 +88 127 diff --git a/geom_bottleneck/tests/data/test_372_B b/geom_bottleneck/tests/data/test_372_B new file mode 100644 index 0000000..225c36e --- /dev/null +++ b/geom_bottleneck/tests/data/test_372_B @@ -0,0 +1,2 @@ +6 95 +54 74 diff --git a/geom_bottleneck/tests/data/test_373_A b/geom_bottleneck/tests/data/test_373_A new file mode 100644 index 0000000..0a84fd2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_373_A @@ -0,0 +1,2 @@ +80 109 +36 96 diff --git a/geom_bottleneck/tests/data/test_373_B b/geom_bottleneck/tests/data/test_373_B new file mode 100644 index 0000000..b790337 --- /dev/null +++ b/geom_bottleneck/tests/data/test_373_B @@ -0,0 +1,2 @@ +64 106 +12 78 diff --git a/geom_bottleneck/tests/data/test_374_A b/geom_bottleneck/tests/data/test_374_A new file mode 100644 index 0000000..0df06a4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_374_A @@ -0,0 +1,2 @@ +91 158 +15 61 diff --git a/geom_bottleneck/tests/data/test_374_B b/geom_bottleneck/tests/data/test_374_B new file mode 100644 index 0000000..7bd1bdd --- /dev/null +++ b/geom_bottleneck/tests/data/test_374_B @@ -0,0 +1,2 @@ +85 155 +5 64 diff --git a/geom_bottleneck/tests/data/test_375_A b/geom_bottleneck/tests/data/test_375_A new file mode 100644 index 0000000..77cd274 --- /dev/null +++ b/geom_bottleneck/tests/data/test_375_A @@ -0,0 +1,2 @@ +77 154 +15 27 diff --git a/geom_bottleneck/tests/data/test_375_B b/geom_bottleneck/tests/data/test_375_B new file mode 100644 index 0000000..db3c6ee --- /dev/null +++ b/geom_bottleneck/tests/data/test_375_B @@ -0,0 +1,2 @@ +81 144 +44 79 diff --git a/geom_bottleneck/tests/data/test_376_A b/geom_bottleneck/tests/data/test_376_A new file mode 100644 index 0000000..aca7402 --- /dev/null +++ b/geom_bottleneck/tests/data/test_376_A @@ -0,0 +1,2 @@ +20 47 +61 129 diff --git a/geom_bottleneck/tests/data/test_376_B b/geom_bottleneck/tests/data/test_376_B new file mode 100644 index 0000000..5bbae78 --- /dev/null +++ b/geom_bottleneck/tests/data/test_376_B @@ -0,0 +1,2 @@ +41 98 +76 137 diff --git a/geom_bottleneck/tests/data/test_377_A b/geom_bottleneck/tests/data/test_377_A new file mode 100644 index 0000000..707adfd --- /dev/null +++ b/geom_bottleneck/tests/data/test_377_A @@ -0,0 +1,2 @@ +91 123 +17 50 diff --git a/geom_bottleneck/tests/data/test_377_B b/geom_bottleneck/tests/data/test_377_B new file mode 100644 index 0000000..afbe113 --- /dev/null +++ b/geom_bottleneck/tests/data/test_377_B @@ -0,0 +1,2 @@ +45 116 +18 98 diff --git a/geom_bottleneck/tests/data/test_378_A b/geom_bottleneck/tests/data/test_378_A new file mode 100644 index 0000000..7ac23e9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_378_A @@ -0,0 +1,2 @@ +98 183 +5 58 diff --git a/geom_bottleneck/tests/data/test_378_B b/geom_bottleneck/tests/data/test_378_B new file mode 100644 index 0000000..328b726 --- /dev/null +++ b/geom_bottleneck/tests/data/test_378_B @@ -0,0 +1,2 @@ +58 154 +82 148 diff --git a/geom_bottleneck/tests/data/test_379_A b/geom_bottleneck/tests/data/test_379_A new file mode 100644 index 0000000..0f57258 --- /dev/null +++ b/geom_bottleneck/tests/data/test_379_A @@ -0,0 +1,2 @@ +73 133 +38 52 diff --git a/geom_bottleneck/tests/data/test_379_B b/geom_bottleneck/tests/data/test_379_B new file mode 100644 index 0000000..45e35ba --- /dev/null +++ b/geom_bottleneck/tests/data/test_379_B @@ -0,0 +1,2 @@ +46 95 +50 110 diff --git a/geom_bottleneck/tests/data/test_380_A b/geom_bottleneck/tests/data/test_380_A new file mode 100644 index 0000000..a6d1d31 --- /dev/null +++ b/geom_bottleneck/tests/data/test_380_A @@ -0,0 +1,3 @@ +42 50 +67 107 +6 85 diff --git a/geom_bottleneck/tests/data/test_380_B b/geom_bottleneck/tests/data/test_380_B new file mode 100644 index 0000000..023f533 --- /dev/null +++ b/geom_bottleneck/tests/data/test_380_B @@ -0,0 +1,3 @@ +31 126 +78 132 +15 92 diff --git a/geom_bottleneck/tests/data/test_381_A b/geom_bottleneck/tests/data/test_381_A new file mode 100644 index 0000000..0b5985d --- /dev/null +++ b/geom_bottleneck/tests/data/test_381_A @@ -0,0 +1,3 @@ +7 43 +49 69 +94 119 diff --git a/geom_bottleneck/tests/data/test_381_B b/geom_bottleneck/tests/data/test_381_B new file mode 100644 index 0000000..1f5ffef --- /dev/null +++ b/geom_bottleneck/tests/data/test_381_B @@ -0,0 +1,3 @@ +98 101 +89 113 +80 157 diff --git a/geom_bottleneck/tests/data/test_382_A b/geom_bottleneck/tests/data/test_382_A new file mode 100644 index 0000000..e155629 --- /dev/null +++ b/geom_bottleneck/tests/data/test_382_A @@ -0,0 +1,3 @@ +60 119 +40 77 +52 101 diff --git a/geom_bottleneck/tests/data/test_382_B b/geom_bottleneck/tests/data/test_382_B new file mode 100644 index 0000000..5273c5f --- /dev/null +++ b/geom_bottleneck/tests/data/test_382_B @@ -0,0 +1,3 @@ +9 47 +74 170 +88 93 diff --git a/geom_bottleneck/tests/data/test_383_A b/geom_bottleneck/tests/data/test_383_A new file mode 100644 index 0000000..7579cf6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_383_A @@ -0,0 +1,3 @@ +45 55 +12 57 +38 111 diff --git a/geom_bottleneck/tests/data/test_383_B b/geom_bottleneck/tests/data/test_383_B new file mode 100644 index 0000000..050e76d --- /dev/null +++ b/geom_bottleneck/tests/data/test_383_B @@ -0,0 +1,3 @@ +61 126 +14 94 +58 81 diff --git a/geom_bottleneck/tests/data/test_384_A b/geom_bottleneck/tests/data/test_384_A new file mode 100644 index 0000000..5ba83b2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_384_A @@ -0,0 +1,3 @@ +21 105 +7 55 +95 108 diff --git a/geom_bottleneck/tests/data/test_384_B b/geom_bottleneck/tests/data/test_384_B new file mode 100644 index 0000000..f1a0074 --- /dev/null +++ b/geom_bottleneck/tests/data/test_384_B @@ -0,0 +1,3 @@ +73 93 +20 52 +99 187 diff --git a/geom_bottleneck/tests/data/test_385_A b/geom_bottleneck/tests/data/test_385_A new file mode 100644 index 0000000..195db5d --- /dev/null +++ b/geom_bottleneck/tests/data/test_385_A @@ -0,0 +1,3 @@ +28 66 +4 72 +57 155 diff --git a/geom_bottleneck/tests/data/test_385_B b/geom_bottleneck/tests/data/test_385_B new file mode 100644 index 0000000..9234688 --- /dev/null +++ b/geom_bottleneck/tests/data/test_385_B @@ -0,0 +1,3 @@ +75 175 +55 79 +89 178 diff --git a/geom_bottleneck/tests/data/test_386_A b/geom_bottleneck/tests/data/test_386_A new file mode 100644 index 0000000..7a9281c --- /dev/null +++ b/geom_bottleneck/tests/data/test_386_A @@ -0,0 +1,3 @@ +65 87 +11 33 +17 45 diff --git a/geom_bottleneck/tests/data/test_386_B b/geom_bottleneck/tests/data/test_386_B new file mode 100644 index 0000000..86a3caf --- /dev/null +++ b/geom_bottleneck/tests/data/test_386_B @@ -0,0 +1,3 @@ +83 93 +13 46 +67 68 diff --git a/geom_bottleneck/tests/data/test_387_A b/geom_bottleneck/tests/data/test_387_A new file mode 100644 index 0000000..ff92400 --- /dev/null +++ b/geom_bottleneck/tests/data/test_387_A @@ -0,0 +1,3 @@ +33 68 +20 115 +21 25 diff --git a/geom_bottleneck/tests/data/test_387_B b/geom_bottleneck/tests/data/test_387_B new file mode 100644 index 0000000..c2e44a4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_387_B @@ -0,0 +1,3 @@ +44 45 +24 66 +6 45 diff --git a/geom_bottleneck/tests/data/test_388_A b/geom_bottleneck/tests/data/test_388_A new file mode 100644 index 0000000..62b75be --- /dev/null +++ b/geom_bottleneck/tests/data/test_388_A @@ -0,0 +1,3 @@ +89 163 +54 98 +45 86 diff --git a/geom_bottleneck/tests/data/test_388_B b/geom_bottleneck/tests/data/test_388_B new file mode 100644 index 0000000..025fdc6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_388_B @@ -0,0 +1,3 @@ +83 139 +91 174 +74 93 diff --git a/geom_bottleneck/tests/data/test_389_A b/geom_bottleneck/tests/data/test_389_A new file mode 100644 index 0000000..5fa0b26 --- /dev/null +++ b/geom_bottleneck/tests/data/test_389_A @@ -0,0 +1,3 @@ +93 165 +72 168 +84 113 diff --git a/geom_bottleneck/tests/data/test_389_B b/geom_bottleneck/tests/data/test_389_B new file mode 100644 index 0000000..7ebd7f3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_389_B @@ -0,0 +1,3 @@ +88 140 +82 133 +69 110 diff --git a/geom_bottleneck/tests/data/test_390_A b/geom_bottleneck/tests/data/test_390_A new file mode 100644 index 0000000..9f2c33d --- /dev/null +++ b/geom_bottleneck/tests/data/test_390_A @@ -0,0 +1,3 @@ +90 139 +28 95 +66 131 diff --git a/geom_bottleneck/tests/data/test_390_B b/geom_bottleneck/tests/data/test_390_B new file mode 100644 index 0000000..833af00 --- /dev/null +++ b/geom_bottleneck/tests/data/test_390_B @@ -0,0 +1,3 @@ +79 116 +46 68 +39 102 diff --git a/geom_bottleneck/tests/data/test_391_A b/geom_bottleneck/tests/data/test_391_A new file mode 100644 index 0000000..f353fda --- /dev/null +++ b/geom_bottleneck/tests/data/test_391_A @@ -0,0 +1,3 @@ +38 51 +43 103 +80 129 diff --git a/geom_bottleneck/tests/data/test_391_B b/geom_bottleneck/tests/data/test_391_B new file mode 100644 index 0000000..edff01f --- /dev/null +++ b/geom_bottleneck/tests/data/test_391_B @@ -0,0 +1,3 @@ +22 116 +2 92 +13 109 diff --git a/geom_bottleneck/tests/data/test_392_A b/geom_bottleneck/tests/data/test_392_A new file mode 100644 index 0000000..317da32 --- /dev/null +++ b/geom_bottleneck/tests/data/test_392_A @@ -0,0 +1,3 @@ +10 15 +48 118 +86 151 diff --git a/geom_bottleneck/tests/data/test_392_B b/geom_bottleneck/tests/data/test_392_B new file mode 100644 index 0000000..c8cb61c --- /dev/null +++ b/geom_bottleneck/tests/data/test_392_B @@ -0,0 +1,3 @@ +73 173 +27 46 +73 146 diff --git a/geom_bottleneck/tests/data/test_393_A b/geom_bottleneck/tests/data/test_393_A new file mode 100644 index 0000000..10b537c --- /dev/null +++ b/geom_bottleneck/tests/data/test_393_A @@ -0,0 +1,3 @@ +68 103 +89 121 +98 113 diff --git a/geom_bottleneck/tests/data/test_393_B b/geom_bottleneck/tests/data/test_393_B new file mode 100644 index 0000000..24bc23a --- /dev/null +++ b/geom_bottleneck/tests/data/test_393_B @@ -0,0 +1,3 @@ +68 100 +41 63 +12 41 diff --git a/geom_bottleneck/tests/data/test_394_A b/geom_bottleneck/tests/data/test_394_A new file mode 100644 index 0000000..e626e4a --- /dev/null +++ b/geom_bottleneck/tests/data/test_394_A @@ -0,0 +1,3 @@ +16 63 +5 58 +73 84 diff --git a/geom_bottleneck/tests/data/test_394_B b/geom_bottleneck/tests/data/test_394_B new file mode 100644 index 0000000..24e086f --- /dev/null +++ b/geom_bottleneck/tests/data/test_394_B @@ -0,0 +1,3 @@ +86 134 +41 102 +14 107 diff --git a/geom_bottleneck/tests/data/test_395_A b/geom_bottleneck/tests/data/test_395_A new file mode 100644 index 0000000..fa5d9e1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_395_A @@ -0,0 +1,3 @@ +76 152 +99 166 +91 110 diff --git a/geom_bottleneck/tests/data/test_395_B b/geom_bottleneck/tests/data/test_395_B new file mode 100644 index 0000000..8cc1049 --- /dev/null +++ b/geom_bottleneck/tests/data/test_395_B @@ -0,0 +1,3 @@ +42 109 +54 89 +51 113 diff --git a/geom_bottleneck/tests/data/test_396_A b/geom_bottleneck/tests/data/test_396_A new file mode 100644 index 0000000..ab2ac42 --- /dev/null +++ b/geom_bottleneck/tests/data/test_396_A @@ -0,0 +1,3 @@ +0 22 +81 139 +26 41 diff --git a/geom_bottleneck/tests/data/test_396_B b/geom_bottleneck/tests/data/test_396_B new file mode 100644 index 0000000..dd8a3d4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_396_B @@ -0,0 +1,3 @@ +76 123 +23 24 +23 118 diff --git a/geom_bottleneck/tests/data/test_397_A b/geom_bottleneck/tests/data/test_397_A new file mode 100644 index 0000000..683bdca --- /dev/null +++ b/geom_bottleneck/tests/data/test_397_A @@ -0,0 +1,3 @@ +53 128 +82 162 +34 127 diff --git a/geom_bottleneck/tests/data/test_397_B b/geom_bottleneck/tests/data/test_397_B new file mode 100644 index 0000000..a7b2d72 --- /dev/null +++ b/geom_bottleneck/tests/data/test_397_B @@ -0,0 +1,3 @@ +49 95 +82 140 +21 92 diff --git a/geom_bottleneck/tests/data/test_398_A b/geom_bottleneck/tests/data/test_398_A new file mode 100644 index 0000000..d802d50 --- /dev/null +++ b/geom_bottleneck/tests/data/test_398_A @@ -0,0 +1,3 @@ +37 98 +42 125 +79 99 diff --git a/geom_bottleneck/tests/data/test_398_B b/geom_bottleneck/tests/data/test_398_B new file mode 100644 index 0000000..9e5b5e1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_398_B @@ -0,0 +1,3 @@ +48 91 +49 115 +65 158 diff --git a/geom_bottleneck/tests/data/test_399_A b/geom_bottleneck/tests/data/test_399_A new file mode 100644 index 0000000..204dfdf --- /dev/null +++ b/geom_bottleneck/tests/data/test_399_A @@ -0,0 +1,3 @@ +87 153 +22 28 +68 72 diff --git a/geom_bottleneck/tests/data/test_399_B b/geom_bottleneck/tests/data/test_399_B new file mode 100644 index 0000000..58cb084 --- /dev/null +++ b/geom_bottleneck/tests/data/test_399_B @@ -0,0 +1,3 @@ +33 93 +3 10 +21 32 diff --git a/geom_bottleneck/tests/data/test_400_A b/geom_bottleneck/tests/data/test_400_A new file mode 100644 index 0000000..b867cf5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_400_A @@ -0,0 +1,4 @@ +55 89 +35 85 +62 84 +84 151 diff --git a/geom_bottleneck/tests/data/test_400_B b/geom_bottleneck/tests/data/test_400_B new file mode 100644 index 0000000..18df91d --- /dev/null +++ b/geom_bottleneck/tests/data/test_400_B @@ -0,0 +1,4 @@ +37 89 +45 56 +4 79 +86 139 diff --git a/geom_bottleneck/tests/data/test_401_A b/geom_bottleneck/tests/data/test_401_A new file mode 100644 index 0000000..0f03308 --- /dev/null +++ b/geom_bottleneck/tests/data/test_401_A @@ -0,0 +1,4 @@ +15 34 +2 72 +14 50 +58 86 diff --git a/geom_bottleneck/tests/data/test_401_B b/geom_bottleneck/tests/data/test_401_B new file mode 100644 index 0000000..b517be8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_401_B @@ -0,0 +1,4 @@ +85 97 +24 54 +44 45 +75 171 diff --git a/geom_bottleneck/tests/data/test_402_A b/geom_bottleneck/tests/data/test_402_A new file mode 100644 index 0000000..6a6f79f --- /dev/null +++ b/geom_bottleneck/tests/data/test_402_A @@ -0,0 +1,4 @@ +97 167 +17 65 +82 157 +88 110 diff --git a/geom_bottleneck/tests/data/test_402_B b/geom_bottleneck/tests/data/test_402_B new file mode 100644 index 0000000..6585f2b --- /dev/null +++ b/geom_bottleneck/tests/data/test_402_B @@ -0,0 +1,4 @@ +69 87 +32 52 +71 92 +38 91 diff --git a/geom_bottleneck/tests/data/test_403_A b/geom_bottleneck/tests/data/test_403_A new file mode 100644 index 0000000..8b5929a --- /dev/null +++ b/geom_bottleneck/tests/data/test_403_A @@ -0,0 +1,4 @@ +75 84 +86 184 +46 132 +79 136 diff --git a/geom_bottleneck/tests/data/test_403_B b/geom_bottleneck/tests/data/test_403_B new file mode 100644 index 0000000..71f089f --- /dev/null +++ b/geom_bottleneck/tests/data/test_403_B @@ -0,0 +1,4 @@ +41 132 +44 72 +6 105 +91 187 diff --git a/geom_bottleneck/tests/data/test_404_A b/geom_bottleneck/tests/data/test_404_A new file mode 100644 index 0000000..10add8e --- /dev/null +++ b/geom_bottleneck/tests/data/test_404_A @@ -0,0 +1,4 @@ +28 95 +43 126 +75 105 +2 101 diff --git a/geom_bottleneck/tests/data/test_404_B b/geom_bottleneck/tests/data/test_404_B new file mode 100644 index 0000000..b38a7a7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_404_B @@ -0,0 +1,4 @@ +49 56 +50 116 +54 132 +55 94 diff --git a/geom_bottleneck/tests/data/test_405_A b/geom_bottleneck/tests/data/test_405_A new file mode 100644 index 0000000..6cab1bd --- /dev/null +++ b/geom_bottleneck/tests/data/test_405_A @@ -0,0 +1,4 @@ +53 120 +12 15 +80 83 +79 96 diff --git a/geom_bottleneck/tests/data/test_405_B b/geom_bottleneck/tests/data/test_405_B new file mode 100644 index 0000000..96645aa --- /dev/null +++ b/geom_bottleneck/tests/data/test_405_B @@ -0,0 +1,4 @@ +41 113 +17 18 +22 39 +89 135 diff --git a/geom_bottleneck/tests/data/test_406_A b/geom_bottleneck/tests/data/test_406_A new file mode 100644 index 0000000..cf08c48 --- /dev/null +++ b/geom_bottleneck/tests/data/test_406_A @@ -0,0 +1,4 @@ +88 168 +26 35 +96 126 +84 102 diff --git a/geom_bottleneck/tests/data/test_406_B b/geom_bottleneck/tests/data/test_406_B new file mode 100644 index 0000000..b4ca0a0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_406_B @@ -0,0 +1,4 @@ +81 173 +76 111 +2 15 +44 142 diff --git a/geom_bottleneck/tests/data/test_407_A b/geom_bottleneck/tests/data/test_407_A new file mode 100644 index 0000000..2372aba --- /dev/null +++ b/geom_bottleneck/tests/data/test_407_A @@ -0,0 +1,4 @@ +55 92 +95 170 +51 149 +76 156 diff --git a/geom_bottleneck/tests/data/test_407_B b/geom_bottleneck/tests/data/test_407_B new file mode 100644 index 0000000..bd43334 --- /dev/null +++ b/geom_bottleneck/tests/data/test_407_B @@ -0,0 +1,4 @@ +55 100 +17 86 +37 66 +97 131 diff --git a/geom_bottleneck/tests/data/test_408_A b/geom_bottleneck/tests/data/test_408_A new file mode 100644 index 0000000..91652d4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_408_A @@ -0,0 +1,4 @@ +3 9 +50 134 +50 115 +30 82 diff --git a/geom_bottleneck/tests/data/test_408_B b/geom_bottleneck/tests/data/test_408_B new file mode 100644 index 0000000..5f936a7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_408_B @@ -0,0 +1,4 @@ +57 103 +83 173 +20 58 +74 93 diff --git a/geom_bottleneck/tests/data/test_409_A b/geom_bottleneck/tests/data/test_409_A new file mode 100644 index 0000000..b4d01d2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_409_A @@ -0,0 +1,4 @@ +87 144 +33 79 +44 110 +42 92 diff --git a/geom_bottleneck/tests/data/test_409_B b/geom_bottleneck/tests/data/test_409_B new file mode 100644 index 0000000..4e15e41 --- /dev/null +++ b/geom_bottleneck/tests/data/test_409_B @@ -0,0 +1,4 @@ +2 39 +82 170 +1 40 +50 115 diff --git a/geom_bottleneck/tests/data/test_410_A b/geom_bottleneck/tests/data/test_410_A new file mode 100644 index 0000000..c02ab24 --- /dev/null +++ b/geom_bottleneck/tests/data/test_410_A @@ -0,0 +1,4 @@ +15 80 +70 160 +52 144 +100 134 diff --git a/geom_bottleneck/tests/data/test_410_B b/geom_bottleneck/tests/data/test_410_B new file mode 100644 index 0000000..d000095 --- /dev/null +++ b/geom_bottleneck/tests/data/test_410_B @@ -0,0 +1,4 @@ +87 144 +43 91 +68 77 +79 172 diff --git a/geom_bottleneck/tests/data/test_411_A b/geom_bottleneck/tests/data/test_411_A new file mode 100644 index 0000000..8130c4a --- /dev/null +++ b/geom_bottleneck/tests/data/test_411_A @@ -0,0 +1,4 @@ +81 158 +50 142 +83 129 +74 85 diff --git a/geom_bottleneck/tests/data/test_411_B b/geom_bottleneck/tests/data/test_411_B new file mode 100644 index 0000000..e53f61f --- /dev/null +++ b/geom_bottleneck/tests/data/test_411_B @@ -0,0 +1,4 @@ +31 115 +57 108 +83 135 +2 26 diff --git a/geom_bottleneck/tests/data/test_412_A b/geom_bottleneck/tests/data/test_412_A new file mode 100644 index 0000000..34a88b0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_412_A @@ -0,0 +1,4 @@ +5 31 +39 91 +24 75 +93 128 diff --git a/geom_bottleneck/tests/data/test_412_B b/geom_bottleneck/tests/data/test_412_B new file mode 100644 index 0000000..a163ece --- /dev/null +++ b/geom_bottleneck/tests/data/test_412_B @@ -0,0 +1,4 @@ +0 76 +97 144 +55 92 +1 67 diff --git a/geom_bottleneck/tests/data/test_413_A b/geom_bottleneck/tests/data/test_413_A new file mode 100644 index 0000000..61d6f70 --- /dev/null +++ b/geom_bottleneck/tests/data/test_413_A @@ -0,0 +1,4 @@ +44 111 +69 88 +8 80 +78 113 diff --git a/geom_bottleneck/tests/data/test_413_B b/geom_bottleneck/tests/data/test_413_B new file mode 100644 index 0000000..5b9dc54 --- /dev/null +++ b/geom_bottleneck/tests/data/test_413_B @@ -0,0 +1,4 @@ +87 159 +53 114 +70 136 +63 103 diff --git a/geom_bottleneck/tests/data/test_414_A b/geom_bottleneck/tests/data/test_414_A new file mode 100644 index 0000000..933f1e4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_414_A @@ -0,0 +1,4 @@ +39 44 +29 113 +85 158 +59 77 diff --git a/geom_bottleneck/tests/data/test_414_B b/geom_bottleneck/tests/data/test_414_B new file mode 100644 index 0000000..b54a5fe --- /dev/null +++ b/geom_bottleneck/tests/data/test_414_B @@ -0,0 +1,4 @@ +14 109 +5 90 +85 134 +60 88 diff --git a/geom_bottleneck/tests/data/test_415_A b/geom_bottleneck/tests/data/test_415_A new file mode 100644 index 0000000..bbce6b8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_415_A @@ -0,0 +1,4 @@ +23 70 +40 46 +21 109 +50 149 diff --git a/geom_bottleneck/tests/data/test_415_B b/geom_bottleneck/tests/data/test_415_B new file mode 100644 index 0000000..3943a46 --- /dev/null +++ b/geom_bottleneck/tests/data/test_415_B @@ -0,0 +1,4 @@ +14 80 +74 154 +50 70 +90 173 diff --git a/geom_bottleneck/tests/data/test_416_A b/geom_bottleneck/tests/data/test_416_A new file mode 100644 index 0000000..c7a9a3d --- /dev/null +++ b/geom_bottleneck/tests/data/test_416_A @@ -0,0 +1,4 @@ +23 53 +20 94 +89 105 +98 146 diff --git a/geom_bottleneck/tests/data/test_416_B b/geom_bottleneck/tests/data/test_416_B new file mode 100644 index 0000000..6e8c430 --- /dev/null +++ b/geom_bottleneck/tests/data/test_416_B @@ -0,0 +1,4 @@ +73 74 +62 124 +95 126 +62 141 diff --git a/geom_bottleneck/tests/data/test_417_A b/geom_bottleneck/tests/data/test_417_A new file mode 100644 index 0000000..6e5688c --- /dev/null +++ b/geom_bottleneck/tests/data/test_417_A @@ -0,0 +1,4 @@ +66 148 +86 117 +4 32 +95 146 diff --git a/geom_bottleneck/tests/data/test_417_B b/geom_bottleneck/tests/data/test_417_B new file mode 100644 index 0000000..2bfa9c2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_417_B @@ -0,0 +1,4 @@ +87 111 +23 122 +62 95 +12 22 diff --git a/geom_bottleneck/tests/data/test_418_A b/geom_bottleneck/tests/data/test_418_A new file mode 100644 index 0000000..9ab98de --- /dev/null +++ b/geom_bottleneck/tests/data/test_418_A @@ -0,0 +1,4 @@ +29 122 +71 102 +70 109 +43 120 diff --git a/geom_bottleneck/tests/data/test_418_B b/geom_bottleneck/tests/data/test_418_B new file mode 100644 index 0000000..f3231de --- /dev/null +++ b/geom_bottleneck/tests/data/test_418_B @@ -0,0 +1,4 @@ +45 121 +58 64 +57 105 +41 138 diff --git a/geom_bottleneck/tests/data/test_419_A b/geom_bottleneck/tests/data/test_419_A new file mode 100644 index 0000000..825d191 --- /dev/null +++ b/geom_bottleneck/tests/data/test_419_A @@ -0,0 +1,4 @@ +28 111 +100 167 +17 59 +10 38 diff --git a/geom_bottleneck/tests/data/test_419_B b/geom_bottleneck/tests/data/test_419_B new file mode 100644 index 0000000..101be4f --- /dev/null +++ b/geom_bottleneck/tests/data/test_419_B @@ -0,0 +1,4 @@ +63 99 +78 143 +67 150 +24 77 diff --git a/geom_bottleneck/tests/data/test_420_A b/geom_bottleneck/tests/data/test_420_A new file mode 100644 index 0000000..455d829 --- /dev/null +++ b/geom_bottleneck/tests/data/test_420_A @@ -0,0 +1,5 @@ +89 160 +26 36 +37 61 +95 137 +41 68 diff --git a/geom_bottleneck/tests/data/test_420_B b/geom_bottleneck/tests/data/test_420_B new file mode 100644 index 0000000..27e1c6d --- /dev/null +++ b/geom_bottleneck/tests/data/test_420_B @@ -0,0 +1,5 @@ +100 185 +31 112 +78 129 +49 143 +74 171 diff --git a/geom_bottleneck/tests/data/test_421_A b/geom_bottleneck/tests/data/test_421_A new file mode 100644 index 0000000..c08ddf1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_421_A @@ -0,0 +1,5 @@ +27 127 +2 101 +42 52 +5 81 +4 62 diff --git a/geom_bottleneck/tests/data/test_421_B b/geom_bottleneck/tests/data/test_421_B new file mode 100644 index 0000000..37cbda8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_421_B @@ -0,0 +1,5 @@ +27 40 +67 78 +50 122 +41 95 +1 63 diff --git a/geom_bottleneck/tests/data/test_422_A b/geom_bottleneck/tests/data/test_422_A new file mode 100644 index 0000000..348a116 --- /dev/null +++ b/geom_bottleneck/tests/data/test_422_A @@ -0,0 +1,5 @@ +54 143 +21 24 +96 180 +13 113 +93 134 diff --git a/geom_bottleneck/tests/data/test_422_B b/geom_bottleneck/tests/data/test_422_B new file mode 100644 index 0000000..0f33ae9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_422_B @@ -0,0 +1,5 @@ +5 18 +63 106 +29 94 +59 155 +66 155 diff --git a/geom_bottleneck/tests/data/test_423_A b/geom_bottleneck/tests/data/test_423_A new file mode 100644 index 0000000..b3b448e --- /dev/null +++ b/geom_bottleneck/tests/data/test_423_A @@ -0,0 +1,5 @@ +47 88 +80 138 +75 129 +2 90 +58 133 diff --git a/geom_bottleneck/tests/data/test_423_B b/geom_bottleneck/tests/data/test_423_B new file mode 100644 index 0000000..873a875 --- /dev/null +++ b/geom_bottleneck/tests/data/test_423_B @@ -0,0 +1,5 @@ +77 129 +99 174 +93 104 +71 93 +18 26 diff --git a/geom_bottleneck/tests/data/test_424_A b/geom_bottleneck/tests/data/test_424_A new file mode 100644 index 0000000..ab20fc1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_424_A @@ -0,0 +1,5 @@ +73 167 +50 133 +25 41 +46 87 +27 93 diff --git a/geom_bottleneck/tests/data/test_424_B b/geom_bottleneck/tests/data/test_424_B new file mode 100644 index 0000000..a0f5059 --- /dev/null +++ b/geom_bottleneck/tests/data/test_424_B @@ -0,0 +1,5 @@ +71 113 +54 63 +0 33 +27 127 +14 79 diff --git a/geom_bottleneck/tests/data/test_425_A b/geom_bottleneck/tests/data/test_425_A new file mode 100644 index 0000000..7116974 --- /dev/null +++ b/geom_bottleneck/tests/data/test_425_A @@ -0,0 +1,5 @@ +90 168 +44 63 +83 88 +80 81 +13 94 diff --git a/geom_bottleneck/tests/data/test_425_B b/geom_bottleneck/tests/data/test_425_B new file mode 100644 index 0000000..6f1e713 --- /dev/null +++ b/geom_bottleneck/tests/data/test_425_B @@ -0,0 +1,5 @@ +66 161 +99 137 +71 147 +58 80 +42 96 diff --git a/geom_bottleneck/tests/data/test_426_A b/geom_bottleneck/tests/data/test_426_A new file mode 100644 index 0000000..6404cdd --- /dev/null +++ b/geom_bottleneck/tests/data/test_426_A @@ -0,0 +1,5 @@ +90 161 +75 121 +54 111 +21 84 +73 106 diff --git a/geom_bottleneck/tests/data/test_426_B b/geom_bottleneck/tests/data/test_426_B new file mode 100644 index 0000000..06fbc21 --- /dev/null +++ b/geom_bottleneck/tests/data/test_426_B @@ -0,0 +1,5 @@ +82 109 +85 100 +26 92 +52 91 +23 83 diff --git a/geom_bottleneck/tests/data/test_427_A b/geom_bottleneck/tests/data/test_427_A new file mode 100644 index 0000000..ab36b49 --- /dev/null +++ b/geom_bottleneck/tests/data/test_427_A @@ -0,0 +1,5 @@ +15 28 +39 93 +1 43 +16 98 +81 167 diff --git a/geom_bottleneck/tests/data/test_427_B b/geom_bottleneck/tests/data/test_427_B new file mode 100644 index 0000000..eb34e17 --- /dev/null +++ b/geom_bottleneck/tests/data/test_427_B @@ -0,0 +1,5 @@ +57 70 +99 181 +26 81 +13 32 +95 153 diff --git a/geom_bottleneck/tests/data/test_428_A b/geom_bottleneck/tests/data/test_428_A new file mode 100644 index 0000000..12957ab --- /dev/null +++ b/geom_bottleneck/tests/data/test_428_A @@ -0,0 +1,5 @@ +85 155 +86 173 +63 88 +50 84 +75 85 diff --git a/geom_bottleneck/tests/data/test_428_B b/geom_bottleneck/tests/data/test_428_B new file mode 100644 index 0000000..b0fd1c4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_428_B @@ -0,0 +1,5 @@ +70 113 +92 93 +57 103 +40 81 +9 47 diff --git a/geom_bottleneck/tests/data/test_429_A b/geom_bottleneck/tests/data/test_429_A new file mode 100644 index 0000000..0cdda41 --- /dev/null +++ b/geom_bottleneck/tests/data/test_429_A @@ -0,0 +1,5 @@ +90 165 +83 128 +5 28 +68 121 +1 67 diff --git a/geom_bottleneck/tests/data/test_429_B b/geom_bottleneck/tests/data/test_429_B new file mode 100644 index 0000000..0180a92 --- /dev/null +++ b/geom_bottleneck/tests/data/test_429_B @@ -0,0 +1,5 @@ +31 34 +88 147 +17 91 +46 138 +13 81 diff --git a/geom_bottleneck/tests/data/test_430_A b/geom_bottleneck/tests/data/test_430_A new file mode 100644 index 0000000..03029c6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_430_A @@ -0,0 +1,5 @@ +85 181 +93 118 +77 167 +39 110 +21 22 diff --git a/geom_bottleneck/tests/data/test_430_B b/geom_bottleneck/tests/data/test_430_B new file mode 100644 index 0000000..9c58f1f --- /dev/null +++ b/geom_bottleneck/tests/data/test_430_B @@ -0,0 +1,5 @@ +59 88 +28 29 +56 57 +3 73 +78 93 diff --git a/geom_bottleneck/tests/data/test_431_A b/geom_bottleneck/tests/data/test_431_A new file mode 100644 index 0000000..272ec7d --- /dev/null +++ b/geom_bottleneck/tests/data/test_431_A @@ -0,0 +1,5 @@ +26 28 +90 172 +46 118 +25 102 +78 141 diff --git a/geom_bottleneck/tests/data/test_431_B b/geom_bottleneck/tests/data/test_431_B new file mode 100644 index 0000000..9ccc9d1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_431_B @@ -0,0 +1,5 @@ +25 107 +61 128 +24 111 +47 48 +70 96 diff --git a/geom_bottleneck/tests/data/test_432_A b/geom_bottleneck/tests/data/test_432_A new file mode 100644 index 0000000..91dbacb --- /dev/null +++ b/geom_bottleneck/tests/data/test_432_A @@ -0,0 +1,5 @@ +53 78 +16 74 +6 106 +46 145 +33 41 diff --git a/geom_bottleneck/tests/data/test_432_B b/geom_bottleneck/tests/data/test_432_B new file mode 100644 index 0000000..47afd85 --- /dev/null +++ b/geom_bottleneck/tests/data/test_432_B @@ -0,0 +1,5 @@ +16 100 +70 119 +42 137 +94 164 +94 105 diff --git a/geom_bottleneck/tests/data/test_433_A b/geom_bottleneck/tests/data/test_433_A new file mode 100644 index 0000000..1577e13 --- /dev/null +++ b/geom_bottleneck/tests/data/test_433_A @@ -0,0 +1,5 @@ +30 97 +79 93 +42 97 +88 140 +85 131 diff --git a/geom_bottleneck/tests/data/test_433_B b/geom_bottleneck/tests/data/test_433_B new file mode 100644 index 0000000..f63aea0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_433_B @@ -0,0 +1,5 @@ +38 55 +29 129 +30 97 +11 43 +26 59 diff --git a/geom_bottleneck/tests/data/test_434_A b/geom_bottleneck/tests/data/test_434_A new file mode 100644 index 0000000..5ef7655 --- /dev/null +++ b/geom_bottleneck/tests/data/test_434_A @@ -0,0 +1,5 @@ +63 102 +32 38 +98 179 +89 136 +39 67 diff --git a/geom_bottleneck/tests/data/test_434_B b/geom_bottleneck/tests/data/test_434_B new file mode 100644 index 0000000..a089420 --- /dev/null +++ b/geom_bottleneck/tests/data/test_434_B @@ -0,0 +1,5 @@ +92 101 +9 11 +47 138 +95 176 +8 87 diff --git a/geom_bottleneck/tests/data/test_435_A b/geom_bottleneck/tests/data/test_435_A new file mode 100644 index 0000000..9021906 --- /dev/null +++ b/geom_bottleneck/tests/data/test_435_A @@ -0,0 +1,5 @@ +34 98 +33 80 +18 85 +36 100 +60 64 diff --git a/geom_bottleneck/tests/data/test_435_B b/geom_bottleneck/tests/data/test_435_B new file mode 100644 index 0000000..225d87c --- /dev/null +++ b/geom_bottleneck/tests/data/test_435_B @@ -0,0 +1,5 @@ +96 175 +12 80 +79 166 +28 88 +81 150 diff --git a/geom_bottleneck/tests/data/test_436_A b/geom_bottleneck/tests/data/test_436_A new file mode 100644 index 0000000..4004cfe --- /dev/null +++ b/geom_bottleneck/tests/data/test_436_A @@ -0,0 +1,5 @@ +59 101 +23 98 +15 108 +65 119 +67 91 diff --git a/geom_bottleneck/tests/data/test_436_B b/geom_bottleneck/tests/data/test_436_B new file mode 100644 index 0000000..8fbd097 --- /dev/null +++ b/geom_bottleneck/tests/data/test_436_B @@ -0,0 +1,5 @@ +23 86 +58 123 +18 62 +100 165 +6 105 diff --git a/geom_bottleneck/tests/data/test_437_A b/geom_bottleneck/tests/data/test_437_A new file mode 100644 index 0000000..8210316 --- /dev/null +++ b/geom_bottleneck/tests/data/test_437_A @@ -0,0 +1,5 @@ +10 38 +90 165 +35 122 +100 170 +62 93 diff --git a/geom_bottleneck/tests/data/test_437_B b/geom_bottleneck/tests/data/test_437_B new file mode 100644 index 0000000..c7e55b3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_437_B @@ -0,0 +1,5 @@ +27 73 +87 187 +78 176 +44 82 +58 77 diff --git a/geom_bottleneck/tests/data/test_438_A b/geom_bottleneck/tests/data/test_438_A new file mode 100644 index 0000000..e2f48a4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_438_A @@ -0,0 +1,5 @@ +14 74 +65 127 +21 51 +19 42 +58 96 diff --git a/geom_bottleneck/tests/data/test_438_B b/geom_bottleneck/tests/data/test_438_B new file mode 100644 index 0000000..eb84689 --- /dev/null +++ b/geom_bottleneck/tests/data/test_438_B @@ -0,0 +1,5 @@ +97 165 +49 116 +73 83 +6 8 +99 153 diff --git a/geom_bottleneck/tests/data/test_439_A b/geom_bottleneck/tests/data/test_439_A new file mode 100644 index 0000000..fc36518 --- /dev/null +++ b/geom_bottleneck/tests/data/test_439_A @@ -0,0 +1,5 @@ +66 120 +59 119 +40 56 +42 120 +48 140 diff --git a/geom_bottleneck/tests/data/test_439_B b/geom_bottleneck/tests/data/test_439_B new file mode 100644 index 0000000..b9de5b7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_439_B @@ -0,0 +1,5 @@ +25 94 +94 157 +64 156 +79 100 +28 98 diff --git a/geom_bottleneck/tests/data/test_440_A b/geom_bottleneck/tests/data/test_440_A new file mode 100644 index 0000000..4f0cdc2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_440_A @@ -0,0 +1,6 @@ +25 32 +90 153 +23 86 +4 29 +52 124 +17 75 diff --git a/geom_bottleneck/tests/data/test_440_B b/geom_bottleneck/tests/data/test_440_B new file mode 100644 index 0000000..c06754e --- /dev/null +++ b/geom_bottleneck/tests/data/test_440_B @@ -0,0 +1,6 @@ +47 132 +64 156 +96 149 +31 94 +86 94 +40 63 diff --git a/geom_bottleneck/tests/data/test_441_A b/geom_bottleneck/tests/data/test_441_A new file mode 100644 index 0000000..f1d7779 --- /dev/null +++ b/geom_bottleneck/tests/data/test_441_A @@ -0,0 +1,6 @@ +45 121 +61 95 +57 68 +10 82 +90 147 +80 179 diff --git a/geom_bottleneck/tests/data/test_441_B b/geom_bottleneck/tests/data/test_441_B new file mode 100644 index 0000000..039c8db --- /dev/null +++ b/geom_bottleneck/tests/data/test_441_B @@ -0,0 +1,6 @@ +97 122 +44 109 +15 48 +49 106 +30 65 +66 70 diff --git a/geom_bottleneck/tests/data/test_442_A b/geom_bottleneck/tests/data/test_442_A new file mode 100644 index 0000000..9a22bd2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_442_A @@ -0,0 +1,6 @@ +44 47 +6 81 +66 163 +74 144 +66 135 +62 63 diff --git a/geom_bottleneck/tests/data/test_442_B b/geom_bottleneck/tests/data/test_442_B new file mode 100644 index 0000000..9663228 --- /dev/null +++ b/geom_bottleneck/tests/data/test_442_B @@ -0,0 +1,6 @@ +41 65 +52 109 +96 175 +80 93 +32 78 +97 124 diff --git a/geom_bottleneck/tests/data/test_443_A b/geom_bottleneck/tests/data/test_443_A new file mode 100644 index 0000000..27d9885 --- /dev/null +++ b/geom_bottleneck/tests/data/test_443_A @@ -0,0 +1,6 @@ +19 38 +86 142 +86 132 +32 118 +73 138 +25 83 diff --git a/geom_bottleneck/tests/data/test_443_B b/geom_bottleneck/tests/data/test_443_B new file mode 100644 index 0000000..c084218 --- /dev/null +++ b/geom_bottleneck/tests/data/test_443_B @@ -0,0 +1,6 @@ +78 165 +88 138 +5 29 +81 109 +4 96 +69 130 diff --git a/geom_bottleneck/tests/data/test_444_A b/geom_bottleneck/tests/data/test_444_A new file mode 100644 index 0000000..86dfb79 --- /dev/null +++ b/geom_bottleneck/tests/data/test_444_A @@ -0,0 +1,6 @@ +22 23 +59 111 +65 91 +0 56 +92 156 +67 69 diff --git a/geom_bottleneck/tests/data/test_444_B b/geom_bottleneck/tests/data/test_444_B new file mode 100644 index 0000000..b7f54f9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_444_B @@ -0,0 +1,6 @@ +20 39 +0 44 +34 84 +3 30 +70 96 +92 127 diff --git a/geom_bottleneck/tests/data/test_445_A b/geom_bottleneck/tests/data/test_445_A new file mode 100644 index 0000000..6ec29f6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_445_A @@ -0,0 +1,6 @@ +49 64 +36 102 +43 120 +98 194 +65 110 +49 89 diff --git a/geom_bottleneck/tests/data/test_445_B b/geom_bottleneck/tests/data/test_445_B new file mode 100644 index 0000000..7e5ce8e --- /dev/null +++ b/geom_bottleneck/tests/data/test_445_B @@ -0,0 +1,6 @@ +84 88 +42 132 +26 36 +11 91 +17 114 +37 70 diff --git a/geom_bottleneck/tests/data/test_446_A b/geom_bottleneck/tests/data/test_446_A new file mode 100644 index 0000000..2e66159 --- /dev/null +++ b/geom_bottleneck/tests/data/test_446_A @@ -0,0 +1,6 @@ +48 147 +86 146 +42 64 +39 111 +71 113 +59 63 diff --git a/geom_bottleneck/tests/data/test_446_B b/geom_bottleneck/tests/data/test_446_B new file mode 100644 index 0000000..b4a4baa --- /dev/null +++ b/geom_bottleneck/tests/data/test_446_B @@ -0,0 +1,6 @@ +14 15 +64 163 +23 41 +4 90 +3 23 +66 68 diff --git a/geom_bottleneck/tests/data/test_447_A b/geom_bottleneck/tests/data/test_447_A new file mode 100644 index 0000000..adbca26 --- /dev/null +++ b/geom_bottleneck/tests/data/test_447_A @@ -0,0 +1,6 @@ +91 119 +93 186 +11 53 +85 87 +8 50 +69 84 diff --git a/geom_bottleneck/tests/data/test_447_B b/geom_bottleneck/tests/data/test_447_B new file mode 100644 index 0000000..c996a99 --- /dev/null +++ b/geom_bottleneck/tests/data/test_447_B @@ -0,0 +1,6 @@ +67 71 +77 143 +48 103 +80 121 +73 107 +18 36 diff --git a/geom_bottleneck/tests/data/test_448_A b/geom_bottleneck/tests/data/test_448_A new file mode 100644 index 0000000..3b1d2ac --- /dev/null +++ b/geom_bottleneck/tests/data/test_448_A @@ -0,0 +1,6 @@ +99 127 +80 81 +72 138 +40 123 +76 120 +13 52 diff --git a/geom_bottleneck/tests/data/test_448_B b/geom_bottleneck/tests/data/test_448_B new file mode 100644 index 0000000..358c96b --- /dev/null +++ b/geom_bottleneck/tests/data/test_448_B @@ -0,0 +1,6 @@ +94 105 +31 105 +2 50 +91 132 +63 86 +81 116 diff --git a/geom_bottleneck/tests/data/test_449_A b/geom_bottleneck/tests/data/test_449_A new file mode 100644 index 0000000..1b9fdde --- /dev/null +++ b/geom_bottleneck/tests/data/test_449_A @@ -0,0 +1,6 @@ +99 164 +24 78 +75 119 +62 129 +93 117 +34 124 diff --git a/geom_bottleneck/tests/data/test_449_B b/geom_bottleneck/tests/data/test_449_B new file mode 100644 index 0000000..39ca7bf --- /dev/null +++ b/geom_bottleneck/tests/data/test_449_B @@ -0,0 +1,6 @@ +5 101 +53 86 +58 92 +99 198 +48 57 +34 102 diff --git a/geom_bottleneck/tests/data/test_450_A b/geom_bottleneck/tests/data/test_450_A new file mode 100644 index 0000000..c97d1bd --- /dev/null +++ b/geom_bottleneck/tests/data/test_450_A @@ -0,0 +1,6 @@ +98 112 +27 55 +36 69 +5 32 +36 85 +24 90 diff --git a/geom_bottleneck/tests/data/test_450_B b/geom_bottleneck/tests/data/test_450_B new file mode 100644 index 0000000..038d497 --- /dev/null +++ b/geom_bottleneck/tests/data/test_450_B @@ -0,0 +1,6 @@ +66 156 +74 158 +85 136 +4 53 +61 93 +13 37 diff --git a/geom_bottleneck/tests/data/test_451_A b/geom_bottleneck/tests/data/test_451_A new file mode 100644 index 0000000..1c77ff4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_451_A @@ -0,0 +1,6 @@ +83 99 +42 129 +82 117 +35 132 +1 101 +53 115 diff --git a/geom_bottleneck/tests/data/test_451_B b/geom_bottleneck/tests/data/test_451_B new file mode 100644 index 0000000..37c9b78 --- /dev/null +++ b/geom_bottleneck/tests/data/test_451_B @@ -0,0 +1,6 @@ +18 102 +62 111 +17 40 +78 135 +20 23 +69 77 diff --git a/geom_bottleneck/tests/data/test_452_A b/geom_bottleneck/tests/data/test_452_A new file mode 100644 index 0000000..24159ea --- /dev/null +++ b/geom_bottleneck/tests/data/test_452_A @@ -0,0 +1,6 @@ +12 65 +2 42 +61 93 +22 31 +66 139 +44 106 diff --git a/geom_bottleneck/tests/data/test_452_B b/geom_bottleneck/tests/data/test_452_B new file mode 100644 index 0000000..602fb45 --- /dev/null +++ b/geom_bottleneck/tests/data/test_452_B @@ -0,0 +1,6 @@ +88 156 +1 91 +7 42 +83 94 +50 133 +82 146 diff --git a/geom_bottleneck/tests/data/test_453_A b/geom_bottleneck/tests/data/test_453_A new file mode 100644 index 0000000..aa29541 --- /dev/null +++ b/geom_bottleneck/tests/data/test_453_A @@ -0,0 +1,6 @@ +39 50 +28 76 +83 87 +27 38 +85 120 +57 78 diff --git a/geom_bottleneck/tests/data/test_453_B b/geom_bottleneck/tests/data/test_453_B new file mode 100644 index 0000000..7cce047 --- /dev/null +++ b/geom_bottleneck/tests/data/test_453_B @@ -0,0 +1,6 @@ +59 106 +28 69 +91 189 +43 57 +32 33 +75 156 diff --git a/geom_bottleneck/tests/data/test_454_A b/geom_bottleneck/tests/data/test_454_A new file mode 100644 index 0000000..3e5e41b --- /dev/null +++ b/geom_bottleneck/tests/data/test_454_A @@ -0,0 +1,6 @@ +32 39 +6 50 +72 153 +38 115 +23 45 +18 34 diff --git a/geom_bottleneck/tests/data/test_454_B b/geom_bottleneck/tests/data/test_454_B new file mode 100644 index 0000000..e5e2305 --- /dev/null +++ b/geom_bottleneck/tests/data/test_454_B @@ -0,0 +1,6 @@ +83 180 +76 118 +76 114 +95 192 +19 53 +42 81 diff --git a/geom_bottleneck/tests/data/test_455_A b/geom_bottleneck/tests/data/test_455_A new file mode 100644 index 0000000..d06d256 --- /dev/null +++ b/geom_bottleneck/tests/data/test_455_A @@ -0,0 +1,6 @@ +80 110 +12 104 +89 151 +71 168 +91 95 +27 55 diff --git a/geom_bottleneck/tests/data/test_455_B b/geom_bottleneck/tests/data/test_455_B new file mode 100644 index 0000000..afdab0b --- /dev/null +++ b/geom_bottleneck/tests/data/test_455_B @@ -0,0 +1,6 @@ +68 166 +33 38 +66 158 +72 93 +66 96 +82 88 diff --git a/geom_bottleneck/tests/data/test_456_A b/geom_bottleneck/tests/data/test_456_A new file mode 100644 index 0000000..7a30bf3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_456_A @@ -0,0 +1,6 @@ +72 114 +8 79 +19 50 +72 134 +94 108 +5 24 diff --git a/geom_bottleneck/tests/data/test_456_B b/geom_bottleneck/tests/data/test_456_B new file mode 100644 index 0000000..a1a1329 --- /dev/null +++ b/geom_bottleneck/tests/data/test_456_B @@ -0,0 +1,6 @@ +86 114 +38 105 +46 98 +20 90 +98 118 +52 142 diff --git a/geom_bottleneck/tests/data/test_457_A b/geom_bottleneck/tests/data/test_457_A new file mode 100644 index 0000000..d5339ec --- /dev/null +++ b/geom_bottleneck/tests/data/test_457_A @@ -0,0 +1,6 @@ +70 109 +61 79 +55 152 +88 187 +64 136 +71 110 diff --git a/geom_bottleneck/tests/data/test_457_B b/geom_bottleneck/tests/data/test_457_B new file mode 100644 index 0000000..e96c110 --- /dev/null +++ b/geom_bottleneck/tests/data/test_457_B @@ -0,0 +1,6 @@ +57 128 +47 82 +87 96 +97 132 +23 41 +6 104 diff --git a/geom_bottleneck/tests/data/test_458_A b/geom_bottleneck/tests/data/test_458_A new file mode 100644 index 0000000..a9287b2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_458_A @@ -0,0 +1,6 @@ +43 63 +79 80 +77 142 +50 116 +43 46 +45 139 diff --git a/geom_bottleneck/tests/data/test_458_B b/geom_bottleneck/tests/data/test_458_B new file mode 100644 index 0000000..63b7c63 --- /dev/null +++ b/geom_bottleneck/tests/data/test_458_B @@ -0,0 +1,6 @@ +69 79 +9 64 +29 115 +33 87 +5 100 +24 71 diff --git a/geom_bottleneck/tests/data/test_459_A b/geom_bottleneck/tests/data/test_459_A new file mode 100644 index 0000000..f8a82f8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_459_A @@ -0,0 +1,6 @@ +90 94 +75 107 +80 88 +35 98 +53 84 +78 93 diff --git a/geom_bottleneck/tests/data/test_459_B b/geom_bottleneck/tests/data/test_459_B new file mode 100644 index 0000000..dc645ee --- /dev/null +++ b/geom_bottleneck/tests/data/test_459_B @@ -0,0 +1,6 @@ +95 101 +29 59 +32 77 +17 19 +92 108 +6 19 diff --git a/geom_bottleneck/tests/data/test_460_A b/geom_bottleneck/tests/data/test_460_A new file mode 100644 index 0000000..000c14e --- /dev/null +++ b/geom_bottleneck/tests/data/test_460_A @@ -0,0 +1,7 @@ +88 127 +65 145 +59 149 +69 152 +61 146 +28 90 +21 104 diff --git a/geom_bottleneck/tests/data/test_460_B b/geom_bottleneck/tests/data/test_460_B new file mode 100644 index 0000000..4a7d4a3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_460_B @@ -0,0 +1,7 @@ +47 131 +59 153 +24 95 +63 96 +6 102 +91 98 +31 118 diff --git a/geom_bottleneck/tests/data/test_461_A b/geom_bottleneck/tests/data/test_461_A new file mode 100644 index 0000000..aaebf2d --- /dev/null +++ b/geom_bottleneck/tests/data/test_461_A @@ -0,0 +1,7 @@ +57 67 +75 82 +63 88 +57 139 +67 103 +15 68 +100 117 diff --git a/geom_bottleneck/tests/data/test_461_B b/geom_bottleneck/tests/data/test_461_B new file mode 100644 index 0000000..183fa51 --- /dev/null +++ b/geom_bottleneck/tests/data/test_461_B @@ -0,0 +1,7 @@ +47 127 +9 35 +14 75 +29 92 +76 171 +9 56 +56 86 diff --git a/geom_bottleneck/tests/data/test_462_A b/geom_bottleneck/tests/data/test_462_A new file mode 100644 index 0000000..df1936d --- /dev/null +++ b/geom_bottleneck/tests/data/test_462_A @@ -0,0 +1,7 @@ +0 90 +50 113 +73 149 +86 105 +20 105 +14 75 +41 115 diff --git a/geom_bottleneck/tests/data/test_462_B b/geom_bottleneck/tests/data/test_462_B new file mode 100644 index 0000000..5be3bf0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_462_B @@ -0,0 +1,7 @@ +88 133 +47 100 +27 48 +54 153 +91 116 +90 150 +0 82 diff --git a/geom_bottleneck/tests/data/test_463_A b/geom_bottleneck/tests/data/test_463_A new file mode 100644 index 0000000..c8776fe --- /dev/null +++ b/geom_bottleneck/tests/data/test_463_A @@ -0,0 +1,7 @@ +34 67 +34 92 +53 99 +64 155 +92 157 +16 55 +75 156 diff --git a/geom_bottleneck/tests/data/test_463_B b/geom_bottleneck/tests/data/test_463_B new file mode 100644 index 0000000..a9f1273 --- /dev/null +++ b/geom_bottleneck/tests/data/test_463_B @@ -0,0 +1,7 @@ +20 72 +99 146 +70 158 +4 38 +92 102 +20 32 +47 135 diff --git a/geom_bottleneck/tests/data/test_464_A b/geom_bottleneck/tests/data/test_464_A new file mode 100644 index 0000000..98ff6a9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_464_A @@ -0,0 +1,7 @@ +69 149 +52 115 +32 82 +22 60 +55 56 +80 116 +62 72 diff --git a/geom_bottleneck/tests/data/test_464_B b/geom_bottleneck/tests/data/test_464_B new file mode 100644 index 0000000..0e57b03 --- /dev/null +++ b/geom_bottleneck/tests/data/test_464_B @@ -0,0 +1,7 @@ +81 121 +17 86 +57 141 +13 15 +66 80 +66 107 +76 80 diff --git a/geom_bottleneck/tests/data/test_465_A b/geom_bottleneck/tests/data/test_465_A new file mode 100644 index 0000000..b164c7a --- /dev/null +++ b/geom_bottleneck/tests/data/test_465_A @@ -0,0 +1,7 @@ +8 34 +48 141 +61 122 +56 130 +58 158 +51 81 +32 100 diff --git a/geom_bottleneck/tests/data/test_465_B b/geom_bottleneck/tests/data/test_465_B new file mode 100644 index 0000000..610a2a5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_465_B @@ -0,0 +1,7 @@ +8 89 +62 160 +27 109 +94 112 +59 140 +51 69 +52 136 diff --git a/geom_bottleneck/tests/data/test_466_A b/geom_bottleneck/tests/data/test_466_A new file mode 100644 index 0000000..3c0052c --- /dev/null +++ b/geom_bottleneck/tests/data/test_466_A @@ -0,0 +1,7 @@ +54 113 +15 32 +94 138 +42 132 +84 136 +81 135 +4 62 diff --git a/geom_bottleneck/tests/data/test_466_B b/geom_bottleneck/tests/data/test_466_B new file mode 100644 index 0000000..e8c16f8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_466_B @@ -0,0 +1,7 @@ +51 116 +81 147 +11 51 +76 148 +90 100 +3 100 +62 138 diff --git a/geom_bottleneck/tests/data/test_467_A b/geom_bottleneck/tests/data/test_467_A new file mode 100644 index 0000000..69280bb --- /dev/null +++ b/geom_bottleneck/tests/data/test_467_A @@ -0,0 +1,7 @@ +40 43 +46 99 +90 137 +93 122 +38 45 +87 134 +48 146 diff --git a/geom_bottleneck/tests/data/test_467_B b/geom_bottleneck/tests/data/test_467_B new file mode 100644 index 0000000..c857912 --- /dev/null +++ b/geom_bottleneck/tests/data/test_467_B @@ -0,0 +1,7 @@ +22 23 +57 100 +84 162 +30 92 +65 75 +97 133 +47 117 diff --git a/geom_bottleneck/tests/data/test_468_A b/geom_bottleneck/tests/data/test_468_A new file mode 100644 index 0000000..9f92c43 --- /dev/null +++ b/geom_bottleneck/tests/data/test_468_A @@ -0,0 +1,7 @@ +93 128 +20 66 +72 134 +97 111 +64 99 +17 47 +12 58 diff --git a/geom_bottleneck/tests/data/test_468_B b/geom_bottleneck/tests/data/test_468_B new file mode 100644 index 0000000..b20cdf4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_468_B @@ -0,0 +1,7 @@ +84 156 +42 142 +28 43 +83 179 +15 81 +51 113 +56 136 diff --git a/geom_bottleneck/tests/data/test_469_A b/geom_bottleneck/tests/data/test_469_A new file mode 100644 index 0000000..842bb69 --- /dev/null +++ b/geom_bottleneck/tests/data/test_469_A @@ -0,0 +1,7 @@ +60 115 +77 137 +40 98 +11 59 +16 29 +60 98 +86 149 diff --git a/geom_bottleneck/tests/data/test_469_B b/geom_bottleneck/tests/data/test_469_B new file mode 100644 index 0000000..e6de4fe --- /dev/null +++ b/geom_bottleneck/tests/data/test_469_B @@ -0,0 +1,7 @@ +28 101 +15 65 +55 67 +40 73 +14 69 +87 117 +83 137 diff --git a/geom_bottleneck/tests/data/test_470_A b/geom_bottleneck/tests/data/test_470_A new file mode 100644 index 0000000..5f2fd6b --- /dev/null +++ b/geom_bottleneck/tests/data/test_470_A @@ -0,0 +1,7 @@ +1 17 +80 137 +31 128 +78 83 +95 188 +94 150 +7 103 diff --git a/geom_bottleneck/tests/data/test_470_B b/geom_bottleneck/tests/data/test_470_B new file mode 100644 index 0000000..5db84e8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_470_B @@ -0,0 +1,7 @@ +85 178 +3 52 +99 189 +95 115 +98 183 +0 60 +22 120 diff --git a/geom_bottleneck/tests/data/test_471_A b/geom_bottleneck/tests/data/test_471_A new file mode 100644 index 0000000..e88e5ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_471_A @@ -0,0 +1,7 @@ +58 107 +6 86 +44 47 +12 97 +48 133 +89 111 +94 155 diff --git a/geom_bottleneck/tests/data/test_471_B b/geom_bottleneck/tests/data/test_471_B new file mode 100644 index 0000000..26065c0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_471_B @@ -0,0 +1,7 @@ +51 115 +25 51 +77 165 +21 116 +19 21 +11 77 +5 9 diff --git a/geom_bottleneck/tests/data/test_472_A b/geom_bottleneck/tests/data/test_472_A new file mode 100644 index 0000000..bd2ec1a --- /dev/null +++ b/geom_bottleneck/tests/data/test_472_A @@ -0,0 +1,7 @@ +68 75 +12 88 +15 84 +33 120 +76 160 +23 56 +16 116 diff --git a/geom_bottleneck/tests/data/test_472_B b/geom_bottleneck/tests/data/test_472_B new file mode 100644 index 0000000..3914a18 --- /dev/null +++ b/geom_bottleneck/tests/data/test_472_B @@ -0,0 +1,7 @@ +75 129 +58 68 +36 119 +11 59 +25 42 +50 65 +12 28 diff --git a/geom_bottleneck/tests/data/test_473_A b/geom_bottleneck/tests/data/test_473_A new file mode 100644 index 0000000..d8e4ed1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_473_A @@ -0,0 +1,7 @@ +86 119 +34 71 +91 182 +97 170 +73 104 +71 160 +26 120 diff --git a/geom_bottleneck/tests/data/test_473_B b/geom_bottleneck/tests/data/test_473_B new file mode 100644 index 0000000..1ce2c2f --- /dev/null +++ b/geom_bottleneck/tests/data/test_473_B @@ -0,0 +1,7 @@ +53 111 +78 111 +99 134 +42 70 +70 84 +52 85 +55 154 diff --git a/geom_bottleneck/tests/data/test_474_A b/geom_bottleneck/tests/data/test_474_A new file mode 100644 index 0000000..30c9ad1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_474_A @@ -0,0 +1,7 @@ +84 139 +74 167 +0 76 +6 33 +73 165 +80 173 +28 38 diff --git a/geom_bottleneck/tests/data/test_474_B b/geom_bottleneck/tests/data/test_474_B new file mode 100644 index 0000000..35c507a --- /dev/null +++ b/geom_bottleneck/tests/data/test_474_B @@ -0,0 +1,7 @@ +76 134 +38 118 +37 87 +61 110 +59 79 +67 75 +45 100 diff --git a/geom_bottleneck/tests/data/test_475_A b/geom_bottleneck/tests/data/test_475_A new file mode 100644 index 0000000..05023db --- /dev/null +++ b/geom_bottleneck/tests/data/test_475_A @@ -0,0 +1,7 @@ +17 92 +69 112 +37 83 +62 116 +69 85 +63 92 +31 55 diff --git a/geom_bottleneck/tests/data/test_475_B b/geom_bottleneck/tests/data/test_475_B new file mode 100644 index 0000000..0fcc2d0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_475_B @@ -0,0 +1,7 @@ +18 105 +66 104 +36 67 +50 61 +44 118 +75 99 +41 49 diff --git a/geom_bottleneck/tests/data/test_476_A b/geom_bottleneck/tests/data/test_476_A new file mode 100644 index 0000000..0c4ede1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_476_A @@ -0,0 +1,7 @@ +14 109 +64 142 +98 152 +34 115 +47 100 +85 99 +0 7 diff --git a/geom_bottleneck/tests/data/test_476_B b/geom_bottleneck/tests/data/test_476_B new file mode 100644 index 0000000..ae68bae --- /dev/null +++ b/geom_bottleneck/tests/data/test_476_B @@ -0,0 +1,7 @@ +99 172 +23 91 +0 80 +89 102 +21 56 +86 169 +48 116 diff --git a/geom_bottleneck/tests/data/test_477_A b/geom_bottleneck/tests/data/test_477_A new file mode 100644 index 0000000..719e1b7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_477_A @@ -0,0 +1,7 @@ +2 87 +9 51 +78 81 +26 122 +54 126 +66 128 +88 139 diff --git a/geom_bottleneck/tests/data/test_477_B b/geom_bottleneck/tests/data/test_477_B new file mode 100644 index 0000000..6c2e706 --- /dev/null +++ b/geom_bottleneck/tests/data/test_477_B @@ -0,0 +1,7 @@ +9 55 +60 64 +26 57 +6 74 +70 103 +84 87 +35 56 diff --git a/geom_bottleneck/tests/data/test_478_A b/geom_bottleneck/tests/data/test_478_A new file mode 100644 index 0000000..61b09a8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_478_A @@ -0,0 +1,7 @@ +76 114 +41 48 +16 34 +28 80 +100 119 +57 64 +53 104 diff --git a/geom_bottleneck/tests/data/test_478_B b/geom_bottleneck/tests/data/test_478_B new file mode 100644 index 0000000..a302122 --- /dev/null +++ b/geom_bottleneck/tests/data/test_478_B @@ -0,0 +1,7 @@ +81 179 +64 112 +9 49 +64 132 +15 81 +97 137 +17 39 diff --git a/geom_bottleneck/tests/data/test_479_A b/geom_bottleneck/tests/data/test_479_A new file mode 100644 index 0000000..b956a54 --- /dev/null +++ b/geom_bottleneck/tests/data/test_479_A @@ -0,0 +1,7 @@ +31 104 +56 83 +21 87 +76 135 +63 126 +89 134 +74 159 diff --git a/geom_bottleneck/tests/data/test_479_B b/geom_bottleneck/tests/data/test_479_B new file mode 100644 index 0000000..10d8948 --- /dev/null +++ b/geom_bottleneck/tests/data/test_479_B @@ -0,0 +1,7 @@ +98 131 +8 98 +96 101 +78 146 +6 35 +88 116 +82 88 diff --git a/geom_bottleneck/tests/data/test_480_A b/geom_bottleneck/tests/data/test_480_A new file mode 100644 index 0000000..6ad5182 --- /dev/null +++ b/geom_bottleneck/tests/data/test_480_A @@ -0,0 +1,8 @@ +75 137 +100 185 +65 142 +7 8 +25 44 +39 108 +94 99 +6 78 diff --git a/geom_bottleneck/tests/data/test_480_B b/geom_bottleneck/tests/data/test_480_B new file mode 100644 index 0000000..246f278 --- /dev/null +++ b/geom_bottleneck/tests/data/test_480_B @@ -0,0 +1,8 @@ +80 156 +94 180 +55 143 +39 93 +72 170 +76 176 +72 160 +36 59 diff --git a/geom_bottleneck/tests/data/test_481_A b/geom_bottleneck/tests/data/test_481_A new file mode 100644 index 0000000..8e414ab --- /dev/null +++ b/geom_bottleneck/tests/data/test_481_A @@ -0,0 +1,8 @@ +4 61 +27 91 +83 153 +1 25 +25 33 +71 76 +5 103 +8 34 diff --git a/geom_bottleneck/tests/data/test_481_B b/geom_bottleneck/tests/data/test_481_B new file mode 100644 index 0000000..5596312 --- /dev/null +++ b/geom_bottleneck/tests/data/test_481_B @@ -0,0 +1,8 @@ +59 143 +99 148 +21 32 +60 71 +16 51 +78 90 +11 77 +56 145 diff --git a/geom_bottleneck/tests/data/test_482_A b/geom_bottleneck/tests/data/test_482_A new file mode 100644 index 0000000..b40bc32 --- /dev/null +++ b/geom_bottleneck/tests/data/test_482_A @@ -0,0 +1,8 @@ +56 139 +4 18 +16 47 +99 186 +16 63 +44 50 +99 187 +30 85 diff --git a/geom_bottleneck/tests/data/test_482_B b/geom_bottleneck/tests/data/test_482_B new file mode 100644 index 0000000..04b23b5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_482_B @@ -0,0 +1,8 @@ +84 162 +22 52 +12 98 +59 106 +86 155 +93 108 +75 119 +18 20 diff --git a/geom_bottleneck/tests/data/test_483_A b/geom_bottleneck/tests/data/test_483_A new file mode 100644 index 0000000..7ef0f99 --- /dev/null +++ b/geom_bottleneck/tests/data/test_483_A @@ -0,0 +1,8 @@ +10 13 +53 81 +57 151 +81 148 +91 132 +9 89 +11 65 +29 85 diff --git a/geom_bottleneck/tests/data/test_483_B b/geom_bottleneck/tests/data/test_483_B new file mode 100644 index 0000000..eabdee1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_483_B @@ -0,0 +1,8 @@ +87 187 +79 111 +41 93 +54 76 +27 86 +97 150 +97 185 +36 37 diff --git a/geom_bottleneck/tests/data/test_484_A b/geom_bottleneck/tests/data/test_484_A new file mode 100644 index 0000000..11fa5dd --- /dev/null +++ b/geom_bottleneck/tests/data/test_484_A @@ -0,0 +1,8 @@ +58 147 +24 70 +83 171 +78 91 +55 86 +83 168 +40 125 +75 121 diff --git a/geom_bottleneck/tests/data/test_484_B b/geom_bottleneck/tests/data/test_484_B new file mode 100644 index 0000000..2dda740 --- /dev/null +++ b/geom_bottleneck/tests/data/test_484_B @@ -0,0 +1,8 @@ +55 66 +48 100 +69 123 +84 152 +56 155 +87 99 +83 167 +39 49 diff --git a/geom_bottleneck/tests/data/test_485_A b/geom_bottleneck/tests/data/test_485_A new file mode 100644 index 0000000..bd500dd --- /dev/null +++ b/geom_bottleneck/tests/data/test_485_A @@ -0,0 +1,8 @@ +64 81 +52 69 +62 74 +3 79 +24 117 +81 133 +5 37 +53 90 diff --git a/geom_bottleneck/tests/data/test_485_B b/geom_bottleneck/tests/data/test_485_B new file mode 100644 index 0000000..a117670 --- /dev/null +++ b/geom_bottleneck/tests/data/test_485_B @@ -0,0 +1,8 @@ +80 97 +10 69 +49 123 +28 123 +92 135 +19 107 +7 53 +99 165 diff --git a/geom_bottleneck/tests/data/test_486_A b/geom_bottleneck/tests/data/test_486_A new file mode 100644 index 0000000..4dcc3ca --- /dev/null +++ b/geom_bottleneck/tests/data/test_486_A @@ -0,0 +1,8 @@ +76 162 +58 117 +91 152 +96 137 +45 49 +64 156 +35 64 +42 114 diff --git a/geom_bottleneck/tests/data/test_486_B b/geom_bottleneck/tests/data/test_486_B new file mode 100644 index 0000000..c808dc5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_486_B @@ -0,0 +1,8 @@ +35 95 +0 78 +61 78 +100 110 +100 106 +56 91 +97 133 +87 176 diff --git a/geom_bottleneck/tests/data/test_487_A b/geom_bottleneck/tests/data/test_487_A new file mode 100644 index 0000000..7250b20 --- /dev/null +++ b/geom_bottleneck/tests/data/test_487_A @@ -0,0 +1,8 @@ +78 114 +95 110 +22 47 +95 181 +6 76 +47 89 +10 27 +69 102 diff --git a/geom_bottleneck/tests/data/test_487_B b/geom_bottleneck/tests/data/test_487_B new file mode 100644 index 0000000..b0a4119 --- /dev/null +++ b/geom_bottleneck/tests/data/test_487_B @@ -0,0 +1,8 @@ +31 113 +71 115 +10 97 +97 101 +30 61 +79 157 +56 89 +96 184 diff --git a/geom_bottleneck/tests/data/test_488_A b/geom_bottleneck/tests/data/test_488_A new file mode 100644 index 0000000..92f19ab --- /dev/null +++ b/geom_bottleneck/tests/data/test_488_A @@ -0,0 +1,8 @@ +7 28 +32 59 +64 84 +71 156 +89 166 +67 154 +54 89 +49 78 diff --git a/geom_bottleneck/tests/data/test_488_B b/geom_bottleneck/tests/data/test_488_B new file mode 100644 index 0000000..712480d --- /dev/null +++ b/geom_bottleneck/tests/data/test_488_B @@ -0,0 +1,8 @@ +54 128 +20 59 +64 135 +80 106 +35 88 +93 187 +4 5 +73 126 diff --git a/geom_bottleneck/tests/data/test_489_A b/geom_bottleneck/tests/data/test_489_A new file mode 100644 index 0000000..f1c9abf --- /dev/null +++ b/geom_bottleneck/tests/data/test_489_A @@ -0,0 +1,8 @@ +52 74 +59 74 +83 84 +51 135 +41 132 +29 113 +7 65 +97 176 diff --git a/geom_bottleneck/tests/data/test_489_B b/geom_bottleneck/tests/data/test_489_B new file mode 100644 index 0000000..5c5316f --- /dev/null +++ b/geom_bottleneck/tests/data/test_489_B @@ -0,0 +1,8 @@ +43 126 +23 64 +16 111 +96 97 +84 112 +39 85 +33 74 +39 97 diff --git a/geom_bottleneck/tests/data/test_490_A b/geom_bottleneck/tests/data/test_490_A new file mode 100644 index 0000000..e907d09 --- /dev/null +++ b/geom_bottleneck/tests/data/test_490_A @@ -0,0 +1,8 @@ +93 146 +47 99 +6 55 +19 66 +15 28 +2 93 +97 143 +52 125 diff --git a/geom_bottleneck/tests/data/test_490_B b/geom_bottleneck/tests/data/test_490_B new file mode 100644 index 0000000..6368e47 --- /dev/null +++ b/geom_bottleneck/tests/data/test_490_B @@ -0,0 +1,8 @@ +82 172 +98 155 +73 119 +50 133 +13 84 +53 73 +5 21 +82 83 diff --git a/geom_bottleneck/tests/data/test_491_A b/geom_bottleneck/tests/data/test_491_A new file mode 100644 index 0000000..9fdc2fb --- /dev/null +++ b/geom_bottleneck/tests/data/test_491_A @@ -0,0 +1,8 @@ +12 35 +75 82 +45 91 +18 27 +99 178 +35 37 +46 113 +70 94 diff --git a/geom_bottleneck/tests/data/test_491_B b/geom_bottleneck/tests/data/test_491_B new file mode 100644 index 0000000..09cd4ac --- /dev/null +++ b/geom_bottleneck/tests/data/test_491_B @@ -0,0 +1,8 @@ +76 121 +84 172 +70 167 +57 143 +4 52 +69 159 +10 100 +96 153 diff --git a/geom_bottleneck/tests/data/test_492_A b/geom_bottleneck/tests/data/test_492_A new file mode 100644 index 0000000..434683d --- /dev/null +++ b/geom_bottleneck/tests/data/test_492_A @@ -0,0 +1,8 @@ +21 92 +42 105 +79 166 +41 78 +72 87 +25 49 +78 104 +60 115 diff --git a/geom_bottleneck/tests/data/test_492_B b/geom_bottleneck/tests/data/test_492_B new file mode 100644 index 0000000..3f6f5fa --- /dev/null +++ b/geom_bottleneck/tests/data/test_492_B @@ -0,0 +1,8 @@ +80 94 +66 106 +36 79 +12 20 +28 36 +94 155 +62 100 +77 136 diff --git a/geom_bottleneck/tests/data/test_493_A b/geom_bottleneck/tests/data/test_493_A new file mode 100644 index 0000000..12cfc64 --- /dev/null +++ b/geom_bottleneck/tests/data/test_493_A @@ -0,0 +1,8 @@ +14 46 +79 109 +49 92 +100 181 +32 44 +15 16 +59 62 +66 127 diff --git a/geom_bottleneck/tests/data/test_493_B b/geom_bottleneck/tests/data/test_493_B new file mode 100644 index 0000000..43dcf08 --- /dev/null +++ b/geom_bottleneck/tests/data/test_493_B @@ -0,0 +1,8 @@ +18 21 +74 155 +36 57 +28 41 +15 40 +94 133 +72 153 +42 135 diff --git a/geom_bottleneck/tests/data/test_494_A b/geom_bottleneck/tests/data/test_494_A new file mode 100644 index 0000000..b35b505 --- /dev/null +++ b/geom_bottleneck/tests/data/test_494_A @@ -0,0 +1,8 @@ +31 40 +44 129 +74 92 +41 132 +79 105 +18 58 +93 123 +8 39 diff --git a/geom_bottleneck/tests/data/test_494_B b/geom_bottleneck/tests/data/test_494_B new file mode 100644 index 0000000..fb70ed6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_494_B @@ -0,0 +1,8 @@ +86 165 +30 101 +85 185 +15 71 +75 175 +61 141 +43 81 +90 128 diff --git a/geom_bottleneck/tests/data/test_495_A b/geom_bottleneck/tests/data/test_495_A new file mode 100644 index 0000000..c244b7a --- /dev/null +++ b/geom_bottleneck/tests/data/test_495_A @@ -0,0 +1,8 @@ +90 133 +48 84 +48 126 +0 80 +8 17 +60 82 +17 48 +9 74 diff --git a/geom_bottleneck/tests/data/test_495_B b/geom_bottleneck/tests/data/test_495_B new file mode 100644 index 0000000..4bd121d --- /dev/null +++ b/geom_bottleneck/tests/data/test_495_B @@ -0,0 +1,8 @@ +19 25 +39 63 +0 3 +39 86 +72 91 +27 85 +97 141 +79 174 diff --git a/geom_bottleneck/tests/data/test_496_A b/geom_bottleneck/tests/data/test_496_A new file mode 100644 index 0000000..cc2cc0b --- /dev/null +++ b/geom_bottleneck/tests/data/test_496_A @@ -0,0 +1,8 @@ +79 127 +84 146 +58 143 +28 68 +35 100 +38 126 +24 89 +32 70 diff --git a/geom_bottleneck/tests/data/test_496_B b/geom_bottleneck/tests/data/test_496_B new file mode 100644 index 0000000..5b8aeaa --- /dev/null +++ b/geom_bottleneck/tests/data/test_496_B @@ -0,0 +1,8 @@ +9 61 +68 125 +4 98 +98 99 +49 67 +41 50 +38 61 +24 44 diff --git a/geom_bottleneck/tests/data/test_497_A b/geom_bottleneck/tests/data/test_497_A new file mode 100644 index 0000000..b3b511d --- /dev/null +++ b/geom_bottleneck/tests/data/test_497_A @@ -0,0 +1,8 @@ +19 24 +89 174 +47 137 +93 131 +50 127 +6 34 +99 118 +86 98 diff --git a/geom_bottleneck/tests/data/test_497_B b/geom_bottleneck/tests/data/test_497_B new file mode 100644 index 0000000..8870c73 --- /dev/null +++ b/geom_bottleneck/tests/data/test_497_B @@ -0,0 +1,8 @@ +0 69 +39 100 +58 156 +37 74 +47 62 +81 172 +81 175 +56 147 diff --git a/geom_bottleneck/tests/data/test_498_A b/geom_bottleneck/tests/data/test_498_A new file mode 100644 index 0000000..5bef5fa --- /dev/null +++ b/geom_bottleneck/tests/data/test_498_A @@ -0,0 +1,8 @@ +55 140 +94 160 +22 35 +42 89 +50 127 +8 59 +25 87 +35 103 diff --git a/geom_bottleneck/tests/data/test_498_B b/geom_bottleneck/tests/data/test_498_B new file mode 100644 index 0000000..b1ed38a --- /dev/null +++ b/geom_bottleneck/tests/data/test_498_B @@ -0,0 +1,8 @@ +88 164 +14 29 +13 19 +3 49 +86 107 +62 138 +72 77 +2 22 diff --git a/geom_bottleneck/tests/data/test_499_A b/geom_bottleneck/tests/data/test_499_A new file mode 100644 index 0000000..a24f367 --- /dev/null +++ b/geom_bottleneck/tests/data/test_499_A @@ -0,0 +1,8 @@ +35 68 +22 25 +87 132 +23 119 +64 131 +13 106 +8 22 +83 169 diff --git a/geom_bottleneck/tests/data/test_499_B b/geom_bottleneck/tests/data/test_499_B new file mode 100644 index 0000000..24d0d92 --- /dev/null +++ b/geom_bottleneck/tests/data/test_499_B @@ -0,0 +1,8 @@ +27 105 +66 84 +76 101 +96 126 +40 103 +82 159 +41 45 +58 97 diff --git a/geom_bottleneck/tests/data/test_500_A b/geom_bottleneck/tests/data/test_500_A new file mode 100644 index 0000000..ed86941 --- /dev/null +++ b/geom_bottleneck/tests/data/test_500_A @@ -0,0 +1,9 @@ +96 120 +81 139 +35 58 +14 38 +23 33 +44 97 +26 61 +47 74 +75 124 diff --git a/geom_bottleneck/tests/data/test_500_B b/geom_bottleneck/tests/data/test_500_B new file mode 100644 index 0000000..58f0cd6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_500_B @@ -0,0 +1,9 @@ +57 153 +7 107 +56 78 +67 90 +14 86 +97 112 +5 45 +55 151 +51 133 diff --git a/geom_bottleneck/tests/data/test_501_A b/geom_bottleneck/tests/data/test_501_A new file mode 100644 index 0000000..b6f9335 --- /dev/null +++ b/geom_bottleneck/tests/data/test_501_A @@ -0,0 +1,9 @@ +57 145 +1 34 +98 129 +25 26 +19 94 +90 187 +62 160 +70 115 +88 160 diff --git a/geom_bottleneck/tests/data/test_501_B b/geom_bottleneck/tests/data/test_501_B new file mode 100644 index 0000000..af0d32b --- /dev/null +++ b/geom_bottleneck/tests/data/test_501_B @@ -0,0 +1,9 @@ +77 100 +34 41 +79 99 +27 65 +30 69 +58 96 +98 195 +45 144 +82 147 diff --git a/geom_bottleneck/tests/data/test_502_A b/geom_bottleneck/tests/data/test_502_A new file mode 100644 index 0000000..64c4bfe --- /dev/null +++ b/geom_bottleneck/tests/data/test_502_A @@ -0,0 +1,9 @@ +78 102 +66 134 +42 104 +17 68 +33 113 +84 160 +86 119 +32 73 +6 19 diff --git a/geom_bottleneck/tests/data/test_502_B b/geom_bottleneck/tests/data/test_502_B new file mode 100644 index 0000000..4b1bb48 --- /dev/null +++ b/geom_bottleneck/tests/data/test_502_B @@ -0,0 +1,9 @@ +2 25 +80 119 +56 147 +94 99 +51 116 +29 109 +89 180 +45 75 +93 170 diff --git a/geom_bottleneck/tests/data/test_503_A b/geom_bottleneck/tests/data/test_503_A new file mode 100644 index 0000000..7686e8d --- /dev/null +++ b/geom_bottleneck/tests/data/test_503_A @@ -0,0 +1,9 @@ +53 55 +1 67 +100 128 +27 39 +17 62 +66 98 +49 85 +13 14 +72 91 diff --git a/geom_bottleneck/tests/data/test_503_B b/geom_bottleneck/tests/data/test_503_B new file mode 100644 index 0000000..c662290 --- /dev/null +++ b/geom_bottleneck/tests/data/test_503_B @@ -0,0 +1,9 @@ +74 110 +99 192 +22 56 +19 40 +63 99 +31 44 +28 122 +89 161 +85 184 diff --git a/geom_bottleneck/tests/data/test_504_A b/geom_bottleneck/tests/data/test_504_A new file mode 100644 index 0000000..7b0bcd8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_504_A @@ -0,0 +1,9 @@ +52 60 +30 76 +55 91 +83 91 +23 53 +64 68 +12 106 +54 99 +0 83 diff --git a/geom_bottleneck/tests/data/test_504_B b/geom_bottleneck/tests/data/test_504_B new file mode 100644 index 0000000..1fb9704 --- /dev/null +++ b/geom_bottleneck/tests/data/test_504_B @@ -0,0 +1,9 @@ +10 57 +0 87 +74 85 +13 91 +48 59 +21 109 +85 141 +70 151 +24 103 diff --git a/geom_bottleneck/tests/data/test_505_A b/geom_bottleneck/tests/data/test_505_A new file mode 100644 index 0000000..fd80b53 --- /dev/null +++ b/geom_bottleneck/tests/data/test_505_A @@ -0,0 +1,9 @@ +90 183 +100 112 +33 120 +94 114 +96 190 +70 109 +22 102 +71 126 +99 150 diff --git a/geom_bottleneck/tests/data/test_505_B b/geom_bottleneck/tests/data/test_505_B new file mode 100644 index 0000000..9bd046e --- /dev/null +++ b/geom_bottleneck/tests/data/test_505_B @@ -0,0 +1,9 @@ +18 83 +61 159 +73 138 +51 137 +20 96 +89 185 +13 52 +54 134 +24 35 diff --git a/geom_bottleneck/tests/data/test_506_A b/geom_bottleneck/tests/data/test_506_A new file mode 100644 index 0000000..1f5e9ac --- /dev/null +++ b/geom_bottleneck/tests/data/test_506_A @@ -0,0 +1,9 @@ +95 117 +41 138 +52 118 +82 163 +9 22 +58 156 +7 74 +24 42 +96 158 diff --git a/geom_bottleneck/tests/data/test_506_B b/geom_bottleneck/tests/data/test_506_B new file mode 100644 index 0000000..0dc89b8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_506_B @@ -0,0 +1,9 @@ +91 134 +78 119 +94 141 +5 57 +34 55 +43 101 +27 116 +41 72 +98 126 diff --git a/geom_bottleneck/tests/data/test_507_A b/geom_bottleneck/tests/data/test_507_A new file mode 100644 index 0000000..a6d164e --- /dev/null +++ b/geom_bottleneck/tests/data/test_507_A @@ -0,0 +1,9 @@ +34 62 +21 105 +41 63 +74 99 +52 95 +89 100 +11 82 +74 83 +78 132 diff --git a/geom_bottleneck/tests/data/test_507_B b/geom_bottleneck/tests/data/test_507_B new file mode 100644 index 0000000..b39a7fe --- /dev/null +++ b/geom_bottleneck/tests/data/test_507_B @@ -0,0 +1,9 @@ +49 76 +24 57 +25 101 +9 99 +65 146 +23 43 +89 165 +63 138 +50 76 diff --git a/geom_bottleneck/tests/data/test_508_A b/geom_bottleneck/tests/data/test_508_A new file mode 100644 index 0000000..c837ce3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_508_A @@ -0,0 +1,9 @@ +59 141 +59 74 +0 5 +11 105 +15 58 +43 117 +47 93 +60 149 +69 92 diff --git a/geom_bottleneck/tests/data/test_508_B b/geom_bottleneck/tests/data/test_508_B new file mode 100644 index 0000000..733b5a0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_508_B @@ -0,0 +1,9 @@ +29 104 +50 67 +43 82 +86 102 +45 81 +19 106 +74 124 +77 150 +80 104 diff --git a/geom_bottleneck/tests/data/test_509_A b/geom_bottleneck/tests/data/test_509_A new file mode 100644 index 0000000..98137f3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_509_A @@ -0,0 +1,9 @@ +40 74 +89 138 +20 44 +56 65 +12 14 +87 149 +23 123 +12 28 +56 146 diff --git a/geom_bottleneck/tests/data/test_509_B b/geom_bottleneck/tests/data/test_509_B new file mode 100644 index 0000000..1edd08c --- /dev/null +++ b/geom_bottleneck/tests/data/test_509_B @@ -0,0 +1,9 @@ +89 153 +20 65 +87 128 +27 101 +23 71 +6 53 +50 128 +16 108 +92 157 diff --git a/geom_bottleneck/tests/data/test_510_A b/geom_bottleneck/tests/data/test_510_A new file mode 100644 index 0000000..b1e0e68 --- /dev/null +++ b/geom_bottleneck/tests/data/test_510_A @@ -0,0 +1,9 @@ +67 70 +99 197 +62 111 +25 59 +61 131 +34 108 +99 185 +73 125 +76 130 diff --git a/geom_bottleneck/tests/data/test_510_B b/geom_bottleneck/tests/data/test_510_B new file mode 100644 index 0000000..8e48152 --- /dev/null +++ b/geom_bottleneck/tests/data/test_510_B @@ -0,0 +1,9 @@ +72 74 +57 126 +32 106 +55 88 +75 167 +5 34 +46 72 +86 104 +30 129 diff --git a/geom_bottleneck/tests/data/test_511_A b/geom_bottleneck/tests/data/test_511_A new file mode 100644 index 0000000..a2c6b34 --- /dev/null +++ b/geom_bottleneck/tests/data/test_511_A @@ -0,0 +1,9 @@ +10 56 +84 163 +34 131 +32 106 +61 84 +71 106 +17 32 +23 43 +44 79 diff --git a/geom_bottleneck/tests/data/test_511_B b/geom_bottleneck/tests/data/test_511_B new file mode 100644 index 0000000..ff48216 --- /dev/null +++ b/geom_bottleneck/tests/data/test_511_B @@ -0,0 +1,9 @@ +57 66 +89 124 +93 120 +72 119 +83 125 +1 17 +25 97 +32 90 +89 135 diff --git a/geom_bottleneck/tests/data/test_512_A b/geom_bottleneck/tests/data/test_512_A new file mode 100644 index 0000000..8f875d8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_512_A @@ -0,0 +1,9 @@ +88 136 +21 65 +12 82 +35 48 +97 127 +38 89 +69 71 +47 107 +91 127 diff --git a/geom_bottleneck/tests/data/test_512_B b/geom_bottleneck/tests/data/test_512_B new file mode 100644 index 0000000..c6988c1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_512_B @@ -0,0 +1,9 @@ +59 98 +88 114 +90 122 +83 147 +95 153 +9 56 +14 54 +25 70 +47 60 diff --git a/geom_bottleneck/tests/data/test_513_A b/geom_bottleneck/tests/data/test_513_A new file mode 100644 index 0000000..844c16d --- /dev/null +++ b/geom_bottleneck/tests/data/test_513_A @@ -0,0 +1,9 @@ +34 45 +64 149 +94 147 +34 73 +15 91 +2 53 +46 99 +70 100 +28 62 diff --git a/geom_bottleneck/tests/data/test_513_B b/geom_bottleneck/tests/data/test_513_B new file mode 100644 index 0000000..ee75f8c --- /dev/null +++ b/geom_bottleneck/tests/data/test_513_B @@ -0,0 +1,9 @@ +14 50 +76 112 +46 60 +45 94 +73 150 +79 128 +5 72 +44 87 +25 97 diff --git a/geom_bottleneck/tests/data/test_514_A b/geom_bottleneck/tests/data/test_514_A new file mode 100644 index 0000000..9b58831 --- /dev/null +++ b/geom_bottleneck/tests/data/test_514_A @@ -0,0 +1,9 @@ +4 78 +32 82 +56 106 +56 135 +0 1 +18 103 +29 65 +50 82 +68 82 diff --git a/geom_bottleneck/tests/data/test_514_B b/geom_bottleneck/tests/data/test_514_B new file mode 100644 index 0000000..39c6534 --- /dev/null +++ b/geom_bottleneck/tests/data/test_514_B @@ -0,0 +1,9 @@ +34 63 +63 145 +40 63 +3 93 +57 123 +32 51 +100 115 +23 32 +21 23 diff --git a/geom_bottleneck/tests/data/test_515_A b/geom_bottleneck/tests/data/test_515_A new file mode 100644 index 0000000..fc2578b --- /dev/null +++ b/geom_bottleneck/tests/data/test_515_A @@ -0,0 +1,9 @@ +32 33 +77 131 +64 160 +26 35 +77 106 +69 70 +98 106 +29 107 +65 69 diff --git a/geom_bottleneck/tests/data/test_515_B b/geom_bottleneck/tests/data/test_515_B new file mode 100644 index 0000000..715f6e5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_515_B @@ -0,0 +1,9 @@ +86 101 +89 138 +100 133 +81 103 +9 16 +79 133 +30 113 +98 195 +2 86 diff --git a/geom_bottleneck/tests/data/test_516_A b/geom_bottleneck/tests/data/test_516_A new file mode 100644 index 0000000..bd37e5d --- /dev/null +++ b/geom_bottleneck/tests/data/test_516_A @@ -0,0 +1,9 @@ +80 178 +95 153 +66 133 +12 74 +59 87 +85 165 +36 89 +57 145 +85 177 diff --git a/geom_bottleneck/tests/data/test_516_B b/geom_bottleneck/tests/data/test_516_B new file mode 100644 index 0000000..8d23127 --- /dev/null +++ b/geom_bottleneck/tests/data/test_516_B @@ -0,0 +1,9 @@ +29 85 +39 41 +50 99 +16 76 +82 131 +20 107 +20 25 +91 105 +98 172 diff --git a/geom_bottleneck/tests/data/test_517_A b/geom_bottleneck/tests/data/test_517_A new file mode 100644 index 0000000..17ca01c --- /dev/null +++ b/geom_bottleneck/tests/data/test_517_A @@ -0,0 +1,9 @@ +39 41 +60 128 +14 32 +52 138 +74 79 +52 100 +4 39 +53 145 +33 127 diff --git a/geom_bottleneck/tests/data/test_517_B b/geom_bottleneck/tests/data/test_517_B new file mode 100644 index 0000000..ba82599 --- /dev/null +++ b/geom_bottleneck/tests/data/test_517_B @@ -0,0 +1,9 @@ +31 113 +54 116 +69 151 +9 18 +60 62 +0 22 +93 162 +15 62 +63 148 diff --git a/geom_bottleneck/tests/data/test_518_A b/geom_bottleneck/tests/data/test_518_A new file mode 100644 index 0000000..bb1711c --- /dev/null +++ b/geom_bottleneck/tests/data/test_518_A @@ -0,0 +1,9 @@ +49 70 +63 113 +60 158 +17 111 +37 112 +35 101 +3 51 +89 126 +91 129 diff --git a/geom_bottleneck/tests/data/test_518_B b/geom_bottleneck/tests/data/test_518_B new file mode 100644 index 0000000..5b2e95a --- /dev/null +++ b/geom_bottleneck/tests/data/test_518_B @@ -0,0 +1,9 @@ +7 97 +72 146 +59 147 +89 103 +72 169 +43 65 +29 98 +28 44 +14 40 diff --git a/geom_bottleneck/tests/data/test_519_A b/geom_bottleneck/tests/data/test_519_A new file mode 100644 index 0000000..f0cb6ea --- /dev/null +++ b/geom_bottleneck/tests/data/test_519_A @@ -0,0 +1,9 @@ +6 92 +25 100 +99 156 +12 89 +3 102 +32 107 +13 40 +79 94 +33 118 diff --git a/geom_bottleneck/tests/data/test_519_B b/geom_bottleneck/tests/data/test_519_B new file mode 100644 index 0000000..03396db --- /dev/null +++ b/geom_bottleneck/tests/data/test_519_B @@ -0,0 +1,9 @@ +32 46 +61 155 +98 180 +10 89 +86 127 +0 4 +51 65 +9 85 +32 85 diff --git a/geom_bottleneck/tests/data/test_520_A b/geom_bottleneck/tests/data/test_520_A new file mode 100644 index 0000000..9353285 --- /dev/null +++ b/geom_bottleneck/tests/data/test_520_A @@ -0,0 +1,10 @@ +91 117 +68 132 +36 70 +20 75 +47 97 +50 84 +9 79 +63 70 +0 48 +15 75 diff --git a/geom_bottleneck/tests/data/test_520_B b/geom_bottleneck/tests/data/test_520_B new file mode 100644 index 0000000..1e328cd --- /dev/null +++ b/geom_bottleneck/tests/data/test_520_B @@ -0,0 +1,10 @@ +35 51 +16 23 +4 91 +69 133 +21 30 +80 169 +55 100 +34 76 +24 30 +97 167 diff --git a/geom_bottleneck/tests/data/test_521_A b/geom_bottleneck/tests/data/test_521_A new file mode 100644 index 0000000..d0bea91 --- /dev/null +++ b/geom_bottleneck/tests/data/test_521_A @@ -0,0 +1,10 @@ +22 45 +99 100 +34 81 +41 104 +1 25 +3 93 +26 88 +4 23 +97 159 +7 19 diff --git a/geom_bottleneck/tests/data/test_521_B b/geom_bottleneck/tests/data/test_521_B new file mode 100644 index 0000000..5e584b0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_521_B @@ -0,0 +1,10 @@ +2 40 +31 85 +57 105 +28 61 +18 111 +95 115 +0 66 +81 167 +96 174 +85 170 diff --git a/geom_bottleneck/tests/data/test_522_A b/geom_bottleneck/tests/data/test_522_A new file mode 100644 index 0000000..5631735 --- /dev/null +++ b/geom_bottleneck/tests/data/test_522_A @@ -0,0 +1,10 @@ +99 187 +92 127 +69 157 +82 161 +94 141 +97 108 +70 94 +20 39 +87 172 +87 122 diff --git a/geom_bottleneck/tests/data/test_522_B b/geom_bottleneck/tests/data/test_522_B new file mode 100644 index 0000000..903bcdc --- /dev/null +++ b/geom_bottleneck/tests/data/test_522_B @@ -0,0 +1,10 @@ +39 51 +28 81 +77 78 +17 52 +42 124 +34 37 +96 117 +39 98 +65 142 +4 72 diff --git a/geom_bottleneck/tests/data/test_523_A b/geom_bottleneck/tests/data/test_523_A new file mode 100644 index 0000000..b4da958 --- /dev/null +++ b/geom_bottleneck/tests/data/test_523_A @@ -0,0 +1,10 @@ +73 158 +5 34 +4 67 +88 109 +46 137 +86 152 +61 113 +61 93 +71 77 +65 157 diff --git a/geom_bottleneck/tests/data/test_523_B b/geom_bottleneck/tests/data/test_523_B new file mode 100644 index 0000000..bcc7438 --- /dev/null +++ b/geom_bottleneck/tests/data/test_523_B @@ -0,0 +1,10 @@ +54 78 +6 86 +63 130 +90 183 +59 89 +96 151 +93 117 +74 147 +20 93 +26 110 diff --git a/geom_bottleneck/tests/data/test_524_A b/geom_bottleneck/tests/data/test_524_A new file mode 100644 index 0000000..e260687 --- /dev/null +++ b/geom_bottleneck/tests/data/test_524_A @@ -0,0 +1,10 @@ +25 116 +12 34 +31 39 +56 152 +47 147 +67 112 +60 146 +77 112 +71 120 +67 75 diff --git a/geom_bottleneck/tests/data/test_524_B b/geom_bottleneck/tests/data/test_524_B new file mode 100644 index 0000000..92a2d76 --- /dev/null +++ b/geom_bottleneck/tests/data/test_524_B @@ -0,0 +1,10 @@ +2 10 +32 42 +24 123 +24 32 +84 135 +49 148 +100 181 +81 137 +63 96 +13 16 diff --git a/geom_bottleneck/tests/data/test_525_A b/geom_bottleneck/tests/data/test_525_A new file mode 100644 index 0000000..25d9d8f --- /dev/null +++ b/geom_bottleneck/tests/data/test_525_A @@ -0,0 +1,10 @@ +51 101 +67 155 +84 155 +67 151 +39 122 +93 167 +83 117 +20 67 +39 136 +54 116 diff --git a/geom_bottleneck/tests/data/test_525_B b/geom_bottleneck/tests/data/test_525_B new file mode 100644 index 0000000..d61ee84 --- /dev/null +++ b/geom_bottleneck/tests/data/test_525_B @@ -0,0 +1,10 @@ +69 120 +93 141 +65 96 +8 81 +27 110 +94 178 +9 89 +1 91 +77 86 +33 49 diff --git a/geom_bottleneck/tests/data/test_526_A b/geom_bottleneck/tests/data/test_526_A new file mode 100644 index 0000000..985ba29 --- /dev/null +++ b/geom_bottleneck/tests/data/test_526_A @@ -0,0 +1,10 @@ +10 27 +53 116 +71 93 +88 122 +45 87 +82 167 +89 105 +20 101 +25 71 +61 124 diff --git a/geom_bottleneck/tests/data/test_526_B b/geom_bottleneck/tests/data/test_526_B new file mode 100644 index 0000000..2ebf00a --- /dev/null +++ b/geom_bottleneck/tests/data/test_526_B @@ -0,0 +1,10 @@ +70 95 +68 69 +13 105 +58 156 +51 97 +64 106 +87 95 +63 85 +62 79 +82 87 diff --git a/geom_bottleneck/tests/data/test_527_A b/geom_bottleneck/tests/data/test_527_A new file mode 100644 index 0000000..802b177 --- /dev/null +++ b/geom_bottleneck/tests/data/test_527_A @@ -0,0 +1,10 @@ +5 27 +91 164 +68 91 +11 72 +37 66 +12 27 +30 47 +54 58 +34 80 +43 133 diff --git a/geom_bottleneck/tests/data/test_527_B b/geom_bottleneck/tests/data/test_527_B new file mode 100644 index 0000000..a04d9f1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_527_B @@ -0,0 +1,10 @@ +88 156 +74 105 +64 69 +96 127 +10 93 +52 107 +58 134 +18 108 +80 108 +93 161 diff --git a/geom_bottleneck/tests/data/test_528_A b/geom_bottleneck/tests/data/test_528_A new file mode 100644 index 0000000..da776dc --- /dev/null +++ b/geom_bottleneck/tests/data/test_528_A @@ -0,0 +1,10 @@ +36 107 +14 86 +45 96 +22 58 +57 103 +92 138 +65 150 +33 94 +40 79 +50 54 diff --git a/geom_bottleneck/tests/data/test_528_B b/geom_bottleneck/tests/data/test_528_B new file mode 100644 index 0000000..5329277 --- /dev/null +++ b/geom_bottleneck/tests/data/test_528_B @@ -0,0 +1,10 @@ +39 122 +19 43 +88 130 +48 106 +27 69 +93 140 +1 23 +50 94 +87 139 +97 151 diff --git a/geom_bottleneck/tests/data/test_529_A b/geom_bottleneck/tests/data/test_529_A new file mode 100644 index 0000000..ebbf6fa --- /dev/null +++ b/geom_bottleneck/tests/data/test_529_A @@ -0,0 +1,10 @@ +80 140 +0 97 +28 29 +15 85 +21 35 +34 74 +26 27 +91 135 +21 36 +33 117 diff --git a/geom_bottleneck/tests/data/test_529_B b/geom_bottleneck/tests/data/test_529_B new file mode 100644 index 0000000..6e0f836 --- /dev/null +++ b/geom_bottleneck/tests/data/test_529_B @@ -0,0 +1,10 @@ +22 46 +0 79 +33 86 +14 99 +71 108 +83 91 +40 69 +36 45 +42 112 +44 75 diff --git a/geom_bottleneck/tests/data/test_530_A b/geom_bottleneck/tests/data/test_530_A new file mode 100644 index 0000000..904eac4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_530_A @@ -0,0 +1,10 @@ +89 119 +35 104 +90 95 +6 77 +44 71 +46 100 +40 127 +11 52 +28 81 +39 73 diff --git a/geom_bottleneck/tests/data/test_530_B b/geom_bottleneck/tests/data/test_530_B new file mode 100644 index 0000000..f4cfc4c --- /dev/null +++ b/geom_bottleneck/tests/data/test_530_B @@ -0,0 +1,10 @@ +79 179 +39 89 +5 67 +39 66 +88 162 +82 97 +80 156 +91 182 +44 110 +56 67 diff --git a/geom_bottleneck/tests/data/test_531_A b/geom_bottleneck/tests/data/test_531_A new file mode 100644 index 0000000..416eb0a --- /dev/null +++ b/geom_bottleneck/tests/data/test_531_A @@ -0,0 +1,10 @@ +33 133 +73 98 +77 129 +21 118 +9 21 +68 166 +13 46 +53 84 +48 75 +24 90 diff --git a/geom_bottleneck/tests/data/test_531_B b/geom_bottleneck/tests/data/test_531_B new file mode 100644 index 0000000..afb424a --- /dev/null +++ b/geom_bottleneck/tests/data/test_531_B @@ -0,0 +1,10 @@ +89 148 +25 112 +86 132 +78 106 +57 70 +92 160 +67 86 +94 123 +12 26 +65 117 diff --git a/geom_bottleneck/tests/data/test_532_A b/geom_bottleneck/tests/data/test_532_A new file mode 100644 index 0000000..7eb97c1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_532_A @@ -0,0 +1,10 @@ +8 62 +77 140 +23 60 +13 93 +67 74 +59 152 +22 65 +16 17 +97 98 +76 91 diff --git a/geom_bottleneck/tests/data/test_532_B b/geom_bottleneck/tests/data/test_532_B new file mode 100644 index 0000000..e86a6a0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_532_B @@ -0,0 +1,10 @@ +66 111 +54 74 +95 142 +96 167 +63 84 +76 84 +53 59 +97 130 +20 68 +5 58 diff --git a/geom_bottleneck/tests/data/test_533_A b/geom_bottleneck/tests/data/test_533_A new file mode 100644 index 0000000..0462a89 --- /dev/null +++ b/geom_bottleneck/tests/data/test_533_A @@ -0,0 +1,10 @@ +66 103 +20 42 +30 31 +61 90 +31 129 +49 53 +2 3 +78 122 +36 103 +59 63 diff --git a/geom_bottleneck/tests/data/test_533_B b/geom_bottleneck/tests/data/test_533_B new file mode 100644 index 0000000..d077aa2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_533_B @@ -0,0 +1,10 @@ +51 121 +9 63 +71 121 +66 100 +89 111 +15 23 +98 110 +15 96 +4 52 +96 119 diff --git a/geom_bottleneck/tests/data/test_534_A b/geom_bottleneck/tests/data/test_534_A new file mode 100644 index 0000000..a5c6b69 --- /dev/null +++ b/geom_bottleneck/tests/data/test_534_A @@ -0,0 +1,10 @@ +84 177 +8 103 +81 176 +0 71 +4 80 +59 123 +42 63 +1 98 +86 169 +31 97 diff --git a/geom_bottleneck/tests/data/test_534_B b/geom_bottleneck/tests/data/test_534_B new file mode 100644 index 0000000..10d4e7b --- /dev/null +++ b/geom_bottleneck/tests/data/test_534_B @@ -0,0 +1,10 @@ +8 56 +35 95 +62 104 +26 105 +32 52 +1 48 +87 150 +61 77 +12 66 +62 96 diff --git a/geom_bottleneck/tests/data/test_535_A b/geom_bottleneck/tests/data/test_535_A new file mode 100644 index 0000000..faaf29f --- /dev/null +++ b/geom_bottleneck/tests/data/test_535_A @@ -0,0 +1,10 @@ +40 53 +9 46 +94 119 +85 113 +2 97 +62 162 +74 89 +87 118 +76 120 +33 39 diff --git a/geom_bottleneck/tests/data/test_535_B b/geom_bottleneck/tests/data/test_535_B new file mode 100644 index 0000000..108c8a3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_535_B @@ -0,0 +1,10 @@ +6 82 +22 100 +2 82 +71 123 +91 179 +14 107 +28 38 +71 83 +6 60 +1 5 diff --git a/geom_bottleneck/tests/data/test_536_A b/geom_bottleneck/tests/data/test_536_A new file mode 100644 index 0000000..320f5af --- /dev/null +++ b/geom_bottleneck/tests/data/test_536_A @@ -0,0 +1,10 @@ +87 179 +24 37 +14 64 +10 103 +92 160 +96 136 +86 171 +21 54 +22 32 +71 169 diff --git a/geom_bottleneck/tests/data/test_536_B b/geom_bottleneck/tests/data/test_536_B new file mode 100644 index 0000000..9ce91f5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_536_B @@ -0,0 +1,10 @@ +73 151 +54 87 +79 166 +69 149 +77 132 +49 149 +86 107 +72 119 +35 77 +52 56 diff --git a/geom_bottleneck/tests/data/test_537_A b/geom_bottleneck/tests/data/test_537_A new file mode 100644 index 0000000..c41e293 --- /dev/null +++ b/geom_bottleneck/tests/data/test_537_A @@ -0,0 +1,10 @@ +4 80 +18 78 +55 56 +32 118 +79 151 +5 78 +11 12 +89 113 +99 120 +26 85 diff --git a/geom_bottleneck/tests/data/test_537_B b/geom_bottleneck/tests/data/test_537_B new file mode 100644 index 0000000..a10f64d --- /dev/null +++ b/geom_bottleneck/tests/data/test_537_B @@ -0,0 +1,10 @@ +53 138 +80 135 +34 112 +20 46 +79 122 +21 87 +82 83 +91 112 +59 139 +9 97 diff --git a/geom_bottleneck/tests/data/test_538_A b/geom_bottleneck/tests/data/test_538_A new file mode 100644 index 0000000..0d98495 --- /dev/null +++ b/geom_bottleneck/tests/data/test_538_A @@ -0,0 +1,10 @@ +68 91 +38 132 +6 57 +24 46 +71 79 +61 129 +59 82 +15 105 +77 79 +44 117 diff --git a/geom_bottleneck/tests/data/test_538_B b/geom_bottleneck/tests/data/test_538_B new file mode 100644 index 0000000..6dde6f3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_538_B @@ -0,0 +1,10 @@ +0 89 +73 128 +54 150 +79 98 +62 137 +51 66 +67 99 +31 100 +68 105 +19 30 diff --git a/geom_bottleneck/tests/data/test_539_A b/geom_bottleneck/tests/data/test_539_A new file mode 100644 index 0000000..a844d1c --- /dev/null +++ b/geom_bottleneck/tests/data/test_539_A @@ -0,0 +1,10 @@ +72 140 +32 108 +64 99 +78 130 +74 122 +92 134 +71 75 +14 89 +86 134 +1 36 diff --git a/geom_bottleneck/tests/data/test_539_B b/geom_bottleneck/tests/data/test_539_B new file mode 100644 index 0000000..824a004 --- /dev/null +++ b/geom_bottleneck/tests/data/test_539_B @@ -0,0 +1,10 @@ +2 56 +57 82 +6 38 +60 68 +80 101 +27 57 +56 133 +45 75 +42 103 +38 78 diff --git a/geom_bottleneck/tests/data/test_540_A b/geom_bottleneck/tests/data/test_540_A new file mode 100644 index 0000000..26bd782 --- /dev/null +++ b/geom_bottleneck/tests/data/test_540_A @@ -0,0 +1,20 @@ +98 163 +65 109 +99 135 +11 83 +36 76 +57 84 +97 180 +22 87 +27 51 +92 190 +66 102 +32 76 +78 125 +70 144 +72 127 +50 51 +34 112 +3 39 +37 79 +55 143 diff --git a/geom_bottleneck/tests/data/test_540_B b/geom_bottleneck/tests/data/test_540_B new file mode 100644 index 0000000..224839d --- /dev/null +++ b/geom_bottleneck/tests/data/test_540_B @@ -0,0 +1,20 @@ +90 182 +48 122 +34 109 +78 115 +60 110 +78 134 +58 59 +14 27 +48 94 +63 100 +88 171 +29 123 +20 61 +66 115 +46 61 +5 74 +94 189 +46 80 +85 88 +9 75 diff --git a/geom_bottleneck/tests/data/test_541_A b/geom_bottleneck/tests/data/test_541_A new file mode 100644 index 0000000..fe8039b --- /dev/null +++ b/geom_bottleneck/tests/data/test_541_A @@ -0,0 +1,20 @@ +79 102 +50 71 +80 116 +35 44 +54 112 +89 90 +16 90 +14 30 +44 122 +98 135 +45 68 +46 125 +0 11 +46 94 +75 79 +76 89 +15 82 +84 95 +49 61 +68 123 diff --git a/geom_bottleneck/tests/data/test_541_B b/geom_bottleneck/tests/data/test_541_B new file mode 100644 index 0000000..c33af0e --- /dev/null +++ b/geom_bottleneck/tests/data/test_541_B @@ -0,0 +1,20 @@ +39 108 +72 146 +49 50 +31 72 +84 104 +72 90 +57 81 +14 74 +69 74 +88 157 +9 65 +34 46 +44 87 +39 65 +14 77 +22 116 +5 58 +43 113 +62 120 +85 118 diff --git a/geom_bottleneck/tests/data/test_542_A b/geom_bottleneck/tests/data/test_542_A new file mode 100644 index 0000000..d45ea52 --- /dev/null +++ b/geom_bottleneck/tests/data/test_542_A @@ -0,0 +1,20 @@ +17 49 +64 156 +91 96 +83 142 +90 118 +20 59 +26 69 +82 118 +94 179 +1 20 +81 123 +89 165 +17 71 +60 85 +56 147 +94 175 +82 148 +31 118 +51 95 +12 41 diff --git a/geom_bottleneck/tests/data/test_542_B b/geom_bottleneck/tests/data/test_542_B new file mode 100644 index 0000000..9dcdf8a --- /dev/null +++ b/geom_bottleneck/tests/data/test_542_B @@ -0,0 +1,20 @@ +21 47 +41 90 +78 121 +36 93 +8 108 +78 117 +31 92 +97 102 +12 96 +83 89 +36 85 +2 81 +24 86 +26 105 +10 99 +59 101 +45 98 +94 162 +57 60 +29 81 diff --git a/geom_bottleneck/tests/data/test_543_A b/geom_bottleneck/tests/data/test_543_A new file mode 100644 index 0000000..511fbc1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_543_A @@ -0,0 +1,20 @@ +92 188 +94 159 +77 175 +13 23 +92 186 +85 144 +100 191 +34 48 +58 103 +74 113 +73 95 +34 66 +2 98 +80 95 +82 140 +38 133 +67 121 +65 70 +83 86 +90 143 diff --git a/geom_bottleneck/tests/data/test_543_B b/geom_bottleneck/tests/data/test_543_B new file mode 100644 index 0000000..879080c --- /dev/null +++ b/geom_bottleneck/tests/data/test_543_B @@ -0,0 +1,20 @@ +100 168 +52 97 +35 39 +4 38 +42 55 +47 117 +49 145 +16 48 +99 145 +45 54 +69 129 +8 103 +47 108 +25 70 +93 148 +96 133 +44 49 +94 115 +48 53 +44 109 diff --git a/geom_bottleneck/tests/data/test_544_A b/geom_bottleneck/tests/data/test_544_A new file mode 100644 index 0000000..a355d41 --- /dev/null +++ b/geom_bottleneck/tests/data/test_544_A @@ -0,0 +1,20 @@ +31 114 +22 94 +10 88 +82 134 +28 106 +90 188 +78 130 +87 176 +99 155 +71 116 +39 105 +8 40 +96 184 +53 100 +77 79 +26 96 +30 116 +82 167 +62 122 +95 152 diff --git a/geom_bottleneck/tests/data/test_544_B b/geom_bottleneck/tests/data/test_544_B new file mode 100644 index 0000000..83587cf --- /dev/null +++ b/geom_bottleneck/tests/data/test_544_B @@ -0,0 +1,20 @@ +75 125 +7 26 +61 102 +98 99 +12 88 +49 63 +46 61 +77 111 +13 56 +37 89 +7 84 +51 69 +86 142 +98 140 +91 122 +10 65 +9 33 +6 70 +95 101 +26 111 diff --git a/geom_bottleneck/tests/data/test_545_A b/geom_bottleneck/tests/data/test_545_A new file mode 100644 index 0000000..c5351d7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_545_A @@ -0,0 +1,20 @@ +52 89 +34 54 +44 124 +82 128 +75 104 +26 120 +77 159 +11 42 +75 153 +89 189 +52 73 +43 128 +45 132 +80 160 +53 55 +76 122 +96 114 +64 109 +20 119 +99 145 diff --git a/geom_bottleneck/tests/data/test_545_B b/geom_bottleneck/tests/data/test_545_B new file mode 100644 index 0000000..0c60c17 --- /dev/null +++ b/geom_bottleneck/tests/data/test_545_B @@ -0,0 +1,20 @@ +74 118 +29 69 +19 82 +50 124 +82 155 +15 63 +35 51 +38 52 +11 105 +70 114 +19 86 +91 157 +98 151 +14 83 +39 126 +38 52 +57 68 +79 137 +21 66 +68 92 diff --git a/geom_bottleneck/tests/data/test_546_A b/geom_bottleneck/tests/data/test_546_A new file mode 100644 index 0000000..4391c84 --- /dev/null +++ b/geom_bottleneck/tests/data/test_546_A @@ -0,0 +1,20 @@ +60 91 +46 132 +27 127 +4 36 +66 116 +73 113 +56 98 +29 66 +38 88 +18 24 +19 52 +32 119 +39 81 +71 110 +24 46 +81 90 +80 111 +47 88 +94 142 +42 47 diff --git a/geom_bottleneck/tests/data/test_546_B b/geom_bottleneck/tests/data/test_546_B new file mode 100644 index 0000000..3d3dec6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_546_B @@ -0,0 +1,20 @@ +82 101 +14 80 +56 78 +28 113 +61 125 +70 88 +30 47 +88 176 +84 169 +15 92 +17 19 +33 61 +33 34 +60 142 +7 8 +5 34 +99 140 +35 113 +14 46 +74 112 diff --git a/geom_bottleneck/tests/data/test_547_A b/geom_bottleneck/tests/data/test_547_A new file mode 100644 index 0000000..1388d05 --- /dev/null +++ b/geom_bottleneck/tests/data/test_547_A @@ -0,0 +1,20 @@ +36 57 +27 86 +11 103 +73 132 +5 58 +59 66 +26 35 +0 18 +47 138 +49 118 +23 79 +12 99 +9 35 +15 79 +18 25 +94 137 +8 50 +68 78 +79 179 +31 121 diff --git a/geom_bottleneck/tests/data/test_547_B b/geom_bottleneck/tests/data/test_547_B new file mode 100644 index 0000000..dbb925d --- /dev/null +++ b/geom_bottleneck/tests/data/test_547_B @@ -0,0 +1,20 @@ +24 75 +28 29 +35 81 +81 178 +25 79 +78 106 +23 93 +57 151 +96 135 +85 151 +73 149 +37 98 +10 24 +30 61 +39 67 +68 74 +57 79 +66 160 +60 151 +66 139 diff --git a/geom_bottleneck/tests/data/test_548_A b/geom_bottleneck/tests/data/test_548_A new file mode 100644 index 0000000..08c858e --- /dev/null +++ b/geom_bottleneck/tests/data/test_548_A @@ -0,0 +1,20 @@ +15 24 +24 72 +67 142 +71 97 +26 61 +99 158 +61 82 +100 198 +51 114 +10 98 +46 93 +74 171 +14 75 +85 101 +30 40 +37 42 +2 16 +48 64 +48 99 +77 170 diff --git a/geom_bottleneck/tests/data/test_548_B b/geom_bottleneck/tests/data/test_548_B new file mode 100644 index 0000000..b6dda3a --- /dev/null +++ b/geom_bottleneck/tests/data/test_548_B @@ -0,0 +1,20 @@ +51 59 +99 108 +89 148 +82 96 +55 117 +52 148 +74 133 +37 99 +6 71 +0 15 +100 170 +28 56 +12 39 +61 98 +24 92 +18 88 +63 158 +91 129 +79 154 +39 85 diff --git a/geom_bottleneck/tests/data/test_549_A b/geom_bottleneck/tests/data/test_549_A new file mode 100644 index 0000000..b0d5ddf --- /dev/null +++ b/geom_bottleneck/tests/data/test_549_A @@ -0,0 +1,20 @@ +35 44 +1 25 +100 168 +81 169 +40 84 +28 37 +50 58 +60 122 +4 27 +2 99 +67 145 +51 111 +96 148 +47 65 +64 159 +54 114 +90 113 +4 36 +94 178 +19 20 diff --git a/geom_bottleneck/tests/data/test_549_B b/geom_bottleneck/tests/data/test_549_B new file mode 100644 index 0000000..a44a982 --- /dev/null +++ b/geom_bottleneck/tests/data/test_549_B @@ -0,0 +1,20 @@ +68 146 +8 27 +6 64 +76 113 +71 89 +29 65 +74 133 +52 57 +21 26 +2 39 +95 194 +67 113 +14 20 +90 160 +93 171 +72 97 +57 157 +23 42 +13 70 +17 44 diff --git a/geom_bottleneck/tests/data/test_550_A b/geom_bottleneck/tests/data/test_550_A new file mode 100644 index 0000000..b8ba8e8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_550_A @@ -0,0 +1,20 @@ +76 145 +38 79 +44 90 +71 155 +48 63 +88 125 +36 107 +91 136 +25 33 +49 57 +37 70 +69 116 +63 64 +70 118 +43 115 +80 99 +42 71 +86 91 +96 166 +69 121 diff --git a/geom_bottleneck/tests/data/test_550_B b/geom_bottleneck/tests/data/test_550_B new file mode 100644 index 0000000..ed900f0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_550_B @@ -0,0 +1,20 @@ +25 66 +55 107 +62 87 +15 49 +46 99 +25 39 +73 94 +43 126 +85 163 +12 96 +48 127 +21 26 +40 45 +88 188 +77 109 +38 44 +0 66 +57 59 +85 104 +32 54 diff --git a/geom_bottleneck/tests/data/test_551_A b/geom_bottleneck/tests/data/test_551_A new file mode 100644 index 0000000..3002ec2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_551_A @@ -0,0 +1,20 @@ +68 98 +42 48 +4 5 +6 82 +41 83 +94 141 +17 48 +33 105 +71 162 +55 95 +43 132 +81 162 +6 32 +88 101 +76 85 +36 70 +42 45 +60 122 +83 127 +100 148 diff --git a/geom_bottleneck/tests/data/test_551_B b/geom_bottleneck/tests/data/test_551_B new file mode 100644 index 0000000..5a9b2de --- /dev/null +++ b/geom_bottleneck/tests/data/test_551_B @@ -0,0 +1,20 @@ +58 109 +88 154 +56 66 +76 142 +86 125 +95 181 +46 85 +15 43 +55 79 +77 104 +45 113 +66 74 +64 100 +45 138 +6 62 +36 79 +77 106 +82 115 +15 110 +62 156 diff --git a/geom_bottleneck/tests/data/test_552_A b/geom_bottleneck/tests/data/test_552_A new file mode 100644 index 0000000..19de840 --- /dev/null +++ b/geom_bottleneck/tests/data/test_552_A @@ -0,0 +1,20 @@ +10 104 +23 89 +7 13 +66 150 +92 157 +22 43 +35 62 +96 187 +84 89 +75 160 +88 118 +74 99 +43 138 +20 37 +90 176 +85 157 +90 168 +63 157 +59 106 +68 92 diff --git a/geom_bottleneck/tests/data/test_552_B b/geom_bottleneck/tests/data/test_552_B new file mode 100644 index 0000000..54b3e00 --- /dev/null +++ b/geom_bottleneck/tests/data/test_552_B @@ -0,0 +1,20 @@ +57 121 +94 173 +84 133 +61 106 +71 130 +44 114 +55 73 +100 144 +91 126 +60 109 +44 92 +23 87 +52 116 +24 25 +10 93 +60 140 +11 55 +96 155 +76 165 +38 129 diff --git a/geom_bottleneck/tests/data/test_553_A b/geom_bottleneck/tests/data/test_553_A new file mode 100644 index 0000000..deff96a --- /dev/null +++ b/geom_bottleneck/tests/data/test_553_A @@ -0,0 +1,20 @@ +1 4 +23 91 +97 103 +6 68 +13 25 +9 18 +65 122 +91 154 +41 76 +86 132 +31 62 +93 167 +45 50 +70 166 +38 113 +52 132 +77 161 +13 60 +39 65 +60 69 diff --git a/geom_bottleneck/tests/data/test_553_B b/geom_bottleneck/tests/data/test_553_B new file mode 100644 index 0000000..ee7ce9b --- /dev/null +++ b/geom_bottleneck/tests/data/test_553_B @@ -0,0 +1,20 @@ +51 60 +76 151 +87 157 +49 110 +78 112 +3 59 +55 98 +26 121 +69 158 +15 63 +70 109 +30 46 +23 75 +65 138 +87 120 +7 46 +99 187 +43 69 +73 161 +37 93 diff --git a/geom_bottleneck/tests/data/test_554_A b/geom_bottleneck/tests/data/test_554_A new file mode 100644 index 0000000..da38226 --- /dev/null +++ b/geom_bottleneck/tests/data/test_554_A @@ -0,0 +1,20 @@ +69 134 +81 159 +100 168 +96 111 +46 134 +56 61 +8 31 +63 119 +57 137 +16 84 +5 51 +79 128 +20 117 +85 136 +34 88 +23 73 +3 87 +10 34 +72 120 +36 71 diff --git a/geom_bottleneck/tests/data/test_554_B b/geom_bottleneck/tests/data/test_554_B new file mode 100644 index 0000000..8583236 --- /dev/null +++ b/geom_bottleneck/tests/data/test_554_B @@ -0,0 +1,20 @@ +14 62 +54 74 +87 164 +57 87 +70 113 +5 75 +86 185 +3 69 +36 52 +31 93 +85 104 +4 97 +89 149 +19 92 +70 120 +13 18 +48 72 +100 152 +35 48 +94 191 diff --git a/geom_bottleneck/tests/data/test_555_A b/geom_bottleneck/tests/data/test_555_A new file mode 100644 index 0000000..87cd93d --- /dev/null +++ b/geom_bottleneck/tests/data/test_555_A @@ -0,0 +1,20 @@ +23 58 +71 106 +56 155 +37 85 +88 186 +12 75 +23 86 +17 92 +30 96 +13 54 +53 152 +84 153 +15 22 +67 86 +93 147 +17 117 +99 170 +75 108 +18 118 +71 131 diff --git a/geom_bottleneck/tests/data/test_555_B b/geom_bottleneck/tests/data/test_555_B new file mode 100644 index 0000000..2b8c351 --- /dev/null +++ b/geom_bottleneck/tests/data/test_555_B @@ -0,0 +1,20 @@ +9 71 +95 131 +85 156 +86 142 +10 54 +56 119 +49 100 +30 50 +7 64 +27 82 +14 85 +33 35 +22 52 +92 171 +36 62 +85 133 +4 14 +47 124 +70 131 +14 29 diff --git a/geom_bottleneck/tests/data/test_556_A b/geom_bottleneck/tests/data/test_556_A new file mode 100644 index 0000000..182965d --- /dev/null +++ b/geom_bottleneck/tests/data/test_556_A @@ -0,0 +1,20 @@ +79 147 +83 144 +20 30 +92 185 +29 40 +46 90 +21 106 +15 24 +16 63 +62 67 +18 106 +52 127 +47 64 +15 84 +10 87 +16 102 +89 139 +64 68 +57 128 +37 120 diff --git a/geom_bottleneck/tests/data/test_556_B b/geom_bottleneck/tests/data/test_556_B new file mode 100644 index 0000000..f2e3409 --- /dev/null +++ b/geom_bottleneck/tests/data/test_556_B @@ -0,0 +1,20 @@ +84 125 +37 84 +38 46 +32 59 +36 76 +95 107 +82 144 +81 121 +72 145 +1 100 +70 143 +76 167 +8 26 +51 90 +74 165 +88 89 +56 155 +95 165 +24 109 +45 141 diff --git a/geom_bottleneck/tests/data/test_557_A b/geom_bottleneck/tests/data/test_557_A new file mode 100644 index 0000000..ac233bb --- /dev/null +++ b/geom_bottleneck/tests/data/test_557_A @@ -0,0 +1,20 @@ +47 91 +57 100 +93 157 +12 91 +95 109 +26 103 +55 78 +58 106 +5 96 +25 85 +76 97 +20 78 +85 160 +71 144 +81 145 +58 59 +49 86 +31 35 +89 156 +15 82 diff --git a/geom_bottleneck/tests/data/test_557_B b/geom_bottleneck/tests/data/test_557_B new file mode 100644 index 0000000..f838403 --- /dev/null +++ b/geom_bottleneck/tests/data/test_557_B @@ -0,0 +1,20 @@ +31 112 +70 120 +12 49 +95 96 +27 87 +50 120 +78 115 +22 108 +54 82 +31 109 +51 74 +55 140 +7 92 +88 133 +61 82 +90 183 +33 64 +90 121 +26 47 +98 120 diff --git a/geom_bottleneck/tests/data/test_558_A b/geom_bottleneck/tests/data/test_558_A new file mode 100644 index 0000000..7108d09 --- /dev/null +++ b/geom_bottleneck/tests/data/test_558_A @@ -0,0 +1,20 @@ +57 115 +32 131 +32 111 +46 104 +8 12 +20 69 +65 89 +8 37 +88 153 +61 63 +86 139 +74 88 +3 62 +58 104 +31 100 +29 81 +55 59 +11 18 +63 103 +56 110 diff --git a/geom_bottleneck/tests/data/test_558_B b/geom_bottleneck/tests/data/test_558_B new file mode 100644 index 0000000..dd19869 --- /dev/null +++ b/geom_bottleneck/tests/data/test_558_B @@ -0,0 +1,20 @@ +43 134 +43 44 +56 124 +97 118 +34 68 +56 140 +41 140 +24 95 +57 91 +22 28 +94 158 +69 141 +94 110 +7 41 +39 59 +69 107 +76 163 +30 105 +96 142 +46 127 diff --git a/geom_bottleneck/tests/data/test_559_A b/geom_bottleneck/tests/data/test_559_A new file mode 100644 index 0000000..46f07b4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_559_A @@ -0,0 +1,20 @@ +21 99 +7 104 +89 130 +91 181 +19 90 +57 146 +15 60 +66 123 +13 58 +3 57 +39 114 +4 53 +80 125 +83 132 +81 98 +14 99 +81 175 +49 92 +39 125 +31 111 diff --git a/geom_bottleneck/tests/data/test_559_B b/geom_bottleneck/tests/data/test_559_B new file mode 100644 index 0000000..b747fb8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_559_B @@ -0,0 +1,20 @@ +13 43 +81 86 +45 84 +84 111 +39 83 +85 115 +70 150 +97 192 +70 107 +21 74 +71 73 +98 184 +14 114 +63 126 +21 59 +53 147 +70 114 +30 56 +34 35 +61 133 diff --git a/geom_bottleneck/tests/data/test_560_A b/geom_bottleneck/tests/data/test_560_A new file mode 100644 index 0000000..9b704ae --- /dev/null +++ b/geom_bottleneck/tests/data/test_560_A @@ -0,0 +1,30 @@ +35 126 +34 37 +78 84 +70 127 +97 106 +42 49 +49 105 +50 150 +80 140 +30 128 +90 136 +77 173 +42 98 +17 97 +100 181 +30 45 +6 40 +30 75 +66 148 +13 66 +39 113 +53 106 +65 133 +1 17 +61 123 +37 114 +1 77 +6 19 +8 11 +20 95 diff --git a/geom_bottleneck/tests/data/test_560_B b/geom_bottleneck/tests/data/test_560_B new file mode 100644 index 0000000..d4ece9d --- /dev/null +++ b/geom_bottleneck/tests/data/test_560_B @@ -0,0 +1,30 @@ +100 150 +25 32 +99 187 +42 117 +60 84 +22 104 +15 113 +29 58 +91 185 +92 120 +95 133 +42 67 +62 148 +79 122 +27 66 +14 75 +44 142 +10 25 +54 149 +31 38 +97 161 +63 115 +29 76 +100 102 +59 72 +54 140 +8 108 +12 83 +54 127 +43 95 diff --git a/geom_bottleneck/tests/data/test_561_A b/geom_bottleneck/tests/data/test_561_A new file mode 100644 index 0000000..81a3e31 --- /dev/null +++ b/geom_bottleneck/tests/data/test_561_A @@ -0,0 +1,30 @@ +13 66 +67 124 +99 163 +91 163 +42 140 +96 153 +6 77 +6 83 +84 166 +48 79 +50 79 +63 111 +21 85 +55 117 +62 160 +4 101 +30 75 +42 87 +58 60 +88 178 +43 54 +90 120 +72 147 +30 70 +13 66 +89 166 +83 149 +69 160 +66 83 +89 142 diff --git a/geom_bottleneck/tests/data/test_561_B b/geom_bottleneck/tests/data/test_561_B new file mode 100644 index 0000000..c60b08c --- /dev/null +++ b/geom_bottleneck/tests/data/test_561_B @@ -0,0 +1,30 @@ +61 97 +8 94 +32 68 +55 101 +24 56 +25 30 +33 79 +16 111 +72 82 +42 86 +93 143 +94 163 +69 168 +68 100 +3 102 +9 72 +6 74 +4 46 +97 130 +15 27 +12 33 +62 67 +37 74 +0 76 +14 102 +33 95 +46 131 +89 90 +79 97 +100 109 diff --git a/geom_bottleneck/tests/data/test_562_A b/geom_bottleneck/tests/data/test_562_A new file mode 100644 index 0000000..6dadf55 --- /dev/null +++ b/geom_bottleneck/tests/data/test_562_A @@ -0,0 +1,30 @@ +12 41 +99 100 +15 60 +95 108 +9 108 +4 5 +96 161 +88 168 +12 106 +78 167 +80 164 +69 130 +88 161 +49 134 +18 76 +54 134 +45 136 +22 50 +21 78 +17 88 +46 117 +97 174 +25 95 +8 9 +43 123 +25 107 +58 73 +2 7 +89 152 +81 114 diff --git a/geom_bottleneck/tests/data/test_562_B b/geom_bottleneck/tests/data/test_562_B new file mode 100644 index 0000000..48eaf77 --- /dev/null +++ b/geom_bottleneck/tests/data/test_562_B @@ -0,0 +1,30 @@ +5 104 +17 105 +43 120 +87 88 +35 71 +47 55 +57 87 +66 119 +26 114 +4 9 +29 70 +40 95 +61 73 +20 31 +85 148 +47 59 +34 43 +36 50 +70 77 +30 47 +36 56 +9 55 +35 127 +36 84 +83 118 +90 98 +69 85 +34 104 +76 127 +78 99 diff --git a/geom_bottleneck/tests/data/test_563_A b/geom_bottleneck/tests/data/test_563_A new file mode 100644 index 0000000..954685e --- /dev/null +++ b/geom_bottleneck/tests/data/test_563_A @@ -0,0 +1,30 @@ +51 145 +19 119 +94 179 +8 35 +90 155 +34 39 +55 96 +19 27 +84 95 +12 52 +14 101 +72 143 +1 14 +88 138 +95 109 +85 134 +54 149 +35 85 +50 55 +93 173 +81 108 +14 112 +23 67 +13 14 +21 37 +89 177 +63 163 +2 89 +5 61 +18 76 diff --git a/geom_bottleneck/tests/data/test_563_B b/geom_bottleneck/tests/data/test_563_B new file mode 100644 index 0000000..c3d7844 --- /dev/null +++ b/geom_bottleneck/tests/data/test_563_B @@ -0,0 +1,30 @@ +40 75 +52 88 +0 33 +63 134 +19 77 +34 106 +67 164 +6 61 +67 144 +41 105 +30 108 +17 24 +97 105 +61 90 +45 80 +34 52 +58 140 +46 52 +4 13 +43 143 +74 168 +85 148 +24 55 +80 84 +3 56 +39 138 +1 30 +14 20 +14 91 +42 48 diff --git a/geom_bottleneck/tests/data/test_564_A b/geom_bottleneck/tests/data/test_564_A new file mode 100644 index 0000000..a39b7ae --- /dev/null +++ b/geom_bottleneck/tests/data/test_564_A @@ -0,0 +1,30 @@ +85 112 +83 119 +84 128 +36 100 +18 112 +83 89 +17 80 +68 147 +32 76 +42 46 +29 89 +9 49 +40 135 +65 75 +69 113 +87 184 +81 103 +13 81 +44 99 +17 51 +99 102 +86 89 +29 124 +52 140 +19 54 +73 173 +89 172 +6 33 +80 139 +52 58 diff --git a/geom_bottleneck/tests/data/test_564_B b/geom_bottleneck/tests/data/test_564_B new file mode 100644 index 0000000..22adad2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_564_B @@ -0,0 +1,30 @@ +56 66 +92 164 +7 68 +87 135 +45 70 +94 109 +32 103 +44 73 +36 124 +50 139 +88 102 +17 116 +3 61 +90 149 +41 62 +13 42 +19 51 +96 105 +55 143 +67 165 +44 129 +72 171 +20 51 +36 119 +35 96 +33 107 +48 106 +9 30 +36 110 +90 114 diff --git a/geom_bottleneck/tests/data/test_565_A b/geom_bottleneck/tests/data/test_565_A new file mode 100644 index 0000000..34eb265 --- /dev/null +++ b/geom_bottleneck/tests/data/test_565_A @@ -0,0 +1,30 @@ +33 61 +68 78 +90 98 +66 127 +93 152 +21 29 +49 52 +78 171 +42 55 +95 159 +82 141 +85 152 +22 25 +71 132 +24 75 +3 82 +42 131 +24 73 +89 155 +32 132 +77 159 +97 165 +89 92 +50 82 +52 102 +11 64 +47 135 +45 89 +11 52 +11 25 diff --git a/geom_bottleneck/tests/data/test_565_B b/geom_bottleneck/tests/data/test_565_B new file mode 100644 index 0000000..da5ed1d --- /dev/null +++ b/geom_bottleneck/tests/data/test_565_B @@ -0,0 +1,30 @@ +46 66 +86 178 +19 102 +97 140 +22 97 +49 97 +6 48 +23 105 +92 157 +85 103 +67 167 +29 44 +88 183 +85 184 +90 93 +23 113 +30 106 +32 130 +81 154 +76 141 +75 101 +26 84 +9 77 +53 73 +23 84 +83 85 +6 44 +29 31 +26 107 +61 114 diff --git a/geom_bottleneck/tests/data/test_566_A b/geom_bottleneck/tests/data/test_566_A new file mode 100644 index 0000000..55d0a13 --- /dev/null +++ b/geom_bottleneck/tests/data/test_566_A @@ -0,0 +1,30 @@ +4 34 +20 53 +59 101 +40 70 +29 58 +67 107 +92 122 +35 120 +34 98 +34 79 +17 20 +12 53 +69 167 +19 88 +92 118 +21 73 +54 78 +0 83 +41 127 +34 59 +41 106 +4 102 +46 48 +99 189 +15 25 +17 19 +25 33 +25 108 +25 105 +64 99 diff --git a/geom_bottleneck/tests/data/test_566_B b/geom_bottleneck/tests/data/test_566_B new file mode 100644 index 0000000..57c08b6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_566_B @@ -0,0 +1,30 @@ +36 121 +5 33 +47 137 +95 158 +43 105 +4 15 +0 59 +30 36 +29 106 +58 126 +81 129 +63 108 +52 147 +80 163 +93 94 +32 122 +12 92 +74 135 +25 28 +11 107 +91 182 +68 90 +90 106 +96 126 +83 117 +57 147 +89 181 +36 107 +24 68 +83 131 diff --git a/geom_bottleneck/tests/data/test_567_A b/geom_bottleneck/tests/data/test_567_A new file mode 100644 index 0000000..3304c25 --- /dev/null +++ b/geom_bottleneck/tests/data/test_567_A @@ -0,0 +1,30 @@ +67 79 +12 58 +33 85 +25 70 +79 128 +34 59 +22 45 +100 102 +25 57 +30 113 +77 89 +74 83 +43 138 +30 81 +26 64 +91 94 +83 149 +83 119 +44 46 +79 105 +49 140 +58 110 +92 104 +8 65 +40 52 +46 60 +9 17 +25 47 +25 125 +95 109 diff --git a/geom_bottleneck/tests/data/test_567_B b/geom_bottleneck/tests/data/test_567_B new file mode 100644 index 0000000..4a8f5fa --- /dev/null +++ b/geom_bottleneck/tests/data/test_567_B @@ -0,0 +1,30 @@ +46 93 +85 165 +2 24 +29 81 +88 99 +94 109 +78 82 +54 69 +43 139 +3 40 +37 117 +98 138 +12 71 +75 84 +9 100 +56 65 +97 146 +56 105 +17 82 +11 44 +93 100 +6 99 +32 128 +9 35 +9 41 +66 123 +66 163 +34 110 +47 82 +15 97 diff --git a/geom_bottleneck/tests/data/test_568_A b/geom_bottleneck/tests/data/test_568_A new file mode 100644 index 0000000..e6e0ecb --- /dev/null +++ b/geom_bottleneck/tests/data/test_568_A @@ -0,0 +1,30 @@ +20 98 +14 51 +82 116 +80 117 +96 109 +61 101 +44 75 +76 80 +64 96 +100 158 +13 89 +84 138 +0 16 +94 138 +32 117 +68 157 +7 24 +1 56 +72 101 +47 128 +85 90 +66 155 +33 106 +97 144 +50 139 +10 54 +23 77 +87 106 +37 104 +11 37 diff --git a/geom_bottleneck/tests/data/test_568_B b/geom_bottleneck/tests/data/test_568_B new file mode 100644 index 0000000..081ff5e --- /dev/null +++ b/geom_bottleneck/tests/data/test_568_B @@ -0,0 +1,30 @@ +49 147 +26 112 +32 71 +30 50 +77 136 +10 110 +50 71 +14 110 +4 24 +64 125 +54 121 +58 142 +50 51 +0 63 +7 96 +49 146 +64 111 +53 122 +2 84 +56 102 +44 102 +5 78 +61 90 +32 92 +99 157 +100 188 +37 70 +6 7 +58 139 +52 138 diff --git a/geom_bottleneck/tests/data/test_569_A b/geom_bottleneck/tests/data/test_569_A new file mode 100644 index 0000000..7fc96cf --- /dev/null +++ b/geom_bottleneck/tests/data/test_569_A @@ -0,0 +1,30 @@ +83 116 +33 112 +58 86 +3 65 +21 46 +51 58 +47 138 +88 112 +4 84 +4 8 +46 74 +74 132 +54 120 +2 68 +99 119 +5 43 +5 61 +54 75 +83 169 +100 192 +47 133 +27 28 +44 128 +19 77 +60 160 +46 55 +78 169 +16 82 +60 97 +57 60 diff --git a/geom_bottleneck/tests/data/test_569_B b/geom_bottleneck/tests/data/test_569_B new file mode 100644 index 0000000..b732aac --- /dev/null +++ b/geom_bottleneck/tests/data/test_569_B @@ -0,0 +1,30 @@ +51 97 +59 91 +9 11 +49 50 +54 111 +44 132 +22 53 +11 80 +22 101 +76 79 +29 112 +99 123 +67 116 +69 110 +27 51 +22 55 +3 58 +43 84 +18 68 +88 134 +28 29 +70 137 +36 37 +85 168 +4 69 +50 99 +27 117 +12 69 +55 127 +23 28 diff --git a/geom_bottleneck/tests/data/test_570_A b/geom_bottleneck/tests/data/test_570_A new file mode 100644 index 0000000..371835b --- /dev/null +++ b/geom_bottleneck/tests/data/test_570_A @@ -0,0 +1,30 @@ +30 76 +17 43 +84 85 +45 52 +85 117 +95 172 +36 58 +6 12 +70 147 +82 114 +67 163 +1 85 +1 92 +23 80 +58 60 +42 123 +100 148 +52 127 +45 49 +33 47 +48 124 +77 169 +5 64 +24 49 +16 40 +83 130 +86 121 +73 157 +88 124 +59 80 diff --git a/geom_bottleneck/tests/data/test_570_B b/geom_bottleneck/tests/data/test_570_B new file mode 100644 index 0000000..3ce3450 --- /dev/null +++ b/geom_bottleneck/tests/data/test_570_B @@ -0,0 +1,30 @@ +44 134 +28 120 +0 58 +32 41 +64 82 +7 91 +32 123 +22 46 +87 159 +3 13 +79 102 +37 80 +77 91 +64 126 +43 128 +53 107 +50 89 +15 111 +37 101 +6 51 +11 41 +66 110 +99 191 +8 53 +12 59 +53 91 +9 51 +47 57 +35 88 +83 134 diff --git a/geom_bottleneck/tests/data/test_571_A b/geom_bottleneck/tests/data/test_571_A new file mode 100644 index 0000000..6b58a17 --- /dev/null +++ b/geom_bottleneck/tests/data/test_571_A @@ -0,0 +1,30 @@ +73 83 +85 94 +20 39 +62 71 +100 146 +84 95 +21 64 +62 136 +49 90 +39 129 +92 156 +27 105 +48 66 +5 100 +86 186 +74 118 +93 173 +93 143 +91 173 +5 59 +75 78 +98 106 +37 125 +24 60 +24 117 +83 131 +69 137 +1 54 +81 154 +26 124 diff --git a/geom_bottleneck/tests/data/test_571_B b/geom_bottleneck/tests/data/test_571_B new file mode 100644 index 0000000..0bb3b3e --- /dev/null +++ b/geom_bottleneck/tests/data/test_571_B @@ -0,0 +1,30 @@ +90 159 +93 97 +57 109 +87 127 +96 185 +53 142 +59 125 +54 132 +26 48 +54 150 +63 65 +36 50 +3 19 +19 95 +47 76 +25 36 +34 70 +63 126 +99 199 +11 38 +96 120 +89 162 +55 125 +3 98 +11 31 +18 103 +68 101 +47 68 +45 48 +36 59 diff --git a/geom_bottleneck/tests/data/test_572_A b/geom_bottleneck/tests/data/test_572_A new file mode 100644 index 0000000..052ddfe --- /dev/null +++ b/geom_bottleneck/tests/data/test_572_A @@ -0,0 +1,30 @@ +83 96 +59 158 +99 133 +98 139 +71 163 +95 138 +83 97 +46 72 +23 29 +49 133 +60 63 +6 84 +33 86 +33 71 +99 188 +51 61 +79 150 +38 61 +68 147 +98 170 +77 131 +32 97 +57 119 +36 37 +66 75 +37 68 +72 150 +42 99 +28 90 +56 123 diff --git a/geom_bottleneck/tests/data/test_572_B b/geom_bottleneck/tests/data/test_572_B new file mode 100644 index 0000000..d816eab --- /dev/null +++ b/geom_bottleneck/tests/data/test_572_B @@ -0,0 +1,30 @@ +44 61 +72 88 +8 15 +78 155 +90 99 +87 106 +50 57 +60 126 +75 175 +81 135 +94 181 +6 52 +64 152 +63 79 +23 105 +88 104 +68 145 +9 26 +23 68 +49 144 +5 9 +62 156 +6 94 +61 159 +82 130 +26 84 +78 110 +27 75 +41 123 +56 147 diff --git a/geom_bottleneck/tests/data/test_573_A b/geom_bottleneck/tests/data/test_573_A new file mode 100644 index 0000000..fe68d64 --- /dev/null +++ b/geom_bottleneck/tests/data/test_573_A @@ -0,0 +1,30 @@ +43 94 +41 75 +26 69 +43 58 +64 94 +54 98 +19 106 +99 119 +52 115 +79 88 +77 84 +96 118 +55 80 +47 114 +64 137 +79 158 +38 60 +79 136 +57 82 +17 103 +28 82 +28 35 +74 86 +99 121 +96 176 +0 55 +2 76 +85 155 +9 40 +76 118 diff --git a/geom_bottleneck/tests/data/test_573_B b/geom_bottleneck/tests/data/test_573_B new file mode 100644 index 0000000..9824068 --- /dev/null +++ b/geom_bottleneck/tests/data/test_573_B @@ -0,0 +1,30 @@ +60 107 +11 66 +34 94 +40 87 +1 4 +43 67 +25 76 +73 108 +86 178 +25 58 +95 99 +82 97 +13 54 +58 88 +38 78 +44 131 +92 99 +5 88 +98 120 +56 112 +45 112 +69 110 +48 121 +53 83 +20 52 +3 45 +49 126 +13 17 +30 83 +97 121 diff --git a/geom_bottleneck/tests/data/test_574_A b/geom_bottleneck/tests/data/test_574_A new file mode 100644 index 0000000..9dbb066 --- /dev/null +++ b/geom_bottleneck/tests/data/test_574_A @@ -0,0 +1,30 @@ +21 109 +12 79 +44 58 +0 97 +30 124 +58 154 +91 150 +1 92 +34 43 +18 109 +10 11 +0 84 +30 56 +66 166 +43 80 +77 167 +61 94 +58 136 +20 110 +84 144 +100 182 +8 80 +79 124 +89 164 +61 84 +69 129 +30 111 +67 105 +69 70 +38 108 diff --git a/geom_bottleneck/tests/data/test_574_B b/geom_bottleneck/tests/data/test_574_B new file mode 100644 index 0000000..dc0f4c7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_574_B @@ -0,0 +1,30 @@ +24 53 +49 112 +58 149 +49 136 +66 149 +10 87 +36 113 +66 144 +87 150 +20 40 +41 136 +80 111 +99 199 +76 131 +7 72 +99 122 +93 124 +5 8 +97 105 +23 27 +82 102 +30 84 +62 143 +8 48 +40 119 +29 62 +11 68 +75 128 +68 124 +23 26 diff --git a/geom_bottleneck/tests/data/test_575_A b/geom_bottleneck/tests/data/test_575_A new file mode 100644 index 0000000..7703382 --- /dev/null +++ b/geom_bottleneck/tests/data/test_575_A @@ -0,0 +1,30 @@ +78 141 +24 58 +30 120 +71 72 +4 21 +30 61 +7 52 +16 91 +58 109 +28 97 +46 86 +65 134 +86 151 +77 134 +6 32 +31 83 +84 180 +53 118 +78 108 +88 115 +75 137 +92 149 +57 120 +94 109 +59 131 +5 36 +39 91 +65 138 +96 167 +87 164 diff --git a/geom_bottleneck/tests/data/test_575_B b/geom_bottleneck/tests/data/test_575_B new file mode 100644 index 0000000..a5ba6b7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_575_B @@ -0,0 +1,30 @@ +77 176 +11 43 +38 70 +64 163 +70 101 +18 66 +50 119 +30 48 +18 88 +85 106 +50 56 +42 134 +25 92 +5 53 +86 101 +44 91 +61 127 +42 55 +31 103 +15 23 +93 117 +45 68 +39 84 +64 135 +86 109 +82 174 +72 73 +43 73 +37 41 +71 76 diff --git a/geom_bottleneck/tests/data/test_576_A b/geom_bottleneck/tests/data/test_576_A new file mode 100644 index 0000000..57eb281 --- /dev/null +++ b/geom_bottleneck/tests/data/test_576_A @@ -0,0 +1,30 @@ +61 135 +79 123 +27 28 +4 48 +44 120 +40 69 +28 82 +4 45 +28 82 +70 145 +14 102 +84 169 +89 121 +67 137 +65 141 +39 60 +97 162 +90 187 +23 78 +71 168 +76 98 +85 101 +9 86 +57 89 +86 109 +55 62 +90 101 +82 110 +100 153 +33 67 diff --git a/geom_bottleneck/tests/data/test_576_B b/geom_bottleneck/tests/data/test_576_B new file mode 100644 index 0000000..fa63de8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_576_B @@ -0,0 +1,30 @@ +83 145 +27 62 +71 125 +78 175 +11 55 +81 94 +91 141 +27 103 +68 97 +54 89 +68 143 +50 100 +65 85 +84 179 +83 96 +44 121 +13 86 +29 86 +72 172 +95 140 +83 161 +83 100 +98 167 +8 66 +75 101 +6 50 +10 58 +5 57 +51 77 +87 140 diff --git a/geom_bottleneck/tests/data/test_577_A b/geom_bottleneck/tests/data/test_577_A new file mode 100644 index 0000000..d086e3f --- /dev/null +++ b/geom_bottleneck/tests/data/test_577_A @@ -0,0 +1,30 @@ +65 94 +1 2 +30 31 +91 131 +75 170 +38 85 +51 73 +78 155 +43 141 +54 109 +53 54 +36 74 +75 80 +51 144 +33 127 +31 89 +0 10 +18 87 +11 18 +51 126 +64 91 +7 51 +26 71 +92 160 +24 44 +0 58 +3 78 +2 67 +12 88 +68 130 diff --git a/geom_bottleneck/tests/data/test_577_B b/geom_bottleneck/tests/data/test_577_B new file mode 100644 index 0000000..e48e09a --- /dev/null +++ b/geom_bottleneck/tests/data/test_577_B @@ -0,0 +1,30 @@ +90 189 +96 195 +64 91 +81 84 +42 76 +17 19 +76 77 +64 149 +85 99 +90 147 +60 95 +59 155 +29 121 +27 104 +10 72 +32 79 +44 129 +9 70 +68 136 +9 75 +27 89 +70 148 +77 149 +8 91 +24 84 +90 123 +86 105 +64 94 +84 109 +31 51 diff --git a/geom_bottleneck/tests/data/test_578_A b/geom_bottleneck/tests/data/test_578_A new file mode 100644 index 0000000..8b9a6fe --- /dev/null +++ b/geom_bottleneck/tests/data/test_578_A @@ -0,0 +1,30 @@ +9 99 +58 83 +62 110 +32 102 +86 169 +95 131 +1 6 +1 55 +88 154 +67 95 +21 22 +31 118 +15 52 +64 92 +36 87 +18 106 +71 150 +10 55 +67 97 +53 145 +31 40 +33 62 +79 116 +70 110 +96 145 +86 182 +43 116 +54 145 +100 172 +74 84 diff --git a/geom_bottleneck/tests/data/test_578_B b/geom_bottleneck/tests/data/test_578_B new file mode 100644 index 0000000..636f20d --- /dev/null +++ b/geom_bottleneck/tests/data/test_578_B @@ -0,0 +1,30 @@ +33 36 +89 175 +83 151 +61 138 +4 15 +9 58 +38 111 +29 117 +22 79 +26 86 +48 55 +65 134 +60 84 +23 96 +69 149 +29 48 +38 137 +39 51 +88 112 +14 41 +29 119 +52 56 +55 96 +58 127 +78 148 +44 64 +35 108 +69 124 +6 80 +43 77 diff --git a/geom_bottleneck/tests/data/test_579_A b/geom_bottleneck/tests/data/test_579_A new file mode 100644 index 0000000..99bbb96 --- /dev/null +++ b/geom_bottleneck/tests/data/test_579_A @@ -0,0 +1,30 @@ +90 170 +5 32 +49 116 +37 88 +19 64 +81 177 +39 77 +37 123 +53 127 +31 76 +67 114 +51 125 +48 121 +59 62 +31 119 +35 90 +100 117 +33 130 +22 74 +23 41 +71 159 +3 57 +22 61 +86 123 +91 115 +66 92 +39 104 +85 134 +72 160 +6 94 diff --git a/geom_bottleneck/tests/data/test_579_B b/geom_bottleneck/tests/data/test_579_B new file mode 100644 index 0000000..6d3e9b6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_579_B @@ -0,0 +1,30 @@ +76 123 +2 17 +41 123 +62 138 +40 70 +92 164 +70 105 +63 109 +14 23 +26 109 +78 141 +85 162 +37 49 +27 96 +62 68 +80 136 +30 72 +44 85 +59 122 +42 137 +67 140 +81 181 +43 84 +91 108 +71 86 +30 45 +76 94 +25 57 +25 71 +70 90 diff --git a/geom_bottleneck/tests/data/test_580_A b/geom_bottleneck/tests/data/test_580_A new file mode 100644 index 0000000..b8d1c86 --- /dev/null +++ b/geom_bottleneck/tests/data/test_580_A @@ -0,0 +1,50 @@ +34 78 +25 82 +42 132 +77 154 +15 52 +54 69 +68 78 +36 111 +9 24 +30 53 +53 117 +84 163 +91 124 +13 76 +20 59 +67 151 +17 103 +76 156 +3 41 +2 37 +65 158 +67 75 +42 125 +83 115 +47 147 +13 44 +83 133 +92 146 +57 125 +66 103 +55 69 +39 63 +16 63 +98 108 +23 93 +12 30 +7 70 +70 131 +49 127 +83 90 +97 171 +35 81 +78 130 +88 143 +62 124 +2 40 +66 110 +51 61 +2 25 +69 74 diff --git a/geom_bottleneck/tests/data/test_580_B b/geom_bottleneck/tests/data/test_580_B new file mode 100644 index 0000000..1fd48af --- /dev/null +++ b/geom_bottleneck/tests/data/test_580_B @@ -0,0 +1,50 @@ +60 156 +65 78 +70 102 +52 113 +64 154 +45 126 +45 86 +6 49 +7 93 +99 127 +15 33 +1 36 +12 30 +30 89 +41 84 +66 131 +8 23 +0 9 +95 149 +47 83 +69 165 +79 91 +74 125 +59 77 +93 137 +33 119 +24 113 +98 116 +10 70 +57 124 +97 126 +48 113 +30 67 +2 15 +56 86 +75 111 +81 82 +99 196 +69 105 +51 147 +5 69 +40 136 +79 147 +44 136 +95 194 +67 93 +0 46 +26 90 +58 115 +40 87 diff --git a/geom_bottleneck/tests/data/test_581_A b/geom_bottleneck/tests/data/test_581_A new file mode 100644 index 0000000..cf1555c --- /dev/null +++ b/geom_bottleneck/tests/data/test_581_A @@ -0,0 +1,50 @@ +79 87 +81 162 +7 74 +53 79 +19 50 +30 106 +68 155 +17 79 +75 90 +55 71 +30 127 +57 145 +78 80 +11 96 +16 47 +56 131 +45 46 +75 136 +17 75 +72 74 +27 114 +28 112 +31 123 +37 110 +89 159 +57 85 +49 52 +72 130 +68 86 +88 152 +5 66 +67 71 +51 91 +72 82 +3 21 +21 38 +47 86 +37 108 +35 123 +49 119 +36 97 +36 119 +9 48 +16 36 +32 37 +38 68 +82 147 +39 79 +23 101 +33 104 diff --git a/geom_bottleneck/tests/data/test_581_B b/geom_bottleneck/tests/data/test_581_B new file mode 100644 index 0000000..853ac92 --- /dev/null +++ b/geom_bottleneck/tests/data/test_581_B @@ -0,0 +1,50 @@ +94 181 +38 90 +83 137 +36 93 +8 53 +59 118 +21 110 +94 175 +18 40 +94 120 +46 81 +54 145 +13 37 +36 100 +73 86 +67 166 +91 187 +11 15 +45 124 +23 29 +89 125 +78 101 +83 98 +52 73 +39 62 +15 86 +80 140 +100 181 +50 55 +80 124 +27 29 +19 76 +92 167 +12 57 +63 134 +45 46 +42 110 +93 179 +31 130 +59 137 +7 99 +77 107 +59 127 +82 160 +27 70 +100 200 +80 101 +16 97 +93 184 +15 48 diff --git a/geom_bottleneck/tests/data/test_582_A b/geom_bottleneck/tests/data/test_582_A new file mode 100644 index 0000000..dcabc9f --- /dev/null +++ b/geom_bottleneck/tests/data/test_582_A @@ -0,0 +1,50 @@ +85 106 +23 89 +31 90 +4 42 +45 104 +100 137 +32 115 +65 112 +25 82 +75 158 +74 147 +6 106 +92 179 +91 110 +94 150 +9 19 +91 110 +82 108 +39 90 +49 69 +73 89 +61 68 +22 85 +13 57 +86 102 +23 43 +29 65 +3 72 +85 131 +71 80 +83 89 +73 119 +28 46 +33 101 +18 24 +38 69 +50 51 +84 85 +75 175 +99 153 +84 86 +97 100 +68 115 +91 108 +62 77 +54 80 +7 49 +26 29 +53 101 +64 73 diff --git a/geom_bottleneck/tests/data/test_582_B b/geom_bottleneck/tests/data/test_582_B new file mode 100644 index 0000000..9420fa9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_582_B @@ -0,0 +1,50 @@ +99 153 +54 92 +64 65 +40 117 +28 70 +33 105 +70 105 +72 109 +9 34 +72 151 +1 46 +57 133 +51 72 +52 119 +44 92 +13 71 +96 191 +80 123 +47 121 +84 162 +69 111 +15 35 +41 45 +23 86 +36 107 +6 18 +63 118 +4 50 +84 107 +90 132 +74 127 +14 37 +75 167 +42 81 +53 76 +32 88 +2 70 +87 129 +7 8 +6 35 +70 115 +69 137 +80 174 +24 107 +66 116 +22 110 +4 90 +0 41 +63 160 +99 142 diff --git a/geom_bottleneck/tests/data/test_583_A b/geom_bottleneck/tests/data/test_583_A new file mode 100644 index 0000000..cc36f56 --- /dev/null +++ b/geom_bottleneck/tests/data/test_583_A @@ -0,0 +1,50 @@ +99 127 +62 97 +4 61 +70 121 +74 149 +79 158 +98 193 +22 53 +66 89 +45 58 +49 80 +56 89 +48 124 +100 166 +76 143 +32 33 +15 59 +16 91 +32 33 +1 21 +73 169 +84 171 +49 69 +52 146 +10 57 +26 112 +54 76 +92 125 +47 49 +53 107 +2 69 +99 186 +67 79 +13 113 +54 73 +1 72 +4 20 +43 112 +0 89 +77 150 +31 61 +24 29 +75 169 +56 143 +88 133 +37 38 +90 160 +97 189 +39 72 +30 38 diff --git a/geom_bottleneck/tests/data/test_583_B b/geom_bottleneck/tests/data/test_583_B new file mode 100644 index 0000000..d021fb3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_583_B @@ -0,0 +1,50 @@ +26 43 +87 160 +74 100 +69 139 +72 87 +22 58 +0 3 +67 133 +52 56 +67 97 +42 117 +30 44 +67 119 +91 164 +45 65 +35 127 +80 91 +75 160 +11 68 +86 92 +24 79 +90 156 +91 94 +64 114 +55 66 +72 80 +36 78 +85 114 +27 69 +40 75 +65 152 +48 106 +72 105 +63 109 +37 108 +48 84 +81 147 +14 91 +46 94 +6 14 +28 100 +41 103 +21 92 +40 111 +42 106 +86 136 +97 113 +24 79 +77 99 +80 89 diff --git a/geom_bottleneck/tests/data/test_584_A b/geom_bottleneck/tests/data/test_584_A new file mode 100644 index 0000000..c934a50 --- /dev/null +++ b/geom_bottleneck/tests/data/test_584_A @@ -0,0 +1,50 @@ +15 100 +30 70 +46 69 +99 128 +25 93 +75 90 +6 31 +47 141 +51 99 +98 133 +50 69 +3 27 +16 91 +36 95 +29 73 +26 76 +24 45 +9 105 +21 103 +46 81 +91 156 +77 141 +36 72 +92 122 +48 98 +34 105 +80 172 +92 136 +16 81 +30 100 +13 111 +1 51 +1 52 +66 140 +81 96 +18 69 +37 123 +82 132 +64 114 +6 26 +46 70 +39 74 +20 108 +70 128 +43 86 +50 71 +73 98 +42 74 +52 79 +42 101 diff --git a/geom_bottleneck/tests/data/test_584_B b/geom_bottleneck/tests/data/test_584_B new file mode 100644 index 0000000..9f07efc --- /dev/null +++ b/geom_bottleneck/tests/data/test_584_B @@ -0,0 +1,50 @@ +99 143 +58 93 +32 121 +23 112 +64 102 +73 110 +76 128 +18 108 +17 97 +82 97 +40 138 +43 92 +18 33 +36 60 +2 27 +67 132 +45 79 +40 78 +90 97 +98 163 +16 86 +74 83 +98 154 +7 74 +3 41 +43 55 +69 123 +54 154 +96 143 +66 98 +26 52 +6 47 +45 84 +17 50 +32 78 +15 25 +46 133 +41 115 +54 144 +19 39 +71 150 +77 133 +42 90 +100 165 +73 113 +63 67 +19 106 +11 18 +11 73 +67 69 diff --git a/geom_bottleneck/tests/data/test_585_A b/geom_bottleneck/tests/data/test_585_A new file mode 100644 index 0000000..903e5b1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_585_A @@ -0,0 +1,50 @@ +50 147 +39 41 +59 153 +79 105 +90 122 +21 31 +34 51 +27 64 +77 125 +46 115 +92 164 +81 167 +91 182 +15 87 +39 115 +43 113 +29 115 +9 60 +81 95 +45 89 +36 101 +29 41 +68 132 +40 110 +33 92 +2 3 +27 113 +90 152 +35 109 +48 90 +63 160 +46 102 +61 146 +48 68 +23 98 +53 91 +80 101 +50 55 +78 163 +89 126 +62 145 +64 129 +18 31 +27 110 +58 91 +6 20 +84 103 +54 120 +87 162 +97 144 diff --git a/geom_bottleneck/tests/data/test_585_B b/geom_bottleneck/tests/data/test_585_B new file mode 100644 index 0000000..69f116a --- /dev/null +++ b/geom_bottleneck/tests/data/test_585_B @@ -0,0 +1,50 @@ +41 56 +85 176 +84 155 +25 40 +33 60 +84 92 +66 123 +63 66 +24 60 +4 51 +74 84 +13 70 +4 15 +86 102 +29 120 +62 70 +29 94 +11 20 +71 162 +87 165 +24 118 +65 93 +28 97 +54 151 +42 126 +55 86 +50 150 +5 35 +80 103 +94 158 +85 147 +73 95 +26 96 +67 151 +38 102 +42 72 +8 36 +78 165 +15 16 +35 67 +0 64 +35 70 +15 69 +75 96 +17 44 +42 66 +41 68 +80 88 +35 128 +34 113 diff --git a/geom_bottleneck/tests/data/test_586_A b/geom_bottleneck/tests/data/test_586_A new file mode 100644 index 0000000..ed8b673 --- /dev/null +++ b/geom_bottleneck/tests/data/test_586_A @@ -0,0 +1,50 @@ +62 74 +15 108 +49 131 +94 134 +5 6 +24 120 +35 79 +48 73 +84 170 +67 86 +30 98 +6 12 +60 107 +8 106 +6 57 +69 74 +24 120 +20 52 +78 147 +24 124 +76 87 +7 46 +20 115 +68 98 +51 87 +87 147 +83 93 +15 108 +70 103 +63 65 +70 90 +52 112 +54 107 +86 114 +58 137 +93 148 +43 120 +3 55 +20 97 +14 25 +59 111 +68 119 +78 165 +16 50 +3 5 +89 173 +84 181 +93 184 +89 185 +23 61 diff --git a/geom_bottleneck/tests/data/test_586_B b/geom_bottleneck/tests/data/test_586_B new file mode 100644 index 0000000..715be5e --- /dev/null +++ b/geom_bottleneck/tests/data/test_586_B @@ -0,0 +1,50 @@ +5 85 +46 116 +51 79 +20 36 +51 96 +83 170 +40 116 +40 128 +55 92 +51 127 +45 111 +56 65 +16 56 +30 52 +38 84 +56 70 +48 88 +0 6 +99 148 +64 159 +30 101 +14 51 +49 116 +66 71 +9 78 +4 35 +84 128 +39 58 +85 96 +54 60 +14 89 +2 46 +40 120 +76 117 +14 80 +47 118 +86 175 +35 126 +77 112 +75 150 +14 52 +90 169 +25 32 +73 95 +92 157 +5 34 +62 131 +16 26 +5 103 +73 106 diff --git a/geom_bottleneck/tests/data/test_587_A b/geom_bottleneck/tests/data/test_587_A new file mode 100644 index 0000000..883ddd7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_587_A @@ -0,0 +1,50 @@ +66 164 +74 81 +56 140 +77 143 +72 139 +77 113 +59 106 +37 42 +58 158 +46 52 +7 30 +73 107 +46 70 +35 120 +74 103 +71 117 +26 93 +11 68 +35 60 +91 151 +33 122 +30 106 +43 134 +90 131 +32 95 +8 72 +4 39 +17 115 +22 32 +28 100 +37 126 +84 152 +72 107 +68 157 +95 193 +93 191 +56 154 +39 42 +5 45 +62 121 +73 166 +14 51 +89 140 +76 166 +85 150 +18 112 +22 103 +65 147 +96 181 +55 123 diff --git a/geom_bottleneck/tests/data/test_587_B b/geom_bottleneck/tests/data/test_587_B new file mode 100644 index 0000000..589512c --- /dev/null +++ b/geom_bottleneck/tests/data/test_587_B @@ -0,0 +1,50 @@ +4 57 +12 64 +65 153 +73 111 +37 134 +11 54 +78 176 +33 77 +31 131 +14 101 +25 107 +83 112 +17 92 +59 139 +4 104 +82 114 +18 64 +13 72 +1 96 +72 112 +19 90 +23 34 +46 63 +45 79 +88 89 +16 105 +100 191 +31 46 +45 133 +86 119 +17 18 +59 140 +49 97 +31 47 +98 154 +70 99 +61 75 +31 34 +4 19 +46 122 +55 57 +81 171 +25 61 +18 89 +0 11 +48 79 +94 128 +73 122 +17 56 +19 39 diff --git a/geom_bottleneck/tests/data/test_588_A b/geom_bottleneck/tests/data/test_588_A new file mode 100644 index 0000000..c486b96 --- /dev/null +++ b/geom_bottleneck/tests/data/test_588_A @@ -0,0 +1,50 @@ +96 166 +5 58 +87 143 +50 104 +31 106 +80 106 +99 106 +46 52 +42 127 +10 86 +17 18 +20 94 +49 65 +10 75 +85 132 +13 54 +75 123 +8 13 +83 153 +25 47 +57 135 +14 57 +1 37 +29 34 +13 26 +52 94 +62 97 +93 153 +69 84 +87 88 +73 100 +54 97 +11 72 +51 143 +66 94 +85 178 +60 73 +36 126 +99 134 +23 68 +72 134 +81 138 +28 42 +65 84 +11 28 +15 38 +18 51 +79 149 +76 114 +33 53 diff --git a/geom_bottleneck/tests/data/test_588_B b/geom_bottleneck/tests/data/test_588_B new file mode 100644 index 0000000..13829bc --- /dev/null +++ b/geom_bottleneck/tests/data/test_588_B @@ -0,0 +1,50 @@ +87 173 +41 85 +10 87 +43 78 +99 128 +35 64 +28 66 +9 67 +100 194 +22 89 +0 15 +77 90 +59 60 +92 93 +32 84 +62 112 +54 151 +46 47 +52 94 +17 113 +21 100 +5 48 +87 114 +71 112 +2 67 +65 120 +26 74 +69 132 +47 83 +14 20 +5 13 +56 137 +57 79 +76 132 +30 31 +89 145 +84 130 +78 158 +44 76 +70 125 +95 127 +6 53 +17 110 +93 158 +61 94 +32 111 +20 113 +26 105 +63 112 +36 37 diff --git a/geom_bottleneck/tests/data/test_589_A b/geom_bottleneck/tests/data/test_589_A new file mode 100644 index 0000000..7743778 --- /dev/null +++ b/geom_bottleneck/tests/data/test_589_A @@ -0,0 +1,50 @@ +71 126 +62 78 +69 164 +34 56 +82 167 +61 138 +63 94 +17 27 +81 135 +94 145 +24 39 +93 134 +99 152 +38 91 +27 100 +21 115 +69 120 +8 42 +93 122 +87 155 +18 104 +0 2 +41 104 +63 159 +93 139 +74 167 +3 94 +68 92 +30 44 +24 101 +8 104 +8 61 +59 111 +53 91 +43 68 +52 143 +11 48 +74 152 +20 115 +27 100 +65 81 +63 67 +84 85 +16 30 +71 80 +58 116 +95 188 +96 106 +7 94 +38 45 diff --git a/geom_bottleneck/tests/data/test_589_B b/geom_bottleneck/tests/data/test_589_B new file mode 100644 index 0000000..bbd5038 --- /dev/null +++ b/geom_bottleneck/tests/data/test_589_B @@ -0,0 +1,50 @@ +28 114 +87 171 +0 35 +94 100 +98 147 +53 68 +64 95 +54 145 +45 76 +22 98 +83 155 +31 89 +27 79 +32 37 +28 58 +77 139 +87 143 +80 152 +25 28 +61 123 +0 4 +25 42 +64 159 +34 37 +84 153 +13 93 +25 69 +80 112 +89 163 +18 77 +35 119 +35 114 +39 60 +90 187 +0 33 +11 80 +52 140 +59 73 +92 168 +76 91 +49 88 +80 130 +37 104 +65 146 +14 56 +66 95 +87 182 +12 102 +78 135 +73 143 diff --git a/geom_bottleneck/tests/data/test_590_A b/geom_bottleneck/tests/data/test_590_A new file mode 100644 index 0000000..3dfb2df --- /dev/null +++ b/geom_bottleneck/tests/data/test_590_A @@ -0,0 +1,50 @@ +31 67 +88 180 +59 105 +31 117 +19 50 +43 59 +9 60 +4 58 +80 144 +47 71 +63 139 +14 68 +38 136 +8 52 +35 81 +56 116 +81 168 +56 99 +95 142 +24 121 +29 100 +88 174 +47 95 +40 93 +7 25 +3 84 +48 94 +90 128 +59 137 +96 164 +95 115 +69 105 +81 139 +59 65 +66 71 +53 84 +20 59 +29 61 +77 150 +48 138 +41 125 +53 86 +5 86 +42 69 +17 54 +70 105 +69 148 +18 58 +72 100 +67 77 diff --git a/geom_bottleneck/tests/data/test_590_B b/geom_bottleneck/tests/data/test_590_B new file mode 100644 index 0000000..18d6a7f --- /dev/null +++ b/geom_bottleneck/tests/data/test_590_B @@ -0,0 +1,50 @@ +79 84 +10 56 +10 18 +78 175 +50 74 +8 104 +77 116 +5 45 +48 116 +17 92 +72 159 +66 113 +51 140 +60 101 +76 120 +52 75 +3 71 +31 53 +75 156 +93 172 +4 93 +11 42 +89 167 +19 49 +62 119 +55 97 +39 68 +74 140 +64 97 +97 154 +30 98 +16 59 +18 68 +66 139 +9 44 +56 74 +61 82 +51 115 +45 51 +89 121 +71 134 +82 119 +13 113 +36 43 +21 121 +24 115 +37 65 +99 100 +36 135 +37 96 diff --git a/geom_bottleneck/tests/data/test_591_A b/geom_bottleneck/tests/data/test_591_A new file mode 100644 index 0000000..411c1bb --- /dev/null +++ b/geom_bottleneck/tests/data/test_591_A @@ -0,0 +1,50 @@ +13 93 +48 89 +12 53 +4 87 +91 181 +15 16 +29 59 +38 57 +8 29 +73 165 +29 44 +45 67 +24 74 +50 91 +88 162 +30 105 +80 134 +58 61 +69 135 +31 107 +0 15 +17 115 +72 74 +45 50 +75 115 +76 97 +61 89 +45 112 +59 97 +32 50 +85 88 +35 124 +95 112 +76 147 +69 84 +12 47 +100 154 +92 163 +4 55 +23 76 +85 100 +96 170 +28 87 +17 116 +44 57 +22 118 +51 134 +32 91 +8 14 +25 80 diff --git a/geom_bottleneck/tests/data/test_591_B b/geom_bottleneck/tests/data/test_591_B new file mode 100644 index 0000000..cc96d2f --- /dev/null +++ b/geom_bottleneck/tests/data/test_591_B @@ -0,0 +1,50 @@ +85 150 +85 96 +57 94 +13 112 +48 89 +7 17 +47 136 +96 173 +100 144 +12 76 +75 90 +51 116 +33 72 +21 65 +41 66 +80 104 +4 53 +71 72 +52 77 +93 94 +20 76 +29 101 +47 104 +33 87 +47 48 +73 161 +32 37 +4 74 +30 57 +56 109 +95 138 +76 135 +70 160 +59 136 +29 105 +75 169 +100 154 +67 139 +28 104 +89 121 +1 18 +7 47 +100 134 +3 4 +29 85 +79 129 +48 89 +97 191 +60 153 +100 199 diff --git a/geom_bottleneck/tests/data/test_592_A b/geom_bottleneck/tests/data/test_592_A new file mode 100644 index 0000000..bac0698 --- /dev/null +++ b/geom_bottleneck/tests/data/test_592_A @@ -0,0 +1,50 @@ +59 132 +83 149 +50 62 +45 103 +28 32 +74 163 +78 151 +19 85 +26 113 +42 136 +87 123 +49 108 +7 69 +45 84 +96 153 +50 112 +3 72 +91 136 +16 79 +56 105 +92 170 +92 177 +15 57 +13 104 +90 112 +16 87 +99 154 +91 174 +49 76 +39 137 +38 59 +25 33 +88 113 +85 136 +38 67 +44 73 +75 166 +60 131 +56 155 +86 105 +69 75 +54 108 +8 79 +68 103 +56 133 +29 91 +57 77 +42 109 +97 170 +89 92 diff --git a/geom_bottleneck/tests/data/test_592_B b/geom_bottleneck/tests/data/test_592_B new file mode 100644 index 0000000..bc8a8c6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_592_B @@ -0,0 +1,50 @@ +73 140 +34 69 +82 101 +44 70 +26 87 +76 151 +18 43 +14 83 +35 126 +31 86 +59 125 +89 160 +33 38 +38 79 +54 77 +51 91 +75 87 +4 94 +2 23 +75 152 +1 8 +65 100 +60 80 +62 96 +40 116 +0 66 +10 99 +21 48 +98 161 +0 35 +18 25 +61 68 +58 152 +97 161 +43 99 +25 35 +55 59 +78 151 +6 94 +17 60 +98 142 +81 119 +2 29 +0 95 +55 141 +29 99 +14 44 +32 68 +31 107 +26 74 diff --git a/geom_bottleneck/tests/data/test_593_A b/geom_bottleneck/tests/data/test_593_A new file mode 100644 index 0000000..e62ec21 --- /dev/null +++ b/geom_bottleneck/tests/data/test_593_A @@ -0,0 +1,50 @@ +15 96 +50 89 +53 59 +42 45 +76 150 +24 110 +27 126 +26 79 +93 132 +65 100 +38 134 +14 68 +88 130 +92 120 +36 122 +24 77 +11 102 +56 91 +12 77 +89 131 +57 137 +86 173 +38 66 +7 27 +49 134 +38 81 +100 122 +85 98 +96 147 +25 80 +49 88 +32 127 +42 122 +3 11 +25 59 +11 31 +82 151 +97 187 +55 99 +11 71 +14 28 +80 105 +4 74 +89 113 +99 127 +40 75 +86 121 +44 52 +74 123 +51 105 diff --git a/geom_bottleneck/tests/data/test_593_B b/geom_bottleneck/tests/data/test_593_B new file mode 100644 index 0000000..a5150da --- /dev/null +++ b/geom_bottleneck/tests/data/test_593_B @@ -0,0 +1,50 @@ +70 127 +81 175 +6 42 +67 74 +18 95 +32 33 +98 188 +25 67 +99 170 +60 119 +35 79 +20 42 +28 64 +92 129 +26 110 +95 123 +37 130 +25 97 +44 136 +30 78 +42 72 +52 139 +80 177 +44 143 +79 122 +100 198 +74 90 +15 73 +48 63 +66 146 +77 168 +28 66 +72 103 +23 77 +84 133 +37 127 +70 139 +85 129 +13 32 +57 151 +26 83 +7 45 +14 16 +23 70 +94 117 +71 148 +9 89 +20 109 +64 85 +27 106 diff --git a/geom_bottleneck/tests/data/test_594_A b/geom_bottleneck/tests/data/test_594_A new file mode 100644 index 0000000..ca81d4c --- /dev/null +++ b/geom_bottleneck/tests/data/test_594_A @@ -0,0 +1,50 @@ +49 127 +45 58 +50 143 +52 55 +32 102 +79 154 +36 134 +61 161 +41 134 +31 71 +51 86 +88 135 +68 93 +30 68 +8 80 +3 68 +36 101 +15 73 +51 132 +95 180 +27 43 +28 56 +58 73 +32 108 +85 179 +11 17 +65 159 +6 40 +27 53 +72 151 +66 114 +17 56 +84 95 +35 80 +85 110 +97 167 +74 84 +96 134 +76 117 +61 99 +20 91 +89 114 +1 32 +0 29 +71 138 +53 123 +78 96 +57 138 +7 89 +92 105 diff --git a/geom_bottleneck/tests/data/test_594_B b/geom_bottleneck/tests/data/test_594_B new file mode 100644 index 0000000..d366e85 --- /dev/null +++ b/geom_bottleneck/tests/data/test_594_B @@ -0,0 +1,50 @@ +46 86 +23 69 +40 50 +66 89 +63 123 +23 108 +61 79 +59 144 +60 156 +49 88 +60 92 +65 101 +56 64 +3 53 +84 141 +39 79 +36 101 +8 82 +61 138 +29 78 +14 108 +29 122 +93 124 +53 95 +70 89 +10 102 +10 104 +23 27 +6 53 +8 41 +86 164 +8 41 +51 120 +27 63 +33 60 +62 99 +56 119 +58 84 +39 118 +25 86 +6 67 +50 56 +91 173 +71 121 +28 51 +88 142 +90 186 +69 149 +87 102 +60 129 diff --git a/geom_bottleneck/tests/data/test_595_A b/geom_bottleneck/tests/data/test_595_A new file mode 100644 index 0000000..805de28 --- /dev/null +++ b/geom_bottleneck/tests/data/test_595_A @@ -0,0 +1,50 @@ +39 91 +72 162 +80 123 +46 113 +51 65 +80 149 +72 132 +27 124 +17 111 +17 71 +86 120 +82 102 +71 117 +33 86 +15 84 +76 146 +69 102 +97 153 +91 185 +5 53 +61 95 +85 107 +92 101 +80 113 +12 63 +62 111 +29 109 +33 77 +91 134 +49 138 +30 57 +70 106 +98 110 +87 168 +76 140 +20 109 +58 71 +56 99 +49 117 +60 118 +63 149 +9 92 +14 94 +12 52 +21 37 +37 91 +65 107 +98 101 +71 131 +54 108 diff --git a/geom_bottleneck/tests/data/test_595_B b/geom_bottleneck/tests/data/test_595_B new file mode 100644 index 0000000..c458a54 --- /dev/null +++ b/geom_bottleneck/tests/data/test_595_B @@ -0,0 +1,50 @@ +92 101 +74 76 +47 115 +99 119 +19 44 +57 156 +21 59 +12 86 +92 168 +73 148 +92 164 +47 130 +32 96 +22 116 +58 99 +85 169 +66 147 +31 117 +17 107 +83 158 +10 54 +95 129 +88 158 +72 78 +98 125 +99 170 +22 79 +10 16 +2 31 +52 62 +16 40 +31 103 +38 100 +32 82 +71 133 +55 135 +74 158 +13 45 +6 12 +13 43 +44 57 +25 51 +88 112 +35 66 +31 83 +28 59 +44 103 +40 131 +100 124 +21 107 diff --git a/geom_bottleneck/tests/data/test_596_A b/geom_bottleneck/tests/data/test_596_A new file mode 100644 index 0000000..3a32cf7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_596_A @@ -0,0 +1,50 @@ +95 140 +26 108 +52 84 +39 95 +18 48 +29 105 +64 114 +75 103 +59 80 +11 95 +41 52 +43 123 +51 77 +31 54 +64 130 +23 79 +82 102 +53 94 +13 14 +19 74 +74 109 +71 140 +93 94 +76 82 +43 48 +46 70 +53 121 +35 68 +30 32 +13 53 +28 60 +51 111 +64 142 +84 153 +15 79 +89 140 +39 136 +15 37 +35 115 +15 105 +16 62 +3 77 +93 107 +88 104 +56 113 +59 142 +11 52 +22 64 +66 138 +32 75 diff --git a/geom_bottleneck/tests/data/test_596_B b/geom_bottleneck/tests/data/test_596_B new file mode 100644 index 0000000..1b9c765 --- /dev/null +++ b/geom_bottleneck/tests/data/test_596_B @@ -0,0 +1,50 @@ +73 154 +65 99 +56 77 +56 70 +67 75 +4 26 +31 64 +89 106 +73 91 +31 43 +98 185 +50 138 +79 131 +47 73 +16 55 +35 98 +24 100 +67 72 +44 95 +66 101 +40 91 +53 90 +6 67 +57 67 +15 111 +2 43 +3 18 +35 116 +44 138 +46 85 +31 41 +16 17 +61 96 +90 100 +45 129 +97 172 +38 70 +47 136 +26 56 +0 95 +100 155 +48 110 +4 60 +16 29 +74 103 +63 113 +93 98 +73 94 +15 86 +40 86 diff --git a/geom_bottleneck/tests/data/test_597_A b/geom_bottleneck/tests/data/test_597_A new file mode 100644 index 0000000..984cc9f --- /dev/null +++ b/geom_bottleneck/tests/data/test_597_A @@ -0,0 +1,50 @@ +75 141 +50 130 +82 143 +98 128 +15 107 +9 22 +27 64 +2 51 +14 42 +15 27 +39 110 +50 95 +62 91 +80 85 +89 92 +56 78 +94 114 +68 130 +80 93 +12 25 +86 88 +33 73 +38 79 +28 100 +65 139 +22 59 +70 169 +45 118 +77 87 +46 49 +87 122 +50 109 +6 101 +8 21 +0 32 +16 81 +89 167 +83 85 +91 185 +85 120 +87 128 +20 58 +76 112 +13 60 +8 15 +93 172 +12 92 +51 132 +92 140 +83 167 diff --git a/geom_bottleneck/tests/data/test_597_B b/geom_bottleneck/tests/data/test_597_B new file mode 100644 index 0000000..d84920c --- /dev/null +++ b/geom_bottleneck/tests/data/test_597_B @@ -0,0 +1,50 @@ +89 118 +56 104 +78 101 +56 103 +13 94 +98 186 +99 137 +58 90 +61 154 +0 12 +7 23 +77 158 +66 157 +70 91 +10 38 +14 23 +21 92 +89 189 +84 105 +79 130 +17 27 +93 102 +62 82 +60 84 +18 28 +49 143 +70 157 +54 119 +32 124 +17 89 +1 49 +4 53 +76 109 +61 113 +71 90 +4 95 +78 125 +21 110 +2 72 +26 106 +35 55 +76 90 +80 127 +80 137 +30 63 +12 81 +48 93 +27 123 +24 57 +56 120 diff --git a/geom_bottleneck/tests/data/test_598_A b/geom_bottleneck/tests/data/test_598_A new file mode 100644 index 0000000..4c4fa46 --- /dev/null +++ b/geom_bottleneck/tests/data/test_598_A @@ -0,0 +1,50 @@ +62 152 +79 161 +64 158 +93 154 +51 99 +69 113 +21 62 +66 156 +48 137 +66 121 +78 165 +56 107 +87 141 +87 159 +42 50 +61 72 +31 61 +26 125 +33 118 +32 88 +98 110 +75 103 +67 130 +94 192 +97 153 +3 4 +48 136 +56 57 +43 53 +29 113 +82 110 +90 103 +54 93 +53 106 +75 143 +32 44 +85 147 +50 72 +22 71 +49 96 +49 132 +32 113 +24 58 +58 142 +60 106 +100 163 +45 123 +27 31 +41 76 +14 40 diff --git a/geom_bottleneck/tests/data/test_598_B b/geom_bottleneck/tests/data/test_598_B new file mode 100644 index 0000000..974d069 --- /dev/null +++ b/geom_bottleneck/tests/data/test_598_B @@ -0,0 +1,50 @@ +8 45 +47 75 +81 128 +60 100 +13 40 +47 96 +97 169 +28 93 +36 92 +80 175 +41 121 +24 55 +94 100 +69 82 +53 97 +64 119 +53 151 +30 51 +11 82 +77 118 +66 113 +54 92 +23 100 +79 82 +44 122 +93 185 +75 169 +98 99 +69 163 +28 100 +66 70 +69 98 +80 99 +23 79 +100 134 +67 126 +57 138 +79 116 +25 44 +48 142 +26 123 +14 51 +93 151 +68 71 +6 27 +4 64 +63 128 +88 166 +59 70 +19 80 diff --git a/geom_bottleneck/tests/data/test_599_A b/geom_bottleneck/tests/data/test_599_A new file mode 100644 index 0000000..984a0ed --- /dev/null +++ b/geom_bottleneck/tests/data/test_599_A @@ -0,0 +1,50 @@ +6 64 +55 70 +74 171 +88 144 +91 170 +61 75 +1 42 +69 72 +99 112 +100 113 +97 165 +78 83 +12 90 +19 103 +91 134 +78 121 +31 75 +57 139 +2 15 +84 129 +73 139 +24 71 +56 135 +17 117 +26 66 +46 110 +21 97 +24 111 +100 177 +59 132 +13 14 +12 73 +4 51 +49 89 +27 82 +23 107 +84 112 +8 52 +96 172 +97 133 +40 80 +21 32 +65 149 +61 125 +92 133 +89 119 +28 37 +46 106 +95 190 +78 91 diff --git a/geom_bottleneck/tests/data/test_599_B b/geom_bottleneck/tests/data/test_599_B new file mode 100644 index 0000000..aaea2a7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_599_B @@ -0,0 +1,50 @@ +83 144 +54 114 +6 83 +53 109 +60 159 +33 90 +72 83 +3 5 +72 170 +60 116 +75 172 +19 107 +11 36 +36 109 +25 59 +22 100 +30 127 +57 119 +28 87 +81 144 +10 53 +2 27 +71 117 +60 84 +95 99 +77 81 +56 67 +67 85 +32 42 +28 45 +81 148 +6 33 +60 146 +83 86 +30 48 +89 105 +26 53 +65 89 +41 94 +47 84 +88 130 +51 95 +65 74 +98 107 +99 180 +80 107 +89 94 +25 36 +83 106 +24 112 diff --git a/geom_bottleneck/tests/data/test_600_A b/geom_bottleneck/tests/data/test_600_A new file mode 100644 index 0000000..13c5659 --- /dev/null +++ b/geom_bottleneck/tests/data/test_600_A @@ -0,0 +1,100 @@ +77 125 +40 107 +52 73 +65 77 +96 158 +26 106 +61 138 +1 10 +56 151 +91 161 +1 20 +100 172 +69 152 +26 57 +33 96 +21 98 +2 24 +54 115 +35 116 +17 31 +21 50 +36 93 +61 74 +98 122 +96 151 +90 168 +49 69 +23 24 +2 67 +28 123 +95 181 +60 81 +33 96 +25 103 +44 114 +84 128 +1 45 +90 154 +34 83 +57 149 +49 109 +57 121 +47 74 +57 77 +37 132 +44 48 +61 98 +37 60 +66 84 +71 73 +30 121 +50 150 +44 99 +86 179 +99 137 +53 125 +85 136 +56 126 +99 163 +43 132 +1 66 +90 132 +27 40 +2 10 +65 115 +39 68 +17 89 +90 153 +22 102 +28 78 +56 101 +89 184 +88 125 +83 85 +75 144 +26 89 +56 108 +83 173 +90 106 +7 72 +97 173 +94 131 +31 104 +95 148 +100 102 +37 82 +86 128 +29 56 +54 109 +81 157 +82 126 +62 71 +33 116 +86 126 +20 103 +34 131 +93 107 +26 104 +31 91 +23 115 diff --git a/geom_bottleneck/tests/data/test_600_B b/geom_bottleneck/tests/data/test_600_B new file mode 100644 index 0000000..5de1dfa --- /dev/null +++ b/geom_bottleneck/tests/data/test_600_B @@ -0,0 +1,100 @@ +99 168 +39 113 +73 109 +91 101 +67 144 +17 57 +3 59 +81 155 +100 159 +48 110 +98 128 +73 167 +55 135 +42 140 +84 129 +18 97 +92 103 +33 86 +68 84 +83 111 +72 111 +97 179 +8 58 +6 80 +21 99 +81 124 +37 85 +19 48 +11 14 +53 122 +16 74 +75 113 +47 74 +87 166 +45 69 +51 68 +74 122 +10 47 +50 90 +66 114 +24 115 +40 65 +74 136 +72 146 +24 114 +48 91 +56 68 +78 102 +30 64 +75 159 +16 101 +58 150 +69 126 +80 136 +6 96 +53 121 +15 115 +76 81 +36 59 +63 68 +85 142 +7 50 +20 83 +9 40 +98 163 +70 165 +88 177 +85 149 +0 17 +30 124 +40 113 +35 91 +66 117 +94 108 +11 106 +78 88 +42 107 +60 121 +55 119 +78 110 +0 76 +63 130 +10 105 +23 68 +13 81 +60 142 +3 81 +53 90 +26 99 +95 165 +52 126 +41 70 +6 29 +14 103 +88 170 +79 102 +9 98 +27 124 +12 60 +59 145 diff --git a/geom_bottleneck/tests/data/test_601_A b/geom_bottleneck/tests/data/test_601_A new file mode 100644 index 0000000..9f57dd0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_601_A @@ -0,0 +1,100 @@ +49 135 +27 47 +45 83 +13 49 +15 80 +78 84 +54 128 +20 24 +75 121 +52 90 +15 64 +19 101 +35 80 +35 69 +49 122 +21 49 +51 75 +41 95 +91 162 +26 101 +54 104 +65 164 +74 100 +6 51 +58 68 +99 148 +55 87 +35 51 +51 77 +22 117 +78 141 +80 135 +66 145 +80 145 +68 112 +35 97 +63 91 +10 62 +1 73 +40 106 +76 77 +8 93 +94 136 +57 157 +16 43 +46 92 +49 77 +44 49 +51 120 +68 133 +41 73 +72 109 +42 59 +11 13 +19 86 +24 49 +11 105 +93 113 +81 160 +5 99 +78 159 +37 97 +68 120 +54 111 +41 49 +33 123 +27 35 +71 101 +55 70 +99 183 +68 121 +62 92 +47 53 +4 6 +56 110 +96 113 +85 122 +85 92 +31 97 +1 62 +25 67 +30 39 +16 23 +97 148 +21 22 +21 46 +85 134 +19 23 +12 56 +16 40 +59 138 +9 63 +31 46 +88 161 +72 74 +28 45 +57 95 +90 164 +89 106 +49 134 diff --git a/geom_bottleneck/tests/data/test_601_B b/geom_bottleneck/tests/data/test_601_B new file mode 100644 index 0000000..64d7ef8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_601_B @@ -0,0 +1,100 @@ +45 101 +84 90 +70 98 +64 109 +100 111 +82 87 +26 54 +18 90 +84 133 +92 145 +68 139 +90 154 +85 104 +34 76 +30 79 +21 99 +2 85 +20 75 +12 57 +62 102 +69 148 +18 116 +28 97 +52 88 +40 68 +21 26 +66 73 +8 68 +31 130 +83 174 +89 156 +38 43 +62 153 +4 34 +85 123 +51 99 +39 119 +99 149 +19 81 +51 79 +51 136 +25 52 +63 80 +91 166 +62 126 +86 102 +16 39 +0 66 +26 107 +55 89 +72 100 +73 106 +82 129 +77 112 +44 81 +94 118 +57 136 +1 13 +43 52 +24 112 +39 129 +28 97 +41 105 +59 150 +21 84 +38 92 +39 91 +25 36 +52 125 +56 119 +99 171 +51 142 +6 34 +44 77 +100 170 +23 43 +76 138 +67 77 +26 116 +18 49 +25 92 +42 138 +22 41 +48 112 +81 89 +51 67 +64 90 +51 94 +75 147 +49 96 +47 102 +31 114 +7 92 +48 81 +40 41 +84 117 +34 118 +9 27 +86 145 +56 69 diff --git a/geom_bottleneck/tests/data/test_602_A b/geom_bottleneck/tests/data/test_602_A new file mode 100644 index 0000000..df83de7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_602_A @@ -0,0 +1,100 @@ +8 77 +68 127 +23 104 +15 96 +58 68 +5 77 +70 105 +13 49 +60 133 +31 122 +74 75 +80 132 +72 107 +44 52 +31 124 +32 36 +62 146 +51 98 +31 118 +45 107 +53 85 +76 152 +67 161 +51 92 +10 23 +89 183 +73 117 +47 112 +42 97 +68 101 +82 86 +32 61 +39 134 +9 109 +31 83 +95 137 +82 155 +34 39 +5 6 +24 108 +94 150 +22 68 +95 172 +12 92 +59 107 +31 59 +0 40 +53 64 +32 73 +69 134 +21 63 +13 107 +10 82 +3 94 +85 147 +51 127 +91 169 +17 87 +80 137 +90 178 +89 185 +56 103 +13 18 +83 84 +34 77 +50 148 +1 10 +80 141 +92 191 +9 21 +85 172 +11 50 +98 134 +12 99 +81 137 +66 90 +32 109 +22 73 +39 130 +38 52 +24 68 +71 113 +84 90 +79 102 +92 192 +47 105 +70 132 +4 45 +57 123 +60 125 +48 56 +19 110 +40 130 +36 114 +55 92 +1 66 +77 131 +96 172 +34 85 +79 102 diff --git a/geom_bottleneck/tests/data/test_602_B b/geom_bottleneck/tests/data/test_602_B new file mode 100644 index 0000000..fb19e1c --- /dev/null +++ b/geom_bottleneck/tests/data/test_602_B @@ -0,0 +1,100 @@ +4 97 +46 76 +86 104 +38 75 +73 124 +7 52 +42 105 +72 132 +14 114 +38 136 +77 91 +72 92 +36 64 +53 121 +57 62 +20 49 +55 78 +82 151 +9 95 +6 20 +10 51 +50 110 +38 100 +69 150 +80 102 +78 93 +94 157 +7 55 +39 121 +80 136 +24 49 +33 95 +99 150 +55 119 +97 188 +73 82 +26 42 +84 92 +5 103 +88 167 +7 54 +35 74 +68 141 +31 56 +98 182 +38 116 +0 63 +29 39 +19 62 +41 91 +50 81 +37 106 +22 65 +19 113 +55 125 +59 79 +29 75 +6 48 +12 101 +37 102 +48 126 +34 71 +63 90 +87 139 +97 147 +86 143 +22 69 +7 17 +9 93 +82 109 +12 55 +88 126 +97 102 +6 70 +6 21 +39 105 +4 103 +46 139 +38 111 +44 45 +17 31 +79 150 +83 96 +97 101 +66 152 +15 84 +82 99 +2 102 +62 123 +8 101 +32 92 +76 158 +20 26 +20 106 +17 75 +70 89 +13 22 +57 87 +6 27 +16 25 diff --git a/geom_bottleneck/tests/data/test_603_A b/geom_bottleneck/tests/data/test_603_A new file mode 100644 index 0000000..a81f6cb --- /dev/null +++ b/geom_bottleneck/tests/data/test_603_A @@ -0,0 +1,100 @@ +59 86 +86 166 +73 114 +3 10 +36 59 +0 33 +24 25 +51 70 +83 129 +7 60 +47 58 +20 97 +30 96 +61 161 +83 143 +83 127 +100 188 +6 28 +18 44 +53 54 +58 94 +53 97 +36 86 +83 133 +37 83 +79 125 +19 104 +67 156 +6 99 +44 128 +37 64 +35 92 +36 126 +55 155 +16 48 +37 108 +72 119 +96 111 +10 83 +96 143 +31 65 +41 138 +94 148 +41 74 +6 92 +53 133 +98 113 +2 71 +15 52 +28 54 +46 58 +81 109 +24 85 +60 159 +61 68 +46 96 +45 138 +99 117 +82 145 +69 121 +15 53 +74 174 +51 114 +100 145 +26 82 +32 115 +72 169 +48 144 +75 172 +65 114 +49 74 +45 119 +31 122 +59 146 +62 67 +43 46 +6 69 +23 25 +76 176 +68 164 +36 113 +26 106 +46 134 +71 151 +59 121 +10 99 +71 167 +82 162 +62 79 +97 127 +68 115 +46 90 +83 156 +12 39 +61 87 +90 187 +0 84 +44 85 +41 93 +98 187 diff --git a/geom_bottleneck/tests/data/test_603_B b/geom_bottleneck/tests/data/test_603_B new file mode 100644 index 0000000..0ea6eda --- /dev/null +++ b/geom_bottleneck/tests/data/test_603_B @@ -0,0 +1,100 @@ +67 101 +34 55 +8 100 +52 112 +78 120 +15 71 +17 58 +83 109 +41 137 +41 107 +26 125 +87 111 +82 141 +77 78 +24 50 +49 78 +79 88 +91 110 +75 78 +84 91 +100 199 +34 70 +66 154 +23 34 +46 73 +43 94 +23 65 +89 175 +44 46 +13 24 +8 95 +94 162 +13 27 +74 102 +80 156 +77 124 +44 100 +13 52 +32 43 +23 38 +87 162 +24 52 +67 103 +97 146 +79 94 +21 100 +97 186 +38 39 +67 123 +99 197 +29 46 +52 139 +1 80 +5 34 +67 86 +49 122 +45 50 +64 80 +73 154 +85 164 +23 42 +93 123 +54 123 +63 64 +84 162 +86 103 +47 117 +32 112 +60 152 +96 111 +79 97 +86 130 +0 98 +65 161 +55 83 +73 139 +82 133 +9 108 +24 123 +92 132 +87 91 +23 40 +55 116 +91 176 +49 100 +25 58 +4 65 +28 39 +3 74 +22 37 +34 128 +98 154 +32 122 +9 84 +53 79 +47 61 +76 82 +11 34 +65 128 +28 82 diff --git a/geom_bottleneck/tests/data/test_604_A b/geom_bottleneck/tests/data/test_604_A new file mode 100644 index 0000000..11a7c84 --- /dev/null +++ b/geom_bottleneck/tests/data/test_604_A @@ -0,0 +1,100 @@ +90 168 +97 169 +3 20 +65 71 +61 105 +6 56 +50 122 +9 12 +15 51 +73 121 +54 118 +27 121 +97 135 +38 100 +35 69 +40 57 +64 159 +37 125 +79 116 +11 54 +66 72 +76 162 +69 154 +35 77 +91 177 +77 111 +67 145 +59 100 +94 130 +75 135 +53 106 +43 106 +100 130 +81 159 +14 107 +52 91 +47 136 +83 133 +16 63 +11 98 +4 6 +98 120 +98 117 +69 90 +24 108 +74 138 +100 105 +9 16 +55 81 +86 154 +6 99 +82 85 +86 176 +57 79 +83 136 +70 135 +30 85 +73 126 +73 164 +20 89 +42 93 +97 150 +6 69 +26 66 +43 129 +84 117 +75 132 +68 98 +29 111 +57 140 +15 107 +75 141 +97 180 +47 130 +31 72 +56 150 +30 75 +86 106 +49 50 +16 38 +40 68 +99 176 +10 56 +89 128 +97 124 +35 134 +82 137 +34 97 +34 40 +34 43 +71 149 +33 113 +6 80 +69 160 +54 148 +88 131 +98 141 +91 112 +25 106 +68 149 diff --git a/geom_bottleneck/tests/data/test_604_B b/geom_bottleneck/tests/data/test_604_B new file mode 100644 index 0000000..6e14339 --- /dev/null +++ b/geom_bottleneck/tests/data/test_604_B @@ -0,0 +1,100 @@ +4 69 +24 43 +68 72 +33 77 +96 106 +48 134 +18 38 +1 28 +12 112 +70 76 +6 16 +19 65 +35 49 +91 95 +50 147 +94 174 +87 124 +27 29 +17 116 +50 120 +83 183 +60 129 +92 120 +67 125 +60 73 +17 60 +10 12 +65 158 +19 100 +44 92 +86 139 +98 184 +67 100 +28 115 +16 94 +36 94 +40 99 +20 115 +94 149 +80 135 +47 109 +39 53 +62 159 +25 78 +30 118 +71 89 +86 166 +85 159 +58 120 +45 64 +73 156 +66 107 +31 88 +53 88 +67 167 +49 144 +60 71 +69 151 +44 111 +43 93 +95 102 +78 150 +98 120 +22 92 +70 76 +1 98 +25 44 +93 166 +16 100 +94 134 +37 99 +4 70 +32 47 +61 136 +30 95 +99 133 +91 163 +32 112 +78 91 +55 62 +16 33 +13 48 +45 75 +96 155 +20 82 +39 57 +22 51 +7 31 +73 90 +49 55 +32 65 +16 22 +33 71 +80 97 +85 154 +100 172 +86 114 +98 191 +2 7 +35 113 diff --git a/geom_bottleneck/tests/data/test_605_A b/geom_bottleneck/tests/data/test_605_A new file mode 100644 index 0000000..522dbf9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_605_A @@ -0,0 +1,100 @@ +59 77 +22 53 +70 99 +32 126 +63 100 +72 89 +93 150 +70 83 +35 53 +96 128 +55 151 +30 96 +6 85 +80 131 +76 80 +36 79 +50 72 +70 134 +20 77 +27 33 +35 37 +44 55 +91 165 +68 132 +52 141 +81 142 +43 106 +46 55 +55 100 +21 86 +100 130 +97 173 +56 142 +26 36 +54 68 +17 23 +57 124 +65 122 +11 30 +70 96 +46 47 +52 114 +65 104 +24 39 +2 102 +91 181 +66 107 +27 120 +24 38 +33 94 +87 166 +35 78 +38 92 +56 125 +15 50 +95 129 +85 174 +53 126 +76 171 +71 154 +67 86 +61 133 +99 183 +92 102 +83 103 +80 174 +63 109 +37 60 +12 78 +30 56 +19 117 +33 99 +3 94 +18 52 +44 133 +53 55 +37 95 +43 92 +64 127 +12 79 +65 129 +48 92 +92 136 +25 64 +83 91 +22 91 +66 96 +33 37 +8 45 +4 5 +21 107 +72 171 +6 14 +75 124 +79 140 +52 114 +61 62 +89 151 +98 102 +4 46 diff --git a/geom_bottleneck/tests/data/test_605_B b/geom_bottleneck/tests/data/test_605_B new file mode 100644 index 0000000..34f19db --- /dev/null +++ b/geom_bottleneck/tests/data/test_605_B @@ -0,0 +1,100 @@ +17 96 +1 57 +57 149 +10 24 +76 155 +3 81 +66 101 +79 85 +17 91 +78 105 +78 155 +91 167 +63 84 +41 45 +12 50 +49 107 +13 31 +93 175 +93 105 +33 46 +70 121 +36 57 +43 103 +44 99 +54 91 +25 65 +26 27 +64 119 +94 161 +29 115 +0 14 +81 152 +15 83 +4 50 +56 132 +27 50 +42 61 +28 39 +2 38 +55 87 +52 91 +70 160 +57 94 +32 41 +52 142 +28 37 +81 92 +89 91 +79 127 +94 179 +45 128 +92 120 +61 124 +61 143 +12 31 +2 36 +42 48 +25 55 +89 184 +56 57 +90 154 +55 94 +70 104 +35 135 +10 39 +45 63 +72 102 +0 12 +45 71 +84 126 +89 146 +52 100 +14 93 +16 42 +89 186 +50 77 +64 75 +29 52 +14 81 +55 73 +69 105 +47 144 +70 102 +59 76 +81 94 +63 163 +19 55 +70 146 +58 118 +56 96 +74 93 +24 30 +100 190 +80 115 +88 172 +0 31 +83 124 +53 153 +68 70 +73 108 diff --git a/geom_bottleneck/tests/data/test_606_A b/geom_bottleneck/tests/data/test_606_A new file mode 100644 index 0000000..2f4dec4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_606_A @@ -0,0 +1,100 @@ +49 104 +89 185 +56 72 +44 117 +27 73 +64 87 +30 44 +89 150 +73 105 +80 156 +48 145 +36 87 +62 122 +85 97 +51 144 +48 137 +61 132 +47 66 +78 134 +17 101 +66 119 +74 82 +96 99 +56 57 +66 109 +13 103 +6 40 +55 78 +77 130 +92 133 +65 74 +8 9 +29 123 +6 61 +41 138 +21 98 +85 107 +99 108 +79 95 +93 161 +9 20 +58 150 +33 93 +2 48 +38 40 +83 153 +33 92 +94 155 +44 96 +17 102 +68 99 +32 69 +73 126 +5 43 +86 181 +2 38 +65 163 +86 164 +49 132 +41 86 +96 186 +87 145 +12 81 +11 73 +77 87 +22 116 +14 21 +56 82 +61 120 +2 24 +67 71 +33 93 +89 132 +14 102 +12 29 +7 38 +12 88 +76 123 +46 75 +79 99 +49 74 +27 35 +8 47 +33 84 +79 171 +72 83 +79 106 +96 152 +86 164 +100 128 +7 97 +70 128 +89 156 +15 17 +86 126 +65 110 +53 80 +51 81 +36 85 +50 82 diff --git a/geom_bottleneck/tests/data/test_606_B b/geom_bottleneck/tests/data/test_606_B new file mode 100644 index 0000000..62417b1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_606_B @@ -0,0 +1,100 @@ +35 135 +1 41 +63 72 +43 98 +37 71 +24 87 +14 105 +66 67 +12 79 +60 145 +20 72 +0 70 +67 149 +22 30 +86 151 +20 106 +38 74 +58 133 +40 103 +34 111 +81 126 +55 74 +49 133 +44 128 +54 86 +15 82 +84 89 +87 121 +95 135 +53 104 +91 157 +7 101 +45 124 +87 162 +73 164 +60 123 +77 81 +69 78 +44 118 +0 79 +66 106 +67 85 +85 168 +93 122 +0 42 +10 66 +9 23 +29 80 +46 76 +75 126 +2 32 +99 143 +24 90 +31 120 +73 98 +42 57 +67 86 +44 99 +65 135 +100 167 +33 43 +10 29 +36 63 +79 178 +82 85 +35 49 +24 57 +66 142 +2 29 +73 149 +16 76 +27 53 +86 88 +36 75 +54 56 +11 82 +87 183 +33 72 +84 94 +96 108 +13 63 +34 98 +76 173 +57 114 +63 149 +74 131 +20 21 +48 100 +92 98 +3 41 +66 138 +90 130 +62 152 +26 101 +28 102 +41 139 +85 167 +68 84 +64 74 +64 136 diff --git a/geom_bottleneck/tests/data/test_607_A b/geom_bottleneck/tests/data/test_607_A new file mode 100644 index 0000000..abc3b6b --- /dev/null +++ b/geom_bottleneck/tests/data/test_607_A @@ -0,0 +1,100 @@ +82 154 +80 107 +94 156 +55 58 +84 183 +82 128 +35 97 +32 105 +12 104 +17 57 +54 67 +59 103 +22 106 +50 122 +31 93 +33 123 +9 105 +78 140 +15 101 +67 117 +34 119 +96 123 +71 169 +91 93 +99 119 +85 169 +59 69 +85 169 +32 76 +62 134 +21 77 +79 141 +5 63 +9 72 +21 41 +2 95 +16 92 +22 54 +44 58 +1 24 +26 54 +33 93 +85 135 +74 110 +63 81 +64 113 +3 21 +24 92 +78 82 +54 63 +66 83 +22 38 +41 59 +99 156 +26 34 +67 78 +9 22 +15 62 +25 43 +0 93 +43 44 +54 63 +16 40 +62 136 +35 85 +80 179 +4 103 +21 73 +91 119 +99 188 +16 42 +63 64 +76 137 +58 61 +20 39 +61 72 +0 9 +7 41 +11 61 +39 124 +70 153 +97 121 +66 166 +7 72 +65 140 +96 140 +60 87 +34 35 +14 15 +17 41 +33 69 +5 101 +49 109 +79 102 +22 57 +50 126 +24 119 +76 166 +84 93 +34 70 diff --git a/geom_bottleneck/tests/data/test_607_B b/geom_bottleneck/tests/data/test_607_B new file mode 100644 index 0000000..0f79931 --- /dev/null +++ b/geom_bottleneck/tests/data/test_607_B @@ -0,0 +1,100 @@ +23 33 +0 85 +33 82 +21 38 +41 75 +94 128 +35 107 +9 76 +65 74 +71 133 +83 173 +94 109 +58 83 +61 68 +44 111 +67 107 +97 152 +100 167 +94 105 +94 95 +9 37 +18 47 +87 141 +81 153 +57 90 +10 19 +67 137 +11 75 +86 139 +39 72 +13 51 +65 155 +56 98 +91 149 +58 68 +6 89 +39 95 +82 150 +97 129 +26 73 +87 112 +37 117 +73 137 +68 73 +4 88 +2 70 +79 112 +59 123 +31 93 +36 77 +95 158 +25 52 +33 47 +69 112 +73 160 +95 138 +15 56 +31 96 +1 2 +9 41 +59 129 +48 55 +52 111 +51 139 +38 115 +100 198 +30 46 +77 105 +43 115 +66 151 +69 70 +93 98 +19 59 +10 59 +10 59 +51 89 +21 58 +48 75 +57 58 +0 34 +48 110 +87 152 +9 44 +19 73 +8 76 +82 165 +4 51 +9 24 +62 105 +97 147 +28 102 +37 77 +25 55 +77 86 +80 87 +81 172 +99 152 +57 107 +61 154 +45 93 diff --git a/geom_bottleneck/tests/data/test_608_A b/geom_bottleneck/tests/data/test_608_A new file mode 100644 index 0000000..a4beccc --- /dev/null +++ b/geom_bottleneck/tests/data/test_608_A @@ -0,0 +1,100 @@ +91 111 +71 96 +84 176 +57 123 +7 22 +4 76 +83 171 +79 172 +96 173 +75 76 +19 98 +91 135 +13 54 +10 13 +2 53 +65 128 +96 133 +54 64 +43 112 +72 139 +32 33 +45 89 +82 174 +36 79 +5 89 +90 114 +41 90 +16 30 +78 177 +64 77 +40 67 +57 129 +29 51 +53 54 +86 90 +64 116 +87 92 +73 76 +35 108 +25 81 +57 155 +55 123 +56 99 +96 103 +88 93 +28 101 +74 106 +76 166 +28 126 +34 41 +75 91 +19 119 +59 108 +29 121 +0 66 +9 25 +68 150 +26 51 +19 47 +34 55 +37 127 +66 80 +23 52 +8 19 +65 128 +44 109 +16 70 +17 114 +29 31 +40 100 +20 42 +61 121 +89 153 +35 104 +5 81 +33 95 +17 29 +93 132 +72 133 +100 102 +54 109 +23 53 +85 87 +64 69 +20 67 +30 34 +96 143 +40 134 +60 86 +40 91 +92 133 +73 141 +70 117 +43 78 +52 83 +27 114 +2 88 +48 121 +40 66 +96 159 diff --git a/geom_bottleneck/tests/data/test_608_B b/geom_bottleneck/tests/data/test_608_B new file mode 100644 index 0000000..94f4c9a --- /dev/null +++ b/geom_bottleneck/tests/data/test_608_B @@ -0,0 +1,100 @@ +69 152 +69 122 +74 138 +60 95 +88 127 +98 124 +99 193 +82 85 +17 78 +57 130 +50 71 +62 94 +7 39 +89 137 +26 69 +71 146 +9 73 +37 55 +25 111 +65 145 +94 157 +92 99 +31 51 +50 112 +87 99 +64 76 +55 126 +6 56 +48 124 +89 147 +16 18 +93 172 +53 152 +90 102 +25 123 +81 110 +1 93 +74 150 +61 73 +39 100 +74 148 +58 152 +21 94 +39 112 +96 161 +4 85 +61 79 +90 150 +2 42 +100 110 +81 161 +56 71 +90 162 +2 30 +69 80 +33 99 +27 43 +56 74 +57 138 +63 162 +51 121 +80 153 +75 174 +4 29 +91 122 +45 145 +72 74 +66 130 +13 79 +9 91 +59 100 +35 114 +100 124 +40 80 +40 134 +72 123 +43 63 +43 81 +37 83 +74 128 +5 86 +54 66 +88 133 +6 93 +98 166 +8 104 +100 199 +56 130 +88 128 +41 97 +8 17 +44 123 +7 51 +33 59 +0 80 +16 69 +16 55 +77 141 +75 108 +84 117 diff --git a/geom_bottleneck/tests/data/test_609_A b/geom_bottleneck/tests/data/test_609_A new file mode 100644 index 0000000..a8e841e --- /dev/null +++ b/geom_bottleneck/tests/data/test_609_A @@ -0,0 +1,100 @@ +52 69 +8 75 +78 173 +64 147 +34 126 +24 107 +83 158 +79 135 +39 119 +72 163 +12 78 +45 107 +7 27 +8 48 +65 133 +43 99 +92 116 +46 61 +78 94 +73 122 +30 89 +27 50 +46 142 +58 92 +7 73 +52 123 +53 77 +28 115 +28 111 +65 159 +95 131 +58 82 +47 103 +31 110 +15 37 +90 139 +76 128 +88 131 +76 145 +96 165 +77 154 +11 36 +36 63 +25 122 +100 144 +13 15 +7 65 +50 128 +97 104 +98 183 +39 81 +55 89 +76 78 +46 87 +2 43 +86 151 +61 130 +40 122 +72 111 +14 113 +26 89 +43 61 +80 176 +83 170 +78 153 +93 171 +87 142 +98 101 +60 71 +24 93 +18 94 +86 103 +22 42 +14 104 +2 85 +26 78 +98 190 +91 191 +9 68 +46 124 +50 105 +0 38 +62 138 +26 27 +78 168 +80 87 +64 68 +64 129 +10 48 +77 171 +79 129 +53 89 +30 92 +71 125 +26 125 +12 112 +96 134 +27 114 +62 91 +10 11 diff --git a/geom_bottleneck/tests/data/test_609_B b/geom_bottleneck/tests/data/test_609_B new file mode 100644 index 0000000..574351a --- /dev/null +++ b/geom_bottleneck/tests/data/test_609_B @@ -0,0 +1,100 @@ +64 90 +2 6 +69 77 +35 119 +59 88 +27 127 +39 134 +68 155 +92 151 +5 84 +79 125 +37 66 +31 116 +48 97 +63 88 +92 176 +36 98 +97 135 +67 130 +21 44 +42 114 +42 114 +56 93 +4 78 +91 128 +87 94 +35 69 +5 25 +46 72 +91 151 +96 180 +87 165 +24 32 +72 134 +78 150 +0 3 +100 197 +84 95 +6 31 +61 97 +25 26 +46 114 +91 152 +64 82 +75 78 +73 134 +43 58 +66 157 +82 130 +66 96 +49 61 +55 82 +25 39 +58 153 +93 184 +17 113 +51 123 +51 77 +61 106 +26 111 +94 187 +28 77 +5 95 +100 123 +0 74 +55 91 +60 76 +2 43 +58 110 +82 153 +22 100 +13 92 +7 22 +82 153 +71 84 +16 26 +3 45 +80 97 +51 143 +99 191 +38 67 +14 112 +4 11 +72 141 +4 34 +86 115 +74 134 +53 102 +87 116 +51 119 +5 105 +62 103 +32 116 +64 152 +41 52 +1 38 +3 57 +50 133 +57 132 +57 93 diff --git a/geom_bottleneck/tests/data/test_610_A b/geom_bottleneck/tests/data/test_610_A new file mode 100644 index 0000000..c37fa9c --- /dev/null +++ b/geom_bottleneck/tests/data/test_610_A @@ -0,0 +1,100 @@ +4 71 +61 90 +58 59 +14 102 +53 142 +94 103 +47 71 +72 115 +33 113 +64 142 +82 115 +65 85 +34 101 +78 93 +68 109 +84 112 +45 80 +30 83 +100 164 +88 158 +2 10 +56 135 +22 41 +11 21 +77 128 +34 110 +8 54 +91 184 +57 120 +100 187 +76 115 +52 83 +48 54 +78 173 +10 84 +85 185 +44 129 +100 132 +52 58 +23 84 +65 70 +54 73 +92 167 +91 103 +73 112 +11 85 +38 78 +78 105 +7 22 +3 85 +57 125 +45 77 +15 99 +87 104 +2 70 +11 111 +40 75 +33 47 +99 186 +24 87 +20 78 +14 92 +71 135 +23 30 +58 95 +51 112 +8 21 +75 138 +78 102 +0 48 +86 106 +18 28 +4 103 +75 81 +96 126 +16 88 +83 120 +87 182 +35 48 +31 58 +46 71 +52 73 +71 89 +20 92 +33 107 +10 62 +29 37 +6 22 +0 81 +33 35 +0 81 +20 82 +18 39 +19 84 +88 166 +49 95 +64 74 +58 139 +20 21 +49 105 diff --git a/geom_bottleneck/tests/data/test_610_B b/geom_bottleneck/tests/data/test_610_B new file mode 100644 index 0000000..0745255 --- /dev/null +++ b/geom_bottleneck/tests/data/test_610_B @@ -0,0 +1,100 @@ +44 136 +49 63 +56 122 +67 109 +38 136 +87 96 +23 34 +53 130 +94 108 +67 81 +58 88 +74 158 +20 86 +34 42 +76 128 +33 61 +92 156 +97 107 +39 111 +93 165 +56 144 +36 121 +2 34 +90 136 +91 185 +76 125 +13 26 +59 108 +39 131 +65 138 +49 145 +86 179 +56 138 +62 128 +37 106 +11 22 +27 39 +39 116 +83 127 +20 51 +10 20 +14 79 +96 107 +44 122 +85 122 +85 112 +75 95 +55 100 +56 111 +46 127 +72 157 +49 71 +32 126 +90 144 +94 95 +34 81 +21 64 +37 84 +40 103 +53 76 +88 102 +63 73 +28 31 +42 43 +29 50 +17 61 +59 156 +97 164 +22 50 +45 128 +65 159 +56 123 +10 82 +76 132 +9 86 +97 180 +34 62 +63 70 +68 127 +52 104 +75 168 +54 66 +67 154 +94 113 +34 76 +12 106 +34 69 +31 130 +70 105 +27 52 +47 71 +36 128 +68 156 +47 134 +12 79 +42 139 +85 138 +37 91 +43 68 +23 81 diff --git a/geom_bottleneck/tests/data/test_611_A b/geom_bottleneck/tests/data/test_611_A new file mode 100644 index 0000000..f7cfbbe --- /dev/null +++ b/geom_bottleneck/tests/data/test_611_A @@ -0,0 +1,100 @@ +79 154 +81 116 +71 125 +5 48 +85 176 +76 115 +3 87 +85 102 +17 116 +49 80 +95 183 +82 92 +23 60 +66 97 +4 37 +81 90 +24 50 +64 136 +54 86 +87 160 +33 102 +40 80 +82 127 +97 118 +68 76 +99 160 +92 107 +14 80 +5 45 +42 83 +40 108 +77 163 +39 105 +91 176 +45 73 +96 169 +78 176 +12 90 +53 135 +87 124 +79 172 +52 65 +26 86 +65 112 +1 60 +57 131 +65 135 +45 57 +28 71 +40 50 +17 110 +95 112 +59 156 +38 86 +63 78 +60 112 +28 108 +18 72 +18 91 +33 94 +41 105 +2 37 +36 93 +49 103 +57 131 +10 108 +29 64 +73 83 +79 85 +30 115 +93 111 +47 90 +41 47 +90 158 +72 137 +55 65 +55 136 +40 52 +38 49 +33 57 +82 125 +53 139 +42 87 +43 55 +16 54 +45 61 +6 92 +21 37 +33 84 +37 137 +39 87 +19 70 +62 79 +9 15 +16 48 +39 131 +59 130 +80 94 +56 126 +76 95 diff --git a/geom_bottleneck/tests/data/test_611_B b/geom_bottleneck/tests/data/test_611_B new file mode 100644 index 0000000..ffc3bf6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_611_B @@ -0,0 +1,100 @@ +15 50 +61 137 +52 63 +72 148 +89 101 +93 143 +56 127 +30 99 +72 120 +92 114 +53 106 +43 72 +80 116 +67 136 +33 98 +63 111 +39 55 +84 170 +55 106 +1 8 +96 157 +85 143 +30 95 +66 132 +45 51 +36 128 +69 141 +1 31 +20 97 +14 47 +66 163 +44 125 +45 75 +86 185 +13 78 +28 31 +6 14 +96 108 +62 99 +29 120 +11 20 +55 107 +9 19 +32 105 +4 60 +92 160 +29 80 +68 113 +63 161 +78 95 +24 96 +98 128 +28 81 +87 175 +81 165 +70 137 +55 83 +38 43 +96 158 +40 100 +15 21 +66 70 +22 103 +37 106 +61 126 +52 151 +92 113 +36 61 +11 106 +81 141 +38 135 +48 142 +8 16 +88 89 +80 178 +100 160 +43 91 +71 122 +2 79 +21 27 +74 82 +3 6 +56 109 +94 175 +78 153 +32 117 +78 135 +14 53 +68 70 +53 115 +59 143 +41 63 +18 111 +28 109 +30 65 +42 132 +91 135 +5 43 +47 144 +53 103 diff --git a/geom_bottleneck/tests/data/test_612_A b/geom_bottleneck/tests/data/test_612_A new file mode 100644 index 0000000..1d08d30 --- /dev/null +++ b/geom_bottleneck/tests/data/test_612_A @@ -0,0 +1,100 @@ +29 103 +5 54 +70 158 +33 82 +96 190 +84 184 +49 139 +37 47 +96 159 +75 126 +37 67 +5 28 +41 44 +64 107 +0 88 +32 35 +41 42 +11 14 +82 107 +36 111 +35 80 +69 142 +22 85 +95 191 +48 102 +78 135 +74 151 +71 73 +92 114 +95 152 +52 85 +52 95 +72 147 +33 133 +57 148 +90 155 +94 192 +97 108 +84 172 +3 46 +36 112 +72 129 +80 132 +17 41 +67 113 +27 77 +45 86 +56 135 +41 65 +13 53 +52 84 +54 101 +34 74 +25 99 +86 87 +36 136 +82 124 +5 95 +86 150 +76 90 +66 127 +54 110 +76 82 +82 101 +75 139 +2 28 +68 156 +38 60 +51 75 +96 161 +98 143 +38 66 +43 67 +72 112 +25 27 +96 195 +24 26 +46 85 +71 157 +12 47 +46 92 +72 109 +14 65 +68 144 +53 56 +61 105 +18 111 +51 95 +18 28 +39 121 +67 71 +42 58 +25 106 +88 169 +66 150 +47 114 +36 61 +12 101 +64 137 +8 31 diff --git a/geom_bottleneck/tests/data/test_612_B b/geom_bottleneck/tests/data/test_612_B new file mode 100644 index 0000000..712c645 --- /dev/null +++ b/geom_bottleneck/tests/data/test_612_B @@ -0,0 +1,100 @@ +51 131 +46 143 +100 147 +25 81 +73 151 +74 80 +50 143 +91 157 +46 56 +67 152 +67 75 +78 137 +33 90 +17 45 +82 165 +64 97 +85 168 +44 130 +93 140 +80 137 +68 76 +82 177 +21 60 +73 82 +28 41 +45 121 +6 100 +72 83 +27 74 +53 69 +7 8 +7 93 +30 57 +38 98 +38 44 +58 81 +70 168 +15 112 +25 66 +80 122 +24 38 +60 149 +29 116 +54 75 +53 142 +48 111 +0 21 +82 151 +74 118 +93 155 +14 69 +7 70 +30 125 +9 73 +21 54 +97 144 +14 26 +27 95 +25 74 +60 75 +44 95 +94 168 +82 108 +97 129 +7 49 +86 95 +92 97 +98 166 +31 82 +33 90 +24 47 +48 147 +66 117 +26 66 +29 114 +84 166 +62 127 +72 132 +20 37 +77 170 +21 89 +1 9 +74 83 +96 192 +40 117 +3 8 +38 72 +88 156 +66 109 +22 52 +14 39 +51 92 +65 123 +81 119 +28 43 +75 170 +94 159 +20 96 +63 109 +17 106 diff --git a/geom_bottleneck/tests/data/test_613_A b/geom_bottleneck/tests/data/test_613_A new file mode 100644 index 0000000..909c462 --- /dev/null +++ b/geom_bottleneck/tests/data/test_613_A @@ -0,0 +1,100 @@ +43 47 +47 132 +11 66 +37 81 +99 108 +46 54 +47 80 +96 121 +12 18 +56 128 +7 75 +27 104 +43 110 +100 127 +28 29 +75 174 +62 105 +0 13 +43 62 +5 43 +8 27 +54 56 +43 103 +41 105 +96 156 +42 48 +97 134 +25 67 +79 144 +25 29 +99 140 +98 128 +45 144 +37 46 +4 98 +92 121 +12 77 +14 97 +92 119 +72 167 +14 36 +92 101 +30 38 +94 100 +42 55 +8 97 +8 78 +78 135 +46 83 +78 126 +30 58 +80 175 +49 130 +67 85 +4 24 +100 188 +36 49 +88 179 +45 69 +80 89 +1 73 +30 88 +44 124 +29 81 +15 100 +35 70 +29 87 +73 152 +64 102 +47 136 +50 68 +75 127 +80 152 +34 44 +78 167 +98 162 +18 45 +19 60 +90 120 +68 106 +98 198 +61 130 +3 41 +90 100 +22 68 +19 57 +59 88 +19 77 +60 92 +38 61 +7 45 +23 87 +71 155 +23 57 +97 177 +58 128 +77 109 +13 112 +37 129 +54 61 diff --git a/geom_bottleneck/tests/data/test_613_B b/geom_bottleneck/tests/data/test_613_B new file mode 100644 index 0000000..9569b49 --- /dev/null +++ b/geom_bottleneck/tests/data/test_613_B @@ -0,0 +1,100 @@ +22 108 +62 83 +61 105 +95 188 +77 78 +7 45 +83 149 +1 65 +14 16 +30 89 +84 112 +29 123 +73 173 +5 35 +37 58 +11 56 +83 125 +71 165 +53 103 +88 176 +28 88 +71 141 +93 170 +95 187 +15 84 +57 70 +19 118 +14 51 +37 117 +69 131 +97 143 +20 117 +54 99 +54 146 +62 104 +76 155 +23 75 +77 155 +23 117 +30 42 +97 137 +44 107 +24 33 +99 188 +30 38 +60 129 +83 102 +95 120 +37 71 +72 106 +90 149 +16 73 +97 127 +81 98 +39 101 +64 149 +43 112 +90 182 +8 93 +36 50 +33 45 +63 78 +25 103 +78 125 +47 143 +83 141 +66 153 +51 125 +53 83 +94 125 +99 199 +67 109 +67 99 +29 55 +68 148 +91 159 +65 96 +25 84 +63 134 +40 136 +94 173 +67 154 +14 107 +73 153 +24 79 +85 116 +66 104 +98 166 +0 42 +100 148 +74 168 +31 86 +42 62 +83 182 +48 131 +18 94 +90 134 +84 150 +78 175 +27 121 diff --git a/geom_bottleneck/tests/data/test_614_A b/geom_bottleneck/tests/data/test_614_A new file mode 100644 index 0000000..29c02c8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_614_A @@ -0,0 +1,100 @@ +24 124 +56 99 +57 147 +95 161 +39 104 +63 154 +82 105 +65 89 +82 122 +62 129 +88 181 +75 121 +32 33 +44 68 +12 28 +36 131 +63 64 +23 72 +92 159 +80 112 +2 92 +48 110 +50 98 +23 50 +20 72 +32 39 +32 86 +51 63 +47 114 +61 71 +32 78 +43 110 +69 157 +79 122 +35 48 +74 85 +15 62 +14 72 +29 62 +37 61 +56 75 +35 88 +70 84 +37 91 +45 139 +16 33 +76 145 +8 70 +87 128 +91 183 +29 47 +37 48 +13 102 +88 142 +10 75 +35 109 +84 178 +88 118 +85 93 +17 113 +30 49 +13 47 +83 129 +60 106 +92 154 +29 90 +93 135 +33 66 +60 117 +36 92 +1 22 +13 76 +5 102 +7 102 +76 154 +78 133 +72 135 +93 146 +37 47 +44 103 +68 102 +81 136 +51 58 +92 172 +43 119 +92 140 +62 116 +15 84 +58 82 +94 119 +74 131 +5 42 +37 56 +28 127 +82 85 +60 107 +18 98 +1 80 +95 129 +96 101 diff --git a/geom_bottleneck/tests/data/test_614_B b/geom_bottleneck/tests/data/test_614_B new file mode 100644 index 0000000..f34b836 --- /dev/null +++ b/geom_bottleneck/tests/data/test_614_B @@ -0,0 +1,100 @@ +28 55 +77 152 +40 97 +23 116 +61 120 +59 143 +27 48 +32 88 +92 117 +66 145 +83 132 +2 51 +57 82 +47 122 +7 40 +68 150 +86 156 +68 122 +74 94 +92 113 +14 46 +61 116 +42 133 +15 55 +9 24 +49 70 +41 108 +20 45 +93 177 +87 144 +81 161 +11 60 +64 92 +24 69 +50 79 +39 82 +28 116 +62 122 +38 48 +64 75 +51 62 +22 34 +10 96 +61 73 +72 146 +10 62 +61 86 +5 41 +43 106 +25 66 +30 55 +91 112 +30 76 +96 176 +84 148 +17 81 +51 127 +90 106 +100 177 +67 129 +23 84 +49 99 +100 124 +11 59 +54 106 +19 113 +76 96 +10 96 +15 114 +83 143 +29 57 +82 143 +32 64 +6 73 +94 142 +22 52 +93 100 +57 154 +100 110 +90 165 +69 110 +54 118 +38 47 +92 142 +45 65 +0 19 +100 196 +71 136 +16 78 +53 148 +76 83 +49 81 +86 148 +59 152 +13 69 +25 101 +57 102 +89 113 +15 17 +1 2 diff --git a/geom_bottleneck/tests/data/test_615_A b/geom_bottleneck/tests/data/test_615_A new file mode 100644 index 0000000..d1b55eb --- /dev/null +++ b/geom_bottleneck/tests/data/test_615_A @@ -0,0 +1,100 @@ +98 121 +87 153 +92 109 +60 122 +16 78 +1 43 +29 68 +93 186 +35 121 +95 183 +47 59 +98 129 +57 129 +82 134 +10 104 +20 60 +74 125 +97 158 +96 142 +71 88 +94 192 +37 132 +50 114 +65 96 +43 128 +27 48 +96 180 +10 22 +39 129 +28 29 +36 136 +1 65 +0 80 +3 99 +31 44 +35 94 +73 82 +91 155 +67 166 +36 78 +92 183 +74 157 +46 123 +31 68 +62 72 +21 83 +7 70 +49 137 +23 79 +48 132 +78 171 +51 80 +41 54 +59 108 +82 156 +42 136 +92 163 +27 90 +82 128 +95 96 +20 74 +26 40 +36 86 +29 35 +84 168 +82 151 +80 123 +58 109 +37 74 +53 86 +55 124 +24 91 +52 113 +79 126 +3 82 +68 124 +91 142 +48 85 +36 131 +7 61 +69 150 +66 77 +64 142 +91 95 +11 25 +71 162 +51 58 +20 104 +61 152 +2 19 +26 27 +41 58 +46 102 +29 41 +13 36 +93 145 +7 35 +54 102 +98 158 +85 93 diff --git a/geom_bottleneck/tests/data/test_615_B b/geom_bottleneck/tests/data/test_615_B new file mode 100644 index 0000000..ab204be --- /dev/null +++ b/geom_bottleneck/tests/data/test_615_B @@ -0,0 +1,100 @@ +11 38 +73 143 +46 112 +28 29 +68 96 +49 111 +90 154 +98 189 +25 45 +40 129 +76 104 +72 79 +100 121 +3 73 +73 83 +51 84 +81 102 +55 91 +60 96 +54 139 +80 131 +4 84 +97 125 +75 132 +39 84 +90 153 +29 61 +27 31 +14 71 +86 112 +52 87 +1 100 +66 69 +16 51 +70 93 +91 139 +80 140 +92 144 +20 42 +45 122 +27 115 +51 112 +61 94 +54 140 +85 159 +0 99 +31 59 +9 24 +31 122 +5 13 +51 85 +22 65 +14 42 +79 120 +40 43 +13 85 +78 147 +47 48 +87 109 +94 187 +2 74 +36 95 +41 72 +85 105 +36 103 +41 94 +27 90 +66 72 +42 89 +93 170 +84 151 +66 96 +65 162 +2 3 +25 45 +50 77 +20 78 +21 50 +93 119 +76 150 +65 93 +11 68 +42 61 +28 92 +39 129 +92 112 +91 187 +48 97 +59 62 +0 31 +57 107 +83 140 +80 82 +87 135 +35 48 +23 57 +79 166 +7 81 +97 121 +97 98 diff --git a/geom_bottleneck/tests/data/test_616_A b/geom_bottleneck/tests/data/test_616_A new file mode 100644 index 0000000..2b99b87 --- /dev/null +++ b/geom_bottleneck/tests/data/test_616_A @@ -0,0 +1,100 @@ +74 170 +100 122 +43 126 +66 162 +54 71 +31 122 +49 55 +100 194 +68 142 +83 94 +4 55 +20 79 +90 117 +67 143 +50 51 +40 123 +21 64 +41 114 +35 44 +75 169 +82 162 +52 138 +69 99 +53 107 +36 95 +99 118 +55 69 +86 102 +70 75 +5 94 +55 133 +79 141 +100 171 +6 73 +22 99 +92 185 +5 94 +34 131 +50 143 +97 184 +51 106 +82 158 +85 173 +81 163 +59 85 +50 93 +49 60 +94 128 +83 167 +29 44 +85 164 +62 138 +33 92 +32 114 +74 80 +64 124 +30 117 +22 116 +37 80 +87 142 +65 143 +0 95 +93 131 +70 168 +35 90 +74 169 +79 173 +49 99 +33 120 +30 63 +57 113 +72 97 +71 127 +53 61 +77 139 +85 159 +0 80 +51 120 +3 76 +65 88 +63 121 +55 73 +23 92 +29 98 +2 31 +65 112 +15 86 +47 86 +100 146 +21 49 +76 158 +75 130 +65 141 +73 112 +6 90 +29 110 +89 93 +99 106 +95 135 +39 101 diff --git a/geom_bottleneck/tests/data/test_616_B b/geom_bottleneck/tests/data/test_616_B new file mode 100644 index 0000000..55a8c9f --- /dev/null +++ b/geom_bottleneck/tests/data/test_616_B @@ -0,0 +1,100 @@ +22 54 +34 134 +72 81 +63 68 +99 119 +35 79 +86 177 +39 120 +68 128 +50 115 +59 119 +60 125 +19 91 +82 118 +81 100 +46 144 +99 152 +7 81 +81 113 +29 93 +68 86 +15 54 +52 67 +85 182 +44 76 +2 55 +51 146 +19 32 +39 111 +41 116 +83 112 +97 190 +83 94 +85 133 +31 103 +55 92 +99 150 +49 136 +72 138 +1 53 +25 89 +37 106 +49 149 +2 10 +39 90 +85 143 +4 17 +8 69 +59 120 +70 80 +73 96 +80 119 +57 86 +30 59 +52 60 +13 93 +16 92 +45 103 +14 27 +4 30 +81 117 +22 39 +14 78 +42 120 +19 118 +97 115 +74 164 +70 158 +12 63 +38 79 +80 150 +37 111 +71 97 +7 13 +73 162 +31 75 +61 98 +54 89 +73 110 +87 137 +61 126 +23 71 +97 146 +20 47 +98 181 +63 69 +4 102 +11 50 +17 46 +19 22 +70 167 +98 147 +99 153 +93 144 +44 72 +67 117 +46 133 +15 48 +64 135 +55 122 diff --git a/geom_bottleneck/tests/data/test_617_A b/geom_bottleneck/tests/data/test_617_A new file mode 100644 index 0000000..9eb04ba --- /dev/null +++ b/geom_bottleneck/tests/data/test_617_A @@ -0,0 +1,100 @@ +91 153 +68 149 +3 63 +83 160 +15 40 +13 60 +92 126 +96 190 +2 94 +75 89 +100 141 +12 107 +66 104 +57 120 +65 91 +91 191 +12 93 +50 66 +30 85 +4 5 +63 124 +69 145 +50 131 +61 94 +23 33 +27 91 +43 46 +67 131 +90 106 +47 128 +99 109 +76 133 +62 89 +68 95 +72 125 +37 55 +10 14 +6 55 +9 13 +99 168 +14 47 +24 62 +27 112 +92 133 +95 166 +36 76 +67 152 +72 94 +72 158 +77 175 +93 143 +38 78 +20 71 +68 122 +39 111 +49 120 +0 62 +52 127 +51 142 +81 168 +63 117 +33 52 +47 48 +4 66 +92 166 +51 120 +77 80 +54 89 +83 124 +90 126 +93 122 +6 83 +63 111 +95 146 +3 57 +39 117 +76 105 +71 76 +13 88 +94 185 +77 147 +47 147 +60 123 +64 134 +97 110 +99 111 +75 119 +15 35 +82 130 +92 129 +27 108 +93 94 +91 138 +43 101 +90 160 +90 155 +27 88 +2 17 +20 43 +9 94 diff --git a/geom_bottleneck/tests/data/test_617_B b/geom_bottleneck/tests/data/test_617_B new file mode 100644 index 0000000..eb300a8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_617_B @@ -0,0 +1,100 @@ +100 145 +51 93 +52 55 +73 86 +99 166 +80 151 +75 83 +81 105 +10 11 +52 110 +32 102 +38 124 +83 168 +55 116 +47 101 +71 90 +78 163 +19 98 +58 135 +54 137 +79 114 +91 102 +96 119 +9 10 +30 82 +15 60 +69 106 +56 125 +0 7 +71 74 +37 79 +80 102 +89 177 +43 92 +80 94 +9 92 +37 69 +6 95 +85 111 +27 38 +95 138 +92 157 +51 57 +79 96 +67 123 +56 70 +69 153 +82 151 +96 192 +12 34 +66 78 +75 154 +91 135 +79 179 +67 153 +45 86 +88 144 +91 109 +60 115 +92 176 +45 110 +35 117 +58 61 +91 147 +80 86 +9 80 +65 125 +75 78 +29 105 +69 148 +55 138 +54 60 +89 139 +98 131 +73 104 +29 127 +63 123 +7 69 +82 152 +6 92 +20 37 +41 112 +82 182 +73 128 +48 106 +60 98 +35 65 +13 42 +49 52 +8 36 +6 18 +42 70 +16 60 +30 56 +78 120 +80 94 +38 92 +19 52 +78 89 +49 131 diff --git a/geom_bottleneck/tests/data/test_618_A b/geom_bottleneck/tests/data/test_618_A new file mode 100644 index 0000000..a53c5f8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_618_A @@ -0,0 +1,100 @@ +28 78 +66 159 +45 123 +56 140 +67 109 +32 81 +23 101 +44 121 +82 99 +20 28 +59 137 +93 185 +51 103 +75 89 +47 69 +48 94 +23 52 +35 74 +67 161 +67 138 +12 25 +50 73 +90 158 +55 124 +95 120 +36 96 +91 126 +100 114 +15 66 +89 180 +19 54 +81 137 +65 114 +46 51 +42 141 +74 88 +46 76 +38 69 +21 92 +92 97 +16 29 +97 177 +22 75 +94 155 +10 47 +96 174 +98 155 +16 104 +49 88 +36 44 +1 9 +66 83 +71 117 +45 56 +49 146 +29 66 +31 35 +49 133 +43 123 +6 20 +24 103 +14 103 +13 30 +100 101 +8 68 +71 101 +18 52 +33 94 +82 113 +0 36 +1 79 +63 141 +29 113 +41 105 +5 105 +47 142 +98 159 +48 96 +31 43 +29 76 +63 159 +9 72 +39 62 +75 111 +27 37 +72 81 +39 112 +70 88 +78 149 +69 101 +68 136 +72 77 +18 40 +48 72 +53 115 +12 78 +40 63 +75 163 +57 141 +47 140 diff --git a/geom_bottleneck/tests/data/test_618_B b/geom_bottleneck/tests/data/test_618_B new file mode 100644 index 0000000..611fb6a --- /dev/null +++ b/geom_bottleneck/tests/data/test_618_B @@ -0,0 +1,100 @@ +35 126 +40 82 +62 85 +64 72 +55 138 +43 97 +12 41 +75 142 +12 68 +26 114 +69 169 +65 101 +76 161 +20 63 +25 113 +70 153 +54 70 +41 79 +29 91 +85 100 +53 134 +12 13 +38 56 +28 112 +34 118 +56 111 +17 104 +66 108 +23 26 +47 96 +18 100 +18 100 +51 127 +40 87 +63 75 +40 101 +14 48 +72 90 +80 121 +28 56 +91 147 +25 92 +31 55 +25 106 +41 57 +42 52 +65 98 +14 110 +98 188 +39 75 +68 147 +62 148 +16 96 +91 103 +83 109 +55 91 +85 184 +62 73 +9 105 +70 74 +33 132 +6 82 +97 169 +11 90 +98 194 +91 160 +74 133 +25 69 +73 114 +1 27 +100 120 +77 159 +88 187 +31 42 +24 25 +93 140 +44 96 +0 86 +39 55 +52 96 +2 54 +33 97 +63 151 +7 95 +40 54 +89 127 +71 112 +74 162 +55 113 +20 60 +81 106 +36 111 +17 75 +48 69 +6 33 +11 94 +73 150 +5 28 +62 118 +38 78 diff --git a/geom_bottleneck/tests/data/test_619_A b/geom_bottleneck/tests/data/test_619_A new file mode 100644 index 0000000..4dd6557 --- /dev/null +++ b/geom_bottleneck/tests/data/test_619_A @@ -0,0 +1,100 @@ +31 76 +34 130 +70 80 +52 82 +40 116 +77 109 +84 130 +53 111 +63 79 +7 12 +28 70 +35 78 +95 115 +78 123 +23 44 +96 162 +50 139 +58 155 +31 91 +91 129 +82 139 +21 111 +98 117 +75 137 +27 68 +51 125 +93 104 +71 161 +66 147 +97 132 +98 169 +93 186 +22 83 +73 136 +27 70 +100 194 +74 87 +21 31 +11 107 +59 70 +0 77 +99 126 +50 86 +31 123 +62 91 +25 119 +44 104 +68 156 +79 165 +58 89 +66 122 +20 42 +71 77 +97 177 +40 66 +78 122 +73 169 +84 89 +28 107 +58 94 +76 89 +68 103 +50 89 +90 97 +32 94 +30 96 +78 100 +97 186 +99 141 +61 116 +19 32 +19 101 +32 65 +15 67 +69 150 +55 64 +37 53 +76 130 +4 53 +27 79 +90 121 +8 53 +39 75 +90 102 +41 65 +34 124 +16 110 +52 61 +55 58 +23 62 +14 92 +39 88 +5 71 +59 110 +12 100 +14 90 +35 101 +23 105 +50 124 +58 148 diff --git a/geom_bottleneck/tests/data/test_619_B b/geom_bottleneck/tests/data/test_619_B new file mode 100644 index 0000000..711d7cb --- /dev/null +++ b/geom_bottleneck/tests/data/test_619_B @@ -0,0 +1,100 @@ +75 136 +69 74 +21 44 +4 30 +6 70 +27 50 +57 72 +62 67 +50 127 +33 84 +10 71 +87 167 +12 58 +1 41 +86 164 +74 133 +64 132 +80 178 +72 124 +91 165 +4 96 +6 90 +49 97 +87 123 +34 101 +34 66 +94 108 +78 109 +34 87 +23 107 +7 70 +88 108 +100 157 +18 29 +15 38 +81 136 +39 103 +12 96 +56 136 +71 104 +90 137 +100 167 +39 125 +10 102 +8 49 +86 89 +76 153 +21 48 +52 129 +58 61 +41 136 +43 110 +37 39 +20 65 +99 161 +54 82 +17 64 +66 137 +32 44 +13 40 +43 127 +1 21 +41 63 +57 127 +29 126 +64 134 +24 122 +62 73 +20 120 +72 109 +100 156 +35 43 +4 19 +84 174 +64 101 +32 122 +14 43 +68 111 +84 132 +55 92 +21 84 +90 183 +62 63 +10 107 +40 46 +81 124 +62 120 +50 125 +38 112 +72 137 +93 190 +38 57 +27 42 +7 76 +84 169 +45 102 +51 78 +96 111 +84 153 +53 60 diff --git a/geom_bottleneck/tests/data/test_620_A b/geom_bottleneck/tests/data/test_620_A new file mode 100644 index 0000000..74e7856 --- /dev/null +++ b/geom_bottleneck/tests/data/test_620_A @@ -0,0 +1,2 @@ +977 1670 +257 583 diff --git a/geom_bottleneck/tests/data/test_620_B b/geom_bottleneck/tests/data/test_620_B new file mode 100644 index 0000000..e7efa97 --- /dev/null +++ b/geom_bottleneck/tests/data/test_620_B @@ -0,0 +1,2 @@ +519 914 +659 781 diff --git a/geom_bottleneck/tests/data/test_621_A b/geom_bottleneck/tests/data/test_621_A new file mode 100644 index 0000000..6a24523 --- /dev/null +++ b/geom_bottleneck/tests/data/test_621_A @@ -0,0 +1,2 @@ +928 1424 +468 1402 diff --git a/geom_bottleneck/tests/data/test_621_B b/geom_bottleneck/tests/data/test_621_B new file mode 100644 index 0000000..7b49acb --- /dev/null +++ b/geom_bottleneck/tests/data/test_621_B @@ -0,0 +1,2 @@ +946 1838 +602 1466 diff --git a/geom_bottleneck/tests/data/test_622_A b/geom_bottleneck/tests/data/test_622_A new file mode 100644 index 0000000..58d67ac --- /dev/null +++ b/geom_bottleneck/tests/data/test_622_A @@ -0,0 +1,2 @@ +199 1177 +163 743 diff --git a/geom_bottleneck/tests/data/test_622_B b/geom_bottleneck/tests/data/test_622_B new file mode 100644 index 0000000..f9a4fdd --- /dev/null +++ b/geom_bottleneck/tests/data/test_622_B @@ -0,0 +1,2 @@ +502 1478 +838 1480 diff --git a/geom_bottleneck/tests/data/test_623_A b/geom_bottleneck/tests/data/test_623_A new file mode 100644 index 0000000..8d99200 --- /dev/null +++ b/geom_bottleneck/tests/data/test_623_A @@ -0,0 +1,2 @@ +156 443 +264 982 diff --git a/geom_bottleneck/tests/data/test_623_B b/geom_bottleneck/tests/data/test_623_B new file mode 100644 index 0000000..22ab9fd --- /dev/null +++ b/geom_bottleneck/tests/data/test_623_B @@ -0,0 +1,2 @@ +995 1285 +571 1427 diff --git a/geom_bottleneck/tests/data/test_624_A b/geom_bottleneck/tests/data/test_624_A new file mode 100644 index 0000000..49891f6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_624_A @@ -0,0 +1,2 @@ +884 1159 +315 1125 diff --git a/geom_bottleneck/tests/data/test_624_B b/geom_bottleneck/tests/data/test_624_B new file mode 100644 index 0000000..fa3e1ea --- /dev/null +++ b/geom_bottleneck/tests/data/test_624_B @@ -0,0 +1,2 @@ +236 1034 +474 567 diff --git a/geom_bottleneck/tests/data/test_625_A b/geom_bottleneck/tests/data/test_625_A new file mode 100644 index 0000000..4da6ce4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_625_A @@ -0,0 +1,2 @@ +8 375 +509 926 diff --git a/geom_bottleneck/tests/data/test_625_B b/geom_bottleneck/tests/data/test_625_B new file mode 100644 index 0000000..bf587fc --- /dev/null +++ b/geom_bottleneck/tests/data/test_625_B @@ -0,0 +1,2 @@ +805 895 +735 1279 diff --git a/geom_bottleneck/tests/data/test_626_A b/geom_bottleneck/tests/data/test_626_A new file mode 100644 index 0000000..92036c8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_626_A @@ -0,0 +1,2 @@ +821 1025 +74 936 diff --git a/geom_bottleneck/tests/data/test_626_B b/geom_bottleneck/tests/data/test_626_B new file mode 100644 index 0000000..3052b59 --- /dev/null +++ b/geom_bottleneck/tests/data/test_626_B @@ -0,0 +1,2 @@ +155 737 +564 1257 diff --git a/geom_bottleneck/tests/data/test_627_A b/geom_bottleneck/tests/data/test_627_A new file mode 100644 index 0000000..f682247 --- /dev/null +++ b/geom_bottleneck/tests/data/test_627_A @@ -0,0 +1,2 @@ +680 1473 +354 876 diff --git a/geom_bottleneck/tests/data/test_627_B b/geom_bottleneck/tests/data/test_627_B new file mode 100644 index 0000000..7c61fad --- /dev/null +++ b/geom_bottleneck/tests/data/test_627_B @@ -0,0 +1,2 @@ +767 1509 +998 1182 diff --git a/geom_bottleneck/tests/data/test_628_A b/geom_bottleneck/tests/data/test_628_A new file mode 100644 index 0000000..f499ec3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_628_A @@ -0,0 +1,2 @@ +481 1127 +66 1027 diff --git a/geom_bottleneck/tests/data/test_628_B b/geom_bottleneck/tests/data/test_628_B new file mode 100644 index 0000000..5eb5994 --- /dev/null +++ b/geom_bottleneck/tests/data/test_628_B @@ -0,0 +1,2 @@ +961 1197 +123 388 diff --git a/geom_bottleneck/tests/data/test_629_A b/geom_bottleneck/tests/data/test_629_A new file mode 100644 index 0000000..ff42c12 --- /dev/null +++ b/geom_bottleneck/tests/data/test_629_A @@ -0,0 +1,2 @@ +457 1026 +405 1343 diff --git a/geom_bottleneck/tests/data/test_629_B b/geom_bottleneck/tests/data/test_629_B new file mode 100644 index 0000000..b0b983a --- /dev/null +++ b/geom_bottleneck/tests/data/test_629_B @@ -0,0 +1,2 @@ +575 706 +472 965 diff --git a/geom_bottleneck/tests/data/test_630_A b/geom_bottleneck/tests/data/test_630_A new file mode 100644 index 0000000..6ed10cf --- /dev/null +++ b/geom_bottleneck/tests/data/test_630_A @@ -0,0 +1,2 @@ +480 650 +0 307 diff --git a/geom_bottleneck/tests/data/test_630_B b/geom_bottleneck/tests/data/test_630_B new file mode 100644 index 0000000..0583a0c --- /dev/null +++ b/geom_bottleneck/tests/data/test_630_B @@ -0,0 +1,2 @@ +836 1099 +771 1050 diff --git a/geom_bottleneck/tests/data/test_631_A b/geom_bottleneck/tests/data/test_631_A new file mode 100644 index 0000000..d49637c --- /dev/null +++ b/geom_bottleneck/tests/data/test_631_A @@ -0,0 +1,2 @@ +551 1534 +392 820 diff --git a/geom_bottleneck/tests/data/test_631_B b/geom_bottleneck/tests/data/test_631_B new file mode 100644 index 0000000..f522f48 --- /dev/null +++ b/geom_bottleneck/tests/data/test_631_B @@ -0,0 +1,2 @@ +721 1465 +591 781 diff --git a/geom_bottleneck/tests/data/test_632_A b/geom_bottleneck/tests/data/test_632_A new file mode 100644 index 0000000..32c4757 --- /dev/null +++ b/geom_bottleneck/tests/data/test_632_A @@ -0,0 +1,2 @@ +352 417 +814 986 diff --git a/geom_bottleneck/tests/data/test_632_B b/geom_bottleneck/tests/data/test_632_B new file mode 100644 index 0000000..f50a6bb --- /dev/null +++ b/geom_bottleneck/tests/data/test_632_B @@ -0,0 +1,2 @@ +211 264 +517 1443 diff --git a/geom_bottleneck/tests/data/test_633_A b/geom_bottleneck/tests/data/test_633_A new file mode 100644 index 0000000..0199c88 --- /dev/null +++ b/geom_bottleneck/tests/data/test_633_A @@ -0,0 +1,2 @@ +487 1216 +842 1559 diff --git a/geom_bottleneck/tests/data/test_633_B b/geom_bottleneck/tests/data/test_633_B new file mode 100644 index 0000000..d516834 --- /dev/null +++ b/geom_bottleneck/tests/data/test_633_B @@ -0,0 +1,2 @@ +353 982 +437 1421 diff --git a/geom_bottleneck/tests/data/test_634_A b/geom_bottleneck/tests/data/test_634_A new file mode 100644 index 0000000..45493ad --- /dev/null +++ b/geom_bottleneck/tests/data/test_634_A @@ -0,0 +1,2 @@ +367 742 +382 796 diff --git a/geom_bottleneck/tests/data/test_634_B b/geom_bottleneck/tests/data/test_634_B new file mode 100644 index 0000000..8840b3a --- /dev/null +++ b/geom_bottleneck/tests/data/test_634_B @@ -0,0 +1,2 @@ +9 723 +351 901 diff --git a/geom_bottleneck/tests/data/test_635_A b/geom_bottleneck/tests/data/test_635_A new file mode 100644 index 0000000..d65240b --- /dev/null +++ b/geom_bottleneck/tests/data/test_635_A @@ -0,0 +1,2 @@ +984 1272 +952 1384 diff --git a/geom_bottleneck/tests/data/test_635_B b/geom_bottleneck/tests/data/test_635_B new file mode 100644 index 0000000..8cc813d --- /dev/null +++ b/geom_bottleneck/tests/data/test_635_B @@ -0,0 +1,2 @@ +528 622 +88 466 diff --git a/geom_bottleneck/tests/data/test_636_A b/geom_bottleneck/tests/data/test_636_A new file mode 100644 index 0000000..eee9635 --- /dev/null +++ b/geom_bottleneck/tests/data/test_636_A @@ -0,0 +1,2 @@ +285 617 +809 1379 diff --git a/geom_bottleneck/tests/data/test_636_B b/geom_bottleneck/tests/data/test_636_B new file mode 100644 index 0000000..e565845 --- /dev/null +++ b/geom_bottleneck/tests/data/test_636_B @@ -0,0 +1,2 @@ +162 1083 +842 1760 diff --git a/geom_bottleneck/tests/data/test_637_A b/geom_bottleneck/tests/data/test_637_A new file mode 100644 index 0000000..4ba4314 --- /dev/null +++ b/geom_bottleneck/tests/data/test_637_A @@ -0,0 +1,2 @@ +624 1031 +118 423 diff --git a/geom_bottleneck/tests/data/test_637_B b/geom_bottleneck/tests/data/test_637_B new file mode 100644 index 0000000..58aba0f --- /dev/null +++ b/geom_bottleneck/tests/data/test_637_B @@ -0,0 +1,2 @@ +453 958 +310 1149 diff --git a/geom_bottleneck/tests/data/test_638_A b/geom_bottleneck/tests/data/test_638_A new file mode 100644 index 0000000..4d993df --- /dev/null +++ b/geom_bottleneck/tests/data/test_638_A @@ -0,0 +1,2 @@ +683 1251 +811 1566 diff --git a/geom_bottleneck/tests/data/test_638_B b/geom_bottleneck/tests/data/test_638_B new file mode 100644 index 0000000..5750b40 --- /dev/null +++ b/geom_bottleneck/tests/data/test_638_B @@ -0,0 +1,2 @@ +489 1389 +408 858 diff --git a/geom_bottleneck/tests/data/test_639_A b/geom_bottleneck/tests/data/test_639_A new file mode 100644 index 0000000..1e86c9b --- /dev/null +++ b/geom_bottleneck/tests/data/test_639_A @@ -0,0 +1,2 @@ +907 1067 +329 547 diff --git a/geom_bottleneck/tests/data/test_639_B b/geom_bottleneck/tests/data/test_639_B new file mode 100644 index 0000000..758fe2d --- /dev/null +++ b/geom_bottleneck/tests/data/test_639_B @@ -0,0 +1,2 @@ +896 1777 +769 1237 diff --git a/geom_bottleneck/tests/data/test_640_A b/geom_bottleneck/tests/data/test_640_A new file mode 100644 index 0000000..981248a --- /dev/null +++ b/geom_bottleneck/tests/data/test_640_A @@ -0,0 +1,3 @@ +609 1601 +450 549 +123 590 diff --git a/geom_bottleneck/tests/data/test_640_B b/geom_bottleneck/tests/data/test_640_B new file mode 100644 index 0000000..d4f75ec --- /dev/null +++ b/geom_bottleneck/tests/data/test_640_B @@ -0,0 +1,3 @@ +392 752 +844 1720 +51 914 diff --git a/geom_bottleneck/tests/data/test_641_A b/geom_bottleneck/tests/data/test_641_A new file mode 100644 index 0000000..04100b0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_641_A @@ -0,0 +1,3 @@ +344 679 +413 673 +647 1475 diff --git a/geom_bottleneck/tests/data/test_641_B b/geom_bottleneck/tests/data/test_641_B new file mode 100644 index 0000000..840a640 --- /dev/null +++ b/geom_bottleneck/tests/data/test_641_B @@ -0,0 +1,3 @@ +688 1185 +529 598 +382 1269 diff --git a/geom_bottleneck/tests/data/test_642_A b/geom_bottleneck/tests/data/test_642_A new file mode 100644 index 0000000..a7da9ec --- /dev/null +++ b/geom_bottleneck/tests/data/test_642_A @@ -0,0 +1,3 @@ +886 1249 +24 684 +651 895 diff --git a/geom_bottleneck/tests/data/test_642_B b/geom_bottleneck/tests/data/test_642_B new file mode 100644 index 0000000..e25e427 --- /dev/null +++ b/geom_bottleneck/tests/data/test_642_B @@ -0,0 +1,3 @@ +779 977 +2 736 +978 1769 diff --git a/geom_bottleneck/tests/data/test_643_A b/geom_bottleneck/tests/data/test_643_A new file mode 100644 index 0000000..e818bdc --- /dev/null +++ b/geom_bottleneck/tests/data/test_643_A @@ -0,0 +1,3 @@ +891 1186 +391 1185 +921 1300 diff --git a/geom_bottleneck/tests/data/test_643_B b/geom_bottleneck/tests/data/test_643_B new file mode 100644 index 0000000..7a5f620 --- /dev/null +++ b/geom_bottleneck/tests/data/test_643_B @@ -0,0 +1,3 @@ +21 783 +84 583 +133 483 diff --git a/geom_bottleneck/tests/data/test_644_A b/geom_bottleneck/tests/data/test_644_A new file mode 100644 index 0000000..f6bc335 --- /dev/null +++ b/geom_bottleneck/tests/data/test_644_A @@ -0,0 +1,3 @@ +608 1036 +485 1247 +532 1302 diff --git a/geom_bottleneck/tests/data/test_644_B b/geom_bottleneck/tests/data/test_644_B new file mode 100644 index 0000000..109024d --- /dev/null +++ b/geom_bottleneck/tests/data/test_644_B @@ -0,0 +1,3 @@ +639 1059 +177 1044 +680 901 diff --git a/geom_bottleneck/tests/data/test_645_A b/geom_bottleneck/tests/data/test_645_A new file mode 100644 index 0000000..3f62c52 --- /dev/null +++ b/geom_bottleneck/tests/data/test_645_A @@ -0,0 +1,3 @@ +353 877 +730 1291 +610 992 diff --git a/geom_bottleneck/tests/data/test_645_B b/geom_bottleneck/tests/data/test_645_B new file mode 100644 index 0000000..f818161 --- /dev/null +++ b/geom_bottleneck/tests/data/test_645_B @@ -0,0 +1,3 @@ +854 1092 +395 737 +966 1230 diff --git a/geom_bottleneck/tests/data/test_646_A b/geom_bottleneck/tests/data/test_646_A new file mode 100644 index 0000000..7582a95 --- /dev/null +++ b/geom_bottleneck/tests/data/test_646_A @@ -0,0 +1,3 @@ +908 946 +490 875 +115 272 diff --git a/geom_bottleneck/tests/data/test_646_B b/geom_bottleneck/tests/data/test_646_B new file mode 100644 index 0000000..af402f8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_646_B @@ -0,0 +1,3 @@ +787 1300 +123 569 +222 235 diff --git a/geom_bottleneck/tests/data/test_647_A b/geom_bottleneck/tests/data/test_647_A new file mode 100644 index 0000000..caa678f --- /dev/null +++ b/geom_bottleneck/tests/data/test_647_A @@ -0,0 +1,3 @@ +165 217 +390 1141 +18 238 diff --git a/geom_bottleneck/tests/data/test_647_B b/geom_bottleneck/tests/data/test_647_B new file mode 100644 index 0000000..a135f9e --- /dev/null +++ b/geom_bottleneck/tests/data/test_647_B @@ -0,0 +1,3 @@ +244 641 +97 859 +575 1088 diff --git a/geom_bottleneck/tests/data/test_648_A b/geom_bottleneck/tests/data/test_648_A new file mode 100644 index 0000000..35e36b8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_648_A @@ -0,0 +1,3 @@ +461 1111 +285 713 +349 943 diff --git a/geom_bottleneck/tests/data/test_648_B b/geom_bottleneck/tests/data/test_648_B new file mode 100644 index 0000000..8a28c4a --- /dev/null +++ b/geom_bottleneck/tests/data/test_648_B @@ -0,0 +1,3 @@ +808 938 +293 374 +580 976 diff --git a/geom_bottleneck/tests/data/test_649_A b/geom_bottleneck/tests/data/test_649_A new file mode 100644 index 0000000..065cc77 --- /dev/null +++ b/geom_bottleneck/tests/data/test_649_A @@ -0,0 +1,3 @@ +57 802 +286 543 +403 1224 diff --git a/geom_bottleneck/tests/data/test_649_B b/geom_bottleneck/tests/data/test_649_B new file mode 100644 index 0000000..b23411e --- /dev/null +++ b/geom_bottleneck/tests/data/test_649_B @@ -0,0 +1,3 @@ +548 551 +21 683 +6 490 diff --git a/geom_bottleneck/tests/data/test_650_A b/geom_bottleneck/tests/data/test_650_A new file mode 100644 index 0000000..d87b7b4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_650_A @@ -0,0 +1,3 @@ +36 367 +273 389 +981 1711 diff --git a/geom_bottleneck/tests/data/test_650_B b/geom_bottleneck/tests/data/test_650_B new file mode 100644 index 0000000..f379676 --- /dev/null +++ b/geom_bottleneck/tests/data/test_650_B @@ -0,0 +1,3 @@ +659 1452 +551 1121 +551 949 diff --git a/geom_bottleneck/tests/data/test_651_A b/geom_bottleneck/tests/data/test_651_A new file mode 100644 index 0000000..ecf506a --- /dev/null +++ b/geom_bottleneck/tests/data/test_651_A @@ -0,0 +1,3 @@ +929 1425 +793 1446 +949 1437 diff --git a/geom_bottleneck/tests/data/test_651_B b/geom_bottleneck/tests/data/test_651_B new file mode 100644 index 0000000..f05128d --- /dev/null +++ b/geom_bottleneck/tests/data/test_651_B @@ -0,0 +1,3 @@ +860 1575 +476 1240 +126 1042 diff --git a/geom_bottleneck/tests/data/test_652_A b/geom_bottleneck/tests/data/test_652_A new file mode 100644 index 0000000..52d5bdf --- /dev/null +++ b/geom_bottleneck/tests/data/test_652_A @@ -0,0 +1,3 @@ +842 1066 +564 764 +68 267 diff --git a/geom_bottleneck/tests/data/test_652_B b/geom_bottleneck/tests/data/test_652_B new file mode 100644 index 0000000..2b12de5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_652_B @@ -0,0 +1,3 @@ +427 528 +404 1245 +800 994 diff --git a/geom_bottleneck/tests/data/test_653_A b/geom_bottleneck/tests/data/test_653_A new file mode 100644 index 0000000..b4bbdd3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_653_A @@ -0,0 +1,3 @@ +792 967 +574 1406 +175 533 diff --git a/geom_bottleneck/tests/data/test_653_B b/geom_bottleneck/tests/data/test_653_B new file mode 100644 index 0000000..f349693 --- /dev/null +++ b/geom_bottleneck/tests/data/test_653_B @@ -0,0 +1,3 @@ +421 822 +339 1231 +723 1052 diff --git a/geom_bottleneck/tests/data/test_654_A b/geom_bottleneck/tests/data/test_654_A new file mode 100644 index 0000000..d090ad8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_654_A @@ -0,0 +1,3 @@ +175 462 +829 1810 +494 1040 diff --git a/geom_bottleneck/tests/data/test_654_B b/geom_bottleneck/tests/data/test_654_B new file mode 100644 index 0000000..f9944d7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_654_B @@ -0,0 +1,3 @@ +656 658 +403 1260 +887 1883 diff --git a/geom_bottleneck/tests/data/test_655_A b/geom_bottleneck/tests/data/test_655_A new file mode 100644 index 0000000..9105397 --- /dev/null +++ b/geom_bottleneck/tests/data/test_655_A @@ -0,0 +1,3 @@ +1 419 +674 970 +633 664 diff --git a/geom_bottleneck/tests/data/test_655_B b/geom_bottleneck/tests/data/test_655_B new file mode 100644 index 0000000..9aa2ab6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_655_B @@ -0,0 +1,3 @@ +194 461 +376 901 +417 723 diff --git a/geom_bottleneck/tests/data/test_656_A b/geom_bottleneck/tests/data/test_656_A new file mode 100644 index 0000000..bcdfd3c --- /dev/null +++ b/geom_bottleneck/tests/data/test_656_A @@ -0,0 +1,3 @@ +707 825 +811 1475 +344 915 diff --git a/geom_bottleneck/tests/data/test_656_B b/geom_bottleneck/tests/data/test_656_B new file mode 100644 index 0000000..5ee0ab0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_656_B @@ -0,0 +1,3 @@ +928 1504 +366 991 +506 1194 diff --git a/geom_bottleneck/tests/data/test_657_A b/geom_bottleneck/tests/data/test_657_A new file mode 100644 index 0000000..7d39a99 --- /dev/null +++ b/geom_bottleneck/tests/data/test_657_A @@ -0,0 +1,3 @@ +101 439 +539 1442 +955 1560 diff --git a/geom_bottleneck/tests/data/test_657_B b/geom_bottleneck/tests/data/test_657_B new file mode 100644 index 0000000..3b9d726 --- /dev/null +++ b/geom_bottleneck/tests/data/test_657_B @@ -0,0 +1,3 @@ +505 966 +757 1602 +615 1309 diff --git a/geom_bottleneck/tests/data/test_658_A b/geom_bottleneck/tests/data/test_658_A new file mode 100644 index 0000000..33f8b08 --- /dev/null +++ b/geom_bottleneck/tests/data/test_658_A @@ -0,0 +1,3 @@ +829 1642 +95 139 +435 558 diff --git a/geom_bottleneck/tests/data/test_658_B b/geom_bottleneck/tests/data/test_658_B new file mode 100644 index 0000000..b131e5d --- /dev/null +++ b/geom_bottleneck/tests/data/test_658_B @@ -0,0 +1,3 @@ +171 1171 +240 780 +363 720 diff --git a/geom_bottleneck/tests/data/test_659_A b/geom_bottleneck/tests/data/test_659_A new file mode 100644 index 0000000..974d216 --- /dev/null +++ b/geom_bottleneck/tests/data/test_659_A @@ -0,0 +1,3 @@ +409 1266 +680 909 +942 1270 diff --git a/geom_bottleneck/tests/data/test_659_B b/geom_bottleneck/tests/data/test_659_B new file mode 100644 index 0000000..c3cfbeb --- /dev/null +++ b/geom_bottleneck/tests/data/test_659_B @@ -0,0 +1,3 @@ +318 1245 +561 1013 +787 1275 diff --git a/geom_bottleneck/tests/data/test_660_A b/geom_bottleneck/tests/data/test_660_A new file mode 100644 index 0000000..1c408f3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_660_A @@ -0,0 +1,4 @@ +526 757 +355 743 +250 1221 +35 439 diff --git a/geom_bottleneck/tests/data/test_660_B b/geom_bottleneck/tests/data/test_660_B new file mode 100644 index 0000000..5fffa69 --- /dev/null +++ b/geom_bottleneck/tests/data/test_660_B @@ -0,0 +1,4 @@ +348 611 +127 398 +839 1650 +136 803 diff --git a/geom_bottleneck/tests/data/test_661_A b/geom_bottleneck/tests/data/test_661_A new file mode 100644 index 0000000..df0d8ad --- /dev/null +++ b/geom_bottleneck/tests/data/test_661_A @@ -0,0 +1,4 @@ +769 905 +534 1227 +410 422 +937 1744 diff --git a/geom_bottleneck/tests/data/test_661_B b/geom_bottleneck/tests/data/test_661_B new file mode 100644 index 0000000..56cfa0c --- /dev/null +++ b/geom_bottleneck/tests/data/test_661_B @@ -0,0 +1,4 @@ +19 350 +255 390 +910 1001 +853 1070 diff --git a/geom_bottleneck/tests/data/test_662_A b/geom_bottleneck/tests/data/test_662_A new file mode 100644 index 0000000..cb65a38 --- /dev/null +++ b/geom_bottleneck/tests/data/test_662_A @@ -0,0 +1,4 @@ +394 674 +364 1209 +763 1333 +344 1294 diff --git a/geom_bottleneck/tests/data/test_662_B b/geom_bottleneck/tests/data/test_662_B new file mode 100644 index 0000000..92f0ee6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_662_B @@ -0,0 +1,4 @@ +324 939 +829 987 +210 998 +519 756 diff --git a/geom_bottleneck/tests/data/test_663_A b/geom_bottleneck/tests/data/test_663_A new file mode 100644 index 0000000..ed35031 --- /dev/null +++ b/geom_bottleneck/tests/data/test_663_A @@ -0,0 +1,4 @@ +659 1254 +201 1188 +660 811 +630 1044 diff --git a/geom_bottleneck/tests/data/test_663_B b/geom_bottleneck/tests/data/test_663_B new file mode 100644 index 0000000..6a6126c --- /dev/null +++ b/geom_bottleneck/tests/data/test_663_B @@ -0,0 +1,4 @@ +873 914 +441 1063 +135 468 +584 620 diff --git a/geom_bottleneck/tests/data/test_664_A b/geom_bottleneck/tests/data/test_664_A new file mode 100644 index 0000000..59f6bfa --- /dev/null +++ b/geom_bottleneck/tests/data/test_664_A @@ -0,0 +1,4 @@ +753 1625 +353 1109 +565 650 +321 708 diff --git a/geom_bottleneck/tests/data/test_664_B b/geom_bottleneck/tests/data/test_664_B new file mode 100644 index 0000000..6b34a5f --- /dev/null +++ b/geom_bottleneck/tests/data/test_664_B @@ -0,0 +1,4 @@ +664 794 +572 1058 +754 1119 +899 1445 diff --git a/geom_bottleneck/tests/data/test_665_A b/geom_bottleneck/tests/data/test_665_A new file mode 100644 index 0000000..ff6ce72 --- /dev/null +++ b/geom_bottleneck/tests/data/test_665_A @@ -0,0 +1,4 @@ +661 1260 +232 833 +820 826 +32 139 diff --git a/geom_bottleneck/tests/data/test_665_B b/geom_bottleneck/tests/data/test_665_B new file mode 100644 index 0000000..9a5d4a9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_665_B @@ -0,0 +1,4 @@ +466 1319 +809 1762 +165 235 +636 1460 diff --git a/geom_bottleneck/tests/data/test_666_A b/geom_bottleneck/tests/data/test_666_A new file mode 100644 index 0000000..455e262 --- /dev/null +++ b/geom_bottleneck/tests/data/test_666_A @@ -0,0 +1,4 @@ +496 1447 +606 1017 +578 767 +971 1768 diff --git a/geom_bottleneck/tests/data/test_666_B b/geom_bottleneck/tests/data/test_666_B new file mode 100644 index 0000000..0c9069e --- /dev/null +++ b/geom_bottleneck/tests/data/test_666_B @@ -0,0 +1,4 @@ +578 896 +731 1115 +455 1129 +649 1421 diff --git a/geom_bottleneck/tests/data/test_667_A b/geom_bottleneck/tests/data/test_667_A new file mode 100644 index 0000000..054d14e --- /dev/null +++ b/geom_bottleneck/tests/data/test_667_A @@ -0,0 +1,4 @@ +537 1030 +887 1179 +644 905 +403 1382 diff --git a/geom_bottleneck/tests/data/test_667_B b/geom_bottleneck/tests/data/test_667_B new file mode 100644 index 0000000..a4a432a --- /dev/null +++ b/geom_bottleneck/tests/data/test_667_B @@ -0,0 +1,4 @@ +981 1100 +582 1487 +603 1448 +526 1059 diff --git a/geom_bottleneck/tests/data/test_668_A b/geom_bottleneck/tests/data/test_668_A new file mode 100644 index 0000000..00c5554 --- /dev/null +++ b/geom_bottleneck/tests/data/test_668_A @@ -0,0 +1,4 @@ +376 564 +803 1414 +324 973 +901 1266 diff --git a/geom_bottleneck/tests/data/test_668_B b/geom_bottleneck/tests/data/test_668_B new file mode 100644 index 0000000..5b7e07c --- /dev/null +++ b/geom_bottleneck/tests/data/test_668_B @@ -0,0 +1,4 @@ +901 1627 +805 1168 +867 1069 +156 291 diff --git a/geom_bottleneck/tests/data/test_669_A b/geom_bottleneck/tests/data/test_669_A new file mode 100644 index 0000000..2abb014 --- /dev/null +++ b/geom_bottleneck/tests/data/test_669_A @@ -0,0 +1,4 @@ +282 848 +560 1190 +152 342 +998 1524 diff --git a/geom_bottleneck/tests/data/test_669_B b/geom_bottleneck/tests/data/test_669_B new file mode 100644 index 0000000..5694ce9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_669_B @@ -0,0 +1,4 @@ +398 731 +835 1681 +791 1026 +939 1024 diff --git a/geom_bottleneck/tests/data/test_670_A b/geom_bottleneck/tests/data/test_670_A new file mode 100644 index 0000000..e7ae4f1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_670_A @@ -0,0 +1,4 @@ +665 1146 +512 1332 +375 595 +566 1211 diff --git a/geom_bottleneck/tests/data/test_670_B b/geom_bottleneck/tests/data/test_670_B new file mode 100644 index 0000000..8f6b057 --- /dev/null +++ b/geom_bottleneck/tests/data/test_670_B @@ -0,0 +1,4 @@ +203 469 +966 1146 +342 638 +290 498 diff --git a/geom_bottleneck/tests/data/test_671_A b/geom_bottleneck/tests/data/test_671_A new file mode 100644 index 0000000..8ac70f3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_671_A @@ -0,0 +1,4 @@ +533 1333 +682 1127 +928 1703 +487 781 diff --git a/geom_bottleneck/tests/data/test_671_B b/geom_bottleneck/tests/data/test_671_B new file mode 100644 index 0000000..bcb5f1b --- /dev/null +++ b/geom_bottleneck/tests/data/test_671_B @@ -0,0 +1,4 @@ +336 1128 +992 1292 +931 1497 +622 1165 diff --git a/geom_bottleneck/tests/data/test_672_A b/geom_bottleneck/tests/data/test_672_A new file mode 100644 index 0000000..4ca2b19 --- /dev/null +++ b/geom_bottleneck/tests/data/test_672_A @@ -0,0 +1,4 @@ +30 600 +893 1394 +112 776 +434 905 diff --git a/geom_bottleneck/tests/data/test_672_B b/geom_bottleneck/tests/data/test_672_B new file mode 100644 index 0000000..29b8d76 --- /dev/null +++ b/geom_bottleneck/tests/data/test_672_B @@ -0,0 +1,4 @@ +684 1559 +372 1171 +113 700 +180 865 diff --git a/geom_bottleneck/tests/data/test_673_A b/geom_bottleneck/tests/data/test_673_A new file mode 100644 index 0000000..f6e6e4a --- /dev/null +++ b/geom_bottleneck/tests/data/test_673_A @@ -0,0 +1,4 @@ +894 1455 +676 1502 +402 976 +863 1258 diff --git a/geom_bottleneck/tests/data/test_673_B b/geom_bottleneck/tests/data/test_673_B new file mode 100644 index 0000000..01ac9c7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_673_B @@ -0,0 +1,4 @@ +190 473 +420 1059 +187 827 +482 1365 diff --git a/geom_bottleneck/tests/data/test_674_A b/geom_bottleneck/tests/data/test_674_A new file mode 100644 index 0000000..8bbf6ad --- /dev/null +++ b/geom_bottleneck/tests/data/test_674_A @@ -0,0 +1,4 @@ +89 681 +460 781 +500 679 +786 827 diff --git a/geom_bottleneck/tests/data/test_674_B b/geom_bottleneck/tests/data/test_674_B new file mode 100644 index 0000000..ddebd4c --- /dev/null +++ b/geom_bottleneck/tests/data/test_674_B @@ -0,0 +1,4 @@ +445 1261 +769 1735 +5 81 +964 1477 diff --git a/geom_bottleneck/tests/data/test_675_A b/geom_bottleneck/tests/data/test_675_A new file mode 100644 index 0000000..30b36bb --- /dev/null +++ b/geom_bottleneck/tests/data/test_675_A @@ -0,0 +1,4 @@ +507 965 +1000 1816 +946 1201 +926 1637 diff --git a/geom_bottleneck/tests/data/test_675_B b/geom_bottleneck/tests/data/test_675_B new file mode 100644 index 0000000..c0722ef --- /dev/null +++ b/geom_bottleneck/tests/data/test_675_B @@ -0,0 +1,4 @@ +302 1162 +795 1527 +602 747 +646 683 diff --git a/geom_bottleneck/tests/data/test_676_A b/geom_bottleneck/tests/data/test_676_A new file mode 100644 index 0000000..b43ef5e --- /dev/null +++ b/geom_bottleneck/tests/data/test_676_A @@ -0,0 +1,4 @@ +343 1040 +556 758 +286 983 +467 700 diff --git a/geom_bottleneck/tests/data/test_676_B b/geom_bottleneck/tests/data/test_676_B new file mode 100644 index 0000000..59b2fb6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_676_B @@ -0,0 +1,4 @@ +446 1062 +65 988 +159 1102 +920 1553 diff --git a/geom_bottleneck/tests/data/test_677_A b/geom_bottleneck/tests/data/test_677_A new file mode 100644 index 0000000..4d9d36e --- /dev/null +++ b/geom_bottleneck/tests/data/test_677_A @@ -0,0 +1,4 @@ +355 949 +561 704 +153 945 +407 1134 diff --git a/geom_bottleneck/tests/data/test_677_B b/geom_bottleneck/tests/data/test_677_B new file mode 100644 index 0000000..4edf573 --- /dev/null +++ b/geom_bottleneck/tests/data/test_677_B @@ -0,0 +1,4 @@ +758 962 +354 535 +115 782 +309 1207 diff --git a/geom_bottleneck/tests/data/test_678_A b/geom_bottleneck/tests/data/test_678_A new file mode 100644 index 0000000..54ab668 --- /dev/null +++ b/geom_bottleneck/tests/data/test_678_A @@ -0,0 +1,4 @@ +946 1489 +594 1446 +686 986 +200 493 diff --git a/geom_bottleneck/tests/data/test_678_B b/geom_bottleneck/tests/data/test_678_B new file mode 100644 index 0000000..f695f5f --- /dev/null +++ b/geom_bottleneck/tests/data/test_678_B @@ -0,0 +1,4 @@ +708 725 +761 1309 +47 963 +61 320 diff --git a/geom_bottleneck/tests/data/test_679_A b/geom_bottleneck/tests/data/test_679_A new file mode 100644 index 0000000..33e4ce8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_679_A @@ -0,0 +1,4 @@ +153 950 +179 1047 +736 845 +943 1760 diff --git a/geom_bottleneck/tests/data/test_679_B b/geom_bottleneck/tests/data/test_679_B new file mode 100644 index 0000000..a99ec77 --- /dev/null +++ b/geom_bottleneck/tests/data/test_679_B @@ -0,0 +1,4 @@ +744 1423 +669 1350 +989 1062 +57 823 diff --git a/geom_bottleneck/tests/data/test_680_A b/geom_bottleneck/tests/data/test_680_A new file mode 100644 index 0000000..4bb43a8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_680_A @@ -0,0 +1,5 @@ +102 183 +847 1835 +300 1098 +953 1849 +327 1070 diff --git a/geom_bottleneck/tests/data/test_680_B b/geom_bottleneck/tests/data/test_680_B new file mode 100644 index 0000000..efb704f --- /dev/null +++ b/geom_bottleneck/tests/data/test_680_B @@ -0,0 +1,5 @@ +917 1904 +340 1190 +128 516 +695 1474 +450 628 diff --git a/geom_bottleneck/tests/data/test_681_A b/geom_bottleneck/tests/data/test_681_A new file mode 100644 index 0000000..5eb7d6a --- /dev/null +++ b/geom_bottleneck/tests/data/test_681_A @@ -0,0 +1,5 @@ +882 1558 +108 921 +479 653 +329 533 +643 952 diff --git a/geom_bottleneck/tests/data/test_681_B b/geom_bottleneck/tests/data/test_681_B new file mode 100644 index 0000000..092ddc5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_681_B @@ -0,0 +1,5 @@ +155 350 +686 1081 +791 900 +402 653 +364 610 diff --git a/geom_bottleneck/tests/data/test_682_A b/geom_bottleneck/tests/data/test_682_A new file mode 100644 index 0000000..7898cba --- /dev/null +++ b/geom_bottleneck/tests/data/test_682_A @@ -0,0 +1,5 @@ +548 632 +839 990 +856 1008 +719 1091 +532 1445 diff --git a/geom_bottleneck/tests/data/test_682_B b/geom_bottleneck/tests/data/test_682_B new file mode 100644 index 0000000..f5b1d81 --- /dev/null +++ b/geom_bottleneck/tests/data/test_682_B @@ -0,0 +1,5 @@ +341 429 +146 682 +40 962 +543 1339 +277 944 diff --git a/geom_bottleneck/tests/data/test_683_A b/geom_bottleneck/tests/data/test_683_A new file mode 100644 index 0000000..3661bfc --- /dev/null +++ b/geom_bottleneck/tests/data/test_683_A @@ -0,0 +1,5 @@ +227 587 +365 708 +565 1465 +240 248 +610 1328 diff --git a/geom_bottleneck/tests/data/test_683_B b/geom_bottleneck/tests/data/test_683_B new file mode 100644 index 0000000..62c998b --- /dev/null +++ b/geom_bottleneck/tests/data/test_683_B @@ -0,0 +1,5 @@ +741 1553 +314 914 +980 1322 +398 1163 +304 901 diff --git a/geom_bottleneck/tests/data/test_684_A b/geom_bottleneck/tests/data/test_684_A new file mode 100644 index 0000000..b22afe3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_684_A @@ -0,0 +1,5 @@ +196 1047 +489 739 +11 758 +204 1069 +959 976 diff --git a/geom_bottleneck/tests/data/test_684_B b/geom_bottleneck/tests/data/test_684_B new file mode 100644 index 0000000..cbede63 --- /dev/null +++ b/geom_bottleneck/tests/data/test_684_B @@ -0,0 +1,5 @@ +391 1180 +229 906 +246 1219 +564 1171 +797 1273 diff --git a/geom_bottleneck/tests/data/test_685_A b/geom_bottleneck/tests/data/test_685_A new file mode 100644 index 0000000..c4bd0e9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_685_A @@ -0,0 +1,5 @@ +628 762 +148 921 +694 1155 +865 1298 +365 1337 diff --git a/geom_bottleneck/tests/data/test_685_B b/geom_bottleneck/tests/data/test_685_B new file mode 100644 index 0000000..984dd98 --- /dev/null +++ b/geom_bottleneck/tests/data/test_685_B @@ -0,0 +1,5 @@ +504 1226 +608 1576 +256 475 +479 884 +384 656 diff --git a/geom_bottleneck/tests/data/test_686_A b/geom_bottleneck/tests/data/test_686_A new file mode 100644 index 0000000..e498d5c --- /dev/null +++ b/geom_bottleneck/tests/data/test_686_A @@ -0,0 +1,5 @@ +839 1291 +140 808 +539 720 +928 1729 +881 1126 diff --git a/geom_bottleneck/tests/data/test_686_B b/geom_bottleneck/tests/data/test_686_B new file mode 100644 index 0000000..56ada59 --- /dev/null +++ b/geom_bottleneck/tests/data/test_686_B @@ -0,0 +1,5 @@ +280 962 +935 1205 +328 1022 +27 247 +554 732 diff --git a/geom_bottleneck/tests/data/test_687_A b/geom_bottleneck/tests/data/test_687_A new file mode 100644 index 0000000..c31c2d2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_687_A @@ -0,0 +1,5 @@ +323 954 +507 885 +533 1044 +679 1402 +43 918 diff --git a/geom_bottleneck/tests/data/test_687_B b/geom_bottleneck/tests/data/test_687_B new file mode 100644 index 0000000..471eeed --- /dev/null +++ b/geom_bottleneck/tests/data/test_687_B @@ -0,0 +1,5 @@ +243 823 +269 1215 +449 1214 +24 777 +705 1558 diff --git a/geom_bottleneck/tests/data/test_688_A b/geom_bottleneck/tests/data/test_688_A new file mode 100644 index 0000000..7396099 --- /dev/null +++ b/geom_bottleneck/tests/data/test_688_A @@ -0,0 +1,5 @@ +471 989 +319 432 +130 900 +856 1389 +422 635 diff --git a/geom_bottleneck/tests/data/test_688_B b/geom_bottleneck/tests/data/test_688_B new file mode 100644 index 0000000..e133e74 --- /dev/null +++ b/geom_bottleneck/tests/data/test_688_B @@ -0,0 +1,5 @@ +13 373 +575 1199 +553 1347 +158 1148 +111 393 diff --git a/geom_bottleneck/tests/data/test_689_A b/geom_bottleneck/tests/data/test_689_A new file mode 100644 index 0000000..72febe7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_689_A @@ -0,0 +1,5 @@ +451 1035 +293 380 +400 648 +9 681 +85 96 diff --git a/geom_bottleneck/tests/data/test_689_B b/geom_bottleneck/tests/data/test_689_B new file mode 100644 index 0000000..f684387 --- /dev/null +++ b/geom_bottleneck/tests/data/test_689_B @@ -0,0 +1,5 @@ +431 1117 +40 969 +54 1026 +297 710 +722 1143 diff --git a/geom_bottleneck/tests/data/test_690_A b/geom_bottleneck/tests/data/test_690_A new file mode 100644 index 0000000..4106f49 --- /dev/null +++ b/geom_bottleneck/tests/data/test_690_A @@ -0,0 +1,5 @@ +624 1464 +228 1205 +638 876 +896 1632 +564 1378 diff --git a/geom_bottleneck/tests/data/test_690_B b/geom_bottleneck/tests/data/test_690_B new file mode 100644 index 0000000..d452cff --- /dev/null +++ b/geom_bottleneck/tests/data/test_690_B @@ -0,0 +1,5 @@ +745 1386 +574 898 +472 1427 +922 1325 +592 1053 diff --git a/geom_bottleneck/tests/data/test_691_A b/geom_bottleneck/tests/data/test_691_A new file mode 100644 index 0000000..b6c906e --- /dev/null +++ b/geom_bottleneck/tests/data/test_691_A @@ -0,0 +1,5 @@ +291 1111 +75 251 +47 913 +753 1632 +582 739 diff --git a/geom_bottleneck/tests/data/test_691_B b/geom_bottleneck/tests/data/test_691_B new file mode 100644 index 0000000..57e58ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_691_B @@ -0,0 +1,5 @@ +264 911 +478 839 +182 258 +336 1121 +915 1764 diff --git a/geom_bottleneck/tests/data/test_692_A b/geom_bottleneck/tests/data/test_692_A new file mode 100644 index 0000000..1686c25 --- /dev/null +++ b/geom_bottleneck/tests/data/test_692_A @@ -0,0 +1,5 @@ +856 1460 +852 1085 +246 328 +508 1202 +900 1487 diff --git a/geom_bottleneck/tests/data/test_692_B b/geom_bottleneck/tests/data/test_692_B new file mode 100644 index 0000000..bf6174a --- /dev/null +++ b/geom_bottleneck/tests/data/test_692_B @@ -0,0 +1,5 @@ +624 1180 +247 889 +218 373 +823 1637 +439 597 diff --git a/geom_bottleneck/tests/data/test_693_A b/geom_bottleneck/tests/data/test_693_A new file mode 100644 index 0000000..ea16ba6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_693_A @@ -0,0 +1,5 @@ +37 175 +952 1934 +808 843 +742 822 +75 863 diff --git a/geom_bottleneck/tests/data/test_693_B b/geom_bottleneck/tests/data/test_693_B new file mode 100644 index 0000000..52c8f97 --- /dev/null +++ b/geom_bottleneck/tests/data/test_693_B @@ -0,0 +1,5 @@ +431 1287 +490 765 +552 843 +179 1131 +334 732 diff --git a/geom_bottleneck/tests/data/test_694_A b/geom_bottleneck/tests/data/test_694_A new file mode 100644 index 0000000..e577a0f --- /dev/null +++ b/geom_bottleneck/tests/data/test_694_A @@ -0,0 +1,5 @@ +917 1066 +928 1036 +611 1593 +682 1661 +561 810 diff --git a/geom_bottleneck/tests/data/test_694_B b/geom_bottleneck/tests/data/test_694_B new file mode 100644 index 0000000..e406840 --- /dev/null +++ b/geom_bottleneck/tests/data/test_694_B @@ -0,0 +1,5 @@ +754 918 +735 1730 +430 1284 +588 986 +56 791 diff --git a/geom_bottleneck/tests/data/test_695_A b/geom_bottleneck/tests/data/test_695_A new file mode 100644 index 0000000..ef9cacb --- /dev/null +++ b/geom_bottleneck/tests/data/test_695_A @@ -0,0 +1,5 @@ +219 629 +438 1008 +695 1385 +137 844 +394 1126 diff --git a/geom_bottleneck/tests/data/test_695_B b/geom_bottleneck/tests/data/test_695_B new file mode 100644 index 0000000..f2bb91b --- /dev/null +++ b/geom_bottleneck/tests/data/test_695_B @@ -0,0 +1,5 @@ +556 1218 +942 975 +730 1199 +110 947 +867 1613 diff --git a/geom_bottleneck/tests/data/test_696_A b/geom_bottleneck/tests/data/test_696_A new file mode 100644 index 0000000..71fa19f --- /dev/null +++ b/geom_bottleneck/tests/data/test_696_A @@ -0,0 +1,5 @@ +929 1104 +287 561 +801 1419 +549 1265 +758 795 diff --git a/geom_bottleneck/tests/data/test_696_B b/geom_bottleneck/tests/data/test_696_B new file mode 100644 index 0000000..a964c63 --- /dev/null +++ b/geom_bottleneck/tests/data/test_696_B @@ -0,0 +1,5 @@ +446 641 +863 1426 +0 382 +659 945 +707 715 diff --git a/geom_bottleneck/tests/data/test_697_A b/geom_bottleneck/tests/data/test_697_A new file mode 100644 index 0000000..848e417 --- /dev/null +++ b/geom_bottleneck/tests/data/test_697_A @@ -0,0 +1,5 @@ +876 1854 +147 864 +249 1095 +965 1723 +548 865 diff --git a/geom_bottleneck/tests/data/test_697_B b/geom_bottleneck/tests/data/test_697_B new file mode 100644 index 0000000..98a8d15 --- /dev/null +++ b/geom_bottleneck/tests/data/test_697_B @@ -0,0 +1,5 @@ +478 1175 +40 533 +212 388 +865 1736 +697 1335 diff --git a/geom_bottleneck/tests/data/test_698_A b/geom_bottleneck/tests/data/test_698_A new file mode 100644 index 0000000..a90620d --- /dev/null +++ b/geom_bottleneck/tests/data/test_698_A @@ -0,0 +1,5 @@ +714 1561 +967 1649 +57 65 +560 807 +451 1000 diff --git a/geom_bottleneck/tests/data/test_698_B b/geom_bottleneck/tests/data/test_698_B new file mode 100644 index 0000000..ef52ae0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_698_B @@ -0,0 +1,5 @@ +909 1809 +266 758 +894 1395 +495 1481 +91 646 diff --git a/geom_bottleneck/tests/data/test_699_A b/geom_bottleneck/tests/data/test_699_A new file mode 100644 index 0000000..e00215d --- /dev/null +++ b/geom_bottleneck/tests/data/test_699_A @@ -0,0 +1,5 @@ +749 799 +150 307 +463 1009 +503 1047 +613 1549 diff --git a/geom_bottleneck/tests/data/test_699_B b/geom_bottleneck/tests/data/test_699_B new file mode 100644 index 0000000..0fff210 --- /dev/null +++ b/geom_bottleneck/tests/data/test_699_B @@ -0,0 +1,5 @@ +915 1430 +582 685 +994 1491 +227 869 +251 1173 diff --git a/geom_bottleneck/tests/data/test_700_A b/geom_bottleneck/tests/data/test_700_A new file mode 100644 index 0000000..9425b73 --- /dev/null +++ b/geom_bottleneck/tests/data/test_700_A @@ -0,0 +1,6 @@ +313 977 +396 888 +244 339 +474 1072 +191 1069 +519 940 diff --git a/geom_bottleneck/tests/data/test_700_B b/geom_bottleneck/tests/data/test_700_B new file mode 100644 index 0000000..19944b2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_700_B @@ -0,0 +1,6 @@ +547 588 +852 1072 +34 817 +54 441 +222 413 +184 888 diff --git a/geom_bottleneck/tests/data/test_701_A b/geom_bottleneck/tests/data/test_701_A new file mode 100644 index 0000000..062d6fb --- /dev/null +++ b/geom_bottleneck/tests/data/test_701_A @@ -0,0 +1,6 @@ +582 910 +701 1226 +195 619 +541 668 +275 1161 +322 1041 diff --git a/geom_bottleneck/tests/data/test_701_B b/geom_bottleneck/tests/data/test_701_B new file mode 100644 index 0000000..3149c7c --- /dev/null +++ b/geom_bottleneck/tests/data/test_701_B @@ -0,0 +1,6 @@ +868 1747 +559 1027 +635 1354 +337 541 +630 1220 +860 1681 diff --git a/geom_bottleneck/tests/data/test_702_A b/geom_bottleneck/tests/data/test_702_A new file mode 100644 index 0000000..2a82935 --- /dev/null +++ b/geom_bottleneck/tests/data/test_702_A @@ -0,0 +1,6 @@ +378 869 +890 1016 +13 941 +706 1365 +879 1261 +334 864 diff --git a/geom_bottleneck/tests/data/test_702_B b/geom_bottleneck/tests/data/test_702_B new file mode 100644 index 0000000..c3854d5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_702_B @@ -0,0 +1,6 @@ +381 525 +852 1350 +825 884 +984 1542 +614 942 +74 652 diff --git a/geom_bottleneck/tests/data/test_703_A b/geom_bottleneck/tests/data/test_703_A new file mode 100644 index 0000000..fb434c0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_703_A @@ -0,0 +1,6 @@ +551 801 +116 205 +364 382 +883 1597 +834 1212 +737 988 diff --git a/geom_bottleneck/tests/data/test_703_B b/geom_bottleneck/tests/data/test_703_B new file mode 100644 index 0000000..f8af9dd --- /dev/null +++ b/geom_bottleneck/tests/data/test_703_B @@ -0,0 +1,6 @@ +661 695 +904 1528 +65 986 +691 785 +98 1000 +102 592 diff --git a/geom_bottleneck/tests/data/test_704_A b/geom_bottleneck/tests/data/test_704_A new file mode 100644 index 0000000..a89a1aa --- /dev/null +++ b/geom_bottleneck/tests/data/test_704_A @@ -0,0 +1,6 @@ +679 1424 +746 1074 +761 1546 +360 934 +139 855 +942 1002 diff --git a/geom_bottleneck/tests/data/test_704_B b/geom_bottleneck/tests/data/test_704_B new file mode 100644 index 0000000..5abc5fa --- /dev/null +++ b/geom_bottleneck/tests/data/test_704_B @@ -0,0 +1,6 @@ +781 1388 +48 645 +242 294 +979 1071 +348 1065 +701 1351 diff --git a/geom_bottleneck/tests/data/test_705_A b/geom_bottleneck/tests/data/test_705_A new file mode 100644 index 0000000..924a661 --- /dev/null +++ b/geom_bottleneck/tests/data/test_705_A @@ -0,0 +1,6 @@ +123 751 +405 935 +708 1217 +540 708 +810 1047 +346 1088 diff --git a/geom_bottleneck/tests/data/test_705_B b/geom_bottleneck/tests/data/test_705_B new file mode 100644 index 0000000..0681a80 --- /dev/null +++ b/geom_bottleneck/tests/data/test_705_B @@ -0,0 +1,6 @@ +175 1150 +840 1056 +180 658 +805 1787 +123 467 +947 1539 diff --git a/geom_bottleneck/tests/data/test_706_A b/geom_bottleneck/tests/data/test_706_A new file mode 100644 index 0000000..0a249be --- /dev/null +++ b/geom_bottleneck/tests/data/test_706_A @@ -0,0 +1,6 @@ +900 1181 +555 663 +1 750 +883 1197 +33 518 +450 808 diff --git a/geom_bottleneck/tests/data/test_706_B b/geom_bottleneck/tests/data/test_706_B new file mode 100644 index 0000000..624923c --- /dev/null +++ b/geom_bottleneck/tests/data/test_706_B @@ -0,0 +1,6 @@ +682 818 +814 1240 +900 1777 +399 967 +420 921 +723 1022 diff --git a/geom_bottleneck/tests/data/test_707_A b/geom_bottleneck/tests/data/test_707_A new file mode 100644 index 0000000..a251b74 --- /dev/null +++ b/geom_bottleneck/tests/data/test_707_A @@ -0,0 +1,6 @@ +991 1398 +632 1322 +635 1448 +97 955 +793 1016 +995 1832 diff --git a/geom_bottleneck/tests/data/test_707_B b/geom_bottleneck/tests/data/test_707_B new file mode 100644 index 0000000..2647b31 --- /dev/null +++ b/geom_bottleneck/tests/data/test_707_B @@ -0,0 +1,6 @@ +320 551 +552 1125 +383 551 +891 1032 +272 1038 +925 1695 diff --git a/geom_bottleneck/tests/data/test_708_A b/geom_bottleneck/tests/data/test_708_A new file mode 100644 index 0000000..ddc601a --- /dev/null +++ b/geom_bottleneck/tests/data/test_708_A @@ -0,0 +1,6 @@ +681 786 +125 980 +146 721 +769 1207 +504 1208 +724 985 diff --git a/geom_bottleneck/tests/data/test_708_B b/geom_bottleneck/tests/data/test_708_B new file mode 100644 index 0000000..0a64a4f --- /dev/null +++ b/geom_bottleneck/tests/data/test_708_B @@ -0,0 +1,6 @@ +571 697 +763 1635 +573 623 +683 1438 +783 1580 +541 1374 diff --git a/geom_bottleneck/tests/data/test_709_A b/geom_bottleneck/tests/data/test_709_A new file mode 100644 index 0000000..2d3aa30 --- /dev/null +++ b/geom_bottleneck/tests/data/test_709_A @@ -0,0 +1,6 @@ +704 1089 +764 1349 +322 1100 +731 1284 +42 525 +49 602 diff --git a/geom_bottleneck/tests/data/test_709_B b/geom_bottleneck/tests/data/test_709_B new file mode 100644 index 0000000..c5f7233 --- /dev/null +++ b/geom_bottleneck/tests/data/test_709_B @@ -0,0 +1,6 @@ +435 502 +150 1140 +356 1273 +592 1292 +552 1331 +905 1713 diff --git a/geom_bottleneck/tests/data/test_710_A b/geom_bottleneck/tests/data/test_710_A new file mode 100644 index 0000000..e611f5a --- /dev/null +++ b/geom_bottleneck/tests/data/test_710_A @@ -0,0 +1,6 @@ +257 589 +18 966 +482 1110 +588 763 +989 1857 +479 494 diff --git a/geom_bottleneck/tests/data/test_710_B b/geom_bottleneck/tests/data/test_710_B new file mode 100644 index 0000000..cd9cedb --- /dev/null +++ b/geom_bottleneck/tests/data/test_710_B @@ -0,0 +1,6 @@ +2 263 +642 884 +72 321 +632 1186 +633 1310 +263 1219 diff --git a/geom_bottleneck/tests/data/test_711_A b/geom_bottleneck/tests/data/test_711_A new file mode 100644 index 0000000..900b87a --- /dev/null +++ b/geom_bottleneck/tests/data/test_711_A @@ -0,0 +1,6 @@ +954 1912 +243 556 +758 967 +836 1102 +184 1134 +401 434 diff --git a/geom_bottleneck/tests/data/test_711_B b/geom_bottleneck/tests/data/test_711_B new file mode 100644 index 0000000..31dd505 --- /dev/null +++ b/geom_bottleneck/tests/data/test_711_B @@ -0,0 +1,6 @@ +454 1045 +606 646 +999 1478 +398 845 +743 1192 +926 1080 diff --git a/geom_bottleneck/tests/data/test_712_A b/geom_bottleneck/tests/data/test_712_A new file mode 100644 index 0000000..15bc0a2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_712_A @@ -0,0 +1,6 @@ +395 1052 +984 1461 +792 801 +652 1183 +411 744 +830 876 diff --git a/geom_bottleneck/tests/data/test_712_B b/geom_bottleneck/tests/data/test_712_B new file mode 100644 index 0000000..3071ea5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_712_B @@ -0,0 +1,6 @@ +16 294 +910 1274 +495 1113 +4 944 +244 512 +164 1074 diff --git a/geom_bottleneck/tests/data/test_713_A b/geom_bottleneck/tests/data/test_713_A new file mode 100644 index 0000000..89ee240 --- /dev/null +++ b/geom_bottleneck/tests/data/test_713_A @@ -0,0 +1,6 @@ +588 1259 +827 1531 +94 877 +171 1137 +482 729 +879 1065 diff --git a/geom_bottleneck/tests/data/test_713_B b/geom_bottleneck/tests/data/test_713_B new file mode 100644 index 0000000..f2b501c --- /dev/null +++ b/geom_bottleneck/tests/data/test_713_B @@ -0,0 +1,6 @@ +222 623 +527 1158 +784 1040 +597 1063 +456 525 +713 1476 diff --git a/geom_bottleneck/tests/data/test_714_A b/geom_bottleneck/tests/data/test_714_A new file mode 100644 index 0000000..73ba892 --- /dev/null +++ b/geom_bottleneck/tests/data/test_714_A @@ -0,0 +1,6 @@ +81 1045 +398 727 +668 1311 +788 1623 +363 1222 +630 757 diff --git a/geom_bottleneck/tests/data/test_714_B b/geom_bottleneck/tests/data/test_714_B new file mode 100644 index 0000000..c495e7a --- /dev/null +++ b/geom_bottleneck/tests/data/test_714_B @@ -0,0 +1,6 @@ +840 1651 +664 995 +984 1812 +501 1183 +859 1373 +224 321 diff --git a/geom_bottleneck/tests/data/test_715_A b/geom_bottleneck/tests/data/test_715_A new file mode 100644 index 0000000..70b698d --- /dev/null +++ b/geom_bottleneck/tests/data/test_715_A @@ -0,0 +1,6 @@ +390 400 +914 963 +118 182 +848 1799 +24 207 +310 917 diff --git a/geom_bottleneck/tests/data/test_715_B b/geom_bottleneck/tests/data/test_715_B new file mode 100644 index 0000000..3cdf2b3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_715_B @@ -0,0 +1,6 @@ +999 1621 +121 432 +878 1064 +454 925 +642 1350 +976 1667 diff --git a/geom_bottleneck/tests/data/test_716_A b/geom_bottleneck/tests/data/test_716_A new file mode 100644 index 0000000..ada9ac0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_716_A @@ -0,0 +1,6 @@ +838 1400 +274 999 +806 1428 +957 1203 +48 503 +600 754 diff --git a/geom_bottleneck/tests/data/test_716_B b/geom_bottleneck/tests/data/test_716_B new file mode 100644 index 0000000..b13c8a1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_716_B @@ -0,0 +1,6 @@ +64 560 +385 907 +324 1041 +611 868 +685 1605 +320 733 diff --git a/geom_bottleneck/tests/data/test_717_A b/geom_bottleneck/tests/data/test_717_A new file mode 100644 index 0000000..f23e351 --- /dev/null +++ b/geom_bottleneck/tests/data/test_717_A @@ -0,0 +1,6 @@ +435 538 +281 369 +230 609 +932 1150 +629 1558 +397 511 diff --git a/geom_bottleneck/tests/data/test_717_B b/geom_bottleneck/tests/data/test_717_B new file mode 100644 index 0000000..150f7ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_717_B @@ -0,0 +1,6 @@ +293 1253 +356 1075 +559 754 +309 911 +726 1445 +539 1249 diff --git a/geom_bottleneck/tests/data/test_718_A b/geom_bottleneck/tests/data/test_718_A new file mode 100644 index 0000000..6efc756 --- /dev/null +++ b/geom_bottleneck/tests/data/test_718_A @@ -0,0 +1,6 @@ +289 455 +404 1182 +924 1629 +961 1779 +392 1078 +881 1571 diff --git a/geom_bottleneck/tests/data/test_718_B b/geom_bottleneck/tests/data/test_718_B new file mode 100644 index 0000000..4e45db1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_718_B @@ -0,0 +1,6 @@ +666 983 +482 1016 +609 1498 +352 882 +92 384 +911 1898 diff --git a/geom_bottleneck/tests/data/test_719_A b/geom_bottleneck/tests/data/test_719_A new file mode 100644 index 0000000..3512e1f --- /dev/null +++ b/geom_bottleneck/tests/data/test_719_A @@ -0,0 +1,6 @@ +589 1272 +999 1340 +628 1428 +112 311 +854 1288 +579 1034 diff --git a/geom_bottleneck/tests/data/test_719_B b/geom_bottleneck/tests/data/test_719_B new file mode 100644 index 0000000..028f44a --- /dev/null +++ b/geom_bottleneck/tests/data/test_719_B @@ -0,0 +1,6 @@ +223 460 +798 1620 +582 901 +542 835 +309 851 +28 133 diff --git a/geom_bottleneck/tests/data/test_720_A b/geom_bottleneck/tests/data/test_720_A new file mode 100644 index 0000000..57e2829 --- /dev/null +++ b/geom_bottleneck/tests/data/test_720_A @@ -0,0 +1,7 @@ +842 955 +876 1162 +447 481 +217 1212 +392 731 +112 940 +462 796 diff --git a/geom_bottleneck/tests/data/test_720_B b/geom_bottleneck/tests/data/test_720_B new file mode 100644 index 0000000..f3f2675 --- /dev/null +++ b/geom_bottleneck/tests/data/test_720_B @@ -0,0 +1,7 @@ +768 1167 +970 1497 +720 809 +848 1278 +264 387 +443 673 +481 643 diff --git a/geom_bottleneck/tests/data/test_721_A b/geom_bottleneck/tests/data/test_721_A new file mode 100644 index 0000000..f8a7f29 --- /dev/null +++ b/geom_bottleneck/tests/data/test_721_A @@ -0,0 +1,7 @@ +712 1082 +573 1189 +468 579 +431 1140 +543 758 +852 1545 +707 1585 diff --git a/geom_bottleneck/tests/data/test_721_B b/geom_bottleneck/tests/data/test_721_B new file mode 100644 index 0000000..35b828c --- /dev/null +++ b/geom_bottleneck/tests/data/test_721_B @@ -0,0 +1,7 @@ +274 999 +671 1640 +687 969 +641 796 +566 1384 +558 1386 +611 1189 diff --git a/geom_bottleneck/tests/data/test_722_A b/geom_bottleneck/tests/data/test_722_A new file mode 100644 index 0000000..6e0719f --- /dev/null +++ b/geom_bottleneck/tests/data/test_722_A @@ -0,0 +1,7 @@ +292 783 +995 1371 +60 662 +506 531 +294 1245 +966 1027 +750 1180 diff --git a/geom_bottleneck/tests/data/test_722_B b/geom_bottleneck/tests/data/test_722_B new file mode 100644 index 0000000..0fd37cc --- /dev/null +++ b/geom_bottleneck/tests/data/test_722_B @@ -0,0 +1,7 @@ +194 750 +520 773 +206 498 +746 1278 +354 643 +812 1219 +547 707 diff --git a/geom_bottleneck/tests/data/test_723_A b/geom_bottleneck/tests/data/test_723_A new file mode 100644 index 0000000..ad94fdd --- /dev/null +++ b/geom_bottleneck/tests/data/test_723_A @@ -0,0 +1,7 @@ +44 715 +470 1287 +692 1635 +849 1409 +636 724 +108 255 +377 1253 diff --git a/geom_bottleneck/tests/data/test_723_B b/geom_bottleneck/tests/data/test_723_B new file mode 100644 index 0000000..247a17e --- /dev/null +++ b/geom_bottleneck/tests/data/test_723_B @@ -0,0 +1,7 @@ +565 1129 +574 725 +387 1204 +990 1093 +548 1447 +547 1294 +394 421 diff --git a/geom_bottleneck/tests/data/test_724_A b/geom_bottleneck/tests/data/test_724_A new file mode 100644 index 0000000..f9a6bcf --- /dev/null +++ b/geom_bottleneck/tests/data/test_724_A @@ -0,0 +1,7 @@ +121 963 +4 934 +471 1403 +78 700 +500 749 +577 1241 +961 1123 diff --git a/geom_bottleneck/tests/data/test_724_B b/geom_bottleneck/tests/data/test_724_B new file mode 100644 index 0000000..71d03b3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_724_B @@ -0,0 +1,7 @@ +597 1424 +232 317 +618 1105 +593 1007 +410 1158 +534 965 +306 782 diff --git a/geom_bottleneck/tests/data/test_725_A b/geom_bottleneck/tests/data/test_725_A new file mode 100644 index 0000000..1e20d9e --- /dev/null +++ b/geom_bottleneck/tests/data/test_725_A @@ -0,0 +1,7 @@ +365 431 +764 1023 +503 1251 +50 557 +899 930 +906 1266 +698 1582 diff --git a/geom_bottleneck/tests/data/test_725_B b/geom_bottleneck/tests/data/test_725_B new file mode 100644 index 0000000..a215c1e --- /dev/null +++ b/geom_bottleneck/tests/data/test_725_B @@ -0,0 +1,7 @@ +591 1250 +643 1388 +429 1007 +953 1625 +604 1075 +486 1455 +999 1790 diff --git a/geom_bottleneck/tests/data/test_726_A b/geom_bottleneck/tests/data/test_726_A new file mode 100644 index 0000000..dd9500a --- /dev/null +++ b/geom_bottleneck/tests/data/test_726_A @@ -0,0 +1,7 @@ +193 1032 +813 1060 +401 672 +819 1490 +913 993 +294 753 +107 807 diff --git a/geom_bottleneck/tests/data/test_726_B b/geom_bottleneck/tests/data/test_726_B new file mode 100644 index 0000000..b3d3e50 --- /dev/null +++ b/geom_bottleneck/tests/data/test_726_B @@ -0,0 +1,7 @@ +57 1011 +861 1503 +669 1185 +630 1360 +636 952 +524 526 +264 1129 diff --git a/geom_bottleneck/tests/data/test_727_A b/geom_bottleneck/tests/data/test_727_A new file mode 100644 index 0000000..dae9ff3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_727_A @@ -0,0 +1,7 @@ +268 505 +525 1512 +131 265 +534 1402 +810 1044 +474 933 +752 1495 diff --git a/geom_bottleneck/tests/data/test_727_B b/geom_bottleneck/tests/data/test_727_B new file mode 100644 index 0000000..551d523 --- /dev/null +++ b/geom_bottleneck/tests/data/test_727_B @@ -0,0 +1,7 @@ +366 1348 +38 470 +594 1547 +97 353 +417 626 +791 1472 +493 1262 diff --git a/geom_bottleneck/tests/data/test_728_A b/geom_bottleneck/tests/data/test_728_A new file mode 100644 index 0000000..8074ce8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_728_A @@ -0,0 +1,7 @@ +798 958 +59 406 +670 868 +533 789 +192 727 +52 109 +997 1981 diff --git a/geom_bottleneck/tests/data/test_728_B b/geom_bottleneck/tests/data/test_728_B new file mode 100644 index 0000000..6d1448a --- /dev/null +++ b/geom_bottleneck/tests/data/test_728_B @@ -0,0 +1,7 @@ +211 624 +198 1095 +150 530 +757 1274 +672 1255 +847 1476 +879 1407 diff --git a/geom_bottleneck/tests/data/test_729_A b/geom_bottleneck/tests/data/test_729_A new file mode 100644 index 0000000..f9de136 --- /dev/null +++ b/geom_bottleneck/tests/data/test_729_A @@ -0,0 +1,7 @@ +574 1387 +241 543 +338 345 +888 1183 +942 1193 +5 802 +357 510 diff --git a/geom_bottleneck/tests/data/test_729_B b/geom_bottleneck/tests/data/test_729_B new file mode 100644 index 0000000..d34621f --- /dev/null +++ b/geom_bottleneck/tests/data/test_729_B @@ -0,0 +1,7 @@ +878 1129 +669 805 +56 973 +201 756 +911 1352 +494 887 +161 541 diff --git a/geom_bottleneck/tests/data/test_730_A b/geom_bottleneck/tests/data/test_730_A new file mode 100644 index 0000000..433cbd8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_730_A @@ -0,0 +1,7 @@ +135 1110 +126 417 +647 964 +895 1124 +213 1115 +340 755 +154 605 diff --git a/geom_bottleneck/tests/data/test_730_B b/geom_bottleneck/tests/data/test_730_B new file mode 100644 index 0000000..1b46964 --- /dev/null +++ b/geom_bottleneck/tests/data/test_730_B @@ -0,0 +1,7 @@ +854 866 +212 1211 +180 272 +386 1292 +47 565 +916 1350 +906 912 diff --git a/geom_bottleneck/tests/data/test_731_A b/geom_bottleneck/tests/data/test_731_A new file mode 100644 index 0000000..38d42cd --- /dev/null +++ b/geom_bottleneck/tests/data/test_731_A @@ -0,0 +1,7 @@ +1000 1606 +332 982 +581 1398 +403 1237 +954 1071 +560 890 +980 1624 diff --git a/geom_bottleneck/tests/data/test_731_B b/geom_bottleneck/tests/data/test_731_B new file mode 100644 index 0000000..3017d7a --- /dev/null +++ b/geom_bottleneck/tests/data/test_731_B @@ -0,0 +1,7 @@ +171 558 +391 1367 +177 1159 +130 343 +914 1175 +774 835 +672 1301 diff --git a/geom_bottleneck/tests/data/test_732_A b/geom_bottleneck/tests/data/test_732_A new file mode 100644 index 0000000..75a48cf --- /dev/null +++ b/geom_bottleneck/tests/data/test_732_A @@ -0,0 +1,7 @@ +330 1018 +692 1639 +213 1060 +138 458 +356 1233 +976 1361 +117 365 diff --git a/geom_bottleneck/tests/data/test_732_B b/geom_bottleneck/tests/data/test_732_B new file mode 100644 index 0000000..fada3b9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_732_B @@ -0,0 +1,7 @@ +530 729 +842 926 +375 633 +364 987 +507 1398 +303 1096 +137 344 diff --git a/geom_bottleneck/tests/data/test_733_A b/geom_bottleneck/tests/data/test_733_A new file mode 100644 index 0000000..d97ae0b --- /dev/null +++ b/geom_bottleneck/tests/data/test_733_A @@ -0,0 +1,7 @@ +155 290 +712 904 +154 668 +518 1267 +224 1022 +997 1304 +551 1015 diff --git a/geom_bottleneck/tests/data/test_733_B b/geom_bottleneck/tests/data/test_733_B new file mode 100644 index 0000000..529c7de --- /dev/null +++ b/geom_bottleneck/tests/data/test_733_B @@ -0,0 +1,7 @@ +930 1406 +626 980 +541 1340 +129 1023 +407 615 +105 850 +688 756 diff --git a/geom_bottleneck/tests/data/test_734_A b/geom_bottleneck/tests/data/test_734_A new file mode 100644 index 0000000..9aec4b4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_734_A @@ -0,0 +1,7 @@ +296 1160 +3 574 +642 808 +844 1148 +982 1081 +236 634 +151 904 diff --git a/geom_bottleneck/tests/data/test_734_B b/geom_bottleneck/tests/data/test_734_B new file mode 100644 index 0000000..4cb7206 --- /dev/null +++ b/geom_bottleneck/tests/data/test_734_B @@ -0,0 +1,7 @@ +30 884 +13 769 +406 954 +794 1615 +976 1177 +631 816 +400 1099 diff --git a/geom_bottleneck/tests/data/test_735_A b/geom_bottleneck/tests/data/test_735_A new file mode 100644 index 0000000..f364a21 --- /dev/null +++ b/geom_bottleneck/tests/data/test_735_A @@ -0,0 +1,7 @@ +259 941 +218 975 +286 718 +70 401 +496 830 +220 362 +511 1270 diff --git a/geom_bottleneck/tests/data/test_735_B b/geom_bottleneck/tests/data/test_735_B new file mode 100644 index 0000000..0f93850 --- /dev/null +++ b/geom_bottleneck/tests/data/test_735_B @@ -0,0 +1,7 @@ +489 705 +467 962 +110 116 +817 1521 +571 1059 +426 584 +933 1307 diff --git a/geom_bottleneck/tests/data/test_736_A b/geom_bottleneck/tests/data/test_736_A new file mode 100644 index 0000000..d89c563 --- /dev/null +++ b/geom_bottleneck/tests/data/test_736_A @@ -0,0 +1,7 @@ +624 1466 +288 1004 +552 978 +710 1190 +796 1634 +322 800 +171 197 diff --git a/geom_bottleneck/tests/data/test_736_B b/geom_bottleneck/tests/data/test_736_B new file mode 100644 index 0000000..25427f3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_736_B @@ -0,0 +1,7 @@ +385 852 +110 431 +284 646 +803 1541 +436 821 +262 951 +470 1172 diff --git a/geom_bottleneck/tests/data/test_737_A b/geom_bottleneck/tests/data/test_737_A new file mode 100644 index 0000000..2fbdf41 --- /dev/null +++ b/geom_bottleneck/tests/data/test_737_A @@ -0,0 +1,7 @@ +340 942 +812 1103 +129 553 +729 781 +779 1100 +99 1059 +720 1532 diff --git a/geom_bottleneck/tests/data/test_737_B b/geom_bottleneck/tests/data/test_737_B new file mode 100644 index 0000000..42348d5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_737_B @@ -0,0 +1,7 @@ +677 1323 +268 916 +165 674 +594 689 +975 1246 +717 734 +877 1479 diff --git a/geom_bottleneck/tests/data/test_738_A b/geom_bottleneck/tests/data/test_738_A new file mode 100644 index 0000000..d56b09b --- /dev/null +++ b/geom_bottleneck/tests/data/test_738_A @@ -0,0 +1,7 @@ +367 725 +277 1154 +267 994 +780 1005 +293 530 +964 1682 +421 734 diff --git a/geom_bottleneck/tests/data/test_738_B b/geom_bottleneck/tests/data/test_738_B new file mode 100644 index 0000000..834b2cf --- /dev/null +++ b/geom_bottleneck/tests/data/test_738_B @@ -0,0 +1,7 @@ +661 1499 +920 1597 +528 958 +482 957 +143 757 +547 1079 +774 937 diff --git a/geom_bottleneck/tests/data/test_739_A b/geom_bottleneck/tests/data/test_739_A new file mode 100644 index 0000000..84cbd7c --- /dev/null +++ b/geom_bottleneck/tests/data/test_739_A @@ -0,0 +1,7 @@ +414 1244 +395 937 +504 1155 +711 1389 +302 859 +220 731 +725 962 diff --git a/geom_bottleneck/tests/data/test_739_B b/geom_bottleneck/tests/data/test_739_B new file mode 100644 index 0000000..85afe3e --- /dev/null +++ b/geom_bottleneck/tests/data/test_739_B @@ -0,0 +1,7 @@ +598 980 +50 441 +473 1160 +524 1273 +523 1060 +936 1295 +73 910 diff --git a/geom_bottleneck/tests/data/test_740_A b/geom_bottleneck/tests/data/test_740_A new file mode 100644 index 0000000..a99113a --- /dev/null +++ b/geom_bottleneck/tests/data/test_740_A @@ -0,0 +1,8 @@ +569 1119 +905 1475 +608 1595 +469 1334 +501 1299 +306 797 +802 1036 +155 379 diff --git a/geom_bottleneck/tests/data/test_740_B b/geom_bottleneck/tests/data/test_740_B new file mode 100644 index 0000000..5aac504 --- /dev/null +++ b/geom_bottleneck/tests/data/test_740_B @@ -0,0 +1,8 @@ +729 946 +190 1105 +541 1315 +719 1537 +319 1219 +269 468 +638 838 +51 440 diff --git a/geom_bottleneck/tests/data/test_741_A b/geom_bottleneck/tests/data/test_741_A new file mode 100644 index 0000000..7c3f3fc --- /dev/null +++ b/geom_bottleneck/tests/data/test_741_A @@ -0,0 +1,8 @@ +897 1868 +872 1752 +739 1445 +156 178 +256 714 +198 528 +595 1485 +873 1452 diff --git a/geom_bottleneck/tests/data/test_741_B b/geom_bottleneck/tests/data/test_741_B new file mode 100644 index 0000000..9f8d386 --- /dev/null +++ b/geom_bottleneck/tests/data/test_741_B @@ -0,0 +1,8 @@ +193 277 +309 1030 +263 1230 +824 1414 +191 1103 +42 165 +665 690 +414 742 diff --git a/geom_bottleneck/tests/data/test_742_A b/geom_bottleneck/tests/data/test_742_A new file mode 100644 index 0000000..9effd4c --- /dev/null +++ b/geom_bottleneck/tests/data/test_742_A @@ -0,0 +1,8 @@ +268 974 +345 812 +75 359 +178 827 +647 1213 +667 677 +400 521 +703 1302 diff --git a/geom_bottleneck/tests/data/test_742_B b/geom_bottleneck/tests/data/test_742_B new file mode 100644 index 0000000..f17965b --- /dev/null +++ b/geom_bottleneck/tests/data/test_742_B @@ -0,0 +1,8 @@ +577 1161 +635 1057 +395 684 +225 312 +194 475 +550 732 +892 1097 +494 987 diff --git a/geom_bottleneck/tests/data/test_743_A b/geom_bottleneck/tests/data/test_743_A new file mode 100644 index 0000000..3a40cfb --- /dev/null +++ b/geom_bottleneck/tests/data/test_743_A @@ -0,0 +1,8 @@ +593 1306 +117 664 +701 1073 +918 1452 +125 1012 +80 106 +26 904 +525 1251 diff --git a/geom_bottleneck/tests/data/test_743_B b/geom_bottleneck/tests/data/test_743_B new file mode 100644 index 0000000..482d6dd --- /dev/null +++ b/geom_bottleneck/tests/data/test_743_B @@ -0,0 +1,8 @@ +913 1090 +957 1355 +465 559 +490 1102 +957 1559 +535 805 +569 1211 +8 570 diff --git a/geom_bottleneck/tests/data/test_744_A b/geom_bottleneck/tests/data/test_744_A new file mode 100644 index 0000000..25c3e55 --- /dev/null +++ b/geom_bottleneck/tests/data/test_744_A @@ -0,0 +1,8 @@ +648 773 +599 1278 +940 1503 +127 461 +923 1912 +724 939 +609 633 +720 936 diff --git a/geom_bottleneck/tests/data/test_744_B b/geom_bottleneck/tests/data/test_744_B new file mode 100644 index 0000000..da30f30 --- /dev/null +++ b/geom_bottleneck/tests/data/test_744_B @@ -0,0 +1,8 @@ +102 119 +262 460 +568 825 +855 1517 +622 1062 +441 607 +183 1095 +446 1422 diff --git a/geom_bottleneck/tests/data/test_745_A b/geom_bottleneck/tests/data/test_745_A new file mode 100644 index 0000000..f8ef7e6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_745_A @@ -0,0 +1,8 @@ +34 614 +939 1749 +639 698 +16 851 +847 1299 +760 1345 +477 682 +931 1291 diff --git a/geom_bottleneck/tests/data/test_745_B b/geom_bottleneck/tests/data/test_745_B new file mode 100644 index 0000000..f6d32b5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_745_B @@ -0,0 +1,8 @@ +972 1016 +16 293 +116 641 +230 1015 +164 468 +557 700 +1 477 +437 739 diff --git a/geom_bottleneck/tests/data/test_746_A b/geom_bottleneck/tests/data/test_746_A new file mode 100644 index 0000000..dbd677e --- /dev/null +++ b/geom_bottleneck/tests/data/test_746_A @@ -0,0 +1,8 @@ +651 1348 +225 349 +382 755 +986 1090 +601 856 +349 1261 +667 1644 +637 1197 diff --git a/geom_bottleneck/tests/data/test_746_B b/geom_bottleneck/tests/data/test_746_B new file mode 100644 index 0000000..9d02f4b --- /dev/null +++ b/geom_bottleneck/tests/data/test_746_B @@ -0,0 +1,8 @@ +804 1762 +13 403 +615 1487 +810 899 +939 1026 +59 539 +258 803 +199 488 diff --git a/geom_bottleneck/tests/data/test_747_A b/geom_bottleneck/tests/data/test_747_A new file mode 100644 index 0000000..c7886f8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_747_A @@ -0,0 +1,8 @@ +810 1169 +599 1295 +34 243 +41 247 +828 1689 +884 1265 +57 122 +340 1041 diff --git a/geom_bottleneck/tests/data/test_747_B b/geom_bottleneck/tests/data/test_747_B new file mode 100644 index 0000000..1ca1b5e --- /dev/null +++ b/geom_bottleneck/tests/data/test_747_B @@ -0,0 +1,8 @@ +282 836 +663 822 +874 1239 +911 1439 +704 1085 +593 787 +125 683 +790 1041 diff --git a/geom_bottleneck/tests/data/test_748_A b/geom_bottleneck/tests/data/test_748_A new file mode 100644 index 0000000..5fe22c2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_748_A @@ -0,0 +1,8 @@ +713 1382 +941 1859 +531 1460 +239 703 +4 712 +381 1018 +492 1298 +142 765 diff --git a/geom_bottleneck/tests/data/test_748_B b/geom_bottleneck/tests/data/test_748_B new file mode 100644 index 0000000..2e69002 --- /dev/null +++ b/geom_bottleneck/tests/data/test_748_B @@ -0,0 +1,8 @@ +993 1036 +886 1574 +892 1880 +649 1474 +228 1041 +124 730 +197 360 +490 1447 diff --git a/geom_bottleneck/tests/data/test_749_A b/geom_bottleneck/tests/data/test_749_A new file mode 100644 index 0000000..b3bf068 --- /dev/null +++ b/geom_bottleneck/tests/data/test_749_A @@ -0,0 +1,8 @@ +233 929 +150 391 +761 1353 +402 872 +890 1624 +103 482 +855 1150 +173 190 diff --git a/geom_bottleneck/tests/data/test_749_B b/geom_bottleneck/tests/data/test_749_B new file mode 100644 index 0000000..b181d57 --- /dev/null +++ b/geom_bottleneck/tests/data/test_749_B @@ -0,0 +1,8 @@ +304 960 +633 956 +62 250 +678 1085 +582 1509 +267 1159 +555 872 +828 935 diff --git a/geom_bottleneck/tests/data/test_750_A b/geom_bottleneck/tests/data/test_750_A new file mode 100644 index 0000000..3bd3e77 --- /dev/null +++ b/geom_bottleneck/tests/data/test_750_A @@ -0,0 +1,8 @@ +46 814 +299 740 +422 505 +597 674 +626 882 +550 1384 +257 522 +191 537 diff --git a/geom_bottleneck/tests/data/test_750_B b/geom_bottleneck/tests/data/test_750_B new file mode 100644 index 0000000..837ed3d --- /dev/null +++ b/geom_bottleneck/tests/data/test_750_B @@ -0,0 +1,8 @@ +119 1069 +304 1151 +984 1304 +938 1017 +915 1414 +603 1419 +806 1391 +247 563 diff --git a/geom_bottleneck/tests/data/test_751_A b/geom_bottleneck/tests/data/test_751_A new file mode 100644 index 0000000..adb0fe7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_751_A @@ -0,0 +1,8 @@ +161 749 +884 1266 +52 256 +626 1062 +244 1161 +52 651 +429 513 +123 381 diff --git a/geom_bottleneck/tests/data/test_751_B b/geom_bottleneck/tests/data/test_751_B new file mode 100644 index 0000000..1ed1651 --- /dev/null +++ b/geom_bottleneck/tests/data/test_751_B @@ -0,0 +1,8 @@ +646 1122 +980 1686 +3 270 +410 1255 +5 817 +9 390 +601 1013 +786 1675 diff --git a/geom_bottleneck/tests/data/test_752_A b/geom_bottleneck/tests/data/test_752_A new file mode 100644 index 0000000..4b54da2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_752_A @@ -0,0 +1,8 @@ +941 1425 +272 829 +904 1623 +562 1306 +223 245 +534 1385 +903 1274 +531 629 diff --git a/geom_bottleneck/tests/data/test_752_B b/geom_bottleneck/tests/data/test_752_B new file mode 100644 index 0000000..9c05ec9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_752_B @@ -0,0 +1,8 @@ +514 1333 +981 1676 +949 1493 +952 1015 +572 1224 +131 835 +93 335 +306 906 diff --git a/geom_bottleneck/tests/data/test_753_A b/geom_bottleneck/tests/data/test_753_A new file mode 100644 index 0000000..5704668 --- /dev/null +++ b/geom_bottleneck/tests/data/test_753_A @@ -0,0 +1,8 @@ +405 996 +473 1330 +168 804 +516 578 +712 1449 +425 1336 +237 816 +625 1304 diff --git a/geom_bottleneck/tests/data/test_753_B b/geom_bottleneck/tests/data/test_753_B new file mode 100644 index 0000000..1e845f7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_753_B @@ -0,0 +1,8 @@ +291 1031 +70 332 +847 973 +311 398 +815 1512 +996 1375 +720 1388 +518 611 diff --git a/geom_bottleneck/tests/data/test_754_A b/geom_bottleneck/tests/data/test_754_A new file mode 100644 index 0000000..1957784 --- /dev/null +++ b/geom_bottleneck/tests/data/test_754_A @@ -0,0 +1,8 @@ +138 781 +992 1803 +189 1157 +546 1145 +461 1153 +634 1004 +152 947 +706 713 diff --git a/geom_bottleneck/tests/data/test_754_B b/geom_bottleneck/tests/data/test_754_B new file mode 100644 index 0000000..4463862 --- /dev/null +++ b/geom_bottleneck/tests/data/test_754_B @@ -0,0 +1,8 @@ +742 1152 +909 947 +350 1168 +240 769 +415 479 +752 1507 +356 902 +856 1356 diff --git a/geom_bottleneck/tests/data/test_755_A b/geom_bottleneck/tests/data/test_755_A new file mode 100644 index 0000000..d05546d --- /dev/null +++ b/geom_bottleneck/tests/data/test_755_A @@ -0,0 +1,8 @@ +163 1000 +403 624 +628 829 +458 854 +319 778 +180 856 +822 1028 +806 923 diff --git a/geom_bottleneck/tests/data/test_755_B b/geom_bottleneck/tests/data/test_755_B new file mode 100644 index 0000000..47b372a --- /dev/null +++ b/geom_bottleneck/tests/data/test_755_B @@ -0,0 +1,8 @@ +922 1134 +900 1378 +200 780 +184 815 +631 1014 +837 1762 +676 789 +298 486 diff --git a/geom_bottleneck/tests/data/test_756_A b/geom_bottleneck/tests/data/test_756_A new file mode 100644 index 0000000..bac3296 --- /dev/null +++ b/geom_bottleneck/tests/data/test_756_A @@ -0,0 +1,8 @@ +467 1356 +84 188 +215 968 +702 1035 +305 745 +171 880 +724 1223 +916 1487 diff --git a/geom_bottleneck/tests/data/test_756_B b/geom_bottleneck/tests/data/test_756_B new file mode 100644 index 0000000..0579dd8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_756_B @@ -0,0 +1,8 @@ +62 816 +781 1333 +496 1018 +211 657 +968 1779 +684 828 +707 816 +133 710 diff --git a/geom_bottleneck/tests/data/test_757_A b/geom_bottleneck/tests/data/test_757_A new file mode 100644 index 0000000..3d0e16e --- /dev/null +++ b/geom_bottleneck/tests/data/test_757_A @@ -0,0 +1,8 @@ +850 1310 +104 459 +439 1185 +320 454 +423 1247 +85 891 +899 1560 +114 246 diff --git a/geom_bottleneck/tests/data/test_757_B b/geom_bottleneck/tests/data/test_757_B new file mode 100644 index 0000000..7ccedc5 --- /dev/null +++ b/geom_bottleneck/tests/data/test_757_B @@ -0,0 +1,8 @@ +797 1761 +642 812 +919 1333 +446 703 +330 1069 +575 668 +735 1258 +723 1330 diff --git a/geom_bottleneck/tests/data/test_758_A b/geom_bottleneck/tests/data/test_758_A new file mode 100644 index 0000000..fdabcdd --- /dev/null +++ b/geom_bottleneck/tests/data/test_758_A @@ -0,0 +1,8 @@ +310 820 +65 766 +892 1802 +459 1216 +237 358 +371 419 +218 375 +27 127 diff --git a/geom_bottleneck/tests/data/test_758_B b/geom_bottleneck/tests/data/test_758_B new file mode 100644 index 0000000..4fb7f60 --- /dev/null +++ b/geom_bottleneck/tests/data/test_758_B @@ -0,0 +1,8 @@ +261 318 +423 669 +485 1330 +814 942 +276 1013 +914 1010 +893 1161 +559 1118 diff --git a/geom_bottleneck/tests/data/test_759_A b/geom_bottleneck/tests/data/test_759_A new file mode 100644 index 0000000..dcf3a28 --- /dev/null +++ b/geom_bottleneck/tests/data/test_759_A @@ -0,0 +1,8 @@ +235 1080 +801 1281 +406 1012 +157 1091 +394 1385 +217 791 +971 1930 +529 1401 diff --git a/geom_bottleneck/tests/data/test_759_B b/geom_bottleneck/tests/data/test_759_B new file mode 100644 index 0000000..e094e35 --- /dev/null +++ b/geom_bottleneck/tests/data/test_759_B @@ -0,0 +1,8 @@ +957 1887 +857 1225 +366 386 +678 1429 +828 876 +250 466 +506 1127 +791 946 diff --git a/geom_bottleneck/tests/data/test_760_A b/geom_bottleneck/tests/data/test_760_A new file mode 100644 index 0000000..38e77f3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_760_A @@ -0,0 +1,9 @@ +754 1750 +559 782 +889 1821 +897 1093 +380 764 +367 932 +854 1721 +815 1633 +803 939 diff --git a/geom_bottleneck/tests/data/test_760_B b/geom_bottleneck/tests/data/test_760_B new file mode 100644 index 0000000..1bb3547 --- /dev/null +++ b/geom_bottleneck/tests/data/test_760_B @@ -0,0 +1,9 @@ +895 1474 +904 1893 +474 832 +238 631 +82 583 +470 797 +461 903 +856 1006 +151 669 diff --git a/geom_bottleneck/tests/data/test_761_A b/geom_bottleneck/tests/data/test_761_A new file mode 100644 index 0000000..4690752 --- /dev/null +++ b/geom_bottleneck/tests/data/test_761_A @@ -0,0 +1,9 @@ +377 1284 +139 699 +50 438 +687 919 +35 957 +652 713 +272 1264 +788 1721 +656 1330 diff --git a/geom_bottleneck/tests/data/test_761_B b/geom_bottleneck/tests/data/test_761_B new file mode 100644 index 0000000..9978d2c --- /dev/null +++ b/geom_bottleneck/tests/data/test_761_B @@ -0,0 +1,9 @@ +670 860 +401 500 +127 995 +594 1023 +638 1052 +727 802 +766 1624 +261 880 +172 663 diff --git a/geom_bottleneck/tests/data/test_762_A b/geom_bottleneck/tests/data/test_762_A new file mode 100644 index 0000000..7918ab6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_762_A @@ -0,0 +1,9 @@ +457 1270 +23 803 +189 293 +113 500 +911 1041 +504 728 +105 492 +514 1222 +753 923 diff --git a/geom_bottleneck/tests/data/test_762_B b/geom_bottleneck/tests/data/test_762_B new file mode 100644 index 0000000..d36f033 --- /dev/null +++ b/geom_bottleneck/tests/data/test_762_B @@ -0,0 +1,9 @@ +393 565 +182 184 +852 1821 +702 1558 +157 245 +456 924 +640 1103 +934 1125 +979 1099 diff --git a/geom_bottleneck/tests/data/test_763_A b/geom_bottleneck/tests/data/test_763_A new file mode 100644 index 0000000..73d90de --- /dev/null +++ b/geom_bottleneck/tests/data/test_763_A @@ -0,0 +1,9 @@ +89 776 +785 1157 +846 1324 +854 1048 +968 1721 +653 1216 +707 718 +958 1397 +247 1245 diff --git a/geom_bottleneck/tests/data/test_763_B b/geom_bottleneck/tests/data/test_763_B new file mode 100644 index 0000000..09d159c --- /dev/null +++ b/geom_bottleneck/tests/data/test_763_B @@ -0,0 +1,9 @@ +730 1315 +831 1373 +669 1287 +125 500 +676 1262 +272 524 +173 651 +38 624 +514 1175 diff --git a/geom_bottleneck/tests/data/test_764_A b/geom_bottleneck/tests/data/test_764_A new file mode 100644 index 0000000..8dead93 --- /dev/null +++ b/geom_bottleneck/tests/data/test_764_A @@ -0,0 +1,9 @@ +104 150 +837 890 +975 1135 +650 697 +202 393 +972 1174 +619 969 +274 891 +16 366 diff --git a/geom_bottleneck/tests/data/test_764_B b/geom_bottleneck/tests/data/test_764_B new file mode 100644 index 0000000..014198d --- /dev/null +++ b/geom_bottleneck/tests/data/test_764_B @@ -0,0 +1,9 @@ +150 432 +45 234 +8 95 +31 712 +331 1329 +184 531 +44 922 +764 1746 +838 919 diff --git a/geom_bottleneck/tests/data/test_765_A b/geom_bottleneck/tests/data/test_765_A new file mode 100644 index 0000000..666d2fe --- /dev/null +++ b/geom_bottleneck/tests/data/test_765_A @@ -0,0 +1,9 @@ +105 587 +505 1209 +617 651 +120 670 +322 1268 +410 1307 +822 1420 +351 1226 +150 633 diff --git a/geom_bottleneck/tests/data/test_765_B b/geom_bottleneck/tests/data/test_765_B new file mode 100644 index 0000000..c0be6d4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_765_B @@ -0,0 +1,9 @@ +274 1006 +627 1237 +21 246 +785 1167 +929 1234 +462 904 +539 997 +453 592 +251 513 diff --git a/geom_bottleneck/tests/data/test_766_A b/geom_bottleneck/tests/data/test_766_A new file mode 100644 index 0000000..48d55d9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_766_A @@ -0,0 +1,9 @@ +49 532 +799 1331 +372 667 +852 1746 +400 834 +182 499 +889 1775 +831 867 +139 227 diff --git a/geom_bottleneck/tests/data/test_766_B b/geom_bottleneck/tests/data/test_766_B new file mode 100644 index 0000000..9943c61 --- /dev/null +++ b/geom_bottleneck/tests/data/test_766_B @@ -0,0 +1,9 @@ +976 1516 +153 908 +103 143 +105 439 +469 744 +981 1387 +267 319 +960 1495 +734 1370 diff --git a/geom_bottleneck/tests/data/test_767_A b/geom_bottleneck/tests/data/test_767_A new file mode 100644 index 0000000..badb767 --- /dev/null +++ b/geom_bottleneck/tests/data/test_767_A @@ -0,0 +1,9 @@ +244 622 +925 1530 +263 455 +189 991 +342 1273 +266 321 +544 962 +613 1019 +592 791 diff --git a/geom_bottleneck/tests/data/test_767_B b/geom_bottleneck/tests/data/test_767_B new file mode 100644 index 0000000..3eb4c39 --- /dev/null +++ b/geom_bottleneck/tests/data/test_767_B @@ -0,0 +1,9 @@ +928 1479 +80 1065 +382 1056 +679 880 +307 891 +685 1466 +278 806 +501 1479 +126 271 diff --git a/geom_bottleneck/tests/data/test_768_A b/geom_bottleneck/tests/data/test_768_A new file mode 100644 index 0000000..69b6425 --- /dev/null +++ b/geom_bottleneck/tests/data/test_768_A @@ -0,0 +1,9 @@ +674 1590 +745 1289 +854 1215 +412 627 +538 992 +135 1053 +385 594 +354 569 +702 1010 diff --git a/geom_bottleneck/tests/data/test_768_B b/geom_bottleneck/tests/data/test_768_B new file mode 100644 index 0000000..a0e8eb0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_768_B @@ -0,0 +1,9 @@ +735 1627 +423 514 +524 1236 +377 412 +372 415 +873 1835 +719 1488 +828 1361 +160 705 diff --git a/geom_bottleneck/tests/data/test_769_A b/geom_bottleneck/tests/data/test_769_A new file mode 100644 index 0000000..08a46bd --- /dev/null +++ b/geom_bottleneck/tests/data/test_769_A @@ -0,0 +1,9 @@ +930 1077 +466 1159 +305 866 +672 1003 +970 1824 +774 1212 +454 611 +702 944 +979 1136 diff --git a/geom_bottleneck/tests/data/test_769_B b/geom_bottleneck/tests/data/test_769_B new file mode 100644 index 0000000..ce18190 --- /dev/null +++ b/geom_bottleneck/tests/data/test_769_B @@ -0,0 +1,9 @@ +293 996 +973 1865 +346 753 +897 1337 +58 1055 +35 647 +892 1158 +59 174 +342 1131 diff --git a/geom_bottleneck/tests/data/test_770_A b/geom_bottleneck/tests/data/test_770_A new file mode 100644 index 0000000..edfdf26 --- /dev/null +++ b/geom_bottleneck/tests/data/test_770_A @@ -0,0 +1,9 @@ +61 130 +770 1196 +740 778 +985 1720 +131 208 +740 1516 +798 1185 +609 1141 +159 389 diff --git a/geom_bottleneck/tests/data/test_770_B b/geom_bottleneck/tests/data/test_770_B new file mode 100644 index 0000000..cd59228 --- /dev/null +++ b/geom_bottleneck/tests/data/test_770_B @@ -0,0 +1,9 @@ +815 1216 +229 652 +696 1309 +585 1011 +882 1621 +398 670 +931 1271 +988 1333 +197 1110 diff --git a/geom_bottleneck/tests/data/test_771_A b/geom_bottleneck/tests/data/test_771_A new file mode 100644 index 0000000..9c3f4ba --- /dev/null +++ b/geom_bottleneck/tests/data/test_771_A @@ -0,0 +1,9 @@ +186 373 +378 642 +448 1022 +866 911 +706 1637 +528 950 +150 216 +327 506 +898 1366 diff --git a/geom_bottleneck/tests/data/test_771_B b/geom_bottleneck/tests/data/test_771_B new file mode 100644 index 0000000..8c07a06 --- /dev/null +++ b/geom_bottleneck/tests/data/test_771_B @@ -0,0 +1,9 @@ +968 1807 +686 1584 +296 347 +695 1143 +614 1205 +310 502 +249 694 +420 457 +743 1113 diff --git a/geom_bottleneck/tests/data/test_772_A b/geom_bottleneck/tests/data/test_772_A new file mode 100644 index 0000000..034ed92 --- /dev/null +++ b/geom_bottleneck/tests/data/test_772_A @@ -0,0 +1,9 @@ +286 399 +38 700 +884 1344 +201 1085 +285 1278 +661 901 +921 966 +3 728 +237 982 diff --git a/geom_bottleneck/tests/data/test_772_B b/geom_bottleneck/tests/data/test_772_B new file mode 100644 index 0000000..bc29bff --- /dev/null +++ b/geom_bottleneck/tests/data/test_772_B @@ -0,0 +1,9 @@ +148 440 +806 1799 +886 1586 +363 1211 +316 683 +229 766 +839 1204 +245 685 +43 841 diff --git a/geom_bottleneck/tests/data/test_773_A b/geom_bottleneck/tests/data/test_773_A new file mode 100644 index 0000000..0601e04 --- /dev/null +++ b/geom_bottleneck/tests/data/test_773_A @@ -0,0 +1,9 @@ +796 1034 +635 1409 +52 141 +974 1000 +341 800 +727 820 +343 1278 +138 153 +446 823 diff --git a/geom_bottleneck/tests/data/test_773_B b/geom_bottleneck/tests/data/test_773_B new file mode 100644 index 0000000..004d2d6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_773_B @@ -0,0 +1,9 @@ +327 384 +214 341 +815 1156 +868 1138 +369 392 +351 1162 +829 1594 +618 783 +47 656 diff --git a/geom_bottleneck/tests/data/test_774_A b/geom_bottleneck/tests/data/test_774_A new file mode 100644 index 0000000..3e211a0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_774_A @@ -0,0 +1,9 @@ +833 1408 +738 1321 +731 825 +670 795 +458 1062 +777 1262 +719 1131 +979 1366 +350 1290 diff --git a/geom_bottleneck/tests/data/test_774_B b/geom_bottleneck/tests/data/test_774_B new file mode 100644 index 0000000..3cf3985 --- /dev/null +++ b/geom_bottleneck/tests/data/test_774_B @@ -0,0 +1,9 @@ +421 1393 +851 1666 +633 1458 +560 1168 +936 1833 +855 1548 +275 1067 +899 1767 +539 947 diff --git a/geom_bottleneck/tests/data/test_775_A b/geom_bottleneck/tests/data/test_775_A new file mode 100644 index 0000000..5676eb4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_775_A @@ -0,0 +1,9 @@ +210 651 +529 1257 +998 1304 +957 1816 +624 800 +200 460 +319 1051 +422 962 +642 1439 diff --git a/geom_bottleneck/tests/data/test_775_B b/geom_bottleneck/tests/data/test_775_B new file mode 100644 index 0000000..5c4e8bc --- /dev/null +++ b/geom_bottleneck/tests/data/test_775_B @@ -0,0 +1,9 @@ +652 1315 +419 981 +912 1832 +578 1215 +317 992 +785 1422 +528 664 +968 1344 +847 993 diff --git a/geom_bottleneck/tests/data/test_776_A b/geom_bottleneck/tests/data/test_776_A new file mode 100644 index 0000000..49370ff --- /dev/null +++ b/geom_bottleneck/tests/data/test_776_A @@ -0,0 +1,9 @@ +707 768 +983 1893 +386 786 +370 914 +45 501 +625 1184 +175 1073 +262 1227 +819 1257 diff --git a/geom_bottleneck/tests/data/test_776_B b/geom_bottleneck/tests/data/test_776_B new file mode 100644 index 0000000..575a2d9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_776_B @@ -0,0 +1,9 @@ +949 1560 +757 1176 +689 1184 +819 1333 +50 884 +872 1695 +992 1145 +909 1889 +516 1376 diff --git a/geom_bottleneck/tests/data/test_777_A b/geom_bottleneck/tests/data/test_777_A new file mode 100644 index 0000000..eb1c980 --- /dev/null +++ b/geom_bottleneck/tests/data/test_777_A @@ -0,0 +1,9 @@ +958 1247 +143 570 +463 1343 +347 1346 +640 1203 +923 964 +489 701 +712 837 +616 978 diff --git a/geom_bottleneck/tests/data/test_777_B b/geom_bottleneck/tests/data/test_777_B new file mode 100644 index 0000000..eb9c8ee --- /dev/null +++ b/geom_bottleneck/tests/data/test_777_B @@ -0,0 +1,9 @@ +781 1080 +494 1278 +123 159 +936 1305 +748 1302 +271 524 +37 953 +758 946 +182 670 diff --git a/geom_bottleneck/tests/data/test_778_A b/geom_bottleneck/tests/data/test_778_A new file mode 100644 index 0000000..8392b2a --- /dev/null +++ b/geom_bottleneck/tests/data/test_778_A @@ -0,0 +1,9 @@ +544 1145 +371 1278 +417 814 +694 1566 +443 1104 +710 827 +617 714 +286 503 +191 568 diff --git a/geom_bottleneck/tests/data/test_778_B b/geom_bottleneck/tests/data/test_778_B new file mode 100644 index 0000000..017b08d --- /dev/null +++ b/geom_bottleneck/tests/data/test_778_B @@ -0,0 +1,9 @@ +746 1177 +291 727 +956 1929 +255 294 +938 1415 +564 1206 +657 1586 +499 1013 +67 1035 diff --git a/geom_bottleneck/tests/data/test_779_A b/geom_bottleneck/tests/data/test_779_A new file mode 100644 index 0000000..221d574 --- /dev/null +++ b/geom_bottleneck/tests/data/test_779_A @@ -0,0 +1,9 @@ +771 1728 +948 1405 +842 1792 +956 1247 +194 841 +152 1145 +683 1458 +854 1851 +817 864 diff --git a/geom_bottleneck/tests/data/test_779_B b/geom_bottleneck/tests/data/test_779_B new file mode 100644 index 0000000..113003e --- /dev/null +++ b/geom_bottleneck/tests/data/test_779_B @@ -0,0 +1,9 @@ +911 955 +410 1292 +972 1259 +128 1011 +362 591 +827 834 +677 1611 +783 1570 +844 1426 diff --git a/geom_bottleneck/tests/data/test_780_A b/geom_bottleneck/tests/data/test_780_A new file mode 100644 index 0000000..3d9a22c --- /dev/null +++ b/geom_bottleneck/tests/data/test_780_A @@ -0,0 +1,10 @@ +183 274 +354 862 +922 1354 +560 1351 +235 292 +695 1560 +29 997 +962 1865 +141 1080 +827 1101 diff --git a/geom_bottleneck/tests/data/test_780_B b/geom_bottleneck/tests/data/test_780_B new file mode 100644 index 0000000..defbae9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_780_B @@ -0,0 +1,10 @@ +42 318 +758 1669 +351 1022 +824 1415 +902 1400 +515 576 +260 586 +28 176 +469 1338 +909 1379 diff --git a/geom_bottleneck/tests/data/test_781_A b/geom_bottleneck/tests/data/test_781_A new file mode 100644 index 0000000..72201a7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_781_A @@ -0,0 +1,10 @@ +329 554 +888 1476 +129 806 +786 990 +328 727 +574 1226 +864 1378 +61 561 +154 823 +922 1810 diff --git a/geom_bottleneck/tests/data/test_781_B b/geom_bottleneck/tests/data/test_781_B new file mode 100644 index 0000000..85c8683 --- /dev/null +++ b/geom_bottleneck/tests/data/test_781_B @@ -0,0 +1,10 @@ +193 306 +784 949 +446 467 +830 891 +36 174 +28 1028 +135 1113 +689 737 +598 669 +808 1618 diff --git a/geom_bottleneck/tests/data/test_782_A b/geom_bottleneck/tests/data/test_782_A new file mode 100644 index 0000000..b376509 --- /dev/null +++ b/geom_bottleneck/tests/data/test_782_A @@ -0,0 +1,10 @@ +488 967 +298 299 +687 942 +225 1184 +375 467 +17 355 +165 658 +911 1012 +970 1538 +26 194 diff --git a/geom_bottleneck/tests/data/test_782_B b/geom_bottleneck/tests/data/test_782_B new file mode 100644 index 0000000..9fba291 --- /dev/null +++ b/geom_bottleneck/tests/data/test_782_B @@ -0,0 +1,10 @@ +191 1062 +253 1153 +930 1745 +736 1486 +274 503 +830 1830 +769 865 +33 921 +160 304 +229 1012 diff --git a/geom_bottleneck/tests/data/test_783_A b/geom_bottleneck/tests/data/test_783_A new file mode 100644 index 0000000..83593db --- /dev/null +++ b/geom_bottleneck/tests/data/test_783_A @@ -0,0 +1,10 @@ +575 1393 +206 817 +209 288 +181 466 +796 861 +885 1340 +110 346 +18 946 +769 1139 +422 1212 diff --git a/geom_bottleneck/tests/data/test_783_B b/geom_bottleneck/tests/data/test_783_B new file mode 100644 index 0000000..d169a48 --- /dev/null +++ b/geom_bottleneck/tests/data/test_783_B @@ -0,0 +1,10 @@ +810 1113 +997 1451 +205 1095 +621 1281 +677 1326 +911 1262 +395 916 +224 882 +708 812 +82 824 diff --git a/geom_bottleneck/tests/data/test_784_A b/geom_bottleneck/tests/data/test_784_A new file mode 100644 index 0000000..b10df8b --- /dev/null +++ b/geom_bottleneck/tests/data/test_784_A @@ -0,0 +1,10 @@ +963 1352 +692 1376 +910 967 +668 831 +840 962 +348 424 +729 1606 +417 514 +350 871 +289 298 diff --git a/geom_bottleneck/tests/data/test_784_B b/geom_bottleneck/tests/data/test_784_B new file mode 100644 index 0000000..ef2b466 --- /dev/null +++ b/geom_bottleneck/tests/data/test_784_B @@ -0,0 +1,10 @@ +754 955 +100 1075 +199 738 +800 1132 +419 949 +729 969 +774 941 +559 1196 +692 1096 +741 1061 diff --git a/geom_bottleneck/tests/data/test_785_A b/geom_bottleneck/tests/data/test_785_A new file mode 100644 index 0000000..3cdfaba --- /dev/null +++ b/geom_bottleneck/tests/data/test_785_A @@ -0,0 +1,10 @@ +797 970 +423 870 +289 692 +856 1132 +465 1409 +521 977 +322 545 +137 608 +934 1682 +77 959 diff --git a/geom_bottleneck/tests/data/test_785_B b/geom_bottleneck/tests/data/test_785_B new file mode 100644 index 0000000..32fe176 --- /dev/null +++ b/geom_bottleneck/tests/data/test_785_B @@ -0,0 +1,10 @@ +554 985 +793 1614 +915 1231 +215 790 +410 1181 +290 830 +733 1352 +717 829 +37 152 +989 1971 diff --git a/geom_bottleneck/tests/data/test_786_A b/geom_bottleneck/tests/data/test_786_A new file mode 100644 index 0000000..2d9fcec --- /dev/null +++ b/geom_bottleneck/tests/data/test_786_A @@ -0,0 +1,10 @@ +274 873 +62 804 +282 663 +517 1295 +906 921 +967 1806 +724 1674 +976 1641 +923 1492 +529 1316 diff --git a/geom_bottleneck/tests/data/test_786_B b/geom_bottleneck/tests/data/test_786_B new file mode 100644 index 0000000..417ee4b --- /dev/null +++ b/geom_bottleneck/tests/data/test_786_B @@ -0,0 +1,10 @@ +185 563 +774 1322 +467 499 +627 1251 +193 228 +528 1146 +957 1286 +882 891 +271 1024 +43 489 diff --git a/geom_bottleneck/tests/data/test_787_A b/geom_bottleneck/tests/data/test_787_A new file mode 100644 index 0000000..7c056b6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_787_A @@ -0,0 +1,10 @@ +297 511 +275 457 +251 1094 +824 1027 +872 1563 +842 1711 +841 1094 +732 1633 +82 105 +397 900 diff --git a/geom_bottleneck/tests/data/test_787_B b/geom_bottleneck/tests/data/test_787_B new file mode 100644 index 0000000..ddc126a --- /dev/null +++ b/geom_bottleneck/tests/data/test_787_B @@ -0,0 +1,10 @@ +152 438 +370 689 +859 1398 +697 1574 +294 635 +414 1138 +656 1516 +543 800 +260 902 +55 193 diff --git a/geom_bottleneck/tests/data/test_788_A b/geom_bottleneck/tests/data/test_788_A new file mode 100644 index 0000000..61a58b0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_788_A @@ -0,0 +1,10 @@ +820 1238 +143 789 +0 482 +20 414 +838 1690 +810 1160 +178 978 +963 1890 +852 1293 +399 609 diff --git a/geom_bottleneck/tests/data/test_788_B b/geom_bottleneck/tests/data/test_788_B new file mode 100644 index 0000000..d0782d9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_788_B @@ -0,0 +1,10 @@ +608 1470 +780 828 +436 513 +373 703 +950 1343 +608 949 +996 1248 +400 407 +911 1501 +660 1273 diff --git a/geom_bottleneck/tests/data/test_789_A b/geom_bottleneck/tests/data/test_789_A new file mode 100644 index 0000000..4805534 --- /dev/null +++ b/geom_bottleneck/tests/data/test_789_A @@ -0,0 +1,10 @@ +354 1062 +357 491 +915 1394 +385 1352 +461 585 +612 1103 +229 327 +741 1148 +572 1245 +399 863 diff --git a/geom_bottleneck/tests/data/test_789_B b/geom_bottleneck/tests/data/test_789_B new file mode 100644 index 0000000..808dab9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_789_B @@ -0,0 +1,10 @@ +806 1352 +254 492 +202 1049 +571 1363 +359 1262 +828 1364 +123 603 +50 581 +502 1455 +218 1133 diff --git a/geom_bottleneck/tests/data/test_790_A b/geom_bottleneck/tests/data/test_790_A new file mode 100644 index 0000000..231f25c --- /dev/null +++ b/geom_bottleneck/tests/data/test_790_A @@ -0,0 +1,10 @@ +411 1365 +920 965 +799 1463 +516 980 +775 1260 +48 353 +828 978 +166 1166 +391 992 +580 970 diff --git a/geom_bottleneck/tests/data/test_790_B b/geom_bottleneck/tests/data/test_790_B new file mode 100644 index 0000000..0892cfe --- /dev/null +++ b/geom_bottleneck/tests/data/test_790_B @@ -0,0 +1,10 @@ +145 299 +605 1499 +534 1303 +440 1163 +628 1355 +2 71 +902 1181 +376 490 +696 1515 +24 40 diff --git a/geom_bottleneck/tests/data/test_791_A b/geom_bottleneck/tests/data/test_791_A new file mode 100644 index 0000000..e12631e --- /dev/null +++ b/geom_bottleneck/tests/data/test_791_A @@ -0,0 +1,10 @@ +806 943 +568 1238 +44 633 +424 491 +361 1057 +583 1403 +754 1333 +843 1653 +512 1431 +768 1390 diff --git a/geom_bottleneck/tests/data/test_791_B b/geom_bottleneck/tests/data/test_791_B new file mode 100644 index 0000000..62aa958 --- /dev/null +++ b/geom_bottleneck/tests/data/test_791_B @@ -0,0 +1,10 @@ +850 1256 +138 1008 +948 1188 +914 1911 +659 1270 +375 986 +994 1160 +835 863 +73 849 +756 1456 diff --git a/geom_bottleneck/tests/data/test_792_A b/geom_bottleneck/tests/data/test_792_A new file mode 100644 index 0000000..3b73b46 --- /dev/null +++ b/geom_bottleneck/tests/data/test_792_A @@ -0,0 +1,10 @@ +610 1074 +927 1375 +497 992 +277 1026 +978 1640 +244 290 +299 814 +80 476 +599 1512 +793 824 diff --git a/geom_bottleneck/tests/data/test_792_B b/geom_bottleneck/tests/data/test_792_B new file mode 100644 index 0000000..517ff30 --- /dev/null +++ b/geom_bottleneck/tests/data/test_792_B @@ -0,0 +1,10 @@ +531 1350 +371 1273 +498 546 +487 1299 +347 1067 +638 1257 +205 802 +240 658 +1 249 +147 878 diff --git a/geom_bottleneck/tests/data/test_793_A b/geom_bottleneck/tests/data/test_793_A new file mode 100644 index 0000000..d9b85ae --- /dev/null +++ b/geom_bottleneck/tests/data/test_793_A @@ -0,0 +1,10 @@ +267 566 +193 1014 +348 534 +640 670 +795 1157 +752 1273 +439 1172 +254 687 +959 1954 +408 1084 diff --git a/geom_bottleneck/tests/data/test_793_B b/geom_bottleneck/tests/data/test_793_B new file mode 100644 index 0000000..66180dd --- /dev/null +++ b/geom_bottleneck/tests/data/test_793_B @@ -0,0 +1,10 @@ +751 1576 +410 1090 +288 1200 +430 1222 +988 1576 +152 1095 +583 596 +799 1296 +828 1022 +217 956 diff --git a/geom_bottleneck/tests/data/test_794_A b/geom_bottleneck/tests/data/test_794_A new file mode 100644 index 0000000..3d5401c --- /dev/null +++ b/geom_bottleneck/tests/data/test_794_A @@ -0,0 +1,10 @@ +1 160 +264 1182 +662 1435 +659 892 +47 845 +383 744 +773 1409 +895 906 +152 735 +344 870 diff --git a/geom_bottleneck/tests/data/test_794_B b/geom_bottleneck/tests/data/test_794_B new file mode 100644 index 0000000..26be9a3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_794_B @@ -0,0 +1,10 @@ +607 934 +865 900 +339 349 +888 1238 +981 1281 +1 554 +514 627 +77 1040 +911 1850 +276 1178 diff --git a/geom_bottleneck/tests/data/test_795_A b/geom_bottleneck/tests/data/test_795_A new file mode 100644 index 0000000..7c73f4d --- /dev/null +++ b/geom_bottleneck/tests/data/test_795_A @@ -0,0 +1,10 @@ +494 905 +440 1385 +496 955 +162 1027 +237 421 +873 1102 +349 1346 +470 880 +364 822 +869 1335 diff --git a/geom_bottleneck/tests/data/test_795_B b/geom_bottleneck/tests/data/test_795_B new file mode 100644 index 0000000..afc371b --- /dev/null +++ b/geom_bottleneck/tests/data/test_795_B @@ -0,0 +1,10 @@ +22 509 +741 1484 +558 982 +862 1077 +856 1695 +4 100 +995 1304 +103 990 +64 439 +883 1258 diff --git a/geom_bottleneck/tests/data/test_796_A b/geom_bottleneck/tests/data/test_796_A new file mode 100644 index 0000000..a326a52 --- /dev/null +++ b/geom_bottleneck/tests/data/test_796_A @@ -0,0 +1,10 @@ +16 636 +823 1691 +880 1198 +967 1441 +501 745 +318 427 +177 192 +944 1596 +229 458 +570 1267 diff --git a/geom_bottleneck/tests/data/test_796_B b/geom_bottleneck/tests/data/test_796_B new file mode 100644 index 0000000..86d2cf9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_796_B @@ -0,0 +1,10 @@ +240 255 +28 64 +713 1016 +577 662 +838 1674 +41 365 +889 1477 +1000 1767 +58 393 +870 1574 diff --git a/geom_bottleneck/tests/data/test_797_A b/geom_bottleneck/tests/data/test_797_A new file mode 100644 index 0000000..b5149bf --- /dev/null +++ b/geom_bottleneck/tests/data/test_797_A @@ -0,0 +1,10 @@ +258 711 +970 1782 +725 883 +626 1199 +785 1502 +713 820 +754 1570 +311 1068 +866 1364 +50 713 diff --git a/geom_bottleneck/tests/data/test_797_B b/geom_bottleneck/tests/data/test_797_B new file mode 100644 index 0000000..45ba81b --- /dev/null +++ b/geom_bottleneck/tests/data/test_797_B @@ -0,0 +1,10 @@ +381 1350 +844 1724 +531 1460 +472 1208 +659 914 +745 757 +627 1608 +69 357 +298 621 +100 760 diff --git a/geom_bottleneck/tests/data/test_798_A b/geom_bottleneck/tests/data/test_798_A new file mode 100644 index 0000000..a053ddd --- /dev/null +++ b/geom_bottleneck/tests/data/test_798_A @@ -0,0 +1,10 @@ +153 558 +364 847 +444 1083 +994 1375 +728 1585 +495 1005 +47 431 +361 1262 +645 646 +816 1742 diff --git a/geom_bottleneck/tests/data/test_798_B b/geom_bottleneck/tests/data/test_798_B new file mode 100644 index 0000000..69c921b --- /dev/null +++ b/geom_bottleneck/tests/data/test_798_B @@ -0,0 +1,10 @@ +416 985 +449 995 +832 1102 +550 775 +367 614 +393 458 +340 890 +264 955 +10 50 +834 1137 diff --git a/geom_bottleneck/tests/data/test_799_A b/geom_bottleneck/tests/data/test_799_A new file mode 100644 index 0000000..374e56a --- /dev/null +++ b/geom_bottleneck/tests/data/test_799_A @@ -0,0 +1,10 @@ +40 603 +309 973 +679 1580 +219 675 +92 934 +537 1366 +63 461 +408 807 +983 1016 +176 789 diff --git a/geom_bottleneck/tests/data/test_799_B b/geom_bottleneck/tests/data/test_799_B new file mode 100644 index 0000000..f92c370 --- /dev/null +++ b/geom_bottleneck/tests/data/test_799_B @@ -0,0 +1,10 @@ +312 772 +963 1630 +613 920 +597 1153 +941 1187 +150 434 +269 804 +885 887 +649 881 +618 973 diff --git a/geom_bottleneck/tests/data/test_800_A b/geom_bottleneck/tests/data/test_800_A new file mode 100644 index 0000000..36aab61 --- /dev/null +++ b/geom_bottleneck/tests/data/test_800_A @@ -0,0 +1,20 @@ +729 1257 +887 1370 +876 1762 +569 878 +13 393 +287 1169 +720 899 +338 892 +594 1438 +248 1204 +315 985 +796 1645 +730 1605 +323 490 +470 1454 +285 1067 +215 757 +92 325 +866 869 +899 1630 diff --git a/geom_bottleneck/tests/data/test_800_B b/geom_bottleneck/tests/data/test_800_B new file mode 100644 index 0000000..2496bcb --- /dev/null +++ b/geom_bottleneck/tests/data/test_800_B @@ -0,0 +1,20 @@ +961 1808 +251 958 +152 851 +834 1250 +727 1719 +968 1220 +107 206 +564 1423 +475 1438 +884 1174 +928 1303 +39 708 +854 1539 +825 1094 +614 989 +281 856 +445 1141 +784 1664 +657 969 +154 1026 diff --git a/geom_bottleneck/tests/data/test_801_A b/geom_bottleneck/tests/data/test_801_A new file mode 100644 index 0000000..66ed176 --- /dev/null +++ b/geom_bottleneck/tests/data/test_801_A @@ -0,0 +1,20 @@ +823 1484 +877 1798 +158 361 +59 670 +365 636 +536 831 +669 1574 +51 690 +243 1047 +579 1472 +450 618 +478 706 +850 1720 +10 822 +502 1081 +815 833 +192 629 +745 909 +936 1924 +619 1215 diff --git a/geom_bottleneck/tests/data/test_801_B b/geom_bottleneck/tests/data/test_801_B new file mode 100644 index 0000000..4376fcf --- /dev/null +++ b/geom_bottleneck/tests/data/test_801_B @@ -0,0 +1,20 @@ +911 924 +564 1044 +939 1177 +226 536 +692 1241 +931 1421 +750 767 +427 630 +594 1388 +751 1751 +933 1190 +379 1220 +63 623 +79 190 +650 993 +508 1351 +961 1710 +619 863 +548 1358 +727 1515 diff --git a/geom_bottleneck/tests/data/test_802_A b/geom_bottleneck/tests/data/test_802_A new file mode 100644 index 0000000..6bfdeda --- /dev/null +++ b/geom_bottleneck/tests/data/test_802_A @@ -0,0 +1,20 @@ +63 288 +994 1416 +92 461 +241 742 +325 877 +466 925 +923 1215 +941 1044 +618 1396 +248 1066 +383 442 +583 1016 +947 1095 +186 602 +291 448 +339 384 +467 1107 +771 942 +92 794 +2 533 diff --git a/geom_bottleneck/tests/data/test_802_B b/geom_bottleneck/tests/data/test_802_B new file mode 100644 index 0000000..eaec985 --- /dev/null +++ b/geom_bottleneck/tests/data/test_802_B @@ -0,0 +1,20 @@ +350 416 +143 1004 +710 1425 +665 1101 +828 1491 +80 449 +977 1801 +497 509 +664 700 +405 670 +688 1502 +102 938 +893 1437 +245 728 +626 1333 +526 1473 +914 1253 +96 268 +693 1302 +982 1487 diff --git a/geom_bottleneck/tests/data/test_803_A b/geom_bottleneck/tests/data/test_803_A new file mode 100644 index 0000000..501248d --- /dev/null +++ b/geom_bottleneck/tests/data/test_803_A @@ -0,0 +1,20 @@ +553 1373 +92 606 +892 1104 +804 1697 +653 953 +421 824 +670 1420 +621 1196 +912 1889 +482 1161 +381 691 +192 1146 +592 670 +920 1293 +754 1475 +217 379 +584 1551 +168 463 +212 251 +303 469 diff --git a/geom_bottleneck/tests/data/test_803_B b/geom_bottleneck/tests/data/test_803_B new file mode 100644 index 0000000..42dadd9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_803_B @@ -0,0 +1,20 @@ +252 701 +398 718 +663 871 +257 475 +998 1850 +292 587 +813 1363 +374 757 +295 749 +405 607 +21 374 +489 1313 +975 1840 +773 1423 +204 693 +149 532 +57 191 +307 618 +509 1109 +308 350 diff --git a/geom_bottleneck/tests/data/test_804_A b/geom_bottleneck/tests/data/test_804_A new file mode 100644 index 0000000..6af9294 --- /dev/null +++ b/geom_bottleneck/tests/data/test_804_A @@ -0,0 +1,20 @@ +518 993 +44 915 +674 768 +122 870 +394 839 +631 1285 +805 1491 +521 802 +456 474 +450 1083 +555 1280 +858 1839 +131 144 +361 953 +600 985 +158 537 +771 1062 +286 1285 +168 397 +748 1722 diff --git a/geom_bottleneck/tests/data/test_804_B b/geom_bottleneck/tests/data/test_804_B new file mode 100644 index 0000000..8470b65 --- /dev/null +++ b/geom_bottleneck/tests/data/test_804_B @@ -0,0 +1,20 @@ +132 843 +202 982 +374 1118 +9 980 +843 852 +537 761 +645 656 +882 1627 +51 619 +217 926 +870 1398 +87 1080 +223 1189 +160 379 +406 561 +536 1522 +353 487 +312 1180 +526 1492 +249 823 diff --git a/geom_bottleneck/tests/data/test_805_A b/geom_bottleneck/tests/data/test_805_A new file mode 100644 index 0000000..45a3198 --- /dev/null +++ b/geom_bottleneck/tests/data/test_805_A @@ -0,0 +1,20 @@ +350 546 +268 1153 +401 757 +503 848 +981 1709 +161 948 +688 1661 +234 471 +397 801 +433 1024 +942 1394 +308 969 +32 690 +797 1248 +182 407 +714 1267 +577 1209 +775 919 +140 976 +366 1300 diff --git a/geom_bottleneck/tests/data/test_805_B b/geom_bottleneck/tests/data/test_805_B new file mode 100644 index 0000000..4967cfd --- /dev/null +++ b/geom_bottleneck/tests/data/test_805_B @@ -0,0 +1,20 @@ +330 1222 +792 1359 +905 1402 +933 1482 +322 933 +440 887 +672 1438 +849 1650 +264 794 +21 219 +437 593 +159 598 +466 675 +712 1347 +566 1363 +244 382 +374 520 +729 1295 +998 1116 +954 1362 diff --git a/geom_bottleneck/tests/data/test_806_A b/geom_bottleneck/tests/data/test_806_A new file mode 100644 index 0000000..8eb1e33 --- /dev/null +++ b/geom_bottleneck/tests/data/test_806_A @@ -0,0 +1,20 @@ +909 1049 +241 667 +928 1287 +838 1606 +159 1145 +395 714 +445 804 +897 1289 +770 1108 +649 714 +643 684 +436 561 +125 637 +704 856 +738 913 +478 1206 +396 1306 +106 213 +840 929 +320 1037 diff --git a/geom_bottleneck/tests/data/test_806_B b/geom_bottleneck/tests/data/test_806_B new file mode 100644 index 0000000..27727b2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_806_B @@ -0,0 +1,20 @@ +342 756 +736 1334 +769 1194 +352 967 +165 282 +209 306 +977 1040 +385 604 +141 566 +458 884 +186 477 +869 1651 +143 850 +742 1329 +212 872 +445 1214 +864 870 +836 1772 +534 1338 +338 1244 diff --git a/geom_bottleneck/tests/data/test_807_A b/geom_bottleneck/tests/data/test_807_A new file mode 100644 index 0000000..4979b7d --- /dev/null +++ b/geom_bottleneck/tests/data/test_807_A @@ -0,0 +1,20 @@ +657 1104 +391 1193 +374 1227 +9 94 +458 555 +982 1529 +840 920 +831 1039 +468 1180 +912 1687 +988 1717 +33 324 +577 639 +426 1103 +733 1096 +41 421 +376 784 +823 1180 +389 1204 +788 1243 diff --git a/geom_bottleneck/tests/data/test_807_B b/geom_bottleneck/tests/data/test_807_B new file mode 100644 index 0000000..67610cb --- /dev/null +++ b/geom_bottleneck/tests/data/test_807_B @@ -0,0 +1,20 @@ +295 1223 +755 1585 +860 1191 +281 873 +86 1000 +508 1264 +16 594 +616 747 +522 1196 +34 270 +422 1196 +22 801 +812 947 +91 517 +233 586 +167 475 +173 233 +130 807 +764 1691 +942 1622 diff --git a/geom_bottleneck/tests/data/test_808_A b/geom_bottleneck/tests/data/test_808_A new file mode 100644 index 0000000..b35d354 --- /dev/null +++ b/geom_bottleneck/tests/data/test_808_A @@ -0,0 +1,20 @@ +395 768 +234 477 +627 1516 +353 1158 +108 195 +399 496 +787 1246 +330 553 +840 1835 +474 947 +736 1100 +248 381 +559 575 +716 1583 +873 1336 +927 1293 +857 1611 +691 1202 +293 770 +27 585 diff --git a/geom_bottleneck/tests/data/test_808_B b/geom_bottleneck/tests/data/test_808_B new file mode 100644 index 0000000..fb783cb --- /dev/null +++ b/geom_bottleneck/tests/data/test_808_B @@ -0,0 +1,20 @@ +801 1397 +119 551 +305 964 +706 1119 +586 1050 +925 1532 +595 1000 +898 1753 +491 699 +450 802 +499 1011 +180 468 +616 768 +179 901 +89 144 +828 1466 +927 1852 +151 584 +213 997 +952 1055 diff --git a/geom_bottleneck/tests/data/test_809_A b/geom_bottleneck/tests/data/test_809_A new file mode 100644 index 0000000..e578429 --- /dev/null +++ b/geom_bottleneck/tests/data/test_809_A @@ -0,0 +1,20 @@ +512 1083 +60 706 +61 93 +413 1076 +277 298 +766 1458 +984 1052 +762 1727 +356 422 +263 655 +605 968 +422 1373 +174 1033 +983 1676 +666 1005 +179 336 +553 1267 +987 1269 +756 1753 +842 1754 diff --git a/geom_bottleneck/tests/data/test_809_B b/geom_bottleneck/tests/data/test_809_B new file mode 100644 index 0000000..e4deda8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_809_B @@ -0,0 +1,20 @@ +178 1010 +727 738 +812 1638 +893 1821 +41 650 +797 1295 +174 473 +389 1244 +289 601 +626 1188 +890 1646 +296 318 +861 1582 +860 1410 +670 1574 +310 813 +186 263 +886 1796 +263 760 +396 1314 diff --git a/geom_bottleneck/tests/data/test_810_A b/geom_bottleneck/tests/data/test_810_A new file mode 100644 index 0000000..b7da658 --- /dev/null +++ b/geom_bottleneck/tests/data/test_810_A @@ -0,0 +1,20 @@ +843 1230 +289 770 +614 776 +512 987 +326 1253 +651 932 +827 839 +945 1361 +492 706 +312 1139 +463 1394 +68 1045 +229 1200 +126 898 +494 1095 +893 1824 +548 889 +45 952 +136 725 +304 1154 diff --git a/geom_bottleneck/tests/data/test_810_B b/geom_bottleneck/tests/data/test_810_B new file mode 100644 index 0000000..06e2af4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_810_B @@ -0,0 +1,20 @@ +207 249 +374 690 +287 677 +566 817 +875 1590 +570 1096 +34 543 +344 801 +31 796 +681 1566 +402 835 +404 906 +754 1339 +96 514 +549 1065 +874 1762 +935 1530 +368 1331 +465 831 +890 1413 diff --git a/geom_bottleneck/tests/data/test_811_A b/geom_bottleneck/tests/data/test_811_A new file mode 100644 index 0000000..708fc33 --- /dev/null +++ b/geom_bottleneck/tests/data/test_811_A @@ -0,0 +1,20 @@ +605 650 +57 484 +621 641 +794 1393 +951 1609 +132 656 +639 1132 +419 967 +741 1547 +105 466 +306 1270 +827 1475 +260 376 +418 1180 +458 1136 +957 1237 +363 749 +742 1038 +958 1157 +153 252 diff --git a/geom_bottleneck/tests/data/test_811_B b/geom_bottleneck/tests/data/test_811_B new file mode 100644 index 0000000..69bffab --- /dev/null +++ b/geom_bottleneck/tests/data/test_811_B @@ -0,0 +1,20 @@ +687 1060 +622 650 +544 1212 +38 633 +280 956 +695 791 +120 956 +364 435 +825 1760 +137 303 +701 1432 +967 1395 +566 966 +695 951 +85 262 +82 595 +11 100 +312 1104 +669 1424 +157 285 diff --git a/geom_bottleneck/tests/data/test_812_A b/geom_bottleneck/tests/data/test_812_A new file mode 100644 index 0000000..f592f5f --- /dev/null +++ b/geom_bottleneck/tests/data/test_812_A @@ -0,0 +1,20 @@ +333 661 +942 1519 +825 1088 +68 726 +443 1398 +918 1335 +853 1787 +163 269 +158 214 +444 1036 +163 670 +124 834 +745 890 +728 1254 +981 1370 +858 1117 +159 700 +978 1371 +554 1366 +112 689 diff --git a/geom_bottleneck/tests/data/test_812_B b/geom_bottleneck/tests/data/test_812_B new file mode 100644 index 0000000..7e37dec --- /dev/null +++ b/geom_bottleneck/tests/data/test_812_B @@ -0,0 +1,20 @@ +228 896 +635 880 +250 930 +8 479 +168 214 +366 775 +41 981 +461 692 +337 839 +870 1634 +497 511 +253 389 +807 913 +487 1348 +245 1186 +222 1169 +254 810 +855 1471 +399 1155 +433 1194 diff --git a/geom_bottleneck/tests/data/test_813_A b/geom_bottleneck/tests/data/test_813_A new file mode 100644 index 0000000..94bbbc3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_813_A @@ -0,0 +1,20 @@ +45 843 +606 637 +981 1438 +769 1525 +694 1370 +596 1454 +365 813 +164 704 +198 347 +115 553 +767 1119 +663 1052 +379 697 +294 335 +457 1253 +320 1147 +508 830 +506 738 +381 1010 +896 1376 diff --git a/geom_bottleneck/tests/data/test_813_B b/geom_bottleneck/tests/data/test_813_B new file mode 100644 index 0000000..54ce63b --- /dev/null +++ b/geom_bottleneck/tests/data/test_813_B @@ -0,0 +1,20 @@ +519 1068 +65 460 +199 429 +695 1050 +407 524 +24 581 +54 728 +843 1551 +773 829 +355 644 +145 962 +837 1238 +796 830 +383 791 +86 1028 +461 1145 +270 1231 +374 837 +730 875 +659 1188 diff --git a/geom_bottleneck/tests/data/test_814_A b/geom_bottleneck/tests/data/test_814_A new file mode 100644 index 0000000..3eb0a25 --- /dev/null +++ b/geom_bottleneck/tests/data/test_814_A @@ -0,0 +1,20 @@ +571 1312 +384 842 +418 932 +388 1146 +857 1045 +952 1326 +551 631 +820 1105 +791 884 +50 788 +697 1165 +840 1425 +130 169 +106 615 +429 1085 +428 567 +138 762 +364 1304 +116 1013 +50 983 diff --git a/geom_bottleneck/tests/data/test_814_B b/geom_bottleneck/tests/data/test_814_B new file mode 100644 index 0000000..a65d82f --- /dev/null +++ b/geom_bottleneck/tests/data/test_814_B @@ -0,0 +1,20 @@ +617 718 +320 697 +164 654 +423 821 +444 1368 +211 382 +184 857 +799 1071 +866 924 +48 829 +90 249 +378 1336 +817 832 +6 246 +115 280 +363 447 +422 964 +902 1809 +637 1073 +585 606 diff --git a/geom_bottleneck/tests/data/test_815_A b/geom_bottleneck/tests/data/test_815_A new file mode 100644 index 0000000..ae366c6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_815_A @@ -0,0 +1,20 @@ +911 1198 +516 1091 +421 1381 +257 824 +272 394 +75 841 +659 805 +980 1436 +237 431 +668 1221 +441 1057 +560 849 +305 1270 +572 929 +460 812 +471 640 +50 773 +1 446 +895 1610 +837 1400 diff --git a/geom_bottleneck/tests/data/test_815_B b/geom_bottleneck/tests/data/test_815_B new file mode 100644 index 0000000..6d11d46 --- /dev/null +++ b/geom_bottleneck/tests/data/test_815_B @@ -0,0 +1,20 @@ +589 1196 +872 1375 +473 627 +522 671 +940 1274 +666 1453 +1 861 +656 1221 +669 866 +916 1378 +340 773 +454 1020 +190 561 +828 1606 +356 693 +876 1220 +644 763 +991 1241 +559 1095 +124 406 diff --git a/geom_bottleneck/tests/data/test_816_A b/geom_bottleneck/tests/data/test_816_A new file mode 100644 index 0000000..54dc128 --- /dev/null +++ b/geom_bottleneck/tests/data/test_816_A @@ -0,0 +1,20 @@ +376 1109 +877 1496 +817 1426 +647 703 +92 672 +909 1671 +580 965 +626 1528 +347 1159 +551 1396 +432 941 +7 766 +1 370 +664 1384 +106 448 +763 1190 +768 892 +19 465 +220 1188 +96 554 diff --git a/geom_bottleneck/tests/data/test_816_B b/geom_bottleneck/tests/data/test_816_B new file mode 100644 index 0000000..56f00ce --- /dev/null +++ b/geom_bottleneck/tests/data/test_816_B @@ -0,0 +1,20 @@ +930 1560 +702 1257 +174 988 +712 777 +150 355 +146 617 +265 954 +519 820 +575 1117 +603 1133 +910 1817 +363 415 +102 347 +925 1565 +621 1336 +203 752 +743 1550 +39 310 +904 1206 +696 1445 diff --git a/geom_bottleneck/tests/data/test_817_A b/geom_bottleneck/tests/data/test_817_A new file mode 100644 index 0000000..8c01be3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_817_A @@ -0,0 +1,20 @@ +14 829 +708 1194 +415 1028 +395 1236 +294 792 +319 730 +490 889 +424 1364 +512 864 +820 1563 +461 880 +345 686 +318 407 +993 1857 +833 882 +937 1452 +376 719 +171 852 +457 523 +156 784 diff --git a/geom_bottleneck/tests/data/test_817_B b/geom_bottleneck/tests/data/test_817_B new file mode 100644 index 0000000..1aa1eaa --- /dev/null +++ b/geom_bottleneck/tests/data/test_817_B @@ -0,0 +1,20 @@ +544 1398 +776 1241 +56 1054 +942 1736 +752 1563 +475 1241 +423 923 +553 1023 +101 846 +841 1613 +895 1353 +832 1502 +300 915 +986 1488 +397 648 +823 1196 +457 1079 +371 471 +398 1114 +50 853 diff --git a/geom_bottleneck/tests/data/test_818_A b/geom_bottleneck/tests/data/test_818_A new file mode 100644 index 0000000..44ac7de --- /dev/null +++ b/geom_bottleneck/tests/data/test_818_A @@ -0,0 +1,20 @@ +296 395 +102 172 +9 500 +426 574 +931 1885 +76 901 +202 1197 +462 1135 +87 907 +109 780 +186 238 +297 833 +142 360 +719 1106 +25 775 +626 1219 +911 1619 +9 322 +158 222 +843 1086 diff --git a/geom_bottleneck/tests/data/test_818_B b/geom_bottleneck/tests/data/test_818_B new file mode 100644 index 0000000..83c706c --- /dev/null +++ b/geom_bottleneck/tests/data/test_818_B @@ -0,0 +1,20 @@ +989 1945 +718 1675 +126 965 +27 359 +756 962 +158 737 +149 473 +748 896 +779 1215 +685 933 +742 1449 +717 1575 +834 1467 +80 377 +634 1348 +419 766 +345 733 +111 753 +138 1014 +452 1429 diff --git a/geom_bottleneck/tests/data/test_819_A b/geom_bottleneck/tests/data/test_819_A new file mode 100644 index 0000000..1065f24 --- /dev/null +++ b/geom_bottleneck/tests/data/test_819_A @@ -0,0 +1,20 @@ +119 806 +187 942 +454 844 +581 583 +753 1715 +199 380 +623 697 +63 469 +929 1518 +960 1306 +996 1011 +157 203 +666 1505 +14 693 +414 536 +461 1330 +975 1260 +375 1004 +375 1145 +453 723 diff --git a/geom_bottleneck/tests/data/test_819_B b/geom_bottleneck/tests/data/test_819_B new file mode 100644 index 0000000..f1c8ba3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_819_B @@ -0,0 +1,20 @@ +184 385 +214 473 +11 1007 +301 516 +689 820 +267 1052 +26 720 +414 726 +946 1295 +720 1275 +430 1272 +119 349 +850 1371 +738 1125 +450 1222 +728 1503 +951 1796 +843 947 +856 983 +705 996 diff --git a/geom_bottleneck/tests/data/test_820_A b/geom_bottleneck/tests/data/test_820_A new file mode 100644 index 0000000..1f23572 --- /dev/null +++ b/geom_bottleneck/tests/data/test_820_A @@ -0,0 +1,30 @@ +232 279 +761 1519 +175 773 +522 1293 +336 381 +478 998 +61 328 +450 1350 +669 1085 +602 870 +286 987 +593 897 +358 742 +900 1878 +441 668 +109 977 +847 1651 +41 863 +94 851 +240 491 +335 1150 +135 748 +480 1052 +420 572 +837 1662 +629 1223 +895 1453 +304 1051 +424 553 +308 714 diff --git a/geom_bottleneck/tests/data/test_820_B b/geom_bottleneck/tests/data/test_820_B new file mode 100644 index 0000000..3465e1b --- /dev/null +++ b/geom_bottleneck/tests/data/test_820_B @@ -0,0 +1,30 @@ +309 934 +8 585 +213 1043 +116 589 +436 679 +70 715 +604 1194 +562 1151 +727 1616 +404 632 +948 1712 +934 1186 +690 1385 +636 682 +140 888 +738 884 +704 1593 +868 979 +954 1310 +605 1513 +955 1763 +730 1719 +393 1159 +325 1279 +35 153 +436 838 +249 1157 +394 921 +634 1242 +914 1138 diff --git a/geom_bottleneck/tests/data/test_821_A b/geom_bottleneck/tests/data/test_821_A new file mode 100644 index 0000000..ab4fa20 --- /dev/null +++ b/geom_bottleneck/tests/data/test_821_A @@ -0,0 +1,30 @@ +610 907 +704 897 +228 1047 +459 1435 +105 904 +492 1288 +557 863 +368 622 +715 1240 +627 1465 +823 1003 +823 891 +724 853 +227 933 +88 600 +735 1479 +591 757 +260 347 +314 1130 +342 985 +80 990 +93 137 +153 761 +91 408 +497 1011 +980 1277 +916 1437 +81 1038 +735 1143 +374 773 diff --git a/geom_bottleneck/tests/data/test_821_B b/geom_bottleneck/tests/data/test_821_B new file mode 100644 index 0000000..36073ce --- /dev/null +++ b/geom_bottleneck/tests/data/test_821_B @@ -0,0 +1,30 @@ +575 1235 +999 1599 +78 560 +384 694 +217 646 +709 1344 +772 1755 +542 994 +376 1248 +924 1462 +675 892 +927 1354 +306 1292 +573 1316 +731 1424 +445 911 +145 588 +402 822 +584 920 +374 831 +636 1237 +580 614 +490 1107 +529 1074 +652 1460 +892 1245 +917 1530 +679 1511 +725 820 +620 1439 diff --git a/geom_bottleneck/tests/data/test_822_A b/geom_bottleneck/tests/data/test_822_A new file mode 100644 index 0000000..38b5219 --- /dev/null +++ b/geom_bottleneck/tests/data/test_822_A @@ -0,0 +1,30 @@ +416 1100 +661 1339 +612 962 +593 1233 +642 1509 +574 969 +202 450 +370 787 +14 937 +974 1336 +420 775 +808 1662 +304 319 +492 555 +740 1524 +935 1749 +88 758 +995 1590 +40 963 +141 1031 +695 886 +504 1111 +684 1360 +861 1552 +482 746 +89 547 +493 598 +190 310 +806 1384 +472 1459 diff --git a/geom_bottleneck/tests/data/test_822_B b/geom_bottleneck/tests/data/test_822_B new file mode 100644 index 0000000..c61c33e --- /dev/null +++ b/geom_bottleneck/tests/data/test_822_B @@ -0,0 +1,30 @@ +843 1057 +860 1286 +703 1268 +545 1381 +515 1186 +178 952 +456 907 +713 964 +555 981 +332 1263 +11 112 +291 347 +958 1460 +723 1182 +850 865 +631 677 +227 640 +676 1506 +256 610 +581 1468 +15 619 +233 1100 +35 957 +444 817 +517 1318 +129 318 +765 1584 +733 1001 +932 998 +693 1076 diff --git a/geom_bottleneck/tests/data/test_823_A b/geom_bottleneck/tests/data/test_823_A new file mode 100644 index 0000000..5d441a2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_823_A @@ -0,0 +1,30 @@ +817 1477 +662 1416 +722 1408 +43 588 +583 585 +159 836 +752 922 +529 727 +55 60 +447 1200 +248 735 +520 1121 +541 1379 +704 1640 +681 1454 +234 385 +884 1063 +884 1535 +612 704 +55 102 +214 913 +597 1576 +19 919 +907 951 +785 1577 +185 281 +567 680 +577 1162 +323 495 +321 920 diff --git a/geom_bottleneck/tests/data/test_823_B b/geom_bottleneck/tests/data/test_823_B new file mode 100644 index 0000000..e1ae113 --- /dev/null +++ b/geom_bottleneck/tests/data/test_823_B @@ -0,0 +1,30 @@ +562 1532 +19 557 +758 1238 +732 1011 +116 761 +988 1621 +783 786 +128 964 +208 249 +111 948 +510 719 +711 1630 +99 769 +159 816 +295 807 +485 1332 +848 1845 +721 1534 +344 1341 +678 1465 +665 889 +734 1611 +246 783 +238 618 +401 809 +234 571 +527 1227 +690 1550 +278 729 +454 591 diff --git a/geom_bottleneck/tests/data/test_824_A b/geom_bottleneck/tests/data/test_824_A new file mode 100644 index 0000000..3bfc169 --- /dev/null +++ b/geom_bottleneck/tests/data/test_824_A @@ -0,0 +1,30 @@ +333 858 +230 978 +281 1158 +880 1314 +816 1259 +840 1631 +385 979 +413 537 +378 697 +222 486 +213 285 +664 1109 +7 300 +482 903 +325 338 +616 875 +46 548 +145 965 +126 760 +873 1030 +533 1087 +417 487 +510 919 +760 1722 +144 897 +136 412 +88 137 +704 1084 +457 744 +424 1148 diff --git a/geom_bottleneck/tests/data/test_824_B b/geom_bottleneck/tests/data/test_824_B new file mode 100644 index 0000000..192df92 --- /dev/null +++ b/geom_bottleneck/tests/data/test_824_B @@ -0,0 +1,30 @@ +285 785 +57 516 +410 1131 +794 1019 +732 1499 +391 1297 +104 689 +294 976 +748 1061 +806 1309 +118 995 +7 994 +952 1007 +994 1296 +340 1335 +387 762 +800 946 +757 1299 +167 976 +538 802 +147 808 +51 694 +20 353 +290 376 +575 1395 +294 1074 +754 1042 +461 474 +634 1525 +491 1208 diff --git a/geom_bottleneck/tests/data/test_825_A b/geom_bottleneck/tests/data/test_825_A new file mode 100644 index 0000000..5dc0d10 --- /dev/null +++ b/geom_bottleneck/tests/data/test_825_A @@ -0,0 +1,30 @@ +727 1401 +217 1102 +836 1270 +380 446 +569 1295 +55 504 +239 312 +872 1710 +552 1075 +584 1470 +402 438 +441 1296 +194 1105 +643 1563 +933 1180 +448 735 +749 1583 +725 1624 +533 1043 +952 1467 +548 926 +839 926 +5 724 +768 1115 +557 578 +712 1472 +279 1121 +399 808 +601 951 +293 422 diff --git a/geom_bottleneck/tests/data/test_825_B b/geom_bottleneck/tests/data/test_825_B new file mode 100644 index 0000000..e440801 --- /dev/null +++ b/geom_bottleneck/tests/data/test_825_B @@ -0,0 +1,30 @@ +466 883 +492 1180 +645 1446 +138 604 +469 1261 +110 409 +923 1649 +101 397 +410 440 +655 1223 +280 822 +564 701 +736 1735 +645 1272 +495 982 +339 389 +188 738 +669 1263 +106 658 +981 1256 +815 1378 +914 1482 +193 855 +361 1134 +885 1858 +98 576 +577 897 +528 549 +152 154 +363 886 diff --git a/geom_bottleneck/tests/data/test_826_A b/geom_bottleneck/tests/data/test_826_A new file mode 100644 index 0000000..8fbcf93 --- /dev/null +++ b/geom_bottleneck/tests/data/test_826_A @@ -0,0 +1,30 @@ +669 1220 +577 787 +982 1553 +218 1116 +715 831 +383 780 +328 925 +216 612 +635 1185 +211 707 +915 1130 +223 693 +468 1277 +570 1219 +281 1037 +759 1522 +435 1201 +356 582 +996 1867 +369 833 +584 1415 +472 1174 +6 905 +329 358 +703 1331 +141 180 +136 204 +873 1858 +107 943 +158 1153 diff --git a/geom_bottleneck/tests/data/test_826_B b/geom_bottleneck/tests/data/test_826_B new file mode 100644 index 0000000..10fe424 --- /dev/null +++ b/geom_bottleneck/tests/data/test_826_B @@ -0,0 +1,30 @@ +651 1534 +143 212 +685 962 +100 862 +34 102 +333 1131 +274 651 +142 1075 +312 751 +848 1583 +396 548 +377 1071 +824 1067 +932 1352 +510 1339 +435 561 +259 1223 +434 1080 +974 1509 +618 1604 +795 1363 +668 1299 +532 1157 +326 632 +182 768 +611 1431 +62 528 +832 1370 +413 1373 +153 813 diff --git a/geom_bottleneck/tests/data/test_827_A b/geom_bottleneck/tests/data/test_827_A new file mode 100644 index 0000000..c1c63c9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_827_A @@ -0,0 +1,30 @@ +211 875 +625 678 +698 1671 +942 1243 +129 250 +370 497 +725 1322 +195 1094 +382 1059 +973 1185 +877 1196 +863 1764 +645 1372 +4 484 +29 156 +802 1201 +195 1074 +261 1181 +139 1099 +768 1204 +882 1317 +107 693 +928 1275 +459 1071 +270 633 +384 906 +493 576 +909 1222 +212 437 +74 656 diff --git a/geom_bottleneck/tests/data/test_827_B b/geom_bottleneck/tests/data/test_827_B new file mode 100644 index 0000000..57ea673 --- /dev/null +++ b/geom_bottleneck/tests/data/test_827_B @@ -0,0 +1,30 @@ +804 1730 +244 333 +131 547 +866 1012 +364 546 +530 950 +702 824 +290 418 +636 795 +202 618 +858 1059 +140 687 +76 447 +60 499 +502 1080 +858 1704 +555 585 +503 1152 +151 787 +565 1211 +172 556 +322 422 +176 952 +333 572 +40 982 +656 1365 +553 1493 +600 680 +72 555 +711 769 diff --git a/geom_bottleneck/tests/data/test_828_A b/geom_bottleneck/tests/data/test_828_A new file mode 100644 index 0000000..ee02128 --- /dev/null +++ b/geom_bottleneck/tests/data/test_828_A @@ -0,0 +1,30 @@ +227 983 +778 1655 +311 1256 +462 911 +100 932 +411 895 +738 1086 +375 1308 +899 1896 +742 1425 +909 1290 +68 375 +148 195 +981 1120 +848 1463 +234 616 +45 314 +180 447 +368 1310 +443 734 +721 1345 +617 1376 +340 767 +420 1094 +848 979 +984 1866 +996 1169 +28 895 +203 1153 +535 1241 diff --git a/geom_bottleneck/tests/data/test_828_B b/geom_bottleneck/tests/data/test_828_B new file mode 100644 index 0000000..92fae09 --- /dev/null +++ b/geom_bottleneck/tests/data/test_828_B @@ -0,0 +1,30 @@ +309 789 +405 1405 +610 1330 +213 683 +768 1598 +843 1024 +898 1445 +625 1363 +557 996 +455 1026 +146 1137 +411 617 +155 969 +93 444 +92 206 +470 927 +792 1691 +871 984 +551 1271 +801 1755 +134 505 +270 1081 +382 852 +549 686 +2 314 +146 428 +460 1373 +602 1492 +950 1060 +516 1438 diff --git a/geom_bottleneck/tests/data/test_829_A b/geom_bottleneck/tests/data/test_829_A new file mode 100644 index 0000000..fceb407 --- /dev/null +++ b/geom_bottleneck/tests/data/test_829_A @@ -0,0 +1,30 @@ +222 1184 +346 478 +748 1587 +29 615 +190 1077 +889 1417 +381 1314 +388 448 +654 1525 +876 1242 +306 625 +289 660 +251 355 +4 963 +310 1154 +216 1065 +7 10 +75 525 +249 1084 +972 1796 +938 1780 +218 1156 +959 1810 +530 785 +562 1005 +483 751 +892 1440 +352 493 +676 1329 +718 1688 diff --git a/geom_bottleneck/tests/data/test_829_B b/geom_bottleneck/tests/data/test_829_B new file mode 100644 index 0000000..85f538c --- /dev/null +++ b/geom_bottleneck/tests/data/test_829_B @@ -0,0 +1,30 @@ +910 1441 +681 1671 +845 1784 +354 1210 +4 180 +830 1486 +466 566 +808 1728 +1 589 +808 862 +404 543 +304 879 +618 1013 +905 1788 +912 1187 +228 604 +959 1487 +793 1275 +631 1205 +151 157 +984 1427 +244 578 +875 1741 +654 1288 +506 780 +827 1138 +213 928 +30 420 +670 1438 +448 737 diff --git a/geom_bottleneck/tests/data/test_830_A b/geom_bottleneck/tests/data/test_830_A new file mode 100644 index 0000000..fd54955 --- /dev/null +++ b/geom_bottleneck/tests/data/test_830_A @@ -0,0 +1,30 @@ +35 644 +830 1511 +414 677 +768 1461 +467 1032 +152 1060 +960 1807 +566 831 +550 1210 +521 1018 +250 651 +698 699 +979 1102 +555 1516 +463 1057 +739 896 +330 549 +412 775 +775 1433 +733 1438 +430 1342 +7 751 +338 943 +923 1173 +734 1460 +880 1453 +225 1004 +571 1375 +739 1085 +288 1202 diff --git a/geom_bottleneck/tests/data/test_830_B b/geom_bottleneck/tests/data/test_830_B new file mode 100644 index 0000000..5b9d84b --- /dev/null +++ b/geom_bottleneck/tests/data/test_830_B @@ -0,0 +1,30 @@ +814 1305 +205 1199 +972 1431 +37 488 +673 1079 +630 1288 +698 828 +970 1666 +516 625 +65 209 +752 1716 +12 992 +563 1552 +821 1168 +460 943 +616 682 +386 546 +249 638 +583 1024 +38 889 +491 1020 +179 964 +995 1256 +861 1632 +252 518 +255 344 +480 1200 +89 711 +598 1022 +632 677 diff --git a/geom_bottleneck/tests/data/test_831_A b/geom_bottleneck/tests/data/test_831_A new file mode 100644 index 0000000..fe09be1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_831_A @@ -0,0 +1,30 @@ +772 1298 +705 1567 +946 1693 +632 1045 +752 875 +919 1723 +657 884 +708 1156 +442 1086 +571 1454 +641 894 +371 1152 +762 952 +684 760 +275 369 +858 994 +485 730 +921 1267 +643 928 +353 1307 +384 406 +154 380 +299 998 +378 1208 +27 265 +948 1081 +551 1512 +50 308 +773 1297 +134 514 diff --git a/geom_bottleneck/tests/data/test_831_B b/geom_bottleneck/tests/data/test_831_B new file mode 100644 index 0000000..1f4d148 --- /dev/null +++ b/geom_bottleneck/tests/data/test_831_B @@ -0,0 +1,30 @@ +757 1588 +145 1094 +523 1331 +687 1430 +877 1046 +573 696 +359 1012 +711 734 +368 552 +588 1267 +231 702 +64 429 +901 1202 +93 467 +647 1449 +747 994 +364 692 +384 833 +143 390 +445 1283 +248 696 +397 451 +695 1014 +852 1363 +512 1491 +983 1278 +506 841 +533 1031 +26 813 +850 1601 diff --git a/geom_bottleneck/tests/data/test_832_A b/geom_bottleneck/tests/data/test_832_A new file mode 100644 index 0000000..79d3383 --- /dev/null +++ b/geom_bottleneck/tests/data/test_832_A @@ -0,0 +1,30 @@ +373 1269 +753 1101 +529 825 +462 539 +52 293 +878 1396 +67 683 +106 1096 +973 1589 +129 911 +556 1327 +743 1248 +687 1505 +804 1322 +338 703 +438 1149 +539 730 +802 1046 +462 803 +175 506 +382 796 +470 1219 +608 1146 +12 757 +713 1367 +719 1001 +451 585 +408 1308 +29 510 +67 866 diff --git a/geom_bottleneck/tests/data/test_832_B b/geom_bottleneck/tests/data/test_832_B new file mode 100644 index 0000000..9106904 --- /dev/null +++ b/geom_bottleneck/tests/data/test_832_B @@ -0,0 +1,30 @@ +239 1006 +358 806 +53 229 +529 931 +923 1837 +644 1410 +761 1240 +511 966 +639 1127 +874 1114 +604 995 +916 1100 +634 1043 +317 607 +43 613 +9 216 +349 1035 +48 193 +396 986 +809 1193 +307 832 +86 786 +934 1164 +534 1434 +960 1092 +13 799 +658 1056 +411 1382 +378 568 +808 1400 diff --git a/geom_bottleneck/tests/data/test_833_A b/geom_bottleneck/tests/data/test_833_A new file mode 100644 index 0000000..1dbdd95 --- /dev/null +++ b/geom_bottleneck/tests/data/test_833_A @@ -0,0 +1,30 @@ +505 885 +170 695 +258 297 +652 996 +987 1055 +937 1159 +846 1133 +984 1715 +243 1199 +596 827 +40 585 +589 1356 +305 943 +974 1253 +965 1615 +840 1238 +842 1407 +596 1296 +603 741 +839 966 +300 951 +852 1656 +783 1676 +45 631 +973 1199 +513 725 +133 391 +633 1132 +442 1271 +100 401 diff --git a/geom_bottleneck/tests/data/test_833_B b/geom_bottleneck/tests/data/test_833_B new file mode 100644 index 0000000..a325070 --- /dev/null +++ b/geom_bottleneck/tests/data/test_833_B @@ -0,0 +1,30 @@ +152 524 +210 255 +714 1034 +808 1480 +594 1020 +33 742 +285 562 +437 1341 +716 903 +767 1201 +146 938 +608 1275 +54 601 +752 1037 +896 1514 +113 321 +986 1932 +453 1382 +93 547 +687 1677 +134 1122 +5 268 +31 66 +832 1755 +313 966 +602 834 +433 679 +548 789 +414 1414 +734 1061 diff --git a/geom_bottleneck/tests/data/test_834_A b/geom_bottleneck/tests/data/test_834_A new file mode 100644 index 0000000..7088d54 --- /dev/null +++ b/geom_bottleneck/tests/data/test_834_A @@ -0,0 +1,30 @@ +709 1214 +541 1328 +291 925 +23 570 +334 447 +648 808 +532 1226 +315 509 +796 1147 +435 1417 +336 1183 +401 893 +184 721 +496 509 +274 841 +463 625 +906 1694 +512 1242 +617 1494 +874 1805 +162 621 +802 1074 +904 993 +124 653 +44 818 +577 1417 +520 1294 +574 709 +317 394 +643 1152 diff --git a/geom_bottleneck/tests/data/test_834_B b/geom_bottleneck/tests/data/test_834_B new file mode 100644 index 0000000..5dd4204 --- /dev/null +++ b/geom_bottleneck/tests/data/test_834_B @@ -0,0 +1,30 @@ +176 662 +579 764 +544 706 +68 939 +230 345 +901 1737 +714 1299 +482 1000 +290 802 +760 1461 +647 1412 +781 1498 +354 780 +697 818 +375 709 +794 1664 +989 1869 +320 729 +688 1029 +853 1290 +679 1504 +918 1749 +767 1734 +300 996 +625 900 +123 496 +89 408 +255 679 +329 1248 +659 1003 diff --git a/geom_bottleneck/tests/data/test_835_A b/geom_bottleneck/tests/data/test_835_A new file mode 100644 index 0000000..47e934b --- /dev/null +++ b/geom_bottleneck/tests/data/test_835_A @@ -0,0 +1,30 @@ +554 1108 +257 549 +102 222 +531 715 +977 1231 +292 534 +624 1603 +394 508 +936 1007 +139 427 +457 1069 +873 1535 +789 887 +912 1213 +503 1307 +734 889 +789 1372 +811 1701 +558 1477 +485 763 +711 876 +961 1691 +294 635 +963 1955 +737 1563 +15 980 +23 339 +770 1156 +399 1341 +886 1049 diff --git a/geom_bottleneck/tests/data/test_835_B b/geom_bottleneck/tests/data/test_835_B new file mode 100644 index 0000000..9a3edbe --- /dev/null +++ b/geom_bottleneck/tests/data/test_835_B @@ -0,0 +1,30 @@ +38 645 +994 1933 +145 1066 +900 1210 +691 1208 +672 959 +349 445 +567 1137 +547 1325 +943 1437 +591 712 +526 750 +2 227 +108 667 +137 722 +327 1192 +396 1374 +390 1069 +396 783 +927 1242 +870 1797 +532 1049 +543 1081 +470 917 +738 1731 +814 1558 +794 1555 +439 499 +593 1490 +349 410 diff --git a/geom_bottleneck/tests/data/test_836_A b/geom_bottleneck/tests/data/test_836_A new file mode 100644 index 0000000..1a9885f --- /dev/null +++ b/geom_bottleneck/tests/data/test_836_A @@ -0,0 +1,30 @@ +790 1396 +959 1240 +518 1462 +797 1737 +356 649 +304 716 +773 1583 +888 1299 +355 801 +318 1109 +271 1257 +645 820 +292 1221 +792 968 +879 1494 +253 642 +105 802 +917 1305 +648 1646 +724 1157 +566 1056 +868 1437 +398 1098 +601 917 +436 1368 +26 933 +670 1615 +189 367 +79 1050 +955 1528 diff --git a/geom_bottleneck/tests/data/test_836_B b/geom_bottleneck/tests/data/test_836_B new file mode 100644 index 0000000..8335ddf --- /dev/null +++ b/geom_bottleneck/tests/data/test_836_B @@ -0,0 +1,30 @@ +135 337 +332 1300 +859 1117 +591 988 +441 1441 +174 635 +78 703 +10 648 +188 422 +292 830 +492 1179 +104 276 +263 640 +63 760 +993 1248 +107 644 +723 747 +85 698 +276 410 +407 735 +229 810 +512 561 +802 1555 +542 818 +666 1499 +383 754 +132 216 +581 723 +775 1446 +908 1029 diff --git a/geom_bottleneck/tests/data/test_837_A b/geom_bottleneck/tests/data/test_837_A new file mode 100644 index 0000000..8d3facc --- /dev/null +++ b/geom_bottleneck/tests/data/test_837_A @@ -0,0 +1,30 @@ +456 998 +976 1929 +745 1606 +77 375 +149 692 +508 1466 +68 113 +493 1163 +185 1109 +761 1172 +313 1261 +508 1091 +122 834 +766 1333 +996 1208 +161 468 +688 903 +551 744 +745 1522 +579 1022 +149 722 +458 652 +8 758 +801 1344 +96 696 +589 1125 +589 989 +941 1492 +851 1168 +670 728 diff --git a/geom_bottleneck/tests/data/test_837_B b/geom_bottleneck/tests/data/test_837_B new file mode 100644 index 0000000..8439a1f --- /dev/null +++ b/geom_bottleneck/tests/data/test_837_B @@ -0,0 +1,30 @@ +102 508 +437 603 +199 669 +853 1602 +106 722 +732 771 +301 538 +505 988 +731 1707 +276 1142 +923 1449 +366 1330 +221 833 +107 174 +914 1231 +651 1411 +137 666 +781 1074 +459 655 +509 1344 +74 234 +927 1739 +960 1461 +556 608 +644 805 +457 971 +992 1522 +798 887 +147 944 +96 111 diff --git a/geom_bottleneck/tests/data/test_838_A b/geom_bottleneck/tests/data/test_838_A new file mode 100644 index 0000000..9f6e83e --- /dev/null +++ b/geom_bottleneck/tests/data/test_838_A @@ -0,0 +1,30 @@ +918 952 +225 1163 +801 1184 +786 1485 +512 747 +389 756 +966 1924 +542 720 +742 1207 +329 891 +273 1268 +701 1015 +29 682 +303 1139 +716 1617 +362 1135 +540 1071 +58 497 +725 1445 +46 688 +931 1327 +467 1229 +303 916 +702 1067 +862 1258 +535 1347 +640 1252 +619 1377 +702 1237 +971 1779 diff --git a/geom_bottleneck/tests/data/test_838_B b/geom_bottleneck/tests/data/test_838_B new file mode 100644 index 0000000..227776e --- /dev/null +++ b/geom_bottleneck/tests/data/test_838_B @@ -0,0 +1,30 @@ +898 1448 +295 893 +829 1147 +149 339 +529 1046 +729 1258 +602 1296 +571 672 +953 1890 +26 777 +984 1487 +879 1533 +456 1103 +741 1227 +235 718 +65 102 +432 1037 +307 824 +977 1325 +275 582 +753 1683 +809 1622 +63 478 +648 1273 +945 1446 +234 843 +354 1134 +298 1160 +471 882 +911 1296 diff --git a/geom_bottleneck/tests/data/test_839_A b/geom_bottleneck/tests/data/test_839_A new file mode 100644 index 0000000..073be3c --- /dev/null +++ b/geom_bottleneck/tests/data/test_839_A @@ -0,0 +1,30 @@ +488 765 +890 1359 +573 1009 +876 1603 +430 1408 +774 1380 +786 881 +392 1227 +506 755 +844 1516 +716 1555 +697 1415 +816 908 +981 1231 +775 1437 +224 582 +657 1045 +937 1441 +428 682 +865 1547 +802 1736 +700 1196 +881 1569 +507 875 +884 1852 +176 345 +278 338 +78 384 +562 781 +463 1403 diff --git a/geom_bottleneck/tests/data/test_839_B b/geom_bottleneck/tests/data/test_839_B new file mode 100644 index 0000000..ca5ee3e --- /dev/null +++ b/geom_bottleneck/tests/data/test_839_B @@ -0,0 +1,30 @@ +768 1077 +971 1887 +547 1058 +468 905 +54 250 +727 782 +101 407 +111 1085 +637 826 +209 531 +690 1134 +989 1111 +817 848 +862 952 +530 679 +431 823 +958 1666 +973 1598 +423 766 +42 736 +833 1832 +206 848 +148 336 +804 1691 +186 361 +53 288 +449 1314 +618 904 +759 1339 +8 923 diff --git a/geom_bottleneck/tests/data/test_840_A b/geom_bottleneck/tests/data/test_840_A new file mode 100644 index 0000000..02ed823 --- /dev/null +++ b/geom_bottleneck/tests/data/test_840_A @@ -0,0 +1,50 @@ +121 1010 +730 1566 +866 872 +984 1105 +12 455 +503 963 +956 1410 +986 1887 +929 1377 +809 823 +129 1090 +545 640 +641 921 +786 916 +222 474 +464 677 +357 1055 +199 1046 +327 892 +449 1272 +564 1505 +867 1494 +383 585 +617 1200 +254 997 +528 994 +458 507 +250 1217 +141 1104 +710 1191 +565 1355 +959 1876 +323 665 +290 1141 +749 1035 +641 817 +855 1596 +296 610 +144 215 +563 776 +77 599 +380 1160 +720 811 +55 905 +389 830 +268 1170 +579 1272 +240 811 +552 737 +498 844 diff --git a/geom_bottleneck/tests/data/test_840_B b/geom_bottleneck/tests/data/test_840_B new file mode 100644 index 0000000..4bd5737 --- /dev/null +++ b/geom_bottleneck/tests/data/test_840_B @@ -0,0 +1,50 @@ +156 272 +847 1154 +32 482 +781 1129 +956 1017 +429 1305 +312 1054 +11 979 +495 1463 +645 1524 +521 901 +685 1414 +741 1123 +179 428 +475 1073 +360 1315 +435 524 +897 1422 +668 1253 +538 802 +79 329 +791 1484 +557 772 +831 950 +640 666 +196 358 +214 394 +738 1566 +788 1752 +932 1820 +853 1847 +561 1446 +671 1490 +792 1123 +892 1481 +9 650 +92 308 +760 1021 +807 1449 +721 1693 +932 1892 +674 734 +837 1338 +313 507 +300 686 +264 1045 +210 788 +426 1169 +354 1154 +711 1322 diff --git a/geom_bottleneck/tests/data/test_841_A b/geom_bottleneck/tests/data/test_841_A new file mode 100644 index 0000000..d6b2c08 --- /dev/null +++ b/geom_bottleneck/tests/data/test_841_A @@ -0,0 +1,50 @@ +932 1449 +350 597 +425 503 +858 1265 +781 1372 +293 300 +593 806 +958 1619 +647 819 +598 1284 +160 571 +651 955 +521 1143 +906 1546 +848 1529 +729 1180 +990 1245 +54 398 +404 1096 +88 896 +679 1094 +737 1504 +609 1460 +32 747 +338 1060 +565 1216 +637 1537 +449 1042 +889 1510 +184 241 +103 584 +136 919 +503 659 +848 1333 +890 941 +360 836 +418 506 +750 994 +963 1068 +712 1501 +331 396 +515 617 +555 728 +81 401 +186 654 +934 1122 +649 843 +953 1342 +316 622 +866 1234 diff --git a/geom_bottleneck/tests/data/test_841_B b/geom_bottleneck/tests/data/test_841_B new file mode 100644 index 0000000..9775dd8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_841_B @@ -0,0 +1,50 @@ +381 908 +662 956 +316 894 +326 664 +655 1453 +261 430 +385 866 +630 1168 +117 237 +603 1595 +19 419 +375 1154 +982 1372 +897 1324 +347 687 +868 1049 +53 1031 +722 1078 +918 1107 +675 1326 +485 505 +777 1032 +76 273 +231 1113 +751 1180 +937 1635 +156 873 +641 1316 +632 1052 +54 1021 +993 1159 +905 1039 +606 1293 +235 364 +530 540 +326 843 +636 1442 +474 814 +176 942 +924 1685 +668 817 +560 1090 +805 1794 +679 1076 +409 1108 +582 1311 +21 449 +142 622 +614 1153 +570 908 diff --git a/geom_bottleneck/tests/data/test_842_A b/geom_bottleneck/tests/data/test_842_A new file mode 100644 index 0000000..49124dc --- /dev/null +++ b/geom_bottleneck/tests/data/test_842_A @@ -0,0 +1,50 @@ +205 815 +309 971 +468 1170 +602 1127 +239 434 +403 631 +80 500 +14 864 +594 1199 +406 407 +30 360 +188 993 +381 1063 +175 1087 +357 1063 +153 1117 +600 1365 +662 1189 +513 744 +339 1332 +860 1720 +897 1406 +462 808 +191 234 +542 729 +425 738 +159 160 +821 1536 +327 355 +616 1302 +699 1148 +870 1512 +810 1146 +448 564 +881 1246 +364 833 +889 1160 +102 175 +385 731 +86 659 +14 321 +257 1193 +685 1606 +174 925 +165 1021 +116 419 +775 1510 +53 614 +18 39 +561 670 diff --git a/geom_bottleneck/tests/data/test_842_B b/geom_bottleneck/tests/data/test_842_B new file mode 100644 index 0000000..36715f2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_842_B @@ -0,0 +1,50 @@ +577 1182 +779 1169 +525 1384 +851 968 +906 1679 +221 445 +494 653 +813 1061 +478 1174 +37 224 +700 1239 +338 855 +82 670 +159 872 +932 1231 +89 411 +869 1484 +708 966 +814 1075 +108 203 +603 691 +797 1680 +869 1223 +162 165 +281 333 +650 721 +200 665 +692 1332 +497 1331 +948 1098 +351 1188 +844 1508 +319 762 +302 442 +320 617 +220 649 +498 882 +411 711 +833 1373 +943 1586 +310 544 +24 818 +485 903 +58 1028 +84 1023 +69 823 +399 634 +755 945 +460 764 +583 800 diff --git a/geom_bottleneck/tests/data/test_843_A b/geom_bottleneck/tests/data/test_843_A new file mode 100644 index 0000000..aa5cea9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_843_A @@ -0,0 +1,50 @@ +855 1686 +375 653 +487 968 +501 1179 +269 747 +102 128 +756 1241 +934 1507 +707 1166 +438 644 +215 482 +186 1134 +588 1179 +323 806 +260 948 +999 1181 +809 866 +383 618 +667 1211 +697 1543 +216 289 +618 1318 +230 633 +261 439 +36 430 +926 1424 +573 1382 +545 1489 +198 254 +997 1313 +625 1138 +71 216 +123 152 +966 1260 +583 1455 +685 1595 +319 803 +809 1754 +543 672 +973 1482 +282 1191 +94 413 +933 1847 +593 770 +384 463 +301 531 +306 832 +645 679 +863 1024 +257 716 diff --git a/geom_bottleneck/tests/data/test_843_B b/geom_bottleneck/tests/data/test_843_B new file mode 100644 index 0000000..b14eed6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_843_B @@ -0,0 +1,50 @@ +36 726 +683 1328 +991 1393 +822 1642 +499 1065 +41 726 +770 903 +83 190 +993 1392 +584 1281 +520 643 +878 1560 +461 694 +715 1155 +752 1593 +592 622 +8 746 +280 816 +571 797 +24 712 +799 1664 +988 1479 +397 1339 +827 1088 +466 1179 +701 1236 +841 1384 +360 1235 +425 739 +982 1503 +188 345 +161 405 +366 1067 +245 975 +834 1160 +19 508 +594 1292 +149 267 +201 891 +22 922 +984 1108 +731 1251 +871 1092 +946 1519 +772 1388 +738 1194 +924 1862 +35 765 +904 1276 +190 235 diff --git a/geom_bottleneck/tests/data/test_844_A b/geom_bottleneck/tests/data/test_844_A new file mode 100644 index 0000000..753b2fc --- /dev/null +++ b/geom_bottleneck/tests/data/test_844_A @@ -0,0 +1,50 @@ +207 275 +665 774 +655 1360 +274 366 +83 646 +435 599 +479 793 +74 1043 +604 1048 +106 557 +885 1524 +694 1680 +770 833 +38 261 +6 547 +893 1287 +732 1589 +343 1201 +531 1088 +962 1666 +979 1708 +206 538 +73 114 +354 1140 +220 330 +299 833 +694 883 +651 701 +256 425 +551 612 +709 1304 +806 1613 +193 901 +29 916 +257 313 +806 1193 +205 530 +981 1851 +878 1208 +327 799 +958 1874 +783 1109 +466 537 +349 1191 +410 630 +513 837 +587 1033 +777 1202 +90 503 +893 1737 diff --git a/geom_bottleneck/tests/data/test_844_B b/geom_bottleneck/tests/data/test_844_B new file mode 100644 index 0000000..373d26c --- /dev/null +++ b/geom_bottleneck/tests/data/test_844_B @@ -0,0 +1,50 @@ +67 793 +551 1443 +572 1395 +51 149 +805 920 +541 1479 +365 1244 +997 1447 +234 900 +144 1068 +418 929 +720 903 +155 219 +937 1905 +371 1112 +983 1372 +607 1244 +259 1217 +708 850 +992 1713 +398 968 +0 588 +167 742 +465 577 +188 892 +924 1045 +103 892 +489 1072 +170 195 +448 1141 +990 1075 +880 894 +703 1565 +318 785 +843 1614 +326 995 +104 185 +333 1186 +483 631 +246 797 +407 701 +333 545 +73 181 +591 1202 +851 1721 +615 1260 +504 1421 +472 486 +65 189 +986 1801 diff --git a/geom_bottleneck/tests/data/test_845_A b/geom_bottleneck/tests/data/test_845_A new file mode 100644 index 0000000..2015fbb --- /dev/null +++ b/geom_bottleneck/tests/data/test_845_A @@ -0,0 +1,50 @@ +446 1114 +872 1568 +544 1415 +144 507 +256 602 +208 382 +899 1217 +756 1597 +428 574 +201 843 +609 770 +443 531 +479 955 +959 1238 +821 1798 +564 1526 +26 545 +264 633 +34 527 +153 213 +215 703 +925 964 +651 1041 +32 797 +234 1162 +166 544 +407 981 +817 1528 +883 1412 +867 1173 +327 358 +326 330 +540 1054 +632 1503 +632 1465 +240 799 +954 1859 +214 374 +546 1395 +914 1529 +680 1588 +367 377 +890 971 +289 1247 +31 846 +810 1172 +658 1366 +537 1089 +256 1134 +16 1008 diff --git a/geom_bottleneck/tests/data/test_845_B b/geom_bottleneck/tests/data/test_845_B new file mode 100644 index 0000000..b053f52 --- /dev/null +++ b/geom_bottleneck/tests/data/test_845_B @@ -0,0 +1,50 @@ +537 582 +313 723 +386 619 +121 1100 +466 1044 +502 581 +16 838 +599 1395 +899 1523 +589 591 +36 928 +896 1718 +16 252 +99 722 +925 1343 +328 1244 +245 973 +596 1499 +122 763 +945 1563 +38 452 +680 890 +499 1247 +295 803 +385 1357 +885 1780 +597 637 +193 313 +951 1019 +679 1344 +991 1447 +697 1551 +834 1223 +57 795 +657 775 +374 1093 +187 398 +706 1353 +904 1801 +538 932 +843 1632 +370 1250 +590 957 +996 1385 +364 714 +307 689 +866 1687 +547 1072 +451 864 +746 900 diff --git a/geom_bottleneck/tests/data/test_846_A b/geom_bottleneck/tests/data/test_846_A new file mode 100644 index 0000000..520c6d4 --- /dev/null +++ b/geom_bottleneck/tests/data/test_846_A @@ -0,0 +1,50 @@ +659 889 +754 1573 +955 1466 +177 454 +109 235 +107 1086 +741 949 +689 1029 +288 564 +987 1133 +235 240 +398 1178 +27 395 +483 863 +509 1192 +920 1870 +732 1501 +494 1321 +190 362 +278 778 +726 1309 +397 1117 +7 888 +514 1366 +598 902 +48 950 +103 506 +770 1359 +689 1403 +340 1072 +191 850 +512 742 +441 507 +67 201 +50 781 +649 1619 +457 843 +756 993 +343 361 +505 1029 +687 707 +496 1371 +854 990 +555 1488 +217 249 +477 837 +150 258 +514 1286 +170 982 +160 521 diff --git a/geom_bottleneck/tests/data/test_846_B b/geom_bottleneck/tests/data/test_846_B new file mode 100644 index 0000000..3046f20 --- /dev/null +++ b/geom_bottleneck/tests/data/test_846_B @@ -0,0 +1,50 @@ +701 1467 +679 1557 +705 1082 +845 1787 +776 824 +890 1825 +867 1265 +105 710 +282 1235 +900 1455 +598 1253 +642 794 +304 961 +492 778 +16 233 +301 1249 +524 1358 +884 1577 +542 1423 +856 1110 +768 883 +226 755 +18 940 +846 916 +512 1411 +598 1196 +841 1345 +306 891 +571 981 +353 918 +840 1652 +886 1748 +269 1233 +940 1583 +364 1070 +187 683 +350 1141 +730 1223 +333 701 +284 449 +846 1539 +509 1400 +21 696 +543 778 +714 1428 +304 348 +475 1353 +594 1122 +426 946 +418 1312 diff --git a/geom_bottleneck/tests/data/test_847_A b/geom_bottleneck/tests/data/test_847_A new file mode 100644 index 0000000..ee5c8c1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_847_A @@ -0,0 +1,50 @@ +780 1633 +384 1190 +605 779 +787 1716 +504 698 +879 1796 +446 1258 +386 649 +830 1220 +576 717 +888 1126 +457 1259 +975 1588 +717 1266 +737 914 +103 695 +906 1516 +454 516 +696 899 +43 921 +613 781 +325 858 +655 1647 +72 601 +143 707 +293 1064 +13 310 +610 1021 +975 1576 +185 1017 +983 1261 +197 286 +68 472 +997 1630 +197 1191 +11 58 +804 1741 +364 519 +977 1124 +557 1184 +727 1681 +652 918 +928 1838 +675 1074 +551 976 +320 1244 +675 1477 +962 1898 +843 1490 +449 640 diff --git a/geom_bottleneck/tests/data/test_847_B b/geom_bottleneck/tests/data/test_847_B new file mode 100644 index 0000000..de6f45a --- /dev/null +++ b/geom_bottleneck/tests/data/test_847_B @@ -0,0 +1,50 @@ +198 500 +390 1022 +911 1544 +842 1778 +213 793 +173 1093 +61 455 +340 1005 +905 1418 +814 1236 +476 518 +133 382 +291 1249 +350 359 +967 1585 +441 810 +324 836 +769 1325 +828 1770 +758 1471 +9 499 +649 882 +418 1135 +28 97 +703 1400 +316 535 +799 1286 +16 348 +323 536 +113 864 +248 745 +468 597 +689 1618 +278 1208 +978 1589 +339 402 +232 442 +236 928 +856 1570 +709 1560 +34 260 +810 1365 +787 1781 +675 1043 +800 1255 +479 1118 +363 592 +97 729 +929 1430 +860 1219 diff --git a/geom_bottleneck/tests/data/test_848_A b/geom_bottleneck/tests/data/test_848_A new file mode 100644 index 0000000..e9e603b --- /dev/null +++ b/geom_bottleneck/tests/data/test_848_A @@ -0,0 +1,50 @@ +697 1454 +137 892 +466 950 +881 1230 +539 1162 +247 1065 +859 1032 +861 1215 +8 142 +772 1757 +458 1102 +382 730 +166 1086 +606 1008 +74 82 +967 1701 +562 1019 +648 764 +759 1745 +483 1208 +501 808 +942 1717 +569 888 +686 1292 +68 796 +504 1268 +655 1529 +335 451 +139 339 +709 1570 +238 542 +999 1912 +904 1545 +735 1386 +265 909 +935 1749 +745 787 +397 1083 +295 963 +12 523 +769 943 +998 1204 +531 1528 +596 1140 +173 1030 +810 1356 +728 750 +554 1185 +334 643 +879 1368 diff --git a/geom_bottleneck/tests/data/test_848_B b/geom_bottleneck/tests/data/test_848_B new file mode 100644 index 0000000..00005be --- /dev/null +++ b/geom_bottleneck/tests/data/test_848_B @@ -0,0 +1,50 @@ +885 1435 +500 978 +291 765 +353 1157 +527 1446 +734 904 +302 393 +199 918 +561 744 +96 349 +338 631 +503 1162 +286 589 +492 544 +826 1742 +924 1340 +707 877 +691 1487 +883 1530 +233 810 +73 252 +192 595 +271 491 +915 1426 +128 781 +906 1244 +268 308 +979 1349 +823 1647 +993 1177 +318 961 +619 1143 +857 1682 +92 110 +676 1202 +485 1468 +968 1064 +565 634 +49 1043 +487 1316 +668 1425 +552 1443 +589 655 +515 850 +858 1826 +514 779 +322 506 +422 996 +213 1013 +897 1711 diff --git a/geom_bottleneck/tests/data/test_849_A b/geom_bottleneck/tests/data/test_849_A new file mode 100644 index 0000000..7938a96 --- /dev/null +++ b/geom_bottleneck/tests/data/test_849_A @@ -0,0 +1,50 @@ +785 1228 +858 997 +734 1553 +888 1700 +553 1433 +352 385 +851 1468 +803 950 +358 715 +376 1290 +419 784 +38 689 +504 1285 +250 768 +344 1015 +295 1063 +501 1219 +995 1383 +781 1320 +260 1154 +290 942 +683 918 +623 1468 +74 654 +742 1201 +919 974 +718 1316 +591 821 +864 1035 +591 951 +922 1553 +751 1468 +57 832 +809 1103 +243 322 +605 919 +947 1101 +7 1003 +655 1586 +737 1610 +537 935 +185 455 +466 834 +160 599 +386 1035 +381 448 +841 1005 +898 1693 +493 729 +506 685 diff --git a/geom_bottleneck/tests/data/test_849_B b/geom_bottleneck/tests/data/test_849_B new file mode 100644 index 0000000..21da75d --- /dev/null +++ b/geom_bottleneck/tests/data/test_849_B @@ -0,0 +1,50 @@ +87 1055 +578 1265 +657 1071 +939 1551 +679 1032 +768 1665 +668 1163 +689 1159 +229 1083 +358 1158 +515 595 +972 1301 +764 1428 +551 1533 +770 929 +104 172 +948 1359 +48 854 +510 995 +914 1735 +228 440 +854 1064 +351 908 +664 1290 +919 1050 +882 1794 +472 819 +826 1133 +279 944 +363 1081 +296 934 +227 749 +172 931 +583 1524 +409 848 +284 804 +436 1098 +96 768 +632 646 +832 1167 +862 1470 +544 1519 +889 1030 +422 1414 +948 1105 +967 1273 +552 589 +986 1793 +52 252 +430 864 diff --git a/geom_bottleneck/tests/data/test_850_A b/geom_bottleneck/tests/data/test_850_A new file mode 100644 index 0000000..dfb2165 --- /dev/null +++ b/geom_bottleneck/tests/data/test_850_A @@ -0,0 +1,50 @@ +819 907 +322 836 +10 262 +950 1844 +280 419 +724 1489 +982 1737 +183 305 +393 1066 +958 1033 +328 554 +609 1374 +512 835 +563 1444 +671 972 +161 838 +631 851 +867 1362 +995 1134 +990 1841 +479 839 +439 502 +408 917 +879 1633 +725 863 +271 614 +757 1203 +70 980 +745 841 +739 1679 +269 934 +926 1412 +977 1200 +532 1251 +607 708 +524 726 +737 983 +700 1200 +715 1247 +301 596 +136 869 +290 397 +88 764 +250 945 +0 378 +595 1513 +612 874 +706 757 +353 712 +509 953 diff --git a/geom_bottleneck/tests/data/test_850_B b/geom_bottleneck/tests/data/test_850_B new file mode 100644 index 0000000..573788d --- /dev/null +++ b/geom_bottleneck/tests/data/test_850_B @@ -0,0 +1,50 @@ +602 1008 +42 926 +253 1183 +404 631 +779 1700 +698 1638 +92 1004 +296 370 +204 378 +225 593 +685 1259 +982 1447 +544 951 +682 1653 +449 1092 +664 1035 +856 1428 +658 1320 +615 1113 +83 285 +276 745 +297 363 +590 732 +547 999 +440 901 +337 830 +492 595 +487 1018 +159 1115 +853 1350 +139 377 +9 573 +47 505 +187 480 +374 510 +831 1626 +948 1484 +450 1028 +840 1390 +132 288 +472 1025 +74 260 +281 518 +95 248 +699 735 +275 1183 +802 971 +119 1091 +709 1224 +397 855 diff --git a/geom_bottleneck/tests/data/test_851_A b/geom_bottleneck/tests/data/test_851_A new file mode 100644 index 0000000..0a2f88e --- /dev/null +++ b/geom_bottleneck/tests/data/test_851_A @@ -0,0 +1,50 @@ +390 859 +367 1332 +230 1179 +734 1289 +67 554 +186 319 +787 841 +516 1218 +616 1597 +551 1223 +669 862 +265 888 +24 428 +841 1616 +816 1058 +922 1460 +749 1311 +734 1658 +581 973 +780 1708 +99 1091 +851 1503 +161 1118 +944 1804 +456 458 +395 1163 +880 1842 +850 1397 +359 461 +996 1098 +337 1164 +975 994 +512 816 +436 648 +42 59 +586 841 +48 65 +352 821 +58 171 +870 1085 +639 763 +415 1274 +549 913 +37 47 +820 1311 +120 854 +924 1272 +325 800 +483 888 +167 512 diff --git a/geom_bottleneck/tests/data/test_851_B b/geom_bottleneck/tests/data/test_851_B new file mode 100644 index 0000000..8e4b97e --- /dev/null +++ b/geom_bottleneck/tests/data/test_851_B @@ -0,0 +1,50 @@ +173 900 +214 742 +715 941 +288 723 +561 1288 +482 789 +555 1396 +244 1162 +24 229 +897 1127 +809 1700 +785 1558 +76 361 +453 827 +61 728 +600 986 +237 887 +720 1191 +834 1643 +576 1344 +764 1307 +417 1377 +780 1174 +187 235 +776 1010 +952 970 +377 1184 +454 979 +758 970 +330 1179 +364 1105 +101 909 +481 692 +579 1234 +623 1088 +425 464 +360 503 +534 882 +363 1011 +973 1732 +413 504 +171 514 +89 282 +430 1044 +531 610 +713 873 +737 1131 +807 1603 +584 1034 +887 1189 diff --git a/geom_bottleneck/tests/data/test_852_A b/geom_bottleneck/tests/data/test_852_A new file mode 100644 index 0000000..3d8f706 --- /dev/null +++ b/geom_bottleneck/tests/data/test_852_A @@ -0,0 +1,50 @@ +473 535 +32 734 +940 1633 +31 264 +217 284 +963 1618 +780 1453 +436 606 +958 1899 +509 1436 +1000 1824 +793 889 +667 1236 +647 1383 +588 1280 +682 1431 +617 765 +740 799 +640 1082 +724 1466 +540 1456 +772 1324 +551 1437 +270 1096 +709 1110 +317 876 +6 185 +612 686 +220 1032 +55 414 +272 669 +233 973 +264 825 +58 779 +92 330 +837 910 +106 237 +980 1316 +806 1161 +433 1270 +304 900 +569 882 +459 563 +991 1221 +33 686 +228 429 +527 542 +911 1456 +395 938 +825 1625 diff --git a/geom_bottleneck/tests/data/test_852_B b/geom_bottleneck/tests/data/test_852_B new file mode 100644 index 0000000..9de826f --- /dev/null +++ b/geom_bottleneck/tests/data/test_852_B @@ -0,0 +1,50 @@ +380 777 +698 1291 +826 1366 +108 741 +88 586 +50 631 +333 860 +51 355 +746 1232 +864 1129 +312 868 +514 591 +818 940 +561 1106 +997 1618 +986 1648 +417 1273 +544 1325 +343 1332 +852 1788 +740 1072 +890 957 +880 1540 +110 1072 +969 1706 +964 1771 +366 1347 +542 631 +863 1294 +216 864 +766 1148 +436 1431 +227 989 +694 786 +216 801 +119 946 +607 1270 +300 1178 +338 572 +374 509 +233 934 +531 542 +174 504 +521 738 +837 1202 +231 528 +595 1041 +530 1474 +218 852 +874 1675 diff --git a/geom_bottleneck/tests/data/test_853_A b/geom_bottleneck/tests/data/test_853_A new file mode 100644 index 0000000..bcf5afe --- /dev/null +++ b/geom_bottleneck/tests/data/test_853_A @@ -0,0 +1,50 @@ +200 886 +263 814 +456 853 +495 694 +864 1233 +80 743 +147 356 +164 450 +250 1230 +759 792 +417 1228 +572 1002 +854 1634 +806 1057 +522 1196 +684 1295 +999 1547 +301 1014 +772 1685 +816 923 +820 876 +118 348 +340 849 +686 824 +874 1610 +510 1503 +602 1309 +677 1497 +146 1008 +853 1484 +729 1333 +617 1097 +511 935 +143 938 +485 552 +433 980 +859 1077 +3 717 +176 1136 +436 1213 +163 418 +505 889 +303 689 +837 1225 +296 345 +814 1699 +603 1524 +679 1224 +729 1714 +760 953 diff --git a/geom_bottleneck/tests/data/test_853_B b/geom_bottleneck/tests/data/test_853_B new file mode 100644 index 0000000..d294f05 --- /dev/null +++ b/geom_bottleneck/tests/data/test_853_B @@ -0,0 +1,50 @@ +223 899 +821 1752 +179 260 +757 1350 +661 1211 +397 1004 +114 557 +579 1379 +752 1531 +292 818 +459 580 +715 1007 +849 1067 +495 1197 +803 991 +588 1569 +362 1316 +38 961 +899 1762 +325 906 +411 1364 +320 1221 +301 674 +811 1126 +464 1441 +220 1130 +514 784 +196 240 +946 1543 +614 928 +610 626 +628 1059 +576 829 +363 1272 +338 888 +470 497 +767 824 +578 645 +136 573 +563 731 +794 1510 +466 1243 +341 1080 +34 787 +901 1260 +339 1068 +406 746 +135 590 +507 1272 +705 756 diff --git a/geom_bottleneck/tests/data/test_854_A b/geom_bottleneck/tests/data/test_854_A new file mode 100644 index 0000000..4765953 --- /dev/null +++ b/geom_bottleneck/tests/data/test_854_A @@ -0,0 +1,50 @@ +670 1518 +858 1578 +59 559 +503 768 +14 876 +830 858 +978 1670 +648 1003 +620 1028 +522 809 +678 1574 +303 1157 +238 748 +886 987 +445 1100 +994 1772 +50 602 +134 315 +885 1274 +862 1737 +369 1231 +199 594 +611 1387 +517 1513 +731 865 +357 1222 +137 822 +894 1389 +839 1547 +962 1432 +170 512 +596 907 +480 545 +416 889 +311 1213 +897 1057 +394 1075 +943 1054 +342 1014 +137 742 +163 843 +655 763 +642 1182 +753 1458 +200 958 +289 311 +726 808 +614 1330 +796 1506 +292 555 diff --git a/geom_bottleneck/tests/data/test_854_B b/geom_bottleneck/tests/data/test_854_B new file mode 100644 index 0000000..aa949eb --- /dev/null +++ b/geom_bottleneck/tests/data/test_854_B @@ -0,0 +1,50 @@ +232 702 +892 1789 +441 1152 +710 975 +908 1187 +315 530 +255 334 +502 1485 +820 1718 +531 1002 +694 1032 +183 594 +924 1037 +948 1015 +465 906 +854 1761 +257 924 +588 1298 +382 1070 +315 646 +68 997 +924 1788 +927 1813 +522 1496 +667 1585 +884 1720 +373 1104 +140 1087 +988 1426 +690 796 +538 1095 +458 489 +685 805 +554 1389 +708 1480 +155 566 +704 891 +194 356 +607 1330 +512 725 +343 985 +660 1310 +117 1001 +454 1189 +554 1122 +722 1493 +805 1093 +60 419 +403 1277 +847 1750 diff --git a/geom_bottleneck/tests/data/test_855_A b/geom_bottleneck/tests/data/test_855_A new file mode 100644 index 0000000..ab7ec0b --- /dev/null +++ b/geom_bottleneck/tests/data/test_855_A @@ -0,0 +1,50 @@ +614 654 +663 1260 +449 1202 +762 985 +173 235 +219 556 +230 1224 +569 739 +65 145 +814 1671 +395 1280 +224 1211 +349 1209 +628 1611 +680 1532 +644 1398 +971 1611 +574 1353 +832 1740 +866 1082 +822 1654 +786 1770 +200 1071 +709 1343 +955 1924 +78 546 +168 872 +251 735 +505 1392 +719 799 +321 327 +823 1682 +327 788 +85 640 +423 1306 +581 665 +476 665 +257 926 +305 600 +828 1419 +957 1645 +22 783 +760 1281 +890 1141 +756 1272 +852 1339 +162 1155 +661 1360 +328 597 +81 549 diff --git a/geom_bottleneck/tests/data/test_855_B b/geom_bottleneck/tests/data/test_855_B new file mode 100644 index 0000000..be6ff94 --- /dev/null +++ b/geom_bottleneck/tests/data/test_855_B @@ -0,0 +1,50 @@ +758 1131 +201 805 +622 704 +457 770 +211 1153 +604 1593 +658 1229 +845 1733 +3 55 +813 1682 +926 1122 +87 399 +415 1287 +943 1357 +538 884 +39 447 +678 1201 +469 977 +445 1406 +931 992 +137 843 +914 1789 +736 1382 +933 1376 +426 1190 +332 715 +385 1226 +727 1493 +972 1306 +674 1674 +801 1277 +542 1301 +591 1067 +318 1136 +90 552 +168 232 +814 1715 +860 1249 +104 353 +841 1674 +775 1615 +517 693 +103 261 +472 517 +56 570 +767 1433 +839 1303 +683 1605 +311 700 +89 256 diff --git a/geom_bottleneck/tests/data/test_856_A b/geom_bottleneck/tests/data/test_856_A new file mode 100644 index 0000000..3cbfae3 --- /dev/null +++ b/geom_bottleneck/tests/data/test_856_A @@ -0,0 +1,50 @@ +719 1457 +209 663 +890 1735 +774 1570 +582 935 +231 1051 +723 1681 +341 1197 +4 150 +30 263 +38 984 +950 1487 +523 609 +453 854 +956 1422 +180 436 +690 966 +848 1237 +972 1095 +120 843 +523 1438 +49 182 +294 622 +586 1385 +750 786 +856 1407 +327 1270 +655 957 +373 1358 +372 785 +727 1497 +308 567 +784 1046 +315 913 +862 1742 +699 1337 +24 662 +407 455 +24 393 +913 1501 +13 1005 +709 1107 +264 1079 +107 781 +275 805 +164 179 +445 1355 +907 1785 +571 629 +953 1080 diff --git a/geom_bottleneck/tests/data/test_856_B b/geom_bottleneck/tests/data/test_856_B new file mode 100644 index 0000000..ec34ae9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_856_B @@ -0,0 +1,50 @@ +724 1643 +458 1388 +638 1303 +431 1405 +710 861 +659 723 +714 1351 +402 1186 +730 1584 +304 788 +845 850 +331 451 +421 1121 +821 1257 +2 923 +246 1167 +776 1109 +307 963 +553 1262 +841 1061 +27 290 +507 1297 +471 935 +583 1176 +781 955 +286 703 +178 303 +674 1372 +942 968 +521 1497 +6 593 +198 375 +263 1085 +486 1143 +807 1093 +17 795 +921 1559 +577 1316 +45 282 +670 1319 +228 400 +480 1047 +477 1308 +971 1055 +336 396 +731 941 +995 1354 +535 1309 +648 1642 +441 1432 diff --git a/geom_bottleneck/tests/data/test_857_A b/geom_bottleneck/tests/data/test_857_A new file mode 100644 index 0000000..6bbbf0b --- /dev/null +++ b/geom_bottleneck/tests/data/test_857_A @@ -0,0 +1,50 @@ +155 1103 +527 601 +613 714 +27 82 +288 1267 +522 713 +839 925 +554 1132 +148 255 +692 1319 +216 257 +11 251 +199 862 +371 724 +728 1561 +314 918 +452 540 +30 958 +745 1698 +434 1341 +469 1469 +913 1715 +599 1267 +260 953 +182 511 +504 1442 +597 1080 +300 888 +459 1000 +563 1521 +563 1468 +760 1702 +8 519 +393 910 +108 255 +375 1168 +344 1257 +563 1052 +813 1139 +999 1599 +175 785 +847 882 +825 1567 +977 1567 +218 847 +921 1150 +888 1280 +395 761 +495 1444 +195 1091 diff --git a/geom_bottleneck/tests/data/test_857_B b/geom_bottleneck/tests/data/test_857_B new file mode 100644 index 0000000..2d0ac7d --- /dev/null +++ b/geom_bottleneck/tests/data/test_857_B @@ -0,0 +1,50 @@ +781 853 +693 1641 +405 573 +301 1124 +303 1182 +839 1546 +597 1040 +56 318 +13 902 +667 878 +555 979 +486 1277 +647 782 +602 1195 +218 288 +59 487 +581 822 +703 842 +123 587 +173 609 +841 975 +554 641 +828 1660 +872 1486 +511 1069 +454 942 +933 1266 +416 643 +59 582 +278 354 +687 901 +1 930 +473 917 +604 950 +122 639 +126 987 +105 1046 +705 1298 +749 1143 +394 417 +15 16 +356 751 +955 1065 +599 813 +881 1008 +984 1857 +531 1371 +354 668 +747 1406 +738 1675 diff --git a/geom_bottleneck/tests/data/test_858_A b/geom_bottleneck/tests/data/test_858_A new file mode 100644 index 0000000..1d3b9ad --- /dev/null +++ b/geom_bottleneck/tests/data/test_858_A @@ -0,0 +1,50 @@ +997 1050 +873 1795 +636 907 +851 1847 +38 669 +941 1873 +706 814 +776 882 +723 1329 +578 1461 +697 727 +369 1010 +426 1101 +552 720 +196 1177 +346 515 +701 1633 +399 514 +937 1425 +566 1446 +605 962 +260 696 +675 1180 +359 672 +192 355 +919 1323 +38 663 +688 1298 +239 504 +349 402 +842 1446 +831 1046 +442 770 +78 160 +351 1088 +577 1360 +29 290 +290 507 +467 1363 +1000 1796 +58 709 +428 615 +397 470 +628 1481 +874 1036 +32 84 +349 524 +244 821 +552 654 +762 1121 diff --git a/geom_bottleneck/tests/data/test_858_B b/geom_bottleneck/tests/data/test_858_B new file mode 100644 index 0000000..a982114 --- /dev/null +++ b/geom_bottleneck/tests/data/test_858_B @@ -0,0 +1,50 @@ +788 1123 +394 925 +228 647 +718 993 +774 961 +984 1106 +712 1001 +607 1594 +627 967 +971 1710 +166 510 +25 544 +985 1358 +205 1127 +844 1792 +510 518 +479 517 +828 1454 +61 1061 +647 1410 +727 1585 +94 479 +768 922 +162 895 +735 754 +951 1358 +747 1267 +933 980 +319 1007 +183 1000 +521 778 +129 375 +235 1221 +392 808 +872 1465 +380 794 +915 1896 +242 621 +908 1118 +341 593 +393 1304 +469 1169 +733 1077 +979 1477 +786 1583 +923 1650 +867 896 +714 1479 +860 907 +310 461 diff --git a/geom_bottleneck/tests/data/test_859_A b/geom_bottleneck/tests/data/test_859_A new file mode 100644 index 0000000..24bd533 --- /dev/null +++ b/geom_bottleneck/tests/data/test_859_A @@ -0,0 +1,50 @@ +305 883 +599 1497 +157 582 +832 1048 +62 403 +263 1151 +898 962 +258 428 +309 729 +626 1318 +279 415 +635 1029 +898 974 +733 1187 +661 1430 +243 1046 +498 865 +70 189 +834 1801 +820 1278 +972 1686 +255 826 +761 1694 +383 593 +326 491 +442 684 +523 1381 +229 1215 +402 551 +514 1133 +493 677 +415 996 +301 389 +586 1554 +21 956 +861 1058 +625 1082 +599 1208 +672 1147 +335 1229 +119 282 +114 772 +104 250 +236 977 +804 1446 +310 1229 +727 1176 +660 1484 +650 1188 +782 1781 diff --git a/geom_bottleneck/tests/data/test_859_B b/geom_bottleneck/tests/data/test_859_B new file mode 100644 index 0000000..ac8c3b7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_859_B @@ -0,0 +1,50 @@ +676 874 +562 574 +260 841 +590 1249 +517 1185 +85 807 +447 909 +50 185 +961 1522 +825 1594 +159 879 +105 1015 +767 1661 +828 1827 +341 355 +104 716 +1000 1615 +135 156 +580 1099 +898 1322 +797 1442 +145 272 +397 427 +289 717 +147 535 +543 1442 +491 761 +315 888 +943 1377 +941 1582 +703 1561 +873 1055 +981 1494 +933 989 +54 194 +842 1269 +901 1394 +346 1035 +858 1198 +864 1606 +122 873 +587 936 +705 1286 +176 754 +690 1066 +950 1037 +346 781 +474 1279 +180 1172 +957 1613 diff --git a/geom_bottleneck/tests/data/test_860_A b/geom_bottleneck/tests/data/test_860_A new file mode 100644 index 0000000..bef7e26 --- /dev/null +++ b/geom_bottleneck/tests/data/test_860_A @@ -0,0 +1,100 @@ +286 883 +351 366 +209 489 +760 1212 +838 1652 +595 660 +603 1448 +39 243 +601 832 +245 589 +258 1170 +586 1359 +639 1499 +233 1078 +722 781 +998 1722 +867 952 +85 635 +625 1224 +545 1458 +103 885 +227 270 +397 911 +28 776 +893 1191 +600 929 +554 1437 +510 611 +768 769 +396 540 +753 1168 +508 915 +609 874 +804 1177 +777 1596 +547 844 +63 286 +979 1153 +672 1523 +620 1414 +189 629 +841 889 +329 1319 +234 432 +267 1009 +441 1379 +954 1894 +908 1341 +313 1305 +671 1250 +296 992 +518 1355 +596 905 +169 366 +333 524 +73 352 +670 1216 +459 560 +945 1546 +279 561 +27 773 +701 1354 +768 1673 +778 829 +698 1194 +680 1054 +138 954 +957 1332 +873 1110 +215 605 +997 1772 +785 935 +985 1406 +999 1441 +849 924 +547 721 +80 977 +181 321 +44 87 +561 763 +448 1065 +694 711 +539 904 +522 1201 +951 1434 +467 766 +261 1178 +900 1180 +440 1158 +134 1038 +375 383 +383 722 +974 1675 +105 380 +42 94 +855 877 +176 220 +379 952 +415 1095 +273 1064 diff --git a/geom_bottleneck/tests/data/test_860_B b/geom_bottleneck/tests/data/test_860_B new file mode 100644 index 0000000..36f7915 --- /dev/null +++ b/geom_bottleneck/tests/data/test_860_B @@ -0,0 +1,100 @@ +54 531 +338 1142 +464 1266 +979 1648 +714 782 +478 592 +490 1025 +958 1817 +518 1232 +259 955 +628 1122 +47 423 +831 1649 +30 971 +833 1292 +304 784 +824 1612 +267 1156 +839 926 +190 200 +817 1817 +876 1083 +654 1410 +665 1309 +226 671 +584 640 +234 1111 +806 1282 +227 642 +80 717 +608 1151 +60 808 +216 928 +177 644 +218 1177 +690 1266 +450 1313 +309 861 +979 1696 +210 1066 +461 1403 +317 680 +313 722 +112 770 +166 746 +275 515 +566 1020 +575 931 +483 851 +807 1561 +137 467 +539 1148 +539 1511 +323 563 +633 1434 +287 1046 +260 320 +785 1657 +665 1299 +123 1038 +731 1330 +844 1161 +783 785 +212 619 +712 1288 +617 761 +367 381 +613 1128 +249 372 +977 1165 +202 504 +553 1006 +760 1241 +621 1168 +761 1372 +920 1579 +541 1430 +890 1618 +20 801 +495 809 +685 1544 +709 1130 +321 1130 +802 1219 +122 740 +660 1369 +283 810 +424 425 +475 580 +616 1579 +669 1244 +223 1000 +57 188 +365 1019 +775 1711 +451 512 +234 627 +741 1601 +526 1293 +911 1233 diff --git a/geom_bottleneck/tests/data/test_861_A b/geom_bottleneck/tests/data/test_861_A new file mode 100644 index 0000000..1058733 --- /dev/null +++ b/geom_bottleneck/tests/data/test_861_A @@ -0,0 +1,100 @@ +127 281 +555 671 +852 1188 +977 1877 +824 1400 +698 772 +759 1378 +901 1755 +445 1382 +653 1090 +781 1672 +314 1003 +826 861 +86 713 +880 1567 +253 886 +285 1117 +742 1603 +867 1483 +14 632 +845 1280 +649 1074 +322 897 +68 387 +618 679 +918 935 +89 1077 +586 1247 +52 917 +550 1169 +426 952 +535 860 +485 1229 +152 400 +241 1071 +77 181 +795 948 +942 1437 +728 811 +119 577 +433 921 +492 1054 +582 881 +813 1720 +40 497 +389 500 +542 570 +570 580 +672 953 +754 1221 +362 468 +707 1394 +146 927 +142 1098 +820 1494 +539 1194 +422 1194 +277 1109 +975 1238 +718 1181 +1 133 +887 1015 +961 1428 +758 1212 +48 554 +945 1432 +302 1165 +742 1046 +941 1415 +468 634 +964 1097 +220 232 +970 1602 +876 1222 +712 737 +131 471 +939 1209 +579 1496 +953 1937 +295 1269 +757 1470 +141 236 +649 712 +895 1621 +806 1653 +61 736 +695 948 +986 1051 +630 1053 +637 643 +951 1857 +991 1205 +982 1752 +395 549 +216 323 +803 1202 +976 1731 +866 1223 +540 1029 +786 805 diff --git a/geom_bottleneck/tests/data/test_861_B b/geom_bottleneck/tests/data/test_861_B new file mode 100644 index 0000000..a6a11d7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_861_B @@ -0,0 +1,100 @@ +517 1489 +251 612 +436 1287 +158 969 +181 653 +176 187 +494 1323 +174 1154 +896 926 +101 733 +416 984 +583 763 +161 512 +111 495 +991 1712 +827 854 +342 877 +13 212 +808 1594 +423 1182 +219 666 +195 233 +347 708 +979 1787 +758 1254 +414 1279 +421 563 +340 722 +209 552 +258 704 +776 1610 +672 972 +412 1195 +48 846 +946 1569 +844 1094 +891 1866 +430 925 +661 1317 +819 1214 +837 1824 +731 982 +14 53 +333 1086 +512 868 +789 1264 +15 313 +256 973 +678 1052 +259 1229 +969 1150 +602 1255 +302 1291 +257 1082 +756 1579 +103 110 +125 960 +368 1258 +183 1001 +559 1106 +447 944 +784 1446 +947 1735 +982 1775 +586 1368 +239 1171 +210 856 +94 1017 +138 1075 +59 657 +440 1015 +978 1530 +785 1259 +381 963 +463 1115 +785 1398 +0 147 +952 1432 +573 1345 +592 1443 +829 1357 +250 966 +948 1110 +848 1569 +251 904 +945 1606 +99 1025 +799 863 +690 1141 +21 445 +860 1338 +43 130 +148 853 +261 979 +177 324 +400 1084 +277 1098 +888 1223 +948 1629 +573 1197 diff --git a/geom_bottleneck/tests/data/test_862_A b/geom_bottleneck/tests/data/test_862_A new file mode 100644 index 0000000..d37d3ef --- /dev/null +++ b/geom_bottleneck/tests/data/test_862_A @@ -0,0 +1,100 @@ +102 300 +352 359 +521 683 +515 1057 +914 1269 +100 498 +589 1272 +77 129 +417 487 +579 1450 +101 780 +36 807 +588 1009 +556 1004 +875 1497 +488 1097 +842 1462 +221 1204 +328 518 +186 828 +870 992 +309 931 +56 558 +780 1456 +164 1070 +472 934 +412 1210 +842 872 +575 1445 +755 1457 +250 571 +426 1223 +367 1073 +648 749 +303 1009 +147 491 +118 1002 +320 398 +473 1445 +817 1679 +35 369 +170 947 +953 1168 +169 278 +307 547 +260 507 +901 1598 +116 381 +241 765 +98 970 +216 1171 +746 1175 +605 1578 +601 1019 +598 967 +316 723 +838 1609 +78 357 +563 893 +545 1089 +813 1743 +981 1110 +454 514 +613 799 +742 1712 +620 764 +464 702 +643 1186 +674 1638 +418 669 +310 1147 +325 1015 +983 1678 +625 951 +407 750 +973 1792 +552 1354 +391 1120 +463 829 +716 1387 +6 403 +177 756 +505 708 +219 471 +187 714 +852 1248 +913 1610 +971 1722 +943 1812 +452 726 +509 624 +178 767 +699 1085 +771 1634 +140 251 +646 822 +456 754 +263 1179 +430 540 +96 810 diff --git a/geom_bottleneck/tests/data/test_862_B b/geom_bottleneck/tests/data/test_862_B new file mode 100644 index 0000000..a18168e --- /dev/null +++ b/geom_bottleneck/tests/data/test_862_B @@ -0,0 +1,100 @@ +123 340 +973 1465 +652 1288 +89 1046 +165 777 +390 986 +139 396 +378 927 +426 1167 +32 223 +259 1177 +771 1250 +494 1143 +528 759 +515 912 +319 992 +134 169 +851 1595 +676 816 +111 304 +35 872 +58 456 +522 1458 +392 1221 +112 1035 +471 1214 +495 580 +339 1276 +143 268 +12 788 +723 1470 +745 1088 +664 1449 +442 463 +268 1026 +289 910 +141 162 +411 1163 +626 1174 +743 1627 +261 1211 +950 1869 +214 1114 +995 1678 +586 960 +754 1098 +363 1013 +808 1761 +58 601 +267 1109 +571 1518 +639 1092 +565 785 +256 537 +490 509 +467 1036 +931 1450 +891 1584 +701 1280 +939 1642 +416 834 +72 964 +530 553 +224 331 +234 683 +722 1338 +190 496 +282 1201 +174 1133 +348 690 +799 1606 +891 1085 +408 1263 +204 522 +867 1729 +856 1102 +175 589 +827 1559 +880 1479 +558 720 +810 1534 +954 1315 +501 901 +675 1031 +721 1091 +265 1103 +670 1553 +587 614 +712 735 +713 1167 +565 714 +67 594 +928 1456 +375 449 +893 1022 +319 500 +101 783 +637 1572 +26 620 +107 845 diff --git a/geom_bottleneck/tests/data/test_863_A b/geom_bottleneck/tests/data/test_863_A new file mode 100644 index 0000000..011d452 --- /dev/null +++ b/geom_bottleneck/tests/data/test_863_A @@ -0,0 +1,100 @@ +596 1590 +388 1099 +928 1387 +473 1128 +595 925 +188 767 +40 804 +542 1405 +661 1245 +579 666 +526 616 +235 378 +379 477 +257 781 +910 1279 +882 1387 +562 1374 +499 603 +342 1317 +184 581 +315 1198 +987 1072 +696 1049 +498 1250 +782 1609 +771 1330 +203 354 +227 1171 +506 939 +360 1303 +969 1942 +772 850 +615 1079 +542 1186 +644 1583 +676 1131 +496 1300 +825 1120 +492 1332 +408 1051 +768 1110 +466 1044 +795 1594 +56 577 +529 1378 +899 1752 +943 1916 +509 780 +609 1175 +999 1928 +360 1164 +901 1764 +558 592 +665 752 +7 82 +919 1683 +772 1057 +211 928 +494 1347 +568 1412 +661 1649 +466 551 +75 498 +329 577 +143 636 +112 144 +217 221 +340 1208 +259 1177 +36 364 +63 299 +74 513 +67 186 +201 672 +508 1253 +96 129 +301 991 +925 1873 +340 1050 +237 672 +445 816 +836 1594 +649 1458 +227 1152 +880 933 +209 939 +822 890 +760 1131 +274 1096 +706 1604 +33 589 +552 1228 +69 615 +794 914 +305 423 +956 1053 +914 1411 +421 1282 +261 1067 +967 1966 diff --git a/geom_bottleneck/tests/data/test_863_B b/geom_bottleneck/tests/data/test_863_B new file mode 100644 index 0000000..d9daaae --- /dev/null +++ b/geom_bottleneck/tests/data/test_863_B @@ -0,0 +1,100 @@ +986 1775 +226 644 +68 818 +739 1449 +962 1111 +850 1460 +306 1206 +901 1742 +171 513 +83 396 +776 1243 +646 948 +693 1431 +219 627 +247 813 +243 1070 +452 1130 +315 1227 +16 808 +977 1035 +454 583 +566 1521 +437 507 +484 1294 +494 506 +752 1161 +152 1081 +566 1413 +141 331 +706 1243 +258 849 +729 1447 +988 1985 +774 1653 +972 1907 +510 589 +402 905 +981 1420 +688 1112 +291 1016 +975 1800 +240 879 +643 1264 +448 458 +707 1075 +157 654 +51 635 +639 677 +688 1518 +99 198 +914 1734 +445 1036 +897 941 +504 1318 +192 479 +287 1003 +624 1444 +815 961 +956 1436 +445 656 +52 574 +787 987 +994 1875 +354 1317 +189 1072 +264 418 +645 1086 +319 942 +202 676 +841 1204 +695 1354 +289 748 +631 649 +894 1632 +909 1782 +794 1065 +0 430 +4 209 +286 1174 +327 1132 +342 641 +455 1256 +295 819 +749 1381 +811 1469 +69 514 +54 1044 +262 1176 +418 854 +819 1524 +861 1796 +242 996 +990 1068 +19 519 +831 1475 +782 1334 +748 986 +869 1569 +556 1535 +685 1411 diff --git a/geom_bottleneck/tests/data/test_864_A b/geom_bottleneck/tests/data/test_864_A new file mode 100644 index 0000000..f82ed50 --- /dev/null +++ b/geom_bottleneck/tests/data/test_864_A @@ -0,0 +1,100 @@ +698 789 +78 479 +383 639 +731 1686 +306 787 +614 696 +719 1184 +404 852 +317 776 +91 656 +126 806 +19 775 +976 1941 +876 1716 +501 1160 +851 1078 +547 641 +187 372 +654 1080 +745 1229 +151 577 +219 600 +318 1253 +317 362 +720 1487 +147 720 +900 1717 +402 1317 +187 1156 +573 1301 +173 479 +613 889 +956 1747 +583 1203 +478 1031 +498 1031 +394 1197 +118 842 +204 246 +562 1361 +340 835 +749 871 +847 1637 +776 1643 +731 1242 +302 741 +312 369 +903 1276 +814 1418 +205 336 +485 1196 +897 1667 +442 562 +319 1253 +56 469 +674 923 +51 642 +487 739 +32 759 +631 1091 +219 293 +381 419 +179 761 +935 1358 +408 636 +355 831 +677 1286 +98 306 +893 922 +275 1275 +350 923 +583 1490 +562 1545 +213 634 +538 870 +270 301 +536 1323 +663 1279 +286 325 +1 331 +927 1472 +998 1673 +404 484 +368 1234 +650 803 +238 845 +956 1851 +278 1002 +767 1110 +176 190 +808 841 +910 1693 +242 1010 +523 1133 +364 543 +915 1652 +401 1326 +787 1236 +250 985 +884 1153 diff --git a/geom_bottleneck/tests/data/test_864_B b/geom_bottleneck/tests/data/test_864_B new file mode 100644 index 0000000..0b56a95 --- /dev/null +++ b/geom_bottleneck/tests/data/test_864_B @@ -0,0 +1,100 @@ +11 893 +131 282 +718 1633 +802 822 +342 857 +797 1757 +703 704 +296 1271 +439 868 +143 1065 +860 1380 +62 101 +536 1375 +526 533 +482 1222 +338 1199 +665 770 +85 713 +829 930 +366 710 +300 757 +561 1556 +904 905 +711 1575 +30 766 +710 898 +476 897 +592 1142 +731 1153 +799 1176 +31 769 +570 718 +620 1438 +718 1198 +938 1650 +31 296 +342 929 +953 1681 +650 896 +868 1404 +800 1680 +776 1229 +612 1330 +362 1338 +958 1066 +269 978 +981 1035 +160 322 +673 795 +150 1117 +564 1490 +737 1617 +492 1040 +599 954 +261 1094 +691 734 +318 1231 +157 546 +329 916 +982 1956 +211 719 +665 1381 +911 1689 +368 425 +459 749 +706 1410 +103 539 +134 476 +209 341 +469 589 +350 462 +789 1113 +945 1335 +936 1272 +886 1823 +958 1528 +96 492 +532 1243 +119 577 +322 367 +518 1434 +692 839 +509 1104 +668 1357 +139 1127 +258 300 +307 382 +156 403 +171 582 +411 701 +794 944 +937 1602 +6 60 +593 929 +977 1052 +221 1209 +603 832 +881 1176 +394 710 +660 1260 diff --git a/geom_bottleneck/tests/data/test_865_A b/geom_bottleneck/tests/data/test_865_A new file mode 100644 index 0000000..7453ead --- /dev/null +++ b/geom_bottleneck/tests/data/test_865_A @@ -0,0 +1,100 @@ +680 1206 +916 1092 +447 722 +821 1233 +565 1508 +548 1163 +973 1156 +229 1196 +378 542 +334 619 +581 606 +171 644 +143 407 +857 1539 +129 337 +582 780 +378 441 +196 340 +619 746 +28 94 +294 590 +881 1520 +113 174 +1000 1989 +343 395 +633 1542 +348 988 +973 1914 +58 903 +510 767 +440 448 +876 1806 +932 1554 +367 917 +465 820 +359 1185 +793 820 +999 1064 +193 871 +409 1286 +224 631 +381 793 +650 1047 +493 524 +698 1162 +846 1083 +536 1456 +909 1650 +245 982 +714 1104 +867 1447 +709 1527 +831 859 +170 266 +31 541 +578 650 +960 1059 +147 741 +202 407 +110 136 +747 1087 +781 1489 +759 1738 +945 1542 +790 1588 +52 259 +290 1116 +561 1416 +200 740 +50 629 +907 1349 +312 708 +87 433 +33 920 +934 1278 +530 706 +760 879 +834 1301 +819 1372 +656 1622 +950 1152 +452 692 +426 798 +469 811 +158 554 +563 1532 +713 1332 +567 964 +111 921 +237 1102 +156 1100 +113 344 +553 1386 +880 982 +355 655 +81 959 +203 437 +848 1389 +7 377 +305 717 diff --git a/geom_bottleneck/tests/data/test_865_B b/geom_bottleneck/tests/data/test_865_B new file mode 100644 index 0000000..265e3bd --- /dev/null +++ b/geom_bottleneck/tests/data/test_865_B @@ -0,0 +1,100 @@ +121 979 +358 852 +219 696 +216 239 +200 737 +859 1771 +323 826 +192 1007 +129 389 +489 1130 +227 568 +806 1657 +613 1508 +626 1325 +643 1425 +905 1619 +123 372 +26 371 +949 1838 +399 1361 +516 652 +273 485 +346 753 +975 1839 +276 789 +824 893 +937 1262 +34 37 +444 993 +133 860 +190 421 +978 1903 +56 733 +421 756 +583 590 +133 371 +881 1309 +897 1347 +442 979 +700 941 +871 1095 +34 182 +206 603 +858 1533 +284 821 +241 1167 +623 989 +715 1664 +187 822 +970 1681 +26 153 +533 648 +406 873 +791 862 +217 983 +211 930 +781 1001 +973 1393 +204 845 +23 894 +11 772 +863 1663 +126 233 +306 835 +85 370 +802 1738 +526 1171 +429 1118 +697 1462 +196 512 +887 902 +7 401 +881 1262 +743 1392 +676 733 +527 1394 +911 1179 +816 1280 +513 1072 +842 1750 +942 1260 +841 1438 +86 704 +308 639 +478 1085 +56 220 +411 1045 +185 1141 +941 1695 +465 1360 +157 665 +19 599 +540 891 +832 1200 +408 1232 +540 1207 +881 1721 +496 691 +623 1295 +811 873 diff --git a/geom_bottleneck/tests/data/test_866_A b/geom_bottleneck/tests/data/test_866_A new file mode 100644 index 0000000..a05ad71 --- /dev/null +++ b/geom_bottleneck/tests/data/test_866_A @@ -0,0 +1,100 @@ +554 1091 +21 867 +633 899 +500 663 +971 975 +410 1235 +179 1036 +438 917 +434 678 +378 520 +747 1564 +39 131 +748 1408 +581 1266 +818 915 +527 1287 +452 998 +585 1061 +224 244 +554 1427 +859 1079 +613 1539 +522 738 +392 1170 +788 1437 +288 680 +370 1117 +476 1151 +826 1129 +41 551 +96 839 +480 1110 +909 1050 +59 1059 +549 801 +124 198 +991 1323 +122 1026 +573 1345 +701 1061 +40 265 +872 1116 +579 1464 +807 1198 +269 553 +376 786 +711 866 +864 1301 +716 1185 +366 775 +1000 1991 +970 1156 +921 1050 +599 1510 +49 593 +475 1394 +764 1704 +516 912 +721 805 +986 1006 +728 852 +789 1097 +459 597 +967 1276 +261 1126 +906 920 +466 1134 +419 467 +638 818 +243 738 +188 906 +434 1199 +821 892 +885 1241 +7 664 +963 1398 +576 1142 +84 385 +20 308 +845 1162 +79 730 +203 625 +412 1054 +553 898 +752 920 +640 1312 +169 706 +920 1586 +134 246 +352 619 +90 716 +197 616 +819 1101 +805 1686 +543 1178 +482 1411 +297 1259 +957 1763 +355 808 +591 1221 diff --git a/geom_bottleneck/tests/data/test_866_B b/geom_bottleneck/tests/data/test_866_B new file mode 100644 index 0000000..c3e0b3a --- /dev/null +++ b/geom_bottleneck/tests/data/test_866_B @@ -0,0 +1,100 @@ +573 1390 +68 742 +178 1172 +592 975 +294 453 +280 552 +750 1332 +947 1248 +972 1885 +868 942 +269 719 +457 944 +863 1391 +802 1524 +64 235 +161 495 +439 1397 +143 354 +974 1778 +239 643 +831 1814 +216 969 +515 1065 +334 1263 +504 1264 +950 1570 +558 976 +84 242 +125 745 +382 448 +602 1380 +98 211 +994 1767 +140 712 +694 1187 +523 901 +906 970 +65 850 +188 858 +787 1715 +836 1543 +356 1082 +9 932 +945 1142 +653 756 +934 1085 +526 1465 +636 1544 +711 1660 +63 607 +279 482 +716 768 +380 543 +210 885 +597 1476 +172 837 +542 1257 +465 557 +983 1339 +647 1098 +643 1101 +239 688 +658 1241 +448 595 +320 641 +622 673 +788 824 +2 645 +456 1068 +707 984 +334 1093 +81 601 +413 813 +311 345 +129 827 +253 556 +971 1376 +291 534 +846 1646 +61 699 +552 1406 +583 866 +285 635 +772 1351 +937 1014 +688 709 +425 906 +750 1220 +395 685 +93 392 +596 1460 +749 1123 +631 843 +100 311 +774 991 +873 1870 +297 422 +856 1311 +983 1053 +746 1722 diff --git a/geom_bottleneck/tests/data/test_867_A b/geom_bottleneck/tests/data/test_867_A new file mode 100644 index 0000000..0e5ca13 --- /dev/null +++ b/geom_bottleneck/tests/data/test_867_A @@ -0,0 +1,100 @@ +324 1024 +307 1299 +253 1161 +488 662 +711 1205 +481 510 +910 1280 +465 1426 +800 1294 +664 1348 +676 1342 +946 1581 +956 1482 +70 194 +312 636 +477 1373 +465 1242 +720 1446 +850 1798 +354 386 +657 998 +126 306 +800 1781 +695 1218 +69 522 +832 1255 +553 1007 +796 1602 +889 1204 +390 1048 +792 1754 +493 1394 +71 545 +200 996 +28 103 +705 1003 +315 489 +140 903 +161 296 +697 1682 +748 1663 +360 1052 +226 776 +18 564 +417 449 +234 350 +639 1585 +574 788 +862 1581 +950 1575 +268 532 +946 1194 +386 613 +782 1325 +494 1069 +792 846 +453 1409 +444 1022 +268 554 +319 792 +187 932 +491 1155 +93 253 +986 1147 +758 1167 +424 780 +194 891 +360 1218 +59 457 +625 1514 +618 919 +680 1182 +31 358 +544 744 +529 1135 +859 1346 +533 1132 +833 873 +583 733 +695 1156 +102 1023 +542 1132 +317 640 +883 1183 +696 1191 +603 1489 +492 1373 +935 1085 +235 620 +37 549 +802 1022 +211 508 +907 1146 +989 1239 +68 909 +367 919 +626 827 +770 1592 +413 414 +427 620 diff --git a/geom_bottleneck/tests/data/test_867_B b/geom_bottleneck/tests/data/test_867_B new file mode 100644 index 0000000..c8eb5e0 --- /dev/null +++ b/geom_bottleneck/tests/data/test_867_B @@ -0,0 +1,100 @@ +780 1730 +13 771 +347 670 +699 1353 +924 1139 +806 1496 +537 561 +756 1433 +987 1945 +689 1191 +123 972 +46 99 +468 961 +722 997 +675 1491 +626 1171 +315 1095 +582 741 +445 1083 +974 1633 +543 1308 +829 1343 +414 1038 +817 1254 +596 619 +94 438 +545 955 +832 1672 +0 240 +110 729 +444 1151 +331 1174 +684 765 +612 1448 +369 1181 +675 1243 +758 1008 +716 858 +618 931 +642 1279 +219 593 +650 751 +228 998 +40 93 +181 758 +372 658 +87 607 +190 1136 +990 1325 +232 991 +205 1111 +497 965 +767 1480 +896 1862 +777 1234 +790 1452 +734 1521 +457 1207 +934 979 +617 948 +217 767 +654 1122 +902 1565 +951 984 +250 644 +63 299 +726 1472 +406 1249 +749 777 +140 250 +235 1047 +118 1003 +728 833 +158 1021 +243 801 +112 330 +10 912 +629 796 +954 1471 +764 1267 +598 1299 +131 899 +103 405 +187 456 +985 1359 +228 599 +440 1326 +776 852 +156 847 +295 558 +453 786 +236 560 +948 1458 +599 1174 +482 869 +857 1110 +978 1947 +424 446 +699 1688 +886 1793 diff --git a/geom_bottleneck/tests/data/test_868_A b/geom_bottleneck/tests/data/test_868_A new file mode 100644 index 0000000..0a0fad2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_868_A @@ -0,0 +1,100 @@ +430 1257 +813 1021 +677 1089 +222 1147 +837 1410 +931 1488 +664 1192 +946 1885 +492 1036 +808 1524 +389 1210 +953 1056 +96 797 +818 1592 +900 1074 +63 516 +46 961 +999 1353 +797 1101 +343 1142 +355 459 +384 1358 +401 800 +354 1100 +661 1246 +76 437 +19 581 +385 760 +704 1218 +25 332 +406 1275 +838 1648 +57 335 +501 638 +826 1431 +682 1568 +803 1533 +894 1845 +38 580 +54 835 +448 507 +132 538 +226 1080 +307 489 +339 596 +334 1283 +573 891 +844 1119 +674 949 +998 1669 +226 599 +487 527 +401 1224 +785 1065 +270 710 +410 545 +981 1732 +602 704 +38 838 +145 646 +671 1128 +621 787 +782 1217 +932 1014 +935 1117 +923 1561 +79 253 +170 548 +343 937 +966 1919 +847 1290 +41 234 +683 926 +279 457 +243 957 +316 1240 +630 1492 +901 1691 +919 1022 +385 574 +902 1474 +640 1197 +805 973 +943 1173 +24 846 +139 140 +48 425 +124 1016 +880 1326 +175 275 +835 1142 +244 331 +770 969 +386 950 +391 886 +334 1284 +754 1503 +179 842 +955 1780 +330 436 diff --git a/geom_bottleneck/tests/data/test_868_B b/geom_bottleneck/tests/data/test_868_B new file mode 100644 index 0000000..00c87b2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_868_B @@ -0,0 +1,100 @@ +166 1061 +527 1335 +325 949 +111 649 +488 697 +766 1222 +709 1440 +141 784 +700 939 +798 1136 +861 1837 +628 1376 +473 1366 +145 643 +194 363 +986 1365 +564 979 +870 1837 +451 928 +797 1196 +521 1453 +0 285 +191 1080 +846 1666 +337 494 +790 1644 +759 1570 +46 871 +886 966 +169 897 +55 627 +538 1463 +114 429 +787 827 +850 1806 +31 827 +482 1012 +120 693 +777 1353 +271 916 +15 717 +660 943 +265 446 +985 1045 +22 519 +715 1571 +604 1475 +141 983 +395 1392 +98 851 +179 766 +237 652 +794 1439 +275 451 +47 631 +183 1091 +500 989 +727 1263 +625 1578 +327 1057 +725 1166 +212 731 +699 1449 +471 472 +787 1014 +714 1402 +412 913 +326 1203 +239 592 +920 1395 +303 410 +197 853 +101 1007 +970 1893 +925 1655 +490 670 +158 428 +413 1207 +722 1712 +776 1727 +548 1012 +891 1253 +329 1285 +576 1098 +357 878 +713 1660 +165 726 +786 1231 +447 600 +103 478 +177 764 +386 1263 +307 327 +812 1500 +685 1462 +973 1935 +973 1024 +848 868 +897 1464 +696 1688 diff --git a/geom_bottleneck/tests/data/test_869_A b/geom_bottleneck/tests/data/test_869_A new file mode 100644 index 0000000..fa16527 --- /dev/null +++ b/geom_bottleneck/tests/data/test_869_A @@ -0,0 +1,100 @@ +723 777 +589 1331 +521 602 +976 1210 +302 783 +550 1430 +254 453 +580 1493 +870 1136 +765 1589 +178 699 +654 1093 +505 739 +285 572 +694 975 +4 681 +733 1644 +258 639 +575 1027 +628 756 +887 1885 +430 1393 +194 371 +57 230 +275 489 +269 458 +254 354 +227 1077 +837 1711 +737 1290 +315 1159 +440 791 +922 1280 +175 615 +137 448 +712 1488 +96 617 +815 1776 +280 540 +595 1107 +545 987 +914 1273 +418 919 +135 1053 +612 653 +194 901 +99 866 +689 1038 +273 789 +350 1046 +433 828 +679 1512 +611 1131 +344 1098 +86 1055 +791 1490 +717 1192 +900 1504 +165 1119 +47 512 +452 858 +290 447 +610 774 +451 1149 +693 809 +513 889 +313 771 +290 604 +419 990 +554 728 +726 1563 +860 1471 +671 767 +735 763 +615 1318 +792 1245 +403 1356 +624 1031 +875 1372 +780 1429 +692 1291 +549 655 +412 1158 +727 982 +780 986 +899 1741 +896 1193 +958 1531 +580 698 +23 296 +735 1275 +400 495 +411 1166 +128 630 +498 1178 +195 459 +829 1674 +678 1531 +329 785 +625 1441 diff --git a/geom_bottleneck/tests/data/test_869_B b/geom_bottleneck/tests/data/test_869_B new file mode 100644 index 0000000..7ffd8c9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_869_B @@ -0,0 +1,100 @@ +979 1349 +400 1004 +925 1748 +266 1261 +562 1050 +591 592 +63 630 +404 603 +971 1511 +352 619 +907 1852 +388 830 +8 145 +14 369 +247 938 +648 1230 +625 1083 +231 1003 +926 1824 +143 879 +689 1615 +340 1273 +565 955 +419 443 +92 867 +554 697 +774 1475 +298 1142 +677 1036 +734 811 +831 1211 +585 757 +328 573 +117 789 +575 614 +191 1007 +457 829 +35 193 +518 1335 +5 799 +505 1285 +48 381 +684 990 +767 1230 +953 1161 +51 556 +391 522 +405 419 +217 877 +793 857 +360 455 +259 791 +507 553 +505 1256 +403 842 +981 1524 +223 246 +780 1102 +707 1010 +584 1474 +529 1074 +384 464 +452 668 +28 321 +181 496 +343 1061 +764 1720 +454 1394 +768 822 +217 741 +176 476 +263 306 +914 1258 +526 584 +823 1116 +82 697 +994 1908 +667 982 +231 463 +230 807 +843 1706 +50 369 +521 740 +599 1004 +72 775 +279 502 +833 1423 +880 1593 +371 1093 +703 1272 +815 1096 +125 1058 +497 899 +991 1183 +300 1016 +394 514 +962 1608 +797 1721 +994 1473 +108 421 diff --git a/geom_bottleneck/tests/data/test_870_A b/geom_bottleneck/tests/data/test_870_A new file mode 100644 index 0000000..72422f7 --- /dev/null +++ b/geom_bottleneck/tests/data/test_870_A @@ -0,0 +1,100 @@ +60 817 +390 412 +83 364 +762 1271 +949 1643 +874 1468 +411 1354 +897 1800 +66 622 +763 1511 +51 1025 +882 1063 +91 96 +309 1302 +646 1599 +721 1157 +923 1112 +907 1582 +434 517 +854 1679 +719 1601 +38 615 +762 1454 +394 438 +2 40 +828 1110 +994 1556 +647 745 +610 1499 +9 27 +4 572 +829 1229 +44 319 +807 1726 +286 1104 +953 1884 +941 1314 +131 1041 +363 883 +825 1168 +975 1168 +561 1292 +151 204 +465 648 +346 459 +252 1179 +766 917 +583 1401 +353 666 +493 739 +809 1531 +391 964 +410 1172 +180 194 +865 1343 +849 1201 +839 1253 +5 590 +674 1029 +821 1333 +711 874 +557 1038 +101 163 +564 834 +696 707 +631 1249 +762 1107 +343 515 +987 1870 +525 1274 +402 1043 +164 220 +940 1422 +840 1281 +50 1012 +275 1062 +472 790 +61 306 +217 661 +283 1281 +436 972 +952 1838 +374 1049 +577 1482 +486 1288 +743 851 +469 1295 +553 1233 +11 774 +687 1381 +243 481 +399 873 +777 1539 +489 742 +293 513 +755 1047 +881 1154 +757 1457 +261 1097 +693 1283 diff --git a/geom_bottleneck/tests/data/test_870_B b/geom_bottleneck/tests/data/test_870_B new file mode 100644 index 0000000..db4847d --- /dev/null +++ b/geom_bottleneck/tests/data/test_870_B @@ -0,0 +1,100 @@ +278 1098 +502 1411 +318 748 +154 189 +605 1475 +556 1482 +377 718 +168 338 +595 921 +962 1686 +301 409 +730 1138 +132 612 +988 1838 +759 1728 +170 465 +654 681 +43 199 +358 1076 +270 316 +602 1382 +657 1138 +211 448 +516 652 +781 1312 +937 1266 +30 227 +769 1102 +91 938 +737 1368 +733 1087 +511 721 +582 997 +261 635 +540 992 +503 590 +189 267 +614 824 +517 1181 +120 447 +545 650 +248 1122 +798 1437 +571 1265 +358 993 +618 1573 +406 861 +540 1382 +213 509 +964 1055 +481 858 +933 1275 +680 1433 +634 665 +963 1365 +612 1163 +895 1316 +95 814 +483 1416 +142 989 +37 588 +17 728 +137 492 +498 1010 +868 1023 +713 1344 +606 1243 +806 1540 +868 1118 +115 780 +329 690 +742 1226 +595 1135 +534 938 +53 175 +627 683 +277 1165 +323 329 +587 869 +308 1234 +266 338 +103 928 +385 863 +628 1620 +157 370 +258 731 +30 588 +202 920 +589 618 +5 221 +882 1659 +68 136 +918 1860 +466 801 +719 1236 +79 664 +562 1234 +258 784 +669 1010 +850 1761 diff --git a/geom_bottleneck/tests/data/test_871_A b/geom_bottleneck/tests/data/test_871_A new file mode 100644 index 0000000..08ce8b2 --- /dev/null +++ b/geom_bottleneck/tests/data/test_871_A @@ -0,0 +1,100 @@ +42 835 +829 1708 +683 1618 +329 527 +127 163 +931 1127 +902 1289 +712 755 +344 415 +991 1939 +8 415 +225 1099 +685 1632 +996 1747 +751 1238 +569 1367 +256 401 +711 1157 +58 745 +112 1087 +226 902 +560 1414 +482 1323 +243 382 +672 1335 +202 962 +803 1090 +398 967 +790 1384 +901 1648 +280 296 +684 1484 +432 498 +599 972 +86 497 +703 1327 +730 1472 +889 946 +1000 1305 +735 1569 +606 1155 +916 1843 +246 286 +102 980 +854 1598 +518 944 +341 973 +426 489 +888 1375 +359 409 +49 660 +619 1187 +635 1439 +338 1297 +347 654 +847 989 +161 915 +846 1341 +196 418 +698 1689 +535 634 +407 419 +767 1110 +154 1127 +912 1214 +982 1797 +824 1331 +38 859 +753 867 +297 988 +784 1479 +407 1024 +884 1054 +894 1476 +674 837 +402 1183 +906 1306 +27 471 +672 1594 +480 830 +174 302 +133 928 +858 1186 +541 950 +395 397 +356 1259 +219 1028 +120 465 +703 1595 +9 234 +790 1682 +322 1197 +314 655 +770 1287 +95 775 +444 520 +118 800 +852 1564 +24 333 +906 1508 diff --git a/geom_bottleneck/tests/data/test_871_B b/geom_bottleneck/tests/data/test_871_B new file mode 100644 index 0000000..23c1dd8 --- /dev/null +++ b/geom_bottleneck/tests/data/test_871_B @@ -0,0 +1,100 @@ +112 365 +974 1486 +76 198 +108 949 +30 308 +221 985 +687 1236 +255 744 +597 1580 +552 1173 +944 1327 +291 494 +867 1053 +73 595 +265 407 +827 1067 +990 1968 +663 948 +555 1506 +469 1046 +909 939 +59 858 +756 986 +101 335 +57 1047 +516 1348 +615 775 +578 1391 +756 1351 +341 1087 +147 471 +893 1879 +68 603 +433 867 +982 1332 +11 464 +710 1435 +337 967 +468 1092 +282 474 +712 1541 +779 1165 +255 872 +590 1550 +255 949 +316 494 +398 1017 +863 1551 +835 1072 +554 1129 +560 854 +862 1403 +97 304 +71 393 +351 1038 +624 1327 +185 1077 +311 601 +640 736 +542 980 +735 884 +78 879 +230 799 +462 1295 +249 678 +736 900 +867 984 +254 405 +408 543 +271 694 +371 1039 +38 598 +888 1058 +876 1612 +697 1333 +650 1183 +910 1895 +884 1723 +922 1772 +911 1770 +788 1139 +981 1024 +962 1552 +389 612 +661 1027 +583 1188 +649 1291 +793 1505 +442 1158 +356 832 +190 589 +643 713 +496 536 +530 1381 +153 641 +162 335 +629 1071 +110 395 +18 833 +8 423 diff --git a/geom_bottleneck/tests/data/test_872_A b/geom_bottleneck/tests/data/test_872_A new file mode 100644 index 0000000..9647bed --- /dev/null +++ b/geom_bottleneck/tests/data/test_872_A @@ -0,0 +1,100 @@ +357 473 +781 1680 +963 1614 +418 582 +427 979 +738 924 +946 1432 +903 1821 +250 279 +570 1065 +305 1090 +750 756 +317 1028 +865 1402 +464 465 +316 1186 +856 1199 +763 1744 +46 424 +954 1654 +602 843 +232 426 +864 1001 +292 495 +72 455 +907 1762 +575 697 +886 1098 +954 1502 +980 1741 +317 527 +72 711 +614 695 +931 1149 +223 229 +684 1073 +221 897 +1000 1806 +165 358 +454 1067 +569 878 +162 950 +910 1768 +329 508 +247 1201 +469 849 +973 1153 +298 670 +682 1515 +230 777 +876 1085 +438 598 +72 775 +668 687 +254 502 +989 1165 +646 1375 +972 1552 +593 1408 +860 1844 +256 469 +982 1530 +834 1562 +195 280 +81 393 +470 802 +570 667 +95 558 +846 1778 +639 1120 +340 804 +527 530 +413 428 +797 1156 +610 780 +113 323 +287 441 +388 838 +418 743 +859 970 +96 898 +29 592 +396 1004 +463 1417 +641 1130 +880 1301 +176 1121 +286 325 +456 1093 +988 1077 +885 1278 +47 828 +617 1089 +595 1071 +870 895 +661 1423 +720 759 +379 924 +892 1184 +583 589 diff --git a/geom_bottleneck/tests/data/test_872_B b/geom_bottleneck/tests/data/test_872_B new file mode 100644 index 0000000..1c58840 --- /dev/null +++ b/geom_bottleneck/tests/data/test_872_B @@ -0,0 +1,100 @@ +153 586 +46 542 +64 130 +498 815 +144 494 +300 1100 +146 383 +431 558 +710 839 +615 648 +680 970 +995 1797 +903 1605 +994 1759 +335 810 +93 670 +928 1252 +754 1015 +941 1668 +105 746 +448 924 +419 1140 +881 1239 +500 831 +794 1571 +780 1613 +892 1155 +133 279 +869 1603 +745 1402 +463 623 +501 686 +510 1155 +806 1373 +302 821 +710 1492 +508 879 +643 787 +494 1172 +427 1018 +37 813 +394 497 +498 1374 +565 1285 +216 453 +315 1039 +356 920 +968 1326 +400 460 +779 964 +179 560 +405 1249 +64 466 +128 978 +99 582 +424 885 +39 675 +912 1624 +531 652 +617 1391 +338 788 +993 1673 +229 301 +879 1305 +356 467 +950 1787 +471 1441 +692 1677 +84 383 +767 1029 +865 1658 +468 988 +854 1028 +483 1097 +898 1321 +605 723 +632 1154 +782 1260 +797 1207 +176 445 +126 827 +333 541 +722 1131 +188 642 +287 1194 +8 607 +955 1136 +44 1000 +515 858 +39 311 +436 1200 +344 1280 +856 1776 +603 1524 +230 617 +953 1413 +592 916 +393 1116 +498 529 +283 734 diff --git a/geom_bottleneck/tests/data/test_873_A b/geom_bottleneck/tests/data/test_873_A new file mode 100644 index 0000000..d9e1da9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_873_A @@ -0,0 +1,100 @@ +871 918 +442 1110 +786 797 +342 1125 +473 1471 +550 737 +956 1854 +259 420 +592 1059 +861 1049 +50 255 +11 163 +254 810 +649 659 +866 1083 +786 1466 +728 1162 +659 1272 +884 1597 +34 1016 +487 679 +765 1214 +145 505 +994 1925 +711 1474 +207 713 +143 567 +935 1009 +62 1036 +168 713 +7 478 +628 1423 +51 693 +391 575 +18 283 +45 308 +971 1067 +934 1548 +604 1154 +4 558 +425 998 +77 439 +513 1485 +354 1302 +317 816 +5 551 +346 804 +872 1197 +309 418 +691 886 +927 1242 +51 491 +88 645 +835 1584 +377 751 +668 684 +226 1026 +418 691 +335 939 +955 1872 +490 1173 +68 355 +689 740 +284 550 +531 1023 +312 390 +127 875 +3 408 +314 458 +907 932 +489 890 +451 1402 +52 849 +709 1325 +373 1367 +390 1030 +707 1272 +25 607 +742 996 +838 1569 +570 1522 +278 1034 +863 1805 +615 823 +865 1726 +902 1367 +81 1011 +619 1462 +18 422 +433 1195 +154 635 +27 975 +690 1465 +447 1308 +686 1058 +204 1164 +572 1531 +202 609 +772 777 +740 1633 diff --git a/geom_bottleneck/tests/data/test_873_B b/geom_bottleneck/tests/data/test_873_B new file mode 100644 index 0000000..a9f3ea1 --- /dev/null +++ b/geom_bottleneck/tests/data/test_873_B @@ -0,0 +1,100 @@ +816 1608 +484 669 +486 883 +131 221 +617 1433 +421 578 +277 879 +587 979 +662 783 +275 1001 +538 1142 +135 857 +984 1296 +163 997 +818 1596 +591 1112 +29 465 +156 374 +805 1436 +709 977 +650 1507 +360 1041 +940 1108 +957 1483 +628 775 +109 461 +680 1562 +457 507 +68 693 +795 935 +505 564 +706 951 +60 977 +501 1258 +441 539 +280 658 +787 1427 +311 866 +722 808 +94 679 +979 1850 +408 1002 +246 1068 +125 815 +520 819 +557 1306 +369 1123 +14 940 +666 931 +589 1555 +430 871 +105 907 +294 469 +798 1528 +30 640 +566 1287 +930 1651 +599 691 +139 256 +938 1775 +173 682 +597 899 +430 924 +201 1194 +164 611 +996 1009 +482 807 +680 1375 +281 704 +422 457 +698 963 +742 876 +839 1814 +901 1360 +775 1461 +612 801 +498 1360 +176 707 +430 596 +134 578 +408 742 +867 1346 +66 912 +390 824 +823 1332 +787 1775 +924 1615 +619 1109 +892 1583 +583 904 +591 1270 +805 815 +913 1698 +557 623 +15 98 +28 862 +775 981 +627 1137 +836 1587 +556 988 diff --git a/geom_bottleneck/tests/data/test_874_A b/geom_bottleneck/tests/data/test_874_A new file mode 100644 index 0000000..4d66819 --- /dev/null +++ b/geom_bottleneck/tests/data/test_874_A @@ -0,0 +1,100 @@ +401 767 +318 1182 +238 653 +420 702 +684 942 +381 618 +263 1108 +275 381 +659 1140 +301 646 +401 432 +68 350 +147 1106 +670 1593 +792 1332 +779 1462 +129 130 +604 665 +800 1027 +631 945 +961 1286 +767 1426 +123 653 +860 1160 +929 1528 +876 1665 +148 1072 +898 1869 +375 386 +135 943 +847 1128 +455 1273 +28 509 +202 1148 +241 462 +612 732 +655 667 +392 726 +525 655 +993 1778 +241 1229 +185 599 +321 836 +773 1506 +632 1023 +885 1663 +868 985 +84 664 +761 1738 +75 641 +988 1791 +178 992 +34 69 +990 1431 +460 957 +352 453 +102 946 +123 883 +535 1360 +961 1232 +825 885 +259 679 +139 620 +946 1073 +690 753 +39 1022 +741 1612 +662 1215 +156 703 +942 1906 +477 496 +499 737 +175 763 +304 563 +317 1266 +918 1673 +646 686 +941 1023 +502 1266 +811 822 +153 688 +892 1832 +737 1518 +53 475 +140 709 +379 871 +138 816 +228 1106 +272 774 +732 1715 +344 849 +580 971 +983 1855 +312 399 +561 1352 +335 1008 +268 1083 +488 921 +327 449 +177 198 diff --git a/geom_bottleneck/tests/data/test_874_B b/geom_bottleneck/tests/data/test_874_B new file mode 100644 index 0000000..2142cbc --- /dev/null +++ b/geom_bottleneck/tests/data/test_874_B @@ -0,0 +1,100 @@ +682 1578 +580 1035 +713 1240 +664 1644 +492 852 +126 441 +113 329 +144 557 +829 1627 +857 1645 +332 1104 +531 773 +616 1523 +568 831 +251 340 +155 1058 +519 1241 +525 571 +182 334 +148 450 +974 1128 +508 1003 +188 738 +763 1502 +726 1288 +892 954 +418 1171 +414 927 +268 591 +529 1371 +10 396 +379 1371 +578 1428 +493 529 +79 364 +340 1082 +84 653 +847 1396 +905 1164 +526 690 +715 1436 +317 823 +161 223 +19 515 +520 1415 +871 1311 +601 1249 +533 1040 +454 1168 +35 919 +191 668 +102 424 +899 1107 +439 558 +145 1108 +138 1085 +633 756 +616 801 +795 1193 +428 892 +712 1066 +451 723 +294 640 +228 1009 +984 1910 +966 1472 +578 771 +403 896 +341 841 +441 671 +513 665 +137 386 +591 750 +881 1549 +753 1355 +66 695 +500 592 +364 715 +275 485 +841 1194 +204 386 +556 1196 +388 1345 +695 1051 +47 494 +505 1386 +427 933 +635 714 +998 1743 +637 822 +355 1048 +430 1086 +905 1747 +906 1612 +590 804 +709 1164 +852 1511 +205 626 +403 978 +706 1085 diff --git a/geom_bottleneck/tests/data/test_875_A b/geom_bottleneck/tests/data/test_875_A new file mode 100644 index 0000000..1748357 --- /dev/null +++ b/geom_bottleneck/tests/data/test_875_A @@ -0,0 +1,100 @@ +501 816 +326 1114 +214 1139 +167 352 +465 1246 +268 284 +830 907 +240 975 +995 1655 +583 822 +320 963 +446 975 +525 1385 +280 1057 +788 978 +238 1027 +731 1643 +154 467 +988 1430 +468 594 +170 779 +931 1377 +332 888 +432 1036 +310 841 +960 1909 +554 1147 +999 1007 +213 626 +667 862 +200 773 +166 657 +830 1352 +698 816 +455 850 +435 1100 +300 584 +935 1403 +544 1425 +78 451 +543 955 +831 1610 +530 633 +443 1150 +16 712 +798 1758 +760 1226 +839 1249 +310 891 +343 553 +341 463 +925 948 +691 851 +899 1768 +486 530 +830 1370 +515 894 +782 1153 +539 1004 +907 1348 +28 395 +335 626 +599 946 +571 1494 +607 1477 +560 1176 +27 63 +190 453 +586 1257 +659 831 +991 1363 +95 851 +226 785 +263 836 +97 531 +768 905 +970 1051 +487 1361 +96 206 +374 979 +539 1321 +837 1108 +776 1081 +381 774 +420 754 +799 983 +636 1239 +863 1608 +531 563 +703 814 +229 958 +874 1208 +553 581 +589 1387 +607 920 +928 1917 +171 351 +571 1035 +528 1318 +168 442 diff --git a/geom_bottleneck/tests/data/test_875_B b/geom_bottleneck/tests/data/test_875_B new file mode 100644 index 0000000..3a5860e --- /dev/null +++ b/geom_bottleneck/tests/data/test_875_B @@ -0,0 +1,100 @@ +380 1025 +918 1126 +119 483 +810 1668 +393 693 +545 1003 +682 862 +357 966 +429 955 +776 1227 +233 522 +559 599 +514 843 +682 906 +535 810 +924 1161 +222 371 +400 741 +561 943 +60 644 +810 1317 +470 1412 +756 1724 +235 1098 +995 1942 +244 776 +189 1011 +549 622 +193 816 +336 535 +232 1076 +614 1332 +38 1001 +764 1255 +337 763 +30 878 +949 1522 +719 741 +446 749 +400 1077 +309 310 +154 677 +458 1246 +476 541 +177 660 +676 1084 +426 968 +422 888 +243 255 +724 901 +994 1350 +623 1151 +387 452 +745 1263 +142 572 +198 388 +789 1416 +445 970 +245 494 +253 499 +401 582 +217 271 +528 1475 +170 850 +978 1681 +68 170 +381 1017 +39 298 +634 1443 +288 447 +867 1061 +24 477 +345 869 +674 1544 +645 1452 +698 723 +838 1195 +419 1214 +468 476 +620 1599 +898 1491 +416 1010 +431 921 +56 242 +867 1451 +759 1102 +396 1226 +559 1364 +212 743 +292 1289 +832 1536 +271 340 +990 1428 +287 1025 +364 839 +471 1138 +17 284 +953 1212 +421 841 +527 1382 diff --git a/geom_bottleneck/tests/data/test_876_A b/geom_bottleneck/tests/data/test_876_A new file mode 100644 index 0000000..1b65f8d --- /dev/null +++ b/geom_bottleneck/tests/data/test_876_A @@ -0,0 +1,100 @@ +466 895 +77 814 +639 1357 +475 1032 +941 1560 +527 749 +839 845 +96 619 +328 455 +385 828 +954 1817 +476 847 +240 463 +477 849 +965 1359 +238 991 +746 1597 +109 529 +567 616 +525 1224 +80 990 +984 1314 +591 1398 +801 1039 +237 332 +529 1232 +8 763 +665 1615 +823 1790 +746 1594 +875 1682 +302 1001 +486 840 +586 1174 +376 903 +782 1083 +680 993 +811 1136 +576 687 +330 1057 +892 963 +547 763 +17 869 +207 455 +162 612 +414 776 +446 498 +455 1151 +292 355 +240 541 +89 545 +672 1017 +375 783 +152 348 +347 525 +678 682 +538 1301 +569 1458 +624 946 +188 283 +300 456 +225 423 +925 1867 +312 600 +849 984 +148 300 +236 862 +336 806 +566 1280 +793 1411 +789 1666 +134 714 +660 1259 +870 1344 +329 1320 +136 684 +743 1016 +904 1005 +271 1059 +28 566 +482 1474 +278 614 +776 1361 +372 1174 +118 589 +793 906 +346 539 +860 892 +588 1255 +590 1394 +258 935 +452 861 +785 1525 +789 1745 +150 622 +720 1458 +486 1477 +937 1381 +317 1224 +37 301 diff --git a/geom_bottleneck/tests/data/test_876_B b/geom_bottleneck/tests/data/test_876_B new file mode 100644 index 0000000..62102e9 --- /dev/null +++ b/geom_bottleneck/tests/data/test_876_B @@ -0,0 +1,100 @@ +162 530 +694 1522 +850 1742 +293 471 +254 1094 +293 856 +392 411 +919 1673 +427 629 +116 390 +583 1089 +31 812 +270 769 +297 435 +933 1186 +625 741 +759 868 +632 749 +41 82 +138 528 +933 1746 +910 1135 +312 868 +955 1464 +208 1044 +84 368 +444 1114 +749 1643 +572 1339 +584 1330 +736 1483 +779 780 +459 473 +481 1392 +537 1402 +254 1114 +637 1366 +381 1339 +808 1517 +858 1513 +116 508 +102 675 +133 327 +283 1196 +126 910 +634 699 +253 1086 +75 1063 +93 247 +194 661 +848 1195 +690 1350 +816 1340 +821 1352 +387 569 +487 870 +160 1012 +483 1120 +916 1704 +519 975 +324 533 +791 1611 +128 1011 +477 741 +884 930 +773 1424 +904 1238 +252 1162 +730 750 +292 441 +747 1242 +525 1071 +373 1261 +706 1402 +877 1639 +848 1474 +652 884 +995 1061 +509 1496 +970 1168 +855 1167 +94 289 +759 1697 +153 239 +483 1315 +694 1110 +93 255 +564 1525 +632 1562 +218 1068 +548 1072 +167 906 +803 1710 +635 914 +923 1918 +99 633 +8 712 +138 565 +698 1179 +928 1611 diff --git a/geom_bottleneck/tests/data/test_877_A b/geom_bottleneck/tests/data/test_877_A new file mode 100644 index 0000000..c60479b --- /dev/null +++ b/geom_bottleneck/tests/data/test_877_A @@ -0,0 +1,100 @@ +300 707 +123 319 +525 876 +685 1396 +289 961 +27 123 +884 1628 +982 1831 +634 1123 +383 831 +279 637 +349 474 +352 856 +253 1047 +431 679 +986 1871 +923 1654 +991 1073 +686 1337 +848 1810 +180 753 +423 529 +318 466 +356 742 +953 997 +861 865 +205 1200 +423 1141 +976 1485 +698 775 +445 1410 +83 322 +11 585 +384 468 +674 1121 +544 1216 +205 648 +474 745 +860 1595 +624 1216 +970 1721 +505 1397 +886 1137 +184 706 +817 1142 +781 1282 +299 965 +835 940 +954 1359 +304 502 +309 949 +347 441 +80 406 +804 910 +895 1394 +835 1328 +586 634 +790 1152 +884 1203 +252 899 +91 828 +501 968 +971 1076 +676 1214 +217 318 +932 1399 +404 451 +235 1091 +765 1022 +974 1189 +353 989 +828 1769 +948 1846 +914 1206 +589 1406 +551 1139 +317 367 +616 1284 +567 895 +229 528 +533 911 +514 1260 +905 1811 +421 863 +681 925 +252 1023 +365 573 +195 886 +169 710 +327 1311 +348 388 +26 56 +534 1014 +187 263 +927 1764 +3 29 +469 1008 +968 1729 +279 611 +944 1650 diff --git a/geom_bottleneck/tests/data/test_877_B b/geom_bottleneck/tests/data/test_877_B new file mode 100644 index 0000000..728311d --- /dev/null +++ b/geom_bottleneck/tests/data/test_877_B @@ -0,0 +1,100 @@ +628 985 +787 1122 +361 604 +695 1462 +712 977 +294 738 +893 1223 +582 1579 +908 1112 +827 1451 +360 465 +273 375 +123 803 +853 1841 +381 948 +549 868 +34 995 +285 1076 +233 561 +232 1170 +663 1129 +17 34 +41 274 +881 1726 +551 1357 +193 916 +754 852 +384 1061 +745 1426 +954 1188 +950 1469 +493 565 +307 1174 +486 1222 +443 1433 +722 973 +912 1453 +973 1474 +398 1142 +85 779 +961 1952 +928 1842 +351 814 +147 519 +729 877 +26 60 +406 1082 +579 602 +893 1692 +837 1802 +306 457 +945 1792 +461 897 +794 894 +767 1178 +469 1423 +129 833 +251 563 +887 1856 +426 1380 +173 539 +398 1249 +890 1101 +40 864 +481 1123 +651 1126 +520 926 +885 1396 +791 896 +416 1283 +646 1571 +246 1002 +249 394 +650 1543 +378 1225 +918 1043 +58 188 +568 671 +256 796 +315 1143 +840 1449 +709 1260 +730 1655 +525 1409 +561 1149 +338 1162 +204 252 +935 1919 +438 1194 +727 1497 +876 1461 +920 1163 +19 767 +379 427 +953 1926 +912 1022 +423 584 +333 642 +726 1473 +421 1106 diff --git a/geom_bottleneck/tests/data/test_878_A b/geom_bottleneck/tests/data/test_878_A new file mode 100644 index 0000000..c8d0724 --- /dev/null +++ b/geom_bottleneck/tests/data/test_878_A @@ -0,0 +1,100 @@ +279 1254 +922 1250 +849 997 +144 505 +218 1071 +540 1361 +681 773 +572 1345 +827 848 +105 244 +299 1253 +172 784 +730 1315 +488 1249 +803 1175 +139 611 +910 1599 +387 1304 +851 1418 +392 1256 +642 655 +323 338 +594 802 +761 1161 +980 1822 +272 811 +385 474 +70 568 +518 1331 +528 1188 +138 465 +71 1033 +258 968 +242 319 +644 1125 +988 1292 +828 1367 +726 1657 +61 520 +734 1189 +142 615 +794 1276 +267 575 +738 1043 +653 753 +484 1337 +680 761 +963 972 +415 1343 +167 685 +93 861 +263 506 +609 829 +145 436 +302 484 +10 881 +431 603 +638 764 +723 1348 +470 581 +418 1249 +61 814 +992 1096 +776 1386 +406 842 +204 1047 +450 710 +639 765 +272 807 +932 1571 +982 1321 +559 770 +255 363 +648 1136 +668 1322 +332 588 +387 390 +309 737 +561 1463 +958 981 +359 1053 +994 1768 +243 381 +971 1245 +96 704 +353 1090 +589 1261 +46 789 +459 519 +262 425 +154 710 +870 1103 +30 653 +672 1521 +824 1677 +763 835 +143 753 +658 1168 +8 563 +971 1095 diff --git a/geom_bottleneck/tests/data/test_878_B b/geom_bottleneck/tests/data/test_878_B new file mode 100644 index 0000000..32723ce --- /dev/null +++ b/geom_bottleneck/tests/data/test_878_B @@ -0,0 +1,100 @@ +284 785 +695 1555 +939 1668 +395 439 +587 754 +586 996 +831 1534 +296 1185 +379 1162 +243 923 +818 1623 +410 644 +43 356 +929 1429 +83 937 +885 1611 +427 526 +225 804 +717 1460 +30 590 +125 1119 +600 1356 +803 1729 +462 542 +225 785 +26 79 +780 1711 +372 1148 +113 547 +589 1288 +673 1638 +56 555 +569 1078 +687 1547 +201 777 +860 1372 +317 1268 +481 1465 +577 1347 +355 639 +199 560 +669 911 +64 1003 +654 1047 +254 700 +126 542 +418 1041 +242 1075 +642 1349 +476 1047 +614 1041 +365 507 +117 842 +147 929 +369 835 +138 1031 +177 707 +857 968 +803 821 +562 1007 +231 1021 +872 1803 +84 613 +315 562 +962 965 +648 1619 +425 574 +303 654 +766 1676 +17 975 +127 960 +439 645 +646 1215 +448 1375 +697 1654 +294 314 +151 661 +800 1084 +760 1457 +944 1538 +224 895 +309 355 +688 1059 +509 1108 +770 793 +884 947 +147 963 +708 1229 +398 816 +8 872 +617 1057 +642 1609 +558 1128 +409 705 +777 1406 +454 640 +882 1002 +391 1241 +609 1380 +455 863 diff --git a/geom_bottleneck/tests/data/test_879_A b/geom_bottleneck/tests/data/test_879_A new file mode 100644 index 0000000..7a92be6 --- /dev/null +++ b/geom_bottleneck/tests/data/test_879_A @@ -0,0 +1,100 @@ +939 1572 +712 1236 +114 128 +992 1777 +566 617 +460 1258 +681 1380 +716 832 +375 960 +912 1414 +63 1058 +943 1482 +278 690 +123 616 +31 641 +382 862 +962 1798 +709 1518 +190 487 +84 723 +419 515 +105 915 +184 641 +952 1441 +139 760 +462 879 +431 577 +502 1482 +252 1124 +166 413 +406 426 +40 921 +538 936 +850 1574 +64 139 +472 1374 +171 944 +81 128 +107 521 +426 855 +273 278 +139 208 +763 893 +623 973 +433 565 +353 915 +404 945 +981 1151 +200 894 +476 1268 +913 1287 +609 1592 +984 1462 +878 1037 +255 1113 +845 1766 +257 265 +550 1385 +753 1597 +412 1269 +251 1120 +167 851 +288 1117 +392 1279 +213 534 +623 987 +975 1806 +924 1066 +52 676 +822 974 +239 557 +679 1158 +268 524 +241 500 +281 401 +993 1711 +539 1414 +677 1108 +377 482 +315 845 +981 1605 +426 447 +479 1372 +820 1416 +916 1423 +677 1165 +388 1322 +990 1641 +909 914 +814 1225 +851 1151 +78 235 +635 1581 +229 431 +125 877 +708 1338 +763 1354 +877 1794 +225 1171 +232 435 diff --git a/geom_bottleneck/tests/data/test_879_B b/geom_bottleneck/tests/data/test_879_B new file mode 100644 index 0000000..f4c4a36 --- /dev/null +++ b/geom_bottleneck/tests/data/test_879_B @@ -0,0 +1,100 @@ +826 1808 +951 1166 +931 1147 +239 288 +607 762 +103 692 +78 132 +14 502 +666 982 +207 961 +303 690 +492 1135 +528 1499 +979 1576 +584 704 +921 1134 +874 1791 +51 789 +824 1574 +534 1078 +304 1104 +288 828 +445 1433 +492 788 +158 159 +374 863 +313 766 +716 1156 +540 624 +963 1803 +144 341 +415 1223 +314 501 +203 739 +674 1323 +604 705 +958 1738 +33 994 +179 1002 +23 278 +387 460 +857 1659 +563 865 +248 1032 +612 1147 +809 1802 +488 1003 +572 1525 +197 664 +120 648 +290 793 +475 1101 +97 479 +517 703 +843 1555 +292 482 +293 846 +969 1431 +525 552 +299 795 +543 1520 +685 1208 +689 1139 +564 1021 +478 969 +219 646 +361 718 +390 1038 +167 677 +968 1814 +663 1192 +446 1405 +337 1080 +403 564 +167 1159 +717 1483 +707 1224 +923 1698 +564 833 +988 1819 +48 300 +5 540 +252 378 +385 1039 +65 366 +473 1119 +369 989 +804 1501 +333 580 +321 1033 +693 1147 +291 408 +498 1244 +923 1204 +758 1214 +85 561 +550 647 +589 1155 +512 687 +110 459 diff --git a/geom_bottleneck/tests/data/test_list.txt b/geom_bottleneck/tests/data/test_list.txt new file mode 100644 index 0000000..1309884 --- /dev/null +++ b/geom_bottleneck/tests/data/test_list.txt @@ -0,0 +1,790 @@ +test_001_A test_001_B 0.01 1 -1 0 0 -1 +test_002_A test_002_B 0.01 0.2 0 0 +test_003_A test_003_B 0.01 2 1 1 +test_004_A test_004_B 0.01 inf -1 -1 +test_005_A test_005_B 0.01 4 5 5 +test_010_A test_010_B 0.01 1.32937 +test_011_A test_011_B 0.01 1.03125 +test_014_A test_014_B 0.01 0 +test_015_A test_015_B 0.01 0 +test_016_A test_016_B 0.01 0 +test_100_A test_100_B 0.01 1.5 +test_101_A test_101_B 0.01 1.5 +test_102_A test_102_B 0.01 4.5 +test_103_A test_103_B 0.01 3 +test_104_A test_104_B 0.01 3.5 +test_105_A test_105_B 0.01 3.5 +test_106_A test_106_B 0.01 3 +test_107_A test_107_B 0.01 5 +test_108_A test_108_B 0.01 5 +test_109_A test_109_B 0.01 3 +test_110_A test_110_B 0.01 4.5 +test_111_A test_111_B 0.01 4 +test_112_A test_112_B 0.01 4 +test_113_A test_113_B 0.01 2.5 +test_114_A test_114_B 0.01 4.5 +test_115_A test_115_B 0.01 4 +test_116_A test_116_B 0.01 4 +test_117_A test_117_B 0.01 2.5 +test_118_A test_118_B 0.01 3 +test_119_A test_119_B 0.01 5 +test_120_A test_120_B 0.01 2 +test_121_A test_121_B 0.01 3 +test_122_A test_122_B 0.01 1 +test_123_A test_123_B 0.01 4 +test_124_A test_124_B 0.01 4 +test_125_A test_125_B 0.01 4.5 +test_126_A test_126_B 0.01 3 +test_127_A test_127_B 0.01 2.5 +test_128_A test_128_B 0.01 2 +test_129_A test_129_B 0.01 3 +test_130_A test_130_B 0.01 5 +test_131_A test_131_B 0.01 5 +test_132_A test_132_B 0.01 2 +test_133_A test_133_B 0.01 3 +test_134_A test_134_B 0.01 3 +test_135_A test_135_B 0.01 4 +test_136_A test_136_B 0.01 2 +test_137_A test_137_B 0.01 3 +test_138_A test_138_B 0.01 2 +test_139_A test_139_B 0.01 2.5 +test_140_A test_140_B 0.01 2 +test_141_A test_141_B 0.01 4 +test_142_A test_142_B 0.01 3 +test_143_A test_143_B 0.01 4 +test_144_A test_144_B 0.01 3 +test_145_A test_145_B 0.01 4 +test_146_A test_146_B 0.01 3 +test_147_A test_147_B 0.01 4 +test_148_A test_148_B 0.01 3 +test_149_A test_149_B 0.01 4 +test_150_A test_150_B 0.01 3 +test_151_A test_151_B 0.01 4 +test_152_A test_152_B 0.01 3.5 +test_153_A test_153_B 0.01 4 +test_154_A test_154_B 0.01 3.5 +test_155_A test_155_B 0.01 3 +test_156_A test_156_B 0.01 3 +test_157_A test_157_B 0.01 4.5 +test_158_A test_158_B 0.01 3.5 +test_159_A test_159_B 0.01 1 +test_160_A test_160_B 0.01 4 +test_161_A test_161_B 0.01 4 +test_162_A test_162_B 0.01 3 +test_163_A test_163_B 0.01 5 +test_164_A test_164_B 0.01 4 +test_165_A test_165_B 0.01 4 +test_166_A test_166_B 0.01 4 +test_167_A test_167_B 0.01 4.5 +test_168_A test_168_B 0.01 4 +test_169_A test_169_B 0.01 3.5 +test_170_A test_170_B 0.01 4 +test_171_A test_171_B 0.01 2 +test_172_A test_172_B 0.01 3 +test_173_A test_173_B 0.01 4 +test_174_A test_174_B 0.01 3 +test_175_A test_175_B 0.01 5 +test_176_A test_176_B 0.01 4.5 +test_177_A test_177_B 0.01 4.5 +test_178_A test_178_B 0.01 4.5 +test_179_A test_179_B 0.01 4 +test_180_A test_180_B 0.01 5 +test_181_A test_181_B 0.01 4 +test_182_A test_182_B 0.01 4.5 +test_183_A test_183_B 0.01 5 +test_184_A test_184_B 0.01 4 +test_185_A test_185_B 0.01 4.5 +test_186_A test_186_B 0.01 3 +test_187_A test_187_B 0.01 4.5 +test_188_A test_188_B 0.01 3 +test_189_A test_189_B 0.01 2 +test_190_A test_190_B 0.01 3 +test_191_A test_191_B 0.01 3 +test_192_A test_192_B 0.01 3.5 +test_193_A test_193_B 0.01 4.5 +test_194_A test_194_B 0.01 3 +test_195_A test_195_B 0.01 3 +test_196_A test_196_B 0.01 3 +test_197_A test_197_B 0.01 3 +test_198_A test_198_B 0.01 5 +test_199_A test_199_B 0.01 3.5 +test_200_A test_200_B 0.01 3 +test_201_A test_201_B 0.01 5 +test_202_A test_202_B 0.01 3 +test_203_A test_203_B 0.01 4 +test_204_A test_204_B 0.01 2.5 +test_205_A test_205_B 0.01 4 +test_206_A test_206_B 0.01 3.5 +test_207_A test_207_B 0.01 3 +test_208_A test_208_B 0.01 4 +test_209_A test_209_B 0.01 3 +test_210_A test_210_B 0.01 5 +test_211_A test_211_B 0.01 3 +test_212_A test_212_B 0.01 3 +test_213_A test_213_B 0.01 3.5 +test_214_A test_214_B 0.01 4 +test_215_A test_215_B 0.01 3 +test_216_A test_216_B 0.01 3.5 +test_217_A test_217_B 0.01 4 +test_218_A test_218_B 0.01 4 +test_219_A test_219_B 0.01 4 +test_220_A test_220_B 0.01 3 +test_221_A test_221_B 0.01 4 +test_222_A test_222_B 0.01 4 +test_223_A test_223_B 0.01 4 +test_224_A test_224_B 0.01 3 +test_225_A test_225_B 0.01 3 +test_226_A test_226_B 0.01 4 +test_227_A test_227_B 0.01 4 +test_228_A test_228_B 0.01 4 +test_229_A test_229_B 0.01 3 +test_230_A test_230_B 0.01 3 +test_231_A test_231_B 0.01 4 +test_232_A test_232_B 0.01 4 +test_233_A test_233_B 0.01 2 +test_234_A test_234_B 0.01 3.5 +test_235_A test_235_B 0.01 4 +test_236_A test_236_B 0.01 3 +test_237_A test_237_B 0.01 3.5 +test_238_A test_238_B 0.01 4 +test_239_A test_239_B 0.01 3 +test_240_A test_240_B 0.01 3 +test_241_A test_241_B 0.01 5 +test_242_A test_242_B 0.01 4.5 +test_243_A test_243_B 0.01 4 +test_244_A test_244_B 0.01 3.5 +test_245_A test_245_B 0.01 5 +test_246_A test_246_B 0.01 2.5 +test_247_A test_247_B 0.01 3 +test_248_A test_248_B 0.01 4 +test_249_A test_249_B 0.01 2 +test_250_A test_250_B 0.01 5 +test_251_A test_251_B 0.01 4 +test_252_A test_252_B 0.01 4 +test_253_A test_253_B 0.01 4.5 +test_254_A test_254_B 0.01 4 +test_255_A test_255_B 0.01 3 +test_256_A test_256_B 0.01 4.5 +test_257_A test_257_B 0.01 4 +test_258_A test_258_B 0.01 5 +test_259_A test_259_B 0.01 4 +test_260_A test_260_B 0.01 4 +test_261_A test_261_B 0.01 2.5 +test_262_A test_262_B 0.01 2 +test_263_A test_263_B 0.01 4.5 +test_264_A test_264_B 0.01 3.5 +test_265_A test_265_B 0.01 4 +test_266_A test_266_B 0.01 3 +test_267_A test_267_B 0.01 5 +test_268_A test_268_B 0.01 4 +test_269_A test_269_B 0.01 4 +test_270_A test_270_B 0.01 3 +test_271_A test_271_B 0.01 4 +test_272_A test_272_B 0.01 4 +test_273_A test_273_B 0.01 2 +test_274_A test_274_B 0.01 3 +test_275_A test_275_B 0.01 3 +test_276_A test_276_B 0.01 4 +test_277_A test_277_B 0.01 5 +test_278_A test_278_B 0.01 4 +test_279_A test_279_B 0.01 4.5 +test_280_A test_280_B 0.01 3.5 +test_281_A test_281_B 0.01 2 +test_282_A test_282_B 0.01 3 +test_283_A test_283_B 0.01 3 +test_284_A test_284_B 0.01 3 +test_285_A test_285_B 0.01 3 +test_286_A test_286_B 0.01 3 +test_287_A test_287_B 0.01 3.5 +test_288_A test_288_B 0.01 3 +test_289_A test_289_B 0.01 2 +test_290_A test_290_B 0.01 4 +test_291_A test_291_B 0.01 3 +test_292_A test_292_B 0.01 4 +test_293_A test_293_B 0.01 2.5 +test_294_A test_294_B 0.01 4 +test_295_A test_295_B 0.01 3.5 +test_296_A test_296_B 0.01 3 +test_297_A test_297_B 0.01 3 +test_298_A test_298_B 0.01 4 +test_299_A test_299_B 0.01 4 +test_300_A test_300_B 0.01 3 +test_301_A test_301_B 0.01 2 +test_302_A test_302_B 0.01 2 +test_303_A test_303_B 0.01 3 +test_304_A test_304_B 0.01 3 +test_305_A test_305_B 0.01 3 +test_306_A test_306_B 0.01 3 +test_307_A test_307_B 0.01 2 +test_308_A test_308_B 0.01 3 +test_309_A test_309_B 0.01 2.5 +test_310_A test_310_B 0.01 4 +test_311_A test_311_B 0.01 3 +test_312_A test_312_B 0.01 3.5 +test_313_A test_313_B 0.01 3 +test_314_A test_314_B 0.01 2 +test_315_A test_315_B 0.01 3 +test_316_A test_316_B 0.01 4.5 +test_317_A test_317_B 0.01 3 +test_318_A test_318_B 0.01 3 +test_319_A test_319_B 0.01 3 +test_320_A test_320_B 0.01 4 +test_321_A test_321_B 0.01 2 +test_322_A test_322_B 0.01 3 +test_323_A test_323_B 0.01 3 +test_324_A test_324_B 0.01 2 +test_325_A test_325_B 0.01 3 +test_326_A test_326_B 0.01 2 +test_327_A test_327_B 0.01 3 +test_328_A test_328_B 0.01 3 +test_329_A test_329_B 0.01 4 +test_330_A test_330_B 0.01 3 +test_331_A test_331_B 0.01 3 +test_332_A test_332_B 0.01 2 +test_333_A test_333_B 0.01 2 +test_334_A test_334_B 0.01 3 +test_335_A test_335_B 0.01 2 +test_336_A test_336_B 0.01 3 +test_337_A test_337_B 0.01 2 +test_338_A test_338_B 0.01 2 +test_339_A test_339_B 0.01 2 +test_340_A test_340_B 0.01 1 +test_341_A test_341_B 0.01 2 +test_342_A test_342_B 0.01 2 +test_343_A test_343_B 0.01 2 +test_344_A test_344_B 0.01 2 +test_345_A test_345_B 0.01 2 +test_346_A test_346_B 0.01 2 +test_347_A test_347_B 0.01 2 +test_348_A test_348_B 0.01 2 +test_349_A test_349_B 0.01 2 +test_350_A test_350_B 0.01 2 +test_351_A test_351_B 0.01 2 +test_352_A test_352_B 0.01 2 +test_353_A test_353_B 0.01 2.5 +test_354_A test_354_B 0.01 2 +test_355_A test_355_B 0.01 2 +test_356_A test_356_B 0.01 2 +test_357_A test_357_B 0.01 2 +test_358_A test_358_B 0.01 2 +test_359_A test_359_B 0.01 2 +test_360_A test_360_B 0.01 32 +test_361_A test_361_B 0.01 8 +test_362_A test_362_B 0.01 29.5 +test_363_A test_363_B 0.01 41 +test_364_A test_364_B 0.01 41.5 +test_365_A test_365_B 0.01 27.5 +test_366_A test_366_B 0.01 46 +test_367_A test_367_B 0.01 37.5 +test_368_A test_368_B 0.01 27 +test_369_A test_369_B 0.01 42 +test_370_A test_370_B 0.01 45.5 +test_371_A test_371_B 0.01 34 +test_372_A test_372_B 0.01 19.5 +test_373_A test_373_B 0.01 24 +test_374_A test_374_B 0.01 10 +test_375_A test_375_B 0.01 17.5 +test_376_A test_376_B 0.01 28.5 +test_377_A test_377_B 0.01 40 +test_378_A test_378_B 0.01 40 +test_379_A test_379_B 0.01 24.5 +test_380_A test_380_B 0.01 36 +test_381_A test_381_B 0.01 38 +test_382_A test_382_B 0.01 48 +test_383_A test_383_B 0.01 32.5 +test_384_A test_384_B 0.01 44 +test_385_A test_385_B 0.01 44.5 +test_386_A test_386_B 0.01 11 +test_387_A test_387_B 0.01 47.5 +test_388_A test_388_B 0.01 28 +test_389_A test_389_B 0.01 32 +test_390_A test_390_B 0.01 24.5 +test_391_A test_391_B 0.01 47 +test_392_A test_392_B 0.01 28 +test_393_A test_393_B 0.01 16 +test_394_A test_394_B 0.01 44 +test_395_A test_395_B 0.01 38 +test_396_A test_396_B 0.01 47.5 +test_397_A test_397_B 0.01 35 +test_398_A test_398_B 0.01 33 +test_399_A test_399_B 0.01 33 +test_400_A test_400_B 0.01 31 +test_401_A test_401_B 0.01 48 +test_402_A test_402_B 0.01 37.5 +test_403_A test_403_B 0.01 40 +test_404_A test_404_B 0.01 47 +test_405_A test_405_B 0.01 23 +test_406_A test_406_B 0.01 40 +test_407_A test_407_B 0.01 46 +test_408_A test_408_B 0.01 39 +test_409_A test_409_B 0.01 26 +test_410_A test_410_B 0.01 28 +test_411_A test_411_B 0.01 27 +test_412_A test_412_B 0.01 33 +test_413_A test_413_B 0.01 36 +test_414_A test_414_B 0.01 42.5 +test_415_A test_415_B 0.01 40 +test_416_A test_416_B 0.01 37 +test_417_A test_417_B 0.01 43 +test_418_A test_418_B 0.01 16 +test_419_A test_419_B 0.01 34 +test_420_A test_420_B 0.01 42.5 +test_421_A test_421_B 0.01 38 +test_422_A test_422_B 0.01 30 +test_423_A test_423_B 0.01 44 +test_424_A test_424_B 0.01 46 +test_425_A test_425_B 0.01 38 +test_426_A test_426_B 0.01 35.5 +test_427_A test_427_B 0.01 29 +test_428_A test_428_B 0.01 43.5 +test_429_A test_429_B 0.01 34 +test_430_A test_430_B 0.01 48 +test_431_A test_431_B 0.01 41 +test_432_A test_432_B 0.01 35 +test_433_A test_433_B 0.01 32 +test_434_A test_434_B 0.01 36 +test_435_A test_435_B 0.01 43.5 +test_436_A test_436_B 0.01 32.5 +test_437_A test_437_B 0.01 40 +test_438_A test_438_B 0.01 34 +test_439_A test_439_B 0.01 31.5 +test_440_A test_440_B 0.01 26.5 +test_441_A test_441_B 0.01 49.5 +test_442_A test_442_B 0.01 30 +test_443_A test_443_B 0.01 29 +test_444_A test_444_B 0.01 29 +test_445_A test_445_B 0.01 48 +test_446_A test_446_B 0.01 35 +test_447_A test_447_B 0.01 43 +test_448_A test_448_B 0.01 19 +test_449_A test_449_B 0.01 34 +test_450_A test_450_B 0.01 44 +test_451_A test_451_B 0.01 36 +test_452_A test_452_B 0.01 32 +test_453_A test_453_B 0.01 49 +test_454_A test_454_B 0.01 48.5 +test_455_A test_455_B 0.01 46 +test_456_A test_456_B 0.01 33.5 +test_457_A test_457_B 0.01 49.5 +test_458_A test_458_B 0.01 38 +test_459_A test_459_B 0.01 21 +test_460_A test_460_B 0.01 40 +test_461_A test_461_B 0.01 32 +test_462_A test_462_B 0.01 37 +test_463_A test_463_B 0.01 23 +test_464_A test_464_B 0.01 19 +test_465_A test_465_B 0.01 29 +test_466_A test_466_B 0.01 38 +test_467_A test_467_B 0.01 29 +test_468_A test_468_B 0.01 45 +test_469_A test_469_B 0.01 27.5 +test_470_A test_470_B 0.01 43 +test_471_A test_471_B 0.01 24.5 +test_472_A test_472_B 0.01 42 +test_473_A test_473_B 0.01 36.5 +test_474_A test_474_B 0.01 46.5 +test_475_A test_475_B 0.01 18 +test_476_A test_476_B 0.01 29 +test_477_A test_477_B 0.01 44 +test_478_A test_478_B 0.01 49 +test_479_A test_479_B 0.01 33 +test_480_A test_480_B 0.01 43 +test_481_A test_481_B 0.01 42 +test_482_A test_482_B 0.01 31 +test_483_A test_483_B 0.01 37 +test_484_A test_484_B 0.01 25 +test_485_A test_485_B 0.01 33 +test_486_A test_486_B 0.01 35 +test_487_A test_487_B 0.01 39 +test_488_A test_488_B 0.01 26.5 +test_489_A test_489_B 0.01 39.5 +test_490_A test_490_B 0.01 26 +test_491_A test_491_B 0.01 45 +test_492_A test_492_B 0.01 21 +test_493_A test_493_B 0.01 37 +test_494_A test_494_B 0.01 50 +test_495_A test_495_B 0.01 41 +test_496_A test_496_B 0.01 34 +test_497_A test_497_B 0.01 35 +test_498_A test_498_B 0.01 34 +test_499_A test_499_B 0.01 30 +test_500_A test_500_B 0.01 39 +test_501_A test_501_B 0.01 36 +test_502_A test_502_B 0.01 36 +test_503_A test_503_B 0.01 49.5 +test_504_A test_504_B 0.01 40.5 +test_505_A test_505_B 0.01 29 +test_506_A test_506_B 0.01 33 +test_507_A test_507_B 0.01 38 +test_508_A test_508_B 0.01 21.5 +test_509_A test_509_B 0.01 27 +test_510_A test_510_B 0.01 43 +test_511_A test_511_B 0.01 34 +test_512_A test_512_B 0.01 25.5 +test_513_A test_513_B 0.01 19 +test_514_A test_514_B 0.01 28 +test_515_A test_515_B 0.01 41.5 +test_516_A test_516_B 0.01 46 +test_517_A test_517_B 0.01 34 +test_518_A test_518_B 0.01 33 +test_519_A test_519_B 0.01 37.5 +test_520_A test_520_B 0.01 37 +test_521_A test_521_B 0.01 42.5 +test_522_A test_522_B 0.01 44 +test_523_A test_523_B 0.01 36.5 +test_524_A test_524_B 0.01 40 +test_525_A test_525_B 0.01 36.5 +test_526_A test_526_B 0.01 24 +test_527_A test_527_B 0.01 34 +test_528_A test_528_B 0.01 23.5 +test_529_A test_529_B 0.01 30 +test_530_A test_530_B 0.01 50 +test_531_A test_531_B 0.01 33 +test_532_A test_532_B 0.01 36 +test_533_A test_533_B 0.01 24 +test_534_A test_534_B 0.01 46.5 +test_535_A test_535_B 0.01 39 +test_536_A test_536_B 0.01 26 +test_537_A test_537_B 0.01 30 +test_538_A test_538_B 0.01 27.5 +test_539_A test_539_B 0.01 26 +test_540_A test_540_B 0.01 23 +test_541_A test_541_B 0.01 26.5 +test_542_A test_542_B 0.01 40.5 +test_543_A test_543_B 0.01 41 +test_544_A test_544_B 0.01 46 +test_545_A test_545_B 0.01 33 +test_546_A test_546_B 0.01 38 +test_547_A test_547_B 0.01 33 +test_548_A test_548_B 0.01 28 +test_549_A test_549_B 0.01 29 +test_550_A test_550_B 0.01 33 +test_551_A test_551_B 0.01 20 +test_552_A test_552_B 0.01 27 +test_553_A test_553_B 0.01 21.5 +test_554_A test_554_B 0.01 28 +test_555_A test_555_B 0.01 31 +test_556_A test_556_B 0.01 31 +test_557_A test_557_B 0.01 30 +test_558_A test_558_B 0.01 29 +test_559_A test_559_B 0.01 30 +test_560_A test_560_B 0.01 21 +test_561_A test_561_B 0.01 37.5 +test_562_A test_562_B 0.01 40 +test_563_A test_563_B 0.01 25 +test_564_A test_564_B 0.01 22 +test_565_A test_565_B 0.01 24 +test_566_A test_566_B 0.01 39 +test_567_A test_567_B 0.01 27 +test_568_A test_568_B 0.01 30 +test_569_A test_569_B 0.01 35 +test_570_A test_570_B 0.01 29 +test_571_A test_571_B 0.01 27 +test_572_A test_572_B 0.01 23 +test_573_A test_573_B 0.01 34 +test_574_A test_574_B 0.01 26 +test_575_A test_575_B 0.01 28 +test_576_A test_576_B 0.01 22 +test_577_A test_577_B 0.01 29 +test_578_A test_578_B 0.01 24 +test_579_A test_579_B 0.01 22 +test_580_A test_580_B 0.01 31 +test_581_A test_581_B 0.01 39 +test_582_A test_582_B 0.01 21 +test_583_A test_583_B 0.01 32 +test_584_A test_584_B 0.01 22 +test_585_A test_585_B 0.01 26 +test_586_A test_586_B 0.01 20 +test_587_A test_587_B 0.01 28 +test_588_A test_588_B 0.01 22 +test_589_A test_589_B 0.01 20 +test_590_A test_590_B 0.01 17 +test_591_A test_591_B 0.01 24 +test_592_A test_592_B 0.01 27.5 +test_593_A test_593_B 0.01 31 +test_594_A test_594_B 0.01 18 +test_595_A test_595_B 0.01 18 +test_596_A test_596_B 0.01 32 +test_597_A test_597_B 0.01 17 +test_598_A test_598_B 0.01 19 +test_599_A test_599_B 0.01 23 +test_600_A test_600_B 0.01 16 +test_601_A test_601_B 0.01 13 +test_602_A test_602_B 0.01 25 +test_603_A test_603_B 0.01 17 +test_604_A test_604_B 0.01 18 +test_605_A test_605_B 0.01 20 +test_606_A test_606_B 0.01 16 +test_607_A test_607_B 0.01 19 +test_608_A test_608_B 0.01 22 +test_609_A test_609_B 0.01 18 +test_610_A test_610_B 0.01 22 +test_611_A test_611_B 0.01 18 +test_612_A test_612_B 0.01 21 +test_613_A test_613_B 0.01 23 +test_614_A test_614_B 0.01 14 +test_615_A test_615_B 0.01 21 +test_616_A test_616_B 0.01 20 +test_617_A test_617_B 0.01 17 +test_618_A test_618_B 0.01 15 +test_619_A test_619_B 0.01 18 +test_620_A test_620_B 0.01 346.5 +test_621_A test_621_B 0.01 414 +test_622_A test_622_B 0.01 321 +test_623_A test_623_B 0.01 428 +test_624_A test_624_B 0.01 137.5 +test_625_A test_625_B 0.01 272 +test_626_A test_626_B 0.01 257 +test_627_A test_627_B 0.01 261 +test_628_A test_628_B 0.01 480.5 +test_629_A test_629_B 0.01 378 +test_630_A test_630_B 0.01 153.5 +test_631_A test_631_B 0.01 199 +test_632_A test_632_B 0.01 457 +test_633_A test_633_B 0.01 358.5 +test_634_A test_634_B 0.01 357 +test_635_A test_635_B 0.01 216 +test_636_A test_636_B 0.01 460.5 +test_637_A test_637_B 0.01 314 +test_638_A test_638_B 0.01 322 +test_639_A test_639_B 0.01 440.5 +test_640_A test_640_B 0.01 324 +test_641_A test_641_B 0.01 265 +test_642_A test_642_B 0.01 395.5 +test_643_A test_643_B 0.01 397 +test_644_A test_644_B 0.01 308 +test_645_A test_645_B 0.01 199 +test_646_A test_646_B 0.01 256.5 +test_647_A test_647_B 0.01 293 +test_648_A test_648_B 0.01 297 +test_649_A test_649_B 0.01 410.5 +test_650_A test_650_B 0.01 322 +test_651_A test_651_B 0.01 458 +test_652_A test_652_B 0.01 420.5 +test_653_A test_653_B 0.01 235 +test_654_A test_654_B 0.01 220 +test_655_A test_655_B 0.01 257 +test_656_A test_656_B 0.01 305 +test_657_A test_657_B 0.01 230.5 +test_658_A test_658_B 0.01 500 +test_659_A test_659_B 0.01 155 +test_660_A test_660_B 0.01 418 +test_661_A test_661_B 0.01 403.5 +test_662_A test_662_B 0.01 296 +test_663_A test_663_B 0.01 297.5 +test_664_A test_664_B 0.01 219 +test_665_A test_665_B 0.01 476.5 +test_666_A test_666_B 0.01 347 +test_667_A test_667_B 0.01 284 +test_668_A test_668_B 0.01 324.5 +test_669_A test_669_B 0.01 231 +test_670_A test_670_B 0.01 410 +test_671_A test_671_B 0.01 206 +test_672_A test_672_B 0.01 266 +test_673_A test_673_B 0.01 319.5 +test_674_A test_674_B 0.01 483 +test_675_A test_675_B 0.01 355.5 +test_676_A test_676_B 0.01 316.5 +test_677_A test_677_B 0.01 297 +test_678_A test_678_B 0.01 458 +test_679_A test_679_B 0.01 398.5 +test_680_A test_680_B 0.01 371.5 +test_681_A test_681_B 0.01 338 +test_682_A test_682_B 0.01 461 +test_683_A test_683_B 0.01 298.5 +test_684_A test_684_B 0.01 303.5 +test_685_A test_685_B 0.01 265 +test_686_A test_686_B 0.01 400.5 +test_687_A test_687_B 0.01 264 +test_688_A test_688_B 0.01 303 +test_689_A test_689_B 0.01 360 +test_690_A test_690_B 0.01 325 +test_691_A test_691_B 0.01 217 +test_692_A test_692_B 0.01 313 +test_693_A test_693_B 0.01 491 +test_694_A test_694_B 0.01 367.5 +test_695_A test_695_B 0.01 285 +test_696_A test_696_B 0.01 314 +test_697_A test_697_B 0.01 379 +test_698_A test_698_B 0.01 277.5 +test_699_A test_699_B 0.01 302 +test_700_A test_700_B 0.01 299 +test_701_A test_701_B 0.01 439.5 +test_702_A test_702_B 0.01 289 +test_703_A test_703_B 0.01 460.5 +test_704_A test_704_B 0.01 210 +test_705_A test_705_B 0.01 491 +test_706_A test_706_B 0.01 438.5 +test_707_A test_707_B 0.01 323 +test_708_A test_708_B 0.01 427 +test_709_A test_709_B 0.01 364 +test_710_A test_710_B 0.01 434 +test_711_A test_711_B 0.01 434 +test_712_A test_712_B 0.01 391 +test_713_A test_713_B 0.01 356 +test_714_A test_714_B 0.01 420 +test_715_A test_715_B 0.01 354 +test_716_A test_716_B 0.01 281 +test_717_A test_717_B 0.01 359.5 +test_718_A test_718_B 0.01 345 +test_719_A test_719_B 0.01 341.5 +test_720_A test_720_B 0.01 497.5 +test_721_A test_721_B 0.01 199 +test_722_A test_722_B 0.01 452 +test_723_A test_723_B 0.01 335.5 +test_724_A test_724_B 0.01 311 +test_725_A test_725_B 0.01 336 +test_726_A test_726_B 0.01 300 +test_727_A test_727_B 0.01 317 +test_728_A test_728_B 0.01 492 +test_729_A test_729_B 0.01 304 +test_730_A test_730_B 0.01 217 +test_731_A test_731_B 0.01 322 +test_732_A test_732_B 0.01 289 +test_733_A test_733_B 0.01 182 +test_734_A test_734_B 0.01 410.5 +test_735_A test_735_B 0.01 306 +test_736_A test_736_B 0.01 294 +test_737_A test_737_B 0.01 254 +test_738_A test_738_B 0.01 338.5 +test_739_A test_739_B 0.01 225 +test_740_A test_740_B 0.01 280 +test_741_A test_741_B 0.01 454 +test_742_A test_742_B 0.01 226 +test_743_A test_743_B 0.01 365 +test_744_A test_744_B 0.01 456 +test_745_A test_745_B 0.01 405 +test_746_A test_746_B 0.01 322 +test_747_A test_747_B 0.01 279 +test_748_A test_748_B 0.01 311.5 +test_749_A test_749_B 0.01 308 +test_750_A test_750_B 0.01 322 +test_751_A test_751_B 0.01 409 +test_752_A test_752_B 0.01 277 +test_753_A test_753_B 0.01 318 +test_754_A test_754_B 0.01 299.5 +test_755_A test_755_B 0.01 462.5 +test_756_A test_756_B 0.01 314 +test_757_A test_757_B 0.01 300 +test_758_A test_758_B 0.01 455 +test_759_A test_759_B 0.01 422.5 +test_760_A test_760_B 0.01 433.5 +test_761_A test_761_B 0.01 278 +test_762_A test_762_B 0.01 484.5 +test_763_A test_763_B 0.01 348 +test_764_A test_764_B 0.01 491 +test_765_A test_765_B 0.01 280 +test_766_A test_766_B 0.01 259 +test_767_A test_767_B 0.01 275.5 +test_768_A test_768_B 0.01 348 +test_769_A test_769_B 0.01 330 +test_770_A test_770_B 0.01 412 +test_771_A test_771_B 0.01 262 +test_772_A test_772_B 0.01 455 +test_773_A test_773_B 0.01 294 +test_774_A test_774_B 0.01 425 +test_775_A test_775_B 0.01 220.5 +test_776_A test_776_B 0.01 411.5 +test_777_A test_777_B 0.01 383 +test_778_A test_778_B 0.01 363 +test_779_A test_779_B 0.01 302 +test_780_A test_780_B 0.01 328 +test_781_A test_781_B 0.01 294 +test_782_A test_782_B 0.01 407.5 +test_783_A test_783_B 0.01 260.5 +test_784_A test_784_B 0.01 410 +test_785_A test_785_B 0.01 328 +test_786_A test_786_B 0.01 419.5 +test_787_A test_787_B 0.01 165 +test_788_A test_788_B 0.01 389 +test_789_A test_789_B 0.01 254 +test_790_A test_790_B 0.01 311 +test_791_A test_791_B 0.01 258 +test_792_A test_792_B 0.01 331 +test_793_A test_793_B 0.01 378 +test_794_A test_794_B 0.01 415 +test_795_A test_795_B 0.01 364 +test_796_A test_796_B 0.01 279 +test_797_A test_797_B 0.01 249 +test_798_A test_798_B 0.01 463 +test_799_A test_799_B 0.01 304 +test_800_A test_800_B 0.01 187 +test_801_A test_801_B 0.01 305.5 +test_802_A test_802_B 0.01 385 +test_803_A test_803_B 0.01 360.5 +test_804_A test_804_B 0.01 269 +test_805_A test_805_B 0.01 294 +test_806_A test_806_B 0.01 362 +test_807_A test_807_B 0.01 354 +test_808_A test_808_B 0.01 196 +test_809_A test_809_B 0.01 248 +test_810_A test_810_B 0.01 297.5 +test_811_A test_811_B 0.01 243 +test_812_A test_812_B 0.01 312 +test_813_A test_813_B 0.01 241 +test_814_A test_814_B 0.01 384 +test_815_A test_815_B 0.01 250 +test_816_A test_816_B 0.01 205 +test_817_A test_817_B 0.01 308 +test_818_A test_818_B 0.01 356 +test_819_A test_819_B 0.01 230 +test_820_A test_820_B 0.01 178 +test_821_A test_821_B 0.01 294 +test_822_A test_822_B 0.01 227 +test_823_A test_823_B 0.01 234 +test_824_A test_824_B 0.01 241 +test_825_A test_825_B 0.01 233 +test_826_A test_826_B 0.01 284 +test_827_A test_827_B 0.01 287 +test_828_A test_828_B 0.01 192 +test_829_A test_829_B 0.01 359 +test_830_A test_830_B 0.01 225 +test_831_A test_831_B 0.01 273 +test_832_A test_832_B 0.01 248 +test_833_A test_833_B 0.01 217 +test_834_A test_834_B 0.01 332 +test_835_A test_835_B 0.01 218 +test_836_A test_836_B 0.01 335 +test_837_A test_837_B 0.01 192 +test_838_A test_838_B 0.01 188 +test_839_A test_839_B 0.01 347 +test_840_A test_840_B 0.01 273 +test_841_A test_841_B 0.01 187 +test_842_A test_842_B 0.01 170 +test_843_A test_843_B 0.01 230 +test_844_A test_844_B 0.01 206.5 +test_845_A test_845_B 0.01 177 +test_846_A test_846_B 0.01 251 +test_847_A test_847_B 0.01 163 +test_848_A test_848_B 0.01 174 +test_849_A test_849_B 0.01 177 +test_850_A test_850_B 0.01 252 +test_851_A test_851_B 0.01 262 +test_852_A test_852_B 0.01 174 +test_853_A test_853_B 0.01 169 +test_854_A test_854_B 0.01 200 +test_855_A test_855_B 0.01 189 +test_856_A test_856_B 0.01 206.5 +test_857_A test_857_B 0.01 260 +test_858_A test_858_B 0.01 191 +test_859_A test_859_B 0.01 216 +test_860_A test_860_B 0.01 181.5 +test_861_A test_861_B 0.01 219 +test_862_A test_862_B 0.01 143 +test_863_A test_863_B 0.01 173 +test_864_A test_864_B 0.01 134 +test_865_A test_865_B 0.01 159 +test_866_A test_866_B 0.01 205 +test_867_A test_867_B 0.01 178 +test_868_A test_868_B 0.01 189.5 +test_869_A test_869_B 0.01 145 +test_870_A test_870_B 0.01 179 +test_871_A test_871_B 0.01 167 +test_872_A test_872_B 0.01 149 +test_873_A test_873_B 0.01 149 +test_874_A test_874_B 0.01 187 +test_875_A test_875_B 0.01 193 +test_876_A test_876_B 0.01 165 +test_877_A test_877_B 0.01 190 +test_878_A test_878_B 0.01 242 +test_879_A test_879_B 0.01 187 diff --git a/geom_bottleneck/tests/data/test_list.txt.bak b/geom_bottleneck/tests/data/test_list.txt.bak new file mode 100644 index 0000000..71b89ed --- /dev/null +++ b/geom_bottleneck/tests/data/test_list.txt.bak @@ -0,0 +1,792 @@ +test_001_A test_001_B 0.01 1 -1 0 0 -1 +test_002_A test_002_B 0.01 0.2 0 0 +test_003_A test_003_B 0.01 2 1 1 +test_004_A test_004_B 0.01 inf -1 -1 +test_005_A test_005_B 0.01 4 5 5 +test_010_A test_010_B 0.01 1.32937 +test_011_A test_011_B 0.01 1.03125 +test_012_A test_012_B 0.01 0.56679 +test_013_A test_013_B 0.01 1.26332 +test_014_A test_014_B 0.01 0 +test_015_A test_015_B 0.01 0 +test_016_A test_016_B 0.01 0 +test_100_A test_100_B 0.01 1.5 +test_101_A test_101_B 0.01 1.5 +test_102_A test_102_B 0.01 4.5 +test_103_A test_103_B 0.01 3 +test_104_A test_104_B 0.01 3.5 +test_105_A test_105_B 0.01 3.5 +test_106_A test_106_B 0.01 3 +test_107_A test_107_B 0.01 5 +test_108_A test_108_B 0.01 5 +test_109_A test_109_B 0.01 3 +test_110_A test_110_B 0.01 4.5 +test_111_A test_111_B 0.01 4 +test_112_A test_112_B 0.01 4 +test_113_A test_113_B 0.01 2.5 +test_114_A test_114_B 0.01 4.5 +test_115_A test_115_B 0.01 4 +test_116_A test_116_B 0.01 4 +test_117_A test_117_B 0.01 2.5 +test_118_A test_118_B 0.01 3 +test_119_A test_119_B 0.01 5 +test_120_A test_120_B 0.01 2 +test_121_A test_121_B 0.01 3 +test_122_A test_122_B 0.01 1 +test_123_A test_123_B 0.01 4 +test_124_A test_124_B 0.01 4 +test_125_A test_125_B 0.01 4.5 +test_126_A test_126_B 0.01 3 +test_127_A test_127_B 0.01 2.5 +test_128_A test_128_B 0.01 2 +test_129_A test_129_B 0.01 3 +test_130_A test_130_B 0.01 5 +test_131_A test_131_B 0.01 5 +test_132_A test_132_B 0.01 2 +test_133_A test_133_B 0.01 3 +test_134_A test_134_B 0.01 3 +test_135_A test_135_B 0.01 4 +test_136_A test_136_B 0.01 2 +test_137_A test_137_B 0.01 3 +test_138_A test_138_B 0.01 2 +test_139_A test_139_B 0.01 2.5 +test_140_A test_140_B 0.01 2 +test_141_A test_141_B 0.01 4 +test_142_A test_142_B 0.01 3 +test_143_A test_143_B 0.01 4 +test_144_A test_144_B 0.01 3 +test_145_A test_145_B 0.01 4 +test_146_A test_146_B 0.01 3 +test_147_A test_147_B 0.01 4 +test_148_A test_148_B 0.01 3 +test_149_A test_149_B 0.01 4 +test_150_A test_150_B 0.01 3 +test_151_A test_151_B 0.01 4 +test_152_A test_152_B 0.01 3.5 +test_153_A test_153_B 0.01 4 +test_154_A test_154_B 0.01 3.5 +test_155_A test_155_B 0.01 3 +test_156_A test_156_B 0.01 3 +test_157_A test_157_B 0.01 4.5 +test_158_A test_158_B 0.01 3.5 +test_159_A test_159_B 0.01 1 +test_160_A test_160_B 0.01 4 +test_161_A test_161_B 0.01 4 +test_162_A test_162_B 0.01 3 +test_163_A test_163_B 0.01 5 +test_164_A test_164_B 0.01 4 +test_165_A test_165_B 0.01 4 +test_166_A test_166_B 0.01 4 +test_167_A test_167_B 0.01 4.5 +test_168_A test_168_B 0.01 4 +test_169_A test_169_B 0.01 3.5 +test_170_A test_170_B 0.01 4 +test_171_A test_171_B 0.01 2 +test_172_A test_172_B 0.01 3 +test_173_A test_173_B 0.01 4 +test_174_A test_174_B 0.01 3 +test_175_A test_175_B 0.01 5 +test_176_A test_176_B 0.01 4.5 +test_177_A test_177_B 0.01 4.5 +test_178_A test_178_B 0.01 4.5 +test_179_A test_179_B 0.01 4 +test_180_A test_180_B 0.01 5 +test_181_A test_181_B 0.01 4 +test_182_A test_182_B 0.01 4.5 +test_183_A test_183_B 0.01 5 +test_184_A test_184_B 0.01 4 +test_185_A test_185_B 0.01 4.5 +test_186_A test_186_B 0.01 3 +test_187_A test_187_B 0.01 4.5 +test_188_A test_188_B 0.01 3 +test_189_A test_189_B 0.01 2 +test_190_A test_190_B 0.01 3 +test_191_A test_191_B 0.01 3 +test_192_A test_192_B 0.01 3.5 +test_193_A test_193_B 0.01 4.5 +test_194_A test_194_B 0.01 3 +test_195_A test_195_B 0.01 3 +test_196_A test_196_B 0.01 3 +test_197_A test_197_B 0.01 3 +test_198_A test_198_B 0.01 5 +test_199_A test_199_B 0.01 3.5 +test_200_A test_200_B 0.01 3 +test_201_A test_201_B 0.01 5 +test_202_A test_202_B 0.01 3 +test_203_A test_203_B 0.01 4 +test_204_A test_204_B 0.01 2.5 +test_205_A test_205_B 0.01 4 +test_206_A test_206_B 0.01 3.5 +test_207_A test_207_B 0.01 3 +test_208_A test_208_B 0.01 4 +test_209_A test_209_B 0.01 3 +test_210_A test_210_B 0.01 5 +test_211_A test_211_B 0.01 3 +test_212_A test_212_B 0.01 3 +test_213_A test_213_B 0.01 3.5 +test_214_A test_214_B 0.01 4 +test_215_A test_215_B 0.01 3 +test_216_A test_216_B 0.01 3.5 +test_217_A test_217_B 0.01 4 +test_218_A test_218_B 0.01 4 +test_219_A test_219_B 0.01 4 +test_220_A test_220_B 0.01 3 +test_221_A test_221_B 0.01 4 +test_222_A test_222_B 0.01 4 +test_223_A test_223_B 0.01 4 +test_224_A test_224_B 0.01 3 +test_225_A test_225_B 0.01 3 +test_226_A test_226_B 0.01 4 +test_227_A test_227_B 0.01 4 +test_228_A test_228_B 0.01 4 +test_229_A test_229_B 0.01 3 +test_230_A test_230_B 0.01 3 +test_231_A test_231_B 0.01 4 +test_232_A test_232_B 0.01 4 +test_233_A test_233_B 0.01 2 +test_234_A test_234_B 0.01 3.5 +test_235_A test_235_B 0.01 4 +test_236_A test_236_B 0.01 3 +test_237_A test_237_B 0.01 3.5 +test_238_A test_238_B 0.01 4 +test_239_A test_239_B 0.01 3 +test_240_A test_240_B 0.01 3 +test_241_A test_241_B 0.01 5 +test_242_A test_242_B 0.01 4.5 +test_243_A test_243_B 0.01 4 +test_244_A test_244_B 0.01 3.5 +test_245_A test_245_B 0.01 5 +test_246_A test_246_B 0.01 2.5 +test_247_A test_247_B 0.01 3 +test_248_A test_248_B 0.01 4 +test_249_A test_249_B 0.01 2 +test_250_A test_250_B 0.01 5 +test_251_A test_251_B 0.01 4 +test_252_A test_252_B 0.01 4 +test_253_A test_253_B 0.01 4.5 +test_254_A test_254_B 0.01 4 +test_255_A test_255_B 0.01 3 +test_256_A test_256_B 0.01 4.5 +test_257_A test_257_B 0.01 4 +test_258_A test_258_B 0.01 5 +test_259_A test_259_B 0.01 4 +test_260_A test_260_B 0.01 4 +test_261_A test_261_B 0.01 2.5 +test_262_A test_262_B 0.01 2 +test_263_A test_263_B 0.01 4.5 +test_264_A test_264_B 0.01 3.5 +test_265_A test_265_B 0.01 4 +test_266_A test_266_B 0.01 3 +test_267_A test_267_B 0.01 5 +test_268_A test_268_B 0.01 4 +test_269_A test_269_B 0.01 4 +test_270_A test_270_B 0.01 3 +test_271_A test_271_B 0.01 4 +test_272_A test_272_B 0.01 4 +test_273_A test_273_B 0.01 2 +test_274_A test_274_B 0.01 3 +test_275_A test_275_B 0.01 3 +test_276_A test_276_B 0.01 4 +test_277_A test_277_B 0.01 5 +test_278_A test_278_B 0.01 4 +test_279_A test_279_B 0.01 4.5 +test_280_A test_280_B 0.01 3.5 +test_281_A test_281_B 0.01 2 +test_282_A test_282_B 0.01 3 +test_283_A test_283_B 0.01 3 +test_284_A test_284_B 0.01 3 +test_285_A test_285_B 0.01 3 +test_286_A test_286_B 0.01 3 +test_287_A test_287_B 0.01 3.5 +test_288_A test_288_B 0.01 3 +test_289_A test_289_B 0.01 2 +test_290_A test_290_B 0.01 4 +test_291_A test_291_B 0.01 3 +test_292_A test_292_B 0.01 4 +test_293_A test_293_B 0.01 2.5 +test_294_A test_294_B 0.01 4 +test_295_A test_295_B 0.01 3.5 +test_296_A test_296_B 0.01 3 +test_297_A test_297_B 0.01 3 +test_298_A test_298_B 0.01 4 +test_299_A test_299_B 0.01 4 +test_300_A test_300_B 0.01 3 +test_301_A test_301_B 0.01 2 +test_302_A test_302_B 0.01 2 +test_303_A test_303_B 0.01 3 +test_304_A test_304_B 0.01 3 +test_305_A test_305_B 0.01 3 +test_306_A test_306_B 0.01 3 +test_307_A test_307_B 0.01 2 +test_308_A test_308_B 0.01 3 +test_309_A test_309_B 0.01 2.5 +test_310_A test_310_B 0.01 4 +test_311_A test_311_B 0.01 3 +test_312_A test_312_B 0.01 3.5 +test_313_A test_313_B 0.01 3 +test_314_A test_314_B 0.01 2 +test_315_A test_315_B 0.01 3 +test_316_A test_316_B 0.01 4.5 +test_317_A test_317_B 0.01 3 +test_318_A test_318_B 0.01 3 +test_319_A test_319_B 0.01 3 +test_320_A test_320_B 0.01 4 +test_321_A test_321_B 0.01 2 +test_322_A test_322_B 0.01 3 +test_323_A test_323_B 0.01 3 +test_324_A test_324_B 0.01 2 +test_325_A test_325_B 0.01 3 +test_326_A test_326_B 0.01 2 +test_327_A test_327_B 0.01 3 +test_328_A test_328_B 0.01 3 +test_329_A test_329_B 0.01 4 +test_330_A test_330_B 0.01 3 +test_331_A test_331_B 0.01 3 +test_332_A test_332_B 0.01 2 +test_333_A test_333_B 0.01 2 +test_334_A test_334_B 0.01 3 +test_335_A test_335_B 0.01 2 +test_336_A test_336_B 0.01 3 +test_337_A test_337_B 0.01 2 +test_338_A test_338_B 0.01 2 +test_339_A test_339_B 0.01 2 +test_340_A test_340_B 0.01 1 +test_341_A test_341_B 0.01 2 +test_342_A test_342_B 0.01 2 +test_343_A test_343_B 0.01 2 +test_344_A test_344_B 0.01 2 +test_345_A test_345_B 0.01 2 +test_346_A test_346_B 0.01 2 +test_347_A test_347_B 0.01 2 +test_348_A test_348_B 0.01 2 +test_349_A test_349_B 0.01 2 +test_350_A test_350_B 0.01 2 +test_351_A test_351_B 0.01 2 +test_352_A test_352_B 0.01 2 +test_353_A test_353_B 0.01 2.5 +test_354_A test_354_B 0.01 2 +test_355_A test_355_B 0.01 2 +test_356_A test_356_B 0.01 2 +test_357_A test_357_B 0.01 2 +test_358_A test_358_B 0.01 2 +test_359_A test_359_B 0.01 2 +test_360_A test_360_B 0.01 32 +test_361_A test_361_B 0.01 8 +test_362_A test_362_B 0.01 29.5 +test_363_A test_363_B 0.01 41 +test_364_A test_364_B 0.01 41.5 +test_365_A test_365_B 0.01 27.5 +test_366_A test_366_B 0.01 46 +test_367_A test_367_B 0.01 37.5 +test_368_A test_368_B 0.01 27 +test_369_A test_369_B 0.01 42 +test_370_A test_370_B 0.01 45.5 +test_371_A test_371_B 0.01 34 +test_372_A test_372_B 0.01 19.5 +test_373_A test_373_B 0.01 24 +test_374_A test_374_B 0.01 10 +test_375_A test_375_B 0.01 17.5 +test_376_A test_376_B 0.01 28.5 +test_377_A test_377_B 0.01 40 +test_378_A test_378_B 0.01 40 +test_379_A test_379_B 0.01 24.5 +test_380_A test_380_B 0.01 36 +test_381_A test_381_B 0.01 38 +test_382_A test_382_B 0.01 48 +test_383_A test_383_B 0.01 32.5 +test_384_A test_384_B 0.01 44 +test_385_A test_385_B 0.01 44.5 +test_386_A test_386_B 0.01 11 +test_387_A test_387_B 0.01 47.5 +test_388_A test_388_B 0.01 28 +test_389_A test_389_B 0.01 32 +test_390_A test_390_B 0.01 24.5 +test_391_A test_391_B 0.01 47 +test_392_A test_392_B 0.01 28 +test_393_A test_393_B 0.01 16 +test_394_A test_394_B 0.01 44 +test_395_A test_395_B 0.01 38 +test_396_A test_396_B 0.01 47.5 +test_397_A test_397_B 0.01 35 +test_398_A test_398_B 0.01 33 +test_399_A test_399_B 0.01 33 +test_400_A test_400_B 0.01 31 +test_401_A test_401_B 0.01 48 +test_402_A test_402_B 0.01 37.5 +test_403_A test_403_B 0.01 40 +test_404_A test_404_B 0.01 47 +test_405_A test_405_B 0.01 23 +test_406_A test_406_B 0.01 40 +test_407_A test_407_B 0.01 46 +test_408_A test_408_B 0.01 39 +test_409_A test_409_B 0.01 26 +test_410_A test_410_B 0.01 28 +test_411_A test_411_B 0.01 27 +test_412_A test_412_B 0.01 33 +test_413_A test_413_B 0.01 36 +test_414_A test_414_B 0.01 42.5 +test_415_A test_415_B 0.01 40 +test_416_A test_416_B 0.01 37 +test_417_A test_417_B 0.01 43 +test_418_A test_418_B 0.01 16 +test_419_A test_419_B 0.01 34 +test_420_A test_420_B 0.01 42.5 +test_421_A test_421_B 0.01 38 +test_422_A test_422_B 0.01 30 +test_423_A test_423_B 0.01 44 +test_424_A test_424_B 0.01 46 +test_425_A test_425_B 0.01 38 +test_426_A test_426_B 0.01 35.5 +test_427_A test_427_B 0.01 29 +test_428_A test_428_B 0.01 43.5 +test_429_A test_429_B 0.01 34 +test_430_A test_430_B 0.01 48 +test_431_A test_431_B 0.01 41 +test_432_A test_432_B 0.01 35 +test_433_A test_433_B 0.01 32 +test_434_A test_434_B 0.01 36 +test_435_A test_435_B 0.01 43.5 +test_436_A test_436_B 0.01 32.5 +test_437_A test_437_B 0.01 40 +test_438_A test_438_B 0.01 34 +test_439_A test_439_B 0.01 31.5 +test_440_A test_440_B 0.01 26.5 +test_441_A test_441_B 0.01 49.5 +test_442_A test_442_B 0.01 30 +test_443_A test_443_B 0.01 29 +test_444_A test_444_B 0.01 29 +test_445_A test_445_B 0.01 48 +test_446_A test_446_B 0.01 35 +test_447_A test_447_B 0.01 43 +test_448_A test_448_B 0.01 19 +test_449_A test_449_B 0.01 34 +test_450_A test_450_B 0.01 44 +test_451_A test_451_B 0.01 36 +test_452_A test_452_B 0.01 32 +test_453_A test_453_B 0.01 49 +test_454_A test_454_B 0.01 48.5 +test_455_A test_455_B 0.01 46 +test_456_A test_456_B 0.01 33.5 +test_457_A test_457_B 0.01 49.5 +test_458_A test_458_B 0.01 38 +test_459_A test_459_B 0.01 21 +test_460_A test_460_B 0.01 40 +test_461_A test_461_B 0.01 32 +test_462_A test_462_B 0.01 37 +test_463_A test_463_B 0.01 23 +test_464_A test_464_B 0.01 19 +test_465_A test_465_B 0.01 29 +test_466_A test_466_B 0.01 38 +test_467_A test_467_B 0.01 29 +test_468_A test_468_B 0.01 45 +test_469_A test_469_B 0.01 27.5 +test_470_A test_470_B 0.01 43 +test_471_A test_471_B 0.01 24.5 +test_472_A test_472_B 0.01 42 +test_473_A test_473_B 0.01 36.5 +test_474_A test_474_B 0.01 46.5 +test_475_A test_475_B 0.01 18 +test_476_A test_476_B 0.01 29 +test_477_A test_477_B 0.01 44 +test_478_A test_478_B 0.01 49 +test_479_A test_479_B 0.01 33 +test_480_A test_480_B 0.01 43 +test_481_A test_481_B 0.01 42 +test_482_A test_482_B 0.01 31 +test_483_A test_483_B 0.01 37 +test_484_A test_484_B 0.01 25 +test_485_A test_485_B 0.01 33 +test_486_A test_486_B 0.01 35 +test_487_A test_487_B 0.01 39 +test_488_A test_488_B 0.01 26.5 +test_489_A test_489_B 0.01 39.5 +test_490_A test_490_B 0.01 26 +test_491_A test_491_B 0.01 45 +test_492_A test_492_B 0.01 21 +test_493_A test_493_B 0.01 37 +test_494_A test_494_B 0.01 50 +test_495_A test_495_B 0.01 41 +test_496_A test_496_B 0.01 34 +test_497_A test_497_B 0.01 35 +test_498_A test_498_B 0.01 34 +test_499_A test_499_B 0.01 30 +test_500_A test_500_B 0.01 39 +test_501_A test_501_B 0.01 36 +test_502_A test_502_B 0.01 36 +test_503_A test_503_B 0.01 49.5 +test_504_A test_504_B 0.01 40.5 +test_505_A test_505_B 0.01 29 +test_506_A test_506_B 0.01 33 +test_507_A test_507_B 0.01 38 +test_508_A test_508_B 0.01 21.5 +test_509_A test_509_B 0.01 27 +test_510_A test_510_B 0.01 43 +test_511_A test_511_B 0.01 34 +test_512_A test_512_B 0.01 25.5 +test_513_A test_513_B 0.01 19 +test_514_A test_514_B 0.01 28 +test_515_A test_515_B 0.01 41.5 +test_516_A test_516_B 0.01 46 +test_517_A test_517_B 0.01 34 +test_518_A test_518_B 0.01 33 +test_519_A test_519_B 0.01 37.5 +test_520_A test_520_B 0.01 37 +test_521_A test_521_B 0.01 42.5 +test_522_A test_522_B 0.01 44 +test_523_A test_523_B 0.01 36.5 +test_524_A test_524_B 0.01 40 +test_525_A test_525_B 0.01 36.5 +test_526_A test_526_B 0.01 24 +test_527_A test_527_B 0.01 34 +test_528_A test_528_B 0.01 23.5 +test_529_A test_529_B 0.01 30 +test_530_A test_530_B 0.01 50 +test_531_A test_531_B 0.01 33 +test_532_A test_532_B 0.01 36 +test_533_A test_533_B 0.01 24 +test_534_A test_534_B 0.01 46.5 +test_535_A test_535_B 0.01 39 +test_536_A test_536_B 0.01 26 +test_537_A test_537_B 0.01 30 +test_538_A test_538_B 0.01 27.5 +test_539_A test_539_B 0.01 26 +test_540_A test_540_B 0.01 23 +test_541_A test_541_B 0.01 26.5 +test_542_A test_542_B 0.01 40.5 +test_543_A test_543_B 0.01 41 +test_544_A test_544_B 0.01 46 +test_545_A test_545_B 0.01 33 +test_546_A test_546_B 0.01 38 +test_547_A test_547_B 0.01 33 +test_548_A test_548_B 0.01 28 +test_549_A test_549_B 0.01 29 +test_550_A test_550_B 0.01 33 +test_551_A test_551_B 0.01 20 +test_552_A test_552_B 0.01 27 +test_553_A test_553_B 0.01 21.5 +test_554_A test_554_B 0.01 28 +test_555_A test_555_B 0.01 31 +test_556_A test_556_B 0.01 31 +test_557_A test_557_B 0.01 30 +test_558_A test_558_B 0.01 29 +test_559_A test_559_B 0.01 30 +test_560_A test_560_B 0.01 21 +test_561_A test_561_B 0.01 37.5 +test_562_A test_562_B 0.01 40 +test_563_A test_563_B 0.01 25 +test_564_A test_564_B 0.01 22 +test_565_A test_565_B 0.01 24 +test_566_A test_566_B 0.01 39 +test_567_A test_567_B 0.01 27 +test_568_A test_568_B 0.01 30 +test_569_A test_569_B 0.01 35 +test_570_A test_570_B 0.01 29 +test_571_A test_571_B 0.01 27 +test_572_A test_572_B 0.01 23 +test_573_A test_573_B 0.01 34 +test_574_A test_574_B 0.01 26 +test_575_A test_575_B 0.01 28 +test_576_A test_576_B 0.01 22 +test_577_A test_577_B 0.01 29 +test_578_A test_578_B 0.01 24 +test_579_A test_579_B 0.01 22 +test_580_A test_580_B 0.01 31 +test_581_A test_581_B 0.01 39 +test_582_A test_582_B 0.01 21 +test_583_A test_583_B 0.01 32 +test_584_A test_584_B 0.01 22 +test_585_A test_585_B 0.01 26 +test_586_A test_586_B 0.01 20 +test_587_A test_587_B 0.01 28 +test_588_A test_588_B 0.01 22 +test_589_A test_589_B 0.01 20 +test_590_A test_590_B 0.01 17 +test_591_A test_591_B 0.01 24 +test_592_A test_592_B 0.01 27.5 +test_593_A test_593_B 0.01 31 +test_594_A test_594_B 0.01 18 +test_595_A test_595_B 0.01 18 +test_596_A test_596_B 0.01 32 +test_597_A test_597_B 0.01 17 +test_598_A test_598_B 0.01 19 +test_599_A test_599_B 0.01 23 +test_600_A test_600_B 0.01 16 +test_601_A test_601_B 0.01 13 +test_602_A test_602_B 0.01 25 +test_603_A test_603_B 0.01 17 +test_604_A test_604_B 0.01 18 +test_605_A test_605_B 0.01 20 +test_606_A test_606_B 0.01 16 +test_607_A test_607_B 0.01 19 +test_608_A test_608_B 0.01 22 +test_609_A test_609_B 0.01 18 +test_610_A test_610_B 0.01 22 +test_611_A test_611_B 0.01 18 +test_612_A test_612_B 0.01 21 +test_613_A test_613_B 0.01 23 +test_614_A test_614_B 0.01 14 +test_615_A test_615_B 0.01 21 +test_616_A test_616_B 0.01 20 +test_617_A test_617_B 0.01 17 +test_618_A test_618_B 0.01 15 +test_619_A test_619_B 0.01 18 +test_620_A test_620_B 0.01 346.5 +test_621_A test_621_B 0.01 414 +test_622_A test_622_B 0.01 321 +test_623_A test_623_B 0.01 428 +test_624_A test_624_B 0.01 137.5 +test_625_A test_625_B 0.01 272 +test_626_A test_626_B 0.01 257 +test_627_A test_627_B 0.01 261 +test_628_A test_628_B 0.01 480.5 +test_629_A test_629_B 0.01 378 +test_630_A test_630_B 0.01 153.5 +test_631_A test_631_B 0.01 199 +test_632_A test_632_B 0.01 457 +test_633_A test_633_B 0.01 358.5 +test_634_A test_634_B 0.01 357 +test_635_A test_635_B 0.01 216 +test_636_A test_636_B 0.01 460.5 +test_637_A test_637_B 0.01 314 +test_638_A test_638_B 0.01 322 +test_639_A test_639_B 0.01 440.5 +test_640_A test_640_B 0.01 324 +test_641_A test_641_B 0.01 265 +test_642_A test_642_B 0.01 395.5 +test_643_A test_643_B 0.01 397 +test_644_A test_644_B 0.01 308 +test_645_A test_645_B 0.01 199 +test_646_A test_646_B 0.01 256.5 +test_647_A test_647_B 0.01 293 +test_648_A test_648_B 0.01 297 +test_649_A test_649_B 0.01 410.5 +test_650_A test_650_B 0.01 322 +test_651_A test_651_B 0.01 458 +test_652_A test_652_B 0.01 420.5 +test_653_A test_653_B 0.01 235 +test_654_A test_654_B 0.01 220 +test_655_A test_655_B 0.01 257 +test_656_A test_656_B 0.01 305 +test_657_A test_657_B 0.01 230.5 +test_658_A test_658_B 0.01 500 +test_659_A test_659_B 0.01 155 +test_660_A test_660_B 0.01 418 +test_661_A test_661_B 0.01 403.5 +test_662_A test_662_B 0.01 296 +test_663_A test_663_B 0.01 297.5 +test_664_A test_664_B 0.01 219 +test_665_A test_665_B 0.01 476.5 +test_666_A test_666_B 0.01 347 +test_667_A test_667_B 0.01 284 +test_668_A test_668_B 0.01 324.5 +test_669_A test_669_B 0.01 231 +test_670_A test_670_B 0.01 410 +test_671_A test_671_B 0.01 206 +test_672_A test_672_B 0.01 266 +test_673_A test_673_B 0.01 319.5 +test_674_A test_674_B 0.01 483 +test_675_A test_675_B 0.01 355.5 +test_676_A test_676_B 0.01 316.5 +test_677_A test_677_B 0.01 297 +test_678_A test_678_B 0.01 458 +test_679_A test_679_B 0.01 398.5 +test_680_A test_680_B 0.01 371.5 +test_681_A test_681_B 0.01 338 +test_682_A test_682_B 0.01 461 +test_683_A test_683_B 0.01 298.5 +test_684_A test_684_B 0.01 303.5 +test_685_A test_685_B 0.01 265 +test_686_A test_686_B 0.01 400.5 +test_687_A test_687_B 0.01 264 +test_688_A test_688_B 0.01 303 +test_689_A test_689_B 0.01 360 +test_690_A test_690_B 0.01 325 +test_691_A test_691_B 0.01 217 +test_692_A test_692_B 0.01 313 +test_693_A test_693_B 0.01 491 +test_694_A test_694_B 0.01 367.5 +test_695_A test_695_B 0.01 285 +test_696_A test_696_B 0.01 314 +test_697_A test_697_B 0.01 379 +test_698_A test_698_B 0.01 277.5 +test_699_A test_699_B 0.01 302 +test_700_A test_700_B 0.01 299 +test_701_A test_701_B 0.01 439.5 +test_702_A test_702_B 0.01 289 +test_703_A test_703_B 0.01 460.5 +test_704_A test_704_B 0.01 210 +test_705_A test_705_B 0.01 491 +test_706_A test_706_B 0.01 438.5 +test_707_A test_707_B 0.01 323 +test_708_A test_708_B 0.01 427 +test_709_A test_709_B 0.01 364 +test_710_A test_710_B 0.01 434 +test_711_A test_711_B 0.01 434 +test_712_A test_712_B 0.01 391 +test_713_A test_713_B 0.01 356 +test_714_A test_714_B 0.01 420 +test_715_A test_715_B 0.01 354 +test_716_A test_716_B 0.01 281 +test_717_A test_717_B 0.01 359.5 +test_718_A test_718_B 0.01 345 +test_719_A test_719_B 0.01 341.5 +test_720_A test_720_B 0.01 497.5 +test_721_A test_721_B 0.01 199 +test_722_A test_722_B 0.01 452 +test_723_A test_723_B 0.01 335.5 +test_724_A test_724_B 0.01 311 +test_725_A test_725_B 0.01 336 +test_726_A test_726_B 0.01 300 +test_727_A test_727_B 0.01 317 +test_728_A test_728_B 0.01 492 +test_729_A test_729_B 0.01 304 +test_730_A test_730_B 0.01 217 +test_731_A test_731_B 0.01 322 +test_732_A test_732_B 0.01 289 +test_733_A test_733_B 0.01 182 +test_734_A test_734_B 0.01 410.5 +test_735_A test_735_B 0.01 306 +test_736_A test_736_B 0.01 294 +test_737_A test_737_B 0.01 254 +test_738_A test_738_B 0.01 338.5 +test_739_A test_739_B 0.01 225 +test_740_A test_740_B 0.01 280 +test_741_A test_741_B 0.01 454 +test_742_A test_742_B 0.01 226 +test_743_A test_743_B 0.01 365 +test_744_A test_744_B 0.01 456 +test_745_A test_745_B 0.01 405 +test_746_A test_746_B 0.01 322 +test_747_A test_747_B 0.01 279 +test_748_A test_748_B 0.01 311.5 +test_749_A test_749_B 0.01 308 +test_750_A test_750_B 0.01 322 +test_751_A test_751_B 0.01 409 +test_752_A test_752_B 0.01 277 +test_753_A test_753_B 0.01 318 +test_754_A test_754_B 0.01 299.5 +test_755_A test_755_B 0.01 462.5 +test_756_A test_756_B 0.01 314 +test_757_A test_757_B 0.01 300 +test_758_A test_758_B 0.01 455 +test_759_A test_759_B 0.01 422.5 +test_760_A test_760_B 0.01 433.5 +test_761_A test_761_B 0.01 278 +test_762_A test_762_B 0.01 484.5 +test_763_A test_763_B 0.01 348 +test_764_A test_764_B 0.01 491 +test_765_A test_765_B 0.01 280 +test_766_A test_766_B 0.01 259 +test_767_A test_767_B 0.01 275.5 +test_768_A test_768_B 0.01 348 +test_769_A test_769_B 0.01 330 +test_770_A test_770_B 0.01 412 +test_771_A test_771_B 0.01 262 +test_772_A test_772_B 0.01 455 +test_773_A test_773_B 0.01 294 +test_774_A test_774_B 0.01 425 +test_775_A test_775_B 0.01 220.5 +test_776_A test_776_B 0.01 411.5 +test_777_A test_777_B 0.01 383 +test_778_A test_778_B 0.01 363 +test_779_A test_779_B 0.01 302 +test_780_A test_780_B 0.01 328 +test_781_A test_781_B 0.01 294 +test_782_A test_782_B 0.01 407.5 +test_783_A test_783_B 0.01 260.5 +test_784_A test_784_B 0.01 410 +test_785_A test_785_B 0.01 328 +test_786_A test_786_B 0.01 419.5 +test_787_A test_787_B 0.01 165 +test_788_A test_788_B 0.01 389 +test_789_A test_789_B 0.01 254 +test_790_A test_790_B 0.01 311 +test_791_A test_791_B 0.01 258 +test_792_A test_792_B 0.01 331 +test_793_A test_793_B 0.01 378 +test_794_A test_794_B 0.01 415 +test_795_A test_795_B 0.01 364 +test_796_A test_796_B 0.01 279 +test_797_A test_797_B 0.01 249 +test_798_A test_798_B 0.01 463 +test_799_A test_799_B 0.01 304 +test_800_A test_800_B 0.01 187 +test_801_A test_801_B 0.01 305.5 +test_802_A test_802_B 0.01 385 +test_803_A test_803_B 0.01 360.5 +test_804_A test_804_B 0.01 269 +test_805_A test_805_B 0.01 294 +test_806_A test_806_B 0.01 362 +test_807_A test_807_B 0.01 354 +test_808_A test_808_B 0.01 196 +test_809_A test_809_B 0.01 248 +test_810_A test_810_B 0.01 297.5 +test_811_A test_811_B 0.01 243 +test_812_A test_812_B 0.01 312 +test_813_A test_813_B 0.01 241 +test_814_A test_814_B 0.01 384 +test_815_A test_815_B 0.01 250 +test_816_A test_816_B 0.01 205 +test_817_A test_817_B 0.01 308 +test_818_A test_818_B 0.01 356 +test_819_A test_819_B 0.01 230 +test_820_A test_820_B 0.01 178 +test_821_A test_821_B 0.01 294 +test_822_A test_822_B 0.01 227 +test_823_A test_823_B 0.01 234 +test_824_A test_824_B 0.01 241 +test_825_A test_825_B 0.01 233 +test_826_A test_826_B 0.01 284 +test_827_A test_827_B 0.01 287 +test_828_A test_828_B 0.01 192 +test_829_A test_829_B 0.01 359 +test_830_A test_830_B 0.01 225 +test_831_A test_831_B 0.01 273 +test_832_A test_832_B 0.01 248 +test_833_A test_833_B 0.01 217 +test_834_A test_834_B 0.01 332 +test_835_A test_835_B 0.01 218 +test_836_A test_836_B 0.01 335 +test_837_A test_837_B 0.01 192 +test_838_A test_838_B 0.01 188 +test_839_A test_839_B 0.01 347 +test_840_A test_840_B 0.01 273 +test_841_A test_841_B 0.01 187 +test_842_A test_842_B 0.01 170 +test_843_A test_843_B 0.01 230 +test_844_A test_844_B 0.01 206.5 +test_845_A test_845_B 0.01 177 +test_846_A test_846_B 0.01 251 +test_847_A test_847_B 0.01 163 +test_848_A test_848_B 0.01 174 +test_849_A test_849_B 0.01 177 +test_850_A test_850_B 0.01 252 +test_851_A test_851_B 0.01 262 +test_852_A test_852_B 0.01 174 +test_853_A test_853_B 0.01 169 +test_854_A test_854_B 0.01 200 +test_855_A test_855_B 0.01 189 +test_856_A test_856_B 0.01 206.5 +test_857_A test_857_B 0.01 260 +test_858_A test_858_B 0.01 191 +test_859_A test_859_B 0.01 216 +test_860_A test_860_B 0.01 181.5 +test_861_A test_861_B 0.01 219 +test_862_A test_862_B 0.01 143 +test_863_A test_863_B 0.01 173 +test_864_A test_864_B 0.01 134 +test_865_A test_865_B 0.01 159 +test_866_A test_866_B 0.01 205 +test_867_A test_867_B 0.01 178 +test_868_A test_868_B 0.01 189.5 +test_869_A test_869_B 0.01 145 +test_870_A test_870_B 0.01 179 +test_871_A test_871_B 0.01 167 +test_872_A test_872_B 0.01 149 +test_873_A test_873_B 0.01 149 +test_874_A test_874_B 0.01 187 +test_875_A test_875_B 0.01 193 +test_876_A test_876_B 0.01 165 +test_877_A test_877_B 0.01 190 +test_878_A test_878_B 0.01 242 +test_879_A test_879_B 0.01 187 diff --git a/geom_bottleneck/tests/data/ws_tests/test_100_A b/geom_bottleneck/tests/data/ws_tests/test_100_A new file mode 100644 index 0000000..8d126f0 --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_100_A @@ -0,0 +1,100 @@ +7.50638 7.78005 +0.991758 2.12178 +5.18481 6.61702 +6.14703 7.08581 +4.09936 4.83024 +3.79915 4.51283 +3.17645 3.75321 +0.61305 0.998622 +0.445643 1.13781 +6.38205 6.53669 +5.96392 6.44093 +7.21047 7.26005 +0.6703 1.26593 +0.529933 1.7027 +7.92495 8.83023 +2.1382 2.71695 +3.79209 4.5197 +5.23354 5.82214 +-0.395097 2.18831 +3.22028 3.88648 +5.56262 5.79949 +8.39623 9.37185 +2.7452 3.84539 +9.5022 10.2414 +1.01374 1.40504 +3.2029 3.89559 +7.61236 8.28485 +6.4371 6.909 +4.45616 5.35067 +1.57802 1.77895 +6.5991 7.76339 +6.66729 6.71714 +6.11898 6.57121 +2.60663 4.36396 +-0.259613 1.17683 +7.72857 9.48862 +4.68398 5.51521 +4.87447 5.4233 +6.86301 6.88244 +4.17814 4.25886 +8.70558 9.72902 +4.40873 4.57389 +6.1824 7.05049 +7.97557 8.79739 +8.52591 8.6985 +5.15336 5.27796 +9.70144 9.77031 +0.561778 1.39045 +9.32553 10.2456 +7.01495 7.74521 +6.83355 7.28255 +1.96721 3.01504 +5.78411 7.59464 +5.64012 6.10721 +3.7249 5.17086 +4.33297 5.91657 +7.11793 7.2545 +5.109 6.76878 +3.02787 3.04077 +0.999365 2.05566 +8.81392 8.9086 +6.20106 6.78943 +6.7987 7.05794 +0.438805 0.449602 +8.71793 9.79853 +-0.150282 0.51997 +5.72257 5.93156 +5.71098 6.09535 +9.0378 9.45942 +0.534987 0.872885 +7.72276 8.57754 +9.26069 9.40289 +4.148 4.80519 +1.04579 3.18109 +0.259767 0.93215 +0.250608 0.511569 +4.88108 5.62239 +4.6731 5.3348 +7.84979 7.93545 +0.912521 1.48142 +4.82553 5.38108 +6.02179 7.61665 +3.85848 6.39418 +5.10754 6.02118 +1.71956 1.86238 +6.47336 6.74034 +-0.0371018 0.212738 +3.97259 4.15465 +2.17413 3.20188 +4.49098 6.09812 +6.62445 7.84196 +6.57541 7.432 +6.81052 9.6653 +3.67502 4.69734 +3.92378 4.14743 +5.93127 6.46154 +0.63424 0.705454 +7.60129 9.23263 +4.23064 4.74575 +0.397705 1.24458 diff --git a/geom_bottleneck/tests/data/ws_tests/test_100_A.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_100_A.pd.dipha new file mode 100644 index 0000000..e94f5fe Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_100_A.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_100_B b/geom_bottleneck/tests/data/ws_tests/test_100_B new file mode 100644 index 0000000..852799d --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_100_B @@ -0,0 +1,100 @@ +5.8232 6.36308 +2.16066 2.48668 +2.38754 4.91418 +4.77403 5.43982 +0.291412 1.11147 +3.77337 5.2686 +8.31344 9.05384 +0.734064 1.14844 +7.57606 7.8521 +3.16719 3.86953 +2.55072 2.64932 +9.51707 9.6071 +0.304643 2.41784 +2.79925 3.28234 +5.32901 7.7576 +5.19903 6.30449 +1.87819 2.99454 +8.92272 9.67105 +4.62414 5.05592 +4.0079 4.64148 +2.26369 3.44573 +2.69335 3.13426 +1.90706 2.42652 +2.68113 2.79133 +1.41065 1.56018 +6.55282 7.18725 +5.72986 6.37151 +7.26968 8.22623 +3.32643 3.73606 +3.77325 4.63115 +1.05457 1.83651 +8.6815 8.85251 +3.91285 4.17139 +0.380936 0.842109 +7.33227 7.69334 +8.45635 8.923 +4.1769 5.08373 +0.501374 2.23328 +-0.161782 1.28908 +3.44716 3.4662 +3.15394 4.30243 +8.71416 9.3781 +6.3034 8.62893 +6.53824 7.04611 +0.6386 1.35269 +0.862088 0.960371 +5.12963 5.20203 +1.58695 2.0452 +6.57698 6.63228 +3.87747 4.45669 +1.51273 3.25669 +-0.0992804 0.667302 +4.7489 4.80059 +0.0280559 1.90471 +6.7462 8.27612 +0.915652 1.30007 +2.79556 3.77404 +9.87989 10.0722 +9.39105 9.84229 +7.57235 9.37122 +5.09426 6.44266 +6.3994 6.72037 +5.73441 6.99341 +6.9079 7.88049 +4.2003 4.41933 +-1.72447 2.25877 +9.04907 9.64323 +4.40473 5.3593 +9.31201 9.96079 +7.28343 8.74163 +3.0172 6.23779 +8.08422 8.56069 +6.83038 6.99863 +2.32038 3.1289 +7.42302 8.26286 +6.66905 7.18496 +0.730748 1.61335 +4.00564 5.73993 +2.81231 3.67489 +2.33178 2.37845 +9.03302 9.68681 +0.567816 0.755485 +7.89783 8.7621 +0.177662 0.332833 +-0.181569 1.36821 +6.22158 6.55787 +4.67115 5.16995 +0.806432 0.820738 +7.69636 7.87402 +4.40933 4.54995 +9.1329 9.15037 +8.87416 9.04329 +1.14349 1.8993 +3.29756 4.7172 +6.67873 8.31364 +6.91238 7.1654 +0.483084 1.55006 +2.66058 3.86294 +5.93347 6.06085 +7.40514 9.05071 diff --git a/geom_bottleneck/tests/data/ws_tests/test_100_B.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_100_B.pd.dipha new file mode 100644 index 0000000..25d6734 Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_100_B.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_200_A b/geom_bottleneck/tests/data/ws_tests/test_200_A new file mode 100644 index 0000000..164b71d --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_200_A @@ -0,0 +1,200 @@ +0.471299 1.89241 +2.82136 3.97846 +8.81923 9.20678 +1.42474 1.65425 +8.36963 9.16097 +-0.236476 0.692489 +7.57182 8.06148 +2.89878 3.21958 +7.1285 7.51707 +5.75496 7.09461 +6.00081 6.10914 +9.60869 9.64676 +7.42889 8.97174 +7.26061 8.55944 +2.41226 2.5146 +8.5616 9.44847 +7.4946 8.86962 +5.42244 6.98028 +9.62386 9.96039 +7.70591 9.92849 +1.34119 3.2048 +3.92169 5.15228 +8.82955 9.60318 +7.94213 9.39997 +2.6716 4.02057 +0.375206 0.497663 +1.94572 3.65599 +1.03366 1.46356 +8.91855 10.1838 +7.11087 8.64425 +2.63266 2.78706 +8.93611 10.2943 +8.51999 9.28356 +1.31436 3.13725 +1.92871 4.00178 +8.30503 8.45555 +2.58739 2.82076 +3.20419 5.29453 +7.4015 8.13225 +9.07991 9.74729 +0.822366 0.938371 +2.90508 4.29367 +4.32385 5.4787 +3.63054 4.6918 +8.52962 9.87004 +1.16994 2.39465 +2.61903 3.33772 +4.15505 4.52942 +8.7068 9.66579 +8.10373 9.31351 +0.7954 1.23001 +7.82253 8.69505 +4.59616 5.91996 +1.02032 1.93931 +6.98421 8.46017 +8.42263 11.3447 +2.63444 3.7158 +7.49059 9.1137 +-0.122109 1.41074 +8.29578 8.81161 +6.24793 6.32368 +4.07212 4.39695 +5.32453 7.457 +8.3892 9.82048 +4.35981 4.78063 +5.49932 6.08321 +1.0107 1.53369 +2.48759 2.94139 +4.24977 5.52034 +1.93104 3.35207 +-0.733247 1.22412 +-0.354283 2.36812 +6.34728 6.44213 +5.98172 7.8753 +5.47963 6.82986 +6.01986 6.6588 +4.62793 5.22134 +7.73923 8.29761 +8.85565 9.51494 +5.55307 6.15804 +6.30963 7.17248 +9.4775 10.2636 +7.45333 7.74006 +1.79317 2.33273 +7.73056 8.44999 +3.94172 5.02778 +8.36177 9.85172 +5.91765 8.12935 +7.95436 8.97583 +5.06238 5.37907 +4.56153 4.97175 +9.47572 9.65038 +9.54745 9.922 +7.82271 8.66299 +4.19056 4.75156 +4.15657 5.72352 +0.213845 0.312444 +2.30944 2.6806 +2.42391 3.41888 +6.00512 6.88274 +6.64546 7.61145 +-0.204229 2.78228 +-0.417104 0.667252 +8.18696 8.67785 +9.27818 9.67924 +-0.0174685 0.21355 +5.91137 6.39606 +9.49268 10.1457 +2.11362 4.36526 +6.51084 7.82167 +6.07066 6.44843 +-0.653518 1.08588 +7.46736 7.87137 +5.26045 7.92188 +6.4171 6.8133 +6.73709 7.70383 +3.46451 4.23679 +0.122365 0.809853 +7.98627 8.0505 +1.71192 2.63047 +1.20624 2.12087 +4.6812 5.51566 +2.62672 2.67648 +4.203 5.1052 +5.26482 6.5186 +3.68166 3.74701 +2.72011 3.98338 +3.41652 3.71477 +2.26211 2.90374 +0.930209 1.43211 +1.98603 3.36662 +4.55838 5.9933 +5.66292 6.59838 +3.12432 3.87457 +6.54384 8.38959 +0.205059 0.331022 +8.70617 9.34121 +7.02182 7.38679 +2.36908 2.84197 +9.13221 9.76563 +7.50113 9.49245 +8.15671 8.45093 +1.9517 2.20923 +3.23368 3.43695 +2.97273 4.10133 +7.36338 8.96733 +4.77525 5.18347 +9.47774 10.3537 +1.75218 1.97051 +5.42544 6.18939 +9.75801 10.0151 +6.31285 6.38327 +8.43389 8.721 +7.6108 7.81113 +8.72029 10.3153 +5.18655 7.1101 +7.96243 8.43151 +0.798103 0.860125 +1.1289 2.77549 +5.91084 6.03085 +4.95884 5.46913 +5.88125 6.49667 +7.9394 8.9545 +5.07492 5.55063 +5.92251 6.08548 +3.88602 5.41487 +1.40122 2.15276 +8.74244 8.83223 +4.75577 6.60338 +0.921272 1.44873 +3.77361 3.90348 +8.8999 9.8518 +3.11077 4.85674 +8.56185 10.6345 +8.76335 9.00169 +6.8734 8.60197 +4.54408 4.93892 +5.57849 6.31727 +7.95161 8.30843 +1.55798 2.4957 +3.86082 3.97131 +6.45433 7.17065 +0.96021 2.32897 +6.84576 6.89531 +8.59095 8.70199 +3.57754 4.26457 +5.27979 5.74385 +2.06602 2.90525 +3.0856 4.18179 +2.76214 3.9982 +2.11943 5.4285 +3.1197 3.24389 +0.495798 1.23632 +3.18253 3.99433 +7.02072 8.37949 +2.77905 3.42643 +1.57093 2.30655 +7.10979 7.14006 +6.20994 6.72092 +8.15136 8.33899 diff --git a/geom_bottleneck/tests/data/ws_tests/test_200_B b/geom_bottleneck/tests/data/ws_tests/test_200_B new file mode 100644 index 0000000..761943d --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_200_B @@ -0,0 +1,200 @@ +1.17434 1.46837 +2.58198 4.16589 +0.234041 0.968658 +1.52703 1.59579 +6.7103 7.44033 +3.19227 4.41539 +5.42556 5.57369 +3.45417 4.86089 +3.82256 4.1092 +7.82551 7.90784 +3.9384 4.71796 +5.60335 5.9054 +7.96663 9.8987 +6.30305 6.64853 +7.33246 10.5316 +0.623312 1.09008 +2.63041 2.64616 +5.36028 6.28956 +4.64202 5.91858 +7.55219 7.96304 +7.73736 9.18221 +1.67114 1.84851 +5.07514 5.12159 +7.03732 7.05228 +7.5006 7.59212 +0.244947 1.55875 +0.0170454 1.10485 +1.95394 3.53669 +5.66015 6.01949 +5.88211 7.64639 +7.46698 9.27085 +6.37429 7.10154 +4.54535 4.81932 +8.21203 9.35896 +4.89933 6.20802 +3.68683 4.17831 +0.477467 0.828394 +6.17871 6.77834 +9.77523 9.92676 +0.854808 2.38709 +7.93326 8.3553 +2.10917 2.27771 +4.07045 4.72793 +8.2016 8.8011 +2.9205 3.95746 +2.89806 4.39725 +5.5654 5.78669 +9.5219 9.98543 +7.08591 7.19588 +8.35359 9.57893 +9.81348 10.0345 +8.5994 9.71835 +5.43903 7.25234 +1.82768 2.92724 +4.44952 6.79754 +5.66747 7.34386 +5.88153 6.39253 +3.34008 4.22032 +2.46068 2.76051 +0.370778 2.61681 +6.02508 6.26809 +4.32654 4.93262 +7.41536 7.99616 +8.84229 9.87911 +3.8551 5.84353 +1.56832 2.34694 +6.96099 7.42028 +8.15753 8.72014 +9.23141 10.3815 +7.4484 7.80228 +0.473671 0.874895 +3.15689 3.50687 +3.58122 4.09945 +3.55022 3.74767 +4.42708 5.80211 +4.40956 4.68699 +3.80576 4.61856 +7.29965 8.28614 +7.40582 8.15308 +1.69789 1.77669 +1.66419 3.44308 +0.473997 0.872506 +7.83959 8.52898 +6.22416 6.36949 +-0.187159 0.871822 +0.232336 0.585965 +9.29905 9.44357 +1.4459 2.40589 +2.83008 3.19758 +1.15291 2.12112 +2.58686 3.33896 +6.79362 7.88068 +0.228178 1.48318 +5.60001 6.20258 +4.97803 7.10992 +1.70429 1.962 +2.72659 3.13886 +9.22714 9.25889 +3.84694 3.88778 +-0.282077 1.48155 +9.28756 9.58517 +4.34069 5.59751 +8.63909 8.76839 +8.86236 10.7642 +6.77597 8.41888 +7.30621 8.64164 +0.685607 1.22755 +2.91514 3.22638 +2.72098 3.66837 +8.17528 8.32638 +5.19632 5.7506 +7.34177 8.70639 +5.74082 6.35524 +5.95975 6.69284 +9.40187 10.4488 +2.92761 3.36735 +0.399531 3.13082 +4.83399 4.92635 +7.74539 8.56852 +1.76322 3.5086 +6.54479 6.72963 +7.64362 8.12404 +1.35542 1.45313 +0.214385 0.718085 +1.7006 3.21962 +5.91009 6.47862 +2.21093 2.34636 +5.96919 6.79365 +6.59951 8.22203 +1.54571 1.59397 +3.27012 3.79128 +0.32455 0.622995 +1.73926 2.78017 +9.81035 9.84077 +7.38441 7.85171 +8.90372 9.34186 +7.26323 8.41174 +5.7363 5.97348 +8.25473 10.1281 +2.3981 2.52096 +8.53783 9.63442 +8.51755 9.2735 +6.48614 6.773 +3.40182 3.65137 +2.1353 3.04852 +2.95397 3.73285 +6.98063 7.4963 +4.50189 5.26384 +0.21416 1.49363 +0.632196 1.36307 +6.57833 6.60481 +8.0634 9.33903 +2.79759 2.94462 +4.43747 4.58861 +6.48733 6.86569 +2.28008 3.47037 +6.87452 7.77431 +-0.156821 2.71557 +0.72595 1.78862 +1.97586 2.38196 +8.61839 9.1468 +4.55496 5.68986 +0.26923 1.15728 +9.63757 9.7236 +1.39497 1.96698 +4.8643 5.04172 +6.64675 7.66435 +2.56256 2.6015 +-0.381989 0.611211 +0.676336 1.26896 +8.95304 9.03243 +5.62058 6.07997 +3.36522 4.04276 +8.64868 10.5024 +4.75813 5.19834 +1.96608 2.05864 +9.01449 9.10397 +3.72786 4.51921 +5.6938 6.96584 +1.73499 2.9314 +2.73099 3.41409 +8.77171 9.07665 +4.63865 4.67649 +8.6698 9.30782 +-0.168259 2.09581 +9.29672 9.56 +0.372544 2.60567 +0.450487 1.32919 +6.95341 7.6399 +3.4403 5.24993 +5.53469 6.97831 +-0.79664 1.21306 +5.68831 6.14413 +8.85601 8.95444 +3.83309 5.211 +5.51573 6.5114 +3.64009 3.99648 +4.40759 4.99283 +1.85198 2.6457 +2.72645 3.74803 diff --git a/geom_bottleneck/tests/data/ws_tests/test_5000_A b/geom_bottleneck/tests/data/ws_tests/test_5000_A new file mode 100644 index 0000000..094c6e0 --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_5000_A @@ -0,0 +1,5000 @@ +0.471299 1.89241 +2.82136 3.97846 +8.81923 9.20678 +1.42474 1.65425 +8.36963 9.16097 +-0.236476 0.692489 +7.57182 8.06148 +2.89878 3.21958 +7.1285 7.51707 +5.75496 7.09461 +6.00081 6.10914 +9.60869 9.64676 +7.42889 8.97174 +7.26061 8.55944 +2.41226 2.5146 +8.5616 9.44847 +7.4946 8.86962 +5.42244 6.98028 +9.62386 9.96039 +7.70591 9.92849 +1.34119 3.2048 +3.92169 5.15228 +8.82955 9.60318 +7.94213 9.39997 +2.6716 4.02057 +0.375206 0.497663 +1.94572 3.65599 +1.03366 1.46356 +8.91855 10.1838 +7.11087 8.64425 +2.63266 2.78706 +8.93611 10.2943 +8.51999 9.28356 +1.31436 3.13725 +1.92871 4.00178 +8.30503 8.45555 +2.58739 2.82076 +3.20419 5.29453 +7.4015 8.13225 +9.07991 9.74729 +0.822366 0.938371 +2.90508 4.29367 +4.32385 5.4787 +3.63054 4.6918 +8.52962 9.87004 +1.16994 2.39465 +2.61903 3.33772 +4.15505 4.52942 +8.7068 9.66579 +8.10373 9.31351 +0.7954 1.23001 +7.82253 8.69505 +4.59616 5.91996 +1.02032 1.93931 +6.98421 8.46017 +8.42263 11.3447 +2.63444 3.7158 +7.49059 9.1137 +-0.122109 1.41074 +8.29578 8.81161 +6.24793 6.32368 +4.07212 4.39695 +5.32453 7.457 +8.3892 9.82048 +4.35981 4.78063 +5.49932 6.08321 +1.0107 1.53369 +2.48759 2.94139 +4.24977 5.52034 +1.93104 3.35207 +-0.733247 1.22412 +-0.354283 2.36812 +6.34728 6.44213 +5.98172 7.8753 +5.47963 6.82986 +6.01986 6.6588 +4.62793 5.22134 +7.73923 8.29761 +8.85565 9.51494 +5.55307 6.15804 +6.30963 7.17248 +9.4775 10.2636 +7.45333 7.74006 +1.79317 2.33273 +7.73056 8.44999 +3.94172 5.02778 +8.36177 9.85172 +5.91765 8.12935 +7.95436 8.97583 +5.06238 5.37907 +4.56153 4.97175 +9.47572 9.65038 +9.54745 9.922 +7.82271 8.66299 +4.19056 4.75156 +4.15657 5.72352 +0.213845 0.312444 +2.30944 2.6806 +2.42391 3.41888 +6.00512 6.88274 +6.64546 7.61145 +-0.204229 2.78228 +-0.417104 0.667252 +8.18696 8.67785 +9.27818 9.67924 +-0.0174685 0.21355 +5.91137 6.39606 +9.49268 10.1457 +2.11362 4.36526 +6.51084 7.82167 +6.07066 6.44843 +-0.653518 1.08588 +7.46736 7.87137 +5.26045 7.92188 +6.4171 6.8133 +6.73709 7.70383 +3.46451 4.23679 +0.122365 0.809853 +7.98627 8.0505 +1.71192 2.63047 +1.20624 2.12087 +4.6812 5.51566 +2.62672 2.67648 +4.203 5.1052 +5.26482 6.5186 +3.68166 3.74701 +2.72011 3.98338 +3.41652 3.71477 +2.26211 2.90374 +0.930209 1.43211 +1.98603 3.36662 +4.55838 5.9933 +5.66292 6.59838 +3.12432 3.87457 +6.54384 8.38959 +0.205059 0.331022 +8.70617 9.34121 +7.02182 7.38679 +2.36908 2.84197 +9.13221 9.76563 +7.50113 9.49245 +8.15671 8.45093 +1.9517 2.20923 +3.23368 3.43695 +2.97273 4.10133 +7.36338 8.96733 +4.77525 5.18347 +9.47774 10.3537 +1.75218 1.97051 +5.42544 6.18939 +9.75801 10.0151 +6.31285 6.38327 +8.43389 8.721 +7.6108 7.81113 +8.72029 10.3153 +5.18655 7.1101 +7.96243 8.43151 +0.798103 0.860125 +1.1289 2.77549 +5.91084 6.03085 +4.95884 5.46913 +5.88125 6.49667 +7.9394 8.9545 +5.07492 5.55063 +5.92251 6.08548 +3.88602 5.41487 +1.40122 2.15276 +8.74244 8.83223 +4.75577 6.60338 +0.921272 1.44873 +3.77361 3.90348 +8.8999 9.8518 +3.11077 4.85674 +8.56185 10.6345 +8.76335 9.00169 +6.8734 8.60197 +4.54408 4.93892 +5.57849 6.31727 +7.95161 8.30843 +1.55798 2.4957 +3.86082 3.97131 +6.45433 7.17065 +0.96021 2.32897 +6.84576 6.89531 +8.59095 8.70199 +3.57754 4.26457 +5.27979 5.74385 +2.06602 2.90525 +3.0856 4.18179 +2.76214 3.9982 +2.11943 5.4285 +3.1197 3.24389 +0.495798 1.23632 +3.18253 3.99433 +7.02072 8.37949 +2.77905 3.42643 +1.57093 2.30655 +7.10979 7.14006 +6.20994 6.72092 +8.15136 8.33899 +0.903753 1.57921 +0.380744 1.88053 +1.3164 1.79885 +0.199366 0.576639 +5.53683 6.49433 +8.8705 9.14396 +3.1401 3.98761 +4.82675 6.69396 +7.28593 8.08916 +8.11312 9.92914 +3.25737 3.42109 +2.58413 4.57223 +2.65202 2.77196 +-0.31616 1.51568 +4.1621 5.29563 +4.49155 5.21037 +7.28481 7.31722 +9.70568 10.0406 +2.39057 2.85874 +2.30626 3.16244 +1.15896 2.09616 +5.91343 7.33024 +-0.172181 0.177363 +5.08934 6.10928 +7.15508 7.55315 +4.43036 4.68093 +6.00772 6.49566 +7.9247 8.43809 +1.57028 2.52328 +3.45458 4.43692 +3.18257 4.83824 +1.48243 1.91225 +2.59025 2.99596 +6.93059 8.34359 +4.53752 7.51216 +6.42857 6.51513 +5.5663 6.13877 +7.54367 7.56485 +9.01229 9.19913 +2.84158 3.23347 +0.42959 0.620618 +8.77033 9.33787 +8.06103 8.30989 +6.48425 7.83668 +4.66949 6.00205 +4.46683 4.66247 +8.96738 9.07714 +0.463093 0.514808 +7.72986 9.44537 +6.31391 6.8289 +0.883295 1.70946 +3.73278 3.98015 +6.73453 6.92514 +3.58434 4.43262 +0.236286 1.4601 +2.00505 2.38684 +3.845 4.20708 +1.18852 3.04911 +0.766784 1.00641 +7.38781 8.11216 +8.9396 9.27589 +0.369822 1.53322 +8.76527 9.23987 +0.663408 0.803445 +9.69209 10.1455 +9.73379 10.234 +3.47602 4.89968 +4.12754 5.45249 +7.31984 8.57369 +0.989101 1.47678 +5.57662 5.83292 +4.99092 6.85044 +4.35272 4.3683 +0.0517815 1.92227 +7.2694 7.80634 +1.35565 1.42783 +8.5638 8.91707 +1.74557 2.74123 +2.18226 2.19664 +-0.901334 1.32691 +0.866613 1.03788 +5.30895 6.31774 +7.70178 8.5675 +4.06894 4.16071 +2.59697 3.53162 +4.30201 5.34212 +4.08762 4.19091 +-0.516192 0.848397 +9.85911 10.1066 +0.472991 1.40069 +6.26012 7.0054 +0.707801 2.15445 +1.73825 1.87193 +0.206301 0.831746 +7.77872 7.92715 +4.94477 5.60361 +3.86216 5.16839 +1.35166 1.54482 +2.91721 3.56193 +4.57242 4.75913 +7.09303 8.29678 +8.18431 8.92151 +6.80303 10.87 +1.29208 1.72027 +1.22224 1.31693 +5.26756 6.26459 +2.55221 3.94397 +6.58902 6.78354 +7.85917 8.89791 +6.59279 7.63115 +4.45787 7.26828 +3.48759 5.33991 +2.13838 3.86589 +1.53368 3.57313 +1.41722 3.19336 +3.48388 4.11958 +1.53756 2.98451 +7.29083 8.22109 +1.2713 2.16915 +6.94685 7.31029 +6.2494 7.04676 +3.00376 3.02028 +1.25232 1.43301 +1.50413 2.25 +2.89098 4.77198 +4.50766 5.89294 +5.5403 6.07893 +-0.101858 0.409209 +3.87963 6.1053 +-0.19564 1.46589 +-0.342077 0.694623 +6.63875 7.42223 +7.89982 9.05857 +4.91121 5.48031 +5.90743 8.35815 +7.13881 8.21597 +4.11493 5.08147 +3.59673 3.77176 +8.08236 8.3237 +1.35842 1.48934 +5.42963 5.85906 +4.60778 4.9734 +-0.607198 0.91225 +5.40263 5.7017 +5.08624 5.63236 +7.34529 9.02233 +7.30013 8.12907 +6.56106 6.75585 +6.82576 7.25434 +2.96037 3.56454 +3.60283 4.09137 +6.35408 6.71888 +-0.688103 0.84579 +8.45128 8.69771 +6.31749 7.3294 +5.82223 6.04761 +1.72983 2.38205 +6.94974 7.76985 +9.681 10.0141 +8.65394 9.2456 +2.52904 3.39548 +6.66609 7.35785 +4.18963 4.5473 +3.58643 3.80513 +2.88796 3.82413 +0.992066 1.1477 +4.57942 5.15419 +3.02826 4.32268 +5.91565 6.82087 +4.13694 5.13393 +6.28717 6.53257 +1.3149 2.36944 +0.488974 0.981461 +4.32763 4.98272 +-0.420836 0.63619 +7.13406 7.31362 +0.367782 1.91138 +6.14763 6.16713 +0.837933 1.92794 +9.3781 10.0609 +3.22887 5.44584 +5.91554 6.65974 +5.68608 6.02435 +7.99715 8.55953 +5.37106 5.38574 +0.254544 0.374268 +0.184701 0.917061 +9.38005 9.54042 +6.86741 7.35628 +0.87398 1.69093 +7.75845 8.53773 +0.370425 1.35335 +0.699837 0.810893 +3.73223 4.32089 +3.81804 3.85752 +4.85936 5.10097 +2.70381 3.10519 +3.82523 5.27699 +9.13422 10.3317 +4.62775 4.77988 +7.91139 7.95504 +2.72614 4.79958 +0.863357 1.88643 +4.14155 5.02327 +2.49683 4.11585 +1.06741 1.11516 +6.20979 8.38443 +0.936362 2.46703 +6.58231 7.85063 +1.89469 2.31422 +8.70668 9.14006 +5.76486 6.1122 +3.15778 3.76679 +0.248282 2.19881 +1.25317 1.92694 +7.81837 9.53067 +-0.582906 0.818904 +8.34194 8.37845 +4.4913 5.10164 +3.86376 5.5453 +6.94054 7.68699 +2.07462 2.5811 +0.518698 2.1529 +3.51773 4.60946 +8.39915 8.98446 +1.63685 2.19755 +6.60737 9.05917 +2.06667 3.23994 +3.18822 3.31219 +2.44332 3.22088 +4.755 4.87118 +4.34245 4.91565 +4.64562 4.8104 +2.73282 3.35646 +9.48057 9.86441 +0.640899 1.03356 +0.789475 0.925731 +1.4247 1.58347 +1.47747 2.25408 +8.8612 9.81597 +8.44147 10.6885 +9.07046 10.0877 +0.350125 1.15765 +4.45375 5.73964 +4.06526 4.26457 +7.50776 8.23491 +1.55452 1.63786 +2.8399 4.52559 +1.34319 1.47951 +5.21572 5.65702 +5.85695 6.75574 +8.21826 10.657 +-0.0479956 1.79162 +1.72905 1.78113 +3.35685 4.03797 +3.7123 5.82296 +8.56751 10.2992 +4.07987 4.25273 +5.8347 6.07253 +3.25283 3.99065 +9.31995 10.3647 +0.649025 1.14496 +1.06966 2.04182 +7.59831 7.85826 +3.35263 3.84374 +4.91371 5.10148 +8.0875 9.23421 +3.00484 5.14282 +8.60448 9.09442 +5.61429 6.24037 +3.4729 4.17907 +7.18702 7.26274 +0.729966 0.928899 +2.27264 2.81241 +2.67248 3.91661 +3.98443 4.64406 +5.50463 6.92435 +-0.257961 0.905736 +5.71363 6.67387 +4.12643 4.66467 +3.97623 4.64917 +9.71227 9.8243 +8.66674 8.97634 +7.94673 8.73904 +7.45228 8.14466 +3.78405 4.81189 +4.05505 5.00011 +2.84957 3.15451 +6.93785 7.58172 +1.85006 1.96814 +6.82256 7.00166 +2.42727 2.68161 +8.06129 8.76308 +1.53758 3.67482 +2.5057 4.18495 +7.09618 7.79664 +1.12843 1.46228 +1.61447 2.2668 +5.58639 5.70776 +8.15398 8.34959 +2.49733 2.57643 +5.18817 5.32462 +5.62963 5.86377 +1.95215 2.26641 +7.22129 7.23255 +5.99833 6.18639 +6.20875 7.13868 +6.814 7.6597 +7.41314 9.49798 +5.48819 6.31634 +4.81318 5.08156 +9.15434 9.42787 +4.83201 5.43295 +1.44477 2.6455 +8.8907 10.4727 +3.19487 3.21255 +1.47291 3.13113 +4.14796 5.10058 +5.85016 8.41212 +7.58183 8.53659 +9.5978 10.2877 +1.5954 2.58394 +2.65561 4.0975 +-0.157024 0.16627 +7.04379 7.75368 +2.39896 2.7728 +2.42376 3.58085 +0.158653 0.857045 +7.82101 9.01833 +6.80499 7.35261 +6.62833 6.66255 +4.90229 5.45681 +8.50205 8.69236 +2.01845 2.06924 +8.2503 9.04222 +4.58265 5.52758 +8.6176 9.74887 +1.28468 1.77019 +5.40424 6.20705 +0.943905 1.98023 +4.2702 4.41287 +3.89454 4.4814 +0.585132 1.56351 +9.45354 10.5374 +3.7501 5.07553 +7.53248 8.14004 +4.60026 4.78921 +1.61073 4.22368 +6.22591 7.40966 +0.57866 1.0522 +5.877 6.55882 +3.54573 3.7731 +7.64294 7.66103 +8.2399 9.14032 +0.307808 0.571367 +7.89791 9.25734 +5.2852 5.84332 +0.45713 2.42223 +7.73426 8.48158 +8.0058 9.46405 +8.03189 8.41868 +1.54624 1.98914 +7.24167 7.27699 +8.61226 8.83199 +5.38365 6.52599 +0.827018 1.51428 +7.19285 7.48372 +-0.0969552 2.16007 +4.08084 6.32563 +9.16026 10.2604 +0.206147 0.717435 +4.00643 4.8093 +2.16139 3.14759 +1.73359 3.13485 +9.1103 9.36052 +7.05621 7.43901 +4.83509 6.07581 +5.67164 7.89488 +7.93353 8.18454 +2.59566 3.1842 +3.62521 4.95121 +3.0297 3.18649 +1.08515 2.69289 +3.77063 5.7789 +0.106035 1.27409 +0.601099 2.13481 +6.98837 7.58833 +9.22955 9.79149 +1.6398 1.78726 +2.30423 3.34814 +2.3912 2.81842 +4.71724 6.16966 +5.13553 5.5016 +5.34117 5.45075 +9.32776 10.0676 +4.54244 5.29058 +4.01337 5.73188 +8.17427 8.39652 +1.96122 2.6921 +0.594267 1.00176 +-0.136973 0.977133 +6.41362 6.78056 +1.68388 2.39891 +9.50795 10.2315 +-0.262703 1.15557 +8.72229 9.683 +5.41821 5.67519 +4.93514 7.15867 +4.07046 4.26702 +-0.00866106 0.252353 +8.65877 10.1527 +2.10958 3.40353 +2.94947 3.43201 +6.32014 7.06279 +2.55034 2.89646 +3.87777 5.68044 +2.05325 3.00968 +5.11855 6.55784 +8.99618 9.22608 +3.36303 3.84902 +2.6234 3.70832 +7.35189 8.30856 +6.43777 7.28495 +5.33954 5.48055 +0.15999 0.391114 +3.4492 5.07088 +2.38503 2.42742 +3.88912 4.93246 +2.76303 4.54991 +6.56261 7.60381 +3.64198 3.72471 +1.70542 1.78806 +9.71115 9.88315 +0.471586 1.82377 +9.27611 10.5725 +0.486889 0.851587 +4.39234 5.10637 +9.54209 9.8955 +6.99602 7.42461 +2.98797 3.74623 +5.89424 6.4498 +9.63845 9.86333 +4.39828 5.18646 +2.30118 3.5758 +8.68128 9.56011 +9.00505 10.4304 +-0.22184 0.233296 +6.48492 7.60283 +1.54156 2.60693 +4.06808 6.39369 +5.52361 6.26241 +-0.698727 0.745524 +2.30742 2.41924 +0.655833 1.65752 +6.94733 7.81866 +7.83136 9.10651 +6.45284 7.1931 +6.09683 6.66159 +9.03299 9.4163 +1.86392 3.26189 +0.54863 2.07194 +0.364026 1.38376 +0.706954 1.0736 +-0.111015 0.584367 +1.54265 2.1413 +0.501172 0.57928 +2.09411 2.28902 +1.89894 4.09104 +8.72895 8.87045 +5.27709 5.72545 +0.164581 1.64188 +8.39203 8.73608 +8.21523 8.45002 +9.62006 10.1665 +4.79076 6.26442 +3.44189 3.68669 +8.93789 9.38343 +7.07036 7.64194 +8.34396 9.56445 +8.29992 8.64954 +5.82566 7.83287 +2.43008 3.4476 +1.81121 2.12203 +4.36108 4.3842 +6.28756 6.95939 +3.8698 5.79519 +0.644581 0.699162 +9.71982 10.2422 +4.86545 5.00544 +8.3808 9.29356 +1.34495 1.40972 +1.03641 2.01838 +8.55609 9.99958 +1.40813 3.46097 +3.20928 4.08838 +8.24345 9.11587 +1.27604 2.03462 +8.28298 8.46252 +2.20644 3.19585 +1.91396 2.30108 +4.2553 5.66006 +7.34925 8.38275 +6.28319 7.22199 +8.42171 9.62596 +1.12059 1.18262 +1.37555 1.84196 +4.39663 4.93639 +9.28044 9.58437 +5.47407 6.88593 +8.36529 8.49813 +9.40208 10.5922 +-0.451389 1.92404 +2.89431 3.19453 +6.51433 8.02158 +5.52163 6.06786 +7.63525 9.86457 +4.13898 5.05845 +0.136662 0.503748 +6.13492 6.74997 +8.37416 9.18971 +8.64164 8.82663 +0.941173 1.16158 +6.9073 8.26916 +8.37278 8.44326 +8.8951 9.20427 +8.40149 9.17577 +3.60361 4.57183 +8.67263 10.1127 +5.89716 6.45412 +1.97285 2.35593 +7.22973 8.13467 +9.55645 9.92529 +0.261578 0.836274 +9.04414 9.45485 +6.18043 6.54229 +8.88579 9.54087 +1.82613 2.93849 +5.7599 5.96366 +5.23105 5.5541 +0.425229 1.44436 +0.32065 2.60892 +7.83655 9.48786 +2.3168 3.45972 +2.35466 3.23342 +8.24494 8.27258 +7.32678 7.74264 +8.37275 10.0741 +4.17337 4.98348 +-0.162009 0.724431 +9.49757 9.76377 +8.69435 9.08089 +4.13841 4.7514 +7.26358 7.55514 +6.91912 6.93 +6.7883 7.18296 +-0.614315 1.1857 +6.05907 7.33557 +4.86704 4.87705 +8.50012 9.14836 +1.83683 3.09895 +6.16389 8.39248 +3.03556 4.41004 +4.72416 5.05782 +1.98183 3.19183 +2.77103 5.71501 +4.90002 4.9817 +0.269258 0.725628 +5.59551 7.05038 +2.95416 3.09633 +2.17662 3.18385 +6.67536 7.56762 +7.31678 7.39321 +3.84158 3.85359 +4.38203 5.10149 +0.816784 1.09918 +0.70131 0.739502 +0.276631 2.32633 +9.15839 9.49433 +0.721295 1.97673 +2.63875 2.75437 +5.00344 5.5645 +2.24555 2.81234 +7.74465 9.07646 +2.35244 4.90632 +0.812093 0.954419 +3.97904 5.2071 +4.19177 4.83646 +0.853012 1.331 +2.64112 3.25613 +0.0894716 1.61954 +3.39617 3.40859 +1.56906 2.28518 +2.37258 4.36515 +1.60997 1.7561 +5.15275 5.33281 +6.47824 7.47529 +2.51145 3.29949 +2.71094 2.77785 +8.84653 9.48398 +1.3246 1.66664 +7.43718 7.5546 +3.68985 4.24649 +4.50553 4.51669 +4.15617 4.54887 +8.55319 10.2136 +2.1448 3.55805 +4.64594 4.71505 +1.71763 1.99977 +4.98066 5.46709 +7.7779 8.36497 +-0.0604997 0.301294 +5.11873 7.32867 +4.94567 5.5986 +5.32645 6.26835 +2.5768 3.13511 +3.31604 3.87555 +1.60834 2.68762 +3.30552 3.85211 +4.26741 4.98636 +0.820475 1.18854 +7.91501 10.7203 +5.17391 5.30351 +4.00452 5.75141 +2.37722 3.4602 +2.2373 2.94837 +1.62462 3.48264 +7.98507 9.2566 +5.32504 5.56388 +0.760614 0.7802 +0.855659 1.01522 +3.11231 4.43223 +5.62821 6.21564 +4.96845 5.35921 +8.10559 9.11106 +1.02533 1.13103 +6.99976 7.0788 +1.87628 2.58801 +1.11023 2.24655 +5.23343 5.45086 +0.95875 2.25343 +7.45917 8.23614 +2.72245 3.04663 +8.66816 8.70698 +5.55734 7.12262 +1.01935 1.88271 +0.804417 1.76187 +7.82703 8.78426 +4.77321 6.15199 +2.91503 3.69352 +0.776735 1.08883 +5.19981 5.46442 +9.06483 10.4008 +7.72082 8.26398 +2.9854 3.26573 +0.584028 2.60443 +0.700994 1.10379 +5.47612 5.94502 +-0.318442 0.986786 +5.0704 5.08055 +3.83732 4.4826 +5.60843 6.59005 +8.81432 9.7851 +6.28792 6.65284 +1.16812 2.27701 +7.15234 9.66795 +9.02188 9.15339 +1.76112 2.04839 +7.49419 7.6204 +5.1765 5.497 +1.45855 1.94969 +1.35003 1.55822 +2.50453 2.86815 +7.10451 8.51352 +3.87727 4.1124 +1.84876 2.79351 +3.01661 4.05396 +-0.16814 0.366484 +-0.538895 0.608786 +7.59933 9.00744 +0.938648 2.38471 +5.76934 6.16572 +8.20416 8.62505 +8.64542 8.7264 +2.75784 2.7828 +0.794451 1.97817 +9.21331 10.5156 +8.46671 8.80572 +3.94814 5.16845 +6.73654 6.97397 +4.05301 4.93008 +6.37833 6.77985 +7.21161 8.15994 +3.74993 4.61029 +-0.127938 1.09853 +2.82957 4.28816 +6.50564 6.59445 +8.37926 8.48332 +0.757443 1.74585 +0.232438 0.972293 +6.99187 8.7098 +7.20368 8.44301 +4.4801 6.07501 +4.34015 6.1495 +2.19394 3.22334 +7.29817 8.41021 +1.16627 2.68901 +4.62423 5.08039 +0.955655 2.22882 +1.45862 3.07065 +1.69815 2.56291 +4.01179 4.36587 +7.135 7.75829 +6.6823 7.27765 +5.44745 5.67195 +4.94594 5.42067 +0.267772 0.301939 +0.676432 1.6296 +1.37335 1.91645 +1.89051 2.38631 +4.84386 6.30539 +8.95613 10.944 +2.18119 2.41821 +5.74901 6.16952 +7.5431 7.88071 +9.05278 9.8128 +0.201334 1.65323 +2.82787 3.82083 +3.07073 3.08475 +8.99671 10.1766 +5.43261 6.12137 +4.83693 4.86848 +6.31804 7.21544 +2.34491 3.2562 +6.05941 6.53725 +-0.483381 1.17347 +5.53777 5.72651 +3.28875 3.47472 +3.94609 4.9418 +7.45585 8.6871 +1.50066 2.57215 +8.10112 8.67954 +6.24737 6.42635 +0.64413 1.05759 +7.1741 8.21476 +0.502722 1.77462 +0.783663 1.74174 +9.52704 9.9109 +-0.473873 2.01013 +7.07946 7.11474 +0.857335 1.6501 +4.00225 4.84453 +5.40598 6.30573 +8.18802 8.30067 +9.00412 10.9588 +9.8362 10.1517 +7.62735 8.37572 +3.41477 4.63099 +2.51254 2.81559 +6.36702 6.56061 +5.11842 5.35515 +5.21873 5.73296 +5.73528 7.77276 +3.64993 4.66826 +7.12664 8.46553 +8.7257 9.16851 +1.27615 2.20376 +7.46188 8.20752 +2.64939 2.66373 +4.94147 6.0509 +6.3805 7.48841 +6.25197 7.12327 +0.0885331 1.2682 +4.97356 6.58488 +4.11917 4.27267 +9.08793 9.70385 +0.897277 1.31702 +6.87538 8.25544 +1.55565 1.59492 +2.62483 3.54274 +1.49631 2.92263 +9.45305 9.97728 +6.24087 6.4577 +3.94636 5.13669 +-0.000956745 1.08235 +1.46134 1.83767 +9.18517 10.6601 +-0.740186 1.81269 +5.81977 6.15818 +7.0529 7.99421 +6.17753 7.49749 +8.63091 9.04205 +9.65219 10.1558 +3.12839 4.99211 +2.97262 4.07384 +4.28605 4.33171 +4.15906 5.6805 +1.35165 1.50732 +0.524207 2.12307 +5.32468 7.01472 +3.16982 4.87893 +6.88786 8.34191 +3.81703 5.22335 +3.86772 4.37359 +8.19386 10.0705 +1.73155 3.16695 +4.31685 4.62261 +9.40618 9.89612 +4.41215 5.19659 +2.35595 2.63543 +7.88481 8.14203 +7.17062 10.3534 +9.41379 10.389 +7.99867 9.01239 +3.31382 4.04915 +5.39222 6.07657 +8.5187 8.65976 +9.30132 10.6131 +7.17351 7.93596 +4.80134 6.72724 +3.59756 4.65182 +1.08248 1.17479 +1.03124 1.06871 +6.43154 6.95098 +-0.102199 0.59801 +4.94795 5.18081 +6.39126 7.30258 +1.52738 2.04271 +1.80373 2.33093 +2.72251 3.01677 +0.296722 1.10844 +6.39104 6.51567 +8.70965 8.78714 +2.07858 4.41695 +1.91027 2.9718 +1.42944 2.01864 +1.96347 2.73397 +4.0701 4.22456 +4.02859 4.05107 +7.10977 7.98092 +8.21148 9.54287 +6.59231 7.65109 +0.144191 0.830665 +2.0192 2.23704 +8.03482 8.39591 +8.90473 9.98543 +2.18284 2.70166 +3.05569 3.54238 +8.35319 9.39539 +2.00803 2.42866 +2.35282 3.13763 +2.20155 2.79377 +1.76531 2.94892 +7.52749 7.72567 +3.02266 3.24778 +4.01741 4.22521 +9.75263 9.91571 +6.45502 6.67838 +2.24912 3.47262 +1.84372 2.26517 +4.09559 5.71188 +1.43811 2.33732 +3.89171 4.16905 +3.01506 3.9725 +0.0273168 1.51766 +5.04118 5.80507 +3.08517 4.17316 +8.81637 8.8332 +8.74055 9.50143 +2.36904 2.69008 +6.39733 6.44221 +8.53272 9.51114 +9.48423 9.55002 +8.65645 9.04872 +6.66352 7.48009 +5.64389 7.88656 +5.75301 6.6759 +3.28645 4.22757 +4.99482 5.82988 +3.00004 4.0273 +1.45249 1.56662 +4.96263 5.32195 +7.91351 8.1437 +1.02034 1.56249 +0.71376 1.73319 +0.709968 1.44651 +9.01414 9.54799 +4.02116 4.68005 +7.10903 7.27075 +7.21322 8.71031 +1.6644 2.27186 +3.71304 4.68764 +9.66257 10.1452 +5.34477 5.46136 +9.27722 10.583 +3.82328 4.83316 +4.77019 5.07928 +9.07112 9.23836 +6.99091 7.25634 +2.11871 2.3054 +7.88242 7.98572 +0.570809 0.714073 +8.51532 9.49151 +0.329247 2.48897 +4.78202 5.36476 +1.47969 2.78867 +6.75011 7.36769 +2.31162 2.39533 +3.50434 4.48026 +5.84603 6.28861 +7.5337 7.62538 +1.09955 2.85741 +6.09915 7.20381 +0.933825 2.37925 +0.576363 2.0182 +3.12126 3.22507 +2.85313 3.02656 +3.25724 3.92077 +5.48575 6.58011 +1.02824 1.65415 +8.68703 9.06219 +3.28389 3.86349 +5.80264 6.12775 +7.11846 7.47444 +1.29638 3.38601 +6.37908 7.05986 +-0.592438 0.854361 +0.39233 1.17768 +2.1497 3.94423 +2.42336 2.43441 +6.94806 8.30626 +0.79865 1.4173 +1.41455 1.43684 +0.240074 1.16712 +4.18593 5.9929 +6.161 6.564 +0.726091 1.90706 +0.375606 0.694866 +4.09349 4.26452 +2.01652 2.68038 +8.99301 9.90549 +8.93909 9.17673 +1.10427 2.01247 +9.12668 9.15282 +1.08098 1.55374 +0.377836 0.414809 +7.28611 8.86318 +8.3542 8.53251 +3.86353 4.12875 +6.7631 7.40068 +4.61679 4.78182 +2.12935 3.45492 +3.68233 4.0457 +6.68131 8.22111 +8.79197 8.80474 +1.8915 2.26287 +0.387586 3.073 +6.46798 7.57381 +7.79742 9.34526 +-1.21538 1.67303 +2.07845 2.66028 +3.14148 4.46647 +1.66789 2.73375 +8.49821 10.0574 +8.42537 8.89906 +0.618349 2.72887 +6.8229 7.54501 +6.99343 7.35322 +7.34223 8.68781 +3.18834 3.98274 +8.86908 10.2535 +3.39839 3.76171 +0.188168 0.392276 +1.68187 3.53401 +6.50423 6.71714 +7.61191 8.89715 +1.68463 2.09275 +5.94627 7.6003 +2.15865 3.24126 +7.93639 8.53826 +2.99626 3.43273 +7.71028 8.41172 +3.19472 4.60878 +8.36123 8.92549 +8.92975 9.02783 +2.87187 3.49672 +6.76949 7.71139 +8.09121 9.31151 +6.84199 7.44009 +0.730655 0.800873 +7.5208 7.54109 +6.75992 7.55017 +6.09818 6.17399 +0.639209 1.27283 +3.01917 3.22327 +1.69181 2.60614 +9.49245 9.5842 +-0.418034 1.08035 +5.77705 6.4705 +6.79362 8.51993 +9.73155 9.81609 +3.71503 3.92022 +6.18589 6.77634 +3.94124 4.23942 +7.59911 8.05275 +3.68865 5.10948 +7.63926 8.63019 +-0.049855 0.0844425 +-0.41188 0.807786 +1.35962 1.81039 +5.40579 6.15098 +1.38594 2.0059 +6.93444 8.71958 +7.01229 9.38008 +-0.0974976 0.962679 +4.74131 6.59152 +1.02343 1.59245 +1.55629 1.9128 +6.28353 8.38021 +5.66349 5.79644 +1.72629 2.28563 +1.64539 2.82654 +0.359466 1.05106 +4.37569 4.82703 +5.87657 6.37853 +1.46316 1.65333 +7.44494 7.5985 +1.16846 1.98579 +4.43371 4.93234 +2.31838 2.47777 +7.52687 8.44423 +6.08056 7.42253 +9.16144 9.94783 +4.74382 4.95616 +0.248344 1.05335 +6.12345 7.43941 +9.45647 9.99799 +3.77124 4.75199 +3.31315 3.44873 +-0.0909828 1.51271 +7.03234 8.02546 +8.11403 9.11461 +6.734 7.34799 +1.08903 1.18319 +2.72871 4.31607 +6.53688 7.52754 +1.07868 1.27792 +6.28409 6.56795 +4.89866 5.79458 +9.06994 9.1221 +2.54989 3.14338 +3.69971 5.71717 +3.7113 4.55076 +8.91864 9.64522 +8.75634 8.82359 +9.02242 9.03869 +3.59945 4.20169 +4.98557 5.07401 +4.81526 5.74009 +7.264 8.63749 +2.79579 4.43389 +2.87204 4.66432 +2.32487 3.72127 +3.99704 4.72567 +8.17229 9.0158 +-0.72926 0.823658 +2.52355 3.32725 +5.3446 6.63868 +4.48935 7.37833 +3.08173 3.0968 +2.41585 3.23026 +9.23187 10.5413 +5.50099 5.51888 +1.29634 1.88846 +-0.0113225 1.41526 +6.34508 7.53417 +0.383019 2.25144 +5.0649 5.40222 +3.08221 3.76296 +9.29111 10.6833 +2.19714 2.94735 +8.75711 9.48583 +8.61564 8.69349 +1.9362 3.96191 +3.7962 4.44382 +7.78501 9.03843 +5.79649 7.29675 +6.03048 7.4316 +1.31105 4.36446 +6.5882 7.03622 +4.88148 7.12474 +6.62305 6.90973 +2.27488 2.73731 +8.42703 9.28888 +7.72928 8.53989 +7.27021 8.63879 +0.992908 1.92001 +-0.282737 0.511292 +7.88963 8.03117 +6.93371 8.26148 +-0.0346633 0.403617 +8.7827 8.82558 +5.16876 5.59742 +8.61275 8.73843 +5.70578 6.02783 +9.08706 9.35903 +9.32728 9.83021 +9.20058 10.2497 +6.79824 7.3024 +7.17979 7.51783 +0.918555 2.67878 +7.9662 8.63241 +8.85903 10.3145 +9.34614 10.1964 +9.05027 9.79872 +8.28959 8.45837 +1.32518 2.04557 +8.72848 9.16742 +5.92126 6.77277 +8.31504 8.78631 +1.02487 1.70172 +4.45204 4.72842 +8.20636 10.4724 +5.86211 6.25457 +6.15754 7.71303 +8.37832 8.82577 +4.25233 4.59417 +9.41451 9.95324 +9.372 10.4461 +1.8346 2.7144 +8.00681 8.14717 +7.03997 7.06753 +7.16892 7.70102 +7.01781 7.46799 +1.78526 1.7969 +1.63304 2.2011 +8.59718 8.61083 +9.43498 10.3636 +4.98718 5.32487 +3.65451 4.89601 +8.82368 9.11333 +-0.104862 0.598773 +4.97756 5.62342 +1.99876 3.24686 +2.32242 4.01096 +4.04914 4.77892 +3.81545 4.32583 +3.30153 3.46783 +3.14287 4.04718 +8.65711 8.76768 +9.09385 10.6898 +4.82771 5.64405 +5.98783 6.36785 +7.93397 9.6543 +4.89726 5.65486 +5.08717 5.22314 +6.59377 7.23748 +3.58289 3.98597 +0.177884 0.397629 +5.30856 5.79257 +2.53943 3.98007 +6.51217 6.59644 +0.196888 1.99904 +3.8709 4.1901 +2.37646 2.50997 +7.03837 8.13287 +6.8674 6.89535 +0.576964 2.08851 +0.902928 2.86981 +8.59261 9.20279 +5.96621 7.49899 +0.617602 1.83267 +2.29189 2.6361 +4.34207 4.61026 +6.19963 6.76443 +1.15955 1.44068 +5.25852 6.33905 +6.37306 7.53103 +9.13334 10.039 +8.67743 9.93959 +5.62973 6.04375 +8.32286 8.77042 +3.28772 6.1722 +4.97902 5.47249 +3.37765 5.07238 +4.58025 4.84341 +2.76807 3.18817 +4.27581 4.43023 +6.92572 7.68461 +0.279247 1.0561 +1.10903 2.61106 +6.71708 6.73132 +2.66415 3.75702 +8.0513 9.80334 +4.82466 6.04232 +2.59971 2.85768 +9.04689 9.73945 +3.48338 5.16622 +7.90925 8.92774 +7.30264 8.06247 +7.59087 8.26476 +0.150315 0.423068 +8.62726 9.74636 +9.01983 9.71707 +6.84007 7.40541 +8.87829 9.48342 +2.69214 3.71481 +0.580036 0.77289 +9.474 9.83397 +5.80151 6.08527 +3.63837 5.27137 +8.5848 8.65779 +7.88338 8.13276 +3.27992 4.20963 +6.21244 7.28079 +-0.348924 1.38478 +5.26688 5.93787 +3.78941 5.01009 +6.41929 8.38529 +1.41724 1.67733 +0.212821 1.58246 +0.0697189 0.160497 +9.57839 10.2377 +9.03332 9.70645 +4.94572 5.15163 +3.16999 4.536 +5.77494 6.68359 +5.89258 6.11852 +7.72257 8.21668 +8.42501 8.44905 +8.7196 8.86465 +4.392 5.1076 +1.88249 2.54422 +1.38092 1.60326 +5.04142 6.37374 +4.31795 5.91152 +1.79399 2.09314 +6.65405 8.32262 +1.36356 1.58538 +5.45456 6.55824 +4.95807 6.22848 +8.72077 10.2825 +0.745968 2.01546 +6.85041 7.11076 +4.82028 5.34442 +5.77673 8.01294 +8.58582 9.33714 +8.49884 9.21533 +9.05574 9.4096 +3.19932 3.27024 +9.50227 9.96685 +0.771636 1.0617 +9.00621 9.36397 +-0.097167 1.39463 +7.79622 8.43537 +8.05228 10.1504 +2.21685 4.17072 +1.82476 2.45381 +4.34408 4.56578 +9.27538 9.54701 +6.80153 7.44115 +7.38884 7.84448 +7.17526 8.00165 +5.85812 7.67326 +5.25545 6.30791 +5.68518 5.94055 +3.77685 4.1545 +0.530928 0.737248 +3.9772 4.59563 +8.96322 9.45618 +7.98322 8.44165 +3.42929 4.22329 +3.66445 4.7583 +-0.183652 0.434842 +3.16492 3.95726 +6.87407 7.89944 +5.08921 5.7745 +2.85466 3.04505 +7.12685 7.41248 +0.715419 0.876676 +3.47441 5.21753 +9.13594 9.87799 +5.52459 6.35691 +5.12544 6.12935 +2.44296 2.91543 +2.75148 4.19886 +1.43478 4.3919 +6.6352 7.07768 +4.72283 5.11506 +6.36434 7.69268 +2.32643 2.75289 +5.46566 6.22854 +6.37995 6.76989 +1.52564 3.55871 +1.05807 2.19393 +1.95374 4.08727 +8.11273 8.12767 +2.85955 4.71355 +4.89009 6.88516 +2.06859 2.25512 +7.50556 8.77923 +4.43353 5.11915 +5.16308 5.9695 +1.12072 1.69277 +3.96494 4.38143 +7.06931 7.89524 +0.514522 1.51265 +6.56389 7.01146 +1.51362 1.8541 +4.90339 5.51209 +2.11422 3.15457 +2.50094 3.92557 +8.24319 8.62826 +-0.0843505 0.710377 +6.35956 7.89457 +-0.790954 1.2964 +4.02253 5.19193 +2.7425 3.46763 +9.41469 10.1367 +1.57636 2.25105 +3.18647 3.38738 +8.36644 9.66791 +0.180846 0.461221 +7.07675 7.71881 +0.265366 1.19275 +5.43007 6.4854 +9.13912 9.23294 +9.52905 10.4029 +1.18712 2.66227 +5.22714 5.62601 +1.87413 2.8716 +5.71882 6.16374 +5.38169 6.13948 +-0.196005 0.236738 +5.36803 6.4395 +8.27713 8.71262 +8.82031 8.8598 +-0.53845 0.564783 +1.80716 1.94173 +5.67905 7.47291 +2.37779 3.64893 +0.574727 0.766424 +4.60701 4.86591 +3.17989 4.37738 +1.36777 3.15112 +1.48092 3.06573 +3.37009 4.06028 +4.17179 6.2073 +6.47953 6.88994 +5.74431 6.5253 +4.88827 5.49049 +5.44148 5.59239 +1.66153 2.63132 +7.69387 7.82267 +5.20911 5.48488 +-0.103218 0.497402 +7.18003 7.33324 +6.54305 8.81732 +0.278108 1.27452 +2.38323 2.94772 +1.2461 2.03246 +5.47052 5.75781 +7.31505 7.35895 +2.22248 4.23589 +0.0305319 0.430773 +8.32043 10.1222 +6.11732 7.09764 +5.08797 5.74991 +6.62491 7.34164 +5.55795 5.66083 +3.27549 4.13145 +1.0113 3.24631 +0.0717186 0.519738 +7.82905 9.30839 +9.90251 9.98691 +0.841457 0.952276 +-0.133927 0.510174 +1.14614 2.82218 +2.59767 4.19742 +3.41095 3.95265 +3.38951 3.75838 +8.86766 9.19437 +9.27927 10.261 +2.33249 2.79402 +5.69681 5.93469 +4.02502 5.38732 +0.797157 1.22845 +7.23558 7.8651 +1.1253 1.99184 +8.58296 8.64267 +-0.400141 0.74698 +3.46677 3.50526 +6.03252 6.64842 +5.8493 6.68938 +3.53209 3.84014 +7.22078 8.98106 +6.21943 7.69944 +0.887198 2.07323 +3.36591 4.57442 +4.30143 6.41179 +4.07556 4.54276 +8.77552 10.0615 +6.7247 7.04044 +9.05494 10.1126 +7.46604 7.80632 +3.38601 3.8043 +5.60475 7.02788 +9.09811 9.4654 +9.33447 9.80012 +8.66499 10.1002 +3.87007 3.88281 +2.87624 3.11359 +5.92385 6.80801 +4.49711 5.01863 +8.84524 9.36225 +6.40944 6.82093 +2.90915 3.68288 +3.96801 4.82534 +5.51744 5.84233 +3.2959 3.44409 +0.18526 0.207322 +5.49717 5.72648 +6.9522 7.1952 +0.769572 1.79343 +5.95522 6.03918 +6.54327 7.7475 +2.13516 3.83957 +-0.388892 0.775076 +1.30128 2.29414 +9.76761 10.1604 +7.38731 8.66002 +7.09229 7.43495 +9.1379 9.52432 +6.75942 7.88717 +7.42824 8.82063 +6.93078 8.19884 +2.307 2.93836 +8.38254 8.84691 +3.90159 5.37938 +0.0413204 0.112203 +0.638217 1.53943 +0.88678 2.49435 +1.99104 2.60847 +6.61595 7.65064 +2.37641 4.71719 +7.94945 9.21404 +5.44594 7.13646 +5.45737 6.12335 +7.39207 8.02885 +5.51588 7.39341 +8.1581 10.0632 +0.197869 1.44516 +-0.0161139 0.73487 +4.24155 4.7304 +0.00374564 1.26481 +8.1878 8.20011 +-0.115544 1.74771 +0.912347 2.52922 +2.72234 4.83268 +6.45577 7.07776 +9.74201 10.1772 +7.11008 8.72914 +4.41921 4.8673 +7.97673 8.36658 +0.438659 0.647061 +4.35086 5.44482 +8.22919 9.34379 +3.53242 5.65576 +1.126 2.32177 +5.95118 6.51364 +3.10519 3.9447 +1.28889 2.26267 +7.04255 7.67791 +3.12614 3.17626 +8.09968 8.49162 +6.07924 7.219 +5.99554 6.52549 +9.14378 9.5773 +5.82872 6.53112 +9.3361 10.1704 +4.3751 6.51675 +3.288 3.98328 +4.56342 4.80185 +7.16574 7.43901 +7.7638 8.47758 +7.31514 7.78499 +7.98942 9.50252 +4.31211 4.70724 +2.9094 3.33304 +0.108736 0.668815 +8.08409 9.11098 +-0.0053985 0.589992 +1.31926 2.72153 +2.28664 2.38813 +7.95237 8.26388 +-0.0283047 0.452099 +7.50295 8.71708 +7.72356 8.63468 +3.48953 3.89579 +7.73814 8.73456 +4.54487 5.45817 +6.45109 7.00312 +3.99915 5.41716 +6.81436 8.5682 +6.86726 7.55999 +2.67863 3.7053 +2.6837 3.39567 +2.84347 2.91724 +5.79383 5.80493 +2.41217 3.0619 +8.78163 9.0998 +1.43456 2.50854 +6.73393 8.53005 +3.02563 3.56456 +3.34628 4.2934 +2.44985 2.92819 +1.38262 2.89341 +4.56337 5.75702 +0.275735 1.16604 +1.39763 2.8108 +9.69128 9.90361 +8.54868 9.66756 +3.01838 3.72831 +8.34017 10.5262 +1.82721 3.0476 +5.9732 6.83307 +2.77874 4.25603 +1.71987 3.1227 +6.33773 7.89103 +1.31982 2.82992 +4.21601 4.9627 +6.68166 6.72653 +0.87708 1.06828 +1.03483 1.26625 +2.996 4.03087 +1.54718 1.57452 +2.33087 2.38226 +2.29464 3.36496 +2.03064 3.41867 +5.8456 6.10406 +7.54614 8.2874 +1.42938 2.89154 +2.65935 3.53883 +3.98845 4.42049 +6.85632 7.15487 +8.12038 9.34993 +0.873558 1.32129 +6.61595 8.00766 +9.49147 9.81947 +-0.0225601 0.328769 +-0.481519 1.37204 +6.31457 7.45251 +4.59738 5.81395 +4.83304 5.63008 +1.95746 2.78657 +2.97889 3.74408 +9.08327 10.702 +3.58219 4.93634 +7.87068 9.77851 +0.330978 1.36031 +4.78145 5.36918 +4.94672 5.56644 +7.66806 8.08613 +4.78512 6.35461 +5.17367 5.74386 +8.65884 9.97088 +9.22053 9.60447 +6.15061 6.58817 +0.0875971 0.541643 +6.45597 7.92002 +0.636824 1.05267 +5.31677 6.12838 +6.51127 6.6731 +0.459551 1.69382 +5.75106 6.41377 +3.68438 4.67415 +9.36302 9.78281 +5.46195 7.99215 +2.55471 2.59231 +-0.0640245 1.33755 +9.36027 10.6198 +2.67955 2.77882 +3.51443 4.10619 +6.83904 7.23692 +2.59553 2.81418 +7.74628 8.95169 +3.86464 3.90067 +3.32377 3.992 +1.43737 2.52191 +3.83927 3.99402 +5.24426 5.35179 +0.833857 1.05277 +8.4062 8.51964 +9.62299 9.66254 +3.55427 5.19048 +1.7003 2.62107 +6.8059 7.49246 +-0.761104 0.773528 +1.37137 1.95048 +2.1222 2.59387 +0.633505 2.04796 +0.605156 1.04336 +7.22842 8.3365 +4.28716 5.28921 +8.14286 9.52015 +7.62467 9.18603 +1.11029 1.81278 +5.05654 5.13597 +0.862653 0.97827 +7.24766 7.92167 +8.80103 8.91467 +3.05841 4.82292 +1.28204 1.55969 +1.58886 2.57874 +0.0537678 1.28837 +8.09303 9.71678 +8.37599 8.85705 +3.18107 4.01971 +6.67019 7.75848 +6.29836 8.21603 +0.86271 1.30358 +3.86126 6.49694 +5.84446 6.24913 +0.475025 0.598151 +6.3477 7.08327 +3.60161 4.51824 +7.13317 8.13858 +4.89052 6.23701 +5.69441 5.99027 +7.18735 8.34853 +9.30182 9.34894 +6.06589 6.15141 +8.05917 8.89642 +5.6136 7.14058 +0.838337 0.959487 +0.56421 2.00841 +6.46876 6.63629 +2.4434 3.92184 +7.97216 9.45372 +8.17926 8.66756 +1.86522 2.01888 +0.983342 1.89079 +2.07322 2.09765 +3.52974 4.73717 +3.24973 4.88691 +5.47789 5.95384 +4.11218 4.57076 +6.61174 7.47165 +8.09302 8.36193 +1.67911 1.69022 +4.436 6.17515 +5.6544 5.74951 +1.50354 1.76043 +4.41433 4.83589 +1.82528 3.53979 +3.98749 4.65527 +6.42503 7.5787 +8.69554 10.1767 +8.39215 8.56999 +8.71646 9.66209 +1.59091 3.39622 +6.12574 6.94955 +7.92527 8.25049 +9.19858 9.49137 +2.73382 2.97747 +4.56558 5.94738 +8.33983 8.58548 +9.00798 9.01838 +4.93268 5.28383 +3.15356 3.58606 +8.28171 8.79351 +1.47358 1.9581 +0.891797 2.05345 +1.56032 2.38159 +2.5152 3.80485 +8.0963 9.88138 +1.1262 1.89279 +7.99336 8.2352 +5.25067 5.41251 +4.57532 5.20101 +1.87911 4.59415 +4.25142 4.70467 +8.18782 8.76989 +9.20478 9.3612 +7.70898 9.7752 +0.655865 0.958924 +4.8883 5.77477 +3.03279 3.47456 +1.01979 1.41661 +8.94219 10.6987 +2.49348 4.58195 +2.44003 3.29005 +3.4725 3.55572 +9.3917 9.95851 +7.08658 7.47686 +3.56413 4.44089 +-0.47868 1.11453 +6.82615 8.00596 +3.49451 3.74705 +8.13286 8.47976 +7.01732 8.82556 +1.19064 1.48887 +5.28851 6.88637 +8.83175 9.49879 +0.939903 1.17024 +7.49124 9.01906 +2.9285 4.23224 +5.68296 6.86273 +8.53897 8.77886 +2.9107 5.01232 +0.748655 1.10265 +4.77258 5.12626 +3.995 4.75289 +2.71467 4.26926 +6.21665 7.16233 +4.53883 5.75731 +4.37153 4.76125 +7.47635 8.75777 +4.82013 6.4699 +9.36015 9.58451 +4.43054 5.86752 +2.10934 2.34705 +3.00306 3.06539 +7.81957 8.44081 +1.97221 3.06916 +0.153393 0.503956 +5.05611 5.27536 +5.73277 5.89001 +3.64807 4.85582 +6.13416 6.1528 +3.85511 4.14045 +0.411725 1.36529 +2.26932 2.5447 +3.51164 4.93266 +2.50955 4.34201 +8.74663 9.39268 +6.2229 6.39303 +4.38059 4.91592 +7.29109 8.62318 +6.31801 6.99532 +9.75036 10.0514 +1.69019 2.41527 +4.20462 5.27729 +6.32944 6.94729 +3.5736 5.21496 +4.48316 4.61828 +1.76915 2.43263 +2.42026 4.09159 +2.08762 2.43074 +5.48161 6.02473 +5.51826 7.47042 +2.78026 3.1552 +7.89469 9.49867 +3.09084 4.54697 +7.20417 7.42408 +5.36528 5.74851 +1.86239 2.41988 +1.55994 2.85743 +4.40182 4.6638 +7.91619 9.01242 +3.08119 3.74714 +1.54108 2.08538 +3.61461 3.64631 +8.76851 9.66257 +-0.645571 1.3366 +-0.707083 1.21005 +7.19571 8.23405 +5.42865 5.89329 +2.12897 2.59222 +0.603102 0.930391 +3.75025 4.63181 +6.14867 6.4526 +7.30947 7.51461 +7.83183 8.79802 +6.06658 8.53246 +1.67895 2.50063 +1.14179 2.04478 +8.59583 8.90112 +-0.918885 1.30717 +0.182607 0.613593 +3.3335 3.77196 +0.783053 2.4368 +6.49331 7.60104 +2.85101 3.28637 +7.42273 7.66905 +3.96433 5.02573 +8.26262 8.40749 +9.24451 9.32783 +4.89036 7.07214 +6.45431 6.96815 +5.20701 6.58747 +7.40142 7.98615 +4.19768 4.9831 +3.32546 3.88811 +-0.471996 0.967855 +9.36172 9.63532 +1.96831 3.00632 +7.537 9.72671 +4.67746 4.81135 +3.10782 4.93642 +4.94809 6.54855 +4.16763 5.25628 +9.04992 10.316 +0.668935 0.680886 +4.02935 4.84503 +5.32499 5.76636 +5.32267 7.15457 +5.18886 5.23491 +4.37053 5.36801 +2.39955 2.74657 +8.19764 8.86645 +4.24706 5.69703 +1.87851 2.36988 +0.886553 1.05064 +7.27428 7.90224 +9.08417 9.44879 +3.11534 4.02019 +6.3284 7.39925 +4.96029 5.59076 +2.58248 3.11741 +7.76513 8.13505 +4.93613 6.51523 +0.565355 1.70512 +2.12366 3.0319 +5.32422 6.84146 +-0.135396 1.08591 +3.7901 4.86303 +4.49677 5.41847 +0.615748 0.834712 +0.64784 1.81859 +6.65505 7.13894 +-1.12744 1.61017 +0.550814 1.24316 +6.66639 6.89866 +6.19271 8.17468 +3.09382 3.78684 +4.41221 4.95889 +7.96091 8.48824 +8.32129 10.2917 +2.13168 2.19835 +1.4635 2.38989 +5.78102 6.42215 +1.70153 3.20616 +5.35068 5.71016 +4.27702 4.37203 +5.13888 6.04764 +4.79644 5.37927 +6.75314 7.66368 +6.04484 6.84064 +4.34947 4.45643 +9.08755 10.396 +0.88804 2.17441 +6.86788 7.88301 +7.94296 8.61664 +8.02387 8.79591 +1.79024 2.40559 +5.50404 6.01044 +7.76772 8.1932 +1.174 1.23693 +6.20571 6.9224 +4.20863 4.48702 +4.16743 4.39075 +-0.11965 0.120778 +7.01234 7.52619 +5.91415 6.46151 +5.28713 5.72354 +6.26981 6.31237 +0.643056 1.43864 +1.62562 1.99875 +0.544992 0.721386 +6.92522 7.09165 +-0.107048 1.12273 +0.644674 0.91244 +8.56904 9.01883 +2.23079 2.56598 +9.79034 10.1123 +8.13788 8.4131 +1.86753 1.95236 +2.97577 3.33272 +8.57454 10.0193 +1.20043 1.53408 +3.43515 3.86571 +5.79075 6.41293 +1.71558 2.52845 +2.39907 3.46652 +9.08289 9.91182 +0.859644 1.07475 +5.30144 5.42157 +-0.441497 0.890794 +3.55044 4.14918 +-0.340115 1.19239 +6.5534 6.76908 +0.836514 2.09196 +8.15747 8.96484 +4.80087 5.14227 +7.72071 8.88223 +5.11901 5.65559 +4.44996 4.63562 +-0.328404 1.3002 +0.90759 1.34556 +5.94839 6.35058 +1.76504 1.78344 +1.32585 2.08994 +7.18641 8.20945 +0.62657 1.06025 +6.28086 6.40975 +5.05525 5.16143 +5.82694 8.07685 +6.23677 7.55394 +-0.226265 0.661443 +1.42599 2.36325 +9.04445 9.92971 +-0.169286 0.185741 +8.34636 10.9042 +9.52494 10.0475 +8.39989 10.1377 +3.89956 4.70428 +3.98673 4.97185 +5.43008 5.67936 +7.76475 7.98591 +4.46895 4.73188 +0.584662 1.54474 +2.12622 2.79994 +1.40578 2.2461 +1.45171 2.02105 +2.05665 3.04611 +2.29818 2.68118 +1.77344 2.98698 +4.92092 5.55302 +7.18758 8.37525 +8.83407 10.0565 +2.91182 4.71932 +6.47293 6.74664 +2.49238 3.69749 +0.487234 0.541003 +4.703 4.92744 +9.8867 9.94918 +1.7713 1.9792 +5.68316 6.90242 +5.62485 6.70656 +7.24837 9.60197 +7.71147 7.76519 +5.22324 5.30661 +9.11258 9.28071 +8.2827 8.90115 +8.90865 9.42138 +7.47233 8.72308 +4.89712 5.65153 +4.12392 4.20239 +5.65325 6.55887 +8.65945 9.05845 +7.9165 8.36489 +1.4952 2.43991 +5.49665 5.80793 +1.67206 2.55302 +0.943544 1.58521 +0.47 0.860959 +6.47638 7.43101 +4.38434 5.97278 +8.12782 9.10574 +5.78143 6.6539 +9.23616 9.40513 +1.6845 2.00736 +6.56955 7.37847 +7.42993 9.04718 +-0.179632 0.450904 +8.65819 9.07724 +7.86567 8.80824 +1.85428 2.7755 +2.29222 2.65374 +4.03614 4.51729 +6.9326 7.07635 +5.50807 6.498 +6.17637 7.26432 +8.7688 9.16308 +7.65 8.88604 +3.74495 4.29991 +8.5671 10.5661 +7.41964 8.21083 +8.04302 9.78783 +0.269663 0.317601 +8.29804 9.40991 +3.90673 4.22298 +8.82384 10.9441 +7.27081 8.19548 +1.30184 1.98993 +8.13028 8.92385 +7.21224 7.35137 +5.02122 5.69666 +0.817219 0.974073 +-0.128067 0.589359 +2.12137 2.74019 +5.24657 5.44714 +1.55805 3.10332 +9.91031 10.0748 +7.13941 7.9143 +-0.183908 0.934079 +3.987 4.11053 +3.26678 3.67608 +9.75921 10.1121 +0.755391 1.06346 +7.28479 7.49982 +1.37522 3.80623 +0.944351 1.46531 +9.49278 10.2372 +8.28946 8.67597 +9.43537 9.58003 +7.73357 8.756 +2.64043 2.8687 +4.70448 6.99929 +3.82199 3.89343 +3.43825 4.10908 +4.42362 5.69086 +8.08536 8.60142 +8.43208 9.31272 +7.5889 8.39208 +7.90112 7.9734 +6.10381 6.80568 +8.76283 8.80151 +1.46728 2.53288 +1.68884 2.47102 +7.63343 8.29838 +9.18852 9.5558 +0.977174 1.4792 +4.7577 5.74873 +4.66433 6.37375 +-0.0952277 0.378184 +5.30929 6.07469 +4.98811 5.16146 +3.0744 5.59799 +0.944909 1.25222 +1.38561 2.51277 +3.77811 4.23459 +2.11604 3.32458 +0.920929 1.17187 +5.23496 6.34905 +6.9953 7.65745 +4.81803 4.89553 +4.69301 5.36777 +-0.208926 2.6111 +7.97334 9.83269 +-0.396673 0.779988 +5.91367 6.47682 +6.27249 6.83533 +5.58931 6.89679 +2.03394 2.67025 +-0.197752 0.383167 +4.69751 7.695 +4.5989 6.07875 +3.7285 4.27396 +7.9807 8.27693 +-0.00248985 1.30934 +2.68016 3.916 +0.881558 1.14567 +4.77066 5.05302 +0.552268 0.919467 +2.46862 2.65199 +1.4009 2.51701 +-0.171185 1.28252 +9.27842 9.90243 +3.51778 3.57728 +6.10071 6.92163 +9.05387 10.0894 +5.52995 5.89082 +8.40216 9.0272 +9.02911 10.1602 +4.85818 7.38829 +1.6762 2.32334 +6.45416 8.62337 +5.44592 6.0245 +3.45876 3.94274 +9.07144 9.16725 +6.51885 7.6363 +7.92593 9.01986 +0.270702 1.57395 +6.11245 6.70173 +1.37658 2.19068 +2.42668 3.43827 +7.98226 8.43306 +3.72269 4.74654 +8.16252 8.58873 +8.81456 9.5363 +-0.338386 0.864811 +1.90693 2.25796 +3.5305 4.17475 +6.07997 7.67393 +0.53347 1.68815 +7.31182 8.44458 +7.77462 8.33613 +3.79975 4.15552 +9.08822 9.9771 +-0.101698 1.05442 +8.44869 9.95724 +-0.0318759 0.532673 +8.09238 9.51356 +5.51514 6.60799 +8.66528 10.3297 +8.25556 9.97893 +-0.220428 0.247563 +0.00453913 0.540444 +1.53599 1.61735 +3.77213 5.06896 +2.65332 2.75864 +6.05811 6.43112 +0.302534 0.803651 +0.393766 1.11611 +9.31035 9.62387 +0.568281 1.7765 +-0.721118 1.27387 +1.83573 2.62578 +1.39953 1.91158 +6.51883 8.52813 +2.60154 2.95054 +6.58322 9.37818 +5.61178 5.67661 +9.56511 10.2767 +9.09174 10.0697 +2.55846 3.39943 +8.38146 9.06138 +7.97019 8.18074 +6.1426 6.42787 +1.15876 1.55463 +2.93483 2.96376 +7.23883 7.29158 +9.64606 10.0674 +4.89825 6.70366 +7.35635 7.96328 +2.2702 2.36797 +-0.0464389 0.395244 +1.14883 2.10411 +4.7309 5.10593 +6.07946 7.37741 +5.50202 6.28822 +3.66574 3.96271 +1.9944 2.3862 +7.58159 7.59275 +1.98712 3.30587 +2.10317 2.89161 +9.66889 9.97287 +1.57327 2.15421 +8.14125 8.30983 +3.77185 4.12658 +8.51624 9.51485 +9.25211 9.722 +2.06312 3.0453 +9.34954 9.91254 +7.31475 8.89322 +7.85044 9.20242 +0.226243 1.28465 +0.0260868 0.575177 +9.40743 10.1655 +4.04324 5.05341 +1.02626 1.48332 +3.33074 3.72025 +9.2005 9.61387 +6.68317 7.14109 +6.82083 8.6312 +4.34816 4.50329 +-0.48874 0.975608 +4.26651 5.68526 +4.89731 5.57569 +2.68984 3.5661 +0.499714 1.01055 +9.01902 9.36142 +3.22067 4.59054 +0.65132 0.860512 +1.6791 2.36642 +8.28222 8.7579 +2.84349 3.24134 +5.64949 6.09512 +3.44026 4.43245 +2.60889 2.6248 +-0.00849234 0.984046 +7.5745 8.65675 +2.07464 2.6488 +2.59747 2.65772 +6.36828 7.42208 +3.83342 4.50127 +5.41167 5.7011 +6.53606 7.53796 +8.21975 9.56176 +1.90113 3.08684 +7.74402 7.82057 +4.26515 5.11327 +5.42743 5.59215 +8.69709 10.0912 +2.87019 3.94798 +9.27013 9.54627 +9.30568 10.2136 +9.02985 9.62917 +3.7589 4.59642 +6.59359 6.86939 +3.26574 4.83488 +5.14545 7.70086 +7.43163 8.05103 +5.72972 5.74457 +0.490113 1.31151 +7.018 7.42627 +6.22976 6.27589 +9.07732 9.30419 +4.3917 4.42663 +8.50298 10.3728 +6.18671 7.53619 +3.51053 4.097 +2.17172 3.56595 +6.08046 6.23691 +9.07361 10.9129 +3.95757 4.11333 +-0.136516 0.78995 +1.34923 3.47002 +0.0562579 0.686502 +9.10943 10.2731 +5.80174 6.16971 +7.86011 7.87649 +5.34384 5.51645 +6.32167 6.76387 +7.70566 8.28038 +-0.319903 0.867682 +-0.372564 0.570014 +8.83696 10.8439 +7.78947 9.38211 +9.25815 10.1092 +5.59721 5.67148 +0.234719 2.42489 +1.06314 2.87416 +1.75391 2.69799 +5.4536 6.66068 +1.35696 1.87102 +2.17418 3.1459 +7.61817 7.98287 +2.92194 3.18393 +7.68243 7.83261 +9.33163 10.5531 +1.14227 2.50228 +5.47911 5.70857 +9.88123 10.0758 +8.81249 8.83145 +6.02747 6.43183 +4.81158 5.79178 +6.65666 7.5047 +4.89085 5.56569 +0.935564 1.71547 +-0.0452879 1.16222 +4.03524 4.6206 +5.88518 6.02658 +2.06227 2.9581 +0.207246 2.2404 +2.81757 3.70318 +0.704257 1.98403 +2.38486 3.30039 +3.57073 4.78358 +1.53721 3.00546 +8.37852 8.39527 +1.54619 1.59789 +1.00447 1.40778 +5.31977 6.43861 +3.82175 3.83209 +3.37738 4.44002 +5.46644 5.97254 +3.88191 5.00688 +4.88046 5.39031 +4.15092 4.93679 +1.75182 2.07399 +1.16434 1.76541 +3.37032 4.29676 +3.1685 3.98533 +1.28787 1.59775 +5.86338 6.17993 +3.8645 4.25757 +1.83947 2.48092 +0.184795 0.586724 +3.13752 3.76447 +2.14264 3.03248 +5.78182 5.9029 +2.47969 3.8088 +2.59206 3.08362 +-0.354871 1.03627 +7.94041 8.05947 +9.48014 9.93817 +0.992727 1.48877 +6.1525 7.51387 +5.00071 6.15665 +7.42074 8.27606 +9.6539 9.83042 +1.08984 1.46387 +5.46282 6.95907 +4.74506 5.13968 +0.357565 1.91464 +9.07652 9.65474 +0.201095 0.646211 +7.04306 7.69131 +1.17728 1.2237 +5.92183 6.29165 +-0.41356 0.491524 +8.38339 10.4509 +8.08648 8.11344 +3.32474 3.39522 +5.762 5.83732 +2.26778 2.55548 +4.86127 5.92868 +3.75949 5.16608 +4.83431 5.88632 +2.65122 3.31344 +9.30295 9.38948 +6.03391 6.32749 +5.12035 5.59414 +5.68785 5.979 +7.89553 9.15202 +2.54445 2.74715 +2.36337 2.49709 +4.71661 6.12198 +3.72447 4.68735 +1.0541 1.53187 +3.45178 4.80929 +7.90773 8.26212 +8.1816 9.18627 +0.322569 0.871041 +7.24823 7.32699 +1.7003 2.78087 +9.70927 10.2515 +3.75922 4.01081 +1.06949 1.40253 +1.21774 1.4734 +6.02123 6.32973 +2.76396 3.09484 +2.80358 3.00026 +5.25666 6.31369 +4.71714 5.30669 +4.37906 4.50557 +7.40824 7.44969 +7.89081 9.18263 +8.8136 10.3074 +9.1757 9.37261 +7.1938 8.51137 +0.580081 2.32678 +2.02497 2.95434 +6.01446 6.78851 +8.54365 9.21454 +3.03567 3.27089 +0.650657 1.5716 +5.05518 6.36521 +1.64301 2.76399 +4.15989 4.34183 +3.72791 3.98156 +3.91372 4.06182 +3.04507 3.88871 +3.82596 4.25694 +3.36492 5.00402 +6.50019 8.17974 +3.54621 3.81009 +0.546921 2.09811 +5.1789 5.9826 +4.98983 6.31221 +2.47557 2.63878 +4.64568 4.81101 +9.1462 9.21888 +7.37417 7.5276 +2.21604 2.50113 +8.29804 10.2722 +5.1282 6.06353 +8.58281 10.1589 +6.47084 7.04085 +6.27806 6.72674 +7.11554 7.85687 +6.01085 6.02773 +5.46694 7.52872 +9.51078 9.85387 +3.36627 4.06552 +2.96126 5.12635 +3.09314 3.40691 +5.05456 6.62548 +7.56469 8.97053 +1.33727 2.87482 +5.6572 6.28169 +0.120924 0.296475 +7.09139 7.41322 +2.10076 3.28507 +8.74998 10.1094 +7.45072 9.50796 +7.75294 8.59218 +0.740374 2.44897 +7.63001 8.91562 +4.30743 4.81716 +6.40813 7.29159 +6.30213 7.35987 +6.44392 7.32584 +8.41155 9.4466 +-0.377892 0.689618 +5.88857 6.70983 +6.67779 7.70668 +4.831 5.17464 +2.62342 3.82764 +8.57453 9.29283 +7.32648 7.96725 +9.32937 9.9726 +7.30774 7.65754 +3.97456 4.59876 +5.73092 7.20962 +1.958 2.10551 +3.2115 3.81482 +5.76497 7.42425 +2.77219 3.29692 +4.95297 5.14843 +5.96367 6.3619 +2.49872 4.61736 +8.21817 8.23425 +2.13615 2.61877 +7.84121 9.55011 +8.63416 10.2773 +5.61084 6.32053 +4.86002 5.79944 +9.07858 10.688 +5.95829 6.42504 +3.3289 4.17849 +3.27989 4.91625 +8.28046 9.23021 +2.18691 2.6072 +1.3962 1.75013 +2.13627 3.73117 +2.11128 2.57303 +7.22357 7.50136 +7.43862 8.03136 +2.80578 3.02886 +0.176906 0.761142 +5.99314 6.6075 +1.90398 3.3925 +5.48264 6.73579 +7.18447 7.49811 +3.24434 5.05219 +5.53263 6.04178 +1.71172 2.45682 +0.297266 0.481632 +2.62582 3.36142 +0.243865 1.49321 +8.86142 10.169 +3.93193 4.39404 +4.98182 5.15675 +7.99209 9.73159 +8.18033 9.45596 +4.25235 4.41546 +1.59603 2.15581 +6.47724 8.69649 +5.24138 7.93131 +3.4267 3.49003 +0.0439912 0.316407 +1.99983 3.87206 +-0.103124 0.568771 +4.62451 4.80117 +2.89065 4.16315 +5.82817 7.43232 +6.89255 7.82189 +5.71037 6.81241 +4.34551 5.24905 +7.33931 7.3741 +-0.855192 1.27129 +8.94842 9.10813 +9.19877 9.68412 +6.42658 7.77968 +-0.0669636 0.430107 +6.40366 7.40701 +8.91175 9.24059 +3.21388 4.21676 +3.38557 3.79509 +4.24411 4.97032 +7.259 7.34896 +2.55995 3.18361 +8.77438 10.5503 +8.18685 9.79378 +2.78397 4.4563 +8.6891 9.38337 +6.51749 7.59374 +2.52346 3.46101 +8.40526 9.35647 +5.26942 6.33572 +4.15094 5.00668 +0.471666 1.53842 +7.63441 7.96745 +2.39974 3.7814 +2.71989 3.02994 +8.12085 8.33493 +6.19474 6.84381 +6.6133 8.31417 +5.1758 6.94983 +8.66241 8.79095 +6.10878 8.22083 +8.81883 9.08031 +8.28969 8.45176 +7.19851 8.37836 +1.5722 1.6836 +4.57814 6.95063 +7.66128 8.10631 +0.742483 3.08515 +1.15026 1.98074 +3.90133 4.12003 +7.61145 7.73433 +8.32187 10.2933 +0.407205 1.08089 +1.26545 2.60796 +2.70646 3.92753 +-0.196551 1.83536 +-0.413063 1.23838 +0.264484 0.556192 +6.30158 6.96097 +-0.66246 0.809062 +9.34243 10.3521 +8.70093 8.79679 +0.745195 1.92911 +9.12892 9.68193 +7.98533 8.30538 +6.23671 7.04296 +6.5603 6.95483 +7.08133 7.10563 +2.15769 2.41541 +8.24752 8.73978 +5.27693 5.61904 +0.317419 1.48404 +3.48029 5.46979 +7.38901 8.56554 +1.06587 1.62384 +5.54926 6.04924 +4.46577 6.48749 +5.349 6.15584 +8.04249 8.17359 +3.37651 3.56179 +3.64706 5.57403 +4.49844 5.26404 +3.93361 4.92128 +5.82184 6.29881 +0.984273 1.70318 +1.12773 1.80726 +3.11675 3.17451 +5.07913 5.46291 +0.615591 1.81465 +1.08948 2.77847 +7.97412 8.07365 +5.05207 5.82497 +0.0407709 0.558817 +6.11142 6.48205 +3.4461 3.57315 +8.6547 8.80553 +8.18965 9.64194 +5.55564 7.9703 +4.01776 4.16989 +2.4668 2.82018 +0.911925 2.56662 +4.68814 5.03614 +7.4899 8.49036 +8.40912 9.14001 +2.32725 3.16377 +0.0723972 1.42049 +6.6441 6.6953 +3.65586 4.38222 +6.35844 6.57833 +4.44435 5.73077 +1.81779 2.57257 +4.17692 4.59722 +8.54682 9.38058 +1.61135 1.81629 +3.91926 5.00536 +9.78302 9.85143 +1.25632 3.10345 +5.53191 6.08174 +-0.231868 0.676811 +1.03054 2.58105 +0.0402172 0.690608 +0.974571 1.25234 +5.22227 5.92302 +8.05843 10.1439 +8.48938 8.50755 +0.0965782 1.24008 +6.53821 7.47765 +0.189991 0.475204 +8.48963 8.54995 +9.68363 10.0534 +1.49381 2.71302 +6.75552 7.41283 +7.91075 9.15302 +0.520922 1.40928 +1.17957 2.11221 +4.00122 4.40686 +7.32467 7.9273 +6.39126 7.90248 +6.50534 8.19308 +7.19888 7.22234 +-0.136797 0.731889 +0.870318 1.25614 +2.07126 2.28297 +6.10995 7.60408 +3.02174 3.90102 +-0.657541 1.57517 +0.993121 2.66255 +7.27232 7.50832 +2.16079 3.75428 +9.27397 9.75098 +8.36865 8.5545 +4.56641 4.97607 +3.60746 4.34616 +6.31304 7.70611 +2.91442 3.7602 +4.85814 6.70407 +4.45876 5.67661 +8.06749 8.82229 +2.02826 3.59873 +1.92922 2.50088 +2.63867 3.48117 +2.17665 2.54826 +8.62674 9.10675 +0.96648 1.47671 +8.86336 9.53978 +5.52747 5.80829 +0.77099 3.06106 +2.2307 2.53877 +6.29165 6.63018 +4.44717 5.04651 +3.80894 4.63054 +7.47519 7.87072 +0.933668 1.9949 +-0.712945 1.21558 +7.30206 8.38376 +5.80281 7.00022 +7.96578 8.6558 +0.24063 0.706466 +4.41893 4.58472 +4.0132 4.92768 +5.29626 6.09397 +3.43602 4.00728 +0.780945 1.66499 +8.83861 9.15168 +9.06411 9.75544 +3.45618 3.62529 +9.51413 10.0148 +0.842106 1.75695 +1.06485 1.44192 +6.89987 8.05314 +7.89154 8.73313 +8.71675 9.79526 +2.40574 2.58062 +8.55952 8.78132 +5.61716 6.06282 +3.71059 3.77929 +2.50187 2.99137 +6.92852 7.23184 +7.00442 7.93869 +8.82232 8.8756 +4.10389 4.53702 +7.6907 7.77577 +9.31554 10.2674 +8.51082 8.70339 +4.83332 6.70311 +4.6904 5.42892 +4.71407 5.67695 +4.12047 4.44089 +7.51845 8.26858 +1.31781 1.9397 +6.26854 8.02093 +6.92072 7.77774 +0.438156 2.18909 +0.898035 1.72074 +3.81121 3.8643 +1.01676 1.34308 +9.28445 9.42801 +2.43133 4.43516 +4.33664 5.9904 +2.19178 2.37244 +1.5457 1.79785 +2.23781 2.6481 +6.8365 6.87073 +0.82568 2.74775 +9.59404 9.89262 +8.48394 9.15107 +6.16085 6.42224 +3.5667 5.97689 +4.16931 7.41638 +6.95636 7.0982 +6.87987 7.09233 +3.12619 3.14821 +7.76636 7.98459 +4.60371 5.59136 +3.92189 4.88302 +6.90694 8.19858 +3.85132 5.19015 +8.05045 8.32483 +4.8338 6.05032 +1.93576 3.18873 +2.4182 3.55039 +5.56905 5.8172 +4.18436 6.01283 +3.04944 3.85936 +7.83585 8.95233 +1.76281 3.0558 +3.44143 3.6317 +8.69887 9.40371 +5.67867 5.73236 +0.859809 1.76578 +6.92284 7.13601 +8.27495 9.13414 +5.44385 6.42599 +-0.941603 1.8215 +7.88161 8.79447 +0.965018 1.17732 +5.56442 5.79546 +8.79032 10.9909 +5.28632 5.79175 +4.80998 6.07002 +8.4021 9.81107 +3.16415 5.08682 +-0.212163 1.2052 +5.683 5.83625 +0.738527 1.31842 +2.03835 2.52756 +7.4543 8.91243 +-0.568869 1.44659 +3.58855 4.42371 +6.33058 7.18779 +-0.645579 1.94313 +2.18149 2.24157 +3.80281 4.67323 +5.14628 5.97452 +2.55239 3.45685 +3.56586 6.23355 +6.74752 7.19693 +8.99006 10.5533 +0.259833 0.99882 +8.9005 9.75401 +7.28058 8.41075 +4.57803 5.70104 +9.82823 9.90251 +6.94375 7.42033 +7.8878 8.81951 +5.01137 5.52693 +2.25503 2.28817 +6.65772 7.11107 +0.647512 2.04416 +4.34796 4.5706 +4.5395 4.91529 +2.65423 3.49531 +7.97384 8.78377 +5.53873 5.76806 +9.78641 10.1351 +6.01664 6.44407 +3.47406 3.75187 +4.59421 4.81804 +1.20641 2.00488 +2.48904 2.80768 +5.77372 6.10692 +2.49363 3.24499 +1.8483 2.62965 +2.28556 3.22209 +3.17819 4.51426 +3.5548 4.23276 +3.25239 3.57895 +0.613317 2.44862 +3.82234 4.78976 +4.72809 6.46528 +9.54107 10.4426 +9.20052 10.1921 +8.24152 9.89817 +5.17594 6.19462 +7.83364 8.17082 +5.67992 6.36464 +8.9943 10.1426 +2.20598 3.0081 +3.38199 5.16464 +0.599928 1.35804 +0.841211 1.60761 +5.29338 5.89919 +1.11061 2.29219 +3.41512 3.95907 +7.9375 10.0203 +8.73852 9.66917 +9.95092 10.0162 +4.02544 4.30219 +4.1461 5.37827 +1.08089 1.59196 +7.87513 8.21121 +7.85673 8.0973 +0.96237 1.56519 +2.45532 2.61678 +6.1829 6.23637 +0.135135 0.613518 +3.18324 3.78587 +5.64796 7.20194 +0.861169 1.71661 +9.66005 10.1169 +0.880774 1.12452 +1.29389 1.57658 +5.60299 5.89759 +5.53642 7.07306 +0.540268 1.31836 +6.60244 7.98105 +4.21877 4.57159 +3.15367 4.75356 +7.81055 8.40378 +8.00942 8.10861 +5.78071 6.35646 +3.15993 4.99293 +2.36526 2.78444 +8.1361 8.76071 +1.40066 2.96474 +-0.17906 1.05877 +5.94933 6.6808 +3.43187 4.05553 +3.02912 4.68942 +2.1506 2.29413 +2.3516 2.38305 +2.87496 3.0851 +6.71294 8.99858 +3.76177 5.52545 +1.58417 2.57063 +2.74646 4.27445 +5.48407 6.60696 +-0.133321 0.716559 +3.53886 3.58196 +2.28729 2.40198 +-0.209646 1.21263 +6.62795 7.32318 +0.714781 0.880466 +2.96831 4.05932 +6.00935 6.38896 +5.39798 6.11983 +8.47679 9.70468 +1.4339 1.74845 +2.35223 4.75732 +4.31357 4.9642 +5.26493 7.70538 +7.91888 8.94851 +6.51439 7.69469 +7.69015 7.85411 +3.94274 5.15373 +6.25852 7.32402 +2.73567 3.43236 +7.09564 8.42242 +2.55932 4.29066 +1.79489 1.84559 +8.86427 9.35669 +7.23854 8.27062 +7.8488 7.98307 +0.710888 2.22424 +0.0413624 1.10578 +1.54302 1.97696 +1.64924 3.01081 +8.15535 10.2397 +0.305662 1.63835 +8.20375 9.03123 +1.66617 2.08748 +4.01691 4.88505 +3.32856 4.10709 +5.15342 5.44616 +5.80751 7.38872 +0.485341 1.07648 +3.98267 4.20211 +6.96867 9.37655 +9.48055 9.85181 +8.39277 9.50424 +2.47589 2.79873 +3.48046 5.37417 +4.98279 6.01686 +1.29845 2.31199 +-0.204348 2.50289 +0.23488 1.00378 +6.26899 7.14823 +4.62903 5.49672 +0.199052 0.822066 +6.97297 7.69083 +4.23783 4.65198 +0.530497 0.839143 +6.61355 8.22831 +-0.0103941 2.16307 +0.148601 1.20044 +0.314438 0.67632 +3.43415 4.06208 +1.95498 3.25728 +4.23094 4.84942 +9.5493 10.0057 +2.64964 3.52073 +8.21388 9.1622 +-0.112496 0.47622 +7.97551 8.19546 +2.16155 2.6289 +0.38442 1.46032 +3.85675 3.91557 +1.00605 1.42016 +2.4853 3.53086 +-0.0765625 0.504366 +8.11302 8.46334 +7.18135 7.80218 +6.46466 8.12336 +3.75968 5.33954 +9.08789 9.73677 +6.47459 7.49454 +0.90148 1.47681 +3.44733 3.54163 +7.32968 7.909 +1.30055 2.75407 +8.78735 8.92461 +8.21764 8.59414 +0.888162 1.08404 +5.65195 6.26421 +6.23881 7.33284 +8.69731 9.88088 +3.55695 5.36909 +6.49248 7.02755 +2.31407 3.01952 +5.7803 6.1286 +6.30415 8.01577 +7.73864 8.27496 +0.741078 1.69184 +4.94671 5.68254 +3.28226 5.02894 +1.97446 2.60413 +3.26555 5.54754 +2.56179 3.41897 +3.20058 3.32486 +6.96915 7.69055 +6.89302 7.39856 +1.9659 2.61404 +1.31107 1.36867 +6.23573 6.33677 +0.17616 0.517772 +8.55548 8.79155 +9.61632 10.2651 +2.20331 2.34017 +6.93195 7.42939 +1.25398 2.23119 +1.06577 1.41048 +5.99156 7.09818 +3.34821 4.1271 +4.61618 6.90956 +2.30853 3.52875 +0.0518063 0.113732 +5.38513 6.09734 +1.73468 2.64838 +7.24679 7.63999 +4.18175 5.06728 +7.09602 7.13414 +9.06191 9.11605 +6.2309 7.67675 +3.96576 4.63237 +-0.552645 1.37948 +5.76964 6.89903 +4.9272 7.5832 +4.59003 6.49719 +4.12281 6.9664 +5.12256 5.58387 +1.78859 2.76954 +4.36808 5.05712 +8.41165 9.54483 +8.11513 8.43405 +8.42016 9.52715 +8.50598 9.34564 +1.80028 1.83558 +8.08502 8.43726 +6.96667 8.12021 +5.4726 6.26772 +7.1141 9.29989 +7.83324 8.1744 +8.74368 9.16491 +2.5515 3.01706 +5.92375 6.44495 +7.45628 8.41582 +9.04829 9.71503 +4.58856 4.75356 +7.26064 7.32462 +1.81695 2.40529 +6.88067 7.95052 +1.91408 2.02663 +1.32005 1.45025 +7.47733 8.42004 +4.99403 5.85297 +0.95744 2.28875 +-0.089503 0.536888 +1.09978 2.48865 +1.9959 3.098 +0.376116 0.448329 +3.98908 6.49684 +9.10178 9.51012 +5.41394 7.31529 +6.60708 7.59071 +4.38466 5.76203 +1.84355 2.60304 +0.658705 0.933522 +6.98725 7.05509 +5.60064 6.98804 +1.0603 1.1521 +4.06192 4.46156 +0.351018 1.00807 +9.17113 10.2192 +6.71641 6.74659 +8.85392 10.5272 +4.50816 5.22908 +1.13934 2.43196 +3.3746 3.57576 +7.62137 9.3234 +6.93482 7.16058 +5.66506 6.44324 +5.13364 5.86068 +1.97257 2.03803 +2.69746 2.73067 +0.989591 1.38342 +4.18819 4.69676 +4.31608 5.12265 +2.79556 4.87763 +3.55387 5.34421 +-0.112466 0.585639 +2.43156 2.70221 +5.88314 7.08322 +-0.450332 1.29858 +1.22202 2.46588 +6.74433 7.32925 +5.14596 5.37435 +6.76754 7.41799 +1.48762 2.45958 +4.57241 5.3382 +4.17465 5.02296 +6.48856 7.5576 +0.383566 0.823394 +8.50875 9.08734 +1.79393 2.24548 +5.06812 6.49508 +3.55364 3.61502 +5.58973 6.58885 +0.631097 2.10041 +0.323995 0.941782 +8.8798 10.1036 +6.37114 6.88202 +6.9393 7.83288 +3.09503 3.41759 +3.65269 3.70305 +5.61676 5.8924 +1.90199 2.38446 +4.23683 5.35609 +9.18649 9.88878 +8.28736 8.37734 +3.04805 5.03593 +8.02926 8.38975 +3.58161 4.01331 +3.20923 3.48207 +6.85118 8.78281 +5.06518 7.49843 +1.57456 3.05552 +3.0154 4.23782 +2.83557 3.24854 +1.29358 1.89328 +1.42911 2.72661 +3.17067 3.96651 +0.353554 1.48472 +3.46227 4.25611 +6.17639 7.24657 +5.60878 7.13562 +4.11129 5.52476 +9.17596 9.4123 +3.08339 3.65766 +4.083 4.63013 +0.628465 1.92141 +7.81989 8.39386 +3.35589 3.87531 +5.35974 5.41743 +4.48321 4.64376 +0.888177 1.37343 +8.49061 8.50063 +5.09078 6.01801 +9.65314 9.99342 +1.60502 3.0115 +1.37928 2.77642 +6.60322 8.94046 +6.74573 7.45157 +-0.291156 0.325249 +6.1518 6.66827 +5.38199 6.46959 +3.50128 5.22692 +1.31774 1.70159 +0.550546 1.48845 +7.51187 7.85496 +4.2014 5.23193 +3.88255 3.97209 +2.60555 2.84958 +5.15706 6.00036 +2.99284 3.27867 +0.395077 0.768383 +3.30863 3.60594 +0.0325231 0.379208 +6.55183 7.33346 +1.44554 2.95846 +0.245421 1.29751 +3.98808 5.41226 +5.90242 6.266 +4.11097 5.02597 +0.134753 0.929866 +0.609287 1.16311 +0.231832 1.06825 +6.22093 7.05584 +9.18429 9.80637 +0.544139 1.30185 +1.69143 2.90306 +6.75109 8.67893 +5.49641 6.76104 +8.91712 10.0271 +7.09126 8.12404 +8.82958 10.2847 +0.569249 0.69421 +3.59288 5.8053 +9.25068 9.4226 +8.51607 9.26259 +5.00906 5.17068 +1.83467 2.99102 +7.32006 7.64842 +0.405532 0.603773 +6.41882 6.60495 +0.721592 1.44375 +2.78393 4.46732 +7.14806 7.16117 +5.12868 5.27918 +2.74138 3.1737 +2.95394 4.26547 +7.82827 8.21028 +9.06982 10.7279 +0.108376 0.290131 +6.34574 6.97141 +4.39022 5.50801 +7.98339 8.79674 +3.80026 4.71831 +5.43594 5.66916 +1.6743 2.61476 +4.29763 5.47402 +7.95714 8.69311 +3.4152 3.7387 +8.01715 8.8941 +6.53723 7.44437 +-0.0222108 1.04503 +4.96242 6.01648 +1.70885 1.75511 +7.62434 8.53526 +6.82863 7.39782 +8.19967 9.22283 +1.99719 2.11323 +-0.0124079 0.240201 +4.48577 4.87935 +2.586 4.41666 +6.37848 6.67092 +4.39606 5.67983 +9.39761 10.1095 +7.10866 7.15796 +3.91993 4.52129 +5.10552 5.36997 +7.08963 8.32694 +9.12669 9.58509 +9.26894 10.1974 +0.737413 1.26523 +2.77833 5.28516 +3.19039 4.36857 +4.32954 5.45614 +4.98069 5.49295 +7.54745 8.76142 +5.70425 7.05749 +-0.250513 0.36578 +4.76997 5.89607 +2.03075 2.32111 +6.54141 6.55896 +4.19799 4.45091 +8.7796 9.11915 +5.75014 6.05646 +5.36885 5.42775 +-0.00433056 0.865304 +3.65169 5.4751 +0.23625 0.872926 +0.0386337 0.792214 +4.40245 4.56789 +6.44567 7.42162 +5.51394 5.98005 +3.50146 3.83147 +8.47573 9.85647 +7.91378 8.47044 +9.44297 9.90241 +5.962 6.68782 +4.49034 4.86927 +2.17774 3.47061 +8.80614 9.26595 +7.92096 8.13838 +7.80209 7.93317 +7.78915 8.29735 +6.98111 7.162 +0.491059 1.14901 +8.97965 9.38792 +3.30207 3.53207 +3.17127 4.43581 +3.97564 4.43746 +6.79008 7.17877 +5.61669 7.51263 +4.0853 5.38748 +4.42181 6.32041 +8.08599 8.9095 +2.46938 2.55499 +1.20692 2.06351 +1.98995 2.35216 +8.17116 9.17158 +7.53414 8.37086 +3.7744 4.46197 +3.29464 4.38 +7.33246 7.81959 +4.89572 6.2831 +-0.152496 1.56427 +0.636242 0.938556 +5.62066 6.06096 +9.42994 10.473 +8.95446 9.46311 +0.277891 2.80311 +6.92968 7.29845 +2.75677 3.02975 +2.2859 2.51308 +2.96683 3.03857 +6.44584 6.49518 +8.33607 8.60407 +7.20303 7.7616 +7.07205 7.46849 +2.35677 2.7904 +5.86404 6.12906 +2.42371 4.62735 +3.27237 4.11016 +0.0668578 0.644021 +6.77371 7.45187 +3.66596 5.21874 +0.718034 0.755944 +6.06162 7.05 +6.91473 7.09753 +5.0749 6.08914 +0.759874 1.11978 +8.54591 9.64997 +3.97266 4.70679 +1.51133 3.17164 +7.21772 7.69877 +8.00719 8.37052 +0.284003 0.38001 +4.08842 4.16227 +5.04461 5.79973 +4.60604 5.31979 +2.2461 2.28157 +6.25631 7.69766 +9.12404 9.67586 +7.73134 8.98923 +1.0513 1.46408 +9.17225 9.42567 +3.66795 4.29168 +8.84403 9.28497 +9.93613 9.94729 +3.16615 5.09374 +-0.149675 1.43397 +2.30855 2.48392 +0.843172 0.951801 +8.32945 8.8506 +8.97012 9.94697 +2.8559 2.92359 +-0.321715 0.89173 +7.48565 7.71775 +1.44301 1.47795 +6.6649 6.76187 +9.10721 9.93599 +1.82207 3.03935 +3.61893 4.5306 +2.53746 3.81243 +0.424528 1.29026 +9.51874 9.68841 +7.94954 8.14396 +7.49282 7.52655 +3.04604 3.69656 +9.45461 9.47212 +7.69209 8.16412 +0.607135 1.16564 +0.150291 0.450632 +3.28914 4.01085 +5.45597 6.02921 +8.16157 8.36605 +9.76573 10.2325 +0.151994 1.07074 +1.3748 1.68548 +2.29854 2.63593 +7.92162 8.68895 +1.28795 1.61949 +7.85469 8.26683 +4.32268 6.33174 +6.13964 6.3596 +1.25714 1.88002 +2.05006 2.28294 +8.31864 8.34151 +9.0613 10.0715 +-0.041568 0.25139 +6.79984 6.81686 +5.10674 5.70583 +5.92937 7.01652 +7.57649 8.05834 +0.937157 2.25362 +7.48567 7.59746 +2.33403 2.88942 +7.3805 7.73421 +5.586 5.75327 +0.828854 2.12988 +8.22741 8.59954 +9.69214 10.1207 +6.55359 7.08114 +1.85342 2.634 +6.08756 7.28893 +6.34993 6.93474 +8.93548 10.1463 +5.49445 5.8338 +1.47951 2.14646 +2.62089 2.75888 +2.35352 3.10539 +4.98774 5.28931 +4.92239 5.40697 +7.52674 8.78948 +4.52451 4.83819 +5.45854 5.75838 +5.51553 6.3901 +4.82905 6.44407 +6.20655 6.4483 +5.68116 7.06109 +7.97301 9.15827 +8.8854 9.91623 +9.60198 10.2449 +1.93322 2.67684 +0.441852 1.87646 +5.19981 5.71385 +2.54799 2.5809 +4.34591 5.02655 +7.54678 8.75202 +6.1496 7.19033 +1.13658 1.30756 +1.38724 2.08252 +2.13624 2.30419 +8.49196 9.41369 +-0.21387 0.685093 +2.47875 4.19982 +3.69093 4.00543 +5.70643 6.50331 +7.07443 8.83588 +6.85756 7.68937 +1.69241 1.83242 +0.140565 0.502156 +2.15007 3.23784 +4.97403 5.69757 +5.08315 6.25554 +3.45026 4.01942 +3.37482 4.73009 +7.4154 8.34013 +6.95399 7.59768 +8.07995 9.86199 +8.43993 8.88645 +7.66844 8.12742 +-0.0200687 0.435846 +4.47984 5.9416 +7.66804 10.0801 +4.14578 5.98717 +0.256533 0.89254 +6.43216 7.4474 +3.60295 4.79419 +3.90129 4.29812 +5.30606 5.58674 +9.11552 9.79229 +5.60702 5.85299 +2.39514 2.64865 +4.51164 4.60227 +6.31154 6.77441 +3.12239 3.13505 +7.50962 7.89478 +3.90928 4.88831 +9.64625 10.0629 +5.9465 6.02877 +2.08554 2.10477 +0.087547 0.34748 +2.34295 2.53703 +6.846 7.3043 +1.37869 2.11446 +4.03371 4.26278 +5.38623 6.40917 +4.75848 6.25417 +6.03478 6.15991 +-0.585543 1.2091 +2.52824 3.57712 +3.95687 5.40914 +4.42955 4.71909 +2.9328 3.98848 +5.40471 6.97056 +7.64789 9.30279 +6.19595 7.07492 +8.27328 9.41596 +8.29855 9.13665 +2.54035 3.10488 +8.25038 8.87903 +5.66599 5.88701 +7.40067 8.71195 +6.63762 6.67694 +-0.0163105 1.72666 +4.77743 6.60356 +0.567991 1.14977 +5.96841 6.42987 +3.02266 4.58424 +6.72121 7.35492 +7.51477 8.65223 +8.55055 8.81014 +5.59759 5.82816 +0.218944 1.82542 +1.03197 2.36652 +7.84302 9.1594 +2.11542 4.7332 +6.37618 6.92981 +1.34963 1.59353 +0.516281 1.08859 +-0.0151152 0.0624718 +6.45603 7.23063 +4.76865 5.46588 +7.5893 8.42021 +1.04534 1.99034 +2.62638 3.04997 +5.00254 5.98512 +7.7588 9.44547 +6.82186 7.34321 +8.7629 9.82272 +-0.309554 0.54858 +4.19843 4.92981 +5.62327 6.80846 +6.40599 7.6073 +6.1547 6.53898 +3.93941 4.44985 +3.28342 3.72778 +7.17256 7.23035 +2.31269 3.05437 +7.99132 8.20926 +7.19338 8.08381 +7.29139 7.96441 +4.25818 4.4208 +0.802894 0.81938 +0.990115 1.04066 +0.443898 0.490936 +3.44459 3.95977 +9.07812 10.3145 +7.86709 8.26338 +-0.230114 0.390748 +7.50905 8.49199 +-0.715424 1.97535 +2.92248 3.12903 +5.44209 6.62431 +0.991914 1.99037 +5.92275 6.7724 +9.10818 9.2797 +4.46434 4.83462 +4.21122 5.48353 +1.8721 3.40764 +7.04713 7.60526 +3.76581 4.76317 +7.00667 7.36475 +6.87244 7.39431 +7.6349 8.46695 +-0.0728922 0.351194 +5.02925 5.6834 +1.45779 2.83702 +0.339175 1.46574 +6.40414 6.9165 +6.30401 6.91007 +5.6392 5.78172 +5.63288 6.44639 +7.45285 8.89031 +4.09741 4.57929 +8.76728 9.06448 +1.62324 1.84552 +5.72509 6.54553 +8.65273 10.3652 +7.3362 7.8953 +8.96224 10.3113 +0.217316 1.7827 +1.28523 2.90127 +8.78746 9.11602 +8.6075 9.9606 +-0.647788 0.779976 +4.9702 5.47602 +4.15553 4.57497 +1.08174 2.80993 +4.01011 4.8145 +6.79603 7.2317 +4.3711 4.43566 +9.65087 9.79922 +8.19407 9.21784 +3.04008 4.94094 +6.0883 7.23919 +6.88708 6.97172 +0.438073 2.00665 +8.53083 8.83004 +4.22258 4.65233 +6.72856 7.61085 +3.17591 3.18978 +5.07955 5.6938 +2.09043 2.55351 +3.28085 4.43556 +7.29225 8.03925 +7.78034 7.82608 +6.59677 7.67719 +5.56032 6.38139 +8.72663 8.82535 +2.96505 3.11983 +1.67192 2.11727 +7.85386 8.49025 +6.30965 6.72799 +8.53082 9.3801 +2.8976 3.39972 +8.90427 9.44661 +-0.0665785 0.410254 +4.58099 5.81135 +1.88015 2.21838 +3.38693 4.10149 +7.46378 7.68246 +8.80985 9.72212 +6.54877 7.25642 +7.18249 7.71509 +7.41978 8.64805 +1.00839 1.78626 +0.39421 0.526751 +7.13516 7.28317 +7.28011 7.80573 +1.90158 2.49032 +1.66181 4.17994 +8.81106 9.21133 +9.46151 10.5007 +0.52585 0.575082 +7.66495 8.64072 +7.72794 8.50991 +4.92409 6.23879 +2.28769 3.21774 +3.62671 4.40932 +5.77688 7.31314 +8.94253 10.0664 +0.416618 0.635111 +1.81377 2.41356 +7.91755 8.83363 +1.62715 1.82626 +8.22065 9.51656 +0.020228 0.724724 +8.81119 9.95764 +8.66509 9.61079 +5.28201 5.32152 +3.95724 4.22138 +7.09339 7.77685 +9.63428 10.1514 +3.69117 3.779 +3.82195 4.76757 +5.75824 6.62265 +3.69984 4.75163 +3.58259 4.8788 +8.32635 8.85873 +5.81959 7.32506 +8.11265 9.14304 +2.20118 3.32511 +7.79582 8.52691 +6.5891 7.13584 +0.385393 0.440656 +1.13414 1.9951 +1.76482 2.69977 +4.76194 5.82757 +6.33633 7.5348 +4.7663 5.65083 +1.98298 3.01285 +0.956973 2.38629 +5.60955 7.65827 +9.11064 9.14351 +2.99933 3.37975 +3.36304 4.57437 +3.89886 4.50733 +8.73838 9.3514 +9.11824 9.66042 +1.47961 2.93909 +0.615297 1.13217 +1.70646 2.32478 +4.35168 4.99362 +0.986601 1.18332 +4.01551 4.92342 +7.68944 9.86838 +4.47611 4.85316 +0.051839 0.86288 +3.59624 5.5628 +7.08729 8.90374 +9.53464 9.9196 +4.69871 5.74189 +8.43146 10.6889 +3.23774 3.77777 +9.35399 9.62741 +1.15259 2.69451 +6.6368 7.33773 +5.26395 6.09857 +6.87415 7.21717 +-0.925645 1.06118 +8.49641 8.67659 +2.31486 3.25354 +2.51057 2.58303 +0.921997 1.48762 +6.29777 6.74738 +4.03945 4.27305 +7.1668 7.3471 +8.44572 8.80343 +7.16937 7.84526 +8.89008 9.4332 +7.01815 7.66319 +-0.420804 0.982878 +1.59755 1.64672 +0.700814 0.72579 +6.3138 7.37379 +8.49276 9.93522 +-0.795656 0.819657 +0.772253 1.05926 +0.917593 1.3917 +3.30076 4.12274 +-0.0237176 0.260552 +6.82385 7.49119 +6.98638 7.52012 +8.24915 9.08397 +4.17486 4.25908 +3.08435 4.64404 +8.17114 9.91412 +8.95923 9.3751 +0.596707 1.89462 +0.982917 1.40236 +6.79552 7.36657 +8.2599 9.69551 +8.85126 10.4342 +7.98967 9.14514 +0.766355 1.63286 +7.76211 7.99247 +5.23163 5.89338 +4.4707 5.50457 +9.257 9.27862 +2.11049 2.59654 +1.65501 2.06238 +0.551768 2.10873 +0.0285582 0.194421 +3.66153 3.85615 +5.07097 5.55806 +5.29145 5.80735 +2.03499 3.0863 +0.73171 2.29494 +2.63023 3.6417 +6.17478 6.25997 +5.79646 6.46363 +9.10633 10.5516 +7.23415 7.84823 +6.49951 7.1506 +9.94647 10.0242 +7.91236 8.09097 +7.8127 7.97662 +3.34238 3.42907 +8.50796 9.8311 +8.75792 8.98028 +9.34125 10.4441 +2.84413 3.71602 +1.49884 2.35652 +7.52317 9.18955 +9.5587 10.3525 +4.85436 6.1181 +5.91369 6.12194 +6.88463 8.34471 +1.51952 2.99156 +4.29022 5.12674 +8.0229 8.41246 +2.44841 3.04779 +7.59975 7.91485 +2.74491 3.62575 +0.0169968 0.240919 +5.85351 6.29039 +4.99825 5.93439 +2.153 3.35304 +1.19032 1.41763 +6.13337 7.80615 +7.05013 7.89364 +8.38056 9.92 +6.35525 6.64521 +3.93342 5.15885 +2.87656 3.47116 +3.56176 4.41159 +6.72084 7.9171 +8.03801 9.12442 +1.03329 2.56255 +7.64542 8.61709 +2.85627 2.89437 +8.8303 9.79838 +1.08032 2.34573 +7.51366 8.39169 +9.09685 10.3677 +6.753 7.41904 +-0.217662 1.42059 +6.72492 7.97553 +7.99325 8.8976 +0.765372 1.10894 +4.37958 6.04671 +8.72027 9.58928 +6.00234 7.29277 +8.43912 9.25356 +2.98816 3.17389 +0.4292 0.552167 +1.69827 2.80318 +5.99904 7.09981 +4.68367 5.87791 +-0.203208 1.09587 +2.65367 3.28472 +3.87051 3.88111 +6.36178 7.18853 +-0.0815935 0.200848 +6.82255 7.18488 +4.99295 5.08405 +2.67155 3.08447 +5.82099 6.77145 +8.76434 9.01086 +5.94982 6.18665 +3.23369 3.71743 +0.934129 2.73456 +1.13233 1.24208 +8.21931 9.03906 +6.25425 6.69972 +0.971299 4.21205 +5.68426 6.45281 +2.85786 3.3955 +8.17715 8.88439 +2.72802 5.01235 +6.12811 6.53711 +5.22878 6.45864 +0.453655 0.922032 +0.466162 0.85262 +2.40916 2.64759 +5.63583 6.37476 +2.18434 3.14105 +0.912811 2.08432 +8.9464 10.1515 +6.77323 7.27133 +0.7167 1.60579 +5.89813 6.32997 +7.66593 8.4611 +6.54145 6.88337 +5.95421 6.21188 +1.10383 1.92226 +5.37168 5.65707 +1.51874 1.66339 +4.60748 5.00384 +8.97354 10.5394 +2.05022 3.20373 +8.17316 8.19283 +2.33792 2.72643 +8.81577 9.3704 +5.95738 6.59855 +5.69025 6.17335 +6.91889 7.88142 +2.17529 2.81528 +6.65046 7.19698 +7.10694 8.78046 +2.09613 2.47484 +1.92423 2.25333 +-0.0906039 0.861376 +6.61481 7.70609 +6.7448 6.84276 +3.43655 5.28405 +6.05404 6.48902 +3.24637 3.36149 +5.69528 5.77157 +5.12352 5.31024 +7.65858 8.80828 +3.69209 4.4851 +0.25765 1.29637 +3.1537 4.13191 +3.12328 3.83765 +2.99798 4.8748 +4.49566 4.67827 +3.50822 4.03987 +8.00334 8.34084 +8.61039 9.00704 +0.0332147 0.166124 +4.55193 5.36546 +4.20308 4.31589 +0.955466 1.20095 +-0.382972 1.47625 +0.803913 1.01916 +3.78333 4.0707 +6.58604 6.70173 +3.02066 3.82562 +1.16515 2.2816 +7.87242 8.24214 +4.057 4.60368 +2.84714 3.59726 +2.77804 3.69136 +-0.139996 1.36416 +4.50647 6.37579 +8.86647 10.1549 +9.24372 10.1442 +0.743107 1.84722 +6.18761 7.65841 +0.214887 0.443938 +8.8513 9.55063 +4.04856 5.79916 +6.69671 7.10025 +6.97477 7.79702 +4.82551 5.10538 +0.821772 2.85828 +9.3086 9.74805 +5.45623 6.66668 +7.64296 8.67451 +7.53052 8.31024 +7.45352 7.5063 +1.31412 1.4979 +7.81176 8.48083 +0.228964 1.73207 +5.52579 5.93103 +6.58544 8.48938 +2.75407 4.18746 +3.21396 3.96298 +1.13806 2.34106 +0.899331 2.87945 +5.69016 6.61624 +2.48172 2.58082 +0.676004 1.43405 +3.41766 3.9503 +0.104554 0.298373 +6.50673 8.21831 +6.00349 6.69385 +9.62453 10.3147 +4.09379 6.02911 +-1.12803 1.68823 +1.83324 3.43133 +8.30576 9.09288 +-0.363911 0.405218 +1.91686 3.34928 +6.98331 7.15885 +-0.31591 0.996789 +0.145813 0.35408 +5.32016 6.13679 +6.99664 7.48644 +-0.140875 0.821045 +9.0119 9.19742 +1.69616 1.72453 +4.38064 5.07542 +6.85898 7.55478 +3.9145 4.27935 +5.77592 6.16806 +1.45345 3.01301 +4.13024 5.59662 +8.14557 8.41669 +4.00075 4.829 +-0.283024 1.59436 +5.92468 7.17507 +6.84458 7.18356 +1.06987 1.42839 +8.618 8.66235 +0.432802 1.59512 +3.78058 4.36051 +1.6113 4.21135 +6.73475 7.01057 +6.74819 6.90498 +6.93146 8.54681 +9.02605 9.91613 +3.888 4.00526 +1.07958 2.27915 +4.78456 5.10764 +3.92952 4.89555 +9.09348 9.30304 +6.73107 7.21036 +7.42366 7.73225 +4.04079 4.72919 +1.21726 1.34683 +8.82903 9.73504 +0.577663 1.00786 +1.56822 2.08675 +4.84315 5.44994 +1.01008 1.16524 +5.99782 6.01535 +0.996739 1.75305 +4.76128 6.39012 +8.93563 9.51972 +-0.0698166 0.453543 +5.9084 6.95139 +0.535401 0.692258 +4.80729 5.48335 +3.42581 4.76147 +3.58715 4.43541 +7.50236 7.71227 +5.19742 5.87901 +1.79752 2.43097 +7.29762 7.57608 +5.65169 6.47762 +6.02249 7.93642 +0.840131 2.81176 +6.2646 6.96911 +7.46014 8.17136 +9.79049 9.94054 +4.61094 5.35819 +7.30902 7.41873 +1.21883 1.84621 +6.41743 6.57736 +1.53114 1.62859 +6.73237 7.47083 +6.05618 7.56831 +7.63374 8.16821 +5.20839 6.05382 +0.619043 1.44065 +2.38657 4.88786 +3.88289 5.18788 +4.42283 4.51106 +9.15575 9.22388 +3.18678 3.72243 +3.20638 3.65935 +4.2219 4.97961 +4.63725 6.90959 +2.57123 2.59101 +4.08581 4.37325 +6.53926 6.80412 +1.77475 3.89149 +9.22854 10.426 +2.67375 4.36551 +3.17194 4.0433 +1.10304 2.0348 +3.67233 4.04957 +3.23526 3.5012 +5.17684 6.47301 +4.4 4.67662 +4.15842 5.85903 +5.88496 6.61616 +7.26489 7.51279 +4.17402 6.6997 +-0.540216 0.54573 +4.36063 4.60442 +9.18146 9.96239 +0.977216 2.42032 +9.09143 9.61178 +5.06686 6.23076 +2.04772 2.92048 +1.4154 2.00707 +7.80442 9.54824 +4.55549 4.7148 +7.56964 8.80172 +1.35347 3.21648 +9.12751 10.0605 +1.81735 2.06061 +5.63798 8.0918 +6.79492 7.98002 +9.23053 10.1299 +1.74639 2.02724 +3.71825 4.09879 +2.4995 3.42493 +4.1255 5.66758 +4.75493 6.99687 +8.22481 8.72036 +6.13689 7.53026 +5.41315 5.66358 +4.21425 5.62743 +6.22936 6.44392 +2.02303 2.96414 +-0.0655462 0.130508 +6.1487 6.70994 +4.36674 6.24985 +7.51129 7.63176 +7.9729 8.98613 +3.92117 4.15596 +4.54398 5.43399 +6.34248 6.92305 +-0.550253 1.16167 +9.15142 9.53717 +8.99354 9.65952 +6.28988 7.90053 +3.36505 3.782 +8.80005 9.70553 +1.99947 2.18573 +1.15023 2.07069 +0.253723 1.32958 +2.0392 2.93977 +2.89024 3.00836 +8.16735 8.2049 +1.49508 2.95258 +6.19092 7.44552 +2.33328 3.06758 +6.44166 7.4649 +7.34749 7.79488 +7.5557 8.04141 +2.76812 5.13617 +7.97308 9.25668 +4.73539 5.22234 +7.53377 8.41651 +-0.355405 1.36499 +4.72111 4.73744 +-1.22753 1.84842 +5.5033 5.63808 +3.95421 4.19313 +6.24752 6.98229 +4.49694 5.07277 +3.70871 4.30093 +1.31984 1.50116 +7.16044 8.70868 +2.44587 3.34659 +6.08322 7.20376 +2.75012 2.82555 +0.0394442 0.863634 +3.90896 4.73696 +4.77494 5.04158 +8.41473 8.82932 +1.7049 2.71024 +9.01684 10.1044 +4.57959 5.01066 +3.2484 4.21875 +1.11596 2.88792 +3.53616 4.14001 +5.80672 5.82478 +5.85844 7.70293 +6.18239 6.30124 +2.22913 3.23412 +2.97521 3.08481 +2.2749 3.70611 +2.3457 3.86609 +2.71695 4.04473 +7.22863 7.40115 +1.80428 2.39815 +1.80781 2.33028 +2.78662 3.14936 +9.40717 9.94906 +6.54968 6.80773 +2.76862 3.24492 +1.96034 2.87404 +3.53295 3.54927 +5.36042 5.67073 +8.63339 8.93752 +0.932415 1.70402 +4.32923 4.55594 +9.3491 10.4969 +0.121416 1.15499 +-0.172998 1.36319 +2.02349 2.29887 +1.75352 2.35329 +0.502555 2.01665 +6.71754 6.80014 +3.35175 3.93337 +7.17133 7.9851 +8.51299 9.95771 +5.86103 6.36734 +1.44593 3.46008 +4.49699 4.60855 +2.29261 3.10053 +6.68713 8.19499 +5.43776 6.84387 +8.58591 9.02134 +5.24746 6.15595 +1.3847 2.5074 +6.62143 7.07775 +1.7101 2.077 +9.70898 10.2789 +6.67451 7.92058 +2.56858 3.60374 +1.61917 2.60482 +1.77902 2.16908 +4.76209 6.00461 +3.8894 3.98269 +7.0278 7.276 +5.4866 5.59417 +1.69306 2.92506 +2.45744 3.76592 +2.5689 2.80611 +5.98283 6.06154 +9.5267 9.9626 +9.55652 10.4128 +6.6111 6.64606 +3.38826 4.26111 +3.61887 3.73455 +4.14924 6.13796 +7.15863 7.28212 +5.78984 6.56662 +2.09304 2.2681 +4.39867 4.88557 +6.20907 6.81034 +4.63336 4.91476 +0.939805 2.43621 +1.56774 5.13599 +8.40908 9.82058 +2.06273 2.20306 +2.53524 5.01482 +2.9314 3.23661 +2.48535 3.47368 +0.366389 1.4699 +8.81131 9.01654 +2.05102 2.87972 +1.9699 2.22723 +6.18333 6.98224 +1.3425 2.4443 +0.767883 1.77423 +3.1538 3.43248 +0.891006 0.903458 +5.7136 5.8713 +0.437569 1.37539 +3.98533 5.01646 +8.65764 9.89518 +3.74889 3.98561 +7.74507 8.30657 +8.24671 8.43006 +6.88467 7.42036 +1.99426 2.03522 +1.90486 2.04181 +1.12911 1.71807 +9.25253 10.105 +1.92989 2.0346 +5.60044 6.25585 +9.16848 10.087 +6.67824 6.72257 +1.88522 2.80222 +0.242758 0.852689 +5.09249 7.71484 +5.54974 6.44414 +7.66767 8.72936 +3.48884 3.83156 +3.4697 5.14646 +8.48582 8.7692 +6.76259 7.06897 +7.83856 8.62005 +5.81853 6.76571 +2.04803 2.94439 +6.85396 7.22985 +6.52449 7.39764 +9.26838 9.34809 +4.64449 5.64975 +7.51845 7.80279 +-1.27268 1.65344 +0.686101 4.20373 +7.80552 8.37119 +7.20419 8.35284 +9.33962 9.87975 +4.31238 5.58683 +2.39198 3.84398 +1.29248 2.59269 +4.71612 6.195 +5.27332 6.52174 +7.71492 7.84702 +8.18064 8.72233 +1.55223 2.31294 +6.34374 7.31758 +6.48966 6.92611 +2.62268 3.09895 +4.09064 5.06197 +2.66367 4.12126 +1.53391 2.93092 +8.64516 8.70655 +9.20047 9.28957 +4.00474 4.11716 +8.5418 9.45901 +8.73386 9.73253 +9.22596 9.63179 +1.34204 2.7834 +8.4489 9.21027 +7.75158 8.51085 +5.98856 6.11212 +1.29906 2.08111 +9.24315 9.76291 +6.84345 6.91607 +5.88294 5.90545 +3.03022 3.39941 +3.22222 3.4089 +1.12791 1.65898 +6.70232 7.36336 +8.60042 8.82377 +1.26451 1.30362 +2.76682 2.92693 +1.54763 2.19582 +6.5865 7.24173 +4.15242 4.21742 +8.39615 8.78524 +1.67017 2.08717 +9.03012 9.97041 +2.31463 2.45877 +8.29872 8.51813 +1.66689 2.51919 +-0.807606 1.47794 +1.31452 1.94418 +0.0739222 0.512106 +4.23577 4.25889 +7.45273 7.97505 +3.34234 3.46608 +7.97304 9.14131 +1.9029 2.99946 +8.84087 9.79689 +4.92769 5.68685 +2.74004 3.04513 +0.889257 2.20448 +3.10574 3.9758 +3.91547 4.32303 +7.17475 8.07377 +5.92903 8.03738 +1.57974 1.65527 +3.76339 4.2285 +2.28263 2.7559 +9.53105 9.87477 +2.10154 3.2222 +4.23683 5.34347 +1.38769 2.48482 +5.39838 5.51872 +8.50975 10.1382 +8.04108 9.21474 +8.5252 9.67823 +8.893 10.7726 +7.1294 8.18211 +1.15642 1.73882 +0.436911 0.756698 +3.66142 3.71659 +6.37686 6.7 +8.88506 8.99896 +2.31891 3.79061 +2.61615 2.81909 +1.35216 1.39571 +3.04217 3.52564 +7.8409 9.34099 +0.470596 1.49157 +6.94014 7.18365 +8.05483 8.49979 +8.18511 8.25608 +7.03597 8.45251 +2.47411 2.65172 +0.112716 0.193057 +4.45039 5.10584 +4.53906 5.80013 +5.11702 5.27151 +1.24211 1.90757 +4.64114 4.72912 +1.77254 3.45037 +-0.1275 0.99675 +5.69637 7.67722 +2.21252 2.44032 +3.89623 4.40192 +2.79904 3.15569 +8.37911 9.42424 +5.27199 6.2026 +1.84791 3.75411 +0.522801 0.54806 +3.83644 4.64785 +6.65497 7.55638 +6.75104 6.98564 +2.34979 2.98049 +8.27176 8.60459 +5.07773 5.44064 +1.16934 1.98872 +4.2914 5.37557 +6.83462 7.95408 +3.91405 5.73229 +7.77473 8.53538 +9.23441 9.90185 +4.03659 5.2473 +5.99336 7.8004 +4.2432 5.89276 +6.39847 7.81276 +9.13909 10.4164 +1.12009 2.5649 +2.35157 3.18468 +4.46918 5.55572 +3.82512 5.53666 +7.18238 8.10193 +8.40911 9.23639 +8.99555 10.4192 +6.69547 8.87825 +4.79012 5.34858 +9.23615 10.0986 +-0.590587 1.14603 +2.74289 3.48244 +-0.248403 1.1591 +3.35663 3.7229 +7.37504 7.6481 +6.64796 7.64695 +0.778081 2.41212 +4.49242 4.7772 +8.01419 8.109 +6.6494 7.76619 +8.86331 10.1205 +0.817273 0.937855 +8.00019 8.21556 +6.19405 6.54794 +6.11798 7.30421 +3.40164 4.28921 +5.31927 6.21584 +2.79377 3.40938 +3.59494 3.90321 +7.79218 10.3132 +2.99546 3.86111 +1.71916 3.40283 +6.1768 6.81915 +7.59629 8.68568 +1.59724 2.348 +6.20151 6.5391 +6.30798 6.70478 +0.489786 1.51322 +1.28396 1.86775 +5.18031 5.43007 +6.61276 7.70565 +1.4909 2.11165 +4.56163 5.49277 +1.93598 4.35147 +3.65568 5.00224 +1.68028 2.00363 +7.82874 8.67399 +1.23053 2.87598 +-0.164275 0.194491 +2.58349 4.01302 +1.23279 2.02984 +0.599702 1.09257 +9.50965 9.80164 +2.33108 3.58037 +4.38659 4.62378 +2.65097 2.87349 +0.0537058 0.576502 +4.20415 5.15693 +5.41458 5.98382 +4.37747 5.10347 +2.62536 2.70073 +6.96845 8.15356 +6.91533 8.41638 +9.36431 9.58863 +6.13019 7.25915 +2.7818 3.4951 +9.44641 10.1301 +2.68817 4.19772 +5.65664 5.6814 +8.25308 10.498 +3.50374 3.64458 +1.47063 1.78567 +8.21901 8.98152 +3.99261 4.47339 +2.51395 3.38788 +4.66178 5.24959 +9.08415 10.3467 +5.92351 7.20447 +1.74145 2.35957 +7.62653 8.96797 +6.43542 7.68775 +5.49047 6.56355 +4.9225 6.22555 +0.257967 0.704837 +3.42488 3.52873 +8.67606 9.77824 +5.12981 6.37856 +5.97359 6.32151 +1.58517 2.28129 +0.530687 1.54545 +7.04056 8.15296 +1.8541 3.1902 +9.46286 10.0098 +3.17967 4.02237 +3.49966 3.80271 +6.24894 6.49618 +1.19944 1.59215 +5.30422 6.94823 +7.49137 7.78584 +7.02669 8.16282 +2.21673 3.36471 +7.66183 8.34763 +4.13876 4.87421 +3.0199 4.07124 +8.40439 8.82943 +-0.274649 0.429602 +6.11215 7.65609 +3.34781 5.03006 +1.28231 1.77258 +7.57256 8.59456 +5.36208 5.81735 +7.18511 8.96618 +8.86053 9.49567 +5.39097 5.93211 +6.59094 7.26553 +3.69159 4.01914 +8.73797 8.81611 +1.41144 1.82827 +7.83555 8.07567 +6.13821 8.44907 +5.83432 6.48744 +2.93596 4.66271 +7.03215 7.59658 +1.65252 2.45337 +2.91358 4.90129 +8.94415 9.14642 +5.21005 6.1166 +0.33225 1.17039 +7.40089 8.07586 +9.30427 9.40776 +2.34188 2.81124 +1.02811 3.3344 +6.28117 7.62089 +4.80105 7.10049 +8.90252 10.0057 +2.20932 2.33093 +8.20746 10.6268 +4.31887 5.23945 +9.258 9.8985 +3.80742 4.15057 +1.11313 1.23711 +9.53067 9.70165 +7.95467 8.67187 +9.66031 9.83223 +3.61385 4.09571 +0.623148 0.652817 +7.77809 8.62118 +0.86157 1.98606 +3.12528 3.75815 +1.9363 3.22621 +8.23521 8.99175 +8.95406 10.4487 +3.38526 3.90652 +0.34281 2.0226 +0.739384 0.793829 +3.55637 3.96384 +6.1562 7.28647 +5.30211 7.51385 +1.46275 1.78688 +-0.0144662 0.868488 +0.0740443 0.119828 +9.26206 9.83923 +0.743397 1.40754 +4.68823 6.62985 +8.8291 9.17373 +4.66711 5.09313 +4.023 4.44994 +5.68937 5.79194 +8.04835 8.06763 +6.94662 8.00075 +0.774686 1.13428 +0.381819 2.34757 +2.1235 2.63524 +5.42795 6.89998 +6.07662 6.29083 +6.47821 6.7872 +2.58305 2.6192 +-0.598336 1.23458 +4.29089 5.43332 +8.09914 8.28229 +5.05925 5.35258 +0.181705 0.444466 +3.27849 4.79932 +0.310314 1.43125 +1.13836 2.76825 +1.2529 4.09336 +0.198106 0.608625 +1.77442 2.23777 +6.29823 6.64574 +1.22125 1.37929 +1.77592 3.04011 +1.43999 2.90926 +4.20495 5.32396 +4.98874 5.33211 +8.36483 8.67875 +5.65373 7.14132 +2.8303 3.05037 +3.41509 3.54032 +7.21702 7.85857 +5.79848 5.8913 +4.52711 5.65511 +2.04663 2.66919 +5.76363 6.77903 +-0.153046 0.77878 +4.37474 4.49936 +6.86786 7.81999 +8.92084 9.16368 +7.5975 8.56954 +0.197493 1.07503 +3.99803 4.67019 +9.35123 9.60094 +1.46442 2.4256 +5.21501 5.79612 +8.80879 8.99085 +-0.109252 1.30631 +7.34965 7.87947 +7.08703 8.12723 +0.985946 2.14663 +0.48521 0.856118 +6.57719 6.70623 +8.71165 8.72286 +3.16883 4.8714 +-0.21189 0.412944 +3.6526 4.37121 +0.364649 1.3363 +9.27722 9.35135 +3.47517 3.8793 +5.67149 6.28631 +6.52789 6.61039 +9.36323 10.4189 +4.30743 6.18638 +7.93653 9.4877 +8.24024 8.41475 +2.75692 3.13935 +8.80223 9.1489 +3.42656 3.90557 +8.96598 9.3217 +1.99582 4.84803 +5.1178 5.8688 +4.47901 5.73433 +7.30397 7.85527 +0.18463 0.656832 +7.80806 8.41666 +8.50023 9.42628 +7.67563 8.64756 +9.46783 9.52169 +2.06797 3.3107 +5.08863 5.10167 +0.82146 1.39055 +7.5428 8.04736 +9.09407 10.8208 +9.15219 9.99706 +1.61637 3.46354 +5.3812 5.96247 +9.34115 9.73575 +6.49221 7.30031 +1.56337 3.39704 +8.463 8.60841 +-0.322779 0.658242 +8.50173 8.72125 +0.854851 1.83405 +7.81945 8.12841 +2.60724 3.19985 +5.03714 5.55331 +1.85041 3.36816 +7.26119 7.64364 +5.75223 5.99653 +4.00026 4.43863 +5.00939 6.03009 +6.22879 6.6638 +6.44231 7.18622 +1.66002 1.88587 +2.59781 2.84919 +4.96399 5.40545 +5.70327 6.95018 +6.97141 7.08346 +3.98535 4.6179 +5.96795 7.14997 +5.07581 5.8262 +4.65665 4.98851 +8.65646 8.70986 +3.04175 3.19155 +0.796073 1.0952 +8.24859 8.57828 +5.26952 6.34245 +7.94685 8.78542 +0.193963 0.968524 +6.61159 6.80186 +9.37533 9.79195 +8.94048 9.74959 +5.77272 6.48616 +6.0092 7.86718 +2.52621 2.58938 +8.91347 9.22421 +4.20466 5.45909 +4.82157 5.09167 +7.35464 7.36611 +5.12413 6.45063 +2.12404 2.81187 +8.88875 9.20752 +2.59731 3.20587 +1.54772 2.08968 +6.70449 7.08952 +-0.0967146 0.888521 +3.10207 4.34815 +1.20807 2.35497 +6.00753 6.08492 +3.21837 4.00446 +4.34095 6.0963 +4.24821 4.79576 +4.49523 6.6669 +1.49483 2.52552 +0.0411497 0.641526 +8.3854 9.20954 +8.12419 8.93702 +0.0201515 1.06914 +1.57617 3.44176 +1.4173 1.76847 +5.42261 6.51539 +6.6744 8.46109 +3.05234 3.59179 +6.49059 7.24618 +7.01989 7.69901 +2.34664 2.90601 +9.17324 9.86754 +5.50919 5.70258 +2.40486 4.6009 +3.74368 4.00093 +6.9211 7.33554 +7.41358 8.7413 +8.78284 9.62033 +2.96753 3.01602 +-0.200693 0.535532 +6.4383 6.45049 +8.28835 9.42148 +4.2379 5.35128 +4.68397 5.04593 +5.7185 7.03177 +5.37494 6.43977 +2.99518 4.08138 +7.28064 7.54638 +9.10622 10.4907 +1.23839 1.50915 +6.7823 9.24533 +8.45679 8.62427 +0.106718 0.69304 +2.84119 3.50375 +3.60466 4.51338 +8.04709 8.19023 +3.31632 3.48054 +5.9027 7.46331 +-0.621072 1.13003 +8.57167 8.69262 +0.301047 1.42246 +1.24229 2.44616 +0.962706 1.55754 +8.77327 9.55275 +1.77899 2.44335 +0.368575 1.84726 +9.05918 9.07832 +6.61723 7.68015 +8.59899 8.80383 +-0.133927 0.20271 +5.69266 5.74809 +0.68202 1.52342 +7.17359 7.91482 +5.74049 7.34297 +7.88371 7.9683 +1.58749 2.26543 +3.96728 4.45988 +5.4354 6.88336 +1.68706 1.6976 +6.56907 7.40696 +0.518151 0.724124 +8.99155 9.36995 +6.00506 7.91529 +5.26967 6.11536 +2.37416 2.50887 +8.47983 9.31509 +2.38155 2.54346 +8.08415 9.65214 +1.00693 3.19203 +1.6523 1.73553 +6.85283 6.9958 +4.11425 4.90193 +1.39597 1.58725 +5.05551 5.19458 +5.89969 6.11394 +5.9148 7.26824 +9.32271 9.93989 +1.62911 2.58215 +5.43399 6.14203 +3.11393 3.58792 +8.57619 9.3788 +2.23349 2.7884 +8.09022 8.54326 +9.7114 9.87076 +5.91086 6.10885 +7.35805 7.57276 +0.650002 0.879866 +3.24977 3.75531 +2.73948 3.41051 +3.08006 4.62772 +3.71868 4.31519 +4.13905 5.78577 +1.77297 3.02983 +5.85931 5.89333 +3.68972 3.93193 +1.43922 2.98425 +6.51534 8.33386 +6.6821 7.50874 +1.2541 2.11722 +5.40634 5.54411 +4.55502 4.60346 +4.32484 4.68497 +3.40711 4.31975 +9.20893 10.0853 +6.12594 6.9009 +0.12664 0.347193 +7.53378 8.82258 +7.79572 8.91645 +2.50098 3.39701 +4.17873 4.97732 +1.05822 2.47032 +3.1012 4.97736 +8.42126 8.74568 +7.83301 8.17843 +9.26618 10.584 +3.02667 3.7128 +8.30654 8.69242 +2.87173 3.43275 +6.59917 7.54843 +7.03447 8.20283 +5.75718 6.40637 +2.62899 4.1855 +-0.520148 0.902194 +5.1538 5.61763 +1.25625 2.33142 +4.16336 4.3384 +3.01296 3.41026 +3.16515 3.26305 +2.40944 3.21897 +6.80742 8.57141 +1.15125 1.54824 +8.72251 9.50878 +3.15703 4.04482 +0.470308 0.726093 +0.199979 0.878243 +7.8908 9.17915 +6.91793 7.16038 +4.64783 5.00217 +2.21237 3.03073 +1.5825 1.63362 +3.18806 5.20795 +5.92725 5.95595 +4.65027 5.09868 +6.42204 6.87201 +8.08637 9.40221 +4.95542 6.16185 +7.45987 7.57979 +8.826 9.13961 +4.42078 5.27977 +7.26216 8.97585 +2.26919 3.33512 +9.4077 9.81908 +0.722223 1.03378 +-0.0497795 1.19355 +8.22686 9.31082 +0.0733766 0.93037 +7.47883 7.9062 +5.28731 5.74181 +1.78496 3.61348 +0.690987 0.764344 +2.56442 3.54999 +4.27944 5.43124 +4.04412 5.35376 +0.663756 1.88268 +1.73567 1.78553 +8.07666 9.41842 +7.70138 8.42873 +9.27113 9.55873 +0.982413 2.5565 +0.994807 1.02007 +5.01226 5.31923 +8.87435 10.0597 +1.74836 3.22578 +0.151528 0.191719 +5.82608 6.06438 +1.17239 1.59955 +3.18515 4.11049 +1.92258 3.70604 +1.63692 1.8266 +1.83542 2.66228 +2.21954 3.11425 +3.97546 4.3928 +0.731374 2.05705 +5.44809 5.96359 +9.85934 10.0553 +8.42169 9.63654 +6.68148 8.43446 +2.00014 3.3485 +0.735924 1.73 +1.61833 3.05643 +7.87934 8.67316 +8.67441 10.0032 +0.794573 1.2493 +6.11926 6.41441 +5.2715 5.82597 +9.41854 9.46625 +3.46299 4.06742 +5.6487 5.79053 +1.46503 3.43496 +0.9957 1.53939 +2.4714 3.1301 +0.887049 1.6196 +3.04884 3.19662 +1.24337 2.05758 +7.61142 8.55766 +0.998279 1.64425 +4.74917 5.85236 +2.97632 3.94611 +4.11786 5.62709 +7.40498 7.62083 +1.47854 3.64736 +2.1176 2.64511 +4.55533 5.89436 +7.44618 9.79926 +-0.410242 0.737348 +5.719 6.30861 +8.33692 8.38222 +8.78122 9.98195 +3.75452 4.26866 +2.23771 2.44985 +6.72455 7.61362 +5.9797 6.58846 +6.72885 7.60315 +-0.710302 1.18332 +7.73287 9.383 +6.61213 7.67394 +4.12945 5.68527 +-0.300887 0.341615 +5.77978 6.41534 +8.34001 9.96874 +1.62323 1.8283 +1.71788 2.23905 +7.43484 8.0418 +3.47322 3.8047 +3.47311 3.51261 +7.82093 8.86377 +2.46973 2.99125 +7.91166 8.55065 +3.39807 3.43599 +8.94792 10.0437 +7.70859 8.32487 +5.86852 7.13103 +7.64996 9.19033 +6.66742 7.8092 +7.88241 8.58675 +9.42939 10.3479 diff --git a/geom_bottleneck/tests/data/ws_tests/test_5000_B b/geom_bottleneck/tests/data/ws_tests/test_5000_B new file mode 100644 index 0000000..5f6e43c --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_5000_B @@ -0,0 +1,5000 @@ +1.17434 1.46837 +2.58198 4.16589 +0.234041 0.968658 +1.52703 1.59579 +6.7103 7.44033 +3.19227 4.41539 +5.42556 5.57369 +3.45417 4.86089 +3.82256 4.1092 +7.82551 7.90784 +3.9384 4.71796 +5.60335 5.9054 +7.96663 9.8987 +6.30305 6.64853 +7.33246 10.5316 +0.623312 1.09008 +2.63041 2.64616 +5.36028 6.28956 +4.64202 5.91858 +7.55219 7.96304 +7.73736 9.18221 +1.67114 1.84851 +5.07514 5.12159 +7.03732 7.05228 +7.5006 7.59212 +0.244947 1.55875 +0.0170454 1.10485 +1.95394 3.53669 +5.66015 6.01949 +5.88211 7.64639 +7.46698 9.27085 +6.37429 7.10154 +4.54535 4.81932 +8.21203 9.35896 +4.89933 6.20802 +3.68683 4.17831 +0.477467 0.828394 +6.17871 6.77834 +9.77523 9.92676 +0.854808 2.38709 +7.93326 8.3553 +2.10917 2.27771 +4.07045 4.72793 +8.2016 8.8011 +2.9205 3.95746 +2.89806 4.39725 +5.5654 5.78669 +9.5219 9.98543 +7.08591 7.19588 +8.35359 9.57893 +9.81348 10.0345 +8.5994 9.71835 +5.43903 7.25234 +1.82768 2.92724 +4.44952 6.79754 +5.66747 7.34386 +5.88153 6.39253 +3.34008 4.22032 +2.46068 2.76051 +0.370778 2.61681 +6.02508 6.26809 +4.32654 4.93262 +7.41536 7.99616 +8.84229 9.87911 +3.8551 5.84353 +1.56832 2.34694 +6.96099 7.42028 +8.15753 8.72014 +9.23141 10.3815 +7.4484 7.80228 +0.473671 0.874895 +3.15689 3.50687 +3.58122 4.09945 +3.55022 3.74767 +4.42708 5.80211 +4.40956 4.68699 +3.80576 4.61856 +7.29965 8.28614 +7.40582 8.15308 +1.69789 1.77669 +1.66419 3.44308 +0.473997 0.872506 +7.83959 8.52898 +6.22416 6.36949 +-0.187159 0.871822 +0.232336 0.585965 +9.29905 9.44357 +1.4459 2.40589 +2.83008 3.19758 +1.15291 2.12112 +2.58686 3.33896 +6.79362 7.88068 +0.228178 1.48318 +5.60001 6.20258 +4.97803 7.10992 +1.70429 1.962 +2.72659 3.13886 +9.22714 9.25889 +3.84694 3.88778 +-0.282077 1.48155 +9.28756 9.58517 +4.34069 5.59751 +8.63909 8.76839 +8.86236 10.7642 +6.77597 8.41888 +7.30621 8.64164 +0.685607 1.22755 +2.91514 3.22638 +2.72098 3.66837 +8.17528 8.32638 +5.19632 5.7506 +7.34177 8.70639 +5.74082 6.35524 +5.95975 6.69284 +9.40187 10.4488 +2.92761 3.36735 +0.399531 3.13082 +4.83399 4.92635 +7.74539 8.56852 +1.76322 3.5086 +6.54479 6.72963 +7.64362 8.12404 +1.35542 1.45313 +0.214385 0.718085 +1.7006 3.21962 +5.91009 6.47862 +2.21093 2.34636 +5.96919 6.79365 +6.59951 8.22203 +1.54571 1.59397 +3.27012 3.79128 +0.32455 0.622995 +1.73926 2.78017 +9.81035 9.84077 +7.38441 7.85171 +8.90372 9.34186 +7.26323 8.41174 +5.7363 5.97348 +8.25473 10.1281 +2.3981 2.52096 +8.53783 9.63442 +8.51755 9.2735 +6.48614 6.773 +3.40182 3.65137 +2.1353 3.04852 +2.95397 3.73285 +6.98063 7.4963 +4.50189 5.26384 +0.21416 1.49363 +0.632196 1.36307 +6.57833 6.60481 +8.0634 9.33903 +2.79759 2.94462 +4.43747 4.58861 +6.48733 6.86569 +2.28008 3.47037 +6.87452 7.77431 +-0.156821 2.71557 +0.72595 1.78862 +1.97586 2.38196 +8.61839 9.1468 +4.55496 5.68986 +0.26923 1.15728 +9.63757 9.7236 +1.39497 1.96698 +4.8643 5.04172 +6.64675 7.66435 +2.56256 2.6015 +-0.381989 0.611211 +0.676336 1.26896 +8.95304 9.03243 +5.62058 6.07997 +3.36522 4.04276 +8.64868 10.5024 +4.75813 5.19834 +1.96608 2.05864 +9.01449 9.10397 +3.72786 4.51921 +5.6938 6.96584 +1.73499 2.9314 +2.73099 3.41409 +8.77171 9.07665 +4.63865 4.67649 +8.6698 9.30782 +-0.168259 2.09581 +9.29672 9.56 +0.372544 2.60567 +0.450487 1.32919 +6.95341 7.6399 +3.4403 5.24993 +5.53469 6.97831 +-0.79664 1.21306 +5.68831 6.14413 +8.85601 8.95444 +3.83309 5.211 +5.51573 6.5114 +3.64009 3.99648 +4.40759 4.99283 +1.85198 2.6457 +2.72645 3.74803 +2.04751 3.00998 +3.19365 3.9383 +8.09529 9.45596 +8.88173 9.5618 +0.609816 2.67806 +1.57288 2.60884 +1.68354 1.80124 +4.92058 5.9959 +1.48728 1.84885 +0.299669 0.413905 +9.02156 9.56731 +7.50854 8.49023 +0.667131 1.89987 +2.22472 2.58793 +5.84395 8.79426 +2.35839 2.66935 +3.43111 3.69982 +6.71023 7.36801 +6.75697 9.0991 +2.35352 2.85316 +6.73054 7.39006 +9.48673 10.1493 +6.71226 6.72805 +9.22083 9.71889 +8.36513 9.33921 +0.0652672 0.319993 +3.26467 4.60881 +7.62269 7.79878 +6.48608 6.69515 +6.21737 6.88645 +6.56094 6.9699 +1.61317 2.7167 +5.08621 6.29754 +2.24676 2.8076 +3.09943 3.93921 +9.74093 10.0968 +0.417699 1.6381 +9.2958 10.2973 +3.6663 4.1369 +0.0229943 0.448065 +9.2928 10.1833 +3.66334 4.22032 +0.812172 2.19952 +7.88025 8.71192 +8.69379 9.34922 +1.70691 2.95352 +8.28737 8.29985 +5.22491 5.354 +4.03526 4.14084 +6.49359 7.05924 +0.24853 1.44718 +7.86936 8.75135 +5.76 6.68919 +5.85437 6.14314 +5.86292 6.0516 +2.35692 2.91295 +0.0990674 1.29386 +2.9911 3.56188 +0.552671 0.638929 +5.80756 6.22761 +1.21067 1.77175 +4.51882 4.72936 +1.99969 2.89732 +3.65968 6.61987 +0.478582 1.33355 +0.259061 0.289813 +3.89264 5.02474 +0.349236 0.438003 +7.70442 8.1729 +7.90389 10.1876 +3.06898 3.15219 +4.77811 5.29095 +9.76561 9.89451 +4.14295 4.2489 +0.540224 2.28623 +9.60749 10.2284 +8.49555 9.00307 +7.89668 9.76886 +4.12631 4.70897 +7.87898 7.91814 +9.29858 9.52908 +9.24009 9.91544 +3.73498 4.70275 +5.44467 5.9274 +2.13453 4.85697 +2.29607 2.88771 +0.807842 1.82319 +0.319005 2.08473 +1.62 1.63649 +2.20431 3.23869 +2.00132 2.77136 +6.64752 6.71706 +8.12249 8.28379 +7.55541 7.7813 +3.51763 3.64484 +9.21075 10.2811 +2.24501 2.54426 +5.64566 6.46452 +6.72307 8.56698 +3.91728 4.60262 +4.02535 4.29548 +3.0499 3.53135 +1.30677 2.32194 +9.36908 9.90669 +3.92387 4.33848 +2.87312 3.08243 +4.49167 5.2749 +5.43143 6.74905 +6.94595 9.16539 +1.9784 2.00429 +9.42478 10.2226 +3.7185 3.96576 +9.37729 9.50574 +5.34283 6.89736 +4.95341 5.84626 +2.91654 4.28413 +8.26544 9.3076 +6.23114 7.20273 +1.02585 2.21446 +1.6718 2.29591 +2.28926 2.73452 +-0.648145 1.105 +1.44194 2.18562 +6.78584 8.37985 +2.00402 2.08248 +1.64076 2.04067 +0.0419044 0.455962 +5.51723 5.72098 +5.42117 6.81165 +5.70331 5.81707 +4.97889 5.60741 +3.38797 4.46846 +7.20995 7.66784 +3.45388 4.23386 +3.11057 4.35995 +3.29476 4.04676 +2.0519 2.94719 +5.37101 5.38271 +5.99383 6.64188 +7.48444 7.6377 +2.15043 3.05399 +1.54093 1.83799 +5.59223 5.87222 +5.8005 6.08042 +6.1208 7.22563 +1.2938 2.17454 +4.92405 5.0402 +6.91336 7.79688 +1.47978 1.99762 +9.00494 10.8315 +5.84805 6.15303 +4.95368 5.49096 +8.21704 8.31192 +0.715222 2.33517 +0.904183 2.54741 +3.42349 3.74906 +0.627978 2.37092 +8.41477 8.72651 +3.55373 5.58652 +4.12685 4.61533 +0.775274 1.41263 +4.78915 5.08639 +6.35791 8.15015 +2.88242 3.63509 +2.78526 3.07834 +0.39129 1.15933 +3.26615 4.74531 +8.78873 9.8888 +7.25612 7.45972 +4.97452 5.30012 +0.757255 1.35518 +1.29516 2.52446 +4.66838 4.96648 +-0.0720209 0.832726 +2.68276 3.21123 +8.44253 10.0311 +3.40809 4.70506 +1.09617 2.35452 +5.19302 6.73599 +1.25316 1.58101 +6.2056 7.10099 +7.7666 8.52777 +0.301239 1.37275 +0.522829 0.731575 +6.73869 6.96826 +2.41703 3.20567 +4.94617 6.22052 +5.41524 7.68272 +6.0408 6.29938 +0.0642067 0.600878 +6.32122 6.63505 +3.25427 4.70611 +5.88704 6.1678 +8.71533 9.08476 +6.25575 6.88392 +1.54462 1.56366 +3.95938 4.03326 +2.54671 3.66798 +8.48603 9.10156 +3.37369 4.65454 +5.25469 5.64636 +7.02624 7.36449 +8.17061 8.44321 +9.23147 10.1149 +1.45589 2.25886 +6.47702 8.25307 +7.69088 7.91753 +0.442832 0.616926 +8.35355 8.83222 +7.65142 9.58906 +4.04877 5.17345 +0.76012 1.8686 +6.54877 7.40058 +7.41774 7.65429 +8.69655 9.3325 +4.8302 6.25306 +1.77203 1.90284 +3.67485 4.94569 +6.60162 6.72031 +3.05924 3.35235 +0.0823162 1.3486 +8.42991 8.86331 +6.81596 6.83527 +-0.0174808 1.6745 +-0.758131 1.08928 +4.14423 5.46342 +9.26253 9.85714 +7.42749 8.58214 +4.88849 5.86936 +8.99339 9.38141 +8.85301 9.18285 +2.64303 3.45658 +7.1133 8.66473 +3.50745 3.8629 +7.81615 7.83244 +2.94991 3.8741 +7.91822 8.8362 +-0.0553088 1.19059 +7.35558 7.77948 +2.11257 2.20563 +8.57533 9.16338 +2.3515 3.13009 +4.13239 5.38696 +2.20763 2.93941 +7.2451 7.3211 +0.834388 1.57413 +4.47024 6.17855 +4.75947 6.80913 +2.99607 3.54732 +8.15998 8.80718 +8.94688 9.27971 +4.46335 4.9522 +5.30725 5.69786 +7.63989 7.86974 +6.69589 7.69565 +5.34018 6.08115 +8.59515 9.62264 +1.80557 3.22507 +8.62429 8.94242 +1.34532 1.95042 +8.60707 8.80741 +8.03275 9.40327 +4.30357 4.39095 +8.97954 10.7076 +2.18143 3.51825 +3.98695 5.62062 +2.48813 2.60622 +5.56957 6.43776 +5.18249 5.55459 +3.45373 3.64101 +-0.00345662 0.570597 +3.61127 4.69761 +9.37858 10.6205 +7.24635 8.19639 +4.70142 4.80735 +3.30055 5.14257 +0.860415 1.31635 +4.72924 5.46893 +7.47391 7.72644 +6.22287 6.57754 +0.181652 1.01366 +2.14494 2.80736 +2.16406 3.19383 +8.52991 9.22722 +8.74411 9.06935 +0.575831 1.02699 +2.47315 3.0331 +4.2872 4.59813 +5.82293 7.03604 +2.08982 2.25319 +7.3626 8.41994 +1.23867 3.10885 +7.397 7.78026 +6.78837 7.32977 +0.829368 1.56617 +9.23075 9.35172 +6.76562 7.23578 +0.42851 0.839401 +4.83626 5.5852 +0.150032 2.45322 +2.16811 2.47439 +5.60245 5.81188 +7.43707 7.46519 +0.167317 1.44642 +4.9732 7.58343 +8.67391 10.2957 +0.318592 0.639284 +3.365 4.25929 +7.83683 8.88895 +5.20557 5.30114 +0.940347 1.74022 +5.39149 7.13464 +1.10826 1.27913 +1.9147 2.31276 +0.935283 2.49181 +3.67898 4.33336 +5.10125 6.07734 +0.348807 0.839242 +0.310986 0.58381 +2.03594 2.43119 +5.49755 5.94215 +1.94885 3.34409 +9.66806 9.97883 +4.79099 5.45155 +4.81158 5.30001 +5.17667 5.90019 +9.64168 9.99177 +1.14899 1.22792 +0.466236 0.952985 +6.93679 7.72282 +2.97285 3.23931 +9.22517 9.24315 +7.25783 7.46414 +4.37304 4.51815 +4.01069 4.02979 +0.843132 1.80443 +4.78572 6.04237 +6.02471 6.38074 +4.99536 7.76852 +4.97442 5.17384 +0.731231 1.49497 +2.2797 2.90845 +9.13211 10.341 +4.19545 5.08597 +6.13127 7.09817 +2.65124 5.02208 +5.40235 7.12912 +6.86258 6.91991 +8.24317 8.55273 +7.6877 7.69875 +3.33922 3.53776 +0.089484 0.40755 +1.34909 1.68726 +8.43113 8.72899 +4.90038 5.55994 +0.308089 0.490555 +5.42628 7.1433 +2.11647 2.56987 +3.56934 4.1619 +8.35794 9.24416 +8.8645 9.69151 +5.10701 6.0036 +7.66385 7.8412 +2.89952 4.55221 +6.01533 6.38269 +-0.945182 1.07304 +1.79537 1.85576 +-0.0313338 0.501067 +8.85689 8.87522 +1.61143 1.7773 +9.53229 9.84943 +3.51669 3.81091 +-0.448016 1.10903 +3.16889 3.439 +4.30534 4.36372 +6.20158 8.09618 +2.20949 5.23616 +3.29459 4.17079 +3.90101 4.05611 +5.89688 6.85702 +0.734474 1.04471 +7.84341 8.02702 +8.69431 10.1086 +9.73194 9.92195 +7.63516 7.70631 +8.51416 9.33072 +-0.0712911 0.361001 +2.76979 3.22708 +5.34404 7.5165 +5.64429 5.79865 +0.0755012 0.363483 +5.05631 7.27153 +-0.60164 1.09659 +0.457228 0.876186 +4.27092 5.38033 +8.63891 9.04134 +6.29608 7.04242 +8.97795 9.93013 +5.00385 5.57737 +8.48068 9.44885 +7.35543 7.78492 +3.55698 4.01035 +-0.268117 0.649128 +0.633184 0.66254 +4.54216 4.81132 +6.15574 6.35276 +4.3663 6.36286 +1.45231 2.07039 +7.37031 7.9157 +5.30961 6.3506 +5.80757 5.81762 +4.91767 4.97519 +3.45667 3.60965 +1.7934 2.3807 +4.33289 5.41047 +1.16021 1.29979 +3.75172 4.53521 +3.10835 3.1275 +2.68167 3.00314 +4.10639 4.24094 +4.90776 5.74069 +7.30861 7.86666 +3.52822 3.70998 +5.22222 5.28033 +0.00866476 0.326377 +7.73247 8.61481 +4.25231 4.77499 +8.41148 8.54604 +2.95389 3.63497 +7.76126 9.69124 +6.41218 6.69682 +4.86285 6.44503 +1.84783 1.9065 +4.08788 4.11706 +9.17473 9.50133 +5.15091 5.78649 +1.27694 3.33579 +2.92648 3.37855 +9.37392 10.5123 +4.81878 6.34991 +8.38702 8.83716 +5.07771 6.33618 +1.47438 1.75588 +6.20935 7.11166 +1.08286 1.38 +1.40048 2.0157 +6.60355 7.26234 +5.28396 5.90003 +8.9525 9.59216 +-0.0305792 0.544664 +-0.571491 0.735471 +6.287 7.03679 +5.35225 5.4104 +0.095812 0.605976 +4.33523 4.4048 +6.13288 6.80949 +4.14654 5.5505 +-0.213214 0.260592 +7.56188 7.83088 +7.8132 8.65963 +8.02469 9.3254 +0.00641711 0.420562 +7.49269 8.15849 +9.26359 9.4366 +5.74008 7.86317 +8.62729 9.78825 +4.28946 6.20553 +3.19174 4.54991 +4.16992 4.25203 +2.46138 4.11583 +1.92971 2.16701 +3.43028 3.80842 +6.98297 7.28388 +7.51884 7.55947 +7.79102 9.44326 +0.416342 1.32311 +9.35398 9.85201 +8.72997 9.10384 +6.23398 6.88888 +7.46984 7.4875 +5.92603 6.66938 +1.77761 2.58697 +0.835966 2.06139 +9.63284 10.3565 +6.13677 6.42768 +0.151375 0.382404 +8.10315 8.13441 +5.52283 6.28113 +1.00873 2.44226 +2.5239 3.89871 +5.40599 6.72653 +3.43407 4.0068 +1.22444 1.26601 +7.04395 7.80599 +3.75987 3.77123 +6.43597 7.06249 +8.34435 8.87418 +8.25853 9.04009 +0.415321 2.32725 +0.639046 1.75525 +7.83226 8.12538 +9.55429 10.2734 +3.658 4.35867 +1.8588 3.93292 +7.38922 8.16823 +8.53626 9.23024 +0.848152 1.13412 +6.31667 7.2348 +3.81584 4.62621 +9.24748 10.7408 +2.75953 2.95288 +5.70188 6.62278 +4.22202 4.45368 +3.24616 3.88779 +1.05053 2.09846 +8.67718 9.52693 +2.14107 2.71959 +1.10518 2.69689 +5.01476 5.54139 +4.69244 5.20358 +8.88285 9.93012 +2.55228 2.77382 +6.72118 7.50057 +7.58999 8.71573 +1.83763 2.13481 +4.86135 5.27995 +4.39794 5.42117 +1.42512 2.98262 +4.80489 5.34701 +2.7993 5.13702 +7.52122 8.41729 +9.08613 9.37543 +1.1555 1.3935 +7.34071 8.0428 +8.33361 8.40349 +2.514 2.54741 +8.25732 8.41758 +1.65337 2.57964 +4.20527 5.06565 +0.723443 1.06987 +5.85836 6.64701 +7.908 8.07591 +5.01839 7.0105 +3.15908 5.10364 +4.3574 6.67192 +2.06662 2.46437 +7.5595 8.9108 +7.94919 9.20231 +4.11889 5.49714 +7.28151 7.51881 +1.30685 2.09479 +3.08479 4.47364 +4.50916 5.91511 +7.31605 7.63868 +3.14469 4.07035 +8.38431 8.87993 +7.42277 7.64967 +4.22472 4.26323 +8.49871 8.90746 +7.44431 8.09014 +8.35213 8.7504 +3.85634 4.37584 +9.12975 9.77042 +-0.326056 1.17374 +3.53802 4.06211 +6.81775 6.8467 +8.19106 8.64489 +4.20526 5.37727 +2.74081 3.72143 +0.49642 1.10775 +7.76606 8.00524 +4.79825 6.38926 +1.99478 3.20484 +4.69853 6.29508 +5.73058 7.18643 +8.11708 8.64257 +9.62375 9.84838 +5.95271 6.38989 +9.0193 9.93848 +3.91188 4.10834 +6.065 6.60546 +2.62354 3.60072 +8.53665 9.06824 +6.40691 7.44693 +1.62959 2.5825 +9.4128 9.87031 +6.24697 6.62684 +3.31136 3.45626 +4.80347 4.9935 +9.21711 9.53416 +-0.491547 1.72886 +4.75174 4.87217 +0.86329 1.53331 +2.4586 4.2578 +5.10301 6.2815 +5.08302 5.86788 +6.12434 6.78948 +9.68323 10.0973 +3.52576 4.40424 +4.9925 6.89084 +0.846638 1.80782 +1.09709 1.7685 +8.38592 9.03312 +9.56243 10.2682 +5.03592 6.6429 +7.8609 8.04599 +1.21404 1.31975 +7.47824 9.2063 +1.47849 2.68795 +1.2909 2.06381 +5.21288 5.54616 +6.27218 6.99345 +4.77622 5.08494 +3.30665 4.14735 +3.38947 3.55545 +7.71197 8.53162 +1.10565 1.50806 +0.7889 0.984689 +2.88598 3.33244 +5.70958 5.81232 +5.16567 6.24511 +6.91255 7.25784 +-0.401084 0.753156 +4.81138 6.20671 +1.67301 3.58501 +7.19478 8.25624 +1.24428 2.2523 +4.31631 5.33357 +0.589196 1.02017 +5.69207 6.97803 +2.3854 3.25501 +4.1362 4.91135 +8.9932 10.3184 +7.95871 8.45158 +4.03213 5.26347 +3.09506 4.06425 +-0.0310321 0.738171 +7.35733 7.61512 +2.48488 2.96253 +4.72098 5.69867 +5.5395 5.96914 +3.17854 4.283 +6.50012 7.33744 +1.93266 3.00941 +1.49319 2.71826 +9.0187 9.13099 +7.15259 7.40691 +8.71939 8.93257 +1.57203 3.11249 +0.933429 2.16903 +2.99663 3.71667 +2.06144 2.81311 +7.9072 8.2103 +0.490069 0.614737 +7.84111 9.70812 +1.15363 1.6421 +1.15475 1.43307 +8.2228 9.92116 +7.76825 8.40724 +6.15122 7.31322 +7.1427 7.49294 +2.30516 2.7019 +2.03336 4.03387 +8.3918 9.85707 +8.57214 9.59345 +3.8057 4.1119 +8.9223 9.38556 +9.32051 9.60504 +7.13349 7.69154 +1.71855 2.00425 +5.10333 6.0605 +-0.149137 0.80973 +0.466224 3.1698 +4.19165 4.29604 +1.64018 2.3161 +9.40397 9.89211 +5.21738 7.06323 +0.525526 1.0331 +8.06992 8.08704 +9.81539 10.0915 +9.33514 9.50521 +5.95494 6.54519 +9.21466 9.35909 +4.96603 5.18164 +3.89238 5.53056 +5.04546 6.32916 +8.63758 8.65805 +7.03226 7.57074 +0.32029 1.10893 +0.194176 0.992252 +8.79061 9.50848 +0.239137 0.300717 +7.7234 8.43747 +3.43679 4.28954 +8.31382 9.18928 +1.39612 1.67253 +6.95733 7.39846 +1.29129 2.12185 +7.93611 10.2305 +3.67764 4.17562 +1.38149 2.42407 +2.2847 2.48412 +9.28655 10.0661 +2.94115 3.21326 +7.04238 7.91536 +5.06012 5.61526 +8.95611 9.91736 +2.18524 3.44007 +1.0692 1.10987 +4.37019 5.18443 +5.82014 6.441 +1.68642 1.70458 +4.93783 4.9535 +9.42003 10.1196 +-0.356795 1.30987 +1.37778 2.80527 +9.54126 10.1758 +8.67413 10.5984 +0.914291 2.0697 +6.08696 7.09832 +2.82202 3.31103 +4.07818 5.50195 +2.85223 3.67449 +6.03006 7.10863 +8.84655 10.528 +5.08031 6.2001 +1.00272 2.74191 +0.169102 0.223253 +0.025089 1.26534 +-0.203339 0.64667 +0.899666 1.48885 +0.74235 1.49976 +6.28212 6.80412 +5.65159 5.93106 +2.1686 2.7445 +5.02936 5.43091 +8.07124 8.80499 +8.65696 8.95802 +7.68394 8.365 +8.65062 8.69146 +0.058248 1.19535 +5.74545 5.84057 +6.05244 6.52152 +9.3878 10.3328 +7.71379 8.88044 +3.32961 4.54105 +8.51987 8.62854 +4.10821 4.16902 +9.47639 9.78723 +4.72417 4.84793 +2.32867 2.94068 +9.52275 9.57815 +5.32867 6.96127 +4.32462 5.1508 +4.46919 6.45961 +8.62661 10.9533 +0.0244049 0.56156 +1.49207 1.73164 +7.03156 7.81168 +5.88587 5.89732 +8.43632 9.65085 +7.52612 8.06726 +4.82464 5.6193 +3.8062 3.90356 +2.42708 2.51646 +2.06458 2.45877 +0.427218 2.24283 +7.42616 8.11513 +0.617708 1.01833 +8.74218 9.03592 +-0.213346 0.599112 +9.05291 9.59124 +5.20365 5.54277 +2.85289 3.99509 +3.08468 4.58456 +0.136826 0.685254 +3.87191 3.99021 +0.970836 1.49673 +2.44355 2.53584 +8.88615 9.94545 +3.90591 4.52798 +1.52518 2.50658 +7.21268 9.07745 +0.767314 1.23833 +8.62975 9.42367 +6.71524 7.67686 +7.61205 8.48292 +5.312 5.65087 +4.75627 5.96261 +7.90674 8.0753 +7.37887 7.71478 +3.74483 5.52984 +2.7187 2.85544 +4.7902 5.62159 +2.89671 5.19815 +7.37268 8.72506 +7.11916 8.28301 +9.19814 9.75279 +1.2085 2.60113 +-0.632009 0.889734 +7.99858 8.39743 +6.48346 7.10822 +6.30616 7.06648 +5.56514 6.51183 +2.41505 3.56224 +6.83749 8.84447 +9.05111 9.46906 +7.77476 8.4091 +6.11378 6.31232 +4.42882 5.69917 +5.88107 8.052 +3.75437 4.08893 +2.70487 2.77664 +7.26028 9.77257 +1.44621 2.73267 +2.0384 2.60397 +2.95402 3.68949 +6.04766 6.4054 +0.716046 1.77698 +1.5084 1.72988 +2.58426 2.80376 +8.05255 8.59793 +6.06336 6.20709 +3.29813 4.31473 +2.53477 4.92554 +8.78711 9.88634 +9.26627 9.82082 +6.70683 6.81257 +8.25978 8.99788 +7.28054 7.64237 +5.14556 5.20711 +4.20431 5.87866 +8.96592 9.97597 +4.06216 4.41519 +8.49174 11.0491 +5.24547 6.03094 +4.65885 5.95835 +5.09606 6.34846 +6.30463 6.65933 +6.48022 9.56168 +1.38088 2.98143 +0.486911 1.16767 +8.16327 9.34821 +0.768885 0.782616 +4.51699 6.08086 +9.55086 9.70242 +2.86802 3.72489 +1.88496 2.18749 +4.31876 4.33726 +8.38871 9.45631 +8.80634 9.36198 +5.232 6.42399 +9.86919 10.0492 +3.61902 4.53086 +3.13118 4.42364 +2.69395 3.1816 +-0.303144 1.32309 +4.28871 4.36739 +3.8631 4.08745 +4.9291 4.98968 +7.14273 7.25505 +2.56623 2.59122 +6.01753 7.72265 +6.76051 7.53954 +6.76933 8.14741 +0.933137 1.83537 +7.9357 8.57904 +5.55847 5.59984 +4.25563 4.3345 +4.28087 5.21348 +8.88534 9.06554 +1.88575 2.94002 +5.26613 6.04562 +0.514249 1.45538 +0.130644 0.501645 +4.30564 4.86337 +1.57246 2.38451 +0.303814 1.77474 +4.22675 5.02783 +6.75381 6.78634 +5.64096 5.9725 +6.76159 6.98142 +2.35569 2.39119 +3.29794 4.95962 +6.55055 7.03366 +5.31474 5.69404 +9.01335 9.16988 +8.58306 9.37831 +7.06522 7.07778 +1.14695 1.74744 +3.15507 3.22865 +5.5925 7.14168 +2.14679 3.68767 +7.54789 9.71878 +1.5667 2.08742 +-0.604726 1.66718 +0.306012 0.54799 +2.61731 5.08257 +0.80957 1.74655 +8.22035 8.81637 +4.401 5.449 +8.89389 9.01988 +4.80574 4.9322 +2.19895 2.88565 +9.06688 10.8095 +1.23727 1.58699 +7.14836 7.92057 +4.65155 6.15149 +0.563061 2.16535 +7.66764 8.0341 +8.32324 8.42774 +4.54541 5.11069 +8.0237 8.09992 +7.26113 8.09404 +2.55196 3.20317 +8.1236 8.60951 +1.90437 3.23006 +0.888133 2.50365 +1.13618 1.69444 +2.60463 3.01696 +7.2311 7.73229 +5.06501 6.01487 +3.9893 4.10116 +1.45278 1.56937 +2.74601 3.80778 +9.40705 10.3843 +3.02533 3.52213 +8.7097 9.2268 +8.73145 10.5552 +2.56059 3.5742 +6.27328 7.57089 +3.23291 3.30811 +6.33804 7.20304 +7.63648 8.34564 +9.82053 9.93597 +3.14924 4.58629 +5.28253 6.33733 +1.99411 2.04104 +0.305593 0.420302 +5.39668 6.64188 +7.99992 9.37823 +5.25169 5.65987 +0.109291 0.875734 +3.08589 5.50296 +6.51358 6.62588 +5.34687 5.58204 +0.043587 0.932787 +-0.0264143 0.28677 +8.09722 8.37087 +5.46612 6.30285 +2.89146 3.49892 +6.73278 7.11762 +5.03068 5.90176 +1.7459 2.87727 +0.207707 0.448933 +7.00453 7.63105 +6.02789 7.87991 +8.1917 8.95854 +7.49014 8.73215 +8.48402 9.22063 +1.0467 2.4687 +0.241901 1.38802 +2.65867 2.81258 +5.46725 6.59448 +3.40578 3.75607 +4.2495 4.26392 +5.6608 6.213 +2.99705 3.88852 +6.17231 6.72018 +-0.17415 0.492739 +4.89596 6.49895 +4.68876 6.60218 +-0.0510568 1.46013 +8.87099 9.28179 +3.98894 4.5838 +-0.20015 1.59214 +8.80756 9.51828 +7.74921 8.53538 +-0.380041 0.440574 +2.69409 3.91466 +2.42747 4.56745 +6.25881 7.75647 +7.2941 7.77193 +2.60806 2.90251 +0.325028 1.22219 +8.29921 9.01416 +3.85524 5.45451 +5.2612 5.71877 +2.92849 3.73937 +8.6242 8.70808 +7.28153 7.35797 +1.65378 2.87917 +3.46034 4.24143 +3.99989 4.3199 +1.15266 3.60328 +4.8464 6.4887 +4.67021 4.68421 +6.96861 7.31554 +0.00723008 0.817047 +7.59589 8.88352 +5.56725 6.08465 +9.02409 9.19527 +5.81681 6.74193 +1.98221 2.98678 +8.76392 10.7646 +4.3903 4.50531 +1.0186 2.01838 +2.66674 2.74505 +2.41105 3.44579 +8.98295 9.18995 +8.14385 8.98779 +2.69613 3.60144 +0.445704 1.51319 +-0.634889 0.860409 +6.32737 7.10112 +7.88824 8.06838 +3.76271 4.43529 +7.66487 9.30221 +8.73974 9.59191 +3.08965 3.43006 +8.9518 9.96154 +0.727194 1.55228 +6.35214 7.12234 +2.71987 3.22996 +7.12786 7.4379 +-0.346107 0.837469 +8.47103 9.05987 +9.15744 10.628 +8.3237 10.093 +1.15052 1.16223 +6.95959 7.35423 +7.69488 8.44145 +4.21694 5.65913 +3.10562 3.37534 +9.73437 9.78252 +5.0458 5.53479 +7.80485 8.5163 +2.0442 3.75748 +-0.459177 0.498702 +7.38032 8.32195 +0.909659 2.11175 +7.08657 7.56877 +1.84997 3.10206 +4.2517 4.53819 +6.71655 7.04117 +1.06604 1.29153 +2.69273 3.31633 +2.19732 2.84826 +-0.723032 0.774865 +-0.289734 1.44645 +5.87194 7.71917 +1.01576 2.83685 +0.981927 0.998558 +3.07172 3.73201 +-0.112577 1.12642 +3.54063 3.67007 +7.21571 8.53815 +0.109957 0.839052 +6.86046 7.17211 +9.40878 9.69478 +0.989391 1.69046 +8.22287 8.8147 +1.48203 2.83308 +5.86418 8.0993 +0.749797 1.09852 +1.82996 2.50847 +0.28178 0.496017 +2.60694 3.00872 +8.6254 10.1698 +6.11641 6.41537 +7.19529 7.21342 +1.8214 2.17517 +0.991201 1.3788 +2.84924 3.12362 +5.75821 7.13843 +6.7106 7.35932 +6.6055 6.6829 +7.97105 8.58613 +1.56087 1.95845 +6.36782 7.10926 +2.43382 2.74699 +7.40509 8.8029 +8.42459 8.63142 +6.26128 7.55043 +4.6465 5.4431 +2.93214 3.29517 +0.157602 0.545214 +6.05931 6.72188 +1.7908 3.11731 +2.39217 3.58736 +7.07421 7.43852 +8.13419 9.74991 +9.53094 9.65319 +2.35726 3.68679 +-0.108561 0.874853 +6.87136 8.84157 +3.40803 4.58835 +7.50448 7.89932 +4.29762 5.53867 +0.863755 2.30032 +7.24847 7.95342 +2.89618 2.98849 +-0.928261 1.61922 +0.974105 2.91262 +6.99271 7.25856 +3.60995 5.01832 +1.26865 1.79704 +9.62217 9.80719 +1.02656 1.35514 +7.16502 7.32934 +3.12092 3.28857 +2.81374 3.84317 +8.73626 10.7585 +3.36982 3.61446 +5.08437 5.78949 +2.90218 3.0862 +9.2309 10.2523 +5.0967 5.48926 +9.73088 9.92708 +1.54013 2.78301 +6.73707 10.0789 +6.41735 6.838 +2.57935 3.04287 +5.719 6.70352 +5.42474 5.62732 +4.23904 4.69787 +4.16528 4.28736 +7.73477 8.84143 +4.90346 5.87324 +5.1969 6.14087 +3.48793 4.14182 +0.648493 1.07987 +6.88101 6.97932 +7.67342 8.74418 +5.16759 6.3871 +9.16292 9.49569 +8.77422 10.4817 +-0.358149 1.04178 +9.54616 10.3424 +3.12027 4.26504 +3.81223 4.73004 +1.2386 3.32247 +8.21963 8.42629 +9.10312 9.51016 +6.96107 7.43045 +2.98587 3.12365 +0.198165 0.211424 +5.19716 6.10856 +6.10553 6.3327 +3.98176 5.11099 +1.02512 1.04242 +4.27949 5.71947 +-0.457956 0.538807 +7.99877 9.48581 +5.88782 7.73303 +1.21496 2.85825 +8.46962 8.7862 +9.50182 10.1527 +5.85223 7.76234 +2.48368 2.52439 +2.35426 2.77405 +0.397056 0.482679 +0.160423 1.15786 +4.47109 4.8633 +4.74523 5.84196 +5.39177 5.75218 +9.00754 10.3249 +3.74813 4.03273 +3.08633 4.08426 +4.62672 5.29012 +1.92055 3.01442 +3.79279 4.5603 +9.52431 9.68334 +2.8126 3.32592 +-0.313688 0.490785 +9.06695 9.36835 +2.60321 4.14185 +4.40231 4.99535 +9.32205 10.1041 +5.3879 5.44349 +0.308728 1.0956 +9.05758 9.08283 +1.90313 2.50914 +7.1391 7.59459 +7.47357 7.95993 +1.25267 2.34827 +3.33222 4.36522 +8.78126 9.38611 +0.635979 1.62283 +8.3492 8.57545 +-0.572557 1.60517 +8.28855 9.03937 +3.47934 3.90271 +4.64498 5.43501 +0.872177 2.62011 +7.3893 7.58876 +2.14063 2.88063 +1.69361 1.75261 +4.19727 4.86483 +0.814676 1.27639 +8.19899 8.58203 +8.3394 8.99896 +9.31768 10.1694 +4.99218 5.19949 +4.2459 4.75266 +9.6314 9.64249 +4.038 4.75708 +7.92398 8.8579 +4.30747 4.54161 +7.51776 7.78258 +3.77611 5.1385 +3.53275 3.90278 +1.78619 2.12474 +3.18736 3.55159 +8.36759 8.52587 +5.52526 5.7843 +7.64174 8.09773 +4.37925 5.85699 +3.94295 5.31298 +-0.464623 0.795523 +7.02408 7.7048 +0.0690458 1.0008 +1.05445 1.32797 +0.126093 0.712612 +-0.809973 1.33869 +3.45568 3.96532 +0.433875 1.78679 +8.94667 9.65034 +1.98575 2.76936 +6.47974 7.67912 +2.74186 3.34153 +7.82655 9.32112 +4.71441 6.14932 +0.741177 1.76987 +8.05021 8.23239 +0.818503 0.882959 +7.13341 7.43399 +8.45939 8.93395 +4.44558 5.70161 +3.05657 3.86962 +8.75469 8.85537 +1.0922 2.23475 +6.00278 7.51598 +0.0530968 0.582206 +4.01788 5.48223 +1.30808 2.81869 +8.18848 8.59771 +2.43691 2.80685 +8.54045 10.6178 +7.58523 7.91634 +6.70183 7.49962 +5.81501 7.29783 +0.661853 1.58021 +6.50997 7.20411 +0.334292 1.40252 +-0.329585 0.742961 +2.38756 2.48935 +2.78114 3.58788 +7.97227 8.55379 +3.36753 4.57472 +5.14486 5.31457 +3.99691 5.47708 +6.36404 6.8741 +3.22519 4.63321 +1.80583 2.21824 +8.20747 9.42947 +5.90819 6.94368 +6.58559 6.85933 +2.99108 4.03832 +7.20963 9.6252 +3.10244 3.87265 +7.23018 7.91389 +7.18084 9.61063 +6.74145 6.86507 +8.40721 9.5751 +7.12352 9.45614 +2.06653 2.51786 +4.9155 5.04183 +1.34304 2.92777 +0.571315 1.17285 +8.05396 8.28214 +5.29142 6.24974 +8.93797 9.23051 +4.6108 5.45568 +6.46124 7.53124 +3.16695 4.37505 +2.76803 2.82764 +4.1531 4.84927 +8.19433 9.00383 +5.12114 6.22952 +2.2542 4.74849 +0.621192 0.871537 +1.37403 2.28895 +0.305704 1.3287 +8.70471 9.53085 +2.29164 3.56607 +2.42106 3.37382 +1.14309 2.03085 +9.17624 10.3281 +1.88864 2.70161 +0.932647 1.2473 +5.72385 6.55694 +5.25496 5.38675 +5.85771 6.69626 +7.37247 7.93094 +7.73499 7.98782 +4.91417 5.27506 +3.51127 3.84403 +6.96198 7.27686 +6.51176 7.74735 +4.19954 5.08222 +1.58115 1.83842 +2.11889 2.3408 +1.94427 2.00422 +5.59977 6.86555 +9.46942 10.3491 +9.18904 10.1988 +1.71938 3.01547 +4.3515 5.4951 +2.53792 5.85188 +0.3884 1.36228 +5.02469 5.62368 +6.82402 7.72203 +-0.320478 0.821539 +0.0885656 0.248783 +3.01725 3.44385 +6.63776 7.74386 +6.57899 7.9332 +4.82656 5.18327 +3.91909 4.43955 +0.0708319 0.101395 +2.59796 4.22775 +-0.433109 1.26978 +-0.434274 0.624336 +3.22018 4.25282 +4.63351 4.776 +8.889 9.56332 +5.35952 5.46531 +8.73832 9.22756 +2.03432 2.34194 +0.477994 1.43353 +1.2029 2.86844 +5.09945 5.76855 +8.89076 9.01771 +5.30284 6.31732 +1.56375 3.17543 +5.4773 6.36897 +5.30934 5.35073 +7.20096 7.7075 +6.51046 7.12888 +9.37127 10.0531 +-0.0484323 0.348687 +1.83241 2.2143 +8.28633 8.60462 +2.51014 3.65817 +3.27798 3.58685 +1.41567 2.23302 +7.50794 8.10378 +-0.0579575 2.10373 +-0.856005 0.96621 +2.96238 3.48434 +1.36304 1.90594 +2.9997 3.41214 +7.2763 8.087 +1.69207 2.74419 +5.41625 5.83917 +9.22139 9.53794 +1.17477 1.51576 +6.74597 7.90871 +0.678913 1.73759 +5.70863 5.7214 +8.88411 8.93377 +3.44409 4.54586 +0.958963 1.53878 +8.29904 9.3867 +2.52433 3.60238 +8.16257 8.21986 +2.11395 4.23455 +6.85451 7.40364 +0.20286 0.639736 +2.05848 2.49034 +0.547013 0.77336 +7.83609 8.11903 +2.16539 2.29286 +3.94232 4.31368 +8.53475 8.54519 +4.77462 6.4158 +4.08395 4.68214 +1.56902 2.23811 +1.61337 3.11768 +1.51181 1.65521 +0.0821202 2.09269 +4.77622 5.16243 +4.62148 5.75837 +0.613158 0.952696 +1.89128 3.04792 +7.57509 8.92834 +2.70465 4.2941 +4.95906 5.12442 +8.0927 8.17277 +0.796512 1.3215 +5.74134 6.45291 +9.68479 9.78978 +5.89261 6.2292 +6.11377 7.9339 +2.20571 2.67129 +3.46228 4.27058 +5.26723 6.2653 +4.04391 4.26562 +0.380382 0.818995 +7.58108 7.7618 +5.02375 6.13042 +4.20178 4.66297 +2.83039 3.0221 +2.36072 2.45545 +6.68854 9.20726 +2.91388 3.42464 +9.33373 9.73449 +7.75844 7.94625 +2.72414 2.89669 +6.65438 7.96623 +1.00647 1.05385 +2.63018 4.9432 +0.152187 1.60259 +8.86332 10.3631 +2.31523 2.6815 +8.00509 8.61794 +1.69711 1.75938 +8.65442 8.73697 +4.23917 4.32001 +9.66851 10.1925 +6.93943 7.49814 +8.51986 9.03561 +2.10317 2.5175 +0.539549 1.75683 +6.29423 7.93236 +8.64345 9.54556 +1.44069 1.6814 +9.10017 9.77088 +6.16731 7.40496 +0.570043 1.93192 +2.65761 3.88544 +1.46895 1.52688 +-0.369067 0.540647 +2.04868 2.72065 +2.1286 2.27858 +5.90157 6.16431 +1.55581 2.51851 +3.29705 3.81635 +3.4137 4.10991 +8.48699 10.1364 +8.43437 9.4642 +-0.037842 1.47589 +0.541735 1.7805 +0.499576 2.36065 +4.1415 4.72435 +4.77598 6.16872 +3.30388 3.61854 +6.43796 7.85966 +5.27157 5.70871 +0.919258 2.18653 +4.00961 4.07902 +3.78201 4.23596 +4.50464 4.791 +3.70253 5.30916 +8.59228 8.70036 +4.31103 5.69049 +5.31775 5.34378 +2.24198 2.64194 +6.66937 7.41675 +7.21753 8.42057 +4.35399 4.52398 +6.90698 7.30084 +3.44296 5.44378 +3.36719 4.89951 +3.38624 5.33856 +3.44877 3.53693 +5.81398 6.3016 +7.24655 7.33127 +3.86142 4.53134 +3.85894 6.88112 +6.45704 6.95699 +6.90997 8.24088 +5.68813 5.7611 +0.699911 0.824323 +6.73758 8.42517 +9.34644 10.07 +0.289929 1.30554 +8.30644 8.49113 +6.47667 7.16073 +4.28093 4.90236 +8.32678 8.57064 +7.09205 7.92316 +5.55599 5.63919 +1.0104 2.22875 +1.72237 3.53668 +2.54699 3.14823 +-0.668582 1.25485 +1.25582 1.37003 +1.35044 1.57807 +6.17083 6.30811 +0.618816 1.20065 +-0.540992 1.21634 +2.06673 4.28857 +9.03398 10.8112 +8.73735 9.22814 +1.30178 2.7599 +6.0221 7.34889 +8.30124 8.52159 +1.92023 3.34545 +2.99331 4.93358 +3.8412 3.93379 +1.455 2.77005 +0.538664 2.1118 +4.16926 4.26053 +0.699746 0.937609 +6.36024 6.6511 +2.34698 4.84463 +8.11109 8.76496 +4.05425 4.67773 +8.2284 9.78568 +1.64423 1.80353 +5.70109 6.93764 +7.2091 9.67224 +4.47015 5.23311 +4.29326 5.36144 +7.93151 8.96494 +4.61889 4.96487 +5.38473 5.43594 +9.35456 9.66489 +1.23737 3.04121 +1.16077 1.19519 +5.91037 7.55679 +6.88344 7.60181 +6.39705 8.65039 +1.61791 2.93041 +9.68285 10.1396 +9.03129 9.05839 +7.0683 8.29875 +7.19624 7.41696 +7.5266 8.38738 +-0.254571 1.01098 +1.30218 2.03222 +7.6432 7.73031 +4.99495 6.04757 +2.79394 3.29394 +0.31505 3.55963 +7.55382 8.18787 +6.00032 6.27664 +1.49355 1.79767 +5.21191 7.19537 +3.47816 3.75801 +2.10272 2.39494 +1.31887 1.93829 +7.14313 7.63055 +7.3141 7.77239 +6.03409 6.17265 +4.24946 4.53165 +0.0569272 2.56109 +8.44766 11.4872 +4.22879 4.28007 +6.92817 6.98775 +8.08859 9.0206 +-0.0748418 1.48605 +6.56698 7.0488 +4.46624 5.4952 +3.66085 4.05778 +6.44711 8.93943 +2.45735 2.49339 +0.0606673 0.416191 +-0.183838 0.750464 +7.08561 7.67275 +6.65423 6.90808 +0.0598735 0.364072 +5.2228 5.41543 +3.14042 3.19043 +2.40069 3.02829 +1.80441 2.1849 +3.47491 3.95775 +5.49162 6.63934 +2.03332 2.32288 +3.17234 5.25109 +2.58274 2.59951 +9.37994 9.97097 +4.71509 6.77966 +5.18915 6.84982 +6.12508 7.04354 +0.811202 1.98808 +1.46825 3.66984 +2.44386 4.15623 +7.60169 7.68242 +-0.43208 1.22222 +5.40569 5.66153 +0.391742 1.79408 +6.77742 8.43115 +9.12828 9.3851 +6.39541 6.80626 +5.17919 6.29326 +6.57263 8.12999 +3.439 4.62236 +8.40525 9.80086 +7.60986 7.70099 +1.32123 1.44213 +0.526574 1.92338 +9.57195 9.79591 +9.52103 9.63159 +3.79775 4.20608 +4.74446 4.89606 +9.00085 9.60025 +1.26279 2.08363 +4.13639 4.49232 +6.59409 7.18315 +1.0637 1.78425 +5.4213 6.87661 +4.24407 4.30987 +9.79732 10.1204 +4.24597 4.83541 +8.47705 8.5145 +4.34095 4.93842 +5.68168 6.96086 +7.48654 7.91072 +8.32005 8.45111 +5.24065 5.3032 +3.25982 3.94442 +5.58106 6.18764 +4.4243 5.58619 +6.36467 7.07082 +2.70051 3.56014 +5.94534 6.87688 +7.33638 7.7645 +4.57067 5.86652 +7.83993 8.36854 +9.03617 9.11629 +7.44672 7.95614 +6.05876 6.3594 +4.02496 4.97119 +3.01438 4.36109 +7.4932 7.92357 +7.51661 7.53354 +7.60692 8.49678 +1.76088 2.59103 +7.08578 7.39566 +4.83605 5.42933 +-0.186592 0.847663 +1.15879 2.33996 +8.11815 9.35472 +6.02584 7.62549 +0.881084 1.00015 +5.39067 6.27026 +0.910755 0.97444 +5.32174 5.65652 +7.69388 8.24928 +3.40521 3.7615 +5.60321 6.92388 +8.25096 8.34324 +0.00108913 2.16897 +0.508035 0.66573 +-0.0517816 0.0876197 +3.26472 4.30955 +1.99494 2.14903 +2.089 4.32368 +5.17378 5.75964 +2.8779 3.54361 +6.56459 6.90645 +1.43196 2.88337 +1.48917 1.94009 +3.40807 4.25784 +8.0334 8.13458 +8.22254 9.6175 +2.96308 3.14349 +5.04768 5.71252 +3.9977 4.72614 +1.44384 1.60782 +7.78147 8.19817 +7.03854 7.50085 +5.90747 7.06091 +2.89169 4.31831 +2.46167 3.16529 +9.13228 9.1504 +2.57975 3.05313 +5.75976 6.52958 +8.10499 8.98982 +8.43162 8.76377 +0.422917 0.668254 +1.69046 2.09962 +5.50386 6.66954 +0.0897183 0.564514 +3.50103 4.1041 +3.91918 4.52559 +4.39297 6.18876 +3.90396 4.90868 +9.69362 9.85528 +6.27994 6.95062 +8.01563 9.09433 +8.25641 9.72944 +8.22072 8.35423 +1.27059 1.61352 +8.53312 8.96235 +3.49185 3.9042 +5.79579 6.046 +0.489013 1.2147 +4.00074 4.177 +2.66625 2.93036 +7.20267 9.34958 +7.44659 8.54707 +8.99915 10.1143 +7.59922 7.82031 +8.38502 9.03222 +0.160075 0.294398 +4.14549 4.3927 +9.35554 10.248 +-0.159435 0.467922 +2.17272 3.72336 +8.63811 8.79976 +4.23215 4.66461 +6.99516 8.2035 +6.45212 7.88791 +6.20141 6.28633 +7.69396 8.82204 +4.50807 5.96315 +8.51725 8.89286 +0.939492 2.12064 +7.4615 7.62666 +8.46681 9.11769 +3.92828 5.40884 +9.05622 9.40015 +0.229625 0.860838 +2.05694 2.52113 +-0.217927 0.574255 +9.55146 10.3256 +8.31497 8.3417 +3.52833 4.47013 +7.7131 8.52058 +2.15462 2.66777 +5.7674 6.17553 +3.3358 4.10589 +2.06642 3.00412 +2.43387 2.85242 +5.09473 5.84276 +7.3287 7.54846 +4.64254 5.11465 +4.05785 4.93614 +4.25413 5.43513 +2.96476 3.15378 +3.53732 4.48239 +2.34137 4.01272 +2.24879 3.40626 +3.43323 4.49055 +0.871415 1.33068 +0.508929 1.65611 +4.92057 4.94743 +7.03376 7.35193 +5.73043 6.47264 +7.82417 9.93642 +5.24102 5.9178 +2.38528 4.1676 +6.27437 7.19631 +9.29267 9.53262 +4.10098 5.24964 +0.383714 0.833317 +5.97628 7.92987 +8.15799 8.96819 +8.1687 8.29862 +8.16289 10.5149 +7.38205 7.89765 +3.81883 4.15607 +9.46915 9.61755 +1.50756 1.51863 +2.34236 2.84689 +0.398473 1.15027 +1.05302 1.49155 +8.71687 9.35232 +1.0502 1.40395 +7.83685 8.76302 +7.7731 8.46899 +5.56618 5.97458 +2.90035 4.12043 +6.40644 6.68706 +3.95201 4.37075 +7.1831 7.67748 +9.42789 10.0914 +5.45198 7.01256 +8.64609 9.45756 +6.01864 6.31515 +7.64621 8.65533 +5.45654 5.76553 +2.04332 2.75476 +5.49454 5.85693 +6.13688 6.21927 +2.66255 2.7385 +4.8326 6.43772 +9.12704 9.45287 +-0.294488 0.318697 +2.26979 2.35516 +4.12949 5.58506 +3.01416 3.62246 +6.64697 7.10221 +6.44307 6.82985 +4.10484 4.73148 +7.42589 7.6029 +5.33055 5.50395 +2.46474 3.05847 +5.43677 5.59206 +2.13807 2.3988 +-0.38424 1.8121 +0.00916704 0.219304 +8.62621 10.2262 +3.33927 4.51169 +5.45656 7.13165 +5.29253 6.57917 +3.51704 3.9421 +8.63729 9.13361 +3.92626 4.3469 +6.83104 7.52695 +1.22258 2.28191 +0.447646 0.789809 +7.96543 8.54328 +2.24269 2.42571 +4.4161 5.40481 +0.813992 2.21792 +0.694664 0.974182 +6.50017 6.88902 +4.00723 4.65882 +9.05784 9.85062 +6.80276 6.98196 +0.105446 0.379881 +0.416982 0.53336 +9.01269 9.55204 +3.27197 4.23315 +6.7017 6.89704 +4.21512 4.42378 +4.86735 6.90949 +4.52235 5.36878 +2.62205 3.55746 +-0.551048 0.555476 +1.63274 2.71251 +4.26739 4.88085 +8.23129 9.77405 +2.49409 3.96851 +6.66387 6.88886 +7.72383 8.90611 +3.18511 3.27281 +0.73722 1.64435 +7.90329 9.02868 +6.94845 7.06773 +0.509461 1.54928 +4.63885 5.51652 +9.24395 9.5121 +1.00007 1.57161 +5.31349 5.45437 +0.929284 1.71034 +7.05985 7.63288 +7.38418 7.45373 +4.14937 6.5167 +7.49989 8.6081 +9.28313 9.57721 +4.41285 5.1497 +2.96148 3.09221 +1.58256 1.66419 +4.45116 5.43488 +5.70927 7.11699 +3.61105 3.93153 +5.92285 6.63773 +3.50065 4.48453 +7.97338 8.96464 +0.541394 0.965435 +4.46469 5.03925 +7.33695 7.6484 +9.64234 9.6938 +4.16378 4.17886 +7.10741 7.31549 +1.51829 2.62477 +2.1892 2.9684 +9.23767 10.0462 +7.87649 7.97087 +7.05385 7.85952 +6.91232 7.50277 +6.60185 7.81572 +2.27112 3.90211 +5.74452 8.2018 +6.25117 6.26911 +0.525893 1.53447 +0.392956 0.959233 +3.51591 4.71055 +3.10449 5.41156 +7.35964 7.65642 +2.89831 3.54334 +3.42338 3.68259 +4.75496 5.51419 +3.8792 4.48395 +2.18007 4.13236 +3.15798 3.16864 +8.91248 9.21598 +8.54636 9.34037 +7.93697 9.79709 +6.40205 8.9653 +9.67332 10.2252 +4.31771 5.25423 +7.27485 7.3725 +6.22971 7.11411 +1.16538 2.16762 +1.40443 1.6876 +3.14915 4.58847 +7.13761 8.72165 +4.38448 5.88699 +7.98309 9.19449 +8.491 9.05597 +5.55043 6.19359 +2.44006 3.36071 +9.56522 9.79903 +1.86129 2.00225 +1.65239 2.11478 +7.59392 8.4655 +2.44709 2.68538 +6.80932 7.04694 +8.8212 9.4182 +0.276845 0.956468 +8.17008 8.5538 +0.77864 2.06897 +6.78458 7.68692 +0.504907 2.67518 +5.56963 6.9058 +3.42691 3.5414 +2.52065 2.71583 +5.09924 6.26696 +0.223724 0.610039 +3.61258 5.29324 +0.388393 3.11131 +2.87763 4.45415 +8.26438 10.1169 +5.89742 8.17506 +1.89686 2.66651 +5.33662 5.68228 +3.37496 5.67291 +2.25713 2.36127 +0.402185 0.716342 +6.4231 6.79227 +3.22707 4.69314 +7.85092 8.77413 +3.31322 3.72455 +5.43021 7.7167 +8.5883 9.00864 +1.21371 1.71836 +6.35584 7.9706 +5.44438 5.50414 +5.31325 6.11217 +6.08888 6.78794 +7.70604 8.13257 +1.29858 2.48753 +5.54083 6.38817 +8.23948 9.82646 +7.5575 9.0224 +8.00415 9.39763 +0.488455 1.55358 +4.48727 5.20741 +6.46648 7.02349 +0.355939 0.611119 +9.4892 10.2189 +2.61893 2.82832 +0.268193 1.24687 +3.01964 5.19554 +6.29954 7.42795 +8.70796 9.48366 +5.39307 6.64597 +2.47001 2.60746 +5.30949 7.46529 +6.07973 6.16835 +0.764507 1.6144 +7.94123 8.52143 +1.88244 1.96592 +6.42103 7.02205 +7.673 7.73208 +6.66891 7.80675 +6.9305 7.5431 +6.62335 6.93873 +4.34846 5.77621 +0.49878 2.82928 +2.65221 2.80109 +7.45348 7.74372 +4.10129 5.26894 +3.87782 4.19855 +4.62113 5.22658 +2.84558 2.88185 +2.53209 2.86065 +8.94932 9.21967 +6.48046 6.89614 +5.81885 6.66829 +6.49129 6.62015 +8.5663 9.58685 +2.43346 3.89849 +9.36561 9.45886 +1.40232 2.65 +6.66 6.74041 +2.87007 3.49668 +4.71138 6.0184 +5.03638 6.08494 +7.77735 8.14253 +1.0301 1.27179 +2.58337 4.04699 +6.95419 7.89775 +7.81164 8.62551 +3.37669 3.96217 +4.68541 5.58692 +4.79697 6.34841 +3.95334 4.81962 +9.44006 10.0941 +4.91098 5.12386 +8.44273 10.1565 +3.6685 3.73156 +5.07599 5.33357 +-0.138235 0.260923 +2.71154 3.45603 +5.75096 6.16127 +4.4775 4.64308 +6.80557 8.97442 +5.49408 5.76652 +8.31937 9.12886 +3.26479 5.51673 +2.57425 3.03145 +2.42465 3.92714 +7.86505 8.50835 +3.29229 3.43549 +4.08537 4.69709 +7.83885 8.60616 +1.61622 2.72716 +9.10228 9.41907 +8.49325 9.46612 +-0.174644 0.351716 +1.95648 2.14825 +8.28844 8.4428 +4.35888 5.59521 +5.1396 5.22537 +0.330835 0.879566 +6.14972 6.82967 +3.14811 4.89049 +-0.231668 1.08277 +3.13526 4.94545 +8.32674 8.91046 +5.22364 5.48006 +9.84318 9.88416 +-1.07813 1.6965 +1.5095 2.0328 +8.03716 8.2792 +-1.01307 1.46703 +8.22096 9.0055 +8.9917 9.0415 +5.60623 6.74537 +3.15991 3.19314 +3.13863 3.26451 +0.739618 0.896958 +0.67599 1.18486 +3.37355 4.06303 +0.38605 0.410067 +3.03297 3.46387 +3.45867 3.79806 +8.67249 9.53278 +-0.213855 0.787363 +1.52316 2.61117 +8.31846 8.59736 +4.84685 4.94042 +7.41901 7.82623 +4.99029 5.09747 +5.3637 5.37612 +3.22123 4.77749 +3.21668 5.74743 +3.48748 4.59962 +8.00016 8.56269 +1.63631 2.42239 +1.05159 3.72319 +7.22643 7.95706 +5.65694 5.99195 +9.4469 9.66915 +0.857984 1.59867 +4.05869 5.69955 +2.65788 3.07259 +1.8038 3.38748 +3.91934 4.89922 +6.18534 6.70342 +2.85076 3.20176 +8.1897 9.9614 +0.685531 2.05322 +3.31097 4.00809 +8.26537 8.63475 +2.90508 4.07797 +1.25213 2.31285 +3.05752 4.03741 +-0.481913 0.605629 +1.87958 2.19386 +7.28689 7.76316 +4.82075 5.20688 +-0.08115 0.31839 +3.50085 5.89363 +1.31184 3.30269 +4.03137 4.81493 +6.11688 6.13923 +7.93584 8.43321 +4.9838 5.3733 +3.8174 4.11979 +8.56196 9.02824 +2.87809 3.89589 +7.95309 8.05432 +3.47469 3.63716 +6.61009 7.12576 +8.87374 9.79588 +7.31513 7.99089 +5.78084 6.68535 +4.96985 5.59877 +2.20236 2.52473 +0.661014 1.11035 +6.36183 6.58403 +6.67947 6.85093 +-0.242005 0.513902 +0.442966 1.72024 +6.4587 6.74016 +6.67958 8.0837 +8.98524 9.56405 +6.91409 7.59877 +3.73596 3.97705 +5.51193 5.96437 +3.72029 4.50126 +3.09896 3.23616 +8.83312 8.91774 +0.32173 0.486199 +4.21092 4.59955 +2.61616 4.07081 +1.89049 2.65559 +4.96401 5.00629 +9.33156 9.70914 +3.72455 4.61054 +8.91265 9.6563 +7.12401 8.04324 +6.65393 7.25572 +1.04032 1.24927 +3.0174 5.56006 +1.47645 2.26867 +3.49833 4.37416 +6.16877 6.34452 +6.47417 6.90595 +4.27056 4.92535 +7.60439 9.35352 +0.426219 0.754405 +8.5291 8.68579 +5.84717 6.64632 +1.99513 2.5284 +5.10669 7.83064 +6.99006 7.37272 +0.871836 1.5934 +3.6572 4.38875 +0.154617 0.290737 +5.91634 6.50415 +5.33982 5.45293 +6.92602 6.94691 +0.349512 1.61427 +8.02048 8.99943 +5.75598 7.34946 +5.86948 6.51327 +5.11707 5.6181 +6.27656 7.10043 +8.48922 9.73833 +8.35863 8.69746 +6.67829 7.07852 +8.51257 9.50383 +3.76636 4.33757 +4.82804 5.57166 +5.17892 5.61254 +1.35188 1.94069 +6.04969 6.06833 +5.34181 5.82455 +5.71714 6.71234 +0.966462 2.56278 +7.95169 8.15951 +6.53583 6.89673 +6.73246 8.34493 +8.71111 9.76467 +7.53215 9.56537 +0.619041 0.736713 +9.24399 9.50151 +8.57184 9.88538 +2.82682 3.77294 +4.2649 4.84602 +8.6621 8.96426 +8.04469 8.3189 +7.81877 8.42944 +2.78031 5.16589 +1.23076 1.43577 +8.35385 8.49632 +3.27901 3.66774 +0.595941 1.41354 +3.37123 5.16685 +9.11003 9.95515 +-0.25959 0.32069 +1.44153 1.70148 +1.61595 1.70799 +7.8201 8.53423 +8.5402 9.36947 +8.39125 9.8221 +6.2909 6.35773 +0.000933745 0.920054 +-0.21358 0.491025 +4.00874 4.03866 +3.43552 3.55874 +7.85942 7.98987 +7.6681 8.06748 +6.19541 7.14765 +8.53891 8.96393 +2.38789 3.26866 +-0.0162847 1.18379 +1.04764 1.52755 +0.400798 0.55475 +6.32001 6.94897 +5.9692 6.2012 +1.20784 2.67873 +3.58247 4.46372 +-0.229647 0.559407 +5.65979 5.73489 +2.32795 2.78462 +0.706144 1.55147 +4.56527 4.6636 +5.98901 7.20908 +9.27329 9.95152 +1.31296 1.70529 +5.82933 6.41329 +4.17452 5.29881 +4.15885 5.25117 +0.35549 1.3511 +1.0591 2.4463 +8.87597 9.55625 +6.66826 8.57255 +0.355945 1.40613 +5.39729 6.10218 +3.78791 4.37501 +9.53885 9.87184 +2.67568 2.82552 +4.44836 4.52939 +5.96764 7.40168 +6.35578 6.98546 +0.636857 1.19517 +3.3986 5.55448 +1.46493 2.66884 +-0.0676901 1.80921 +7.83396 8.53452 +8.3508 9.04561 +4.03407 6.0066 +0.997538 3.30635 +7.83064 8.03466 +4.57652 4.97461 +3.85952 4.15471 +0.960261 2.1069 +0.522458 1.52989 +8.81627 9.00768 +0.172256 1.29455 +5.69294 6.15752 +6.86391 7.75307 +2.32429 2.95415 +1.83191 1.90364 +0.400855 0.705649 +5.23264 5.39972 +5.19047 5.79842 +2.40804 2.89401 +0.462887 1.43874 +6.70213 7.90229 +4.37985 4.95797 +3.73768 4.30645 +0.756797 2.11146 +0.458724 0.472099 +3.93098 6.47147 +5.5294 6.00365 +2.97106 3.42174 +5.75875 5.80235 +7.96799 9.02105 +5.36254 7.22823 +6.56124 7.39973 +9.49234 9.57879 +2.87576 3.59509 +3.49182 4.28124 +8.68021 9.94486 +9.60199 10.1276 +9.70115 9.81776 +3.09609 3.98732 +5.00113 8.15031 +5.21248 5.74835 +9.23337 9.5696 +2.92777 3.56297 +2.52044 3.04905 +4.79908 5.05762 +1.98626 3.69659 +4.78726 6.20637 +7.39711 7.42831 +4.44319 4.78716 +9.28452 10.0832 +8.00774 8.85707 +9.22947 10.0523 +4.38653 4.86012 +5.15285 5.23106 +8.95413 9.75947 +2.90286 3.32407 +0.348694 1.39738 +-0.0660432 0.293424 +4.09079 4.2922 +6.0407 7.23031 +2.83771 3.72237 +8.54697 9.38898 +2.16742 3.45018 +8.83255 9.30343 +3.59112 3.6531 +7.53452 7.81898 +7.11781 7.19773 +8.2892 10.0259 +4.91072 5.06031 +5.8232 7.25924 +7.0641 8.31604 +9.477 9.63892 +5.8003 6.58306 +9.63988 10.2754 +0.654364 1.02398 +5.9488 6.85043 +7.86867 8.99891 +9.202 9.46902 +4.17932 4.20271 +6.50328 6.71085 +7.19848 8.15579 +5.62459 5.75449 +-0.159668 0.791409 +7.55683 8.7315 +1.03278 1.423 +0.751457 0.808785 +6.2203 6.50634 +1.64418 2.98238 +6.87468 7.00652 +6.36966 6.7117 +7.69893 8.89535 +0.419794 1.05032 +2.73928 4.31548 +0.409245 1.55228 +6.03905 6.39323 +0.409695 0.789834 +4.39148 4.40935 +1.14673 3.23607 +5.85562 6.44503 +6.87394 6.88742 +3.761 4.35136 +7.2208 8.01436 +6.49839 6.54002 +4.70791 5.91886 +4.24906 5.96619 +2.53482 3.91496 +-0.369254 0.69193 +4.81351 6.31088 +9.76066 10.0736 +1.4413 1.55942 +7.21917 8.88908 +6.03521 7.56826 +1.25568 1.42024 +5.47575 6.04431 +1.43099 1.99979 +5.1004 6.04088 +6.54798 6.56118 +1.0142 3.1564 +1.75267 2.1453 +1.28133 1.36044 +9.60996 10.0563 +1.14397 1.50247 +6.86688 7.08724 +8.38287 9.18041 +0.132076 1.27657 +6.52553 6.9301 +0.223917 1.41325 +1.18902 1.79753 +1.40084 1.75678 +1.94524 2.51929 +1.98276 2.62875 +0.763281 1.05483 +7.97952 8.51249 +1.059 3.05463 +5.33401 5.85094 +8.37442 8.64374 +6.62865 6.67315 +1.01707 1.64386 +0.113335 2.23523 +6.71906 8.00216 +-0.886574 1.29366 +4.20078 4.85294 +8.43336 9.06988 +3.55413 4.40768 +6.69076 9.01132 +6.18982 7.14109 +7.14381 7.7046 +8.63195 9.47031 +8.88052 9.84886 +3.34443 3.62637 +4.5862 4.72832 +4.95757 5.23571 +2.85993 4.04966 +1.43846 2.27425 +5.43112 6.30496 +-0.452609 1.55525 +7.17706 7.71287 +5.78537 5.79579 +8.51102 8.9466 +-0.472904 0.810489 +3.83688 4.24045 +8.04432 9.04582 +1.57259 3.37136 +1.22231 1.33582 +5.73006 6.26477 +2.90855 4.22125 +9.39717 9.4287 +3.63873 4.16094 +0.442035 2.08889 +0.294491 1.31124 +3.14755 3.86305 +6.57634 9.44898 +2.19051 2.41878 +4.99277 5.12569 +4.10425 4.9423 +4.83547 5.62769 +5.73879 5.78179 +8.90329 9.81905 +5.60168 6.17538 +5.83843 6.66128 +1.84271 2.57406 +3.01047 3.33662 +2.85037 3.79158 +3.49007 4.46877 +8.58942 9.51529 +0.613753 1.12824 +8.23757 9.54707 +9.27134 9.4196 +6.27126 6.56417 +2.17206 2.33018 +3.53588 5.17162 +8.6312 10.0868 +5.76342 6.66164 +9.01501 9.90984 +3.22004 4.18954 +4.37918 4.68595 +2.00928 3.49815 +6.64229 7.06693 +2.85962 4.58794 +8.45587 9.8897 +2.8481 3.65956 +8.65849 8.67336 +6.48486 6.58637 +5.82336 7.45254 +4.02267 4.59696 +2.24997 2.83815 +8.16201 8.55518 +7.40645 9.07085 +1.43137 1.50333 +8.7212 10.9419 +1.50523 2.44124 +1.92455 2.85819 +4.50866 4.53052 +5.75781 5.81275 +1.71013 2.0282 +9.31592 9.9015 +6.14972 8.18798 +1.85705 2.20068 +4.80971 5.10509 +3.31201 3.58168 +8.61824 9.31861 +7.19497 7.86933 +3.25381 4.53472 +5.62799 6.29537 +9.00659 10.021 +9.15156 9.74827 +2.0324 2.80741 +0.714403 1.00476 +1.26522 1.80417 +-0.362995 0.41758 +7.08785 7.71544 +5.55685 5.74045 +0.428866 3.03773 +7.61574 8.94894 +9.07256 9.69772 +4.49537 5.06822 +5.66388 6.48899 +1.69126 2.69607 +9.90539 10.0783 +6.56455 8.27128 +6.61988 7.86616 +7.42012 7.64493 +2.99922 3.35282 +4.69379 5.18947 +0.87894 1.30518 +9.47632 9.61234 +0.665754 0.855958 +-0.422778 2.11197 +3.38786 4.15441 +7.57236 8.75855 +1.89832 3.50224 +-0.185929 1.0777 +3.32911 5.53465 +6.91111 8.69247 +6.97456 7.86905 +4.75518 5.0948 +4.23733 5.83368 +8.52456 8.56086 +0.0978267 0.136564 +7.4668 7.99757 +5.52851 5.80858 +8.5833 8.88589 +5.10603 6.41348 +4.70682 6.59981 +8.60265 9.19477 +5.04514 6.24014 +4.49041 4.88669 +7.40925 9.15624 +0.80364 1.35315 +7.11604 8.01153 +0.267749 0.714089 +0.121521 0.822226 +9.30556 9.81307 +2.11398 2.92567 +5.97722 6.08022 +7.13483 7.22211 +8.00161 9.27274 +4.87681 5.51654 +3.11843 3.84311 +5.17747 5.98482 +3.6077 4.46306 +1.37454 2.2443 +4.93385 5.96357 +2.92184 4.0964 +4.88767 5.56353 +2.87394 3.76336 +0.326521 0.622872 +2.42056 2.45007 +-0.527891 0.827211 +6.73151 7.20155 +1.82048 2.54905 +1.35563 1.88701 +3.64202 4.10669 +5.22846 5.23953 +6.06271 6.46993 +2.71418 3.2081 +6.41179 7.57176 +7.45823 7.79609 +1.01227 1.39137 +9.0872 9.20132 +5.083 5.64038 +5.63236 5.97945 +-0.317645 0.822313 +0.865396 2.65587 +5.71839 5.98983 +1.50978 2.08611 +2.95824 3.70996 +0.264301 1.02233 +8.22351 8.98589 +4.87805 5.24127 +2.31329 3.46752 +6.19539 6.69676 +5.18643 5.40947 +7.15453 7.66643 +1.20694 2.25111 +7.87378 7.89093 +5.16514 5.604 +8.68354 9.01395 +7.33753 9.37499 +2.94627 4.06036 +8.64337 8.85727 +0.0353092 1.0128 +6.98437 7.35718 +6.77073 6.79959 +3.13559 3.70735 +7.40139 8.27017 +4.01174 4.39788 +3.22281 5.11647 +7.79256 8.58737 +0.642233 1.39694 +7.18603 8.69453 +3.37803 3.59355 +0.762287 0.84262 +4.21823 4.52565 +0.894924 1.35434 +0.844327 1.19938 +5.57958 7.05431 +-0.631066 1.55134 +3.78962 4.17935 +9.15329 10.4824 +5.47536 5.52975 +8.81243 9.16088 +4.45989 4.94123 +8.68235 9.45112 +8.04719 10.3938 +8.87349 9.40483 +0.502543 0.570283 +2.08512 2.47652 +-0.654512 0.804355 +3.68569 5.21711 +5.33017 5.80226 +3.44991 5.31415 +-0.00417763 2.95077 +7.17784 7.9318 +1.2721 1.31642 +5.24415 5.64173 +2.79434 3.28746 +4.54991 6.49276 +4.74707 5.12555 +7.36365 8.15777 +0.913049 1.79828 +1.47498 1.83425 +2.64271 3.38567 +4.78159 5.44718 +7.6087 7.66442 +-0.484393 0.909893 +3.16824 3.23757 +4.43021 5.90284 +4.25954 4.74995 +6.58742 7.24125 +1.86151 2.27069 +3.16459 4.5945 +1.06471 2.08965 +3.31028 3.83029 +1.52593 2.47521 +0.703789 1.42451 +1.47969 1.68923 +2.92352 4.24089 +9.84088 9.93485 +3.18205 4.27817 +7.39345 7.78945 +3.78808 5.41572 +4.38624 6.75693 +6.93065 7.16977 +1.01289 2.19807 +3.37006 3.54196 +5.50238 5.58285 +-0.225113 1.99347 +1.67796 1.86943 +6.1999 6.35102 +3.80494 4.74814 +1.13294 2.02639 +1.1965 2.6548 +-0.284453 0.856092 +4.26565 5.02196 +9.66948 9.88874 +6.20287 6.25528 +4.38154 6.65806 +3.77411 4.3075 +5.77177 6.78486 +9.16311 9.816 +3.22861 3.42009 +3.36573 4.34724 +6.76951 7.58025 +4.83813 5.23042 +3.87192 4.37372 +5.56859 5.90066 +-0.368163 1.4593 +5.44031 7.81671 +2.66342 2.99253 +6.11846 7.69499 +4.98811 5.17531 +4.45078 4.67513 +4.88206 4.94128 +2.51813 3.0268 +0.461292 1.15264 +2.34766 4.48652 +0.198819 2.23425 +6.85634 6.98248 +0.912438 1.81872 +4.84933 6.34912 +5.15613 5.82891 +0.172772 0.994083 +3.37381 3.64549 +1.98836 3.2697 +1.64344 2.06049 +0.766585 3.09305 +7.8979 8.28046 +4.34856 5.01341 +6.69809 7.24239 +5.19034 7.04959 +5.3747 6.92123 +7.8893 10.1251 +6.11207 6.99125 +5.37115 6.84111 +9.04786 9.11002 +6.45326 6.64415 +-0.76294 0.92832 +0.980411 1.8166 +3.05536 3.50031 +6.10827 7.55786 +6.57848 9.06264 +7.66855 8.861 +4.80276 4.82283 +1.99932 3.2877 +9.45229 9.80653 +0.457474 0.778684 +5.44444 5.95239 +5.60974 8.05169 +7.64656 7.79632 +6.78372 7.65134 +6.93878 7.82023 +9.08292 9.55308 +9.16329 9.25802 +1.4909 2.38688 +4.31881 5.3564 +5.12535 5.60119 +2.44591 2.54637 +7.36929 7.80452 +2.13707 2.97655 +9.73557 9.94588 +1.96637 3.36097 +0.857068 2.29643 +5.58224 5.91142 +8.90714 9.0255 +9.77988 10.0711 +0.41121 0.970955 +-0.518356 0.91447 +7.58725 7.71255 +8.1435 8.78712 +6.5487 7.17991 +4.94961 5.50283 +8.14086 9.03281 +3.51281 5.24806 +3.5786 3.84066 +6.27435 8.37735 +8.65263 9.5555 +2.87484 3.56117 +5.57707 6.55879 +-0.111276 0.264178 +3.60894 4.15477 +2.82322 3.64397 +8.40669 9.1127 +8.43089 10.5298 +1.38472 2.2453 +1.74464 2.00472 +4.01588 4.67572 +0.408869 0.938602 +2.06155 3.46067 +4.4871 5.08963 +2.4435 3.87355 +1.32864 2.55801 +4.78579 5.26122 +7.43027 7.57749 +6.90971 7.32716 +8.01095 9.46872 +9.41627 10.524 +8.83143 10.4474 +0.631816 1.75513 +1.72965 2.17123 +-0.513239 1.1886 +6.75616 6.7984 +2.49278 4.26493 +0.230011 0.966298 +3.78506 4.95013 +2.03886 3.14808 +7.87309 10.5637 +3.54564 3.58055 +1.91974 2.9194 +4.8503 4.98668 +4.66494 4.83558 +7.57916 8.24358 +4.78743 5.38547 +2.81034 3.34534 +1.00297 2.0138 +6.87593 7.17736 +3.93157 5.0655 +3.10361 4.05519 +8.22876 8.38326 +7.48377 8.31026 +2.23106 3.4905 +0.130934 0.606709 +1.22344 2.55898 +7.55829 7.92597 +4.10977 4.86263 +0.122756 0.264176 +3.8357 4.15854 +1.28414 2.13031 +0.280029 0.805504 +2.88245 4.1704 +5.57936 6.94781 +6.22719 6.33201 +-0.761013 1.16475 +6.16636 7.12566 +2.98935 3.192 +2.23263 2.34362 +3.9082 4.11692 +2.66865 3.5275 +1.87676 2.43966 +4.60035 5.39332 +2.74287 3.73097 +2.81953 3.96666 +5.73644 6.04042 +4.02179 4.52419 +3.26438 4.07346 +1.22509 2.13719 +7.91885 9.71846 +1.28152 1.48079 +7.97918 9.26344 +8.75682 9.8677 +7.25678 7.45362 +8.16161 8.87066 +1.21873 2.37224 +7.76739 9.06346 +3.89932 5.03406 +3.53901 4.37006 +2.93795 4.04333 +6.36543 6.72985 +4.72622 4.98804 +1.86205 1.99008 +0.784581 2.05264 +0.978519 2.91723 +3.9067 6.47195 +0.735425 2.38151 +8.37394 8.41609 +6.91804 7.23374 +9.39259 10.1026 +7.28732 7.43466 +4.75982 5.44264 +6.71504 7.53933 +2.17125 2.54358 +0.703562 1.39087 +-0.221711 0.541965 +9.22839 9.39159 +9.53465 9.97585 +1.44304 2.53666 +7.886 8.85051 +9.33174 10.1632 +2.60898 3.42889 +1.73658 2.02589 +6.31651 6.77762 +7.26755 8.34499 +9.01312 10.9837 +7.47361 8.96251 +7.98365 8.02586 +1.40065 3.44891 +9.44617 9.55391 +8.24265 9.34849 +9.366 10.4216 +0.375354 1.17522 +3.37114 3.38278 +-0.742469 1.07634 +4.29988 4.81879 +4.18605 7.21928 +7.41047 8.29198 +6.68173 7.60225 +3.24292 3.30695 +1.8951 3.42167 +3.97359 4.2857 +4.72621 5.80575 +4.75014 5.02239 +6.43454 6.94568 +7.16601 8.10355 +2.16685 2.23666 +6.70852 8.63284 +8.16988 8.95848 +0.277002 1.30648 +1.5803 2.28632 +2.22634 2.34679 +0.200623 0.814959 +5.27457 6.51651 +2.49533 2.90705 +6.48922 6.69528 +8.18879 8.63551 +2.75159 3.633 +0.884853 1.56434 +1.87488 3.98951 +4.24783 5.17713 +6.22499 6.56095 +5.68238 5.99272 +3.75553 3.85012 +4.87543 5.39966 +6.62671 8.72493 +3.50262 4.05131 +5.38952 5.4974 +7.84971 7.94051 +5.39123 6.66564 +5.43986 6.17256 +7.48968 7.7677 +4.2685 4.57296 +1.75169 4.11058 +5.03634 5.16102 +4.68003 4.84715 +8.36249 9.98761 +8.94297 10.6969 +6.21572 6.24305 +7.90303 8.0672 +7.90426 8.41244 +5.98512 7.93187 +5.13297 5.27136 +6.58367 7.4971 +4.72663 5.22956 +7.99667 8.59246 +4.3303 5.92188 +1.3132 1.80875 +7.70104 9.20947 +1.78862 2.00473 +9.63678 9.65571 +-0.264416 0.318054 +2.70004 3.40777 +2.74642 3.73608 +3.6494 3.6743 +8.03113 9.22851 +1.07526 1.3116 +4.05436 5.33291 +4.60907 6.03605 +7.83426 9.10358 +2.27997 2.77309 +5.63139 6.92616 +4.40717 5.25214 +1.98986 3.5062 +2.42393 2.9584 +1.94336 3.08456 +1.20185 3.01827 +0.641733 2.10095 +7.25046 8.29391 +0.640392 1.26451 +3.9588 4.85492 +6.83036 7.41101 +6.48581 7.08757 +6.48734 8.47856 +9.55084 10.3774 +-0.173137 1.26574 +2.32702 2.58775 +2.7463 3.13914 +7.86951 8.62807 +5.96916 7.92759 +0.217046 1.70373 +1.04207 1.05755 +4.79058 5.07902 +4.19024 5.35395 +9.00175 9.83715 +8.37554 9.275 +4.5204 4.82999 +3.49936 4.75519 +7.07916 7.74619 +6.66726 7.35282 +7.39513 8.55523 +7.50381 9.60708 +1.39304 2.26927 +2.84101 4.76376 +1.21779 1.59353 +4.7893 5.70143 +9.12195 9.57131 +5.40461 6.15443 +2.86445 4.26837 +8.01324 10.9082 +2.96659 3.8042 +2.4897 4.59323 +6.37887 7.15878 +7.00143 7.6419 +3.22491 3.41843 +1.22852 3.31783 +2.09881 2.56121 +4.43205 4.67051 +4.39328 4.66715 +2.38355 3.39058 +0.638802 1.59399 +5.32717 5.81376 +8.00353 9.72007 +8.77281 9.81649 +8.95552 9.86609 +2.90915 3.96556 +3.88176 4.93124 +6.45945 7.69942 +-0.108577 1.57424 +0.304992 0.320561 +6.47789 6.5515 +1.98211 2.05312 +6.2741 7.35626 +9.45057 9.67918 +5.2916 5.48037 +0.158802 0.712187 +6.42002 6.84323 +9.11085 9.13063 +9.42446 9.95882 +6.03624 6.96469 +9.2473 9.6286 +7.10342 8.71163 +3.34072 3.35187 +7.4602 8.58506 +8.7963 8.81873 +0.323615 2.22687 +0.326746 1.76681 +2.20062 2.76862 +7.55181 7.85006 +0.941035 1.28117 +8.76643 9.60019 +9.19731 9.33092 +6.0479 6.57293 +6.12725 6.24356 +7.53078 8.92488 +3.1841 3.48283 +1.85544 2.01888 +7.3849 9.29183 +5.03915 5.27721 +4.77142 5.46282 +-0.291696 1.14641 +1.61367 2.20867 +5.31853 6.69431 +2.52731 3.13139 +4.86677 5.18106 +4.50183 4.60969 +5.95881 6.09964 +2.41939 4.42026 +6.92003 7.17891 +4.29584 5.48557 +8.02803 9.06315 +2.82326 3.49599 +5.8647 5.87561 +2.38814 3.62688 +6.32418 7.17662 +5.99907 6.5059 +3.84698 4.14446 +9.80728 9.82132 +5.2366 6.30871 +9.81878 9.91004 +1.53024 1.83525 +2.98035 3.68531 +4.5418 6.98786 +5.19561 5.9846 +0.946068 1.46672 +3.26948 4.71928 +6.13476 7.68682 +8.36934 9.65072 +6.40074 7.14762 +1.01349 1.80493 +8.4514 10.25 +-0.180382 0.682704 +1.03041 1.63565 +5.64642 6.96069 +2.73598 3.67485 +5.8705 6.66157 +4.68343 4.7176 +5.83787 7.6818 +1.42529 2.234 +3.73726 4.19241 +5.38341 5.81884 +1.13088 1.69073 +0.968034 1.98828 +1.06007 1.11039 +3.50129 4.51807 +5.83133 6.77904 +-0.334945 1.29129 +0.326706 1.16015 +9.15028 10.4391 +5.13047 6.79712 +1.06952 1.38997 +5.79345 6.49898 +7.88149 8.5143 +8.00404 8.09794 +8.22725 8.28904 +6.38406 6.61356 +6.32166 6.73458 +7.17066 7.32049 +1.64338 3.79327 +7.92135 8.55568 +7.15578 7.42231 +6.70701 7.65427 +5.76608 7.63064 +3.54163 4.08662 +3.81402 6.76906 +4.5998 4.61865 +9.01471 9.18718 +5.21234 5.73335 +0.946018 1.39917 +6.99714 8.29739 +5.64458 6.93965 +3.39809 5.70907 +6.32284 6.83604 +8.50347 8.53097 +3.90118 4.85721 +9.41198 9.62076 +4.41514 5.55152 +7.69979 7.81249 +5.34434 5.37105 +7.25274 7.76114 +7.67383 7.92718 +5.82851 6.29417 +0.935651 1.2842 +0.639586 0.786771 +6.39823 8.31226 +3.67546 4.89035 +9.20323 9.57287 +2.33896 2.99576 +8.51933 8.80243 +0.983098 1.11084 +8.48215 9.42998 +7.29586 7.3914 +2.00695 2.89046 +2.60909 2.62433 +2.04118 2.92033 +7.60386 9.01419 +7.32896 7.73342 +9.51693 9.54891 +5.1323 5.24962 +6.35326 7.18302 +2.50952 3.51872 +3.4149 3.57431 +9.18412 10.4976 +5.68123 6.42697 +5.87758 6.0124 +6.3202 6.64588 +8.2547 9.98176 +5.50949 5.7854 +0.0824268 0.128178 +2.17292 3.76233 +7.22786 7.68214 +5.09326 6.4151 +4.30171 4.86688 +2.39206 3.47399 +7.95152 8.35556 +2.40133 2.936 +2.77819 3.87516 +3.252 4.33376 +9.54269 9.7513 +6.6747 6.73043 +0.611474 1.97158 +7.65864 8.53689 +1.58345 1.8017 +2.56917 2.8152 +8.5424 8.8301 +4.98159 5.44499 +5.82482 6.03578 +3.55509 4.90785 +5.77028 5.94747 +0.163965 1.1379 +2.85039 2.94261 +4.24343 4.67273 +3.22636 4.06084 +6.03662 6.21018 +4.55495 5.07697 +1.91173 2.51739 +6.54894 7.24036 +5.55502 6.92676 +0.245707 0.586188 +2.28044 3.29563 +4.71378 5.25198 +8.28953 8.44891 +9.42282 10.179 +5.0548 5.73614 +6.3203 6.43659 +6.54178 8.82077 +3.67181 4.17365 +8.51445 8.96445 +1.69648 2.84524 +0.194222 0.920147 +2.48533 2.59803 +1.66002 1.6739 +4.79833 4.95404 +1.09801 1.11009 +6.62529 7.4066 +8.0099 8.37262 +3.55429 4.11824 +6.2666 7.12137 +7.83222 8.01342 +9.37156 9.72961 +1.1647 4.04434 +4.50719 5.09068 +3.25175 3.75482 +8.28659 9.30848 +7.30009 8.60755 +-1.12073 1.21016 +0.310087 0.725712 +8.3746 9.13511 +9.11925 10.2234 +9.68703 9.7137 +0.603098 0.844291 +5.88373 6.99327 +0.852802 1.43297 +3.7463 5.82283 +7.69639 8.25446 +-0.337322 0.977113 +8.76606 9.16618 +3.43527 3.6616 +3.93587 5.39471 +5.66569 7.20462 +5.34999 5.7193 +3.25589 3.706 +1.52012 2.55985 +4.74228 5.43725 +5.15323 5.51652 +7.77237 8.33717 +-0.0514419 0.914127 +9.27182 9.59476 +8.14192 9.74859 +6.42702 7.20331 +7.51351 7.68358 +7.0947 7.46059 +7.97635 8.59449 +2.39931 2.66008 +5.79481 5.94673 +4.41054 4.81613 +2.72202 3.61239 +2.86039 3.44719 +1.81115 3.28151 +-0.566995 0.734214 +9.61998 9.72024 +7.4163 7.61821 +0.42522 0.552659 +3.17617 4.36942 +0.740294 1.36953 +7.13755 8.39966 +0.219186 0.892588 +3.78307 5.2905 +0.783026 1.76155 +3.01893 3.33055 +3.12143 3.5713 +-0.792679 0.92539 +0.668572 1.12961 +3.88619 4.30545 +7.59276 8.1776 +4.71509 5.05622 +6.53406 7.04242 +1.581 2.21984 +4.7144 5.51372 +2.76338 3.50211 +0.16364 0.293599 +5.92365 6.10636 +3.11174 4.29165 +5.49295 6.48717 +-0.503239 0.795707 +7.30558 8.12408 +2.10674 4.13456 +7.11985 8.01932 +1.34672 1.48739 +4.05778 5.69084 +2.83686 2.9115 +6.4471 6.53909 +0.467374 1.84371 +2.76467 2.94177 +4.87867 5.33932 +0.892878 1.96273 +1.13934 2.27205 +7.76918 8.39409 +6.72181 7.43901 +7.0836 8.68472 +7.12924 7.56332 +0.689172 1.62922 +9.41146 9.91043 +0.398265 1.27579 +6.29966 7.4874 +5.09438 5.65334 +6.04623 6.4687 +5.75305 6.89731 +0.308118 0.459501 +3.63692 4.30501 +3.1755 3.71009 +7.32787 7.52785 +2.23235 4.09978 +2.71191 2.91513 +0.209457 0.840713 +7.31489 7.38296 +6.21245 6.91111 +5.75983 5.96049 +5.92056 8.24518 +-0.354452 0.489638 +4.05894 5.34828 +1.56299 1.57414 +2.85083 3.27455 +8.78323 10.0012 +0.208502 1.26471 +6.10824 6.79285 +5.55114 8.03968 +6.13077 6.32342 +7.34865 7.82592 +3.94835 4.75016 +7.8268 8.72249 +4.85131 5.07903 +5.40398 6.0134 +2.85971 3.85293 +0.126379 1.45545 +3.15768 4.28388 +9.64566 9.70016 +4.47514 6.31064 +6.44995 7.2894 +4.70992 6.13777 +3.91128 4.22263 +7.35627 8.07739 +2.49215 2.68749 +8.09946 9.16929 +0.925679 1.92784 +8.48437 8.63892 +7.2255 9.18109 +-0.00840282 0.0168954 +5.91933 6.6274 +4.16086 4.64302 +8.27009 8.47868 +1.73372 2.93094 +8.17421 9.17705 +9.19136 9.43222 +0.0653594 0.648416 +8.69 8.96184 +8.99355 9.40832 +6.25088 6.26945 +6.72391 7.38424 +9.59708 10.3496 +6.00971 6.18818 +4.64468 5.75797 +3.64832 5.30079 +5.99378 7.8792 +6.5388 6.99379 +7.31694 8.43802 +3.66227 4.92638 +9.55964 10.3796 +-0.14433 0.29095 +3.56716 3.71252 +3.82062 4.27788 +8.10405 9.35275 +7.17891 7.46539 +1.17698 1.29602 +4.48829 5.03134 +7.18025 8.13852 +9.42388 10.3634 +5.2158 6.17469 +5.22926 6.52397 +5.16731 6.40625 +6.53348 7.269 +2.07834 2.39172 +9.65044 10.1519 +8.64551 10.1294 +9.29006 10.5993 +1.50639 2.83173 +5.71675 5.99216 +3.0783 3.35571 +0.115401 1.31431 +8.03988 8.11942 +3.11917 4.53956 +1.14552 1.1646 +5.34782 6.43017 +0.0701702 1.0368 +0.183335 0.440704 +6.33438 7.71607 +2.11533 2.64323 +7.12104 7.13366 +7.21548 8.26968 +3.13445 4.13568 +4.57452 4.74602 +2.60889 3.69846 +7.21184 7.47573 +6.87651 7.03405 +2.65431 3.94352 +1.50006 1.70087 +6.16344 7.54429 +7.02057 7.73067 +8.27833 9.01489 +0.500833 0.597845 +8.34751 9.88925 +2.80242 2.91837 +5.29424 6.079 +8.36276 9.10074 +0.216887 0.268335 +1.30798 3.16393 +3.93851 4.22658 +2.58028 3.14744 +9.31131 10.3451 +7.37262 8.84852 +4.45306 5.6723 +3.74535 4.0721 +4.90174 5.63875 +3.41847 4.65199 +3.10265 3.82548 +6.56126 6.97557 +2.57449 2.95098 +7.97418 9.06301 +9.2203 9.66829 +4.64922 4.96305 +8.83034 10.115 +6.6685 6.89847 +7.36585 7.48669 +8.66761 9.39287 +0.562216 0.961875 +7.56292 7.81006 +8.50715 8.95572 +0.572825 2.24755 +5.9367 6.06766 +-0.769578 0.776163 +4.48224 4.9553 +8.21069 9.29643 +8.57206 9.47175 +1.10032 1.21371 +3.76306 3.87152 +6.46197 8.18457 +6.96501 9.70727 +3.42357 3.93484 +0.818601 2.42743 +-0.119739 0.397938 +-0.378761 0.523892 +8.03394 9.35409 +3.60283 3.98864 +2.21789 2.70607 +-0.255329 0.319063 +6.20806 6.22609 +7.1283 8.04391 +3.73565 4.03638 +8.5374 9.10987 +5.22675 5.35072 +7.51777 7.58439 +9.12636 10.4159 +9.15003 9.40672 +0.217863 1.19883 +9.42416 9.9178 +2.55337 3.8088 +7.03655 7.98242 +9.17171 9.8047 +0.110162 0.722738 +3.16467 3.58897 +6.47244 7.12961 +1.0456 1.65614 +1.58456 1.62844 +1.79039 1.84035 +6.24286 7.07838 +9.08631 9.11684 +3.05068 3.40838 +2.81212 4.03665 +2.52011 3.09841 +8.06001 8.16356 +7.07649 7.52685 +2.47666 2.86548 +8.66241 8.95103 +-0.298116 0.662697 +0.822443 2.46125 +2.07619 2.33674 +4.84135 6.21034 +7.49625 8.13026 +7.85854 8.29618 +3.01722 3.37062 +6.54393 7.30306 +2.21113 2.30166 +8.32138 8.57349 +6.2995 6.33514 +3.0018 3.56886 +4.63378 5.52214 +6.71908 8.96715 +2.29809 2.95581 +8.34947 8.71096 +4.96902 5.32075 +9.51051 9.72733 +3.311 4.77789 +3.50233 3.66309 +4.95177 5.76002 +6.12876 7.22391 +6.27743 6.79393 +3.60638 3.6833 +5.20305 5.50848 +7.16065 8.88358 +9.45049 10.2539 +6.16892 7.0314 +8.08479 9.74516 +0.0717867 0.669987 +2.17569 3.34098 +4.81716 5.7509 +7.63999 8.01157 +5.87228 6.60363 +3.39621 4.35575 +4.96079 5.07901 +7.57639 8.82003 +8.27285 8.52609 +0.665858 1.64782 +1.74256 2.07126 +6.19512 6.4258 +0.664592 1.30896 +0.180682 1.43746 +6.46752 6.81303 +2.55562 3.08708 +9.33695 9.63312 +6.33821 6.77092 +7.88252 8.55026 +8.17937 8.45385 +-0.415294 0.793096 +5.22077 5.54553 +8.67808 9.10041 +1.72096 1.92024 +0.492778 1.48076 +2.29514 2.88531 +0.0934389 1.37614 +8.40297 9.11121 +3.66605 3.91717 +-0.274468 0.867811 +9.41428 9.56659 +1.22657 2.12792 +8.71336 9.85384 +5.09347 5.42905 +2.02877 2.36652 +5.99112 7.40703 +0.911618 3.48138 +4.84352 5.11131 +1.16309 2.08613 +5.58561 5.84805 +0.663543 1.08921 +1.83189 3.93269 +4.07731 4.38879 +4.04789 4.9989 +2.09457 3.61279 +2.00982 2.94396 +7.37537 7.66574 +5.08648 5.80122 +9.19959 10.2263 +4.26136 4.86194 +6.67875 7.61134 +1.27462 2.48399 +7.2237 7.82324 +-0.0141009 0.0441377 +8.32069 8.36192 +2.82562 3.0717 +-0.528918 1.25301 +1.90486 3.04714 +1.34489 1.75301 +3.14332 4.03322 +8.55351 10.8681 +9.09824 10.3828 +0.496868 0.622499 +7.11112 7.62765 +0.335233 0.528962 +6.71335 7.13937 +6.78574 7.71172 +9.13568 9.22251 +7.10299 7.64765 +3.64747 4.06685 +8.64041 9.40111 +2.43515 2.93081 +2.95476 3.68588 +0.0863751 0.777976 +6.5891 8.18165 +8.80986 10.0735 +0.568868 1.63785 +4.41677 5.42049 +8.72857 9.88426 +3.67467 4.25442 +8.98168 10.1087 +5.08611 5.50098 +1.28982 2.34422 +-0.914176 0.969847 +4.35042 4.42735 +4.02282 5.08164 +9.00566 9.4791 +2.71821 3.24065 +3.20252 3.24988 +8.61559 9.6733 +3.15157 4.7685 +3.59348 4.67872 +0.286864 0.36279 +8.40374 10.528 +7.53647 8.13523 +6.81591 6.90226 +7.68111 9.10704 +8.37958 8.73818 +3.25808 4.40893 +1.50348 3.00641 +0.20803 1.40949 +3.93771 4.84177 +2.79232 3.35329 +4.2666 4.63588 +0.341784 1.46241 +1.53063 2.06724 +8.58212 8.86194 +8.95411 9.70651 +8.71591 9.26292 +6.66088 6.7009 +3.95881 5.93917 +8.5823 8.76007 +-0.308958 0.34174 +1.03188 1.37677 +7.52675 9.84031 +4.27952 4.32984 +1.83465 2.27607 +8.12096 8.64922 +2.22605 4.40067 +0.00929139 0.871342 +0.376531 1.29354 +3.5257 4.30165 +1.95846 4.09589 +-0.200922 0.799272 +0.24432 1.76673 +4.73477 5.06514 +8.97059 9.2276 +2.89618 2.93969 +0.168256 1.03325 +3.44522 3.83622 +2.74889 2.76042 +6.07155 6.7979 +9.06484 9.09804 +7.56658 9.29215 +4.3084 5.45621 +-0.0786996 1.12809 +8.48249 9.74107 +6.4196 6.61469 +1.57119 1.87612 +3.15463 3.86251 +2.0089 2.57741 +6.53618 7.12035 +7.07901 7.29396 +0.114756 0.887413 +8.90806 9.65731 +4.0921 5.23407 +2.63441 2.92344 +4.31769 4.98832 +8.90336 9.26837 +8.25313 8.91204 +2.87758 4.00212 +-0.708243 0.789072 +3.28656 4.55872 +5.73177 5.80293 +5.40596 5.5844 +4.09318 4.57774 +6.16178 7.00613 +8.5514 10.5495 +6.83987 7.3056 +1.06341 1.97923 +7.82153 9.00722 +0.923069 1.42337 +1.83408 2.82331 +5.75305 7.23576 +0.241909 0.96721 +1.16645 2.10491 +5.41819 6.09839 +7.49242 7.69495 +0.347233 0.383681 +2.33245 2.53467 +4.91249 5.27759 +8.11182 9.2758 +0.0955456 0.548659 +-0.359909 0.48055 +1.64759 3.47097 +6.37855 7.40015 +0.423283 2.08857 +4.10068 4.46856 +2.58389 2.69626 +0.848483 2.72258 +8.67321 8.88903 +2.07607 3.42398 +3.11033 3.80741 +2.24735 3.48626 +8.11883 8.7687 +0.29959 1.41603 +4.84924 5.13641 +1.44102 1.74592 +1.13437 2.50296 +1.75876 3.09859 +4.75363 5.90838 +7.36423 8.20074 +5.51578 6.42652 +0.915633 1.86015 +9.44679 10.3479 +2.61691 3.60215 +6.26524 7.2538 +2.74326 3.12649 +5.83934 6.98592 +9.1111 10.4891 +2.27066 2.82709 +8.19359 8.67233 +0.834236 1.7066 +6.19288 7.21392 +-0.249843 0.891821 +2.5652 3.25132 +5.25356 5.88905 +3.99545 4.18918 +1.93186 2.51527 +4.44621 4.82421 +5.89181 7.36963 +2.77321 3.60627 +2.76444 3.88016 +2.50062 2.66105 +1.14846 1.66146 +2.951 4.81656 +3.81976 4.01061 +4.75674 5.59916 +6.74092 7.08289 +2.09989 2.32514 +0.220723 0.865303 +5.48107 5.71875 +1.48372 2.88941 +0.484577 1.12051 +8.93618 9.7185 +1.89769 3.65655 +2.0129 3.55214 +9.23173 10.3694 +0.286189 1.22753 +0.453785 1.55541 +2.24068 2.6541 +8.80917 10.4969 +7.12801 7.15222 +9.25745 9.9103 +5.73429 6.76901 +7.54454 8.47157 +1.96008 3.74997 +8.00837 9.25665 +1.66384 2.07613 +5.53014 5.97461 +-1.32495 1.33319 +4.58479 5.2263 +7.92048 8.75668 +6.87595 7.02522 +0.157713 0.389585 +7.48277 7.51261 +8.10714 8.38399 +0.0802723 0.587088 +1.13024 1.71135 +5.71769 6.84757 +3.08261 4.31054 +2.95952 5.09762 +6.62815 7.44256 +5.0805 5.8499 +3.38489 3.73265 +1.10644 2.18331 +4.70493 7.31686 +2.2253 2.6338 +0.778359 1.6265 +6.94211 7.2149 +4.20976 4.99342 +7.47792 7.67881 +7.06219 8.76137 +4.97677 6.12206 +6.30829 6.69361 +6.19977 6.76781 +9.67636 10.2172 +3.41958 3.69137 +0.374486 0.943711 +4.00837 4.80107 +8.85401 10.1325 +6.0938 7.8919 +1.51055 3.08998 +8.94594 10.3139 +1.06714 2.65511 +0.703202 0.850595 +4.87735 6.00659 +8.3067 8.39924 +7.78071 8.3155 +1.98737 2.81116 +6.86323 8.07974 +1.03479 1.34584 +0.490512 0.670211 +5.82122 6.1901 +5.50836 6.63385 +7.9192 8.9606 +0.913719 2.18983 +4.97151 5.70909 +4.19907 4.37712 +2.01188 2.63318 +7.84813 9.3771 +5.32667 7.48502 +8.50951 10.1006 +-0.551637 0.930509 +1.06511 2.23353 +1.91111 3.42663 +9.37528 9.55327 +7.27975 7.38741 +3.46676 4.83165 +7.36137 8.70333 +-0.295762 0.623228 +8.48558 8.81076 +2.71689 3.41873 +6.49265 8.11042 +5.25516 5.57336 +6.10462 7.05991 +8.76997 9.15164 +7.86196 8.30651 +7.82765 9.24604 +5.98573 6.34182 +6.45367 7.47857 +3.27018 5.10835 +1.3079 2.37423 +-0.261387 0.338113 +7.60683 8.81791 +4.7346 7.41988 +5.25597 5.28517 +3.76704 4.52226 +3.91774 6.66976 +5.69618 8.92667 +1.86148 3.07531 +5.57404 6.51438 +9.39049 9.77921 +2.38692 4.21416 +6.84909 7.23633 +7.2379 7.58761 +4.73485 6.11606 +7.80013 8.08105 +1.72701 3.40244 +2.44475 4.4072 +9.72565 9.77726 +3.35288 4.06493 +8.91215 9.92325 +8.67991 9.65865 +0.253195 0.764339 +4.23564 5.59497 +1.84752 2.14986 +-0.502957 0.528737 +1.32656 2.11347 +9.81563 10.0213 +7.60114 8.05035 +8.51797 8.83342 +-0.394604 1.41267 +7.71614 8.63514 +0.530249 0.968898 +2.90463 3.01675 +7.58098 8.71658 +-0.253747 1.28827 +1.832 2.39006 +7.2268 7.27225 +3.84076 4.66703 +2.2564 2.73185 +7.31508 8.46008 +4.99387 5.64948 +7.21239 7.79983 +7.60231 7.8473 +0.555482 1.41892 +1.25539 1.73665 +8.41561 8.96404 +5.06771 5.17664 +0.0655744 2.10718 +8.00222 8.65909 +7.48841 7.83609 +6.30909 6.89448 +9.1697 9.55942 +1.36259 2.22582 +-0.923854 0.994771 +3.43724 4.64053 +8.09411 8.19574 +4.84869 5.52805 +2.69802 3.4119 +9.0613 9.29405 +0.565216 0.687165 +5.93495 6.57426 +1.86925 2.75493 +1.41068 2.00824 +1.60612 1.62471 +3.11499 5.89909 +2.69806 3.90538 +3.76301 4.22135 +3.30065 4.70725 +5.56461 7.02137 +8.35335 8.99287 +4.79259 4.88508 +6.7911 7.52912 +8.14843 8.28583 +3.67629 5.06406 +5.71462 7.04747 +9.06721 9.99733 +4.87932 6.8586 +8.00814 9.57664 +7.03069 7.51623 +9.0989 9.57644 +2.70873 3.91296 +1.64425 1.7007 +6.53716 6.99033 +8.29874 8.74509 +1.88941 2.57626 +4.65337 5.23247 +9.04723 9.06665 +3.52258 3.61496 +1.1207 1.80143 +0.680601 1.98384 +2.94593 5.38692 +2.65685 2.67932 +9.00469 10.2054 +6.44318 7.2657 +4.66656 5.33893 +3.41719 4.72453 +3.12403 4.21748 +6.67973 6.81775 +3.54347 4.14978 +3.02554 3.50812 +3.91883 3.93657 +7.31721 7.89895 +1.86275 2.85473 +6.23266 6.4449 +7.59855 9.38013 +9.07084 9.49309 +0.557656 2.6851 +6.899 7.37693 +4.23162 5.84314 +8.54108 9.37672 +3.9513 4.79746 +7.299 8.29678 +5.58879 5.88551 +9.14992 9.22385 +9.1914 9.31788 +4.95663 5.56316 +2.16516 2.39538 +0.722262 1.89664 +7.76447 7.80026 +2.77772 3.39136 +9.59513 9.78635 +1.02728 1.2181 +7.32631 7.56611 +7.37389 7.46163 +6.87949 8.18689 +8.95602 9.81169 +5.85364 6.63434 +0.129136 2.13484 +7.09608 7.71167 +7.1487 8.34258 +7.48738 8.3172 +8.77247 9.95985 +7.6706 9.56828 +8.14268 8.61726 +6.5455 7.90871 +4.57866 4.78453 +3.63937 4.42349 +5.18905 5.36516 +4.68884 5.62995 +5.88338 7.83824 +-0.002979 0.145818 +4.42981 4.77141 +0.558593 1.07999 +6.91713 7.36159 +5.13948 6.20805 +3.34368 4.07112 +7.27365 7.8383 +9.6898 9.9514 +6.14332 6.75102 +2.16534 2.78843 +2.8007 4.37952 +7.67047 7.72955 +8.77377 9.85092 +1.26087 1.55193 +6.29788 6.58511 +7.68178 9.05777 +0.383336 1.21247 +2.55185 4.30874 +8.91971 9.21836 +3.67638 4.68596 +8.13843 9.13684 +-0.424353 1.97502 +2.71499 2.93977 +0.104447 0.387901 +4.09592 4.67009 +0.808593 0.920798 +5.01258 6.30662 +4.97668 6.57412 +8.44135 9.03816 +2.78932 3.72809 +6.71337 7.15128 +4.27234 4.50127 +6.78266 9.70351 +6.48026 7.51491 +7.36296 8.42283 +4.80339 7.3704 +6.24735 7.3132 +0.134626 0.364187 +2.73854 4.09422 +0.809997 1.19657 +6.41154 6.50244 +7.16847 8.56485 +1.53582 3.33985 +1.92874 2.86427 +6.95941 7.01378 +5.8592 6.54917 +2.51802 2.75622 +3.3894 3.6957 +2.2547 2.64693 +8.62054 9.1951 +8.86378 10.0003 +1.87892 2.28732 +3.83146 4.21484 +1.53262 1.99692 +7.86048 7.93125 +1.79437 2.68269 +3.92781 4.24119 +5.43044 5.47935 +0.322904 0.618854 +3.42383 5.18531 +4.00989 5.83612 +7.06304 8.76582 +5.88039 6.77654 +8.638 8.9479 +1.73391 2.09002 +1.04861 2.84779 +-0.313019 0.557659 +3.35245 4.1308 +9.05373 9.57205 +5.85684 6.49193 +6.00719 6.86421 +4.25244 4.65772 +5.15865 5.61529 +8.78498 9.77544 +8.33803 9.26452 +3.42915 4.92279 +8.29884 8.94035 +5.10232 5.35924 +4.33571 4.86695 +7.86184 7.90029 +7.34345 7.36214 +0.201624 0.800371 +9.05882 10.5503 +4.32188 5.03154 +-0.0456982 1.22298 +2.90921 3.60013 +1.69306 2.36564 +7.79029 9.15059 +4.65205 5.06538 +6.34552 8.32176 +7.92695 9.32585 +7.17903 8.09903 +9.53561 9.60287 +0.365723 1.23929 +0.542889 0.849053 +8.15061 8.93512 +6.40042 6.41053 +5.82666 6.5488 +1.00893 1.83717 +1.76021 2.11893 +7.61076 8.6242 +2.32513 3.4856 +4.39023 6.01094 +-0.11754 0.421848 +6.76371 6.94513 +4.67607 5.58732 +-0.201992 0.765553 +7.42926 7.44429 +2.57485 2.85339 +2.74138 4.13421 +8.21645 9.18107 +6.28184 6.4996 +7.129 7.74678 +7.76842 8.74924 +3.5359 4.35892 +3.04103 3.24376 +2.29389 2.92164 +6.96306 7.64415 +8.82053 9.04584 +1.19911 2.06167 +5.91357 7.6773 +0.150241 1.23291 +4.48681 5.41762 +6.89156 8.13443 +5.37828 5.79944 +2.13694 2.91102 +1.35932 2.08272 +6.14309 6.23278 +4.03202 5.88521 +7.23417 7.43704 +1.2501 2.60793 +2.12334 3.65727 +7.05722 8.77078 +0.437873 0.585933 +6.33338 9.16643 +2.44724 4.40234 +2.92012 3.64047 +1.2039 3.25195 +8.6611 10.0398 +8.0088 9.13622 +5.96562 7.08515 +5.45181 6.65246 +0.742546 2.38958 +4.12919 4.93571 +0.428823 0.84483 +1.45226 2.5869 +9.50727 10.0211 +7.69194 8.66273 +1.25706 2.44554 +5.23247 5.47762 +0.499178 1.70722 +7.26569 8.72467 +3.59815 5.50022 +1.03601 2.43445 +0.092414 0.927635 +3.7917 3.995 +6.21977 8.40398 +3.1513 3.81188 +9.80482 10.0951 +8.65564 9.33687 +2.06164 3.49152 +2.09754 2.34929 +0.66126 2.31888 +5.34832 6.82603 +7.91038 8.59105 +0.695523 0.800961 +2.33406 2.71629 +8.37774 10.9253 +9.7682 10.106 +9.44382 9.5743 +8.78009 9.47645 +1.87309 3.04127 +1.86724 2.13913 +3.30049 3.52416 +7.18508 7.6648 +1.3736 2.12153 +2.41879 5.06716 +1.87815 2.29743 +1.76646 2.06335 +9.73034 9.95475 +0.497489 0.686102 +6.96908 7.17338 +9.23111 10.0148 +3.30981 4.21787 +9.53311 10.3734 +-0.067709 0.147251 +8.44557 8.82047 +7.10407 7.47639 +0.834352 1.36908 +9.1598 10.6508 +4.22018 4.38279 +3.8295 3.95462 +3.97302 4.97247 +1.55856 2.31013 +0.0217962 0.486978 +1.69845 2.65786 +-0.489562 0.582187 +5.10621 5.6055 +9.8478 9.85919 +6.15389 6.92324 +7.11469 8.0418 +3.20625 3.78209 +5.93389 7.66892 +1.15134 1.18023 +6.84797 7.4239 +2.9483 3.22279 +-0.43205 0.764755 +7.17846 7.33313 +5.4729 8.26894 +6.19512 7.32132 +0.591934 0.767568 +0.49266 1.80691 +9.08272 9.72242 +5.85683 6.36905 +5.27625 7.13913 +3.60853 3.98155 +0.642811 1.10253 +1.27117 1.5329 +8.76096 9.61776 +4.9498 5.12847 +7.53282 7.80438 +1.40487 1.65657 +3.45329 3.84307 +3.25698 3.49614 +2.38651 2.89802 +8.23114 8.99016 +9.58516 10.4145 +5.5185 6.27733 +0.583068 0.892249 +1.93142 2.35084 +7.94845 9.22667 +2.47963 3.9005 +3.46106 3.86301 +7.77744 8.43735 +1.41072 1.73969 +9.12904 10.4307 +3.52227 3.66861 +5.4743 5.86487 +-0.51727 1.63657 +5.09861 7.03162 +5.14763 5.93411 +3.23526 3.47376 +0.9702 1.74063 +9.28366 10.3322 +1.80257 1.92265 +8.63597 9.08467 +4.16006 4.97753 +6.37418 6.39374 +5.82376 6.62429 +7.74751 8.68962 +1.63821 2.53399 +4.9864 6.40969 +0.680772 0.995608 +3.74344 3.83319 +0.898055 1.8593 +2.36839 2.39307 +7.21046 7.51006 +0.60893 2.91523 +3.15017 4.30412 +5.02219 6.28886 +4.60541 4.73379 +8.41196 8.58978 +8.84706 10.8198 +6.95807 7.54952 +5.54729 6.9315 +4.62574 4.73423 +3.35252 3.59865 +1.02207 1.71791 +3.16408 3.73993 +0.639222 1.69519 +7.57978 8.05813 +2.41371 2.77174 +8.65544 10.093 +6.31988 6.70758 +6.5301 8.39328 +0.578825 1.20331 +1.1243 2.07824 +5.86555 6.72397 +6.37103 6.81736 +1.12086 3.46541 +2.59503 3.44073 +5.27128 5.3616 +2.87331 3.4352 +5.48408 6.67916 +3.36016 4.09125 +0.813671 0.9811 +0.812162 3.22209 +6.85104 6.86306 +0.671311 0.979685 +2.75962 2.82659 +2.42186 2.49827 +7.82974 9.59669 +3.48851 3.60085 +8.47775 10.9574 +8.6863 10.6155 +0.196484 1.07469 +1.19293 1.45012 +5.79166 6.18466 +6.51597 6.6793 +9.78341 10.1992 +8.17879 9.59257 +6.96178 8.73165 +4.09161 4.31908 +3.19514 3.4072 +5.5101 6.32978 +0.188435 1.84481 +9.41738 10.0379 +1.46994 1.6294 +4.21915 5.39529 +5.46567 5.86638 +8.19414 9.201 +4.38616 4.55193 +2.31105 2.73345 +6.05897 6.12297 +8.84135 9.74232 +9.44943 10.2225 +3.27501 3.66059 +0.524904 1.74374 +7.7228 8.43799 +5.13274 5.82863 +8.2787 8.94491 +1.61463 2.03499 +7.04346 8.69977 +0.938308 2.38676 +0.00208037 0.0186158 +1.98744 2.05864 +7.05787 8.16211 +1.68383 2.04684 +2.24812 2.28257 +0.685061 1.2947 +2.25379 2.92827 +6.0052 6.24797 +7.06213 7.86344 +0.751849 2.96376 +0.0977921 0.513746 +8.43792 9.10545 +2.80769 3.09276 +9.19308 9.59741 +4.74365 4.99708 +8.41385 8.58422 +4.28093 5.9281 +4.26205 4.75417 +1.48035 1.61363 +1.4264 1.80922 +3.48365 4.52935 +1.78396 2.96351 +8.4134 8.96536 +8.65646 9.34781 +1.88027 2.97804 +8.92531 9.02743 +6.91815 7.88895 +5.68023 7.37521 +3.93105 4.6123 +0.385874 1.30785 +1.80151 2.24385 +8.43781 9.33927 +6.69643 8.001 +6.12062 6.673 +4.8316 6.63067 +9.00443 9.08204 +1.5651 2.65023 +3.57517 4.40231 +5.85127 8.02219 +8.02586 10.018 +2.00514 2.75138 +6.32104 7.84285 +8.90914 9.78319 +4.91325 6.27817 +3.87406 4.80327 +8.57887 9.30685 +1.40351 1.71079 +-0.217977 0.224497 +8.37711 9.56393 +5.54644 5.77714 +8.18206 8.36015 +0.774967 1.97899 +9.10434 10.1721 +9.39621 10.1135 +4.80108 4.90605 +9.45978 9.96227 +2.85412 4.05215 +5.71985 7.16735 +2.35081 2.82214 +9.34881 10.5899 +7.13014 7.82872 +4.54931 4.89725 +9.41397 9.9131 +8.90226 9.55276 +8.27995 9.83651 +9.2767 9.6053 +0.388751 1.40317 +5.01478 5.88869 +6.41521 7.21754 +1.22552 1.39067 +3.75771 3.81571 +4.39362 6.04592 +8.82639 8.84544 +4.59289 4.89208 +1.52235 1.64285 +1.85893 4.52056 +1.91781 2.78253 +3.34677 4.54987 +9.26905 10.6019 +7.10958 8.02083 +0.765257 1.66957 +2.17169 2.70214 +4.2293 6.38089 +1.41111 2.45992 +5.76864 6.85715 +2.19944 2.93182 +9.03727 9.6454 +3.82652 4.35225 +2.52642 3.09725 +7.77868 9.35844 +0.337665 1.00787 +1.92021 2.04418 +4.41862 5.95486 +9.47606 9.62386 +1.12113 1.55658 +5.26701 7.09712 +8.81478 9.34863 +6.29447 7.43847 +2.82379 3.57268 +7.9735 8.79936 +3.30176 5.50666 +6.36009 6.8864 +4.13583 5.00627 +0.510514 0.882245 +6.93864 7.78543 +2.04039 2.4298 +3.18337 3.19424 +4.20059 4.67088 +0.316687 0.707377 +0.169106 1.68194 +8.26665 10.2362 +1.1124 1.78306 +2.84603 3.33142 +9.48756 9.96651 +9.4301 9.7316 +0.234674 1.23981 +0.493232 0.522565 +1.342 1.41739 +2.57196 4.08221 +1.54201 2.52284 +5.32049 6.00052 +8.54218 8.59452 +-0.030524 1.64476 +2.31645 2.72528 +4.71898 4.92827 +0.0872997 1.74969 +0.994278 1.76964 +1.34411 2.77952 +0.156817 2.10245 +5.78094 6.34389 +3.09336 3.10563 +8.14245 9.0928 +9.34202 9.75484 +9.78415 10.0211 +4.68383 5.19384 +6.09441 7.90512 +6.74941 6.76118 +1.78693 1.91697 +2.34369 2.62141 +-0.20756 0.829082 +3.57681 5.11448 +2.44234 4.45153 +4.84521 5.31902 +1.80487 3.64498 +2.46125 3.02549 +-0.334514 0.64288 +8.06406 8.49886 +1.74559 2.54474 +6.05883 6.46529 +9.00014 10.2271 +8.00064 8.5061 +0.909467 0.980765 +8.65862 8.69736 +8.11457 8.77049 +3.93237 5.02485 +4.64507 5.34852 +3.92405 4.19449 +5.02381 5.21722 +3.76203 3.78396 +6.74925 7.34781 +8.2556 8.63585 +3.92521 3.99739 +1.44641 2.31509 +0.23516 0.917239 +4.4614 6.35489 +3.33221 3.95247 +1.73289 2.07919 +6.92385 7.55052 +8.74351 9.41125 +9.41451 10.1785 +7.4001 8.81081 +2.97038 3.12524 +7.26043 7.77569 +5.56625 5.59344 +5.70977 6.33362 +7.61443 8.43218 +1.05308 1.82947 +0.377602 1.57633 +6.42483 7.51505 +4.73011 5.43693 +7.72 8.09098 +9.20063 9.82287 +6.88273 7.35327 +6.88423 7.68356 +3.55293 3.6227 +0.947096 1.76021 +3.66411 5.67117 +9.31422 10.1035 +6.84847 6.98956 +2.16221 4.45806 +0.853284 3.15932 +2.48673 2.89793 +3.37633 3.90938 +1.6141 1.66363 +1.6658 3.01723 +0.419408 1.01736 +0.712239 0.791538 +2.25249 3.62425 +8.09772 10.2367 +1.46651 1.48148 +1.73233 2.0489 +7.42679 9.23232 +7.97446 9.53281 +2.74677 4.03955 +-0.169412 0.872795 +4.90663 5.40277 +7.62122 9.49334 +6.55971 7.34259 +3.71957 5.03775 +3.33226 4.06459 +0.634912 1.52603 +3.65506 4.09318 +4.31463 4.60534 +8.58287 9.85385 +0.334759 0.7232 +2.14027 2.866 +6.06611 6.3625 +2.53013 3.18764 +4.30913 4.89247 +6.53234 6.92328 +7.66419 8.61762 +1.37598 2.26754 +8.06279 8.80692 +5.28688 5.70608 +0.509396 1.34606 +8.80589 9.29765 +9.3801 10.3988 +0.402662 0.597735 +5.87213 6.63371 +2.79136 3.763 +6.20615 7.25189 +7.54065 9.62156 +4.12107 5.04454 +5.60294 6.69246 +1.20845 1.49272 +1.75679 2.56397 +2.83939 3.85147 +6.21362 6.71341 +9.01824 9.2388 +4.66617 5.04944 +1.48766 2.55674 +8.89442 9.42175 +5.29411 5.39531 +6.66271 8.68733 +0.730461 1.42466 +6.22927 6.55086 +0.566776 1.17299 +3.06104 4.17775 +5.28026 5.73966 +5.76071 7.61585 +7.83786 9.58106 +6.32199 6.46961 +8.89555 9.17429 +3.85772 4.97805 +6.63352 8.79211 +7.87234 7.94131 +6.53479 7.87979 +3.90293 4.50376 +6.21371 7.31788 +1.00497 1.75003 +6.90351 8.02435 +2.29142 3.9809 +6.26632 6.45283 +-0.0354471 1.31727 +8.80046 9.20169 +7.86905 8.36819 +0.848737 1.82393 +7.98136 9.40712 +3.97765 4.95399 +8.70252 9.26275 +3.13412 4.29389 +2.06446 3.55839 +7.67918 8.44509 +5.96082 6.40336 +1.20461 2.36924 +4.76741 5.74978 +9.41217 9.94305 +7.36736 8.07119 +3.44102 3.56957 +3.59893 4.52751 +4.2613 6.41628 +1.65321 3.02235 +3.70067 3.86657 +0.0176327 1.1215 +4.13592 4.88595 +8.73668 9.0834 +1.80944 2.95584 +6.05721 6.93009 +5.08206 5.38626 +1.86749 1.89392 +3.58284 4.10506 +0.0885586 1.47709 +5.46502 5.93066 +8.45338 8.47878 +3.46789 4.02317 +0.975506 1.15814 +7.12758 7.60073 +7.99582 8.56746 +3.11435 3.83805 +4.51166 4.52472 +8.39096 8.75934 +8.42208 9.66019 +2.48498 4.73703 +3.50301 4.81264 +6.40196 7.0733 +8.52138 8.82265 +1.49822 1.74634 +7.08547 7.93508 +3.47832 4.42948 +6.08646 6.20865 +4.46334 4.65278 +3.80008 4.08214 +3.4853 5.44308 +5.48109 6.18681 +6.59161 8.04307 +7.36554 7.38201 +5.2144 5.31725 +4.62607 7.25804 +1.24345 1.81263 +5.49248 8.16867 +6.4056 8.26316 +7.67828 8.56923 +2.46187 2.56974 +2.22942 3.27248 +7.14933 8.06682 +2.3236 2.95462 +4.18028 4.80535 +4.981 5.54215 +7.23261 7.34863 +4.96309 6.06396 +4.24402 4.44364 +0.917707 1.32687 +1.19806 1.65106 +3.7725 5.31412 +9.70021 9.84203 +5.99824 7.77474 +3.32636 3.84266 +8.59841 9.07653 +7.9916 9.14415 +0.786519 1.84655 +0.166394 1.47834 +2.87633 3.52808 +7.53804 9.56807 +6.14406 6.16189 +1.63428 3.96845 +1.10307 1.58897 +1.30032 2.85313 +7.89803 8.32723 +8.77593 8.90136 +1.68804 2.69447 +4.5956 4.6743 +7.39643 8.29839 +6.93629 7.82243 +6.10289 7.677 +1.83835 2.34295 +1.04506 1.91684 +8.95277 9.43817 +0.36153 0.643665 +1.02408 3.18963 +4.02972 4.40301 +2.80428 2.82552 +6.51718 6.64956 +0.185341 1.56607 +6.1658 7.59364 +4.09288 4.11687 +6.90205 7.16338 +5.0755 5.39478 +4.5614 4.83286 +5.8489 8.76295 +9.70079 10.0431 +8.44334 8.54714 +3.00139 3.66327 +5.34458 6.38895 +7.11481 7.96865 +4.66776 5.15678 +0.390138 0.53352 +2.01116 3.32839 +6.78761 6.97068 +4.57477 5.0724 +1.14098 1.36134 +7.4559 8.30327 +0.700932 2.40437 +1.90469 1.99046 +4.30064 5.11485 +7.84433 8.48543 +5.96212 7.49882 +3.93055 3.96317 +0.546327 1.04814 +8.96011 9.0404 +7.89255 8.06149 +0.669924 2.6944 +-0.00972314 0.837474 +6.07199 6.37467 +2.73659 3.19833 +5.9576 7.10966 +9.1316 9.14737 +5.26101 6.59184 +5.77697 8.08876 +0.68623 0.782805 +0.842619 1.39893 +5.82075 6.15957 +4.36394 4.88479 +7.1828 7.90107 +3.3331 4.39923 +6.54243 7.24966 +2.809 2.96491 +4.18514 4.61948 +4.95453 5.33929 +8.33288 9.52867 +9.05785 10.4276 +2.58917 4.74403 +1.34279 1.89014 +4.93626 5.75424 +7.75031 7.92788 +9.00904 9.02402 +3.91286 5.15124 +6.98486 7.34688 +-0.173169 0.415019 +0.652242 1.51556 +3.50184 5.30486 +3.72563 4.09022 +4.60463 6.58985 +3.34219 4.31833 +2.55445 2.58651 +6.14573 6.3669 +4.52336 6.37342 +9.37606 9.76836 +2.4198 3.36929 +2.89109 3.66974 +5.62463 6.05989 +0.674219 1.84165 +0.590017 1.71153 +1.54622 2.10277 +6.48003 6.55663 +3.56355 3.98573 +0.743671 1.87049 +3.27833 6.0722 +4.76267 6.9967 +2.80188 4.03037 +0.372694 0.482111 +5.73987 5.9529 +8.84732 9.49033 +0.833944 1.8157 +4.06126 4.36615 +0.884619 2.34622 +6.86723 6.99141 +8.07737 9.05193 +8.35903 9.00761 +8.84777 9.74001 +8.58058 9.05479 +8.28076 8.44566 +4.55155 5.65475 +2.44314 3.38966 +3.22172 4.50395 +7.1808 7.90376 +0.639636 1.72606 +5.46807 5.94322 +9.02146 9.87864 +-0.628472 0.655557 +4.29775 5.9553 +6.77525 7.38152 +6.51827 6.93542 +8.95252 9.52939 +0.755406 1.19973 +7.69455 7.86912 +0.170143 1.12949 +7.69254 8.08221 +2.08238 3.27051 +1.28662 1.78628 +1.21208 2.79391 +-0.155739 1.7071 +8.28833 9.10011 +5.77789 6.6954 +1.98395 2.35216 +5.77469 6.05177 +2.77565 5.81092 +-1.53416 2.30576 +6.93529 8.04506 +3.91553 4.55593 +5.57201 6.29071 +1.54149 1.86613 +4.09163 4.31234 +8.47834 11.1229 +5.70376 7.02981 +2.24683 3.79925 +5.4793 6.41036 +5.27644 6.81729 +0.13273 0.371437 +1.22959 1.41618 +0.551957 1.03276 +2.01269 2.4018 +8.77113 9.09395 +8.11753 8.46262 +0.39406 0.783705 +5.35964 5.48227 +7.24727 8.23233 +7.74525 8.85748 +0.0115736 0.882607 +1.78575 2.19684 +8.32514 9.0503 +3.11074 3.34975 +0.847464 2.13237 +0.310898 0.393528 +8.68841 10.518 +1.10032 1.83755 +2.42286 3.02554 +1.16364 2.80986 +1.46419 2.11421 +7.46021 7.90273 +6.86556 7.62542 +1.91466 3.79843 +3.1056 3.83969 +3.41591 4.26565 +0.285122 1.21372 +3.75441 5.52385 +1.07643 2.63403 +6.17341 7.67244 +9.13122 9.5132 +4.39696 6.15885 +3.7207 4.07729 +6.80782 7.1958 +6.65933 6.67105 +8.51535 8.7263 +5.98305 7.17759 +2.19609 2.46108 +8.21186 8.96908 +2.94729 3.60562 +3.31907 3.9297 +0.463492 0.626603 +2.62143 3.55089 +5.76898 6.79002 +1.45502 1.56525 +4.80797 5.62389 +5.87337 6.70588 +2.92765 3.50929 +0.412987 0.951057 +3.64594 4.40269 +-0.043401 0.502176 +4.54802 5.44613 +1.20218 1.8732 +2.75547 2.96745 +7.10348 7.7945 +9.74845 9.98835 +4.83718 6.4836 +2.30563 2.5903 +4.74016 6.30789 +6.42192 6.93329 +5.37294 6.73938 +2.4365 3.05787 +1.08283 3.79193 +4.90426 5.93563 +3.8874 4.83301 +0.13909 0.983027 +4.07407 5.61421 +8.62875 10.6851 +8.10233 8.29952 +2.23047 2.4691 +7.34617 7.39475 +1.66309 2.3032 +7.11207 10.0686 +4.52412 6.38666 +2.48323 2.96878 +7.47877 8.86547 +2.67607 4.33436 +6.83659 8.21075 +2.87313 3.39011 +2.81911 4.07729 +0.227877 0.657898 +6.57843 7.14311 +-0.591405 1.56925 +7.08018 7.59 +9.09558 9.3923 +9.48544 9.79474 +0.740233 2.33129 +8.51111 11.134 +7.79219 8.0281 +1.73821 1.89316 +9.21077 9.29488 +5.38354 6.46025 +4.30403 4.5472 +0.0893758 0.919238 +7.94464 8.51053 +5.27119 6.3741 +5.22476 6.00588 diff --git a/geom_bottleneck/tests/data/ws_tests/test_5_A b/geom_bottleneck/tests/data/ws_tests/test_5_A new file mode 100644 index 0000000..51cff1c --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_5_A @@ -0,0 +1,5 @@ +7.50638 7.78005 +0.991758 2.12178 +5.18481 6.61702 +6.14703 7.08581 +4.09936 4.83024 diff --git a/geom_bottleneck/tests/data/ws_tests/test_5_A.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_5_A.pd.dipha new file mode 100644 index 0000000..be84441 Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_5_A.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_5_B b/geom_bottleneck/tests/data/ws_tests/test_5_B new file mode 100644 index 0000000..be62ed3 --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_5_B @@ -0,0 +1,5 @@ +5.8232 6.36308 +2.16066 2.48668 +2.38754 4.91418 +4.77403 5.43982 +0.291412 1.11147 diff --git a/geom_bottleneck/tests/data/ws_tests/test_5_B.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_5_B.pd.dipha new file mode 100644 index 0000000..14ca67c Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_5_B.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag1_A b/geom_bottleneck/tests/data/ws_tests/test_diag1_A new file mode 100644 index 0000000..f7f90ff --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_diag1_A @@ -0,0 +1 @@ +1.0 1.0 diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag1_A.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_diag1_A.pd.dipha new file mode 100644 index 0000000..fa4a4d9 Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_diag1_A.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag1_B b/geom_bottleneck/tests/data/ws_tests/test_diag1_B new file mode 100644 index 0000000..a167a4f --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_diag1_B @@ -0,0 +1 @@ +5.0 5.0 diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag1_B.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_diag1_B.pd.dipha new file mode 100644 index 0000000..621a55f Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_diag1_B.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag2_A b/geom_bottleneck/tests/data/ws_tests/test_diag2_A new file mode 100644 index 0000000..a167a4f --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_diag2_A @@ -0,0 +1 @@ +5.0 5.0 diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag2_A.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_diag2_A.pd.dipha new file mode 100644 index 0000000..621a55f Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_diag2_A.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag2_B b/geom_bottleneck/tests/data/ws_tests/test_diag2_B new file mode 100644 index 0000000..a167a4f --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_diag2_B @@ -0,0 +1 @@ +5.0 5.0 diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag2_B.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_diag2_B.pd.dipha new file mode 100644 index 0000000..621a55f Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_diag2_B.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag3_A b/geom_bottleneck/tests/data/ws_tests/test_diag3_A new file mode 100644 index 0000000..151d4b1 --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_diag3_A @@ -0,0 +1,220 @@ +1.391781911475341 1.391781911475341 +1.395142124726278 1.395142124726278 +1.514181227875788 1.514181227875788 +1.528291566797427 1.528291566797427 +1.585389310674157 1.585389310674157 +1.629232116709072 1.629232116709072 +1.641428662445941 1.641428662445941 +1.646998748860116 1.646998748860116 +1.652915988616469 1.652915988616469 +1.69199679556404 1.69199679556404 +1.705727462482595 1.705727462482595 +1.706819293048617 1.706819293048617 +1.720175733750729 1.720175733750729 +1.728031840308488 1.728031840308488 +1.73797421040929 1.73797421040929 +1.739519744204842 1.739519744204842 +1.76132425248022 1.76132425248022 +1.767766952966369 1.767766952966369 +1.792444271021371 1.792444271021371 +1.831487552809192 1.831487552809192 +1.837086616049901 1.837086616049901 +1.851186504948943 1.851186504948943 +1.860502132730509 1.860502132730509 +1.8619433117852 1.8619433117852 +1.878229072834972 1.878229072834972 +1.880655074837347 1.880655074837347 +1.883647832802556 1.883647832802556 +1.884127769927503 1.884127769927503 +1.892969784466709 1.892969784466709 +1.916936460787894 1.916936460787894 +1.931545068229315 1.931545068229315 +1.937626522143119 1.937626522143119 +1.942267721488891 1.942267721488891 +1.963295334827521 1.963295334827521 +1.975655395743736 1.975655395743736 +1.981448090925679 1.981448090925679 +1.986220565173897 1.986220565173897 +1.98709020812351 1.98709020812351 +1.989420269013254 1.989420269013254 +2.007874648480185 2.007874648480185 +2.012179388983059 2.012179388983059 +2.019051972834053 2.019051972834053 +2.023278848058142 2.023278848058142 +2.026190677562545 2.026190677562545 +2.041594763633561 2.041594763633561 +2.042508934597344 2.042508934597344 +2.04305394648524 2.04305394648524 +2.052514683218775 2.052514683218775 +2.059038785694094 2.059038785694094 +2.062577320792516 2.062577320792516 +2.063488177732052 2.063488177732052 +2.067806664626417 2.067806664626417 +2.073013782498534 2.073013782498534 +2.08646120854976 2.08646120854976 +2.098476357223667 2.098476357223667 +2.101378199886176 2.101378199886176 +2.101927506425904 2.101927506425904 +2.12671744783454 2.12671744783454 +2.143966150630584 2.143966150630584 +2.145312642688415 2.145312642688415 +2.148704396208969 2.148704396208969 +2.153092682531471 2.153092682531471 +2.157553654759374 2.157553654759374 +2.176659075756566 2.176659075756566 +2.177260578806816 2.177260578806816 +2.179141269427014 2.179141269427014 +2.201895416482074 2.201895416482074 +2.202563945779844 2.202563945779844 +2.205113735193028 2.205113735193028 +2.207345865351049 2.207345865351049 +2.208922099676958 2.208922099676958 +2.218057898922937 2.218057898922937 +2.228610453267036 2.228610453267036 +2.241314066596301 2.241314066596301 +2.242145210071643 2.242145210071643 +2.253976266568437 2.253976266568437 +2.255324860119305 2.255324860119305 +2.271300972641221 2.271300972641221 +2.279438361991067 2.279438361991067 +2.286592331830957 2.286592331830957 +2.287159411646074 2.287159411646074 +2.296653147995115 2.296653147995115 +2.301754785182811 2.301754785182811 +2.30409930499031 2.30409930499031 +2.32141477565108 2.32141477565108 +2.347789281926012 2.347789281926012 +2.347827987256373 2.347827987256373 +2.349391321950732 2.349391321950732 +2.350129292983257 2.350129292983257 +2.358679083392328 2.358679083392328 +2.372845273125388 2.372845273125388 +2.385040766846267 2.385040766846267 +2.42114588843816 2.42114588843816 +2.425116524931602 2.425116524931602 +2.426518521893022 2.426518521893022 +2.43211651886311 2.43211651886311 +2.441302771998711 2.441302771998711 +2.446429340510857 2.446429340510857 +2.446547553904861 2.446547553904861 +2.45764765793376 2.45764765793376 +2.461222149682938 2.461222149682938 +2.467900747394114 2.467900747394114 +2.473214152160872 2.473214152160872 +2.5 2.5 +2.503557913626332 2.503557913626332 +2.504315621146863 2.504315621146863 +2.515634290122204 2.515634290122204 +2.516231935083851 2.516231935083851 +2.517558892374071 2.517558892374071 +2.526325773757754 2.526325773757754 +2.531164001388939 2.531164001388939 +2.53128061055404 2.53128061055404 +2.539387277827314 2.539387277827314 +2.540864599180268 2.540864599180268 +2.548084457784768 2.548084457784768 +2.548923292215475 2.548923292215475 +2.551730202825644 2.551730202825644 +2.553178578801818 2.553178578801818 +2.560295747947446 2.560295747947446 +2.566321603108612 2.566321603108612 +2.568932286976676 2.568932286976676 +2.574887688783916 2.574887688783916 +2.581809142325336 2.581809142325336 +2.584541960262555 2.584541960262555 +2.585511915815223 2.585511915815223 +2.592970592044868 2.592970592044868 +2.596055336381078 2.596055336381078 +2.598560573626668 2.598560573626668 +2.614019084614256 2.614019084614256 +2.618463725327216 2.618463725327216 +2.622883674481145 2.622883674481145 +2.627791161528314 2.627791161528314 +2.63535653879261 2.63535653879261 +2.654825898255443 2.654825898255443 +2.660423271276714 2.660423271276714 +2.667148030102869 2.667148030102869 +2.67012591760915 2.67012591760915 +2.698712599567882 2.698712599567882 +2.72180967799905 2.72180967799905 +2.732466204434637 2.732466204434637 +2.734187392905275 2.734187392905275 +2.737296308103857 2.737296308103857 +2.745724923243991 2.745724923243991 +2.749541709159369 2.749541709159369 +2.752925621447035 2.752925621447035 +2.754183973113479 2.754183973113479 +2.763972022430258 2.763972022430258 +2.766941997926879 2.766941997926879 +2.773850925522978 2.773850925522978 +2.777506755238121 2.777506755238121 +2.780333194223143 2.780333194223143 +2.783060349483276 2.783060349483276 +2.78679029681548 2.78679029681548 +2.786792895521339 2.786792895521339 +2.795170825459034 2.795170825459034 +2.801104989227437 2.801104989227437 +2.80525433080833 2.80525433080833 +2.805376738133109 2.805376738133109 +2.806844454092663 2.806844454092663 +2.811611818684648 2.811611818684648 +2.811994908451803 2.811994908451803 +2.816002798930236 2.816002798930236 +2.816814002472584 2.816814002472584 +2.818569391261086 2.818569391261086 +2.821660827076439 2.821660827076439 +2.822317588351085 2.822317588351085 +2.824910409962511 2.824910409962511 +2.829322097471409 2.829322097471409 +2.833852169620359 2.833852169620359 +2.839287537694811 2.839287537694811 +2.841714730677953 2.841714730677953 +2.841715058318205 2.841715058318205 +2.851653306950001 2.851653306950001 +2.853639002902003 2.853639002902003 +2.85515962291442 2.85515962291442 +2.855333736885793 2.855333736885793 +2.872540314564304 2.872540314564304 +2.879449214478037 2.879449214478037 +2.881003856158217 2.881003856158217 +2.881074731438092 2.881074731438092 +2.893589165559115 2.893589165559115 +2.898664743213686 2.898664743213686 +2.90387832180792 2.90387832180792 +2.919095859678745 2.919095859678745 +2.924945175440496 2.924945175440496 +2.931795145696962 2.931795145696962 +2.932285006979528 2.932285006979528 +2.934606807227626 2.934606807227626 +2.936392671567475 2.936392671567475 +2.953794710898493 2.953794710898493 +2.958055395706548 2.958055395706548 +2.960407744013656 2.960407744013656 +2.960759715914242 2.960759715914242 +2.969702548922556 2.969702548922556 +2.970149844982665 2.970149844982665 +2.978953970679893 2.978953970679893 +2.979075864664287 2.979075864664287 +2.984665519558418 2.984665519558418 +3.04548240149063 3.04548240149063 +3.050688336416719 3.050688336416719 +3.05773927378742 3.05773927378742 +3.059596740753369 3.059596740753369 +3.059762479996741 3.059762479996741 +3.088543279751235 3.088543279751235 +3.093580813520995 3.093580813520995 +3.104787362108069 3.104787362108069 +3.173380191779681 3.173380191779681 +3.583124637167399 3.583124637167399 +3.630658112409034 3.630658112409034 +3.631421639368965 3.631421639368965 +3.751087101339956 3.751087101339956 +3.800845709568037 3.800845709568037 +3.846558940956666 3.846558940956666 +4 4 +4 4 +4.076238038291317 4.076238038291317 +4.455547086147983 4.455547086147983 +5.356087357608394 5.356087357608394 +5.54364842773721 5.54364842773721 +7.587654388717225 7.587654388717225 diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag3_A.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_diag3_A.pd.dipha new file mode 100644 index 0000000..0dbfb89 Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_diag3_A.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag3_B b/geom_bottleneck/tests/data/ws_tests/test_diag3_B new file mode 100644 index 0000000..bb8655a --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_diag3_B @@ -0,0 +1,193 @@ +1.167089173446239 1.167089173446239 +1.256234452640111 1.256234452640111 +1.303693422257498 1.303693422257498 +1.413255970488646 1.413255970488646 +1.697910382446573 1.697910382446573 +1.718844728805093 1.718844728805093 +1.734124820632724 1.734124820632724 +1.749572938304276 1.749572938304276 +1.770320424526358 1.770320424526358 +1.786344763036807 1.786344763036807 +1.810054737907635 1.810054737907635 +1.815127306170105 1.815127306170105 +1.837806648681218 1.837806648681218 +1.870552189043019 1.870552189043019 +1.897240351979503 1.897240351979503 +1.935562152643027 1.935562152643027 +1.952562418976663 1.952562418976663 +1.959552126104175 1.959552126104175 +1.979899732318601 1.979899732318601 +2.00044500769347 2.00044500769347 +2.028951227523087 2.028951227523087 +2.037678749316724 2.037678749316724 +2.047911420446857 2.047911420446857 +2.075181804515723 2.075181804515723 +2.077245386452578 2.077245386452578 +2.084751316684838 2.084751316684838 +2.084860886126203 2.084860886126203 +2.103286477421968 2.103286477421968 +2.106856827309345 2.106856827309345 +2.113139266068691 2.113139266068691 +2.114594962503455 2.114594962503455 +2.115917727493158 2.115917727493158 +2.122335878797089 2.122335878797089 +2.127359082726206 2.127359082726206 +2.131673381033273 2.131673381033273 +2.155015793320908 2.155015793320908 +2.162480684365264 2.162480684365264 +2.195207236194009 2.195207236194009 +2.203279931784429 2.203279931784429 +2.205567995563669 2.205567995563669 +2.212933962936773 2.212933962936773 +2.215081271089993 2.215081271089993 +2.225989037578865 2.225989037578865 +2.24218929203347 2.24218929203347 +2.246321319993257 2.246321319993257 +2.280059407166517 2.280059407166517 +2.284117669032543 2.284117669032543 +2.293233992770926 2.293233992770926 +2.298815356955373 2.298815356955373 +2.300542634724628 2.300542634724628 +2.326408290042679 2.326408290042679 +2.328797162040625 2.328797162040625 +2.36025798094028 2.36025798094028 +2.365031313604634 2.365031313604634 +2.372266311053883 2.372266311053883 +2.400053902049271 2.400053902049271 +2.409134054334209 2.409134054334209 +2.411368235895246 2.411368235895246 +2.415934766378347 2.415934766378347 +2.420989857074179 2.420989857074179 +2.422520269961376 2.422520269961376 +2.43377629944218 2.43377629944218 +2.449308615746858 2.449308615746858 +2.452936540056068 2.452936540056068 +2.453698388060092 2.453698388060092 +2.454711357943602 2.454711357943602 +2.459202673400056 2.459202673400056 +2.493778305287384 2.493778305287384 +2.537394117473177 2.537394117473177 +2.544674753106669 2.544674753106669 +2.558904304820755 2.558904304820755 +2.563089994365716 2.563089994365716 +2.565476194422898 2.565476194422898 +2.599756049189921 2.599756049189921 +2.603619661709009 2.603619661709009 +2.609775379385211 2.609775379385211 +2.622552038976658 2.622552038976658 +2.623798471910885 2.623798471910885 +2.635711198661633 2.635711198661633 +2.644229304223612 2.644229304223612 +2.661919064427223 2.661919064427223 +2.666783921498494 2.666783921498494 +2.675503310152301 2.675503310152301 +2.684228699964661 2.684228699964661 +2.696854617267681 2.696854617267681 +2.700538654666735 2.700538654666735 +2.744886611436907 2.744886611436907 +2.748618547996708 2.748618547996708 +2.757981496641135 2.757981496641135 +2.774766825791652 2.774766825791652 +2.784491736143893 2.784491736143893 +2.796482184304273 2.796482184304273 +2.800849254751463 2.800849254751463 +2.816963410000067 2.816963410000067 +2.825207379914743 2.825207379914743 +2.831286409028398 2.831286409028398 +2.844827082550712 2.844827082550712 +2.853558438121966 2.853558438121966 +2.859806035663089 2.859806035663089 +2.878956033959891 2.878956033959891 +2.886422825109222 2.886422825109222 +2.891566924618832 2.891566924618832 +2.892028419188578 2.892028419188578 +2.893138900330932 2.893138900330932 +2.894250936382814 2.894250936382814 +2.90112201577666 2.90112201577666 +2.902172795370005 2.902172795370005 +2.90967533504119 2.90967533504119 +2.919687125962211 2.919687125962211 +2.923711238894001 2.923711238894001 +2.929041907338841 2.929041907338841 +2.938734873084349 2.938734873084349 +2.939642428979572 2.939642428979572 +2.943010909640486 2.943010909640486 +2.944210926048103 2.944210926048103 +2.951091358234723 2.951091358234723 +2.953950275008233 2.953950275008233 +2.966943157369611 2.966943157369611 +2.982522008227535 2.982522008227535 +2.992174049247434 2.992174049247434 +2.993098995839607 2.993098995839607 +2.995311055519335 2.995311055519335 +2.996708164866609 2.996708164866609 +2.999922110096644 2.999922110096644 +3 3 +3.000364533251431 3.000364533251431 +3.003840990677832 3.003840990677832 +3.006672301312824 3.006672301312824 +3.016489409140306 3.016489409140306 +3.021123787004333 3.021123787004333 +3.039117818612596 3.039117818612596 +3.039555193616473 3.039555193616473 +3.049952247267922 3.049952247267922 +3.057673482371216 3.057673482371216 +3.06920083507411 3.06920083507411 +3.075505231082782 3.075505231082782 +3.079038628197304 3.079038628197304 +3.084265889701239 3.084265889701239 +3.086837468106297 3.086837468106297 +3.103873984398081 3.103873984398081 +3.11528125482979 3.11528125482979 +3.119720021802376 3.119720021802376 +3.132543753577128 3.132543753577128 +3.141822873359038 3.141822873359038 +3.143502053175705 3.143502053175705 +3.153232877003746 3.153232877003746 +3.157586960809866 3.157586960809866 +3.157966892275408 3.157966892275408 +3.163583225161638 3.163583225161638 +3.178188125342772 3.178188125342772 +3.178475867931057 3.178475867931057 +3.179372297765929 3.179372297765929 +3.186437137237586 3.186437137237586 +3.188053957464282 3.188053957464282 +3.199351610026191 3.199351610026191 +3.204566427513051 3.204566427513051 +3.22885278850648 3.22885278850648 +3.229088648916556 3.229088648916556 +3.236685523936269 3.236685523936269 +3.239854786600373 3.239854786600373 +3.255809161351669 3.255809161351669 +3.287718056143732 3.287718056143732 +3.294038308299402 3.294038308299402 +3.313688277153076 3.313688277153076 +3.325783245946608 3.325783245946608 +3.331072954808429 3.331072954808429 +3.354962852285211 3.354962852285211 +3.357502741262644 3.357502741262644 +3.373668509804576 3.373668509804576 +3.408653045775418 3.408653045775418 +3.416281541503763 3.416281541503763 +3.443144279972986 3.443144279972986 +3.492970564191033 3.492970564191033 +3.493767805580122 3.493767805580122 +3.559084134799019 3.559084134799019 +3.559898699300211 3.559898699300211 +3.833585501974904 3.833585501974904 +4.099502076836052 4.099502076836052 +4.484082147277348 4.484082147277348 +4.505718324707756 4.505718324707756 +4.891723119528026 4.891723119528026 +5.065300494905414 5.065300494905414 +5.188599238535201 5.188599238535201 +5.36134479630535 5.36134479630535 +5.609786508140671 5.609786508140671 +7.08640314680382 7.08640314680382 +7.113765883549079 7.113765883549079 +7.328944131981744 7.328944131981744 +7.63625182217108 7.63625182217108 +7.716743341311718 7.716743341311718 +7.938093404092351 7.938093404092351 +8.112783377863046 8.112783377863046 +8.131485096731454 8.131485096731454 diff --git a/geom_bottleneck/tests/data/ws_tests/test_diag3_B.pd.dipha b/geom_bottleneck/tests/data/ws_tests/test_diag3_B.pd.dipha new file mode 100644 index 0000000..3fbfd90 Binary files /dev/null and b/geom_bottleneck/tests/data/ws_tests/test_diag3_B.pd.dipha differ diff --git a/geom_bottleneck/tests/data/ws_tests/test_list.txt b/geom_bottleneck/tests/data/ws_tests/test_list.txt new file mode 100644 index 0000000..27340d8 --- /dev/null +++ b/geom_bottleneck/tests/data/ws_tests/test_list.txt @@ -0,0 +1,21 @@ +test_5_A test_5_B 1.0 -1.0 4.320655 +test_5_A test_5_B 2.0 -1.0 1.7323016335246 +test_5_A test_5_B 3.0 -1.0 1.396199948 +test_5_A test_5_B 1.0 1.0 6.603006 +test_5_A test_5_B 2.0 1.0 2.73426775794691 +test_5_A test_5_B 3.0 1.0 2.13072755216204 +test_5_A test_5_B 1.0 2.0 5.1888795679967 +test_5_A test_5_B 2.0 2.0 2.26649677575857 +test_5_A test_5_B 3.0 2.0 1.86434961396614 +test_100_A test_100_B 1.0 -1.0 27.5573259 +test_100_A test_100_B 2.0 -1.0 3.38004972483238 +test_100_A test_100_B 3.0 -1.0 1.9045814702967 +test_100_A test_100_B 1.0 1.0 40.4375855 +test_100_A test_100_B 2.0 1.0 4.75252460986668 +test_100_A test_100_B 3.0 1.0 2.556594741819 +test_100_A test_100_B 1.0 2.0 31.7187555735287 +test_100_A test_100_B 2.0 2.0 3.81132239777023 +test_100_A test_100_B 3.0 2.0 2.09695346034248 +test_diag1_A test_diag1_B 1.0 -1.0 0.0 +test_diag2_A test_diag2_B 1.0 -1.0 0.0 +test_diag3_A test_diag3_B 1.0 -1.0 0.0 diff --git a/geom_bottleneck/tests/test_hera_bottleneck.cpp b/geom_bottleneck/tests/test_hera_bottleneck.cpp index f3b160b..922a4b0 100644 --- a/geom_bottleneck/tests/test_hera_bottleneck.cpp +++ b/geom_bottleneck/tests/test_hera_bottleneck.cpp @@ -24,37 +24,43 @@ struct TestFromFileCase { std::string file_1; std::string file_2; - double q; - double internal_p; + double delta; double answer; + std::vector> longest_edges; + double internal_p { hera::get_infinity() }; - TestFromFileCase(std::string s) + TestFromFileCase(const std::string& s) { auto tokens = split_on_delim(s, ' '); - assert(tokens.size() == 5); - - file_1 = tokens.at(0); - file_2 = tokens.at(1); - q = std::stod(tokens.at(2)); - internal_p = std::stod(tokens.at(3)); - answer = std::stod(tokens.at(4)); - - if ( q < 1.0 or std::isinf(q) or - (internal_p != hera::get_infinity() and internal_p < 1.0)) { - throw std::runtime_error("Bad line in test_list.txt"); +// assert(tokens.size() > 5); + assert(tokens.size() % 2 == 0); + + size_t token_idx = 0; + file_1 = tokens.at(token_idx++); + file_2 = tokens.at(token_idx++); + delta = std::stod(tokens.at(token_idx++)); + answer = std::stod(tokens.at(token_idx++)); + while(token_idx < tokens.size() - 1) { + int v1 = std::stoi(tokens[token_idx++]); + int v2 = std::stoi(tokens[token_idx++]); + longest_edges.emplace_back(v1, v2); } } }; std::ostream& operator<<(std::ostream& out, const TestFromFileCase& s) { - out << "[" << s.file_1 << ", " << s.file_2 << ", q = " << s.q << ", norm = "; + out << "[" << s.file_1 << ", " << s.file_2 << ", norm = "; if (s.internal_p != hera::get_infinity()) { out << s.internal_p; } else { out << "infinity"; } - out << ", answer = " << s.answer << "]"; + out << ", answer = " << s.answer << ", edges { "; + for(auto e : s.longest_edges) { + out << e.first << " <-> " << e.second << ", "; + } + out << "} ]"; return out; } @@ -444,3 +450,134 @@ TEST_CASE("infinity points", "bottleneckDistApprox") } +TEST_CASE("longest edge", "bottleneckDistApprox") +{ + PairVector diagram_A, diagram_B; + hera::bt::MatchingEdge longest_edge_1; + hera::bt::MatchingEdge longest_edge_2; + double delta = 0.01; + + SECTION("trivial: two empty diagrams") { + // should not fail + REQUIRE( 0.0 == hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta, longest_edge_1, true)); + } + + SECTION("trivial: one empty diagram, one single-point diagram") { + + diagram_A.emplace_back(1.0, 2.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta, longest_edge_1, true); + REQUIRE(longest_edge_1.first.getRealX() == 1.0); + REQUIRE(longest_edge_1.first.getRealY() == 2.0); + + double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta, longest_edge_2, true); + REQUIRE(longest_edge_2.second.getRealX() == 1.0); + REQUIRE(longest_edge_2.second.getRealY() == 2.0); + } + + SECTION("trivial: two single-point diagrams-1") { + + diagram_A.emplace_back(10.0, 20.0); + diagram_B.emplace_back(11.0, 19.0); + + double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta, longest_edge_1, true); + + REQUIRE(longest_edge_1.first.getRealX() == 10.0); + REQUIRE(longest_edge_1.first.getRealY() == 20.0); + + REQUIRE(longest_edge_1.second.getRealX() == 11.0); + REQUIRE(longest_edge_1.second.getRealY() == 19.0); + +// double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta, longest_edge_2, true); +// REQUIRE(longest_edge_2.second.getRealX() == 1.0); +// REQUIRE(longest_edge_2.second.getRealY() == 2.0); +// double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); +// double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); +// double correct_answer = 3.0; +// REQUIRE( fabs(d1 - correct_answer) <= delta * correct_answer); +// REQUIRE( fabs(d2 - correct_answer) <= delta * correct_answer); + } +// +// SECTION("trivial: two single-point diagrams-2") { +// +// diagram_A.emplace_back(10.0, 20.0); // (5, 5) +// diagram_B.emplace_back(130.0, 138.0); // (4, 4) +// +// double d1 = hera::bottleneckDistApprox<>(diagram_A, diagram_B, delta); +// double d2 = hera::bottleneckDistApprox<>(diagram_B, diagram_A, delta); +// double correct_answer = 5.0; +// REQUIRE( fabs(d1 - correct_answer) <= delta * correct_answer ); +// REQUIRE( fabs(d2 - correct_answer) <= delta * correct_answer ); +// +// } + +} + +TEST_CASE("file cases", "bottleneck_dist") +{ + PairVector diagram_A, diagram_B; + hera::bt::MatchingEdge longest_edge; + + const char* file_name = "../tests/data/test_list.txt"; + std::string dir_prefix = "../tests/data/"; + std::ifstream f; + f.open(file_name); + std::vector test_params; + std::string s; + while (std::getline(f, s)) { + test_params.emplace_back(s); + //std::cout << "read test params " << test_params.back() << std::endl; + } + + SECTION("from file:") { + + for (const auto& ts : test_params) { + bool read_file_A = hera::readDiagramPointSet(dir_prefix + ts.file_1, diagram_A); + bool read_file_B = hera::readDiagramPointSet(dir_prefix + ts.file_2, diagram_B); + REQUIRE(read_file_A); + REQUIRE(read_file_B); + + double hera_answer = hera::bottleneckDistApprox(diagram_A, diagram_B, ts.delta, longest_edge, true); + std::pair hera_le { longest_edge.first.get_user_id(), longest_edge.second.get_user_id() }; + + REQUIRE((hera_answer == ts.answer or fabs(hera_answer - ts.answer) <= ts.delta * hera_answer)); + REQUIRE((ts.longest_edges.empty() or + std::find(ts.longest_edges.begin(), ts.longest_edges.end(), hera_le) != ts.longest_edges.end())); + + double hera_answer_exact = hera::bottleneckDistExact(diagram_A, diagram_B, 14, longest_edge, true); + std::pair hera_le_exact { longest_edge.first.get_user_id(), longest_edge.second.get_user_id() }; + + REQUIRE((hera_answer_exact == ts.answer or + fabs(hera_answer_exact - ts.answer) <= 0.0001 * ts.answer)); + + REQUIRE((ts.longest_edges.empty() or + std::find(ts.longest_edges.begin(), ts.longest_edges.end(), hera_le_exact) != + ts.longest_edges.end())); + + // check that longest_edge length matches the bottleneck distance + + double hera_le_cost; + bool check_longest_edge_cost = true; + if (longest_edge.first.get_user_id() >= 0 and longest_edge.second.get_user_id() < 0) { + // longest edge: off-diagonal point of A connected to its diagonal projection + hera_le_cost = longest_edge.first.get_persistence(ts.internal_p); + } else if (longest_edge.first.get_user_id() < 0 and longest_edge.second.get_user_id() >= 0) { + // longest edge: off-diagonal point of B connected to its diagonal projection + hera_le_cost = longest_edge.second.get_persistence(ts.internal_p); + } else if (longest_edge.first.get_user_id() >= 0 and longest_edge.second.get_user_id() >= 0) { + // longest edge connects two off-diagonal points of A and B + hera_le_cost = hera::bt::dist_l_inf_slow(longest_edge.first, longest_edge.second); + } else { + check_longest_edge_cost = false; + } +// if (check_longest_edge_cost and hera_le_cost != hera_answer_exact) { +// std::cout << "PROBLEM HERE: " << ts << ", longest edge " << longest_edge.first << " - " +// << longest_edge.second << ", hera_le_cost " << hera_le_cost << ", answwer " +// << hera_answer_exact << std::endl; +// } + REQUIRE( (not check_longest_edge_cost or fabs(hera_le_cost - hera_answer_exact) < 0.0001 * hera_answer_exact) ); + std::cout << ts << " PASSED " << std::endl; + } + } + +} -- cgit v1.2.3 From e2a2d6cb2eec5a7153d6e895a28c85c49347f644 Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Tue, 19 Jun 2018 22:51:58 +0200 Subject: Template bug fixed --- geom_bottleneck/include/basic_defs_bt.h | 7 +++---- geom_bottleneck/include/bottleneck_detail.hpp | 12 +++++------ geom_bottleneck/tests/test_hera_bottleneck.cpp | 28 ++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/geom_bottleneck/include/basic_defs_bt.h b/geom_bottleneck/include/basic_defs_bt.h index a26d9a5..6124dbe 100644 --- a/geom_bottleneck/include/basic_defs_bt.h +++ b/geom_bottleneck/include/basic_defs_bt.h @@ -206,8 +206,7 @@ namespace hera { #ifndef FOR_R_TDA - template - friend std::ostream& operator<<(std::ostream& output, const DiagramPoint& p) + friend std::ostream& operator<<(std::ostream& output, const DiagramPoint& p) { if (p.isDiagonal()) { output << "(" << p.x << ", " << p.y << ", " << 0.5 * (p.x + p.y) << ", " << p.id << " DIAG )"; @@ -245,6 +244,7 @@ namespace hera { return 0.0; } // otherwise distance is a usual l-inf distance + // Real dx = (a.getRealX() == b.getRealX()) ? 0.0 : fabs(a.getRealX() - b.getRealX()); Real dy = (a.getRealY() == b.getRealY()) ? 0.0 : fabs(a.getRealY() - b.getRealY()); Real result = std::max(dx, dy); @@ -406,8 +406,7 @@ namespace hera { #ifndef FOR_R_TDA - template - friend std::ostream& operator<<(std::ostream& output, const DiagramPointSet& ps) + friend std::ostream& operator<<(std::ostream& output, const DiagramPointSet& ps) { output << "{ "; for (auto pit = ps.cbegin(); pit != ps.cend(); ++pit) { diff --git a/geom_bottleneck/include/bottleneck_detail.hpp b/geom_bottleneck/include/bottleneck_detail.hpp index 8ec9c68..8f51d07 100644 --- a/geom_bottleneck/include/bottleneck_detail.hpp +++ b/geom_bottleneck/include/bottleneck_detail.hpp @@ -468,7 +468,7 @@ namespace hera { Real distEpsilon = std::numeric_limits::max(); Real diffThreshold = 0.1; for (int k = 0; k < decPrecision; ++k) { - diffThreshold /= 10.0; + diffThreshold /= 10; } for (size_t k = 0; k < pairwiseDist.size() - 2; ++k) { auto diff = pairwiseDist[k + 1] - pairwiseDist[k]; @@ -476,7 +476,7 @@ namespace hera { distEpsilon = diff; } } - distEpsilon = std::min(diffThreshold, distEpsilon / 3.0); + distEpsilon = std::min(diffThreshold, distEpsilon / 3); BoundMatchOracle oracle(A, B, distEpsilon, useRangeSearch); // binary search @@ -484,19 +484,19 @@ namespace hera { size_t idxMin { 0 }, idxMax { pairwiseDist.size() - 1 }; size_t idxMid; while (idxMax > idxMin) { - idxMid = static_cast(floor(idxMin + idxMax) / 2.0); + idxMid = static_cast(floor(idxMin + idxMax) / 2); iterNum++; // not A[imid] < dist <=> A[imid] >= dist <=> A[imid[ >= dist + eps - if (oracle.isMatchLess(pairwiseDist[idxMid] + distEpsilon / 2.0)) { + if (oracle.isMatchLess(pairwiseDist[idxMid] + distEpsilon / 2)) { idxMax = idxMid; } else { idxMin = idxMid + 1; } } - idxMid = static_cast(floor(idxMin + idxMax) / 2.0); + idxMid = static_cast(floor(idxMin + idxMax) / 2); Real result = pairwiseDist[idxMid]; if (compute_longest_edge) { - oracle.isMatchLess(result + distEpsilon / 2.0); + oracle.isMatchLess(result + distEpsilon / 2); longest_edge = oracle.get_longest_edge(); } return result; diff --git a/geom_bottleneck/tests/test_hera_bottleneck.cpp b/geom_bottleneck/tests/test_hera_bottleneck.cpp index 922a4b0..f22e415 100644 --- a/geom_bottleneck/tests/test_hera_bottleneck.cpp +++ b/geom_bottleneck/tests/test_hera_bottleneck.cpp @@ -6,6 +6,7 @@ #include "bottleneck.h" using PairVector = std::vector>; +using PairVectorF = std::vector>; std::vector split_on_delim(const std::string& s, char delim) { @@ -113,6 +114,33 @@ TEST_CASE("simple cases", "bottleneckDistApprox") } +TEST_CASE("float version", "check_template") +{ + PairVectorF diagram_A, diagram_B; + float delta = 0.01; + //float internal_p = hera::get_infinity(); + + SECTION("trivial: two empty diagrams") { + REQUIRE( 0.0 == hera::bottleneckDistApprox(diagram_A, diagram_B, delta)); + REQUIRE( 0.0 == hera::bottleneckDistExact(diagram_A, diagram_B)); + } + + SECTION("trivial: two single-point diagrams-2") { + + diagram_A.emplace_back(10, 20); // (5, 5) + diagram_B.emplace_back(130, 138); // (4, 4) + + float d1 = hera::bottleneckDistApprox(diagram_A, diagram_B, delta); + float d2 = hera::bottleneckDistApprox(diagram_B, diagram_A, delta); + float d3 = hera::bottleneckDistExact(diagram_B, diagram_A); + float correct_answer = 5; + REQUIRE( fabs(d1 - correct_answer) <= delta * correct_answer ); + REQUIRE( fabs(d2 - correct_answer) <= delta * correct_answer ); + + } + +} + TEST_CASE("infinity points", "bottleneckDistApprox") { -- cgit v1.2.3 From 657f73321f04d5d1c4cec8085ec43a73633b96af Mon Sep 17 00:00:00 2001 From: Arnur Nigmetov Date: Thu, 21 Jun 2018 21:43:29 +0200 Subject: Bug in longest edge for negative persistence fixed --- geom_bottleneck/include/basic_defs_bt.h | 2 +- geom_bottleneck/tests/data/test_008_A | 1 + geom_bottleneck/tests/data/test_008_B | 1 + geom_bottleneck/tests/data/test_009_A | 1 + geom_bottleneck/tests/data/test_009_B | 1 + geom_bottleneck/tests/data/test_list.txt | 2 ++ 6 files changed, 7 insertions(+), 1 deletion(-) diff --git a/geom_bottleneck/include/basic_defs_bt.h b/geom_bottleneck/include/basic_defs_bt.h index 6124dbe..172e0f7 100644 --- a/geom_bottleneck/include/basic_defs_bt.h +++ b/geom_bottleneck/include/basic_defs_bt.h @@ -194,7 +194,7 @@ namespace hera { { if (isDiagonal()) return 0.0; - Real pers = (y - x) / 2; + Real pers = fabs(y - x) / 2; if (internal_p == get_infinity()) { return pers; } else if (internal_p == 1.0) { diff --git a/geom_bottleneck/tests/data/test_008_A b/geom_bottleneck/tests/data/test_008_A index e69de29..50b3df6 100644 --- a/geom_bottleneck/tests/data/test_008_A +++ b/geom_bottleneck/tests/data/test_008_A @@ -0,0 +1 @@ +0 1.1 diff --git a/geom_bottleneck/tests/data/test_008_B b/geom_bottleneck/tests/data/test_008_B index e69de29..1935b11 100644 --- a/geom_bottleneck/tests/data/test_008_B +++ b/geom_bottleneck/tests/data/test_008_B @@ -0,0 +1 @@ +0 0.1 diff --git a/geom_bottleneck/tests/data/test_009_A b/geom_bottleneck/tests/data/test_009_A index e69de29..a1b859e 100644 --- a/geom_bottleneck/tests/data/test_009_A +++ b/geom_bottleneck/tests/data/test_009_A @@ -0,0 +1 @@ +1.1 0 diff --git a/geom_bottleneck/tests/data/test_009_B b/geom_bottleneck/tests/data/test_009_B index e69de29..b5befbc 100644 --- a/geom_bottleneck/tests/data/test_009_B +++ b/geom_bottleneck/tests/data/test_009_B @@ -0,0 +1 @@ +0.1 0 diff --git a/geom_bottleneck/tests/data/test_list.txt b/geom_bottleneck/tests/data/test_list.txt index 1309884..24b462a 100644 --- a/geom_bottleneck/tests/data/test_list.txt +++ b/geom_bottleneck/tests/data/test_list.txt @@ -3,6 +3,8 @@ test_002_A test_002_B 0.01 0.2 0 0 test_003_A test_003_B 0.01 2 1 1 test_004_A test_004_B 0.01 inf -1 -1 test_005_A test_005_B 0.01 4 5 5 +test_008_A test_008_B 0.01 0.55 0 -1 +test_009_A test_009_B 0.01 0.55 0 -1 test_010_A test_010_B 0.01 1.32937 test_011_A test_011_B 0.01 1.03125 test_014_A test_014_B 0.01 0 -- cgit v1.2.3