mirror of
				https://github.com/jhasse/poly2tri.git
				synced 2025-11-04 06:09:31 +01:00 
			
		
		
		
	Throw in Triangle::NeighborAcross in case of null pointer
Add an example quad for which the exception is throwni in the tests
This commit is contained in:
		@@ -352,12 +352,18 @@ void Triangle::SetDelunayEdgeCW(const Point& p, bool e)
 | 
			
		||||
// The neighbor across to given point
 | 
			
		||||
Triangle& Triangle::NeighborAcross(const Point& opoint)
 | 
			
		||||
{
 | 
			
		||||
  Triangle* neighbor = nullptr;
 | 
			
		||||
  if (&opoint == points_[0]) {
 | 
			
		||||
    return *neighbors_[0];
 | 
			
		||||
    neighbor = neighbors_[0];
 | 
			
		||||
  } else if (&opoint == points_[1]) {
 | 
			
		||||
    return *neighbors_[1];
 | 
			
		||||
    neighbor = neighbors_[1];
 | 
			
		||||
  } else {
 | 
			
		||||
    neighbor = neighbors_[2];
 | 
			
		||||
  }
 | 
			
		||||
  return *neighbors_[2];
 | 
			
		||||
  if (neighbor == nullptr) {
 | 
			
		||||
      throw std::runtime_error("NeighborAcross - null neighbor");
 | 
			
		||||
  }
 | 
			
		||||
  return *neighbor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Triangle::DebugPrint()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								testbed/data/deadly_quad.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								testbed/data/deadly_quad.dat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
0.0     0.0
 | 
			
		||||
1.0e-05 0.0
 | 
			
		||||
1.1e-04 3.0e-07
 | 
			
		||||
1.0e-04 3.0e-07
 | 
			
		||||
@@ -5,6 +5,7 @@
 | 
			
		||||
#include <fstream>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <iterator>
 | 
			
		||||
#include <stdexcept>
 | 
			
		||||
 | 
			
		||||
BOOST_AUTO_TEST_CASE(BasicTest)
 | 
			
		||||
{
 | 
			
		||||
@@ -40,6 +41,22 @@ BOOST_AUTO_TEST_CASE(QuadTest)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOST_AUTO_TEST_CASE(QuadTestThrow)
 | 
			
		||||
{
 | 
			
		||||
  // Very narrow quad that demonstrates a failure case during triangulation
 | 
			
		||||
  std::vector<p2t::Point*> polyline {
 | 
			
		||||
    new p2t::Point(0.0,     0.0),
 | 
			
		||||
    new p2t::Point(1.0e-05, 0.0),
 | 
			
		||||
    new p2t::Point(1.1e-04, 3.0e-07),
 | 
			
		||||
    new p2t::Point(1.0e-04, 3.0e-07)
 | 
			
		||||
  };
 | 
			
		||||
  p2t::CDT cdt{ polyline };
 | 
			
		||||
  BOOST_CHECK_THROW(cdt.Triangulate(), std::runtime_error);
 | 
			
		||||
  for (const auto p : polyline) {
 | 
			
		||||
    delete p;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOST_AUTO_TEST_CASE(TestbedFilesTest)
 | 
			
		||||
{
 | 
			
		||||
  for (const auto& filename : { "custom.dat", "diamond.dat", "star.dat", "test.dat" }) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user