[v2,3/5] libstdc++: Prepare mapping layout tests for left padded.
Commit Message
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 <luc.grosheintz@gmail.com>
---
.../23_containers/mdspan/layouts/mapping.cc | 119 +++++++++++-------
1 file changed, 75 insertions(+), 44 deletions(-)
Comments
On Thu, Sep 11, 2025 at 1:51 PM Luc Grosheintz <luc.grosheintz@gmail.com>
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 <luc.grosheintz@gmail.com>
> ---
>
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
>
>
@@ -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>