f312d8bdb9211eb4f9f99e0f1fb5bf88832009cd
1 #include "testing/lib/random.hpp"
2 #include "testing/lib/Connection.hpp"
7 #include <unistd.h> // getpid()
11 enable_if_t
<is_integral_v
<T
>, T
> random_num(T min
, T max
) {
12 using namespace chrono
;
14 using dst
= uniform_int_distribution
<T
>;
16 auto time
= duration_cast
<microseconds
>(system_clock::now().time_since_epoch());
17 auto seed
= static_cast<rnd::result_type
>(time
.count() % numeric_limits
<T
>::max());
18 auto rgen
= rnd
{seed
};
19 return dst(min
, max
)(rgen
);
22 unsigned random_port() {
24 auto port
= random_num(2<<9, 2<<15);
25 Connection
conn(port
);
36 string
random_port_string(const string
&) {
37 return to_string(random_port());
40 string
random_socket(const string
&prefix
) {
41 return prefix
+ to_string(random_num(1U, UINT32_MAX
)) + "@" + to_string(getpid()) + ".sock";
44 string
random_socket_or_port_string(const string
&what
) {
46 return random_socket();
49 return to_string(random_port());
52 string
random_socket_or_port_flag(const string
&binary
) {
54 return random_num(0, 1) ? "-p" : "-s";
57 char random_ascii(char min
, char max
) {
58 return static_cast<char>(random_num(min
, max
));
61 string
random_ascii_string(size_t len
, char min
, char max
) {
65 for (size_t rem
= 0; rem
< len
; ++rem
) {
66 s
+= random_ascii(min
, max
);
70 assert(strlen(s
.c_str()) == s
.size());
75 pair
<string
, string
> random_ascii_pair(size_t minlen
, size_t maxlen
) {
77 random_ascii_string(random_num(minlen
, maxlen
)),
78 random_ascii_string(random_num(minlen
, maxlen
))