2626
2727#include < geode/geometry/point.h>
2828#include < geode/mesh/builder/triangulated_surface_builder.h>
29+ #include < geode/mesh/core/surface_edges.h>
2930#include < geode/mesh/core/triangulated_surface.h>
3031
3132#include < geode/inspector/criterion/degeneration.h>
3233
34+ #include < iostream>
35+
3336void check_non_degeneration ()
3437{
3538 auto surface = geode::TriangulatedSurface2D::create ();
@@ -43,22 +46,74 @@ void check_non_degeneration()
4346 builder->create_triangle ( { 0 , 1 , 2 } );
4447 builder->create_triangle ( { 2 , 1 , 3 } );
4548
49+ geode::inspector::SurfaceMeshDegeneration2D degeneration_inspector;
50+ OPENGEODE_EXCEPTION (
51+ !degeneration_inspector.is_mesh_degenerated ( *surface ),
52+ " [Test] Surface is shown degenerated whereas it is not." );
53+ OPENGEODE_EXCEPTION (
54+ degeneration_inspector.nb_degenerated_edges ( *surface ) == 0 ,
55+ " [Test] Surface has more degenerated edges than it should." );
56+ OPENGEODE_EXCEPTION (
57+ degeneration_inspector.degenerated_edges ( *surface ).size () == 0 ,
58+ " [Test] Surface has degenerated edges when it should have none." );
59+ }
60+
61+ void check_degeneration_by_colocalisation ()
62+ {
63+ auto surface = geode::TriangulatedSurface2D::create ();
64+ auto builder = geode::TriangulatedSurfaceBuilder2D::create ( *surface );
65+ builder->create_vertices ( 4 );
66+ builder->set_point ( 0 , { { 0 ., 2 . } } );
67+ builder->set_point ( 1 , { { 2 ., 0 . } } );
68+ builder->set_point ( 2 , { { 1 ., 4 . } } );
69+ builder->set_point ( 3 , { { 2 ., geode::global_epsilon / 2 } } );
70+
71+ builder->create_triangle ( { 0 , 1 , 2 } );
72+ builder->create_triangle ( { 2 , 1 , 3 } );
73+ surface->enable_edges ();
74+
4675 geode::inspector::SurfaceMeshDegeneration2D degeneration_inspector;
4776 OPENGEODE_EXCEPTION ( degeneration_inspector.is_mesh_degenerated ( *surface ),
48- " [Test] Surface is shown degenerated whereas it is not " );
77+ " [Test] Surface is shown not degenerated whereas it is. " );
4978 OPENGEODE_EXCEPTION (
50- degeneration_inspector.nb_degenerated_edges ( *surface ) != 0 ,
51- " [Test] Surface is shown degenerated whereas it is not" );
79+ degeneration_inspector.nb_degenerated_edges ( *surface ) == 1 ,
80+ " [Test] Surface has wrong number of degenerated edges." );
81+ OPENGEODE_EXCEPTION ( degeneration_inspector.degenerated_edges ( *surface )[0 ]
82+ == surface->edges ().edge_from_vertices ( { 1 , 3 } ),
83+ " [Test] Surface has wrong degenerated edges." );
84+ }
85+
86+ void check_degeneration_by_point_multiple_presence ()
87+ {
88+ auto surface = geode::TriangulatedSurface2D::create ();
89+ auto builder = geode::TriangulatedSurfaceBuilder2D::create ( *surface );
90+ builder->create_vertices ( 4 );
91+ builder->set_point ( 0 , { { 0 ., 2 . } } );
92+ builder->set_point ( 1 , { { 2 ., 0 . } } );
93+ builder->set_point ( 2 , { { 1 ., 4 . } } );
94+
95+ builder->create_triangle ( { 0 , 1 , 2 } );
96+ builder->create_triangle ( { 1 , 2 , 1 } );
97+ surface->enable_edges ();
98+
99+ geode::inspector::SurfaceMeshDegeneration2D degeneration_inspector;
100+ OPENGEODE_EXCEPTION ( degeneration_inspector.is_mesh_degenerated ( *surface ),
101+ " [Test] Surface is not shown degenerated whereas it is." );
52102 OPENGEODE_EXCEPTION (
53- degeneration_inspector.degenerated_edges ( *surface ).size () != 0 ,
54- " [Test] Surface is shown degenerated whereas it is not" );
103+ degeneration_inspector.nb_degenerated_edges ( *surface ) == 1 ,
104+ " [Test] Surface has the wrong number of degenerated edges." );
105+ OPENGEODE_EXCEPTION ( degeneration_inspector.degenerated_edges ( *surface )[0 ]
106+ == surface->edges ().edge_from_vertices ( { 1 , 1 } ),
107+ " [Test] Surface shows the wrong degenerated edges." );
55108}
56109
57110int main ()
58111{
59112 try
60113 {
61114 check_non_degeneration ();
115+ check_degeneration_by_colocalisation ();
116+ check_degeneration_by_point_multiple_presence ();
62117
63118 geode::Logger::info ( " TEST SUCCESS" );
64119 return 0 ;
0 commit comments