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 > >
