diff --git a/internal/ceres/levenberg_marquardt_test.cc~ b/internal/ceres/levenberg_marquardt_test.cc~
deleted file mode 100644
index a1d9c4f..0000000
--- a/internal/ceres/levenberg_marquardt_test.cc~
+++ /dev/null
@@ -1,82 +0,0 @@
-// Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2010, 2011, 2012 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: keir@google.com (Keir Mierle)
-
-#include "ceres/levenberg_marquardt.h"
-
-#include "gtest/gtest.h"
-
-namespace ceres2 {
-namespace internal {
-
-class PowellEvaluator : public Evaluator {
- public:
-  PowellEvaluator(const Program& program);
-  virtual ~PowellEvaluator() {}
-
-  // Implementation of Evaluator interface.
-  virtual SparseMatrix* CreateJacobian() const {
-    DenseSparseMatrix* dense_jacobian =
-        new DenseSparseMatrix(NumResiduals(), NumEffectiveParameters());
-    dense_jacobian->SetZero();
-    return dense_jacobian;
-  }
-
-  virtual bool Evaluate(const double* state,
-                        double* cost,
-                        double* residuals,
-                        SparseMatrix* jacobian) {
-
-    // f1 = x1 + 10 * x2;
-    double r0 = x1[0] + T(10.0) * x2[0];
-    // f2 = sqrt(5) (x3 - x4)
-    double r1 = T(sqrt(5.0)) * (x3[0] - x4[0]);
-    // f3 = (x2 - 2 x3)^2
-    double r2 = (x2[0] - T(2.0) * x4[0]) * (x2[0] - T(2.0) * x4[0]);
-    // f4 = sqrt(10) (x1 - x4)^2
-    double r3 = T(sqrt(10.0)) * (x1[0] - x4[0]) * (x1[0] - x4[0]);
-
-    if (residuals != NULL) {
-      residuals[0] = r0;
-
-    if (jacobian == 
-    AlignedMatrixRef jacobian 
-  }
-
-  virtual bool Plus(const double* state,
-                    const double* delta,
-                    double* state_plus_delta) const;
-  virtual int NumEffectiveParameters() const;
-  virtual int NumParameters() const;
-  virtual int NumResiduals() const;
-};
-
-
-}  // namespace internal
-}  // namespace ceres2
