On Wed, 25 Jun 2025 at 10:42, Tomasz Kamiński <tkami...@redhat.com> wrote:
>
> Existing test are extented to cover cases where not precision is specified,
> or it is specified to zero. The precision value is ignored in all cases.
>
> libstdc++-v3/ChangeLog:
>
>         * testsuite/std/time/format/precision.cc: New tests.
> ---
> v2 extents test to cover .0 as precision.
> Testing on x86_64-linux. std/format/time* test passed, also with 
> -D_GLIBCXX_USE_CXX11_ABI=0
> and -D_GLIBCXX_DEBUG.

OK for trunk

>
>
>  .../testsuite/std/time/format/precision.cc    | 104 +++++++++++++++++-
>  1 file changed, 99 insertions(+), 5 deletions(-)
>
> diff --git a/libstdc++-v3/testsuite/std/time/format/precision.cc 
> b/libstdc++-v3/testsuite/std/time/format/precision.cc
> index ccb2c77ce05..aa266156c1f 100644
> --- a/libstdc++-v3/testsuite/std/time/format/precision.cc
> +++ b/libstdc++-v3/testsuite/std/time/format/precision.cc
> @@ -16,6 +16,10 @@ test_empty()
>    std::basic_string<CharT> res;
>
>    const duration<double> d(33.111222);
> +  res = std::format(WIDEN("{:}"), d);
> +  VERIFY( res == WIDEN("33.1112s") );
> +  res = std::format(WIDEN("{:.0}"), d);
> +  VERIFY( res == WIDEN("33.1112s") );
>    res = std::format(WIDEN("{:.3}"), d);
>    VERIFY( res == WIDEN("33.1112s") );
>    res = std::format(WIDEN("{:.6}"), d);
> @@ -25,6 +29,10 @@ test_empty()
>
>    // Uses ostream operator<<
>    const duration<double, std::nano> nd = d;
> +  res = std::format(WIDEN("{:}"), nd);
> +  VERIFY( res == WIDEN("3.31112e+10ns") );
> +  res = std::format(WIDEN("{:.0}"), nd);
> +  VERIFY( res == WIDEN("3.31112e+10ns") );
>    res = std::format(WIDEN("{:.3}"), nd);
>    VERIFY( res == WIDEN("3.31112e+10ns") );
>    res = std::format(WIDEN("{:.6}"), nd);
> @@ -40,6 +48,10 @@ test_Q()
>    std::basic_string<CharT> res;
>
>    const duration<double> d(7.111222);
> +  res = std::format(WIDEN("{:%Q}"), d);
> +  VERIFY( res == WIDEN("7.111222") );
> +  res = std::format(WIDEN("{:.0%Q}"), d);
> +  VERIFY( res == WIDEN("7.111222") );
>    res = std::format(WIDEN("{:.3%Q}"), d);
>    VERIFY( res == WIDEN("7.111222") );
>    res = std::format(WIDEN("{:.6%Q}"), d);
> @@ -47,7 +59,23 @@ test_Q()
>    res = std::format(WIDEN("{:.9%Q}"), d);
>    VERIFY( res == WIDEN("7.111222") );
>
> +  duration<double, std::milli> md = d;
> +  res = std::format(WIDEN("{:%Q}"), md);
> +  VERIFY( res == WIDEN("7111.222") );
> +  res = std::format(WIDEN("{:.0%Q}"), md);
> +  VERIFY( res == WIDEN("7111.222") );
> +  res = std::format(WIDEN("{:.3%Q}"), md);
> +  VERIFY( res == WIDEN("7111.222") );
> +  res = std::format(WIDEN("{:.6%Q}"), md);
> +  VERIFY( res == WIDEN("7111.222") );
> +  res = std::format(WIDEN("{:.9%Q}"), md);
> +  VERIFY( res == WIDEN("7111.222") );
> +
>    const duration<double, std::nano> nd = d;
> +  res = std::format(WIDEN("{:%Q}"), nd);
> +  VERIFY( res == WIDEN("7111222000") );
> +  res = std::format(WIDEN("{:.0%Q}"), nd);
> +  VERIFY( res == WIDEN("7111222000") );
>    res = std::format(WIDEN("{:.3%Q}"), nd);
>    VERIFY( res == WIDEN("7111222000") );
>    res = std::format(WIDEN("{:.6%Q}"), nd);
> @@ -58,12 +86,16 @@ test_Q()
>
>  template<typename CharT>
>  void
> -test_S()
> +test_S_fp()
>  {
>    std::basic_string<CharT> res;
>
>    // Precision is ignored, but period affects output
> -  const duration<double> d(5.111222);
> +  duration<double> d(5.111222);
> +  res = std::format(WIDEN("{:%S}"), d);
> +  VERIFY( res == WIDEN("05") );
> +  res = std::format(WIDEN("{:.0%S}"), d);
> +  VERIFY( res == WIDEN("05") );
>    res = std::format(WIDEN("{:.3%S}"), d);
>    VERIFY( res == WIDEN("05") );
>    res = std::format(WIDEN("{:.6%S}"), d);
> @@ -71,7 +103,11 @@ test_S()
>    res = std::format(WIDEN("{:.9%S}"), d);
>    VERIFY( res == WIDEN("05") );
>
> -  const duration<double, std::milli> md = d;
> +  duration<double, std::milli> md = d;
> +  res = std::format(WIDEN("{:%S}"), md);
> +  VERIFY( res == WIDEN("05.111") );
> +  res = std::format(WIDEN("{:.0%S}"), md);
> +  VERIFY( res == WIDEN("05.111") );
>    res = std::format(WIDEN("{:.3%S}"), md);
>    VERIFY( res == WIDEN("05.111") );
>    res = std::format(WIDEN("{:.6%S}"), md);
> @@ -79,13 +115,70 @@ test_S()
>    res = std::format(WIDEN("{:.9%S}"), md);
>    VERIFY( res == WIDEN("05.111") );
>
> -  const duration<double, std::nano> nd = d;
> +  duration<double, std::micro> ud = d;
> +  res = std::format(WIDEN("{:%S}"), ud);
> +  VERIFY( res == WIDEN("05.111222") );
> +  res = std::format(WIDEN("{:.0%S}"), ud);
> +  VERIFY( res == WIDEN("05.111222") );
> +  res = std::format(WIDEN("{:.3%S}"), ud);
> +  VERIFY( res == WIDEN("05.111222") );
> +  res = std::format(WIDEN("{:.6%S}"), ud);
> +  VERIFY( res == WIDEN("05.111222") );
> +  res = std::format(WIDEN("{:.9%S}"), ud);
> +  VERIFY( res == WIDEN("05.111222") );
> +
> +  duration<double, std::nano> nd = d;
> +  res = std::format(WIDEN("{:%S}"), nd);
> +  VERIFY( res == WIDEN("05.111222000") );
> +  res = std::format(WIDEN("{:.0%S}"), nd);
> +  VERIFY( res == WIDEN("05.111222000") );
>    res = std::format(WIDEN("{:.3%S}"), nd);
>    VERIFY( res == WIDEN("05.111222000") );
>    res = std::format(WIDEN("{:.6%S}"), nd);
>    VERIFY( res == WIDEN("05.111222000") );
>    res = std::format(WIDEN("{:.9%S}"), nd);
>    VERIFY( res == WIDEN("05.111222000") );
> +
> +  duration<double, std::pico> pd = d;
> +  res = std::format(WIDEN("{:%S}"), pd);
> +  VERIFY( res == WIDEN("05.111222000000") );
> +  res = std::format(WIDEN("{:.0%S}"), pd);
> +  VERIFY( res == WIDEN("05.111222000000") );
> +  res = std::format(WIDEN("{:.3%S}"), pd);
> +  VERIFY( res == WIDEN("05.111222000000") );
> +  res = std::format(WIDEN("{:.6%S}"), pd);
> +  VERIFY( res == WIDEN("05.111222000000") );
> +  res = std::format(WIDEN("{:.9%S}"), pd);
> +  VERIFY( res == WIDEN("05.111222000000") );
> +}
> +
> +template<typename CharT>
> +void
> +test_S_int()
> +{
> +  std::basic_string<CharT> res;
> +  const nanoseconds src(7'000'012'345);
> +
> +  auto d = floor<seconds>(src);
> +  res = std::format(WIDEN("{:%S}"), d);
> +  VERIFY( res == WIDEN("07") );
> +
> +  auto md = floor<milliseconds>(src);
> +  res = std::format(WIDEN("{:%S}"), md);
> +  VERIFY( res == WIDEN("07.000") );
> +
> +  auto ud = floor<microseconds>(src);
> +  res = std::format(WIDEN("{:%S}"), ud);
> +  VERIFY( res == WIDEN("07.000012") );
> +
> +  auto nd = floor<nanoseconds>(src);
> +  res = std::format(WIDEN("{:%S}"), nd);
> +  VERIFY( res == WIDEN("07.000012345") );
> +
> +  using picoseconds = duration<unsigned long long, std::pico>;
> +  auto pd = floor<picoseconds>(src);
> +  res = std::format(WIDEN("{:%S}"), pd);
> +  VERIFY( res == WIDEN("07.000012345000") );
>  }
>
>  template<typename CharT>
> @@ -94,7 +187,8 @@ test_all()
>  {
>    test_empty<CharT>();
>    test_Q<CharT>();
> -  test_S<CharT>();
> +  test_S_int<CharT>();
> +  test_S_fp<CharT>();
>  }
>
>  int main()
> --
> 2.49.0
>

Reply via email to