Enable float32 testing for most MuJoCo engine and user tests.
PiperOrigin-RevId: 886697701 Change-Id: I4a96fae03ea18494c3fcef8eb17b3b6f0863e9b7
This commit is contained in:
committed by
Copybara-Service
parent
cab4b73f41
commit
9fa3f6f77e
@@ -26,6 +26,7 @@
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
#include <gmock/gmock.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <absl/container/flat_hash_map.h>
|
||||
#include <absl/container/flat_hash_set.h>
|
||||
@@ -39,6 +40,48 @@ MJAPI decltype(mju_user_error) _mjPRIVATE__get_tls_error_fn();
|
||||
|
||||
namespace mujoco {
|
||||
|
||||
// Precision-aware GMock matcher. Use instead of DoubleNear/FloatNear.
|
||||
// Under double builds, uses double_tol. Under float builds, uses float_tol.
|
||||
template <typename T1, typename T2>
|
||||
inline auto MjNear(T1 double_tol, T2 float_tol) {
|
||||
#ifdef mjUSESINGLE
|
||||
return ::testing::FloatNear(static_cast<float>(float_tol));
|
||||
#else
|
||||
return ::testing::DoubleNear(static_cast<double>(double_tol));
|
||||
#endif
|
||||
}
|
||||
|
||||
// Precision-aware GMock matcher (3-arg version).
|
||||
// Under double builds, matches near target with double_tol.
|
||||
// Under float builds, matches near target with float_tol.
|
||||
template <typename T1, typename T2, typename T3>
|
||||
inline auto MjNear(T1 target, T2 double_tol, T3 float_tol) {
|
||||
#ifdef mjUSESINGLE
|
||||
return ::testing::FloatNear(static_cast<float>(target),
|
||||
static_cast<float>(float_tol));
|
||||
#else
|
||||
return ::testing::DoubleNear(static_cast<double>(target),
|
||||
static_cast<double>(double_tol));
|
||||
#endif
|
||||
}
|
||||
|
||||
// Precision-aware tolerance for EXPECT_NEAR.
|
||||
template <typename T1, typename T2>
|
||||
constexpr mjtNum MjTol(T1 double_tol, T2 float_tol) {
|
||||
#ifdef mjUSESINGLE
|
||||
return static_cast<mjtNum>(float_tol);
|
||||
#else
|
||||
return static_cast<mjtNum>(double_tol);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Precision-aware equality assertion: 4 ULPs in either precision.
|
||||
#ifdef mjUSESINGLE
|
||||
#define EXPECT_MJTNUM_EQ(a, b) EXPECT_FLOAT_EQ(a, b)
|
||||
#else
|
||||
#define EXPECT_MJTNUM_EQ(a, b) EXPECT_DOUBLE_EQ(a, b)
|
||||
#endif
|
||||
|
||||
// Installs and uninstalls error callbacks on MuJoCo that fail the currently
|
||||
// running test if triggered. Prefer the use of MujocoTest, unless using a
|
||||
// test fixture is not possible.
|
||||
|
||||
Reference in New Issue
Block a user