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