From 622b3e3cbd21506d53fba4d97204fac6ab108aef Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Sat, 28 Jan 2023 11:11:07 +0100 Subject: [PATCH] test: `unit_symbol()` tests moved to a dedicated separate test file --- test/unit_test/static/CMakeLists.txt | 1 + test/unit_test/static/unit_symbol_test.cpp | 160 +++++++++++++++++++++ test/unit_test/static/unit_test.cpp | 81 ----------- 3 files changed, 161 insertions(+), 81 deletions(-) create mode 100644 test/unit_test/static/unit_symbol_test.cpp diff --git a/test/unit_test/static/CMakeLists.txt b/test/unit_test/static/CMakeLists.txt index 61843a36..ea487f81 100644 --- a/test/unit_test/static/CMakeLists.txt +++ b/test/unit_test/static/CMakeLists.txt @@ -65,6 +65,7 @@ add_library( symbol_text_test.cpp type_list_test.cpp unit_test.cpp + unit_symbol_test.cpp usc_test.cpp ) diff --git a/test/unit_test/static/unit_symbol_test.cpp b/test/unit_test/static/unit_symbol_test.cpp new file mode 100644 index 00000000..d71bc37d --- /dev/null +++ b/test/unit_test/static/unit_symbol_test.cpp @@ -0,0 +1,160 @@ +// The MIT License (MIT) +// +// Copyright (c) 2018 Mateusz Pusz +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include +#include + +namespace { + +using namespace mp_units; +using namespace mp_units::si; +using namespace mp_units::iec80000; + +#ifdef __cpp_lib_constexpr_string + +using enum text_encoding; +using enum unit_symbol_solidus; +using enum unit_symbol_separator; + +// named units +static_assert(unit_symbol(metre) == "m"); +static_assert(unit_symbol(second) == "s"); +static_assert(unit_symbol(joule) == "J"); +static_assert(unit_symbol(degree_Celsius) == "\u00B0C"); +static_assert(unit_symbol(degree_Celsius, {.encoding = ascii}) == "`C"); +static_assert(unit_symbol(kilogram) == "kg"); +static_assert(unit_symbol(hour) == "h"); + +// prefixed units +static_assert(unit_symbol(yocto) == "yΩ"); +static_assert(unit_symbol(yocto, {.encoding = ascii}) == "yohm"); +static_assert(unit_symbol(zepto) == "zΩ"); +static_assert(unit_symbol(zepto, {.encoding = ascii}) == "zohm"); +static_assert(unit_symbol(atto) == "aΩ"); +static_assert(unit_symbol(atto, {.encoding = ascii}) == "aohm"); +static_assert(unit_symbol(femto) == "fΩ"); +static_assert(unit_symbol(femto, {.encoding = ascii}) == "fohm"); +static_assert(unit_symbol(pico) == "pΩ"); +static_assert(unit_symbol(pico, {.encoding = ascii}) == "pohm"); +static_assert(unit_symbol(nano) == "nΩ"); +static_assert(unit_symbol(nano, {.encoding = ascii}) == "nohm"); +static_assert(unit_symbol(micro) == "µΩ"); +static_assert(unit_symbol(micro, {.encoding = ascii}) == "uohm"); +static_assert(unit_symbol(milli) == "mΩ"); +static_assert(unit_symbol(milli, {.encoding = ascii}) == "mohm"); +static_assert(unit_symbol(centi) == "cΩ"); +static_assert(unit_symbol(centi, {.encoding = ascii}) == "cohm"); +static_assert(unit_symbol(deci) == "dΩ"); +static_assert(unit_symbol(deci, {.encoding = ascii}) == "dohm"); +static_assert(unit_symbol(deca) == "daΩ"); +static_assert(unit_symbol(deca, {.encoding = ascii}) == "daohm"); +static_assert(unit_symbol(hecto) == "hΩ"); +static_assert(unit_symbol(hecto, {.encoding = ascii}) == "hohm"); +static_assert(unit_symbol(kilo) == "kΩ"); +static_assert(unit_symbol(kilo, {.encoding = ascii}) == "kohm"); +static_assert(unit_symbol(mega) == "MΩ"); +static_assert(unit_symbol(mega, {.encoding = ascii}) == "Mohm"); +static_assert(unit_symbol(giga) == "GΩ"); +static_assert(unit_symbol(giga, {.encoding = ascii}) == "Gohm"); +static_assert(unit_symbol(tera) == "TΩ"); +static_assert(unit_symbol(tera, {.encoding = ascii}) == "Tohm"); +static_assert(unit_symbol(peta) == "PΩ"); +static_assert(unit_symbol(peta, {.encoding = ascii}) == "Pohm"); +static_assert(unit_symbol(exa) == "EΩ"); +static_assert(unit_symbol(exa, {.encoding = ascii}) == "Eohm"); +static_assert(unit_symbol(zetta) == "ZΩ"); +static_assert(unit_symbol(zetta, {.encoding = ascii}) == "Zohm"); +static_assert(unit_symbol(yotta) == "YΩ"); +static_assert(unit_symbol(yotta, {.encoding = ascii}) == "Yohm"); + +static_assert(unit_symbol(kibi) == "Kibit"); +static_assert(unit_symbol(mebi) == "Mibit"); +static_assert(unit_symbol(gibi) == "Gibit"); +static_assert(unit_symbol(tebi) == "Tibit"); +static_assert(unit_symbol(pebi) == "Pibit"); +static_assert(unit_symbol(exbi) == "Eibit"); +static_assert(unit_symbol(zebi) == "Zibit"); +static_assert(unit_symbol(yobi) == "Yibit"); + +// scaled units +static_assert(unit_symbol(mag<100> * metre) == "× 10² m"); +static_assert(unit_symbol(mag<100> * metre, {.encoding = ascii}) == "x 10^2 m"); +static_assert(unit_symbol(mag<60> * second) == "[6 × 10¹] s"); +static_assert(unit_symbol(mag<60> * second, {.encoding = ascii}) == "[6 x 10^1] s"); +static_assert(unit_symbol(mag * metre / second) == "[1/18] m/s"); + +// derived units +static_assert(unit_symbol(one) == ""); +static_assert(unit_symbol(percent) == "%"); +static_assert(unit_symbol(per_mille) == "‰"); +static_assert(unit_symbol(per_mille, {.encoding = ascii}) == "%o"); +static_assert(unit_symbol(square) == "m²"); +static_assert(unit_symbol(square, {.encoding = ascii}) == "m^2"); +static_assert(unit_symbol(cubic) == "m³"); +static_assert(unit_symbol(cubic, {.encoding = ascii}) == "m^3"); +static_assert(unit_symbol(kilo * metre) == "km m"); +static_assert(unit_symbol(kilo * metre, {.separator = dot}) == "km⋅m"); +static_assert(unit_symbol(metre / metre) == ""); +static_assert(unit_symbol(kilo / metre) == "km/m"); +static_assert(unit_symbol(kilo / metre, {.solidus = never}) == "km m⁻¹"); +static_assert(unit_symbol(kilo / metre, {.encoding = ascii, .solidus = never}) == "km m^-1"); +static_assert(unit_symbol(metre / second) == "m/s"); +static_assert(unit_symbol(metre / second, {.solidus = always}) == "m/s"); +static_assert(unit_symbol(metre / second, {.solidus = never}) == "m s⁻¹"); +static_assert(unit_symbol(metre / second, {.encoding = ascii, .solidus = never}) == "m s^-1"); +static_assert(unit_symbol(metre / second, {.solidus = never, .separator = dot}) == "m⋅s⁻¹"); +static_assert(unit_symbol(metre / square) == "m/s²"); +static_assert(unit_symbol(metre / square, {.encoding = ascii}) == "m/s^2"); +static_assert(unit_symbol(metre / square, {.solidus = always}) == "m/s²"); +static_assert(unit_symbol(metre / square, {.encoding = ascii, .solidus = always}) == "m/s^2"); +static_assert(unit_symbol(metre / square, {.solidus = never}) == "m s⁻²"); +static_assert(unit_symbol(metre / square, {.encoding = ascii, .solidus = never}) == "m s^-2"); +static_assert(unit_symbol(metre / square, {.solidus = never, .separator = dot}) == "m⋅s⁻²"); +static_assert(unit_symbol(kilogram * metre / square) == "kg m/s²"); +static_assert(unit_symbol(kilogram * metre / square, {.separator = dot}) == "kg⋅m/s²"); +static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii}) == "kg m/s^2"); +static_assert(unit_symbol(kilogram * metre / square, {.solidus = always}) == "kg m/s²"); +static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii, .solidus = always}) == "kg m/s^2"); +static_assert(unit_symbol(kilogram * metre / square, {.solidus = never}) == "kg m s⁻²"); +static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii, .solidus = never}) == "kg m s^-2"); +static_assert(unit_symbol(kilogram * metre / square, {.solidus = never, .separator = dot}) == "kg⋅m⋅s⁻²"); +static_assert(unit_symbol(kilogram / metre / square) == "kg m⁻¹ s⁻²"); +static_assert(unit_symbol(kilogram / metre / square, {.separator = dot}) == "kg⋅m⁻¹⋅s⁻²"); +static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii}) == "kg m^-1 s^-2"); +static_assert(unit_symbol(kilogram / metre / square, {.solidus = always}) == "kg/(m s²)"); +static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii, .solidus = always}) == "kg/(m s^2)"); +static_assert(unit_symbol(kilogram / metre / square, {.solidus = never}) == "kg m⁻¹ s⁻²"); +static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii, .solidus = never}) == "kg m^-1 s^-2"); +static_assert(unit_symbol(kilogram / metre / square, {.solidus = never, .separator = dot}) == "kg⋅m⁻¹⋅s⁻²"); +static_assert(unit_symbol(pow<123>(metre)) == "m¹²³"); +static_assert(unit_symbol(pow<1, 2>(metre)) == "m^(1/2)"); +static_assert(unit_symbol(pow<3, 5>(metre)) == "m^(3/5)"); +static_assert(unit_symbol(pow<1, 2>(metre / second)) == "m^(1/2)/s^(1/2)"); + +// Physical constants +static_assert(unit_symbol(si2019::speed_of_light_in_vacuum_unit) == "[c]"); +static_assert(unit_symbol(gram * standard_gravity_unit * si2019::speed_of_light_in_vacuum_unit) == "[c] [g] g"); +static_assert(unit_symbol(gram / standard_gravity_unit) == "g/[g]"); + +#endif // __cpp_lib_constexpr_string + +} // namespace diff --git a/test/unit_test/static/unit_test.cpp b/test/unit_test/static/unit_test.cpp index 6e584f69..0e9fd137 100644 --- a/test/unit_test/static/unit_test.cpp +++ b/test/unit_test/static/unit_test.cpp @@ -538,85 +538,4 @@ static_assert(is_of_type>>); -// unit symbols -#ifdef __cpp_lib_constexpr_string - -using enum text_encoding; -using enum unit_symbol_solidus; -using enum unit_symbol_separator; - -// named units -static_assert(unit_symbol(metre) == "m"); -static_assert(unit_symbol(second) == "s"); -static_assert(unit_symbol(joule) == "J"); -static_assert(unit_symbol(degree_Celsius) == "\u00B0C"); -static_assert(unit_symbol(degree_Celsius, {.encoding = ascii}) == "`C"); -static_assert(unit_symbol(kilometre) == "km"); -static_assert(unit_symbol(si::milli) == "mm"); -static_assert(unit_symbol(si::micro) == "µm"); -static_assert(unit_symbol(si::micro, {.encoding = ascii}) == "um"); -static_assert(unit_symbol(kilojoule) == "kJ"); -static_assert(unit_symbol(hour) == "h"); - -// scaled units -static_assert(unit_symbol(mag<100> * metre) == "× 10² m"); -static_assert(unit_symbol(mag<100> * metre, {.encoding = ascii}) == "x 10^2 m"); -static_assert(unit_symbol(mag<60> * second) == "[6 × 10¹] s"); -static_assert(unit_symbol(mag<60> * second, {.encoding = ascii}) == "[6 x 10^1] s"); - -// derived units -static_assert(unit_symbol(one) == ""); -static_assert(unit_symbol(percent) == "%"); -static_assert(unit_symbol(per_mille) == "‰"); -static_assert(unit_symbol(per_mille, {.encoding = ascii}) == "%o"); -static_assert(unit_symbol(square) == "m²"); -static_assert(unit_symbol(square, {.encoding = ascii}) == "m^2"); -static_assert(unit_symbol(cubic) == "m³"); -static_assert(unit_symbol(cubic, {.encoding = ascii}) == "m^3"); -static_assert(unit_symbol(kilometre * metre) == "km m"); -static_assert(unit_symbol(kilometre * metre, {.separator = dot}) == "km⋅m"); -static_assert(unit_symbol(metre / metre) == ""); -static_assert(unit_symbol(kilometre / metre) == "km/m"); -static_assert(unit_symbol(kilometre / metre, {.solidus = never}) == "km m⁻¹"); -static_assert(unit_symbol(kilometre / metre, {.encoding = ascii, .solidus = never}) == "km m^-1"); -static_assert(unit_symbol(metre / second) == "m/s"); -static_assert(unit_symbol(metre / second, {.solidus = always}) == "m/s"); -static_assert(unit_symbol(metre / second, {.solidus = never}) == "m s⁻¹"); -static_assert(unit_symbol(metre / second, {.encoding = ascii, .solidus = never}) == "m s^-1"); -static_assert(unit_symbol(metre / second, {.solidus = never, .separator = dot}) == "m⋅s⁻¹"); -static_assert(unit_symbol(metre / square) == "m/s²"); -static_assert(unit_symbol(metre / square, {.encoding = ascii}) == "m/s^2"); -static_assert(unit_symbol(metre / square, {.solidus = always}) == "m/s²"); -static_assert(unit_symbol(metre / square, {.encoding = ascii, .solidus = always}) == "m/s^2"); -static_assert(unit_symbol(metre / square, {.solidus = never}) == "m s⁻²"); -static_assert(unit_symbol(metre / square, {.encoding = ascii, .solidus = never}) == "m s^-2"); -static_assert(unit_symbol(metre / square, {.solidus = never, .separator = dot}) == "m⋅s⁻²"); -static_assert(unit_symbol(kilogram * metre / square) == "kg m/s²"); -static_assert(unit_symbol(kilogram * metre / square, {.separator = dot}) == "kg⋅m/s²"); -static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii}) == "kg m/s^2"); -static_assert(unit_symbol(kilogram * metre / square, {.solidus = always}) == "kg m/s²"); -static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii, .solidus = always}) == "kg m/s^2"); -static_assert(unit_symbol(kilogram * metre / square, {.solidus = never}) == "kg m s⁻²"); -static_assert(unit_symbol(kilogram * metre / square, {.encoding = ascii, .solidus = never}) == "kg m s^-2"); -static_assert(unit_symbol(kilogram * metre / square, {.solidus = never, .separator = dot}) == "kg⋅m⋅s⁻²"); -static_assert(unit_symbol(kilogram / metre / square) == "kg m⁻¹ s⁻²"); -static_assert(unit_symbol(kilogram / metre / square, {.separator = dot}) == "kg⋅m⁻¹⋅s⁻²"); -static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii}) == "kg m^-1 s^-2"); -static_assert(unit_symbol(kilogram / metre / square, {.solidus = always}) == "kg/(m s²)"); -static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii, .solidus = always}) == "kg/(m s^2)"); -static_assert(unit_symbol(kilogram / metre / square, {.solidus = never}) == "kg m⁻¹ s⁻²"); -static_assert(unit_symbol(kilogram / metre / square, {.encoding = ascii, .solidus = never}) == "kg m^-1 s^-2"); -static_assert(unit_symbol(kilogram / metre / square, {.solidus = never, .separator = dot}) == "kg⋅m⁻¹⋅s⁻²"); -static_assert(unit_symbol(pow<123>(metre)) == "m¹²³"); -static_assert(unit_symbol(pow<1, 2>(metre)) == "m^(1/2)"); -static_assert(unit_symbol(pow<3, 5>(metre)) == "m^(3/5)"); -static_assert(unit_symbol(pow<1, 2>(metre / second)) == "m^(1/2)/s^(1/2)"); - -// Physical constants -static_assert(unit_symbol(speed_of_light_in_vacuum_unit) == "[c]"); -static_assert(unit_symbol(gram * standard_gravity_unit * speed_of_light_in_vacuum_unit) == "[c] [g] g"); -static_assert(unit_symbol(gram / standard_gravity_unit) == "g/[g]"); - -#endif // __cpp_lib_constexpr_string - } // namespace