10#include "gtest/gtest.h"
15#include "metaphysicl/raw_type.h"
36 const std::array<T, 1> stick_pressure = {1.0};
37 const std::array<T, 1> stick_augmented = {1.0};
40 const auto hsw_stick =
42 EXPECT_DOUBLE_EQ(raw_value(ac_stick[0]), 0.0);
43 EXPECT_DOUBLE_EQ(raw_value(hsw_stick[0]), 0.0);
45 const std::array<T, 1> slip_pressure = {2.0};
46 const std::array<T, 1> slip_augmented = {4.0};
51 EXPECT_DOUBLE_EQ(raw_value(ac_slip[0]), 0.0);
52 EXPECT_DOUBLE_EQ(raw_value(hsw_slip[0]), 0.0);
60 EXPECT_DOUBLE_EQ(raw_value(open_augmented_pressure), -1.0);
64 const std::array<T, 1> pressure = {0.0};
65 const std::array<T, 1> augmented_pressure = {3.0};
69 EXPECT_DOUBLE_EQ(raw_value(ac[0]), 0.0);
70 EXPECT_DOUBLE_EQ(raw_value(hsw[0]), 0.0);
77 const std::array<T, 2> augmented_pressure = {3.0, 4.0};
79 EXPECT_DOUBLE_EQ(raw_value(projection[0]), 1.2);
80 EXPECT_DOUBLE_EQ(raw_value(projection[1]), 1.6);
88 const std::array<T, 2> pressure = {0.7, -0.2};
89 const std::array<T, 2> augmented_pressure = {2.0, -1.0};
92 const std::array<T, 2> scaled_pressure = {alpha * pressure[0], alpha * pressure[1]};
93 const std::array<T, 2> scaled_augmented = {alpha * augmented_pressure[0],
94 alpha * augmented_pressure[1]};
97 const auto ac_scaled =
102 scaled_pressure, scaled_augmented, alpha *
radius);
104 for (
const auto i : index_range(pressure))
106 EXPECT_NEAR(raw_value(ac_scaled[i]), raw_value(alpha * ac[i]), 1e-14);
107 EXPECT_NEAR(raw_value(hsw_scaled[i]), raw_value(alpha * alpha * hsw[i]), 1e-14);
115 const std::array<T, 2> pressure = {0.6, -0.1};
116 const std::array<T, 2> augmented_pressure = {1.5, -0.5};
119 ASSERT_GT(raw_value(weight), 0.0);
124 for (
const auto i : index_range(pressure))
125 EXPECT_NEAR(raw_value(hsw[i]), raw_value(weight * ac[i]), 1e-14);
132 const std::array<T, 2> pressure = {2.0, -3.0};
133 const std::array<T, 2> augmented_pressure = {0.0, 0.0};
138 for (
const auto i : index_range(pressure))
140 EXPECT_DOUBLE_EQ(raw_value(ac[i]), raw_value(pressure[i]));
141 EXPECT_DOUBLE_EQ(raw_value(hsw[i]), raw_value(pressure[i]));
TYPED_TEST(FrictionProjectionTest, StickAndSlipRoots)
TYPED_TEST_SUITE(FrictionProjectionTest, FrictionProjectionTypes)
::testing::Types< Real, ADReal > FrictionProjectionTypes
auto norm(const T &value)