]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/experimental/simd/tests/mask_implicit_cvt.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / experimental / simd / tests / mask_implicit_cvt.cc
1 // Copyright (C) 2020-2022 Free Software Foundation, Inc.
2 //
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
7 // any later version.
8 //
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
17
18 // expensive: * [1-9] * *
19 #include "bits/verify.h"
20 #include "bits/metahelpers.h"
21
22 template <class M, class M2>
23 constexpr bool assign_should_work
24 = std::is_same<M, M2>::value
25 || (std::is_same<typename M::abi_type,
26 std::experimental::simd_abi::fixed_size<M::size()>>::value
27 && std::is_same<typename M::abi_type, typename M2::abi_type>::value);
28
29 template <class M, class M2>
30 constexpr bool assign_should_not_work = !assign_should_work<M, M2>;
31
32 template <class L, class R>
33 std::enable_if_t<assign_should_work<L, R>>
34 implicit_conversions_test()
35 {
36 L x = R(true);
37 COMPARE(x, L(true));
38 x = R(false);
39 COMPARE(x, L(false));
40 R y(false);
41 y[0] = true;
42 x = y;
43 L ref(false);
44 ref[0] = true;
45 COMPARE(x, ref);
46 }
47
48 template <class L, class R>
49 std::enable_if_t<assign_should_not_work<L, R>>
50 implicit_conversions_test()
51 {
52 VERIFY((is_substitution_failure<L&, R, assignment>) );
53 }
54
55 template <typename V>
56 void
57 test()
58 {
59 using M = typename V::mask_type;
60 using std::experimental::fixed_size_simd_mask;
61 using std::experimental::native_simd_mask;
62 using std::experimental::simd_mask;
63
64 implicit_conversions_test<M, simd_mask<ldouble>>();
65 implicit_conversions_test<M, simd_mask<double>>();
66 implicit_conversions_test<M, simd_mask<float>>();
67 implicit_conversions_test<M, simd_mask<ullong>>();
68 implicit_conversions_test<M, simd_mask<llong>>();
69 implicit_conversions_test<M, simd_mask<ulong>>();
70 implicit_conversions_test<M, simd_mask<long>>();
71 implicit_conversions_test<M, simd_mask<uint>>();
72 implicit_conversions_test<M, simd_mask<int>>();
73 implicit_conversions_test<M, simd_mask<ushort>>();
74 implicit_conversions_test<M, simd_mask<short>>();
75 implicit_conversions_test<M, simd_mask<uchar>>();
76 implicit_conversions_test<M, simd_mask<schar>>();
77 implicit_conversions_test<M, native_simd_mask<ldouble>>();
78 implicit_conversions_test<M, native_simd_mask<double>>();
79 implicit_conversions_test<M, native_simd_mask<float>>();
80 implicit_conversions_test<M, native_simd_mask<ullong>>();
81 implicit_conversions_test<M, native_simd_mask<llong>>();
82 implicit_conversions_test<M, native_simd_mask<ulong>>();
83 implicit_conversions_test<M, native_simd_mask<long>>();
84 implicit_conversions_test<M, native_simd_mask<uint>>();
85 implicit_conversions_test<M, native_simd_mask<int>>();
86 implicit_conversions_test<M, native_simd_mask<ushort>>();
87 implicit_conversions_test<M, native_simd_mask<short>>();
88 implicit_conversions_test<M, native_simd_mask<uchar>>();
89 implicit_conversions_test<M, native_simd_mask<schar>>();
90 implicit_conversions_test<M, fixed_size_simd_mask<ldouble, M::size()>>();
91 implicit_conversions_test<M, fixed_size_simd_mask<double, M::size()>>();
92 implicit_conversions_test<M, fixed_size_simd_mask<float, M::size()>>();
93 implicit_conversions_test<M, fixed_size_simd_mask<ullong, M::size()>>();
94 implicit_conversions_test<M, fixed_size_simd_mask<llong, M::size()>>();
95 implicit_conversions_test<M, fixed_size_simd_mask<ulong, M::size()>>();
96 implicit_conversions_test<M, fixed_size_simd_mask<long, M::size()>>();
97 implicit_conversions_test<M, fixed_size_simd_mask<uint, M::size()>>();
98 implicit_conversions_test<M, fixed_size_simd_mask<int, M::size()>>();
99 implicit_conversions_test<M, fixed_size_simd_mask<ushort, M::size()>>();
100 implicit_conversions_test<M, fixed_size_simd_mask<short, M::size()>>();
101 implicit_conversions_test<M, fixed_size_simd_mask<uchar, M::size()>>();
102 implicit_conversions_test<M, fixed_size_simd_mask<schar, M::size()>>();
103 }