"collect_garbage()" crashes after call to "collapse_edge()"
I'm running experiments with collapse_edge() and I found "collect_garbage" to crash after calling the former.
Below's a minimal example to reproduce it.
It ran with Xcode.
int main(int _argc, char** _argv) {
TetrahedralMesh mesh;
double two_pi_5 = 2 * M_PI / 5.;
//pentagon shape
Point p0 = {cos(0 * two_pi_5) , sin(0 * two_pi_5), 0};
Point p1 = {cos(1 * two_pi_5) , sin(1 * two_pi_5), 0};
Point p2 = {cos(2 * two_pi_5) , sin(2 * two_pi_5), 0};
Point p3 = {cos(3 * two_pi_5) , sin(3 * two_pi_5), 0};
Point p4 = {cos(4 * two_pi_5) , sin(4 * two_pi_5), 0};
Point p5 = {0,0,1};
Point p6 = {0,0,-1};
Point p7 = {1,0,1};
VertexHandle v0 = mesh.add_vertex(p0);
VertexHandle v1 = mesh.add_vertex(p1);
VertexHandle v2 = mesh.add_vertex(p2);
VertexHandle v3 = mesh.add_vertex(p3);
VertexHandle v4 = mesh.add_vertex(p4);
VertexHandle v5 = mesh.add_vertex(p5);
VertexHandle v6 = mesh.add_vertex(p6);
VertexHandle v7 = mesh.add_vertex(p7);
//'top faces
FaceHandle f0 = mesh.add_face({v0, v1, v5});
FaceHandle f1 = mesh.add_face({v1, v2, v5});
FaceHandle f2 = mesh.add_face({v2, v3, v5});
FaceHandle f3 = mesh.add_face({v3, v4, v5});
FaceHandle f4 = mesh.add_face({v4, v0, v5});
//bottom faces
FaceHandle f5 = mesh.add_face({v0, v1, v6});
FaceHandle f6 = mesh.add_face({v1, v2, v6});
FaceHandle f7 = mesh.add_face({v2, v3, v6});
FaceHandle f8 = mesh.add_face({v3, v4, v6});
FaceHandle f9 = mesh.add_face({v4, v0, v6});
//interior faces
FaceHandle f10 = mesh.add_face({v0, v5, v6});
FaceHandle f11 = mesh.add_face({v1, v5, v6});
FaceHandle f12 = mesh.add_face({v2, v5, v6});
FaceHandle f13 = mesh.add_face({v3, v5, v6});
FaceHandle f14 = mesh.add_face({v4, v5, v6});
//additional faces
FaceHandle f15 = mesh.add_face({v0, v1, v7});
FaceHandle f16 = mesh.add_face({v1, v5, v7});
FaceHandle f17 = mesh.add_face({v0, v5, v7});
FaceHandle f18 = mesh.add_face({v0, v4, v7});
FaceHandle f19 = mesh.add_face({v4, v5, v7});
//and cells
mesh.add_cell({mesh.halfface_handle(f0, 0),
mesh.halfface_handle(f5, 1),
mesh.halfface_handle(f10,0),
mesh.halfface_handle(f11,1)});
mesh.add_cell({mesh.halfface_handle(f1, 0),
mesh.halfface_handle(f6, 1),
mesh.halfface_handle(f11,0),
mesh.halfface_handle(f12,1)});
mesh.add_cell({mesh.halfface_handle(f2, 0),
mesh.halfface_handle(f7, 1),
mesh.halfface_handle(f12,0),
mesh.halfface_handle(f13,1)});
mesh.add_cell({mesh.halfface_handle(f3, 0),
mesh.halfface_handle(f8, 1),
mesh.halfface_handle(f13,0),
mesh.halfface_handle(f14,1)});
mesh.add_cell({mesh.halfface_handle(f4, 0),
mesh.halfface_handle(f9, 1),
mesh.halfface_handle(f14,0),
mesh.halfface_handle(f10,1)});
mesh.add_cell({mesh.halfface_handle(f0, 1),
mesh.halfface_handle(f15,1),
mesh.halfface_handle(f16,1),
mesh.halfface_handle(f17,1)});
mesh.add_cell({mesh.halfface_handle(f4, 1),
mesh.halfface_handle(f17,1),
mesh.halfface_handle(f18,1),
mesh.halfface_handle(f19,1)});
mesh.collapse_edge(HalfEdgeHandle(23));
//ok up to this point
//crashes there
mesh.collect_garbage();
`