feat(cpp-object-oriented-modular-refactoring): step 8 - element-geometry-vector3
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <array>
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
#include <optional>
|
||||
|
||||
@@ -19,6 +21,7 @@ TEST(Vector3, StoresComponentsWithExactArithmetic) {
|
||||
constexpr Vector3 sum = lhs + rhs;
|
||||
constexpr Vector3 difference = lhs - rhs;
|
||||
constexpr Vector3 scaled = lhs * -2.0;
|
||||
constexpr Vector3 divided = lhs / -2.0;
|
||||
|
||||
EXPECT_DOUBLE_EQ(lhs.X(), 1.0);
|
||||
EXPECT_DOUBLE_EQ(lhs.Y(), -2.0);
|
||||
@@ -35,6 +38,22 @@ TEST(Vector3, StoresComponentsWithExactArithmetic) {
|
||||
EXPECT_DOUBLE_EQ(scaled[0], -2.0);
|
||||
EXPECT_DOUBLE_EQ(scaled[1], 4.0);
|
||||
EXPECT_DOUBLE_EQ(scaled[2], -6.0);
|
||||
EXPECT_DOUBLE_EQ(divided[0], -0.5);
|
||||
EXPECT_DOUBLE_EQ(divided[1], 1.0);
|
||||
EXPECT_DOUBLE_EQ(divided[2], -1.5);
|
||||
}
|
||||
|
||||
TEST(Vector3, ConvertsArrayAndPreservesScalarLeftEvaluationOrder) {
|
||||
constexpr std::array<double, 3> kComponents{1.25, -2.5, 5.0};
|
||||
constexpr Vector3 value{kComponents};
|
||||
constexpr Vector3 scaled = -2.0 * value;
|
||||
|
||||
EXPECT_TRUE(value == Vector3(1.25, -2.5, 5.0));
|
||||
EXPECT_FALSE(value == Vector3(1.25, -2.5, 4.0));
|
||||
EXPECT_EQ(value.Components(), kComponents);
|
||||
EXPECT_DOUBLE_EQ(scaled.X(), -2.5);
|
||||
EXPECT_DOUBLE_EQ(scaled.Y(), 5.0);
|
||||
EXPECT_DOUBLE_EQ(scaled.Z(), -10.0);
|
||||
}
|
||||
|
||||
TEST(Vector3, ComputesDotProduct) {
|
||||
@@ -61,6 +80,9 @@ TEST(Vector3, UsesRightHandedCrossProductOrientation) {
|
||||
|
||||
TEST(Vector3, ComputesEuclideanNorm) {
|
||||
EXPECT_DOUBLE_EQ(Vector3(2.0, -3.0, 6.0).Norm(), 7.0);
|
||||
|
||||
const double expected = std::hypot(1.0e308, 1.0e308, 0.0);
|
||||
EXPECT_DOUBLE_EQ(Vector3(1.0e308, 1.0e308, 0.0).Norm(), expected);
|
||||
}
|
||||
|
||||
TEST(Vector3, NormalizesNonzeroVectors) {
|
||||
|
||||
Reference in New Issue
Block a user