From 7a0a5a093a8e2cfa03bd6f3142da491d0eea9260 Mon Sep 17 00:00:00 2001
From: joanvallve <jvallve@iri.upc.edu>
Date: Tue, 5 Oct 2021 18:16:37 +0200
Subject: [PATCH] working on processor gtest

---
 src/processor/processor_fix_wing_model.cpp |   3 +
 test/CMakeLists.txt                        |   4 +
 test/gtest_processor_fix_wing_model.cpp    | 157 ++++-----------------
 3 files changed, 36 insertions(+), 128 deletions(-)

diff --git a/src/processor/processor_fix_wing_model.cpp b/src/processor/processor_fix_wing_model.cpp
index 869bbc087..7c12e90f8 100644
--- a/src/processor/processor_fix_wing_model.cpp
+++ b/src/processor/processor_fix_wing_model.cpp
@@ -34,6 +34,9 @@ void ProcessorFixWingModel::processKeyFrame(FrameBasePtr _keyframe_ptr, const do
     if (_keyframe_ptr->getV()->isFixed())
         return;
 
+    if (_keyframe_ptr->getFactorOf(shared_from_this()) != nullptr)
+        return;
+
     // emplace capture
     auto cap = CaptureBase::emplace<CaptureBase>(_keyframe_ptr, "CaptureBase",
                                                  _keyframe_ptr->getTimeStamp(), getSensor());
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index a6305564d..46964ac57 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -234,6 +234,10 @@ wolf_add_gtest(gtest_param_prior gtest_param_prior.cpp)
 target_link_libraries(gtest_param_prior ${PLUGIN_NAME})
 
 # ProcessorDiffDriveSelfcalib class test
+wolf_add_gtest(gtest_processor_fix_wing_model gtest_processor_fix_wing_model.cpp)
+target_link_libraries(gtest_processor_fix_wing_model ${PLUGIN_NAME})
+
+# ProcessorFixWingModel class test
 wolf_add_gtest(gtest_processor_diff_drive gtest_processor_diff_drive.cpp)
 target_link_libraries(gtest_processor_diff_drive ${PLUGIN_NAME})
 
diff --git a/test/gtest_processor_fix_wing_model.cpp b/test/gtest_processor_fix_wing_model.cpp
index 1dd0fba63..61dc64445 100644
--- a/test/gtest_processor_fix_wing_model.cpp
+++ b/test/gtest_processor_fix_wing_model.cpp
@@ -55,155 +55,56 @@ TEST_F(ProcessorFixWingModelTest, setup)
     EXPECT_TRUE(problem->check());
 }
 
-TEST_F(ProcessorFixWingModelTest, frame_stored)
+TEST_F(ProcessorFixWingModelTest, keyFrameCallback)
 {
     // new frame
-    auto frm1 = emplaceFrame(1, Vector3d::Zero());
-
-    // keyframecallback
-    problem->keyFrameCallback(frm1, nullptr, 0.5);
-
-    EXPECT_EQ(processor->getNStoredFrames(), 1);
-    EXPECT_EQ(processor->getNStoredCaptures(), 0);
-}
-
-TEST_F(ProcessorFixWingModelTest, capture_stored)
-{
-    // new capture
-    auto cap1 = createCapture(1);
-
-    // captureCallback
-    processor->captureCallback(cap1);
-
-    EXPECT_EQ(processor->getNStoredFrames(), 0);
-    EXPECT_EQ(processor->getNStoredCaptures(), 1);
-}
-
-TEST_F(ProcessorFixWingModelTest, captureCallbackCase1)
-{
-    // emplace frame and capture
-    auto frm1 = emplaceFrame(1, Vector3d::Zero());
-    auto cap1 = emplaceCapture(frm1);
-
-    // captureCallback
-    processor->captureCallback(cap1);
-
-    EXPECT_EQ(cap1->getFeatureList().size(), 1); // capture processed by the processor
-    EXPECT_EQ(processor->getNStoredFrames(), 0);
-    EXPECT_EQ(processor->getNStoredCaptures(), 0);
-}
-
-TEST_F(ProcessorFixWingModelTest, captureCallbackCase2)
-{
-    // new frame
-    auto frm1 = emplaceFrame(1, Vector3d::Zero());
-
-    // new capture
-    auto cap1 = createCapture(1);
-
-    // keyframecallback
-    problem->keyFrameCallback(frm1, nullptr, 0.5);
-
-    // captureCallback
-    processor->captureCallback(cap1);
-
-    EXPECT_EQ(cap1->getFrame(), frm1); // capture processed by the processor
-    EXPECT_EQ(cap1->getFeatureList().size(), 1); // capture processed by the processor
-    EXPECT_EQ(processor->getNStoredFrames(), 0);
-    EXPECT_EQ(processor->getNStoredCaptures(), 0);
-}
-
-TEST_F(ProcessorFixWingModelTest, captureCallbackCase3)
-{
-    // new frame
-    auto frm1 = emplaceFrame(1, Vector3d::Zero());
-    // new capture
-    auto cap1 = createCapture(2);
+    auto frm1 = emplaceFrame(1, (Vector10d() << 0,0,0,0,0,0,1,1,0,0).finished());
 
     // keyframecallback
     problem->keyFrameCallback(frm1, nullptr, 0.5);
 
-    // captureCallback
-    processor->captureCallback(cap1);
-
-    EXPECT_TRUE(cap1->getFrame() == nullptr);
-    EXPECT_EQ(cap1->getFeatureList().size(), 0);
-    EXPECT_EQ(processor->getNStoredFrames(), 1);
-    EXPECT_EQ(processor->getNStoredCaptures(), 1);
-}
+    // check one capture
+    ASSERT_EQ(frm1->getCapturesOf(sensor).size(), 1);
+    auto cap = frm1->getCaptureOf(sensor);
+    ASSERT_TRUE(cap != nullptr);
 
