From 4e9330a87d54e066438c460e20fb9eb2a76d2f78 Mon Sep 17 00:00:00 2001 From: Janis Born Date: Mon, 23 Nov 2015 12:22:11 +0100 Subject: [PATCH] add unit tests for basic vector arithmetic --- src/Unittests/unittests_vector_type.cc | 78 ++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src/Unittests/unittests_vector_type.cc b/src/Unittests/unittests_vector_type.cc index 8d6cced1..8ca929ca 100644 --- a/src/Unittests/unittests_vector_type.cc +++ b/src/Unittests/unittests_vector_type.cc @@ -184,6 +184,84 @@ TEST_F(OpenMeshVectorTest, iterator_init) { #endif // C++11 +TEST_F(OpenMeshVectorTest, BasicArithmeticInPlace) { + OpenMesh::Vec3d v1(1, 2, 3); + double s1 = 2; + const double epsilon = 1e-6; + + OpenMesh::Vec3d v2add (3, 4, 6); v2add += v1; + OpenMesh::Vec3d v2sub (3, 4, 6); v2sub -= v1; + OpenMesh::Vec3d v2cmul(3, 4, 6); v2cmul *= v1; + OpenMesh::Vec3d v2cdiv(3, 4, 6); v2cdiv /= v1; + OpenMesh::Vec3d v2smul(3, 4, 6); v2smul *= s1; + OpenMesh::Vec3d v2sdiv(3, 4, 6); v2sdiv /= s1; + + EXPECT_NEAR(4, v2add[0], epsilon); + EXPECT_NEAR(6, v2add[1], epsilon); + EXPECT_NEAR(9, v2add[2], epsilon); + + EXPECT_NEAR(2, v2sub[0], epsilon); + EXPECT_NEAR(2, v2sub[1], epsilon); + EXPECT_NEAR(3, v2sub[2], epsilon); + + EXPECT_NEAR( 3, v2cmul[0], epsilon); + EXPECT_NEAR( 8, v2cmul[1], epsilon); + EXPECT_NEAR(18, v2cmul[2], epsilon); + + EXPECT_NEAR(3, v2cdiv[0], epsilon); + EXPECT_NEAR(2, v2cdiv[1], epsilon); + EXPECT_NEAR(2, v2cdiv[2], epsilon); + + EXPECT_NEAR( 6, v2smul[0], epsilon); + EXPECT_NEAR( 8, v2smul[1], epsilon); + EXPECT_NEAR(12, v2smul[2], epsilon); + + EXPECT_NEAR(1.5, v2sdiv[0], epsilon); + EXPECT_NEAR(2.0, v2sdiv[1], epsilon); + EXPECT_NEAR(3.0, v2sdiv[2], epsilon); +} + +TEST_F(OpenMeshVectorTest, BasicArithmeticImmutable) { + OpenMesh::Vec3d v1(1, 2, 3); + const double epsilon = 1e-6; + + OpenMesh::Vec3d v2add = v1 + OpenMesh::Vec3d(2, 4, 6); + OpenMesh::Vec3d v2sub = v1 - OpenMesh::Vec3d(2, 4, 6); + OpenMesh::Vec3d v2cmul = v1 * OpenMesh::Vec3d(2, 4, 6); + OpenMesh::Vec3d v2cdiv = v1 / OpenMesh::Vec3d(2, 4, 6); + OpenMesh::Vec3d v2smul = v1 * 2.0; + OpenMesh::Vec3d v2sdiv = v1 / 2.0; + OpenMesh::Vec3d v2neg = -v1; + + EXPECT_NEAR(3, v2add[0], epsilon); + EXPECT_NEAR(6, v2add[1], epsilon); + EXPECT_NEAR(9, v2add[2], epsilon); + + EXPECT_NEAR(-1, v2sub[0], epsilon); + EXPECT_NEAR(-2, v2sub[1], epsilon); + EXPECT_NEAR(-3, v2sub[2], epsilon); + + EXPECT_NEAR( 2, v2cmul[0], epsilon); + EXPECT_NEAR( 8, v2cmul[1], epsilon); + EXPECT_NEAR(18, v2cmul[2], epsilon); + + EXPECT_NEAR(0.5, v2cdiv[0], epsilon); + EXPECT_NEAR(0.5, v2cdiv[1], epsilon); + EXPECT_NEAR(0.5, v2cdiv[2], epsilon); + + EXPECT_NEAR(2, v2smul[0], epsilon); + EXPECT_NEAR(4, v2smul[1], epsilon); + EXPECT_NEAR(6, v2smul[2], epsilon); + + EXPECT_NEAR(0.5, v2sdiv[0], epsilon); + EXPECT_NEAR(1.0, v2sdiv[1], epsilon); + EXPECT_NEAR(1.5, v2sdiv[2], epsilon); + + EXPECT_NEAR(-1, v2neg[0], epsilon); + EXPECT_NEAR(-2, v2neg[1], epsilon); + EXPECT_NEAR(-3, v2neg[2], epsilon); +} + TEST_F(OpenMeshVectorTest, BasicLinearAlgebra) { OpenMesh::Vec3d v(1, 2, 3); EXPECT_EQ(v[0], 1.0);