diff --git a/test/unit/test_morph_embedding.cpp b/test/unit/test_morph_embedding.cpp index 59570a6a9da42d0af41fb8dc23701470c5c0a54a..ba702667f7fae1c371ae9efd793feedfe3d0b89c 100644 --- a/test/unit/test_morph_embedding.cpp +++ b/test/unit/test_morph_embedding.cpp @@ -216,3 +216,31 @@ TEST(embedding, partial_area) { double expected_ixa = 3/(9.5*8)/pi; EXPECT_TRUE(near_relative(expected_ixa, em.integrate_ixa(mcable{1, 0.1, 0.4}), reltol)); } + +TEST(embedding, area_0_length_segment) { + using testing::near_relative; + constexpr double pi = math::pi<double>; + constexpr double reltol = 1e-10; + + segment_tree t1, t2; + + t1.append(mnpos, { 0, 0, 0, 10}, {10, 0, 0, 10}, 0); + t1.append(0, {10, 0, 0, 20}, {30, 0, 0, 20}, 0); + + t2.append(mnpos, { 0, 0, 0, 10}, {10, 0, 0, 10}, 0); + t2.append(0, {10, 0, 0, 10}, {10, 0, 0, 20}, 0); + t2.append(1, {10, 0, 0, 20}, {30, 0, 0, 20}, 0); + + embedding em1{morphology(t1)}, em2{morphology(t2)}; + + double a1 = em1.integrate_area(mcable{0, 0, 1}); + double expected_a1 = 2*pi*(10*10+20*20); + EXPECT_TRUE(near_relative(a1, expected_a1, reltol)); + + // The second morphology includes the anulus joining the + // first and last segment. + + double a2 = em2.integrate_area(mcable{0, 0, 1}); + double expected_a2 = expected_a1 + pi*(20*20-10*10); + EXPECT_TRUE(near_relative(a2, expected_a2, reltol)); +}