From f4c1ef5ee6254f269eac3e579ea388010a0bf698 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 8 May 2024 11:02:39 -0400 Subject: [PATCH] xo-unit: + abbrevs + tests for imperial units {in,ft,yd,mi} --- include/xo/unit/basis_unit_abbrev.hpp | 12 ++++++++++++ utest/basis_unit.test.cpp | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/include/xo/unit/basis_unit_abbrev.hpp b/include/xo/unit/basis_unit_abbrev.hpp index bf6682f3..43fe9b0c 100644 --- a/include/xo/unit/basis_unit_abbrev.hpp +++ b/include/xo/unit/basis_unit_abbrev.hpp @@ -114,9 +114,21 @@ namespace xo { return bu_abbrev_type::from_chars("AU"); } } + + if (scalefactor.den() == 10000) { + switch(scalefactor.num()) { + case 3048: + return bu_abbrev_type::from_chars("ft"); + case 3*3048: + return bu_abbrev_type::from_chars("yd"); + case 5280*3048: + return bu_abbrev_type::from_chars("mi"); } } + if (scalefactor.num() == 3048 && scalefactor.den() == 120000) + return bu_abbrev_type::from_chars("in"); + return fallback_unit_abbrev(scalefactor, dimension::distance); } diff --git a/utest/basis_unit.test.cpp b/utest/basis_unit.test.cpp index 6cf22a56..423af0a3 100644 --- a/utest/basis_unit.test.cpp +++ b/utest/basis_unit.test.cpp @@ -111,6 +111,11 @@ namespace xo { REQUIRE_x2(bu::lightsecond.abbrev() == flatstring("lsec")); REQUIRE_x2(bu::astronomicalunit.abbrev() == flatstring("AU")); + REQUIRE_x2(bu::inch.abbrev() == flatstring("in")); + REQUIRE_x2(bu::foot.abbrev() == flatstring("ft")); + REQUIRE_x2(bu::yard.abbrev() == flatstring("yd")); + REQUIRE_x2(bu::mile.abbrev() == flatstring("mi")); + log && log(xtag("time", basis_unit2_abbrev(dim::time, scalefactor_ratio_type(1, 1)))); REQUIRE_x2(bu::picosecond.abbrev() == bu_abbrev_type::from_chars("ps"));