scran_test_utils
Test utilities for libscran projects
Loading...
Searching...
No Matches
simulate_vector.hpp
Go to the documentation of this file.
1#ifndef SCRAN_TESTS_SIMULATE_VECTOR_HPP
2#define SCRAN_TESTS_SIMULATE_VECTOR_HPP
3
4#include <random>
5#include <vector>
6#include <cstdint>
7#include <type_traits>
8
14namespace scran_tests {
15
21template<typename Type_ = double>
27 if constexpr(std::is_unsigned<Type_>::value) {
28 lower = 0;
29 }
30 }
38 double density = 1;
39
44 Type_ lower = -10;
45
49 Type_ upper = 10;
50
54 uint64_t seed = 1234567890;
55};
56
68template<typename Type_ = double>
69std::vector<Type_> simulate_vector(size_t length, const SimulationParameters<Type_>& params) {
70 std::mt19937_64 rng(params.seed);
71
72 typename std::conditional<
73 std::is_floating_point<Type_>::value,
74 std::uniform_real_distribution<Type_>,
75 std::uniform_int_distribution<Type_>
76 >::type unif(params.lower, params.upper);
77
78 std::vector<Type_> values(length);
79
80 if (params.density == 1) {
81 for (auto& v : values) {
82 v = unif(rng);
83 }
84 } else {
85 std::uniform_real_distribution<double> nonzero(0.0, 1.0);
86 for (auto& v : values) {
87 if (nonzero(rng) < params.density) {
88 v = unif(rng);
89 }
90 }
91 }
92
93 return values;
94}
95
96}
97
98#endif
Test utilites for libscran.
Definition compare_almost_equal.hpp:11
std::vector< Type_ > simulate_vector(size_t length, const SimulationParameters< Type_ > &params)
Definition simulate_vector.hpp:69
Parameters for simulate_vector().
Definition simulate_vector.hpp:22
double density
Definition simulate_vector.hpp:38
Type_ upper
Definition simulate_vector.hpp:49
uint64_t seed
Definition simulate_vector.hpp:54
Type_ lower
Definition simulate_vector.hpp:44