flush
[m6w6/libmemcached] / testing / lib / random.hpp
1 #pragma once
2
3 #include <cstddef>
4 #include <string>
5 #include <type_traits>
6 #include <utility>
7
8 using namespace std;
9
10 using kv_pair = pair<string, string>;
11
12 template<typename T>
13 enable_if_t<is_integral_v<T>, T> random_num(T min, T max);
14
15 unsigned random_port();
16 string random_port_string(const string &);
17
18 char random_ascii(char min = '!', char max = '~');
19 string random_ascii_string(size_t len, char min = '!', char max = '~');
20 kv_pair random_ascii_pair(size_t minlen = 1<<2, size_t maxlen = 1<<10);
21
22 template<template <typename> class Container>
23 auto random_ascii_pairs(size_t count, size_t minlen = 1<<2, size_t maxlen = 1<<10) {
24 Container<kv_pair> v;
25
26 v.reserve(count);
27 for (size_t i = 0; i < count; ++i) {
28 v.emplace_back(random_ascii_pair(minlen, maxlen));
29 }
30
31 return v;
32 }
33
34 string random_socket(const string &prefix = "/tmp/libmc.");
35 string random_socket_or_port_string(const string &what);
36 string random_socket_or_port_flag(const string &binary);
37
38 inline auto random_socket_or_port_arg() {
39 return make_pair(&random_socket_or_port_flag, &random_socket_or_port_string);
40 }