-TEST_F(ProcessorFixWingModelTest, keyFrameCallbackCase1)
-{
-    // emplace frame and capture
-    auto frm1 = emplaceFrame(1, Vector3d::Zero());
-    auto cap1 = emplaceCapture(frm1);
-
-    // keyframecallback
-    problem->keyFrameCallback(frm1, nullptr, 0.5);
+    // check one feature
+    ASSERT_EQ(cap->getFeatureList().size(), 1);
 
-    EXPECT_EQ(cap1->getFeatureList().size(), 1); // capture processed by the processor
-    EXPECT_EQ(processor->getNStoredFrames(), 0);
-    EXPECT_EQ(processor->getNStoredCaptures(), 0);
+    // check one factor
+    auto fac = frm1->getFactorOf(processor, "FactorVelocityLocalDirection3d");
+    ASSERT_TRUE(fac != nullptr);
+    ASSERT_TRUE(fac->getFeature() != nullptr);
+    ASSERT_TRUE(fac->getCapture() == frm1->getCaptureOf(sensor));
 }
 
-TEST_F(ProcessorFixWingModelTest, keyFrameCallbackCase2)
+TEST_F(ProcessorFixWingModelTest, keyFrameCallbackRepeated)
 {
     // new frame
-    auto frm1 = emplaceFrame(1, Vector3d::Zero());
-    // new capture
-    auto cap1 = createCapture(1);
-
-    // captureCallback
-    processor->captureCallback(cap1);
+    auto frm1 = emplaceFrame(1, (Vector10d() << 0,0,0,0,0,0,1,1,0,0).finished());
 
     // keyframecallback
     problem->keyFrameCallback(frm1, nullptr, 0.5);
 
-    EXPECT_EQ(cap1->getFrame(), frm1); // capture processed by the processor
-    EXPECT_EQ(cap1->getFeatureList().size(), 1); // capture processed by the processor
-    EXPECT_EQ(processor->getNStoredFrames(), 0);
-    EXPECT_EQ(processor->getNStoredCaptures(), 0);
-}
-
-TEST_F(ProcessorFixWingModelTest, keyFrameCallbackCase3)
-{
-    // new frame
-    auto frm1 = emplaceFrame(2, Vector3d::Zero());
-    // new capture
-    auto cap1 = createCapture(1);
-
-    // captureCallback
-    processor->captureCallback(cap1);
-
-    // keyframecallback
+    // repeated keyframecallback
     problem->keyFrameCallback(frm1, nullptr, 0.5);
 
-    EXPECT_TRUE(cap1->getFrame() == nullptr);
-    EXPECT_EQ(cap1->getFeatureList().size(), 0);
-    EXPECT_EQ(processor->getNStoredFrames(), 1);
-    EXPECT_EQ(processor->getNStoredCaptures(), 1);
-}
+    // check one capture
+    ASSERT_EQ(frm1->getCapturesOf(sensor).size(), 1);
+    auto cap = frm1->getCaptureOf(sensor);
+    ASSERT_TRUE(cap != nullptr);
 
-TEST_F(ProcessorFixWingModelTest, keyFrameCallbackCase4)
-{
-    // new frame
-    auto frm1 = emplaceFrame(1, Vector3d::Zero());
-    // new capture
-    auto cap1 = createCapture(2);
-
-    // captureCallback
-    processor->captureCallback(cap1);
+    // check one feature
+    ASSERT_EQ(cap->getFeatureList().size(), 1);
 
-    // keyframecallback
-    problem->keyFrameCallback(frm1, nullptr, 0.5);
-
-    EXPECT_TRUE(cap1->getFrame() == nullptr);
-    EXPECT_EQ(cap1->getFeatureList().size(), 0);
-    EXPECT_EQ(processor->getNStoredFrames(), 0);
-    EXPECT_EQ(processor->getNStoredCaptures(), 1);
+    // check one factor
+    auto fac = frm1->getFactorOf(processor, "FactorVelocityLocalDirection3d");
+    ASSERT_TRUE(fac != nullptr);
+    ASSERT_TRUE(fac->getFeature() != nullptr);
+    ASSERT_TRUE(fac->getCapture() == frm1->getCaptureOf(sensor));
 }
 
-TEST_F(ProcessorFixWingModelTest, captureCallbackMatch)
+/*TEST_F(ProcessorFixWingModelTest, captureCallbackMatch)
 {
     // new frame
     auto frm1 = emplaceFrame(1, Vector3d::Zero());
@@ -305,7 +206,7 @@ TEST_F(ProcessorFixWingModelTest, emplaceFactors)
     EXPECT_EQ(cap4->getFeatureList().front()->getFactorList().size(), 1);
 
     EXPECT_EQ(cap1->getFrame()->getConstrainedByList().front(), cap4->getFeatureList().front()->getFactorList().front());
-}
+}*/
 
 int main(int argc, char **argv)
 {
-- 
GitLab