@@ -2,12 +2,14 @@ use criterion::{criterion_group, criterion_main, Criterion};
2
2
3
3
use im_ternary_tree:: TernaryTreeList ;
4
4
5
+ const ITER_SIZE : usize = 10000 ;
6
+
5
7
fn criterion_benchmark ( c : & mut Criterion ) {
6
8
c. bench_function ( "creating list" , |b| {
7
9
b. iter ( || {
8
10
let mut data = TernaryTreeList :: Empty ;
9
11
10
- for idx in 0 ..1000 {
12
+ for idx in 0 ..ITER_SIZE {
11
13
data = data. push ( idx)
12
14
}
13
15
} )
@@ -17,261 +19,11 @@ fn criterion_benchmark(c: &mut Criterion) {
17
19
b. iter ( || {
18
20
let mut data = TernaryTreeList :: Empty ;
19
21
20
- for idx in 0 ..1000 {
21
- data = data. append ( idx)
22
- }
23
- } )
24
- } ) ;
25
-
26
- c. bench_function ( "append to list" , |b| {
27
- b. iter ( || {
28
- let mut data = TernaryTreeList :: Empty ;
29
-
30
- for idx in 0 ..1000 {
22
+ for idx in 0 ..ITER_SIZE {
31
23
data = data. append ( idx)
32
24
}
33
25
} )
34
26
} ) ;
35
-
36
- c. bench_function ( "push_right list" , |b| {
37
- b. iter ( || {
38
- let mut data = TernaryTreeList :: Empty ;
39
-
40
- for idx in 0 ..1000 {
41
- data = data. push_right ( idx)
42
- }
43
- } )
44
- } ) ;
45
-
46
- c. bench_function ( "unshift to list" , |b| {
47
- b. iter ( || {
48
- let mut data = TernaryTreeList :: Empty ;
49
-
50
- for idx in 0 ..1000 {
51
- data = data. unshift ( idx)
52
- }
53
- } )
54
- } ) ;
55
-
56
- c. bench_function ( "push_left list" , |b| {
57
- b. iter ( || {
58
- let mut data = TernaryTreeList :: Empty ;
59
-
60
- for idx in 0 ..1000 {
61
- data = data. push_left ( idx)
62
- }
63
- } )
64
- } ) ;
65
-
66
- c. bench_function ( "inserting in middle" , |b| {
67
- b. iter ( || {
68
- let mut data = TernaryTreeList :: Empty ;
69
-
70
- // TODO overflowed
71
- for idx in 0 ..1000 {
72
- let pos = idx / 2 ;
73
- data = data. insert ( pos, idx, false ) . unwrap ( )
74
- }
75
- } )
76
- } ) ;
77
-
78
- c. bench_function ( "rest" , |b| {
79
- let mut data = TernaryTreeList :: Empty ;
80
-
81
- for idx in 0 ..1000 {
82
- data = data. push ( idx) ;
83
- }
84
-
85
- b. iter ( move || {
86
- let mut d = data. to_owned ( ) ;
87
-
88
- while !d. is_empty ( ) {
89
- d = d. slice ( 1 , d. len ( ) ) . unwrap ( )
90
- }
91
- } )
92
- } ) ;
93
-
94
- c. bench_function ( "rest from push_right" , |b| {
95
- let mut data = TernaryTreeList :: Empty ;
96
-
97
- for idx in 0 ..1000 {
98
- data = data. push_right ( idx) ;
99
- }
100
-
101
- b. iter ( move || {
102
- let mut d = data. to_owned ( ) ;
103
-
104
- while !d. is_empty ( ) {
105
- d = d. slice ( 1 , d. len ( ) ) . unwrap ( )
106
- }
107
- } )
108
- } ) ;
109
-
110
- c. bench_function ( "drop-left" , |b| {
111
- let mut data = TernaryTreeList :: Empty ;
112
-
113
- for idx in 0 ..1000 {
114
- data = data. push ( idx) ;
115
- }
116
-
117
- b. iter ( move || {
118
- let mut d = data. to_owned ( ) ;
119
-
120
- while d. len ( ) > 1 {
121
- d = d. drop_left ( )
122
- }
123
- } )
124
- } ) ;
125
-
126
- c. bench_function ( "drop-right" , |b| {
127
- let mut data = TernaryTreeList :: Empty ;
128
-
129
- for idx in 0 ..1000 {
130
- data = data. push ( idx) ;
131
- }
132
-
133
- b. iter ( move || {
134
- let mut d = data. to_owned ( ) ;
135
-
136
- while d. len ( ) > 1 {
137
- d = d. drop_right ( )
138
- }
139
- } )
140
- } ) ;
141
-
142
- c. bench_function ( "drop-left-shallow" , |b| {
143
- let mut data = TernaryTreeList :: Empty ;
144
-
145
- for idx in 0 ..1000 {
146
- data = data. push ( idx) ;
147
- }
148
-
149
- b. iter ( move || {
150
- let mut d = data. to_owned ( ) ;
151
-
152
- while d. len ( ) > 1 {
153
- d = d. drop_left_shallow ( )
154
- }
155
- } )
156
- } ) ;
157
-
158
- c. bench_function ( "drop-right-shallow" , |b| {
159
- let mut data = TernaryTreeList :: Empty ;
160
-
161
- for idx in 0 ..1000 {
162
- data = data. push ( idx) ;
163
- }
164
-
165
- b. iter ( move || {
166
- let mut d = data. to_owned ( ) ;
167
-
168
- while d. len ( ) > 1 {
169
- d = d. drop_right_shallow ( )
170
- }
171
- } )
172
- } ) ;
173
-
174
- c. bench_function ( "drop-left from push_right" , |b| {
175
- let mut data = TernaryTreeList :: Empty ;
176
-
177
- for idx in 0 ..1000 {
178
- data = data. push_right ( idx) ;
179
- }
180
-
181
- b. iter ( move || {
182
- let mut d = data. to_owned ( ) ;
183
-
184
- while d. len ( ) > 1 {
185
- d = d. drop_left ( )
186
- }
187
- } )
188
- } ) ;
189
-
190
- c. bench_function ( "slice" , |b| {
191
- let mut data = TernaryTreeList :: Empty ;
192
-
193
- for idx in 0 ..1000 {
194
- data = data. push ( idx)
195
- }
196
-
197
- b. iter ( move || {
198
- let d = data. to_owned ( ) ;
199
-
200
- for _ in 0 ..1000 {
201
- d. slice ( 300 , 600 ) . unwrap ( ) ;
202
- }
203
- } )
204
- } ) ;
205
-
206
- c. bench_function ( "index" , |b| {
207
- let mut data = TernaryTreeList :: Empty ;
208
-
209
- for idx in 0 ..1000 {
210
- data = data. push ( idx)
211
- }
212
-
213
- b. iter ( || {
214
- for idx in 0 ..1000 {
215
- let _ = data[ idx] ;
216
- }
217
- } )
218
- } ) ;
219
-
220
- c. bench_function ( "get" , |b| {
221
- let mut data = TernaryTreeList :: Empty ;
222
-
223
- for idx in 0 ..1000 {
224
- data = data. push ( idx)
225
- }
226
-
227
- b. iter ( || {
228
- for idx in 0 ..1000 {
229
- let _ = data. get ( idx) ;
230
- }
231
- } )
232
- } ) ;
233
-
234
- c. bench_function ( "loop_get" , |b| {
235
- let mut data = TernaryTreeList :: Empty ;
236
-
237
- for idx in 0 ..1000 {
238
- data = data. push ( idx)
239
- }
240
-
241
- b. iter ( || {
242
- for idx in 0 ..1000 {
243
- let _ = data. loop_get ( idx) ;
244
- }
245
- } )
246
- } ) ;
247
-
248
- c. bench_function ( "ref_get" , |b| {
249
- let mut data = TernaryTreeList :: Empty ;
250
-
251
- for idx in 0 ..1000 {
252
- data = data. push ( idx)
253
- }
254
-
255
- b. iter ( || {
256
- for idx in 0 ..1000 {
257
- let _ = data. ref_get ( idx) . to_owned ( ) ;
258
- }
259
- } )
260
- } ) ;
261
-
262
- c. bench_function ( "first" , |b| {
263
- let mut data = TernaryTreeList :: Empty ;
264
-
265
- for idx in 0 ..1000 {
266
- data = data. push ( idx)
267
- }
268
-
269
- b. iter ( || {
270
- for _ in 0 ..10000 {
271
- let _ = data. first ( ) ;
272
- }
273
- } )
274
- } ) ;
275
27
}
276
28
277
29
criterion_group ! ( benches, criterion_benchmark) ;
0 commit comments