Revert "[libc] Use best-fit binary trie to make malloc logarithmic" (#117065)
[llvm-project.git] / libcxx / test / std / numerics / numarray / template.valarray / valarray.cassign / times_valarray.pass.cpp
blob58361fa697b6ff5f634d3e29bfc0370bdaf24f6f
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 // <valarray>
11 // template<class T> class valarray;
13 // [valarray.syn]/3
14 // Any function returning a valarray<T> is permitted to return an object of
15 // another type, provided all the const member functions of valarray<T> are
16 // also applicable to this type.
18 // Libc++ uses this and returns __val_expr<_Expr> for several operations.
20 // The const overloads of
21 // valarray::operator[](...) const
22 // return propxy objects. These proxies are implicitly convertible to
23 // std::valarray.
25 // valarray& operator*=(const valarray& v);
27 #include <valarray>
28 #include <cassert>
29 #include <cstddef>
31 #include "test_macros.h"
33 template <class A>
34 void test(const A& rhs) {
35 int input[] = {1, 2, 3, 4, 5};
36 int expected[] = {6, 14, 24, 36, 50};
37 const unsigned N = sizeof(input) / sizeof(input[0]);
38 std::valarray<int> value(input, N);
40 value *= rhs;
42 assert(value.size() == N);
43 for (std::size_t i = 0; i < value.size(); ++i)
44 assert(value[i] == expected[i]);
47 int main(int, char**) {
48 int input[] = {6, 7, 8, 9, 10};
49 const unsigned N = sizeof(input) / sizeof(input[0]);
51 std::valarray<bool> mask(true, N);
52 std::size_t indices[] = {0, 1, 2, 3, 4};
53 std::valarray<std::size_t> indirect(indices, N);
55 std::valarray<int> zero(0, N);
58 std::valarray<int> value(input, N);
60 test(value);
61 test(value[std::slice(0, N, 1)]);
62 test(value[std::gslice(0, std::valarray<std::size_t>(N, 1), std::valarray<std::size_t>(1, 1))]);
63 test(value[mask]);
64 test(value[indirect]);
65 test(value + zero);
69 const std::valarray<int> value(input, N);
71 test(value);
72 test(value[std::slice(0, N, 1)]);
73 test(value[std::gslice(0, std::valarray<std::size_t>(N, 1), std::valarray<std::size_t>(1, 1))]);
74 test(value[mask]);
75 test(value[indirect]);
76 test(value + zero);
79 return 0;