From 82b49dfb770a5dacfd4f04413608cd13fd04228d Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 13 Aug 2023 18:40:24 +0200 Subject: [PATCH] WIP --- src/db/unit_tests/dbTrianglesTests.cc | 75 +++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/src/db/unit_tests/dbTrianglesTests.cc b/src/db/unit_tests/dbTrianglesTests.cc index 4696e4144..d3aa07cb9 100644 --- a/src/db/unit_tests/dbTrianglesTests.cc +++ b/src/db/unit_tests/dbTrianglesTests.cc @@ -24,6 +24,9 @@ #include "dbTriangles.h" #include "tlUnitTest.h" +#include +#include + TEST(Triangle_basic) { db::Triangles tris; @@ -141,3 +144,75 @@ TEST(Triangle_search_edges_crossing) EXPECT_EQ (std::find (xedges.begin (), xedges.end (), s1) != xedges.end (), true); EXPECT_EQ (std::find (xedges.begin (), xedges.end (), s2) != xedges.end (), true); } + +// Returns a random float number between 0.0 and 1.0 +inline double flt_rand () +{ + return rand () * (1.0 / double (RAND_MAX)); +} + +namespace { + struct PointLessOp + { + bool operator() (const db::DPoint &a, const db::DPoint &b) const + { + return a.less (b); + } + }; +} + +TEST(Triangle_test_heavy_insert) +{ + tl::info << "Running test_heavy_insert " << tl::noendl; + + for (unsigned int l = 0; l < 100; ++l) { + + srand (l); + tl::info << "." << tl::noendl; + + db::Triangles tris; + double res = 128.0; + + unsigned int n = rand () % 190 + 10; + + db::DBox bbox; + std::map vmap; + + for (unsigned int i = 0; i < n; ++i) { + double x = round (flt_rand () * res) * (1.0 / res); + double y = round (flt_rand () * res) * (1.0 / res); + db::Vertex *v = tris.insert_point (x, y); + bbox += db::DPoint (x, y); + vmap.insert (std::make_pair (*v, false)); + } + + // not strictly true, but very likely with at least 10 vertexes: + EXPECT_EQ (tris.num_triangles () >= 1, true); + EXPECT_EQ (tris.bbox ().to_string (), bbox.to_string ()); + + bool ok = true; + for (auto t = tris.begin (); t != tris.end (); ++t) { + for (int i = 0; i < 3; ++i) { + auto f = vmap.find (*t->vertex (i)); + if (f == vmap.end ()) { + tl::error << "Could not identify triangle vertex " << t->vertex (i)->to_string () << " as inserted vertex"; + ok = false; + } else { + f->second = true; + } + } + } + for (auto m = vmap.begin (); m != vmap.end (); ++m) { + if (!m->second) { + tl::error << "Could not identify vertex " << m->first.to_string () << " with a triangle"; + ok = false; + } + } + EXPECT_EQ (ok, true); + + EXPECT_EQ (tris.check(), true); + + } + + tl::info << tl::endl << "done."; +}