Test Expressions with 'insert' instead of a macro
Change-Id: Id39a957dfe02ecd55a9f4bdd0e7952f1941d38bf
diff --git a/internal/ceres/conditional_expressions_test.cc b/internal/ceres/conditional_expressions_test.cc
index d7b3979..5b0d8e4 100644
--- a/internal/ceres/conditional_expressions_test.cc
+++ b/internal/ceres/conditional_expressions_test.cc
@@ -31,7 +31,10 @@
#define CERES_CODEGEN
-#include "expression_test.h"
+#include "ceres/internal/expression_graph.h"
+#include "ceres/internal/expression_ref.h"
+
+#include "gtest/gtest.h"
namespace ceres {
namespace internal {
@@ -53,10 +56,12 @@
// Expected code
// v_0 = 2;
+ ExpressionGraph reference;
// clang-format off
// Id Type Lhs Value Name Arguments
- CHECK_EXPRESSION(0, COMPILE_TIME_CONSTANT, 0, 2, "",);
+ reference.InsertExpression(0, ExpressionType::COMPILE_TIME_CONSTANT, 0, {}, "", 2);
// clang-format on
+ EXPECT_EQ(reference, graph);
// Variables after execution:
//
@@ -84,12 +89,14 @@
// v_1 = 4;
// v_1 = v_0;
+ ExpressionGraph reference;
// clang-format off
// Id, Type, Lhs, Value, Name, Arguments
- CHECK_EXPRESSION( 0, COMPILE_TIME_CONSTANT, 0, 2, "", );
- CHECK_EXPRESSION( 1, COMPILE_TIME_CONSTANT, 1, 4, "", );
- CHECK_EXPRESSION( 2, ASSIGNMENT, 1, 0, "", 0);
+ reference.InsertExpression( 0, ExpressionType::COMPILE_TIME_CONSTANT, 0, {} , "", 2);
+ reference.InsertExpression( 1, ExpressionType::COMPILE_TIME_CONSTANT, 1, {} , "", 4);
+ reference.InsertExpression( 2, ExpressionType::ASSIGNMENT, 1, {0}, "", 0);
// clang-format on
+ EXPECT_EQ(reference, graph);
// Variables after execution:
//
@@ -121,15 +128,17 @@
EXPECT_EQ(graph.Size(), 6);
+ ExpressionGraph reference;
// clang-format off
// Id, Type, Lhs, Value, Name, Arguments...
- CHECK_EXPRESSION( 0, COMPILE_TIME_CONSTANT, 0, 2, "", );
- CHECK_EXPRESSION( 1, COMPILE_TIME_CONSTANT, 1, 3, "", );
- CHECK_EXPRESSION( 2, BINARY_COMPARISON, 2, 0, "<", 0, 1);
- CHECK_EXPRESSION( 3, IF, -1, 0, "", 2);
- CHECK_EXPRESSION( 4, ELSE, -1, 0, "", );
- CHECK_EXPRESSION( 5, ENDIF, -1, 0, "", );
+ reference.InsertExpression( 0, ExpressionType::COMPILE_TIME_CONSTANT, 0, {} , "", 2);
+ reference.InsertExpression( 1, ExpressionType::COMPILE_TIME_CONSTANT, 1, {} , "", 3);
+ reference.InsertExpression( 2, ExpressionType::BINARY_COMPARISON, 2, {0, 1} , "<", 0);
+ reference.InsertExpression( 3, ExpressionType::IF, -1, {2} , "", 0);
+ reference.InsertExpression( 4, ExpressionType::ELSE, -1, {} , "", 0);
+ reference.InsertExpression( 5, ExpressionType::ENDIF, -1, {} , "", 0);
// clang-format on
+ EXPECT_EQ(reference, graph);
}
TEST(Expression, ConditionalAssignment) {
@@ -160,20 +169,22 @@
// v_9 = v_4 + v_0;
// v_4 = v_9;
+ ExpressionGraph reference;
// clang-format off
// Id, Type, Lhs, Value, Name, Arguments...
- CHECK_EXPRESSION( 0, COMPILE_TIME_CONSTANT, 0, 2, "", );
- CHECK_EXPRESSION( 1, COMPILE_TIME_CONSTANT, 1, 3, "", );
- CHECK_EXPRESSION( 2, BINARY_COMPARISON, 2, 0, "<", 0, 1);
- CHECK_EXPRESSION( 3, IF, -1, 0, "", 2);
- CHECK_EXPRESSION( 4, BINARY_ARITHMETIC, 4, 0, "+", 0, 1);
- CHECK_EXPRESSION( 5, ELSE, -1, 0, "", );
- CHECK_EXPRESSION( 6, BINARY_ARITHMETIC, 6, 0, "-", 0, 1);
- CHECK_EXPRESSION( 7, ASSIGNMENT, 4, 0, "", 6 );
- CHECK_EXPRESSION( 8, ENDIF, -1, 0, "", );
- CHECK_EXPRESSION( 9, BINARY_ARITHMETIC, 9, 0, "+", 4, 0);
- CHECK_EXPRESSION( 10, ASSIGNMENT, 4, 0, "", 9 );
+ reference.InsertExpression( 0, ExpressionType::COMPILE_TIME_CONSTANT, 0, {} , "", 2);
+ reference.InsertExpression( 1, ExpressionType::COMPILE_TIME_CONSTANT, 1, {} , "", 3);
+ reference.InsertExpression( 2, ExpressionType::BINARY_COMPARISON, 2, {0, 1}, "<", 0);
+ reference.InsertExpression( 3, ExpressionType::IF, -1, {2} , "", 0);
+ reference.InsertExpression( 4, ExpressionType::BINARY_ARITHMETIC, 4, {0, 1}, "+", 0);
+ reference.InsertExpression( 5, ExpressionType::ELSE, -1, {} , "", 0);
+ reference.InsertExpression( 6, ExpressionType::BINARY_ARITHMETIC, 6, {0, 1}, "-", 0);
+ reference.InsertExpression( 7, ExpressionType::ASSIGNMENT, 4, {6} , "", 0);
+ reference.InsertExpression( 8, ExpressionType::ENDIF, -1, {} , "", 0);
+ reference.InsertExpression( 9, ExpressionType::BINARY_ARITHMETIC, 9, {4, 0}, "+", 0);
+ reference.InsertExpression( 10, ExpressionType::ASSIGNMENT, 4, {9} , "", 0);
// clang-format on
+ EXPECT_EQ(reference, graph);
// Variables after execution:
//
diff --git a/internal/ceres/expression_test.cc b/internal/ceres/expression_test.cc
index c21ae31..7dd5a61 100644
--- a/internal/ceres/expression_test.cc
+++ b/internal/ceres/expression_test.cc
@@ -31,8 +31,10 @@
#define CERES_CODEGEN
-#include "ceres/expression_test.h"
+#include "ceres/internal/expression_graph.h"
+#include "ceres/internal/expression_ref.h"
#include "ceres/jet.h"
+#include "gtest/gtest.h"
namespace ceres {
namespace internal {
diff --git a/internal/ceres/expression_test.h b/internal/ceres/expression_test.h
deleted file mode 100644
index 2be7f8e..0000000
--- a/internal/ceres/expression_test.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2019 Google Inc. All rights reserved.
-// http://code.google.com/p/ceres-solver/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the following disclaimer in the documentation
-// and/or other materials provided with the distribution.
-// * Neither the name of Google Inc. nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: darius.rueckert@fau.de (Darius Rueckert)
-//
-
-#ifndef CERES_PUBLIC_EXPRESSION_TEST_H_
-#define CERES_PUBLIC_EXPRESSION_TEST_H_
-
-#include "ceres/internal/expression_graph.h"
-#include "ceres/internal/expression_ref.h"
-
-#include "gtest/gtest.h"
-
-// This file adds a few helper functions to test Expressions and
-// ExpressionGraphs for correctness.
-namespace ceres {
-namespace internal {
-
-inline void TestExpression(const Expression& expr,
- ExpressionType type,
- ExpressionId lhs_id,
- double value,
- const std::string& name,
- const std::vector<ExpressionId>& arguments) {
- EXPECT_EQ(static_cast<int>(expr.type()), static_cast<int>(type));
- EXPECT_EQ(expr.lhs_id(), lhs_id);
- EXPECT_EQ(expr.value(), value);
- EXPECT_EQ(expr.name(), name);
- EXPECT_EQ(expr.arguments(), arguments);
-}
-
-#define CHECK_EXPRESSION(_id, _type, _lhs_id, _value, _name, ...) \
- TestExpression(graph.ExpressionForId(_id), \
- ExpressionType::_type, \
- _lhs_id, \
- _value, \
- _name, \
- {__VA_ARGS__})
-
-} // namespace internal
-} // namespace ceres
-
-#endif