From 62fdf0b64cc37c109460dbb6174b79500c091190 Mon Sep 17 00:00:00 2001 From: Oliver Lee Date: Mon, 8 Jan 2024 22:47:14 -0800 Subject: [PATCH] define multivector negation Change-Id: Ia277a4e73b42baac8295cd1dfc74061a6a150b97 --- geometry/src/algebra.hpp | 11 ++++++++++- test/algebra_multivector_test.cpp | 7 +++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/geometry/src/algebra.hpp b/geometry/src/algebra.hpp index 95047c9..89a2406 100644 --- a/geometry/src/algebra.hpp +++ b/geometry/src/algebra.hpp @@ -284,7 +284,7 @@ struct algebra /// construct a multivector from blades /// - constexpr multivector(Bs... bs) : Bs{bs}... {} + constexpr explicit multivector(Bs... bs) : Bs{bs}... {} /// equality comparison /// @@ -302,6 +302,15 @@ struct algebra return not(x == y); } /// @} + + /// unary negation + /// + [[nodiscard]] + friend constexpr auto + operator-(const multivector& x) -> multivector + { + return multivector{-static_cast(x)...}; + } }; }; diff --git a/test/algebra_multivector_test.cpp b/test/algebra_multivector_test.cpp index 119b004..cbe17e6 100644 --- a/test/algebra_multivector_test.cpp +++ b/test/algebra_multivector_test.cpp @@ -51,4 +51,11 @@ auto main() -> int eq(multivector(2 * e<0>, 3 * e<1>), 3 * e<1> + 2 * e<0>) and eq(multivector(-2 * e<0>, 3 * e<1>), 3 * e<1> - 2 * e<0>)); }; + + "multivector negation"_ctest = // + [] { + return expect( + eq(e<0> + e<1>, -(-e<0> - e<1>)) and + eq(e<0, 1> + e<1, 2>, -(-e<0, 1> - e<1, 2>))); + }; }