diff --git a/src/systems/si/include/units/isq/si/area.h b/src/systems/si/include/units/isq/si/area.h index 98bcb87c..a321fdda 100644 --- a/src/systems/si/include/units/isq/si/area.h +++ b/src/systems/si/include/units/isq/si/area.h @@ -58,7 +58,11 @@ struct square_exametre : derived_unit {}; struct square_zettametre : derived_unit {}; struct square_yottametre : derived_unit {}; -struct hectare : alias_unit {}; +struct are : alias_unit {}; +struct centiare : prefixed_alias_unit {}; +struct deciare : prefixed_unit {}; +struct decare : prefixed_unit {}; +struct hectare : prefixed_alias_unit {}; template U, Representation Rep = double> using area = quantity; @@ -235,6 +239,38 @@ constexpr auto operator"" _q_Ym2(unsigned long long l) } constexpr auto operator"" _q_Ym2(long double l) { return area(l); } +// a +constexpr auto operator"" _q_a(unsigned long long l) +{ + gsl_ExpectsAudit(std::in_range(l)); + return area(static_cast(l)); +} +constexpr auto operator"" _q_a(long double l) { return area(l); } + +// ca +constexpr auto operator"" _q_ca(unsigned long long l) +{ + gsl_ExpectsAudit(std::in_range(l)); + return area(static_cast(l)); +} +constexpr auto operator"" _q_ca(long double l) { return area(l); } + +// da +constexpr auto operator"" _q_da(unsigned long long l) +{ + gsl_ExpectsAudit(std::in_range(l)); + return area(static_cast(l)); +} +constexpr auto operator"" _q_da(long double l) { return area(l); } + +// daa +constexpr auto operator"" _q_daa(unsigned long long l) +{ + gsl_ExpectsAudit(std::in_range(l)); + return area(static_cast(l)); +} +constexpr auto operator"" _q_daa(long double l) { return area(l); } + // ha constexpr auto operator"" _q_ha(unsigned long long l) { @@ -273,6 +309,10 @@ inline constexpr auto Em2 = reference{}; inline constexpr auto Zm2 = reference{}; inline constexpr auto Ym2 = reference{}; +inline constexpr auto a = reference{}; +inline constexpr auto ca = reference{}; +inline constexpr auto da = reference{}; +inline constexpr auto daa = reference{}; inline constexpr auto ha = reference{}; } // namespace area_references diff --git a/test/unit_test/static/si_test.cpp b/test/unit_test/static/si_test.cpp index a69c1f1b..5155f916 100644 --- a/test/unit_test/static/si_test.cpp +++ b/test/unit_test/static/si_test.cpp @@ -276,8 +276,17 @@ static_assert(10_q_m * 10_q_m == 100_q_m2); static_assert(100_q_m2 / 10_q_m == 10_q_m); static_assert(10_q_km * 10_q_km == 100_q_km2); static_assert(1_q_m2 == 10'000_q_cm2); + +static_assert(1_q_ca == 1_q_m2); +static_assert(1_q_da == 10_q_m2); +static_assert(1_q_a == 100_q_m2); +static_assert(1_q_daa == 1'000_q_m2); static_assert(1_q_ha == 10'000_q_m2); +static_assert(centiare::symbol == "ca"); +static_assert(deciare::symbol == "da"); +static_assert(are::symbol == "a"); +static_assert(decare::symbol == "daa"); static_assert(hectare::symbol == "ha"); static_assert(detail::unit_text() == basic_symbol_text("m²", "m^2"));