1 #ifndef INCLUDE_UNITTESTS_TRIMESH_CIRCULATORS_HH
2 #define INCLUDE_UNITTESTS_TRIMESH_CIRCULATORS_HH
4 #include <gtest/gtest.h>
5 #include <Unittests/unittests_common.hh>
14 virtual void SetUp() {
18 virtual void TearDown() {
46 Mesh::VertexHandle vhandle[5];
48 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
49 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
50 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
51 vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0));
52 vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
55 std::vector<Mesh::VertexHandle> face_vhandles;
57 face_vhandles.push_back(vhandle[0]);
58 face_vhandles.push_back(vhandle[1]);
59 face_vhandles.push_back(vhandle[2]);
60 mesh_.add_face(face_vhandles);
62 face_vhandles.clear();
64 face_vhandles.push_back(vhandle[1]);
65 face_vhandles.push_back(vhandle[3]);
66 face_vhandles.push_back(vhandle[4]);
67 mesh_.add_face(face_vhandles);
81 EXPECT_EQ(0, vf_it.handle().idx() ) <<
"Index wrong in VertexFaceIter at initialization";
82 EXPECT_TRUE(vf_it) <<
"Iterator invalid in VertexFaceIter at initialization";
84 EXPECT_EQ(1, vf_it.handle().idx() ) <<
"Index wrong in VertexFaceIter at step 1";
85 EXPECT_TRUE(vf_it) <<
"Iterator invalid in VertexFaceIter at step 1";
87 EXPECT_EQ(-1, vf_it.handle().idx() ) <<
"Index wrong in VertexFaceIter at end";
88 EXPECT_FALSE(vf_it) <<
"Iterator not invalid in VertexFaceIter at end";
89 EXPECT_TRUE( vf_it == vf_end ) <<
"End iterator for VertexFaceIter not matching";
94 EXPECT_EQ(0, cvf_it.handle().idx() ) <<
"Index wrong in ConstVertexFaceIter at initialization";
95 EXPECT_TRUE(cvf_it) <<
"Iterator invalid in ConstVertexFaceIter at initialization";
97 EXPECT_EQ(1, cvf_it.handle().idx() ) <<
"Index wrong in ConstVertexFaceIter at step one";
98 EXPECT_TRUE(cvf_it) <<
"Iterator invalid in ConstVertexFaceIter at step one";
100 EXPECT_EQ(-1, cvf_it.handle().idx() ) <<
"Index wrong in ConstVertexFaceIter at end";
101 EXPECT_FALSE(cvf_it) <<
"Iterator not invalid in ConstVertexFaceIter at end";
102 EXPECT_TRUE( cvf_it == cvf_end ) <<
"End iterator for ConstVertexFaceIter not matching";
114 Mesh::VertexHandle vhandle[5];
116 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
117 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
118 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
119 vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0));
120 vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
123 std::vector<Mesh::VertexHandle> face_vhandles;
125 face_vhandles.push_back(vhandle[0]);
126 face_vhandles.push_back(vhandle[1]);
127 face_vhandles.push_back(vhandle[2]);
128 mesh_.add_face(face_vhandles);
130 face_vhandles.clear();
132 face_vhandles.push_back(vhandle[1]);
133 face_vhandles.push_back(vhandle[3]);
134 face_vhandles.push_back(vhandle[4]);
135 mesh_.add_face(face_vhandles);
137 face_vhandles.clear();
139 face_vhandles.push_back(vhandle[0]);
140 face_vhandles.push_back(vhandle[3]);
141 face_vhandles.push_back(vhandle[1]);
142 mesh_.add_face(face_vhandles);
144 face_vhandles.clear();
146 face_vhandles.push_back(vhandle[2]);
147 face_vhandles.push_back(vhandle[1]);
148 face_vhandles.push_back(vhandle[4]);
149 mesh_.add_face(face_vhandles);
165 EXPECT_EQ(3, vf_it.handle().idx() ) <<
"Index wrong in VertexFaceIter at initialization";
166 EXPECT_TRUE(vf_it) <<
"Iterator invalid in VertexFaceIter at initialization";
168 EXPECT_EQ(1, vf_it.handle().idx() ) <<
"Index wrong in VertexFaceIter at step 1";
169 EXPECT_TRUE(vf_it) <<
"Iterator invalid in VertexFaceIter at step 1";
171 EXPECT_EQ(2, vf_it.handle().idx() ) <<
"Index wrong in VertexFaceIter at step 2";
172 EXPECT_TRUE(vf_it) <<
"Iterator invalid in VertexFaceIter at step 2";
174 EXPECT_EQ(0, vf_it.handle().idx() ) <<
"Index wrong in VertexFaceIter at step 3";
175 EXPECT_TRUE(vf_it) <<
"Iterator invalid in VertexFaceIter at step 3";
177 EXPECT_EQ(3, vf_it.handle().idx() ) <<
"Index wrong in VertexFaceIter at end";
178 EXPECT_FALSE(vf_it) <<
"Iterator not invalid in VertexFaceIter at end";
179 EXPECT_TRUE( vf_it == vf_end ) <<
"End iterator for VertexFaceIter not matching";
184 EXPECT_EQ(3, cvf_it.handle().idx() ) <<
"Index wrong in ConstVertexFaceIter at initialization";
185 EXPECT_TRUE(cvf_it) <<
"Iterator invalid in ConstVertexFaceIter at initialization";
187 EXPECT_EQ(1, cvf_it.handle().idx() ) <<
"Index wrong in ConstVertexFaceIter at step 1";
188 EXPECT_TRUE(cvf_it) <<
"Iterator invalid in ConstVertexFaceIter at step 1";
190 EXPECT_EQ(2, cvf_it.handle().idx() ) <<
"Index wrong in ConstVertexFaceIter at step 2";
191 EXPECT_TRUE(cvf_it) <<
"Iterator invalid in ConstVertexFaceIter at step 2";
193 EXPECT_EQ(0, cvf_it.handle().idx() ) <<
"Index wrong in ConstVertexFaceIter at step 3";
194 EXPECT_TRUE(cvf_it) <<
"Iterator invalid in ConstVertexFaceIter at step 3";
196 EXPECT_EQ(3, cvf_it.handle().idx() ) <<
"Index wrong in ConstVertexFaceIter at end";
197 EXPECT_FALSE(cvf_it) <<
"Iterator not invalid in VertexFaceIter at end";
198 EXPECT_TRUE( cvf_it == cvf_end ) <<
"End iterator for ConstVertexFaceIter not matching";
211 Mesh::VertexHandle vhandle[5];
213 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
214 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
215 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
216 vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0));
217 vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
220 std::vector<Mesh::VertexHandle> face_vhandles;
222 face_vhandles.push_back(vhandle[0]);
223 face_vhandles.push_back(vhandle[1]);
224 face_vhandles.push_back(vhandle[2]);
225 mesh_.add_face(face_vhandles);
227 face_vhandles.clear();
229 face_vhandles.push_back(vhandle[1]);
230 face_vhandles.push_back(vhandle[3]);
231 face_vhandles.push_back(vhandle[4]);
232 mesh_.add_face(face_vhandles);
234 face_vhandles.clear();
236 face_vhandles.push_back(vhandle[0]);
237 face_vhandles.push_back(vhandle[3]);
238 face_vhandles.push_back(vhandle[1]);
239 mesh_.add_face(face_vhandles);
241 face_vhandles.clear();
243 face_vhandles.push_back(vhandle[2]);
244 face_vhandles.push_back(vhandle[1]);
245 face_vhandles.push_back(vhandle[4]);
246 mesh_.add_face(face_vhandles);
262 EXPECT_EQ(11, voh_it.handle().idx() ) <<
"Index wrong in VertexOHalfedgeIter begin at initialization";
263 EXPECT_EQ(11, voh_end.handle().idx() ) <<
"Index wrong in VertexOHalfedgeIter end at initialization";
264 EXPECT_EQ(3, mesh_.face_handle(voh_it.handle()).idx() ) <<
"Corresponding face Index wrong in VertexOHalfedgeIter begin at initialization";
265 EXPECT_TRUE(voh_it) <<
"Iterator invalid in VertexOHalfedgeIter at initialization";
269 EXPECT_EQ(6, voh_it.handle().idx() ) <<
"Index wrong in VertexOHalfedgeIter step 1";
270 EXPECT_EQ(1, mesh_.face_handle(voh_it.handle()).idx() ) <<
"Corresponding face Index wrong in VertexOHalfedgeIter step 1";
271 EXPECT_TRUE(voh_it) <<
"Iterator invalid in VertexOHalfedgeIter at step 1";
275 EXPECT_EQ(1, voh_it.handle().idx() ) <<
"Index wrong in VertexOHalfedgeIter step 2";
276 EXPECT_EQ(2, mesh_.face_handle(voh_it.handle()).idx() ) <<
"Corresponding face Index wrong in VertexOHalfedgeIter step 2";
277 EXPECT_TRUE(voh_it) <<
"Iterator invalid in VertexOHalfedgeIter at step 2";
281 EXPECT_EQ(2, voh_it.handle().idx() ) <<
"Index wrong in VertexOHalfedgeIter step 3";
282 EXPECT_EQ(0, mesh_.face_handle(voh_it.handle()).idx() ) <<
"Corresponding face Index wrong in VertexOHalfedgeIter step 3";
283 EXPECT_TRUE(voh_it) <<
"Iterator invalid in VertexOHalfedgeIter at step 3";
287 EXPECT_EQ(11, voh_it.handle().idx() ) <<
"Index wrong in VertexOHalfedgeIter step 4";
288 EXPECT_EQ(3, mesh_.face_handle(voh_it.handle()).idx() ) <<
"Corresponding face Index wrong in VertexOHalfedgeIter step 4";
289 EXPECT_FALSE(voh_it) <<
"Iterator still valid in VertexOHalfedgeIter at step 4";
290 EXPECT_TRUE( voh_it == voh_end ) <<
"Miss matched end iterator";
294 EXPECT_EQ(6, voh_it.handle().idx() ) <<
"Index wrong in VertexOHalfedgeIter step 5";
295 EXPECT_EQ(1, mesh_.face_handle(voh_it.handle()).idx() ) <<
"Corresponding face Index wrong in VertexOHalfedgeIter step 5";
304 EXPECT_EQ(11, cvoh_it.handle().idx() ) <<
"Index wrong in ConstVertexOHalfedgeIter begin at initialization";
305 EXPECT_EQ(11, cvoh_end.handle().idx() ) <<
"Index wrong in ConstVertexOHalfedgeIter end at initialization";
306 EXPECT_EQ(3, mesh_.face_handle(cvoh_it.handle()).idx() ) <<
"Corresponding face Index wrong in ConstVertexOHalfedgeIter begin at initialization";
307 EXPECT_TRUE(cvoh_it) <<
"Iterator invalid in ConstVertexOHalfedgeIter at initialization";
311 EXPECT_EQ(6, cvoh_it.handle().idx() ) <<
"Index wrong in ConstVertexOHalfedgeIter step 1";
312 EXPECT_EQ(1, mesh_.face_handle(cvoh_it.handle()).idx() ) <<
"Corresponding face Index wrong in ConstVertexOHalfedgeIter step 1";
313 EXPECT_TRUE(cvoh_it) <<
"Iterator invalid in ConstVertexOHalfedgeIter at step 1";
317 EXPECT_EQ(1, cvoh_it.handle().idx() ) <<
"Index wrong in ConstVertexOHalfedgeIter step 2";
318 EXPECT_EQ(2, mesh_.face_handle(cvoh_it.handle()).idx() ) <<
"Corresponding face Index wrong in ConstVertexOHalfedgeIter step 2";
319 EXPECT_TRUE(cvoh_it) <<
"Iterator invalid in ConstVertexOHalfedgeIter at step 2";
323 EXPECT_EQ(2, cvoh_it.handle().idx() ) <<
"Index wrong in ConstVertexOHalfedgeIter step 3";
324 EXPECT_EQ(0, mesh_.face_handle(cvoh_it.handle()).idx() ) <<
"Corresponding face Index wrong in ConstVertexOHalfedgeIter step 3";
325 EXPECT_TRUE(cvoh_it) <<
"Iterator invalid in ConstVertexOHalfedgeIter at step 3";
329 EXPECT_EQ(11, cvoh_it.handle().idx() ) <<
"Index wrong in ConstVertexOHalfedgeIter step 4";
330 EXPECT_EQ(3, mesh_.face_handle(cvoh_it.handle()).idx() ) <<
"Corresponding face Index wrong in ConstVertexOHalfedgeIter step 4";
331 EXPECT_FALSE(cvoh_it) <<
"Iterator still valid in ConstVertexOHalfedgeIter at step 4";
332 EXPECT_TRUE( cvoh_it == cvoh_end ) <<
"Miss matched end iterator";
336 EXPECT_EQ(6, cvoh_it.handle().idx() ) <<
"Index wrong in ConstVertexOHalfedgeIter step 5";
337 EXPECT_EQ(1, mesh_.face_handle(cvoh_it.handle()).idx() ) <<
"Corresponding face Index wrong in ConstVertexOHalfedgeIter step 5";
351 Mesh::VertexHandle vhandle[5];
353 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
354 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
355 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
356 vhandle[3] = mesh_.add_vertex(Mesh::Point(3, 0, 0));
357 vhandle[4] = mesh_.add_vertex(Mesh::Point(4, 1, 0));
360 std::vector<Mesh::VertexHandle> face_vhandles;
362 face_vhandles.push_back(vhandle[0]);
363 face_vhandles.push_back(vhandle[1]);
364 face_vhandles.push_back(vhandle[2]);
365 mesh_.add_face(face_vhandles);
367 face_vhandles.clear();
369 face_vhandles.push_back(vhandle[2]);
370 face_vhandles.push_back(vhandle[1]);
371 face_vhandles.push_back(vhandle[3]);
372 mesh_.add_face(face_vhandles);
374 face_vhandles.clear();
376 face_vhandles.push_back(vhandle[2]);
377 face_vhandles.push_back(vhandle[3]);
378 face_vhandles.push_back(vhandle[4]);
379 mesh_.add_face(face_vhandles);
394 EXPECT_EQ(2, ff_it.handle().idx() ) <<
"Index wrong in FaceFaceIter at initialization";
395 EXPECT_TRUE(ff_it) <<
"Iterator invalid in FaceFaceIter at initialization";
397 EXPECT_EQ(0, ff_it.handle().idx() ) <<
"Index wrong in FaceFaceIter at step 1";
398 EXPECT_TRUE(ff_it) <<
"Iterator invalid in FaceFaceIter at step 1";
400 EXPECT_EQ(2, ff_it.handle().idx() ) <<
"Index wrong in FaceFaceIter at end";
401 EXPECT_FALSE(ff_it) <<
"Iterator invalid in FaceFaceIter at end";
402 EXPECT_TRUE( ff_it == ff_end ) <<
"End iterator for FaceFaceIter not matching";
407 EXPECT_EQ(2, cff_it.handle().idx() ) <<
"Index wrong in ConstFaceFaceIter at initialization";
408 EXPECT_TRUE(cff_it) <<
"Iterator invalid in ConstFaceFaceIter at initialization";
410 EXPECT_EQ(0, cff_it.handle().idx() ) <<
"Index wrong in ConstFaceFaceIter at step 1";
411 EXPECT_TRUE(cff_it) <<
"Iterator invalid in ConstFaceFaceIter at step 1";
413 EXPECT_EQ(2, cff_it.handle().idx() ) <<
"Index wrong in ConstFaceFaceIter at end";
414 EXPECT_FALSE(cff_it) <<
"Iterator invalid in ConstFaceFaceIter at end";
415 EXPECT_TRUE( cff_it == cff_end ) <<
"End iterator for ConstFaceFaceIter not matching";
427 Mesh::VertexHandle vhandle[6];
429 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
430 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
431 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
432 vhandle[3] = mesh_.add_vertex(Mesh::Point(3, 0, 0));
433 vhandle[4] = mesh_.add_vertex(Mesh::Point(4, 1, 0));
434 vhandle[5] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
437 std::vector<Mesh::VertexHandle> face_vhandles;
439 face_vhandles.push_back(vhandle[0]);
440 face_vhandles.push_back(vhandle[1]);
441 face_vhandles.push_back(vhandle[2]);
442 mesh_.add_face(face_vhandles);
444 face_vhandles.clear();
446 face_vhandles.push_back(vhandle[2]);
447 face_vhandles.push_back(vhandle[1]);
448 face_vhandles.push_back(vhandle[3]);
449 mesh_.add_face(face_vhandles);
451 face_vhandles.clear();
453 face_vhandles.push_back(vhandle[2]);
454 face_vhandles.push_back(vhandle[3]);
455 face_vhandles.push_back(vhandle[4]);
456 mesh_.add_face(face_vhandles);
458 face_vhandles.clear();
460 face_vhandles.push_back(vhandle[1]);
461 face_vhandles.push_back(vhandle[5]);
462 face_vhandles.push_back(vhandle[3]);
463 mesh_.add_face(face_vhandles);
483 EXPECT_EQ(2, ff_it.handle().idx() ) <<
"Index wrong in FaceFaceIter at initialization";
484 EXPECT_TRUE(ff_it) <<
"Iterator invalid in FaceFaceIter at initialization";
486 EXPECT_EQ(0, ff_it.handle().idx() ) <<
"Index wrong in FaceFaceIter at step 1";
487 EXPECT_TRUE(ff_it) <<
"Iterator invalid in FaceFaceIter at step 1";
489 EXPECT_EQ(3, ff_it.handle().idx() ) <<
"Index wrong in FaceFaceIter at step 2";
490 EXPECT_TRUE(ff_it) <<
"Iterator invalid in FaceFaceIter at step 2";
492 EXPECT_EQ(2, ff_it.handle().idx() ) <<
"Index wrong in FaceFaceIter at end";
493 EXPECT_FALSE(ff_it) <<
"Iterator invalid in FaceFaceIter at end";
494 EXPECT_TRUE( ff_it == ff_end ) <<
"End iterator for FaceFaceIter not matching";
499 EXPECT_EQ(2, cff_it.handle().idx() ) <<
"Index wrong in ConstFaceFaceIter at initialization";
500 EXPECT_TRUE(cff_it) <<
"Iterator invalid in ConstFaceFaceIter at initialization";
502 EXPECT_EQ(0, cff_it.handle().idx() ) <<
"Index wrong in ConstFaceFaceIter at step 1";
503 EXPECT_TRUE(cff_it) <<
"Iterator invalid in ConstFaceFaceIter at step 1";
505 EXPECT_EQ(3, cff_it.handle().idx() ) <<
"Index wrong in ConstFaceFaceIter at step 2";
506 EXPECT_TRUE(cff_it) <<
"Iterator invalid in ConstFaceFaceIter at step 2";
508 EXPECT_EQ(2, cff_it.handle().idx() ) <<
"Index wrong in ConstFaceFaceIter at end";
509 EXPECT_FALSE(cff_it) <<
"Iterator invalid in ConstFaceFaceIter at end";
510 EXPECT_TRUE( cff_it == cff_end ) <<
"End iterator for ConstFaceFaceIter not matching";
522 Mesh::VertexHandle vhandle[4];
524 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 0, 0));
525 vhandle[1] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
526 vhandle[2] = mesh_.add_vertex(Mesh::Point(1, 1, 0));
527 vhandle[3] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
531 std::vector<Mesh::VertexHandle> face_vhandles;
533 face_vhandles.push_back(vhandle[0]);
534 face_vhandles.push_back(vhandle[2]);
535 face_vhandles.push_back(vhandle[1]);
536 Mesh::FaceHandle fh1 = mesh_.add_face(face_vhandles);
538 face_vhandles.clear();
540 face_vhandles.push_back(vhandle[0]);
541 face_vhandles.push_back(vhandle[3]);
542 face_vhandles.push_back(vhandle[2]);
543 Mesh::FaceHandle fh2 = mesh_.add_face(face_vhandles);
545 face_vhandles.clear();
556 EXPECT_EQ(4u , mesh_.n_vertices() ) <<
"Wrong number of vertices";
557 EXPECT_EQ(2u , mesh_.n_faces() ) <<
"Wrong number of faces";
564 Mesh::FaceHandle faceHandle1 = mesh_.handle(*face_iter);
565 const Mesh::Face& face1 = mesh_.face(faceHandle1);
567 EXPECT_EQ(1, faceHandle1.idx() ) <<
"Wrong face handle index when getting from iterator via handle";
571 Mesh::FaceHandle fh = mesh_.handle(face);
574 EXPECT_EQ(1, fh.idx() ) <<
"Wrong face handle index when getting from iterator via face";
576 bool correct = (&face == &face1);
579 EXPECT_TRUE(correct) <<
"The faces are different although both ways should give the same one";
592 Mesh::VertexHandle vhandle[5];
594 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
595 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
596 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
597 vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0));
598 vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
600 std::vector<Mesh::VertexHandle> face_vhandles;
602 face_vhandles.push_back(vhandle[0]);
603 face_vhandles.push_back(vhandle[1]);
604 face_vhandles.push_back(vhandle[2]);
605 mesh_.add_face(face_vhandles);
607 face_vhandles.clear();
609 face_vhandles.push_back(vhandle[1]);
610 face_vhandles.push_back(vhandle[3]);
611 face_vhandles.push_back(vhandle[4]);
612 mesh_.add_face(face_vhandles);
614 face_vhandles.clear();
616 face_vhandles.push_back(vhandle[0]);
617 face_vhandles.push_back(vhandle[3]);
618 face_vhandles.push_back(vhandle[1]);
619 mesh_.add_face(face_vhandles);
621 face_vhandles.clear();
623 face_vhandles.push_back(vhandle[2]);
624 face_vhandles.push_back(vhandle[1]);
625 face_vhandles.push_back(vhandle[4]);
626 mesh_.add_face(face_vhandles);
641 Mesh::EdgeHandle eh = mesh_.edge_handle(voh_it.handle());
642 Mesh::HalfedgeHandle heh = mesh_.halfedge_handle(voh_it);
643 Mesh::VertexHandle vh2 = mesh_.to_vertex_handle(voh_it);
645 EXPECT_EQ(eh.idx() , 5 ) <<
"Wrong edge handle after dereferencing";
646 EXPECT_EQ(heh.idx() , 1 ) <<
"Wrong half edge handle after dereferencing";
647 EXPECT_EQ(vh2.idx() , 4 ) <<
"Wrong vertex handle after dereferencing";
654 #endif // INCLUDE GUARD