Skip to content

Commit 6d555b7

Browse files
committed
feat: norm() added to a cartesian_vector
1 parent caddccd commit 6d555b7

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

src/core/include/mp-units/cartesian_vector.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class cartesian_vector : public detail::cartesian_vector_iface {
175175
return *this;
176176
}
177177

178-
[[nodiscard]] constexpr T magnitude() const
178+
[[nodiscard]] constexpr T norm() const
179179
requires treat_as_floating_point<T>
180180
{
181181
using namespace std;
@@ -186,10 +186,16 @@ class cartesian_vector : public detail::cartesian_vector_iface {
186186
return hypot(_coordinates_[0], _coordinates_[1], _coordinates_[2]);
187187
}
188188

189+
[[nodiscard]] constexpr T magnitude() const
190+
requires treat_as_floating_point<T>
191+
{
192+
return norm();
193+
}
194+
189195
[[nodiscard]] constexpr cartesian_vector unit() const
190196
requires treat_as_floating_point<T>
191197
{
192-
return *this / magnitude();
198+
return *this / norm();
193199
}
194200

195201
[[nodiscard]] constexpr T& operator[](std::size_t i) { return _coordinates_[i]; }
@@ -249,10 +255,16 @@ class cartesian_vector : public detail::cartesian_vector_iface {
249255
return *this;
250256
}
251257

258+
[[nodiscard]] friend constexpr T norm(const cartesian_vector& vec)
259+
requires treat_as_floating_point<T>
260+
{
261+
return vec.norm();
262+
}
263+
252264
[[nodiscard]] friend constexpr T magnitude(const cartesian_vector& vec)
253265
requires treat_as_floating_point<T>
254266
{
255-
return vec.magnitude();
267+
return vec.norm();
256268
}
257269

258270
[[nodiscard]] friend constexpr cartesian_vector unit_vector(const cartesian_vector& vec)

test/runtime/cartesian_vector_test.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,18 +316,31 @@ TEST_CASE("cartesian_vector operations", "[vector]")
316316
}
317317
}
318318

319+
SECTION("cartesian_vector norm")
320+
{
321+
cartesian_vector v1{3.0, 4.0, 0.0};
322+
cartesian_vector v2{2.0, 3.0, 6.0};
323+
REQUIRE(v1.norm() == 5.0);
324+
REQUIRE(v2.norm() == 7.0);
325+
REQUIRE(norm(v1) == 5.0);
326+
REQUIRE(norm(v2) == 7.0);
327+
}
328+
319329
SECTION("cartesian_vector magnitude")
320330
{
321331
cartesian_vector v1{3.0, 4.0, 0.0};
322332
cartesian_vector v2{2.0, 3.0, 6.0};
323333
REQUIRE(v1.magnitude() == 5.0);
324334
REQUIRE(v2.magnitude() == 7.0);
335+
REQUIRE(magnitude(v1) == 5.0);
336+
REQUIRE(magnitude(v2) == 7.0);
325337
}
326338

327339
SECTION("cartesian_vector unit vector")
328340
{
329341
cartesian_vector v{3.0, 4.0, 0.0};
330342
cartesian_vector unit_v = v.unit();
343+
REQUIRE_THAT(unit_v.norm(), WithinULP(1.0, 1));
331344
REQUIRE_THAT(unit_v.magnitude(), WithinULP(1.0, 1));
332345
}
333346

0 commit comments

Comments
 (0)