diff options
Diffstat (limited to 'extern/draco/dracoenc/src/draco/core/vector_d_test.cc')
-rw-r--r-- | extern/draco/dracoenc/src/draco/core/vector_d_test.cc | 235 |
1 files changed, 0 insertions, 235 deletions
diff --git a/extern/draco/dracoenc/src/draco/core/vector_d_test.cc b/extern/draco/dracoenc/src/draco/core/vector_d_test.cc deleted file mode 100644 index bc2bdadaa9f..00000000000 --- a/extern/draco/dracoenc/src/draco/core/vector_d_test.cc +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2016 The Draco Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#include "draco/core/vector_d.h" - -#include <sstream> - -#include "draco/core/draco_test_base.h" - -namespace { - -typedef draco::Vector2f Vector2f; -typedef draco::Vector3f Vector3f; -typedef draco::Vector4f Vector4f; -typedef draco::Vector5f Vector5f; -typedef draco::Vector2ui Vector2ui; -typedef draco::Vector3ui Vector3ui; -typedef draco::Vector4ui Vector4ui; -typedef draco::Vector5ui Vector5ui; - -typedef draco::VectorD<int32_t, 3> Vector3i; -typedef draco::VectorD<int32_t, 4> Vector4i; - -template <class CoeffT, int dimension_t> -void TestSquaredDistance(const draco::VectorD<CoeffT, dimension_t> v1, - const draco::VectorD<CoeffT, dimension_t> v2, - const CoeffT result) { - CoeffT squared_distance = SquaredDistance(v1, v2); - ASSERT_EQ(squared_distance, result); - squared_distance = SquaredDistance(v2, v1); - ASSERT_EQ(squared_distance, result); -} - -TEST(VectorDTest, TestOperators) { - { - const Vector3f v; - ASSERT_EQ(v[0], 0); - ASSERT_EQ(v[1], 0); - ASSERT_EQ(v[2], 0); - } - Vector3f v(1, 2, 3); - ASSERT_EQ(v[0], 1); - ASSERT_EQ(v[1], 2); - ASSERT_EQ(v[2], 3); - - Vector3f w = v; - ASSERT_TRUE(v == w); - ASSERT_FALSE(v != w); - ASSERT_EQ(w[0], 1); - ASSERT_EQ(w[1], 2); - ASSERT_EQ(w[2], 3); - - w = -v; - ASSERT_EQ(w[0], -1); - ASSERT_EQ(w[1], -2); - ASSERT_EQ(w[2], -3); - - w = v + v; - ASSERT_EQ(w[0], 2); - ASSERT_EQ(w[1], 4); - ASSERT_EQ(w[2], 6); - - w = w - v; - ASSERT_EQ(w[0], 1); - ASSERT_EQ(w[1], 2); - ASSERT_EQ(w[2], 3); - - // Scalar multiplication from left and right. - w = v * 2.f; - ASSERT_EQ(w[0], 2); - ASSERT_EQ(w[1], 4); - ASSERT_EQ(w[2], 6); - w = 2.f * v; - ASSERT_EQ(w[0], 2); - ASSERT_EQ(w[1], 4); - ASSERT_EQ(w[2], 6); - - ASSERT_EQ(v.SquaredNorm(), 14); - ASSERT_EQ(v.Dot(v), 14); - - Vector3f new_v = v; - new_v.Normalize(); - const float eps = 0.001; - const float magnitude = std::sqrt(v.SquaredNorm()); - const float new_magnitude = std::sqrt(new_v.SquaredNorm()); - ASSERT_LE(new_magnitude, 1 + eps); - ASSERT_GE(new_magnitude, 1 - eps); - for (int i = 0; i < 3; ++i) { - new_v[i] *= magnitude; - ASSERT_LE(new_v[i], v[i] + eps); - ASSERT_GE(new_v[i], v[i] - eps); - } - - Vector3f x(0, 0, 0); - x.Normalize(); - for (int i = 0; i < 3; ++i) { - ASSERT_EQ(0, x[i]); - } -} - -TEST(VectorDTest, TestSquaredDistance) { - // Test Vector2f: float, 2D. - Vector2f v1_2f(5.5, 10.5); - Vector2f v2_2f(3.5, 15.5); - float result_f = 29; - TestSquaredDistance(v1_2f, v2_2f, result_f); - - // Test Vector3f: float, 3D. - Vector3f v1_3f(5.5, 10.5, 2.3); - Vector3f v2_3f(3.5, 15.5, 0); - result_f = 34.29; - TestSquaredDistance(v1_3f, v2_3f, result_f); - - // Test Vector4f: float, 4D. - Vector4f v1_4f(5.5, 10.5, 2.3, 7.2); - Vector4f v2_4f(3.5, 15.5, 0, 9.9); - result_f = 41.58; - TestSquaredDistance(v1_4f, v2_4f, result_f); - - // Test Vector5f: float, 5D. - Vector5f v1_5f(5.5, 10.5, 2.3, 7.2, 1.0); - Vector5f v2_5f(3.5, 15.5, 0, 9.9, 0.2); - result_f = 42.22; - TestSquaredDistance(v1_5f, v2_5f, result_f); - - // Test Vector 2ui: uint32_t, 2D. - Vector2ui v1_2ui(5, 10); - Vector2ui v2_2ui(3, 15); - uint32_t result_ui = 29; - TestSquaredDistance(v1_2ui, v2_2ui, result_ui); - - // Test Vector 3ui: uint32_t, 3D. - Vector3ui v1_3ui(5, 10, 2); - Vector3ui v2_3ui(3, 15, 0); - result_ui = 33; - TestSquaredDistance(v1_3ui, v2_3ui, result_ui); - - // Test Vector 4ui: uint32_t, 4D. - Vector4ui v1_4ui(5, 10, 2, 7); - Vector4ui v2_4ui(3, 15, 0, 9); - result_ui = 37; - TestSquaredDistance(v1_4ui, v2_4ui, result_ui); - - // Test Vector 5ui: uint32_t, 5D. - Vector5ui v1_5ui(5, 10, 2, 7, 1); - Vector5ui v2_5ui(3, 15, 0, 9, 12); - result_ui = 158; - TestSquaredDistance(v1_5ui, v2_5ui, result_ui); -} - -TEST(VectorDTest, TestCrossProduct3D) { - const Vector3i e1(1, 0, 0); - const Vector3i e2(0, 1, 0); - const Vector3i e3(0, 0, 1); - const Vector3i o(0, 0, 0); - ASSERT_EQ(e3, draco::CrossProduct(e1, e2)); - ASSERT_EQ(e1, draco::CrossProduct(e2, e3)); - ASSERT_EQ(e2, draco::CrossProduct(e3, e1)); - ASSERT_EQ(-e3, draco::CrossProduct(e2, e1)); - ASSERT_EQ(-e1, draco::CrossProduct(e3, e2)); - ASSERT_EQ(-e2, draco::CrossProduct(e1, e3)); - ASSERT_EQ(o, draco::CrossProduct(e1, e1)); - ASSERT_EQ(o, draco::CrossProduct(e2, e2)); - ASSERT_EQ(o, draco::CrossProduct(e3, e3)); - - // Orthogonality of result for some general vectors. - const Vector3i v1(123, -62, 223); - const Vector3i v2(734, 244, -13); - const Vector3i orth = draco::CrossProduct(v1, v2); - ASSERT_EQ(0, v1.Dot(orth)); - ASSERT_EQ(0, v2.Dot(orth)); -} - -TEST(VectorDTest, TestAbsSum) { - // Testing const of function and zero. - const Vector3i v(0, 0, 0); - ASSERT_EQ(v.AbsSum(), 0); - // Testing semantic. - ASSERT_EQ(Vector3i(0, 0, 0).AbsSum(), 0); - ASSERT_EQ(Vector3i(1, 2, 3).AbsSum(), 6); - ASSERT_EQ(Vector3i(-1, -2, -3).AbsSum(), 6); - ASSERT_EQ(Vector3i(-2, 4, -8).AbsSum(), 14); - // Other dimension. - ASSERT_EQ(Vector4i(-2, 4, -8, 3).AbsSum(), 17); -} - -TEST(VectorDTest, TestMinMaxCoeff) { - // Test verifies that MinCoeff() and MaxCoeff() functions work as intended. - const Vector4i vi(-10, 5, 2, 3); - ASSERT_EQ(vi.MinCoeff(), -10); - ASSERT_EQ(vi.MaxCoeff(), 5); - - const Vector3f vf(6.f, 1000.f, -101.f); - ASSERT_EQ(vf.MinCoeff(), -101.f); - ASSERT_EQ(vf.MaxCoeff(), 1000.f); -} - -TEST(VectorDTest, TestOstream) { - // Tests that the vector can be stored in a provided std::ostream. - const draco::VectorD<int64_t, 3> vector(1, 2, 3); - std::stringstream str; - str << vector << " "; - ASSERT_EQ(str.str(), "1 2 3 "); -} - -TEST(VectorDTest, TestConvertConstructor) { - // Tests that a vector can be constructed from another vector with a different - // type. - const draco::VectorD<int64_t, 3> vector(1, 2, 3); - - const draco::VectorD<float, 3> vector3f(vector); - ASSERT_EQ(vector3f, draco::Vector3f(1.f, 2.f, 3.f)); - - const draco::VectorD<float, 2> vector2f(vector); - ASSERT_EQ(vector2f, draco::Vector2f(1.f, 2.f)); - - const draco::VectorD<float, 4> vector4f(vector3f); - ASSERT_EQ(vector4f, draco::Vector4f(1.f, 2.f, 3.f, 0.f)); - - const draco::VectorD<double, 1> vector1d(vector3f); - ASSERT_EQ(vector1d[0], 1.0); -} - -} // namespace |