blob: b5d990b45d042f884aa175cd49a2322a5b42aa54 [file] [log] [blame]
Austin Schuhc6423e62017-02-11 16:56:30 -08001#include "frc971/zeroing/wrap.h"
Austin Schuh4fae0fc2018-03-27 23:51:42 -07002
3#include <cmath>
4
Austin Schuhc6423e62017-02-11 16:56:30 -08005#include "gtest/gtest.h"
6
Stephan Pleinesf63bde82024-01-13 15:59:33 -08007namespace frc971::zeroing::testing {
Austin Schuhc6423e62017-02-11 16:56:30 -08008
9// Tests some various positive and negative values for wrap.
10TEST(WrapTest, TestWrap) {
11 EXPECT_NEAR(1.0, Wrap(0.0, 1.0, 10.0), 1e-6);
12 EXPECT_NEAR(-1.0, Wrap(0.0, -1.0, 10.0), 1e-6);
13
14 EXPECT_NEAR(1.0, Wrap(5.0, 1.0, 10.0), 1e-6);
15 EXPECT_NEAR(9.0, Wrap(5.0, -1.0, 10.0), 1e-6);
16
17 EXPECT_NEAR(10.0, Wrap(5.0, 10.0, 10.0), 1e-6);
18 EXPECT_NEAR(1.0, Wrap(5.0, -9.0, 10.0), 1e-6);
19}
20
21// Try a bunch of combinations and verify that the result has the right
22// properties. We can be really inefficient here since it is a test.
23TEST(WrapTest, ExhaustiveWrap) {
24 for (double i = -20; i < 20; ++i) {
25 for (double j = -20; j < 20; ++j) {
26 EXPECT_NEAR(i, Wrap(i, j, 10.0), 5.0);
27 const double wrapped_val = Wrap(i, j, 10.0);
28 bool found_interval = false;
29 for (int k = -5; k < 5; ++k) {
30 if (::std::abs(k * 10 + wrapped_val - j) < 1e-6) {
31 found_interval = true;
32 break;
33 }
34 }
Philipp Schrader790cb542023-07-05 21:06:52 -070035 EXPECT_TRUE(found_interval)
36 << ": Wrap(" << i << ", " << j << ") = " << wrapped_val;
Austin Schuhc6423e62017-02-11 16:56:30 -080037 }
38 }
39}
40
Austin Schuh4fae0fc2018-03-27 23:51:42 -070041// Tests some various positive and negative values for wrap (with floats).
42TEST(WrapTest, TestFloatWrap) {
43 EXPECT_NEAR(1.0f, Wrap(0.0f, 1.0f, 10.0f), 1e-6f);
44 EXPECT_NEAR(-1.0f, Wrap(0.0f, -1.0f, 10.0f), 1e-6f);
45
46 EXPECT_NEAR(1.0f, Wrap(5.0f, 1.0f, 10.0f), 1e-6f);
47 EXPECT_NEAR(9.0f, Wrap(5.0f, -1.0f, 10.0f), 1e-6f);
48
49 EXPECT_NEAR(10.0f, Wrap(5.0f, 10.0f, 10.0f), 1e-6f);
50 EXPECT_NEAR(1.0f, Wrap(5.0f, -9.0f, 10.0f), 1e-6f);
51}
52
Stephan Pleinesf63bde82024-01-13 15:59:33 -080053} // namespace frc971::zeroing::testing