From 7c9e28c1687ad15b5ea2801e44925fe1950ce1d3 Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Wed, 23 Feb 2022 14:51:07 +0100 Subject: [PATCH] Matrix: convert helper test to gtest --- src/lib/matrix/test/CMakeLists.txt | 2 +- src/lib/matrix/test/MatrixHelperTest.cpp | 107 +++++++++++++++++++++++ src/lib/matrix/test/helper.cpp | 77 ---------------- 3 files changed, 108 insertions(+), 78 deletions(-) create mode 100644 src/lib/matrix/test/MatrixHelperTest.cpp delete mode 100644 src/lib/matrix/test/helper.cpp diff --git a/src/lib/matrix/test/CMakeLists.txt b/src/lib/matrix/test/CMakeLists.txt index e291be4504..50a7cf1695 100644 --- a/src/lib/matrix/test/CMakeLists.txt +++ b/src/lib/matrix/test/CMakeLists.txt @@ -18,7 +18,6 @@ set(tests vector3 integration squareMatrix - helper least_squares upperRightTriangle pseudoInverse @@ -43,5 +42,6 @@ px4_add_unit_gtest(SRC MatrixCopyToTest.cpp) px4_add_unit_gtest(SRC MatrixDualTest.cpp) px4_add_unit_gtest(SRC MatrixFilterTest.cpp) px4_add_unit_gtest(SRC MatrixHatveeTest.cpp) +px4_add_unit_gtest(SRC MatrixHelperTest.cpp) px4_add_unit_gtest(SRC MatrixSparseVectorTest.cpp) px4_add_unit_gtest(SRC MatrixUnwrapTest.cpp) diff --git a/src/lib/matrix/test/MatrixHelperTest.cpp b/src/lib/matrix/test/MatrixHelperTest.cpp new file mode 100644 index 0000000000..42974081a4 --- /dev/null +++ b/src/lib/matrix/test/MatrixHelperTest.cpp @@ -0,0 +1,107 @@ +/**************************************************************************** + * + * Copyright (C) 2022 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name PX4 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. + * + ****************************************************************************/ + +#include +#include + +using namespace matrix; + +TEST(MatrixHelperTest, Helper) +{ + // general wraps + EXPECT_FLOAT_EQ(wrap(4., 0., 10.), 4.); + EXPECT_FLOAT_EQ(wrap(4., 0., 1.), 0.); + EXPECT_FLOAT_EQ(wrap(-4., 0., 10.), 6.); + EXPECT_FLOAT_EQ(wrap(-18., 0., 10.), 2.); + EXPECT_FLOAT_EQ(wrap(-1.5, 3., 5.), 4.); + EXPECT_FLOAT_EQ(wrap(15.5, 3., 5.), 3.); + EXPECT_FLOAT_EQ(wrap(-1., 30., 40.), 39.); + EXPECT_FLOAT_EQ(wrap(-8000., -555., 1.), -216.); + EXPECT_FLOAT_EQ(wrap(0., 0., 360.), 0.); + EXPECT_FLOAT_EQ(wrap(0. - FLT_EPSILON, 0., 360.), 360.); + EXPECT_FLOAT_EQ(wrap(0. + FLT_EPSILON, 0., 360.), 0.); + EXPECT_FLOAT_EQ(wrap(360., 0., 360.), 0.); + EXPECT_FLOAT_EQ(wrap(360. - FLT_EPSILON, 0., 360.), 360.); + EXPECT_FLOAT_EQ(wrap(360. + FLT_EPSILON, 0., 360.), 0.); + + // integer wraps + EXPECT_EQ(wrap(-10, 0, 10), 0); + EXPECT_EQ(wrap(-4, 0, 10), 6); + EXPECT_EQ(wrap(0, 0, 10), 0); + EXPECT_EQ(wrap(4, 0, 10), 4); + EXPECT_EQ(wrap(10, 0, 10), 0); + + // wrap pi + EXPECT_FLOAT_EQ(wrap_pi(0.), 0.); + EXPECT_FLOAT_EQ(wrap_pi(4.), (4. - M_TWOPI)); + EXPECT_FLOAT_EQ(wrap_pi(-4.), (-4. + M_TWOPI)); + EXPECT_FLOAT_EQ(wrap_pi(3.), 3.); + EXPECT_FLOAT_EQ(wrap_pi(100.), (100. - 32. * M_PI)); + EXPECT_FLOAT_EQ(wrap_pi(-100.), (-100. + 32. * M_PI)); + EXPECT_FLOAT_EQ(wrap_pi(-101.), (-101. + 32. * M_PI)); + EXPECT_FALSE(is_finite(wrap_pi(NAN))); + + // wrap 2pi + EXPECT_FLOAT_EQ(wrap_2pi(0.), 0.); + EXPECT_FLOAT_EQ(wrap_2pi(-4.), (-4. + 2. * M_PI)); + EXPECT_FLOAT_EQ(wrap_2pi(3.), (3.)); + EXPECT_FLOAT_EQ(wrap_2pi(200.), (200. - 31. * M_TWOPI)); + EXPECT_FLOAT_EQ(wrap_2pi(-201.), (-201. + 32. * M_TWOPI)); + EXPECT_FALSE(is_finite(wrap_2pi(NAN))); + + // Equality checks + EXPECT_TRUE(isEqualF(1., 1.)); + EXPECT_FALSE(isEqualF(1., 2.)); + EXPECT_FALSE(isEqualF(NAN, 1.f)); + EXPECT_FALSE(isEqualF(1.f, NAN)); + EXPECT_FALSE(isEqualF(INFINITY, 1.f)); + EXPECT_FALSE(isEqualF(1.f, INFINITY)); + EXPECT_TRUE(isEqualF(NAN, NAN)); + EXPECT_TRUE(isEqualF(NAN, -NAN)); + EXPECT_TRUE(isEqualF(-NAN, NAN)); + EXPECT_TRUE(isEqualF(INFINITY, INFINITY)); + EXPECT_FALSE(isEqualF(INFINITY, -INFINITY)); + EXPECT_FALSE(isEqualF(-INFINITY, INFINITY)); + EXPECT_TRUE(isEqualF(-INFINITY, -INFINITY)); + + Vector3f a(1, 2, 3); + Vector3f b(4, 5, 6); + EXPECT_FALSE(isEqual(a, b)); + EXPECT_TRUE(isEqual(a, a)); + + Vector3f c(1, 2, 3); + Vector3f d(1, 2, NAN); + EXPECT_FALSE(isEqual(c, d)); + EXPECT_TRUE(isEqual(c, c)); + EXPECT_TRUE(isEqual(d, d)); +} diff --git a/src/lib/matrix/test/helper.cpp b/src/lib/matrix/test/helper.cpp deleted file mode 100644 index 7bb914da8f..0000000000 --- a/src/lib/matrix/test/helper.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "test_macros.hpp" -#include - -using namespace matrix; - -int main() -{ - // general wraps - TEST(fabs(wrap(4., 0., 10.) - 4.) < FLT_EPSILON); - TEST(fabs(wrap(4., 0., 1.)) < FLT_EPSILON); - TEST(fabs(wrap(-4., 0., 10.) - 6.) < FLT_EPSILON); - TEST(fabs(wrap(-18., 0., 10.) - 2.) < FLT_EPSILON); - TEST(fabs(wrap(-1.5, 3., 5.) - 4.5) < FLT_EPSILON); - TEST(fabs(wrap(15.5, 3., 5.) - 3.5) < FLT_EPSILON); - TEST(fabs(wrap(-1., 30., 40.) - 39.) < FLT_EPSILON); - TEST(fabs(wrap(-8000., -555., 1.) - (-216.)) < FLT_EPSILON); - TEST(fabs(wrap(0., 0., 360.)) < FLT_EPSILON); - TEST(fabs(wrap(0. - FLT_EPSILON, 0., 360.) - (360. - FLT_EPSILON)) < FLT_EPSILON); - TEST(fabs(wrap(0. + FLT_EPSILON, 0., 360.) - FLT_EPSILON) < FLT_EPSILON); - TEST(fabs(wrap(360., 0., 360.)) < FLT_EPSILON); - TEST(fabs(wrap(360. - FLT_EPSILON, 0., 360.) - (360. - FLT_EPSILON)) < FLT_EPSILON); - TEST(fabs(wrap(360. + FLT_EPSILON, 0., 360.) - FLT_EPSILON) < FLT_EPSILON); - - // integer wraps - TEST(wrap(-10, 0, 10) == 0); - TEST(wrap(-4, 0, 10) == 6); - TEST(wrap(0, 0, 10) == 0) - TEST(wrap(4, 0, 10) == 4); - TEST(wrap(10, 0, 10) == 0); - - // wrap pi - TEST(fabs(wrap_pi(0.)) < FLT_EPSILON); - TEST(fabs(wrap_pi(4.) - (4. - M_TWOPI)) < FLT_EPSILON); - TEST(fabs(wrap_pi(-4.) - (-4. + M_TWOPI)) < FLT_EPSILON); - TEST(fabs(wrap_pi(3.) - (3.)) < FLT_EPSILON); - TEST(fabs(wrap_pi(100.) - (100. - 32. * M_PI)) < FLT_EPSILON); - TEST(fabs(wrap_pi(-100.) - (-100. + 32. * M_PI)) < FLT_EPSILON); - TEST(fabs(wrap_pi(-101.) - (-101. + 32. * M_PI)) < FLT_EPSILON); - TEST(!is_finite(wrap_pi(NAN))); - - // wrap 2pi - TEST(fabs(wrap_2pi(0.)) < FLT_EPSILON); - TEST(fabs(wrap_2pi(-4.) - (-4. + 2. * M_PI)) < FLT_EPSILON); - TEST(fabs(wrap_2pi(3.) - (3.)) < FLT_EPSILON); - TEST(fabs(wrap_2pi(200.) - (200. - 31. * M_TWOPI)) < FLT_EPSILON); - TEST(fabs(wrap_2pi(-201.) - (-201. + 32. * M_TWOPI)) < FLT_EPSILON); - TEST(!is_finite(wrap_2pi(NAN))); - - // Equality checks - TEST(isEqualF(1., 1.)); - TEST(!isEqualF(1., 2.)); - TEST(!isEqualF(NAN, 1.f)); - TEST(!isEqualF(1.f, NAN)); - TEST(!isEqualF(INFINITY, 1.f)); - TEST(!isEqualF(1.f, INFINITY)); - TEST(isEqualF(NAN, NAN)); - TEST(isEqualF(NAN, -NAN)); - TEST(isEqualF(-NAN, NAN)); - TEST(isEqualF(INFINITY, INFINITY)); - TEST(!isEqualF(INFINITY, -INFINITY)); - TEST(!isEqualF(-INFINITY, INFINITY)); - TEST(isEqualF(-INFINITY, -INFINITY)); - - Vector3f a(1, 2, 3); - Vector3f b(4, 5, 6); - TEST(!isEqual(a, b)); - TEST(isEqual(a, a)); - - Vector3f c(1, 2, 3); - Vector3f d(1, 2, NAN); - TEST(!isEqual(c, d)); - TEST(isEqual(c, c)); - TEST(isEqual(d, d)); - - return 0; -} -