TEST_F(PermutationTest, ZYX) { EXPECT_THAT(Perm(Perm::ZYX)(vector_).coordinates(), Eq<R3>({3.0 * Metre, 2.0 * Metre, 1.0 * Metre})); }
TEST_F(PermutationTest, AppliedToVector) { EXPECT_THAT(Perm(Perm::YZX)(vector_).coordinates(), Eq<R3>({2.0 * Metre, 3.0 * Metre, 1.0 * Metre})); EXPECT_THAT(Perm(Perm::YXZ)(vector_).coordinates(), Eq<R3>({2.0 * Metre, 1.0 * Metre, 3.0 * Metre})); }
TEST_F(PermutationTest, XZY) { EXPECT_THAT(Perm(Perm::XZY)(vector_).coordinates(), Eq<R3>({1.0 * Metre, 3.0 * Metre, 2.0 * Metre})); }
TEST_F(PermutationTest, AppliedToTrivector) { EXPECT_THAT(Perm(Perm::XYZ)(trivector_).coordinates(), Eq(4.0 * Metre)); EXPECT_THAT(Perm(Perm::XZY)(trivector_).coordinates(), Eq(-4.0 * Metre)); }
TEST_F(PermutationTest, AppliedToBivector) { EXPECT_THAT(Perm(Perm::ZXY)(bivector_).coordinates(), Eq<R3>({3.0 * Metre, 1.0 * Metre, 2.0 * Metre})); EXPECT_THAT(Perm(Perm::ZYX)(bivector_).coordinates(), Eq<R3>({-3.0 * Metre, -2.0 * Metre, -1.0 * Metre})); }
TEST(DiagnosticsTest, ToLSP) { clangd::Diag D; D.Message = "something terrible happened"; D.Range = {pos(1, 2), pos(3, 4)}; D.InsideMainFile = true; D.Severity = DiagnosticsEngine::Error; D.File = "foo/bar/main.cpp"; clangd::Note NoteInMain; NoteInMain.Message = "declared somewhere in the main file"; NoteInMain.Range = {pos(5, 6), pos(7, 8)}; NoteInMain.Severity = DiagnosticsEngine::Remark; NoteInMain.File = "../foo/bar/main.cpp"; NoteInMain.InsideMainFile = true; D.Notes.push_back(NoteInMain); clangd::Note NoteInHeader; NoteInHeader.Message = "declared somewhere in the header file"; NoteInHeader.Range = {pos(9, 10), pos(11, 12)}; NoteInHeader.Severity = DiagnosticsEngine::Note; NoteInHeader.File = "../foo/baz/header.h"; NoteInHeader.InsideMainFile = false; D.Notes.push_back(NoteInHeader); clangd::Fix F; F.Message = "do something"; D.Fixes.push_back(F); auto MatchingLSP = [](const DiagBase &D, llvm::StringRef Message) { clangd::Diagnostic Res; Res.range = D.Range; Res.severity = getSeverity(D.Severity); Res.message = Message; return Res; }; // Diagnostics should turn into these: clangd::Diagnostic MainLSP = MatchingLSP(D, R"(something terrible happened main.cpp:6:7: remark: declared somewhere in the main file ../foo/baz/header.h:10:11: note: declared somewhere in the header file)"); clangd::Diagnostic NoteInMainLSP = MatchingLSP(NoteInMain, R"(declared somewhere in the main file main.cpp:2:3: error: something terrible happened)"); // Transform dianostics and check the results. std::vector<std::pair<clangd::Diagnostic, std::vector<clangd::Fix>>> LSPDiags; toLSPDiags(D, [&](clangd::Diagnostic LSPDiag, llvm::ArrayRef<clangd::Fix> Fixes) { LSPDiags.push_back({std::move(LSPDiag), std::vector<clangd::Fix>(Fixes.begin(), Fixes.end())}); }); EXPECT_THAT( LSPDiags, ElementsAre(Pair(EqualToLSPDiag(MainLSP), ElementsAre(EqualToFix(F))), Pair(EqualToLSPDiag(NoteInMainLSP), IsEmpty()))); }
TEST_F(SolarSystemTest, RealSolarSystem) { solar_system_.Initialize( SOLUTION_DIR / "astronomy" / "gravity_model.proto.txt", SOLUTION_DIR / "astronomy" / "initial_state_jd_2433282_500000000.proto.txt"); EXPECT_EQ(Instant() - 50 * 365.25 * Day, solar_system_.epoch()); EXPECT_THAT(solar_system_.names(), ElementsAreArray({"Ariel", "Callisto", "Ceres", "Charon", "Deimos", "Dione", "Earth", "Enceladus", "Eris", "Europa", "Ganymede", "Iapetus", "Io", "Jupiter", "Mars", "Mercury", "Mimas", "Miranda", "Moon", "Neptune", "Oberon", "Phobos", "Pluto", "Rhea", "Saturn", "Sun", "Tethys", "Titan", "Titania", "Triton", "Umbriel", "Uranus", "Venus", "Vesta"})); EXPECT_EQ(1, solar_system_.index("Callisto")); EXPECT_EQ(32, solar_system_.index("Venus")); auto const ephemeris = solar_system_.MakeEphemeris( integrators::McLachlanAtela1992Order4Optimal< Position<astronomy::ICRFJ2000Equator>>(), 1 * Second, 1 * Metre); auto const earth = solar_system_.massive_body(*ephemeris, "Earth"); EXPECT_LT(RelativeError(5.97258 * Yotta(Kilogram), earth->mass()), 6E-9); auto const& earth_trajectory = solar_system_.trajectory(*ephemeris, "Earth"); EXPECT_TRUE(earth_trajectory.empty()); auto const& sun_initial_state = solar_system_.initial_state_message("Sun"); EXPECT_EQ("+1.309126697236264E+05 km", sun_initial_state.x()); EXPECT_EQ("-7.799754996220354E-03 km/s", sun_initial_state.vx()); auto const& sun_gravity_model = solar_system_.gravity_model_message("Sun"); EXPECT_EQ("286.13 deg", sun_gravity_model.axis_right_ascension()); EXPECT_EQ("63.87 deg", sun_gravity_model.axis_declination()); }