15 #include "absl/random/internal/nonsecure_base.h"
24 #include "gtest/gtest.h"
25 #include "absl/random/distributions.h"
26 #include "absl/random/random.h"
27 #include "absl/strings/str_cat.h"
31 using ExampleNonsecureURBG =
39 TEST(NonsecureURBGBase, DefaultConstructorIsValid) {
40 ExampleNonsecureURBG urbg;
44 TEST(RecommendedTemplates, CanBeConstructed) {
49 TEST(RecommendedTemplates, CanDiscardValues) {
57 TEST(NonsecureURBGBase, StandardInterface) {
73 "NonsecureURBGBase should not be copy constructible");
76 "NonsecureURBGBase should not be copy assignable");
79 "NonsecureURBGBase should be move constructible");
82 "NonsecureURBGBase should be move assignable");
84 static_assert(std::is_same<decltype(std::declval<E>()()),
T>::
value,
85 "return type of operator() must be result_type");
92 static_assert(std::is_same<decltype(
x ==
y),
bool>::
value,
93 "return type of operator== must be bool");
95 static_assert(std::is_same<decltype(
x !=
y),
bool>::
value,
96 "return type of operator== must be bool");
100 std::seed_seq q{1, 2, 3};
137 unsigned long long z = 1;
141 TEST(NonsecureURBGBase, SeedSeqConstructorIsValid) {
143 ExampleNonsecureURBG rbg(seq);
146 TEST(NonsecureURBGBase, CompatibleWithDistributionUtils) {
147 ExampleNonsecureURBG rbg;
151 absl::Poisson<uint32_t>(rbg);
152 absl::Exponential<float>(rbg);
155 TEST(NonsecureURBGBase, CompatibleWithStdDistributions) {
156 ExampleNonsecureURBG rbg;
159 static_cast<void>(std::uniform_int_distribution<uint32_t>(0, 100)(rbg));
160 static_cast<void>(std::uniform_real_distribution<float>()(rbg));
161 static_cast<void>(std::bernoulli_distribution(0.2)(rbg));
164 TEST(NonsecureURBGBase, ConsecutiveDefaultInstancesYieldUniqueVariates) {
165 const size_t kNumSamples = 128;
167 ExampleNonsecureURBG rbg1;
168 ExampleNonsecureURBG rbg2;
170 for (
size_t i = 0;
i < kNumSamples;
i++) {
175 TEST(NonsecureURBGBase, EqualSeedSequencesYieldEqualVariates) {
178 ExampleNonsecureURBG rbg1(seq);
179 ExampleNonsecureURBG rbg2(seq);
196 TEST(RandenPoolSeedSeqTest, SeederWorksForU32) {
204 TEST(RandenPoolSeedSeqTest, SeederWorksForU64) {
213 TEST(RandenPoolSeedSeqTest, SeederWorksForS32) {
221 TEST(RandenPoolSeedSeqTest, SeederWorksForVector) {
224 std::vector<uint32_t>
state(2);