celestia/test/unit/stellarclass_test.cpp

263 lines
7.8 KiB
C++

#include <cstdint>
#include <catch.hpp>
#include <celengine/stellarclass.h>
#define CHECK_NORMAL_STAR(u, _class) \
REQUIRE(u.getStarType() == StellarClass::NormalStar); \
REQUIRE(u.getSpectralClass() == _class); \
REQUIRE(u.getSubclass() == 5); \
REQUIRE(u.getLuminosityClass() == StellarClass::Lum_Ia0);
#define CHECK_WHITE_DWARF(u, _class) \
REQUIRE(u.getStarType() == StellarClass::WhiteDwarf); \
REQUIRE(u.getSpectralClass() == _class); \
REQUIRE(u.getSubclass() == 5); \
REQUIRE(u.getLuminosityClass() == StellarClass::Lum_Unknown);
TEST_CASE("StellarClass packing", "[StellarClass]")
{
SECTION("StellarClass::Spectral_WO")
{
StellarClass sc(StellarClass::NormalStar,
StellarClass::Spectral_WO,
5,
StellarClass::Lum_Ia0);
std::uint16_t packed;
StellarClass u;
SECTION("Packed as V1")
{
packed = sc.packV1();
REQUIRE(u.unpackV1(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_Unknown);
}
SECTION("Packed as V2")
{
packed = sc.packV2();
REQUIRE(u.unpackV2(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_WO);
}
}
SECTION("StellarClass::Spectral_Y")
{
StellarClass sc(StellarClass::NormalStar,
StellarClass::Spectral_Y,
5,
StellarClass::Lum_Ia0);
std::uint16_t packed;
StellarClass u;
SECTION("Packed as V1")
{
packed = sc.packV1();
REQUIRE(u.unpackV1(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_Unknown);
}
SECTION("Packed as V2")
{
packed = sc.packV2();
REQUIRE(u.unpackV2(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_Y);
}
}
SECTION("StellarClass::Spectral_Unknown")
{
StellarClass sc(StellarClass::NormalStar,
StellarClass::Spectral_Unknown,
5,
StellarClass::Lum_Ia0);
std::uint16_t packed;
StellarClass u;
SECTION("Packed as V1")
{
packed = sc.packV1();
REQUIRE(u.unpackV1(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_Unknown);
}
SECTION("Packed as V2")
{
packed = sc.packV2();
REQUIRE(u.unpackV2(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_Unknown);
}
}
SECTION("StellarClass::Spectral_C")
{
StellarClass sc(StellarClass::NormalStar,
StellarClass::Spectral_C,
5,
StellarClass::Lum_Ia0);
std::uint16_t packed;
StellarClass u;
SECTION("Packed as V1")
{
packed = sc.packV1();
REQUIRE(u.unpackV1(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_C);
}
SECTION("Packed as V2")
{
packed = sc.packV2();
REQUIRE(u.unpackV2(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_C);
}
}
SECTION("StellarClass::Spectral_L")
{
StellarClass sc(StellarClass::NormalStar,
StellarClass::Spectral_L,
5,
StellarClass::Lum_Ia0);
std::uint16_t packed;
StellarClass u;
SECTION("Packed as V1")
{
packed = sc.packV1();
REQUIRE(u.unpackV1(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_L);
}
SECTION("Packed as V2")
{
packed = sc.packV2();
REQUIRE(u.unpackV2(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_L);
}
}
SECTION("StellarClass::Spectral_T")
{
StellarClass sc(StellarClass::NormalStar,
StellarClass::Spectral_T,
5,
StellarClass::Lum_Ia0);
std::uint16_t packed;
StellarClass u;
SECTION("Packed as V1")
{
packed = sc.packV1();
REQUIRE(u.unpackV1(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_T);
}
SECTION("Packed as V2")
{
packed = sc.packV2();
REQUIRE(u.unpackV2(packed));
CHECK_NORMAL_STAR(u, StellarClass::Spectral_T);
}
}
SECTION("StellarClass::Spectral_DO")
{
StellarClass sc(StellarClass::WhiteDwarf,
StellarClass::Spectral_DO,
5,
StellarClass::Lum_Ia0);
std::uint16_t packed;
StellarClass u;
SECTION("Packed as V1")
{
packed = sc.packV1();
REQUIRE(u.unpackV1(packed));
CHECK_WHITE_DWARF(u, StellarClass::Spectral_DO);
}
SECTION("Packed as V2")
{
packed = sc.packV2();
REQUIRE(u.unpackV2(packed));
CHECK_WHITE_DWARF(u, StellarClass::Spectral_DO);
}
}
}
TEST_CASE("StellarClass parsing", "[StellarClass]")
{
SECTION("Luminosity class I-a0")
{
StellarClass sc = StellarClass::parse("A9I-a0");
REQUIRE(sc.getStarType() == StellarClass::NormalStar);
REQUIRE(sc.getSpectralClass() == StellarClass::Spectral_A);
REQUIRE(sc.getSubclass() == 9);
REQUIRE(sc.getLuminosityClass() == StellarClass::Lum_Ia0);
}
SECTION("Luminosity class Ia-0")
{
StellarClass sc = StellarClass::parse("K Ia-0");
REQUIRE(sc.getStarType() == StellarClass::NormalStar);
REQUIRE(sc.getSpectralClass() == StellarClass::Spectral_K);
REQUIRE(sc.getSubclass() == StellarClass::Subclass_Unknown);
REQUIRE(sc.getLuminosityClass() == StellarClass::Lum_Ia0);
}
SECTION("Luminosity class Ia0")
{
StellarClass sc = StellarClass::parse("M3Ia0");
REQUIRE(sc.getStarType() == StellarClass::NormalStar);
REQUIRE(sc.getSpectralClass() == StellarClass::Spectral_M);
REQUIRE(sc.getSubclass() == 3);
REQUIRE(sc.getLuminosityClass() == StellarClass::Lum_Ia0);
}
SECTION("Luminosity class Ia")
{
StellarClass sc = StellarClass::parse("F7Ia");
REQUIRE(sc.getStarType() == StellarClass::NormalStar);
REQUIRE(sc.getSpectralClass() == StellarClass::Spectral_F);
REQUIRE(sc.getSubclass() == 7);
REQUIRE(sc.getLuminosityClass() == StellarClass::Lum_Ia);
}
SECTION("Luminosity class I-a")
{
StellarClass sc = StellarClass::parse("G4 I-a");
REQUIRE(sc.getStarType() == StellarClass::NormalStar);
REQUIRE(sc.getSpectralClass() == StellarClass::Spectral_G);
REQUIRE(sc.getSubclass() == 4);
REQUIRE(sc.getLuminosityClass() == StellarClass::Lum_Ia);
}
SECTION("Luminosity class Ib")
{
StellarClass sc = StellarClass::parse("B6 Ib");
REQUIRE(sc.getStarType() == StellarClass::NormalStar);
REQUIRE(sc.getSpectralClass() == StellarClass::Spectral_B);
REQUIRE(sc.getSubclass() == 6);
REQUIRE(sc.getLuminosityClass() == StellarClass::Lum_Ib);
}
SECTION("Luminosity class I-b")
{
StellarClass sc = StellarClass::parse("O5I-b");
REQUIRE(sc.getStarType() == StellarClass::NormalStar);
REQUIRE(sc.getSpectralClass() == StellarClass::Spectral_O);
REQUIRE(sc.getSubclass() == 5);
REQUIRE(sc.getLuminosityClass() == StellarClass::Lum_Ib);
}
}