1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_NO_MAIN
4 // Disable this code for gcc 4.8 and lower
5 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ > 8) || !__GNUC__
10 #include <boost/test/unit_test.hpp>
11 #include <boost/assign/std/map.hpp>
13 #include <boost/accumulators/statistics/median.hpp>
14 #include <boost/accumulators/statistics/mean.hpp>
15 #include <boost/accumulators/accumulators.hpp>
16 #include <boost/accumulators/statistics.hpp>
18 #include "arguments.hh"
19 #include "dns_random.hh"
20 #include "namespaces.hh"
23 using namespace boost
;
24 using namespace boost::accumulators
;
26 typedef accumulator_set
<
28 , stats
<boost::accumulators::tag::median(with_p_square_quantile
),
29 boost::accumulators::tag::mean(immediate
)
35 BOOST_AUTO_TEST_SUITE(test_dns_random_hh
)
37 BOOST_AUTO_TEST_CASE(test_dns_random_auto_average
) {
39 ::arg().set("rng")="auto";
40 ::arg().set("entropy-source")="/dev/urandom";
42 dns_random_init("", true);
46 for(unsigned int n
=0; n
< 100000; ++n
) {
47 acc(dns_random(100000)/100000.0);
49 BOOST_CHECK_CLOSE(0.5, median(acc
), 2.0); // within 2%
50 BOOST_CHECK_CLOSE(0.5, mean(acc
), 2.0);
52 // please add covariance tests, chi-square, Kolmogorov-Smirnov
55 BOOST_AUTO_TEST_CASE(test_dns_random_urandom_average
) {
57 ::arg().set("rng")="urandom";
58 ::arg().set("entropy-source")="/dev/urandom";
60 dns_random_init("", true);
64 for(unsigned int n
=0; n
< 100000; ++n
) {
65 acc(dns_random(100000)/100000.0);
67 BOOST_CHECK_CLOSE(0.5, median(acc
), 2.0); // within 2%
68 BOOST_CHECK_CLOSE(0.5, mean(acc
), 2.0);
70 // please add covariance tests, chi-square, Kolmogorov-Smirnov
73 BOOST_AUTO_TEST_CASE(test_dns_random_garbage
) {
75 ::arg().set("rng")="garbage";
76 ::arg().set("entropy-source")="/dev/urandom";
78 BOOST_CHECK_THROW(dns_random_init("", true), std::runtime_error
);
81 #if defined(HAVE_GETRANDOM)
82 BOOST_AUTO_TEST_CASE(test_dns_random_getrandom_average
) {
84 ::arg().set("rng")="getrandom";
85 ::arg().set("entropy-source")="/dev/urandom";
87 dns_random_init("", true);
91 for(unsigned int n
=0; n
< 100000; ++n
) {
92 acc(dns_random(100000)/100000.0);
94 BOOST_CHECK_CLOSE(0.5, median(acc
), 2.0); // within 2%
95 BOOST_CHECK_CLOSE(0.5, mean(acc
), 2.0);
97 // please add covariance tests, chi-square, Kolmogorov-Smirnov
101 #if defined(HAVE_ARC4RANDOM)
102 BOOST_AUTO_TEST_CASE(test_dns_random_getrandom_average
) {
104 ::arg().set("rng")="arc4random";
105 ::arg().set("entropy-source")="/dev/urandom";
107 dns_random_init("", true);
111 for(unsigned int n
=0; n
< 100000; ++n
) {
112 acc(dns_random(100000)/100000.0);
114 BOOST_CHECK_CLOSE(0.5, median(acc
), 2.0); // within 2%
115 BOOST_CHECK_CLOSE(0.5, mean(acc
), 2.0);
117 // please add covariance tests, chi-square, Kolmogorov-Smirnov
121 #if defined(HAVE_RANDOMBYTES_STIR)
122 BOOST_AUTO_TEST_CASE(test_dns_random_sodium_average
) {
124 ::arg().set("rng")="sodium";
125 ::arg().set("entropy-source")="/dev/urandom";
127 dns_random_init("", true);
131 for(unsigned int n
=0; n
< 100000; ++n
) {
132 acc(dns_random(100000)/100000.0);
134 BOOST_CHECK_CLOSE(0.5, median(acc
), 2.0); // within 2%
135 BOOST_CHECK_CLOSE(0.5, mean(acc
), 2.0);
137 // please add covariance tests, chi-square, Kolmogorov-Smirnov
141 #if defined(HAVE_RAND_BYTES)
142 BOOST_AUTO_TEST_CASE(test_dns_random_openssl_average
) {
144 ::arg().set("rng")="openssl";
145 ::arg().set("entropy-source")="/dev/urandom";
147 dns_random_init("", true);
151 for(unsigned int n
=0; n
< 100000; ++n
) {
152 acc(dns_random(100000)/100000.0);
154 BOOST_CHECK_CLOSE(0.5, median(acc
), 2.0); // within 2%
155 BOOST_CHECK_CLOSE(0.5, mean(acc
), 2.0);
157 // please add covariance tests, chi-square, Kolmogorov-Smirnov
161 #if defined(HAVE_KISS_RNG)
162 BOOST_AUTO_TEST_CASE(test_dns_random_kiss_average
) {
164 ::arg().set("rng")="kiss";
165 ::arg().set("entropy-source")="/dev/urandom";
167 dns_random_init("", true);
171 for(unsigned int n
=0; n
< 100000; ++n
) {
172 acc(dns_random(100000)/100000.0);
174 BOOST_CHECK_CLOSE(0.5, median(acc
), 2.0); // within 2%
175 BOOST_CHECK_CLOSE(0.5, mean(acc
), 2.0);
177 // please add covariance tests, chi-square, Kolmogorov-Smirnov
182 BOOST_AUTO_TEST_SUITE_END()