diff --git a/src/point.hpp b/src/point.hpp index cf74f3238d705e4e28c9430bb42cc85aa2b1ee14..3b048bb3db7fb580443e019c98292821f715ffb2 100644 --- a/src/point.hpp +++ b/src/point.hpp @@ -73,6 +73,20 @@ dot( return lhs.x*rhs.x + lhs.y*rhs.y + lhs.z*rhs.z; } +template<typename T> +bool operator==(const point<T> &rhs, const point<T> &lhs) +{ + return (rhs.x == lhs.x) && + (rhs.y == lhs.y) && + (rhs.z == lhs.z); +} + +template<typename T> +bool operator!=(const point<T> &rhs, const point<T> &lhs) +{ + return !(rhs == lhs); +} + } // namespace mc } // namespace nest @@ -81,5 +95,3 @@ std::ostream& operator << (std::ostream& o, nest::mc::point<T> const& p) { return o << "[" << p.x << ", " << p.y << ", " << p.z << "]"; } - - diff --git a/tests/test_point.cpp b/tests/test_point.cpp index 9666a1387f895d408778f40afc6b07db5363bec6..b5bfeb9c1783a6c921ca97f3eb6ae4afd535c311 100644 --- a/tests/test_point.cpp +++ b/tests/test_point.cpp @@ -12,6 +12,9 @@ TEST(point, construction) { // default constructor point<float> p; + + EXPECT_FALSE(p.is_set()); + // expect NaN, which returns false when comparing for equality EXPECT_NE(p.x, p.x); EXPECT_NE(p.y, p.y); @@ -36,10 +39,7 @@ TEST(point, construction) // copy constructor auto p2 = p1; - - EXPECT_EQ(p1.x, p2.x); - EXPECT_EQ(p1.y, p2.y); - EXPECT_EQ(p1.z, p2.z); + EXPECT_EQ(p1, p2); } } @@ -64,9 +64,7 @@ TEST(point, addition) auto p = p1 + p2; - EXPECT_EQ(p.x, 2); - EXPECT_EQ(p.y, 4); - EXPECT_EQ(p.z, 6); + EXPECT_EQ(point<double>(2, 4, 6), p); } TEST(point, subtraction) @@ -77,9 +75,7 @@ TEST(point, subtraction) auto p = p1 - p2; - EXPECT_EQ(p.x, 0); - EXPECT_EQ(p.y, 0); - EXPECT_EQ(p.z, 0); + EXPECT_EQ(point<double>(0, 0, 0), p); } TEST(point, scalar_prod) @@ -89,9 +85,7 @@ TEST(point, scalar_prod) auto p = 0.5 * p1; - EXPECT_EQ(p.x, 0.5); - EXPECT_EQ(p.y, 1.0); - EXPECT_EQ(p.z, 1.5); + EXPECT_EQ(point<double>(0.5, 1.0, 1.5), p); } TEST(point, norm) @@ -114,4 +108,3 @@ TEST(point, dot) EXPECT_EQ(dot(p1,p2), 2.); } -