flush
[awesomized/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
17 char random_ascii(char min = '!', char max = '~');
18 string random_ascii_string(size_t len, char min = '!', char max = '~');
19 kv_pair random_ascii_pair(size_t minlen = 1<<2, size_t maxlen = 1<<10);
20
21 template<template <typename> class Container>
22 auto random_ascii_pairs(size_t count, size_t minlen = 1<<2, size_t maxlen = 1<<10) {
23 Container<kv_pair> v;
24
25 v.reserve(count);
26 for (size_t i = 0; i < count; ++i) {
27 v.emplace_back(random_ascii_pair(minlen, maxlen));
28 }
29
30 return v;
31 }
32
33 string random_socket(const string &prefix = "/tmp/libmc.");
34 string random_socket_or_port_string(const string &what);
35 string random_socket_or_port_flag(const string &binary);
36
37 inline auto random_socket_or_port_arg() {
38 return make_pair(&random_socket_or_port_flag, &random_socket_or_port_string);
39 }