| // SPDX-FileCopyrightText: The Eigen Authors | |
| // SPDX-License-Identifier: MPL-2.0 | |
| #ifndef EIGEN_BENCHMARK_BOOLEAN_HELPERS_H | |
| #define EIGEN_BENCHMARK_BOOLEAN_HELPERS_H | |
| #include <cstdint> | |
| #include <Eigen/Core> | |
| namespace Eigen { | |
| namespace benchmark_detail { | |
| using BoolArray = Array<bool, Dynamic, 1>; | |
| enum InputPattern { Random, AllFalse, AllTrue, Sparse, FirstTrue, LastTrue, FirstFalse, LastFalse }; | |
| template <InputPattern Pattern> | |
| void fill_input(BoolArray& input, std::uint32_t state) { | |
| for (Index i = 0; i < input.size(); ++i) { | |
| state = state * 1664525u + 1013904223u; | |
| input[i] = Pattern == AllTrue || Pattern == FirstFalse || Pattern == LastFalse || | |
| (Pattern == Sparse && state % 10 == 0) || (Pattern == Random && (state >> 31) != 0); | |
| } | |
| if (input.size() == 0) return; | |
| if (Pattern == FirstTrue) input[0] = true; | |
| if (Pattern == LastTrue) input[input.size() - 1] = true; | |
| if (Pattern == FirstFalse) input[0] = false; | |
| if (Pattern == LastFalse) input[input.size() - 1] = false; | |
| } | |
| } // namespace benchmark_detail | |
| } // namespace Eigen | |
| #endif // EIGEN_BENCHMARK_BOOLEAN_HELPERS_H |