2020-12-26 14:12:05 -08:00
|
|
|
// Copyright (c) FIRST and other WPILib contributors.
|
|
|
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
|
|
|
|
// the WPILib BSD license file in the root directory of this project.
|
2019-07-24 02:57:39 -04:00
|
|
|
|
|
|
|
|
#include <cmath>
|
|
|
|
|
|
|
|
|
|
#include "frc/geometry/Translation2d.h"
|
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
|
|
|
|
|
|
using namespace frc;
|
|
|
|
|
|
|
|
|
|
static constexpr double kEpsilon = 1E-9;
|
|
|
|
|
|
|
|
|
|
TEST(Translation2dTest, Sum) {
|
2019-08-17 01:00:33 -04:00
|
|
|
const Translation2d one{1.0_m, 3.0_m};
|
|
|
|
|
const Translation2d two{2.0_m, 5.0_m};
|
2019-07-24 02:57:39 -04:00
|
|
|
|
|
|
|
|
const auto sum = one + two;
|
|
|
|
|
|
2019-08-17 01:00:33 -04:00
|
|
|
EXPECT_NEAR(sum.X().to<double>(), 3.0, kEpsilon);
|
|
|
|
|
EXPECT_NEAR(sum.Y().to<double>(), 8.0, kEpsilon);
|
2019-07-24 02:57:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Translation2dTest, Difference) {
|
2019-08-17 01:00:33 -04:00
|
|
|
const Translation2d one{1.0_m, 3.0_m};
|
|
|
|
|
const Translation2d two{2.0_m, 5.0_m};
|
2019-07-24 02:57:39 -04:00
|
|
|
|
|
|
|
|
const auto difference = one - two;
|
|
|
|
|
|
2019-08-17 01:00:33 -04:00
|
|
|
EXPECT_NEAR(difference.X().to<double>(), -1.0, kEpsilon);
|
|
|
|
|
EXPECT_NEAR(difference.Y().to<double>(), -2.0, kEpsilon);
|
2019-07-24 02:57:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Translation2dTest, RotateBy) {
|
2019-08-17 01:00:33 -04:00
|
|
|
const Translation2d another{3.0_m, 0.0_m};
|
|
|
|
|
const auto rotated = another.RotateBy(Rotation2d(90.0_deg));
|
2019-07-24 02:57:39 -04:00
|
|
|
|
2019-08-17 01:00:33 -04:00
|
|
|
EXPECT_NEAR(rotated.X().to<double>(), 0.0, kEpsilon);
|
|
|
|
|
EXPECT_NEAR(rotated.Y().to<double>(), 3.0, kEpsilon);
|
2019-07-24 02:57:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Translation2dTest, Multiplication) {
|
2019-08-17 01:00:33 -04:00
|
|
|
const Translation2d original{3.0_m, 5.0_m};
|
2019-07-24 02:57:39 -04:00
|
|
|
const auto mult = original * 3;
|
|
|
|
|
|
2019-08-17 01:00:33 -04:00
|
|
|
EXPECT_NEAR(mult.X().to<double>(), 9.0, kEpsilon);
|
|
|
|
|
EXPECT_NEAR(mult.Y().to<double>(), 15.0, kEpsilon);
|
2019-07-24 02:57:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Translation2d, Division) {
|
2019-08-17 01:00:33 -04:00
|
|
|
const Translation2d original{3.0_m, 5.0_m};
|
2019-07-24 02:57:39 -04:00
|
|
|
const auto div = original / 2;
|
|
|
|
|
|
2019-08-17 01:00:33 -04:00
|
|
|
EXPECT_NEAR(div.X().to<double>(), 1.5, kEpsilon);
|
|
|
|
|
EXPECT_NEAR(div.Y().to<double>(), 2.5, kEpsilon);
|
2019-07-24 02:57:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Translation2dTest, Norm) {
|
2019-08-17 01:00:33 -04:00
|
|
|
const Translation2d one{3.0_m, 5.0_m};
|
|
|
|
|
EXPECT_NEAR(one.Norm().to<double>(), std::hypot(3, 5), kEpsilon);
|
2019-07-24 02:57:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Translation2dTest, Distance) {
|
2019-08-17 01:00:33 -04:00
|
|
|
const Translation2d one{1_m, 1_m};
|
|
|
|
|
const Translation2d two{6_m, 6_m};
|
|
|
|
|
EXPECT_NEAR(one.Distance(two).to<double>(), 5 * std::sqrt(2), kEpsilon);
|
2019-07-24 02:57:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Translation2dTest, UnaryMinus) {
|
2019-08-17 01:00:33 -04:00
|
|
|
const Translation2d original{-4.5_m, 7_m};
|
2019-07-24 02:57:39 -04:00
|
|
|
const auto inverted = -original;
|
|
|
|
|
|
2019-08-17 01:00:33 -04:00
|
|
|
EXPECT_NEAR(inverted.X().to<double>(), 4.5, kEpsilon);
|
|
|
|
|
EXPECT_NEAR(inverted.Y().to<double>(), -7, kEpsilon);
|
2019-07-24 02:57:39 -04:00
|
|
|
}
|
2019-09-08 14:20:26 -04:00
|
|
|
|
|
|
|
|
TEST(Translation2dTest, Equality) {
|
|
|
|
|
const Translation2d one{9_m, 5.5_m};
|
|
|
|
|
const Translation2d two{9_m, 5.5_m};
|
|
|
|
|
EXPECT_TRUE(one == two);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Translation2dTest, Inequality) {
|
|
|
|
|
const Translation2d one{9_m, 5.5_m};
|
|
|
|
|
const Translation2d two{9_m, 5.7_m};
|
|
|
|
|
EXPECT_TRUE(one != two);
|
|
|
|
|
}
|
2020-10-21 00:22:41 -04:00
|
|
|
|
|
|
|
|
TEST(Translation2dTest, PolarConstructor) {
|
|
|
|
|
Translation2d one{std::sqrt(2) * 1_m, Rotation2d(45_deg)};
|
|
|
|
|
EXPECT_NEAR(one.X().to<double>(), 1.0, kEpsilon);
|
|
|
|
|
EXPECT_NEAR(one.Y().to<double>(), 1.0, kEpsilon);
|
|
|
|
|
|
|
|
|
|
Translation2d two{2_m, Rotation2d(60_deg)};
|
|
|
|
|
EXPECT_NEAR(two.X().to<double>(), 1.0, kEpsilon);
|
|
|
|
|
EXPECT_NEAR(two.Y().to<double>(), std::sqrt(3.0), kEpsilon);
|
|
|
|
|
}
|