From f0dddfa495761a353c7349ab666e191ddfb8c1d7 Mon Sep 17 00:00:00 2001
From: Davide Basso <davide.basso@skywarder.eu>
Date: Mon, 30 Dec 2024 09:48:11 +0000
Subject: [PATCH] [Units] Use `Constants::g` for acceleration reference

---
 src/shared/units/Acceleration.h | 13 ++++++++++++-
 src/tests/catch/test-units.cpp  |  2 +-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/shared/units/Acceleration.h b/src/shared/units/Acceleration.h
index aa61a369f..40a607fcb 100644
--- a/src/shared/units/Acceleration.h
+++ b/src/shared/units/Acceleration.h
@@ -22,6 +22,8 @@
 
 #pragma once
 
+#include <utils/Constants.h>
+
 #include <ratio>
 
 #include "Units.h"
@@ -43,7 +45,16 @@ ToAcceleration acceleration_cast(FromAcceleration const& from)
 }
 
 using MeterPerSecondSquared = Acceleration<>;  // Acceleration in m/s^2
-using G = Acceleration<std::ratio<981, 100>>;  // Acceleration in Gs
+using G =
+    Acceleration<std::ratio<static_cast<std::intmax_t>(Constants::g * 1e10),
+                            static_cast<std::intmax_t>(1e10)>>;  // Acceleration
+                                                                 // in Gs
+
+/**
+ * Assert that we have enough precision to represent the constant value.
+ */
+static_assert(MeterPerSecondSquared{G{1}}.value() == Constants::g,
+              "Not enough precision to represent g in m/s^2");
 
 // Floats
 constexpr auto operator""_mps2(long double n)
diff --git a/src/tests/catch/test-units.cpp b/src/tests/catch/test-units.cpp
index 456aacb4a..1e872eb95 100644
--- a/src/tests/catch/test-units.cpp
+++ b/src/tests/catch/test-units.cpp
@@ -73,7 +73,7 @@ TEST_CASE("Units Test")
     REQUIRE(MeterPerSecond(1) ==
             speed_cast<MeterPerSecond>(KilometerPerHour(3.6)));
 
-    REQUIRE(MeterPerSecondSquared(9.81) ==
+    REQUIRE(MeterPerSecondSquared(Constants::g) ==
             acceleration_cast<MeterPerSecondSquared>(G(1)));
 
     // Test operators
-- 
GitLab