xref: /llvm-project/libcxx/test/libcxx/numerics/numarray/class.mask.array/get.pass.cpp (revision 5ca2777c69f8708d583e230c56ac7f5f6376fb40)
1*5ca2777cSMark de Wever //===----------------------------------------------------------------------===//
2*5ca2777cSMark de Wever //
3*5ca2777cSMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*5ca2777cSMark de Wever // See https://llvm.org/LICENSE.txt for license information.
5*5ca2777cSMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*5ca2777cSMark de Wever //
7*5ca2777cSMark de Wever //===----------------------------------------------------------------------===//
8*5ca2777cSMark de Wever 
9*5ca2777cSMark de Wever // <valarray>
10*5ca2777cSMark de Wever 
11*5ca2777cSMark de Wever // template<class T> class mask_array;
12*5ca2777cSMark de Wever 
13*5ca2777cSMark de Wever // T __get(size_t i);
14*5ca2777cSMark de Wever 
15*5ca2777cSMark de Wever #include <valarray>
16*5ca2777cSMark de Wever #include <cassert>
17*5ca2777cSMark de Wever 
18*5ca2777cSMark de Wever #include "test_macros.h"
19*5ca2777cSMark de Wever 
main(int,char **)20*5ca2777cSMark de Wever int main(int, char**) {
21*5ca2777cSMark de Wever   unsigned input[] = {0, 1, 2, 3, 4};
22*5ca2777cSMark de Wever   const unsigned N = sizeof(input) / sizeof(input[0]);
23*5ca2777cSMark de Wever 
24*5ca2777cSMark de Wever   std::valarray<unsigned> array(input, N);
25*5ca2777cSMark de Wever 
26*5ca2777cSMark de Wever   {
27*5ca2777cSMark de Wever     std::mask_array<unsigned> result = array[std::valarray<bool>(true, N)];
28*5ca2777cSMark de Wever     for (unsigned i = 0; i < N; ++i)
29*5ca2777cSMark de Wever       assert(result.__get(i) == i);
30*5ca2777cSMark de Wever   }
31*5ca2777cSMark de Wever 
32*5ca2777cSMark de Wever   {
33*5ca2777cSMark de Wever     std::valarray<bool> mask(false, N);
34*5ca2777cSMark de Wever     mask[1]                          = true;
35*5ca2777cSMark de Wever     mask[3]                          = true;
36*5ca2777cSMark de Wever     std::mask_array<unsigned> result = array[mask];
37*5ca2777cSMark de Wever     assert(result.__get(0) == 1);
38*5ca2777cSMark de Wever     assert(result.__get(1) == 3);
39*5ca2777cSMark de Wever   }
40*5ca2777cSMark de Wever 
41*5ca2777cSMark de Wever   {
42*5ca2777cSMark de Wever     std::valarray<bool> mask(false, N);
43*5ca2777cSMark de Wever     mask[0]                          = true;
44*5ca2777cSMark de Wever     mask[4]                          = true;
45*5ca2777cSMark de Wever     std::mask_array<unsigned> result = array[mask];
46*5ca2777cSMark de Wever     assert(result.__get(0) == 0);
47*5ca2777cSMark de Wever     assert(result.__get(1) == 4);
48*5ca2777cSMark de Wever   }
49*5ca2777cSMark de Wever 
50*5ca2777cSMark de Wever   return 0;
51*5ca2777cSMark de Wever }
52