From 1d3ef7f6ba6dc1d8e29e5b21129519a1daf29c5e Mon Sep 17 00:00:00 2001
From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu>
Date: Tue, 14 May 2019 18:55:38 -0300
Subject: [PATCH] test deletion

---
 Framework/StackInterface/testSecondaryView.cc | 73 +++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/Framework/StackInterface/testSecondaryView.cc b/Framework/StackInterface/testSecondaryView.cc
index 2d2064b64..a306de379 100644
--- a/Framework/StackInterface/testSecondaryView.cc
+++ b/Framework/StackInterface/testSecondaryView.cc
@@ -134,4 +134,77 @@ TEST_CASE("SecondaryStack", "[stack]") {
 
     REQUIRE(view.GetSize() == 1);
   }
+
+  SECTION("deletion") {
+    StackTest stack;
+    stack.AddParticle(std::tuple{0.});
+
+    {
+      auto particle = stack.GetNextParticle();
+      StackTestView view(particle);
+
+      auto proj = view.GetProjectile();
+      proj.AddSecondary(std::tuple{-2.});
+      proj.AddSecondary(std::tuple{-1.});
+      proj.AddSecondary(std::tuple{1.});
+      proj.AddSecondary(std::tuple{2.});
+
+      CHECK(stack.GetSize() == 5);
+
+      // now delete all negative entries, i.e. -1 and -2
+      auto p = view.begin();
+      while (p != view.end()) {
+        auto data = p.GetData();
+        if (data < 0) {
+          std::cout << "deleting " << data << ", ";
+          p.Delete();
+        } else {
+          ++p;
+        }
+      }
+
+      // stack should contain 0, 1, 2 now
+
+      CHECK(stack.GetSize() == 3);
+
+      std::cout << std::endl;
+      for (auto& p : stack) { std::cout << p.GetData() << " | "; }
+      std::cout << std::endl;
+    }
+
+    // repeat
+
+    {
+      auto particle = stack.GetNextParticle();
+      StackTestView view(particle);
+
+      // put -2,...,+2 on stack
+      auto proj = view.GetProjectile();
+      proj.AddSecondary(std::tuple{-2.});
+      proj.AddSecondary(std::tuple{-1.});
+      proj.AddSecondary(std::tuple{1.});
+      proj.AddSecondary(std::tuple{2.});
+      // stack should contain 0, 1, 2, [ -2, -1, 1, 2]
+
+      auto p = view.begin();
+      while (p != view.end()) {
+        auto data = p.GetData();
+        if (data < 0) {
+          std::cout << "deleting " << data << ", ";
+          p.Delete();
+        } else {
+          ++p;
+        }
+      }
+
+      // stack should contain 0, 1, 2, 0, [1, 2]
+      // view should contain 1, 2
+
+      CHECK(stack.GetSize() == 6);
+
+      std::cout << std::endl;
+      for (auto& p : stack) { std::cout << p.GetData() << " | "; }
+      std::cout << std::endl;
+    }
+  }
 }
-- 
GitLab