On Thu, Sep 11, 2025 at 1:51 PM Luc Grosheintz <[email protected]>
wrote:

> The left padded layout is a template class. In order to be able to use
> partially specializes templates, functions need to be converted structs.
>
> libstdc++-v3/ChangeLog:
>
>         * testsuite/23_containers/mdspan/layouts/mapping.cc
>         (test_stride_2d): Rewrite using a struct.
>         (test_stride_3d): Ditto.
>
> Signed-off-by: Luc Grosheintz <[email protected]>
> ---
>
LGTM.

>  .../23_containers/mdspan/layouts/mapping.cc   | 119 +++++++++++-------
>  1 file changed, 75 insertions(+), 44 deletions(-)
>
> diff --git
> a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
> b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
> index 1d9b7a27f28..db15e2a48f3 100644
> --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
> +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc
> @@ -330,73 +330,104 @@ template<>
>    }
>
>  template<typename Layout>
> -  constexpr void
> -  test_stride_2d();
> +struct TestStride2D;
>
>  template<>
> -  constexpr void
> -  test_stride_2d<std::layout_left>()
> +  struct TestStride2D<std::layout_left>
>    {
> -    std::layout_left::mapping<std::extents<int, 3, 5>> m;
> -    VERIFY(m.stride(0) == 1);
> -    VERIFY(m.stride(1) == 3);
> -  }
> +    static constexpr void
> +    run()
> +    {
> +      std::layout_left::mapping<std::extents<int, 3, 5>> m;
> +      VERIFY(m.stride(0) == 1);
> +      VERIFY(m.stride(1) == 3);
> +    }
> +  };
>
>  template<>
> -  constexpr void
> -  test_stride_2d<std::layout_right>()
> +  struct TestStride2D<std::layout_right>
>    {
> -    std::layout_right::mapping<std::extents<int, 3, 5>> m;
> -    VERIFY(m.stride(0) == 5);
> -    VERIFY(m.stride(1) == 1);
> -  }
> +    static constexpr void
> +    run()
> +    {
> +      std::layout_right::mapping<std::extents<int, 3, 5>> m;
> +      VERIFY(m.stride(0) == 5);
> +      VERIFY(m.stride(1) == 1);
> +    }
> +  };
>
>  template<>
> +  struct TestStride2D<std::layout_stride>
> +  {
> +    static constexpr void
> +    run()
> +    {
> +      std::array<int, 2> strides{13, 2};
> +      std::layout_stride::mapping m(std::extents<int, 3, 5>{}, strides);
> +      VERIFY(m.stride(0) == strides[0]);
> +      VERIFY(m.stride(1) == strides[1]);
> +      VERIFY(m.strides() == strides);
> +    }
> +  };
> +
> +template<typename Layout>
>    constexpr void
> -  test_stride_2d<std::layout_stride>()
> +  test_stride_2d()
>    {
> -    std::array<int, 2> strides{13, 2};
> -    std::layout_stride::mapping m(std::extents<int, 3, 5>{}, strides);
> -    VERIFY(m.stride(0) == strides[0]);
> -    VERIFY(m.stride(1) == strides[1]);
> -    VERIFY(m.strides() == strides);
> +    TestStride2D<Layout>::run();
>    }
>
>  template<typename Layout>
> -  constexpr void
> -  test_stride_3d();
> +struct TestStride3D;
>
>  template<>
> -  constexpr void
> -  test_stride_3d<std::layout_left>()
> +  struct TestStride3D<std::layout_left>
>    {
> -    std::layout_left::mapping m(std::dextents<int, 3>(3, 5, 7));
> -    VERIFY(m.stride(0) == 1);
> -    VERIFY(m.stride(1) == 3);
> -    VERIFY(m.stride(2) == 3*5);
> -  }
> +    static constexpr void
> +    run()
> +    {
> +      std::layout_left::mapping m(std::dextents<int, 3>(3, 5, 7));
> +      VERIFY(m.stride(0) == 1);
> +      VERIFY(m.stride(1) == 3);
> +      VERIFY(m.stride(2) == 3*5);
> +    }
> +  };
> +
>
>  template<>
> -  constexpr void
> -  test_stride_3d<std::layout_right>()
> +  struct TestStride3D<std::layout_right>
>    {
> -    std::layout_right::mapping m(std::dextents<int, 3>(3, 5, 7));
> -    VERIFY(m.stride(0) == 5*7);
> -    VERIFY(m.stride(1) == 7);
> -    VERIFY(m.stride(2) == 1);
> -  }
> +    static constexpr void
> +    run()
> +    {
> +      std::layout_right::mapping m(std::dextents<int, 3>(3, 5, 7));
> +      VERIFY(m.stride(0) == 5*7);
> +      VERIFY(m.stride(1) == 7);
> +      VERIFY(m.stride(2) == 1);
> +    }
> +  };
>
>  template<>
> +  struct TestStride3D<std::layout_stride>
> +  {
> +    static constexpr void
> +    run()
> +    {
> +      std::dextents<int, 3> exts(3, 5, 7);
> +      std::array<int, 3> strides{11, 2, 41};
> +      std::layout_stride::mapping<std::dextents<int, 3>> m(exts, strides);
> +      VERIFY(m.stride(0) == strides[0]);
> +      VERIFY(m.stride(1) == strides[1]);
> +      VERIFY(m.stride(2) == strides[2]);
> +      VERIFY(m.strides() == strides);
> +    }
> +  };
> +
> +template<typename Layout>
>    constexpr void
> -  test_stride_3d<std::layout_stride>()
> +  test_stride_3d()
>    {
> -    std::dextents<int, 3> exts(3, 5, 7);
> -    std::array<int, 3> strides{11, 2, 41};
> -    std::layout_stride::mapping<std::dextents<int, 3>> m(exts, strides);
> -    VERIFY(m.stride(0) == strides[0]);
> -    VERIFY(m.stride(1) == strides[1]);
> -    VERIFY(m.stride(2) == strides[2]);
> -    VERIFY(m.strides() == strides);
> +    TestStride3D<Layout>::run();
>    }
>
>  template<typename Layout>
> --
> 2.50.1
>
>

Reply via email to