@@ -137,6 +137,34 @@ namespace xt
137137 EXPECT_EQ (iter, view.end ());
138138 }
139139
140+ TEST (xmanipulation, flatten_simd_linear_assign_trait)
141+ {
142+ xtensor<double , 3 > a = linspace<double >(1 ., 100 ., 100 ).reshape ({2 , 5 , 10 });
143+ auto v = view (a, range (0 , 2 ), range (0 , 3 ), range (0 , 3 ));
144+
145+ {
146+ auto e = flatten<XTENSOR_DEFAULT_LAYOUT>(a);
147+ xtensor<double , 1 > fl = e;
148+ using assign_traits = xassign_traits<decltype (fl), decltype (e)>;
149+
150+ #if XTENSOR_USE_XSIMD
151+ EXPECT_TRUE (assign_traits::simd_linear_assign ());
152+ EXPECT_TRUE (assign_traits::simd_linear_assign (fl, e));
153+ #else
154+ EXPECT_FALSE (assign_traits::simd_linear_assign ());
155+ EXPECT_FALSE (assign_traits::simd_linear_assign (fl, e));
156+ #endif
157+ }
158+
159+ {
160+ auto e = flatten<XTENSOR_DEFAULT_LAYOUT>(v);
161+ xtensor<double , 1 > fl = e;
162+ using assign_traits = xassign_traits<decltype (fl), decltype (e)>;
163+ EXPECT_FALSE (assign_traits::simd_linear_assign ());
164+ EXPECT_FALSE (assign_traits::simd_linear_assign (fl, e));
165+ }
166+ }
167+
140168 TEST (xmanipulation, flatnonzero)
141169 {
142170 xt::xtensor<int , 1 > a = arange (-2 , 3 );
0 commit comments