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