1
1
from hypothesis import strategies as st , given , settings , event , assume
2
2
3
+
3
4
def unpack (l ):
4
5
return ", " .join ([str (i ) for i in l ])
5
6
7
+
6
8
small_ints = st .integers (min_value = - 100 , max_value = 100 )
7
9
10
+
8
11
@st .composite
9
12
def tuples (draw , children ):
10
13
values = draw (st .lists (children ))
11
14
return f"stdx::make_tuple({ unpack (values )} )"
12
15
16
+
13
17
@st .composite
14
18
def list_trees (draw , leaves = st .integers (), max_leaves = 100 ):
15
- l = draw (st .recursive (leaves , lambda children : st .lists (children ), max_leaves = max_leaves ))
19
+ l = draw (
20
+ st .recursive (leaves , lambda children : st .lists (children ), max_leaves = max_leaves )
21
+ )
16
22
if not isinstance (l , list ):
17
23
l = [l ]
18
24
return l
19
25
26
+
20
27
def as_tuple_tree (value ):
21
28
if isinstance (value , list ):
22
29
values = [as_tuple_tree (v ) for v in value ]
23
30
return f"stdx::make_tuple({ unpack (values )} )"
24
31
else :
25
32
return value
26
33
34
+
27
35
@st .composite
28
36
def tuple_trees (draw , leaves = st .integers ()):
29
37
return draw (st .recursive (leaves , lambda children : tuples (children )))
30
38
39
+
31
40
@settings (deadline = 50000 )
32
41
@given (tuple_trees (small_ints ))
33
42
def test_tuple_trees (compile , t ):
34
- assert compile (f"""
43
+ assert compile (
44
+ f"""
35
45
#include <stdx/tuple.hpp>
36
46
37
47
[[maybe_unused]] constexpr auto t = { t } ;
38
48
39
49
int main() {{
40
50
return 0;
41
51
}}
42
- """ )
52
+ """
53
+ )
54
+
43
55
44
56
@settings (deadline = 50000 )
45
57
@given (list_trees (small_ints ))
46
58
def test_tuple_size (compile , l ):
47
59
t = as_tuple_tree (l )
48
- assert compile (f"""
60
+ assert compile (
61
+ f"""
49
62
#include <stdx/tuple.hpp>
50
63
51
64
constexpr auto t = { t } ;
@@ -55,7 +68,8 @@ def test_tuple_size(compile, l):
55
68
int main() {{
56
69
return 0;
57
70
}}
58
- """ )
71
+ """
72
+ )
59
73
60
74
61
75
@settings (deadline = 50000 )
@@ -67,7 +81,8 @@ def test_get_by_index(compile, l, i):
67
81
68
82
expected_v = as_tuple_tree (l [i ])
69
83
70
- assert compile (f"""
84
+ assert compile (
85
+ f"""
71
86
#include <stdx/tuple.hpp>
72
87
73
88
using namespace stdx::literals;
@@ -84,7 +99,8 @@ def test_get_by_index(compile, l, i):
84
99
int main() {{
85
100
return 0;
86
101
}}
87
- """ )
102
+ """
103
+ )
88
104
89
105
90
106
@settings (deadline = 50000 )
@@ -95,7 +111,8 @@ def test_tuple_cat(compile, ls):
95
111
flattened_ls = [i for subl in ls for i in subl ]
96
112
expected = as_tuple_tree (flattened_ls )
97
113
98
- assert compile (f"""
114
+ assert compile (
115
+ f"""
99
116
#include <stdx/tuple.hpp>
100
117
#include <stdx/tuple_algorithms.hpp>
101
118
@@ -104,7 +121,8 @@ def test_tuple_cat(compile, ls):
104
121
int main() {{
105
122
return 0;
106
123
}}
107
- """ )
124
+ """
125
+ )
108
126
109
127
110
128
@settings (deadline = 50000 )
@@ -120,7 +138,8 @@ def test_push(compile, l, elem):
120
138
121
139
t = as_tuple_tree (l )
122
140
123
- assert compile (f"""
141
+ assert compile (
142
+ f"""
124
143
#include <stdx/tuple.hpp>
125
144
#include <stdx/tuple_algorithms.hpp>
126
145
@@ -138,24 +157,29 @@ def test_push(compile, l, elem):
138
157
int main() {{
139
158
return 0;
140
159
}}
141
- """ )
160
+ """
161
+ )
162
+
142
163
143
164
from itertools import product
144
165
166
+
145
167
def put_in_list (i ):
146
168
if isinstance (i , list ):
147
169
return i
148
170
else :
149
171
return [i ]
150
172
173
+
151
174
@settings (deadline = 50000 )
152
175
@given (list_trees (small_ints , max_leaves = 15 ))
153
176
def test_cartesian_product (compile , ls ):
154
177
ls = [put_in_list (i ) for i in ls ]
155
178
ts = [as_tuple_tree (l ) for l in ls ]
156
179
expected = as_tuple_tree ([list (p ) for p in product (* ls )])
157
180
158
- assert compile (f"""
181
+ assert compile (
182
+ f"""
159
183
#include <stdx/tuple.hpp>
160
184
#include <stdx/tuple_algorithms.hpp>
161
185
@@ -164,10 +188,13 @@ def test_cartesian_product(compile, ls):
164
188
int main() {{
165
189
return 0;
166
190
}}
167
- """ )
191
+ """
192
+ )
193
+
168
194
169
195
from functools import reduce
170
196
197
+
171
198
@settings (deadline = 50000 )
172
199
@given (st .lists (small_ints ))
173
200
def test_star_of (compile , l ):
@@ -177,7 +204,8 @@ def test_star_of(compile, l):
177
204
178
205
t = as_tuple_tree (l )
179
206
180
- assert compile (f"""
207
+ assert compile (
208
+ f"""
181
209
#include <stdx/tuple.hpp>
182
210
#include <stdx/tuple_algorithms.hpp>
183
211
@@ -190,4 +218,5 @@ def test_star_of(compile, l):
190
218
int main() {{
191
219
return 0;
192
220
}}
193
- """ )
221
+ """
222
+ )
0 commit comments