12 using kv_pair = pair<string, string>;
15 enable_if_t<is_integral_v<T>, T> random_num(T min, T max) {
16 using namespace chrono;
18 using dst = uniform_int_distribution<T>;
20 auto time = duration_cast<nanoseconds>(system_clock::now().time_since_epoch());
21 auto seed = static_cast<rnd::result_type>(time.count() % numeric_limits<T>::max());
22 auto rgen = rnd{seed};
23 return dst(min, max)(rgen);
26 unsigned random_port();
27 string random_port_string(const string &);
29 char random_ascii(char min = '!', char max = '~');
30 string random_ascii_string(size_t len, char min = '!', char max = '~');
31 kv_pair random_ascii_pair(size_t minlen = 1<<2, size_t maxlen = 1<<10);
33 template<template <typename> class Container>
34 auto random_ascii_pairs(size_t count, size_t minlen = 1<<2, size_t maxlen = 1<<10) {
38 for (size_t i = 0; i < count; ++i) {
39 v.emplace_back(random_ascii_pair(minlen, maxlen));
45 string random_socket(const string &prefix = "/tmp/libmc.");
46 string random_socket_or_port_string(const string &what);
47 string random_socket_or_port_flag(const string &binary);
49 inline auto random_socket_or_port_arg() {
50 return make_pair(&random_socket_or_port_flag, &random_socket_or_port_string);