1#![allow(clippy::type_complexity)]
6#![allow(unused_variables)]
7
8use super::helpers::*;
9use crate::dag::DagArmSeed;
10use crate::pipeline::{PipelineBuilder, resolve_step};
11use crate::{Broadcast, IntoHandler, Local, Res, ResMut, World, fan_out};
12
13#[inline(never)]
18pub fn pipe_linear_1(world: &mut World, input: u64) -> u64 {
19 let reg = world.registry();
20 let mut p = PipelineBuilder::<u64>::new().then(add_one, ®);
21 p.run(world, input)
22}
23
24#[inline(never)]
25pub fn pipe_linear_2(world: &mut World, input: u64) -> u64 {
26 let reg = world.registry();
27 let mut p = PipelineBuilder::<u64>::new()
28 .then(add_one, ®)
29 .then(double, ®);
30 p.run(world, input)
31}
32
33#[inline(never)]
34pub fn pipe_linear_3(world: &mut World, input: u64) -> u64 {
35 let reg = world.registry();
36 let mut p = PipelineBuilder::<u64>::new()
37 .then(add_one, ®)
38 .then(double, ®)
39 .then(add_three, ®);
40 p.run(world, input)
41}
42
43#[inline(never)]
44pub fn pipe_linear_5(world: &mut World, input: u64) -> u64 {
45 let reg = world.registry();
46 let mut p = PipelineBuilder::<u64>::new()
47 .then(add_one, ®)
48 .then(double, ®)
49 .then(add_three, ®)
50 .then(square, ®)
51 .then(sub_ten, ®);
52 p.run(world, input)
53}
54
55#[inline(never)]
56pub fn pipe_linear_10(world: &mut World, input: u64) -> u64 {
57 let reg = world.registry();
58 let mut p = PipelineBuilder::<u64>::new()
59 .then(add_one, ®)
60 .then(double, ®)
61 .then(add_three, ®)
62 .then(square, ®)
63 .then(sub_ten, ®)
64 .then(shr_one, ®)
65 .then(xor_mask, ®)
66 .then(add_seven, ®)
67 .then(triple, ®)
68 .then(add_forty_two, ®);
69 p.run(world, input)
70}
71
72#[inline(never)]
73pub fn pipe_linear_20(world: &mut World, input: u64) -> u64 {
74 let reg = world.registry();
75 let mut p = PipelineBuilder::<u64>::new()
76 .then(add_one, ®)
77 .then(double, ®)
78 .then(add_three, ®)
79 .then(square, ®)
80 .then(sub_ten, ®)
81 .then(shr_one, ®)
82 .then(xor_mask, ®)
83 .then(add_seven, ®)
84 .then(triple, ®)
85 .then(add_forty_two, ®)
86 .then(add_one, ®)
87 .then(double, ®)
88 .then(add_three, ®)
89 .then(square, ®)
90 .then(sub_ten, ®)
91 .then(shr_one, ®)
92 .then(xor_mask, ®)
93 .then(add_seven, ®)
94 .then(triple, ®)
95 .then(add_forty_two, ®);
96 p.run(world, input)
97}
98
99#[inline(never)]
100pub fn pipe_linear_0_params(world: &mut World, input: u64) -> u64 {
101 let reg = world.registry();
102 let mut p = PipelineBuilder::<u64>::new()
103 .then(add_one, ®)
104 .then(double, ®)
105 .then(add_three, ®);
106 p.run(world, input)
107}
108
109#[inline(never)]
110pub fn pipe_linear_mixed_arity(world: &mut World, input: u64) -> u64 {
111 let reg = world.registry();
112 let mut p = PipelineBuilder::<u64>::new()
113 .then(add_one, ®)
114 .then(add_res_a, ®)
115 .then(write_res_a, ®)
116 .then(add_both, ®)
117 .then(three_params, ®);
118 p.run(world, input)
119}
120
121#[inline(never)]
126pub fn pipe_guard_basic(world: &mut World, input: u64) -> Option<u64> {
127 let reg = world.registry();
128 let mut p = PipelineBuilder::<u64>::new()
129 .then(add_one, ®)
130 .guard(|x: &u64| *x > 10, ®)
131 .inspect(|_x: &u64| {}, ®);
132 p.run(world, input)
133}
134
135#[inline(never)]
136pub fn pipe_guard_then(world: &mut World, input: u64) -> u64 {
137 let reg = world.registry();
138 let mut p = PipelineBuilder::<u64>::new()
139 .then(add_one, ®)
140 .guard(|x: &u64| *x > 10, ®)
141 .map(double, ®)
142 .unwrap_or(0);
143 p.run(world, input)
144}
145
146#[inline(never)]
147pub fn pipe_filter_basic(world: &mut World, input: u64) -> u64 {
148 let reg = world.registry();
149 let mut p = PipelineBuilder::<u64>::new()
150 .then(add_one, ®)
151 .guard(|x: &u64| *x > 10, ®)
152 .filter(|x: &u64| *x < 1000, ®)
153 .unwrap_or(0);
154 p.run(world, input)
155}
156
157#[inline(never)]
158pub fn pipe_dedup(world: &mut World, input: u64) -> Option<u64> {
159 let reg = world.registry();
160 let mut p = PipelineBuilder::<u64>::new()
161 .then(add_one, ®)
162 .dedup()
163 .inspect(|_x: &u64| {}, ®);
164 p.run(world, input)
165}
166
167#[inline(never)]
168pub fn pipe_dedup_chain(world: &mut World, input: u64) -> u64 {
169 let reg = world.registry();
170 let mut p = PipelineBuilder::<u64>::new()
171 .then(add_one, ®)
172 .dedup()
173 .map(double, ®)
174 .unwrap_or_else(|| 0, ®);
175 p.run(world, input)
176}
177
178#[inline(never)]
179pub fn pipe_guard_large_type(world: &mut World, input: [u8; 256]) -> Option<[u8; 256]> {
180 let reg = world.registry();
181 let mut p = PipelineBuilder::<[u8; 256]>::new()
182 .then(|x: [u8; 256]| x, ®)
183 .guard(|x: &[u8; 256]| x[0] > 0, ®);
184 p.run(world, input)
185}
186
187#[inline(never)]
192pub fn pipe_opt_map(world: &mut World, input: u64) -> Option<u64> {
193 let reg = world.registry();
194 let mut p = PipelineBuilder::<u64>::new()
195 .then(maybe_positive, ®)
196 .map(double, ®);
197 p.run(world, input)
198}
199
200#[inline(never)]
201pub fn pipe_opt_and_then(world: &mut World, input: u64) -> Option<u64> {
202 let reg = world.registry();
203 let mut p = PipelineBuilder::<u64>::new()
204 .then(maybe_positive, ®)
205 .and_then(checked_double, ®);
206 p.run(world, input)
207}
208
209#[inline(never)]
210pub fn pipe_opt_filter(world: &mut World, input: u64) -> Option<u64> {
211 let reg = world.registry();
212 let mut p = PipelineBuilder::<u64>::new()
213 .then(maybe_positive, ®)
214 .filter(|x: &u64| *x < 1000, ®);
215 p.run(world, input)
216}
217
218#[inline(never)]
219pub fn pipe_opt_inspect(world: &mut World, input: u64) -> Option<u64> {
220 let reg = world.registry();
221 let mut p = PipelineBuilder::<u64>::new()
222 .then(maybe_positive, ®)
223 .inspect(|_x: &u64| {}, ®);
224 p.run(world, input)
225}
226
227#[inline(never)]
228pub fn pipe_opt_on_none(world: &mut World, input: u64) -> Option<u64> {
229 let reg = world.registry();
230 let mut p = PipelineBuilder::<u64>::new()
231 .then(maybe_positive, ®)
232 .on_none(|| {}, ®);
233 p.run(world, input)
234}
235
236#[inline(never)]
237pub fn pipe_opt_ok_or(world: &mut World, input: u64) -> Result<u64, u32> {
238 let reg = world.registry();
239 let mut p = PipelineBuilder::<u64>::new()
240 .then(maybe_positive, ®)
241 .ok_or(42u32);
242 p.run(world, input)
243}
244
245#[inline(never)]
246pub fn pipe_opt_ok_or_else(world: &mut World, input: u64) -> Result<u64, u32> {
247 let reg = world.registry();
248 let mut p = PipelineBuilder::<u64>::new()
249 .then(maybe_positive, ®)
250 .ok_or_else(|| 42u32, ®);
251 p.run(world, input)
252}
253
254#[inline(never)]
255pub fn pipe_opt_unwrap_or(world: &mut World, input: u64) -> u64 {
256 let reg = world.registry();
257 let mut p = PipelineBuilder::<u64>::new()
258 .then(maybe_positive, ®)
259 .unwrap_or(0);
260 p.run(world, input)
261}
262
263#[inline(never)]
264pub fn pipe_opt_unwrap_or_else(world: &mut World, input: u64) -> u64 {
265 let reg = world.registry();
266 let mut p = PipelineBuilder::<u64>::new()
267 .then(maybe_positive, ®)
268 .unwrap_or_else(|| 0, ®);
269 p.run(world, input)
270}
271
272#[inline(never)]
277pub fn pipe_opt_map_filter(world: &mut World, input: u64) -> u64 {
278 let reg = world.registry();
279 let mut p = PipelineBuilder::<u64>::new()
280 .then(|x: u64| x, ®)
281 .guard(|x: &u64| *x > 0, ®)
282 .map(double, ®)
283 .filter(|x: &u64| *x < 1000, ®)
284 .unwrap_or(0);
285 p.run(world, input)
286}
287
288#[inline(never)]
289pub fn pipe_opt_map_and_then(world: &mut World, input: u64) -> u64 {
290 let reg = world.registry();
291 let mut p = PipelineBuilder::<u64>::new()
292 .then(|x: u64| x, ®)
293 .guard(|x: &u64| *x > 0, ®)
294 .map(double, ®)
295 .and_then(checked_double, ®)
296 .unwrap_or_else(|| 0, ®);
297 p.run(world, input)
298}
299
300#[inline(never)]
301pub fn pipe_opt_filter_inspect_unwrap(world: &mut World, input: u64) -> u64 {
302 let reg = world.registry();
303 let mut p = PipelineBuilder::<u64>::new()
304 .then(|x: u64| x, ®)
305 .guard(|x: &u64| *x > 0, ®)
306 .filter(|x: &u64| *x < 1000, ®)
307 .inspect(|_x: &u64| {}, ®)
308 .unwrap_or(0);
309 p.run(world, input)
310}
311
312#[inline(never)]
313pub fn pipe_opt_triple_filter(world: &mut World, input: u64) -> u64 {
314 let reg = world.registry();
315 let mut p = PipelineBuilder::<u64>::new()
316 .then(|x: u64| x, ®)
317 .guard(|x: &u64| *x > 0, ®)
318 .filter(|x: &u64| *x < 10000, ®)
319 .filter(|x: &u64| *x > 5, ®)
320 .filter(|x: &u64| x & 1 == 0, ®)
321 .unwrap_or(0);
322 p.run(world, input)
323}
324
325#[inline(never)]
326pub fn pipe_opt_map_5x(world: &mut World, input: u64) -> u64 {
327 let reg = world.registry();
328 let mut p = PipelineBuilder::<u64>::new()
329 .then(|x: u64| x, ®)
330 .guard(|x: &u64| *x > 0, ®)
331 .map(add_one, ®)
332 .map(double, ®)
333 .map(add_three, ®)
334 .map(square, ®)
335 .map(sub_ten, ®)
336 .unwrap_or(0);
337 p.run(world, input)
338}
339
340#[inline(never)]
343pub fn pipe_opt_guard_skip_10(world: &mut World, input: u64) -> u64 {
344 let reg = world.registry();
345 let mut p = PipelineBuilder::<u64>::new()
349 .then(|x: u64| x, ®)
350 .guard(|x: &u64| *x > 100, ®)
351 .map(add_one, ®)
352 .map(double, ®)
353 .map(add_three, ®)
354 .map(square, ®)
355 .map(sub_ten, ®)
356 .map(shr_one, ®)
357 .map(xor_mask, ®)
358 .map(add_seven, ®)
359 .map(triple, ®)
360 .map(add_forty_two, ®)
361 .unwrap_or(0);
362 p.run(world, input)
363}
364
365#[inline(never)]
366pub fn pipe_opt_filter_skip_chain(world: &mut World, input: u64) -> u64 {
367 let reg = world.registry();
368 let mut p = PipelineBuilder::<u64>::new()
371 .then(|x: u64| x, ®)
372 .guard(|x: &u64| *x > 0, ®)
373 .filter(|x: &u64| *x < 50, ®)
374 .map(add_one, ®)
375 .map(double, ®)
376 .map(add_three, ®)
377 .map(square, ®)
378 .map(sub_ten, ®)
379 .map(shr_one, ®)
380 .map(xor_mask, ®)
381 .map(add_seven, ®)
382 .unwrap_or(0);
383 p.run(world, input)
384}
385
386#[inline(never)]
391pub fn pipe_res_map(world: &mut World, input: u64) -> Result<u64, u32> {
392 let reg = world.registry();
393 let mut p = PipelineBuilder::<u64>::new()
394 .then(try_parse, ®)
395 .map(double, ®);
396 p.run(world, input)
397}
398
399#[inline(never)]
400pub fn pipe_res_and_then(world: &mut World, input: u64) -> Result<u64, u32> {
401 let reg = world.registry();
402 let mut p = PipelineBuilder::<u64>::new()
403 .then(try_parse, ®)
404 .and_then(try_parse, ®);
405 p.run(world, input)
406}
407
408#[inline(never)]
409pub fn pipe_res_catch(world: &mut World, input: u64) -> Option<u64> {
410 let reg = world.registry();
411
412 fn log_error(_err: u32) {}
413
414 let mut p = PipelineBuilder::<u64>::new()
415 .then(try_parse, ®)
416 .catch(log_error, ®);
417 p.run(world, input)
418}
419
420#[inline(never)]
421pub fn pipe_res_map_err(world: &mut World, input: u64) -> Result<u64, u64> {
422 let reg = world.registry();
423 let mut p = PipelineBuilder::<u64>::new()
424 .then(try_parse, ®)
425 .map_err(|e: u32| e as u64, ®);
426 p.run(world, input)
427}
428
429#[inline(never)]
430pub fn pipe_res_or_else(world: &mut World, input: u64) -> Result<u64, u64> {
431 let reg = world.registry();
432 let mut p = PipelineBuilder::<u64>::new()
433 .then(try_parse, ®)
434 .or_else(|e: u32| Err(e as u64), ®);
435 p.run(world, input)
436}
437
438#[inline(never)]
439pub fn pipe_res_inspect(world: &mut World, input: u64) -> Result<u64, u32> {
440 let reg = world.registry();
441 let mut p = PipelineBuilder::<u64>::new()
442 .then(try_parse, ®)
443 .inspect(|_x: &u64| {}, ®);
444 p.run(world, input)
445}
446
447#[inline(never)]
448pub fn pipe_res_inspect_err(world: &mut World, input: u64) -> Result<u64, u32> {
449 let reg = world.registry();
450 let mut p = PipelineBuilder::<u64>::new()
451 .then(try_parse, ®)
452 .inspect_err(|_e: &u32| {}, ®);
453 p.run(world, input)
454}
455
456#[inline(never)]
457pub fn pipe_res_ok(world: &mut World, input: u64) -> Option<u64> {
458 let reg = world.registry();
459 let mut p = PipelineBuilder::<u64>::new().then(try_parse, ®).ok();
460 p.run(world, input)
461}
462
463#[inline(never)]
464pub fn pipe_res_unwrap_or(world: &mut World, input: u64) -> u64 {
465 let reg = world.registry();
466 let mut p = PipelineBuilder::<u64>::new()
467 .then(try_parse, ®)
468 .unwrap_or(0);
469 p.run(world, input)
470}
471
472#[inline(never)]
473pub fn pipe_res_unwrap_or_else(world: &mut World, input: u64) -> u64 {
474 let reg = world.registry();
475 let mut p = PipelineBuilder::<u64>::new()
476 .then(try_parse, ®)
477 .unwrap_or_else(|e: u32| e as u64, ®);
478 p.run(world, input)
479}
480
481#[inline(never)]
486pub fn pipe_res_map_and_then(world: &mut World, input: u64) -> u64 {
487 let reg = world.registry();
488 let mut p = PipelineBuilder::<u64>::new()
489 .then(try_parse, ®)
490 .map(double, ®)
491 .and_then(try_parse, ®)
492 .unwrap_or_else(|e: u32| e as u64, ®);
493 p.run(world, input)
494}
495
496#[inline(never)]
497pub fn pipe_res_map_err_or_else(world: &mut World, input: u64) -> u64 {
498 let reg = world.registry();
499 let mut p = PipelineBuilder::<u64>::new()
500 .then(try_parse, ®)
501 .map_err(|e: u32| e as u64, ®)
502 .or_else(|e: u64| Ok::<u64, u64>(e), ®)
503 .unwrap_or(0);
504 p.run(world, input)
505}
506
507#[inline(never)]
508pub fn pipe_res_inspect_both(world: &mut World, input: u64) -> Option<u64> {
509 let reg = world.registry();
510 let mut p = PipelineBuilder::<u64>::new()
511 .then(try_parse, ®)
512 .inspect(|_v: &u64| {}, ®)
513 .inspect_err(|_e: &u32| {}, ®)
514 .ok();
515 p.run(world, input)
516}
517
518#[inline(never)]
519pub fn pipe_res_catch_then_option(world: &mut World, input: u64) -> u64 {
520 let reg = world.registry();
521
522 fn log_error(_err: u32) {}
523
524 let mut p = PipelineBuilder::<u64>::new()
525 .then(try_parse, ®)
526 .catch(log_error, ®)
527 .map(double, ®)
528 .unwrap_or(0);
529 p.run(world, input)
530}
531
532#[inline(never)]
533pub fn pipe_res_map_5x(world: &mut World, input: u64) -> u64 {
534 let reg = world.registry();
535 let mut p = PipelineBuilder::<u64>::new()
536 .then(try_parse, ®)
537 .map(add_one, ®)
538 .map(double, ®)
539 .map(add_three, ®)
540 .map(square, ®)
541 .map(sub_ten, ®)
542 .unwrap_or(0);
543 p.run(world, input)
544}
545
546#[inline(never)]
549pub fn pipe_res_err_skip_10(world: &mut World, input: u64) -> u64 {
550 let reg = world.registry();
551 let mut p = PipelineBuilder::<u64>::new()
554 .then(try_parse, ®)
555 .map(add_one, ®)
556 .map(double, ®)
557 .map(add_three, ®)
558 .map(square, ®)
559 .map(sub_ten, ®)
560 .map(shr_one, ®)
561 .map(xor_mask, ®)
562 .map(add_seven, ®)
563 .map(triple, ®)
564 .map(add_forty_two, ®)
565 .unwrap_or(0);
566 p.run(world, input)
567}
568
569#[inline(never)]
570pub fn pipe_res_catch_skip_chain(world: &mut World, input: u64) -> u64 {
571 let reg = world.registry();
572 fn log_error(_err: u32) {}
576
577 let mut p = PipelineBuilder::<u64>::new()
578 .then(try_parse, ®)
579 .catch(log_error, ®)
580 .map(add_one, ®)
581 .map(double, ®)
582 .map(add_three, ®)
583 .map(square, ®)
584 .map(sub_ten, ®)
585 .map(shr_one, ®)
586 .map(xor_mask, ®)
587 .map(add_seven, ®)
588 .unwrap_or(0);
589 p.run(world, input)
590}
591
592#[inline(never)]
597pub fn pipe_trans_guard_unwrap(world: &mut World, input: u64) -> u64 {
598 let reg = world.registry();
599 let mut p = PipelineBuilder::<u64>::new()
600 .then(add_one, ®)
601 .guard(|x: &u64| *x > 10, ®)
602 .unwrap_or(0)
603 .then(double, ®);
604 p.run(world, input)
605}
606
607#[inline(never)]
608pub fn pipe_trans_guard_ok_or_unwrap(world: &mut World, input: u64) -> u64 {
609 let reg = world.registry();
610 let mut p = PipelineBuilder::<u64>::new()
611 .then(|x: u64| x, ®)
612 .guard(|x: &u64| *x > 0, ®)
613 .ok_or(0u32)
614 .unwrap_or(0);
615 p.run(world, input)
616}
617
618#[inline(never)]
619pub fn pipe_trans_result_ok_unwrap(world: &mut World, input: u64) -> u64 {
620 let reg = world.registry();
621 let mut p = PipelineBuilder::<u64>::new()
622 .then(try_parse, ®)
623 .ok()
624 .unwrap_or(0);
625 p.run(world, input)
626}
627
628#[inline(never)]
629pub fn pipe_trans_result_catch_unwrap(world: &mut World, input: u64) -> u64 {
630 let reg = world.registry();
631
632 fn log_error(_err: u32) {}
633
634 let mut p = PipelineBuilder::<u64>::new()
635 .then(try_parse, ®)
636 .catch(log_error, ®)
637 .unwrap_or(0);
638 p.run(world, input)
639}
640
641#[inline(never)]
642pub fn pipe_trans_guard_ok_or_catch_unwrap(world: &mut World, input: u64) -> u64 {
643 let reg = world.registry();
644
645 fn log_error(_err: u32) {}
646
647 let mut p = PipelineBuilder::<u64>::new()
648 .then(|x: u64| x, ®)
649 .guard(|x: &u64| *x > 0, ®)
650 .ok_or(0u32)
651 .catch(log_error, ®)
652 .unwrap_or(0);
653 p.run(world, input)
654}
655
656#[inline(never)]
657pub fn pipe_trans_full_lifecycle(world: &mut World, input: u64) -> u64 {
658 let reg = world.registry();
659
660 fn log_error(_err: u32) {}
661
662 let mut p = PipelineBuilder::<u64>::new()
663 .then(add_one, ®)
664 .guard(|x: &u64| *x > 0, ®)
665 .ok_or(0u32)
666 .map(double, ®)
667 .catch(log_error, ®)
668 .unwrap_or(0)
669 .then(add_three, ®);
670 p.run(world, input)
671}
672
673#[inline(never)]
678pub fn pipe_route_basic(world: &mut World, input: u64) -> u64 {
679 let reg = world.registry();
680
681 let on_true = PipelineBuilder::<u64>::new().then(double, ®);
682 let on_false = PipelineBuilder::<u64>::new().then(add_one, ®);
683
684 let mut p = PipelineBuilder::<u64>::new()
685 .then(add_one, ®)
686 .route(|x: &u64| *x > 100, ®, on_true, on_false)
687 .then(add_three, ®);
688 p.run(world, input)
689}
690
691#[inline(never)]
692pub fn pipe_route_nested_2(world: &mut World, input: u64) -> u64 {
693 let reg = world.registry();
694
695 let arm_a = PipelineBuilder::<u64>::new().then(double, ®);
696 let arm_b = PipelineBuilder::<u64>::new().then(triple, ®);
697 let arm_c = PipelineBuilder::<u64>::new().then(add_one, ®);
698
699 let inner_false = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
700 |x: &u64| *x > 50,
701 ®,
702 arm_b,
703 arm_c,
704 );
705
706 let mut p = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
707 |x: &u64| *x > 100,
708 ®,
709 arm_a,
710 inner_false,
711 );
712 p.run(world, input)
713}
714
715#[inline(never)]
716pub fn pipe_route_heavy_arms(world: &mut World, input: u64) -> u64 {
717 let reg = world.registry();
718
719 let arm_t = PipelineBuilder::<u64>::new()
720 .then(double, ®)
721 .then(add_three, ®)
722 .then(square, ®)
723 .then(sub_ten, ®)
724 .then(shr_one, ®);
725
726 let arm_f = PipelineBuilder::<u64>::new()
727 .then(add_one, ®)
728 .then(triple, ®)
729 .then(xor_mask, ®)
730 .then(add_seven, ®)
731 .then(add_forty_two, ®);
732
733 let mut p = PipelineBuilder::<u64>::new().then(add_one, ®).route(
734 |x: &u64| *x > 100,
735 ®,
736 arm_t,
737 arm_f,
738 );
739 p.run(world, input)
740}
741
742#[inline(never)]
743pub fn pipe_switch_basic(world: &mut World, input: u64) -> u64 {
744 let reg = world.registry();
745 let mut p = PipelineBuilder::<u64>::new().then(add_one, ®).then(
746 |x: u64| {
747 if x > 100 {
748 x.wrapping_mul(2)
749 } else {
750 x.wrapping_add(1)
751 }
752 },
753 ®,
754 );
755 p.run(world, input)
756}
757
758#[inline(never)]
759pub fn pipe_switch_3way(world: &mut World, input: u64) -> u64 {
760 let reg = world.registry();
761 let mut p = PipelineBuilder::<u64>::new().then(
762 |x: u64| match x % 3 {
763 0 => x.wrapping_mul(2),
764 1 => x.wrapping_add(10),
765 _ => x.wrapping_sub(5),
766 },
767 ®,
768 );
769 p.run(world, input)
770}
771
772#[inline(never)]
773pub fn pipe_switch_resolve_step(world: &mut World, input: u64) -> u64 {
774 let reg = world.registry();
775 let mut arm_big = resolve_step(double, ®);
776 let mut arm_small = resolve_step(add_one, ®);
777
778 let mut p = PipelineBuilder::<u64>::new().then(
779 move |world: &mut World, x: u64| {
780 if x > 100 {
781 arm_big(world, x)
782 } else {
783 arm_small(world, x)
784 }
785 },
786 ®,
787 );
788 p.run(world, input)
789}
790
791#[inline(never)]
792pub fn pipe_start_switch(world: &mut World, input: u64) -> u64 {
793 let reg = world.registry();
794 let mut p =
795 PipelineBuilder::<u64>::new().then(|x: u64| x.wrapping_mul(2).wrapping_add(1), ®);
796 p.run(world, input)
797}
798
799#[inline(never)]
804pub fn pipe_splat2_start(world: &mut World, input: (u32, u32)) -> u64 {
805 let reg = world.registry();
806 let mut p = PipelineBuilder::<(u32, u32)>::new()
807 .splat()
808 .then(splat_add, ®);
809 p.run(world, input)
810}
811
812#[inline(never)]
813pub fn pipe_splat2_mid(world: &mut World, input: u64) -> u64 {
814 let reg = world.registry();
815 let mut p = PipelineBuilder::<u64>::new()
816 .then(split_u64, ®)
817 .splat()
818 .then(splat_add, ®);
819 p.run(world, input)
820}
821
822#[inline(never)]
823pub fn pipe_splat3(world: &mut World, input: u64) -> u64 {
824 let reg = world.registry();
825 let mut p = PipelineBuilder::<u64>::new()
826 .then(split_3, ®)
827 .splat()
828 .then(splat_3, ®);
829 p.run(world, input)
830}
831
832#[inline(never)]
833pub fn pipe_splat4(world: &mut World, input: u64) -> u64 {
834 let reg = world.registry();
835 let mut p = PipelineBuilder::<u64>::new()
836 .then(split_4, ®)
837 .splat()
838 .then(splat_4, ®);
839 p.run(world, input)
840}
841
842#[inline(never)]
843pub fn pipe_splat5(world: &mut World, input: u64) -> u64 {
844 let reg = world.registry();
845 let mut p = PipelineBuilder::<u64>::new()
846 .then(split_5, ®)
847 .splat()
848 .then(splat_5, ®);
849 p.run(world, input)
850}
851
852#[inline(never)]
853pub fn pipe_splat_with_params(world: &mut World, input: u64) -> u64 {
854 let reg = world.registry();
855
856 fn splat_with_res(a: Res<ResA>, x: u32, y: u32) -> u64 {
857 x as u64 + y as u64 + a.0
858 }
859
860 let mut p = PipelineBuilder::<u64>::new()
861 .then(split_u64, ®)
862 .splat()
863 .then(splat_with_res, ®);
864 p.run(world, input)
865}
866
867#[inline(never)]
868pub fn pipe_splat_then_guard(world: &mut World, input: u64) -> u64 {
869 let reg = world.registry();
870 let mut p = PipelineBuilder::<u64>::new()
871 .then(split_u64, ®)
872 .splat()
873 .then(splat_add, ®)
874 .guard(|x: &u64| *x > 10, ®)
875 .unwrap_or(0);
876 p.run(world, input)
877}
878
879#[inline(never)]
884pub fn pipe_bool_not(world: &mut World, input: u64) -> bool {
885 let reg = world.registry();
886 let mut p = PipelineBuilder::<u64>::new().then(is_even, ®).not();
887 p.run(world, input)
888}
889
890#[inline(never)]
891pub fn pipe_bool_and(world: &mut World, input: u64) -> bool {
892 let reg = world.registry();
893 let mut p = PipelineBuilder::<u64>::new()
894 .then(is_even, ®)
895 .and(|| true, ®);
896 p.run(world, input)
897}
898
899#[inline(never)]
900pub fn pipe_bool_or(world: &mut World, input: u64) -> bool {
901 let reg = world.registry();
902 let mut p = PipelineBuilder::<u64>::new()
903 .then(is_even, ®)
904 .or(|| false, ®);
905 p.run(world, input)
906}
907
908#[inline(never)]
909pub fn pipe_bool_xor(world: &mut World, input: u64) -> bool {
910 let reg = world.registry();
911 let mut p = PipelineBuilder::<u64>::new()
912 .then(is_even, ®)
913 .xor(|| true, ®);
914 p.run(world, input)
915}
916
917#[inline(never)]
918pub fn pipe_bool_chain(world: &mut World, input: u64) -> bool {
919 let reg = world.registry();
920 let mut p = PipelineBuilder::<u64>::new()
921 .then(is_even, ®)
922 .and(|| true, ®)
923 .or(|| false, ®)
924 .not()
925 .xor(|| true, ®);
926 p.run(world, input)
927}
928
929#[inline(never)]
930pub fn pipe_bool_guard_integration(world: &mut World, input: u64) -> u64 {
931 let reg = world.registry();
932 let mut p = PipelineBuilder::<u64>::new()
933 .then(is_even, ®)
934 .and(|| true, ®)
935 .guard(|b: &bool| *b, ®)
936 .unwrap_or(false)
937 .then(|b: bool| if b { 1u64 } else { 0u64 }, ®);
938 p.run(world, input)
939}
940
941#[inline(never)]
946pub fn pipe_cloned_copy_type(world: &mut World, input: u64) -> u64 {
947 let reg = world.registry();
948
949 fn take_ref(x: u64) -> &'static u64 {
950 Box::leak(Box::new(x))
952 }
953
954 let mut p = PipelineBuilder::<u64>::new()
955 .then(take_ref, ®)
956 .cloned()
957 .then(double, ®);
958 p.run(world, input)
959}
960
961#[inline(never)]
966pub fn pipe_tap_basic(world: &mut World, input: u64) -> u64 {
967 let reg = world.registry();
968 let mut p = PipelineBuilder::<u64>::new()
969 .then(add_one, ®)
970 .tap(|_x: &u64| {}, ®)
971 .then(double, ®);
972 p.run(world, input)
973}
974
975#[inline(never)]
976pub fn pipe_tap_multiple(world: &mut World, input: u64) -> u64 {
977 let reg = world.registry();
978 let mut p = PipelineBuilder::<u64>::new()
979 .then(|x: u64| x, ®)
980 .tap(|_x: &u64| {}, ®)
981 .then(add_one, ®)
982 .tap(|_x: &u64| {}, ®)
983 .then(double, ®);
984 p.run(world, input)
985}
986
987#[inline(never)]
988pub fn pipe_tee_basic(world: &mut World, input: u64) -> u64 {
989 let reg = world.registry();
990
991 let side = DagArmSeed::<u64>::new().then(ref_consume, ®);
992
993 let mut p = PipelineBuilder::<u64>::new()
994 .then(add_one, ®)
995 .tee(side)
996 .then(double, ®);
997 p.run(world, input)
998}
999
1000#[inline(never)]
1001pub fn pipe_tee_heavy(world: &mut World, input: u64) -> u64 {
1002 let reg = world.registry();
1003
1004 let side = DagArmSeed::<u64>::new()
1005 .then(ref_add_one, ®)
1006 .then(ref_double, ®)
1007 .then(ref_add_three, ®)
1008 .then(ref_square, ®)
1009 .then(ref_consume, ®);
1010
1011 let mut p = PipelineBuilder::<u64>::new()
1012 .then(add_one, ®)
1013 .tee(side)
1014 .then(double, ®);
1015 p.run(world, input)
1016}
1017
1018#[inline(never)]
1019pub fn pipe_tap_with_world(world: &mut World, input: u64) -> u64 {
1020 let reg = world.registry();
1021 let mut p = PipelineBuilder::<u64>::new()
1022 .then(add_one, ®)
1023 .tap(
1024 |w: &mut World, x: &u64| {
1025 let _ = w.resource::<ResA>().0.wrapping_add(*x);
1027 },
1028 ®,
1029 )
1030 .then(double, ®);
1031 p.run(world, input)
1032}
1033
1034#[inline(never)]
1039pub fn pipe_dispatch_handler(world: &mut World, input: u64) {
1040 let reg = world.registry();
1041 let handler = consume_val.into_handler(®);
1042 let mut p = PipelineBuilder::<u64>::new()
1043 .then(add_one, ®)
1044 .dispatch(handler);
1045 p.run(world, input);
1046}
1047
1048#[inline(never)]
1053pub fn pipe_world_res(world: &mut World, input: u64) -> u64 {
1054 let reg = world.registry();
1055 let mut p = PipelineBuilder::<u64>::new().then(add_res_a, ®);
1056 p.run(world, input)
1057}
1058
1059#[inline(never)]
1060pub fn pipe_world_res_mut(world: &mut World, input: u64) -> u64 {
1061 let reg = world.registry();
1062 let mut p = PipelineBuilder::<u64>::new().then(write_res_a, ®);
1063 p.run(world, input)
1064}
1065
1066#[inline(never)]
1067pub fn pipe_world_res_res_mut(world: &mut World, input: u64) -> u64 {
1068 let reg = world.registry();
1069 let mut p = PipelineBuilder::<u64>::new()
1070 .then(add_res_a, ®)
1071 .then(write_res_a, ®);
1072 p.run(world, input)
1073}
1074
1075#[inline(never)]
1076pub fn pipe_world_3_params(world: &mut World, input: u64) -> u64 {
1077 let reg = world.registry();
1078 let mut p = PipelineBuilder::<u64>::new().then(three_params, ®);
1079 p.run(world, input)
1080}
1081
1082#[inline(never)]
1083pub fn pipe_world_mixed_chain(world: &mut World, input: u64) -> u64 {
1084 let reg = world.registry();
1085 let mut p = PipelineBuilder::<u64>::new()
1086 .then(add_one, ®)
1087 .then(add_res_a, ®)
1088 .then(write_res_a, ®)
1089 .then(double, ®)
1090 .then(add_both, ®);
1091 p.run(world, input)
1092}
1093
1094#[inline(never)]
1100pub fn pipe_opt_ok_or_chain(world: &mut World, input: u64) -> u64 {
1101 let reg = world.registry();
1102 let mut p = PipelineBuilder::<u64>::new()
1104 .then(|x: u64| x, ®)
1105 .guard(|x: &u64| *x > 0, ®)
1106 .ok_or(0u32)
1107 .map(double, ®)
1108 .and_then(try_parse, ®)
1109 .unwrap_or_else(|e: u32| e as u64, ®);
1110 p.run(world, input)
1111}
1112
1113#[inline(never)]
1116pub fn pipe_trans_nested_option(world: &mut World, input: u64) -> Option<Option<u64>> {
1117 let reg = world.registry();
1118 let mut p = PipelineBuilder::<u64>::new()
1120 .then(maybe_positive, ®)
1121 .map(checked_double, ®);
1122 p.run(world, input)
1123}
1124
1125#[inline(never)]
1126pub fn pipe_trans_result_in_option(world: &mut World, input: u64) -> Option<Result<u64, u32>> {
1127 let reg = world.registry();
1128 let mut p = PipelineBuilder::<u64>::new()
1130 .then(maybe_positive, ®)
1131 .map(try_parse, ®);
1132 p.run(world, input)
1133}
1134
1135#[inline(never)]
1138pub fn pipe_route_nested_3(world: &mut World, input: u64) -> u64 {
1139 let reg = world.registry();
1140
1141 let arm_a = PipelineBuilder::<u64>::new().then(double, ®);
1142 let arm_b = PipelineBuilder::<u64>::new().then(triple, ®);
1143 let arm_c = PipelineBuilder::<u64>::new().then(add_one, ®);
1144 let arm_d = PipelineBuilder::<u64>::new().then(add_seven, ®);
1145
1146 let inner2 = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
1148 |x: &u64| *x > 25,
1149 ®,
1150 arm_c,
1151 arm_d,
1152 );
1153
1154 let inner1 = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
1156 |x: &u64| *x > 50,
1157 ®,
1158 arm_b,
1159 inner2,
1160 );
1161
1162 let mut p = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
1164 |x: &u64| *x > 100,
1165 ®,
1166 arm_a,
1167 inner1,
1168 );
1169 p.run(world, input)
1170}
1171
1172#[inline(never)]
1175pub fn pipe_splat_large_types(world: &mut World, input: u64) -> u64 {
1176 fn make_pair(x: u64) -> ([u8; 64], [u8; 64]) {
1177 let mut a = [0u8; 64];
1178 let mut b = [0u8; 64];
1179 a[0] = x as u8;
1180 b[0] = (x >> 8) as u8;
1181 (a, b)
1182 }
1183
1184 fn combine_pair(a: [u8; 64], b: [u8; 64]) -> u64 {
1185 a[0] as u64 + b[0] as u64
1186 }
1187
1188 let reg = world.registry();
1189 let mut p = PipelineBuilder::<u64>::new()
1190 .then(make_pair, ®)
1191 .splat()
1192 .then(combine_pair, ®);
1193 p.run(world, input)
1194}
1195
1196#[inline(never)]
1199pub fn pipe_cloned_bare(world: &mut World, input: u64) -> u64 {
1200 let reg = world.registry();
1201
1202 fn take_ref(x: u64) -> &'static u64 {
1203 Box::leak(Box::new(x))
1204 }
1205
1206 let mut p = PipelineBuilder::<u64>::new()
1208 .then(take_ref, ®)
1209 .cloned()
1210 .then(double, ®);
1211 p.run(world, input)
1212}
1213
1214#[inline(never)]
1215pub fn pipe_cloned_option(world: &mut World, input: u64) -> u64 {
1216 let reg = world.registry();
1217
1218 fn maybe_ref(x: u64) -> Option<&'static u64> {
1219 if x > 0 {
1220 Some(Box::leak(Box::new(x)))
1221 } else {
1222 None
1223 }
1224 }
1225
1226 let mut p = PipelineBuilder::<u64>::new()
1228 .then(maybe_ref, ®)
1229 .cloned()
1230 .unwrap_or(0);
1231 p.run(world, input)
1232}
1233
1234#[inline(never)]
1235pub fn pipe_cloned_result(world: &mut World, input: u64) -> u64 {
1236 let reg = world.registry();
1237
1238 fn try_ref(x: u64) -> Result<&'static u64, u32> {
1239 if x < 10_000 {
1240 Ok(Box::leak(Box::new(x)))
1241 } else {
1242 Err(x as u32)
1243 }
1244 }
1245
1246 let mut p = PipelineBuilder::<u64>::new()
1248 .then(try_ref, ®)
1249 .cloned()
1250 .unwrap_or(0);
1251 p.run(world, input)
1252}
1253
1254#[inline(never)]
1255pub fn pipe_cloned_large_type(world: &mut World, input: u64) -> [u8; 256] {
1256 let reg = world.registry();
1257
1258 fn make_ref(x: u64) -> &'static [u8; 256] {
1259 let mut arr = [0u8; 256];
1260 arr[0] = x as u8;
1261 Box::leak(Box::new(arr))
1262 }
1263
1264 let mut p = PipelineBuilder::<u64>::new().then(make_ref, ®).cloned();
1266 p.run(world, input)
1267}
1268
1269#[inline(never)]
1272pub fn pipe_dispatch_fanout2(world: &mut World, input: u64) {
1273 let reg = world.registry();
1274
1275 fn sink_a(mut a: ResMut<ResA>, x: &u64) {
1276 a.0 = a.0.wrapping_add(*x);
1277 }
1278 fn sink_b(mut a: ResMut<ResB>, x: &u64) {
1279 a.0 = a.0.wrapping_add(*x as u32);
1280 }
1281
1282 let h1 = sink_a.into_handler(®);
1283 let h2 = sink_b.into_handler(®);
1284
1285 let mut p = PipelineBuilder::<u64>::new()
1286 .then(add_one, ®)
1287 .dispatch(fan_out!(h1, h2));
1288 p.run(world, input);
1289}
1290
1291#[inline(never)]
1292pub fn pipe_dispatch_fanout4(world: &mut World, input: u64) {
1293 let reg = world.registry();
1294
1295 fn sink_a(mut a: ResMut<ResA>, x: &u64) {
1296 a.0 = a.0.wrapping_add(*x);
1297 }
1298 fn sink_b(mut a: ResMut<ResB>, x: &u64) {
1299 a.0 = a.0.wrapping_add(*x as u32);
1300 }
1301 fn sink_c(mut a: ResMut<ResC>, x: &u64) {
1302 a.0 = a.0.wrapping_add(*x as u16);
1303 }
1304 fn sink_d(mut a: ResMut<ResD>, x: &u64) {
1305 a.0 = a.0.wrapping_add(*x as u8);
1306 }
1307
1308 let h1 = sink_a.into_handler(®);
1309 let h2 = sink_b.into_handler(®);
1310 let h3 = sink_c.into_handler(®);
1311 let h4 = sink_d.into_handler(®);
1312
1313 let mut p = PipelineBuilder::<u64>::new()
1314 .then(add_one, ®)
1315 .dispatch(fan_out!(h1, h2, h3, h4));
1316 p.run(world, input);
1317}
1318
1319#[inline(never)]
1320pub fn pipe_dispatch_fanout8(world: &mut World, input: u64) {
1321 let reg = world.registry();
1322
1323 fn s1(mut a: ResMut<ResA>, x: &u64) {
1324 a.0 = a.0.wrapping_add(*x);
1325 }
1326 fn s2(mut a: ResMut<ResB>, x: &u64) {
1327 a.0 = a.0.wrapping_add(*x as u32);
1328 }
1329 fn s3(mut a: ResMut<ResC>, x: &u64) {
1330 a.0 = a.0.wrapping_add(*x as u16);
1331 }
1332 fn s4(mut a: ResMut<ResD>, x: &u64) {
1333 a.0 = a.0.wrapping_add(*x as u8);
1334 }
1335 fn s5(mut a: ResMut<ResF>, x: &u64) {
1336 a.0 = a.0.wrapping_add(*x);
1337 }
1338 fn s6(mut a: ResMut<ResG>, x: &u64) {
1339 a.0 = a.0.wrapping_add(*x as u32);
1340 }
1341 fn s7(mut a: ResMut<ResH>, x: &u64) {
1342 a.0 = a.0.wrapping_add(*x as u16);
1343 }
1344 fn s8(mut a: ResMut<ResE>, x: &u64) {
1345 a.0 += *x as f64;
1346 }
1347
1348 let mut p = PipelineBuilder::<u64>::new()
1349 .then(add_one, ®)
1350 .dispatch(fan_out!(
1351 s1.into_handler(®),
1352 s2.into_handler(®),
1353 s3.into_handler(®),
1354 s4.into_handler(®),
1355 s5.into_handler(®),
1356 s6.into_handler(®),
1357 s7.into_handler(®),
1358 s8.into_handler(®)
1359 ));
1360 p.run(world, input);
1361}
1362
1363#[inline(never)]
1364pub fn pipe_dispatch_broadcast(world: &mut World, input: u64) {
1365 let reg = world.registry();
1366
1367 fn sink_a(mut a: ResMut<ResA>, x: &u64) {
1368 a.0 = a.0.wrapping_add(*x);
1369 }
1370 fn sink_b(mut a: ResMut<ResB>, x: &u64) {
1371 a.0 = a.0.wrapping_add(*x as u32);
1372 }
1373 fn sink_c(mut a: ResMut<ResC>, x: &u64) {
1374 a.0 = a.0.wrapping_add(*x as u16);
1375 }
1376
1377 let mut bc = Broadcast::<u64>::new();
1378 bc.add(sink_a.into_handler(®));
1379 bc.add(sink_b.into_handler(®));
1380 bc.add(sink_c.into_handler(®));
1381
1382 let mut p = PipelineBuilder::<u64>::new()
1383 .then(add_one, ®)
1384 .dispatch(bc);
1385 p.run(world, input);
1386}
1387
1388#[inline(never)]
1389pub fn pipe_dispatch_mid_then_continue(world: &mut World, input: u64) -> u64 {
1390 let reg = world.registry();
1391 let handler = consume_val.into_handler(®);
1392 let mut p = PipelineBuilder::<u64>::new()
1394 .then(add_one, ®)
1395 .dispatch(handler)
1396 .then(|_unit: ()| 42u64, ®);
1397 p.run(world, input)
1398}
1399
1400#[inline(never)]
1403pub fn pipe_world_local(world: &mut World, input: u64) -> u64 {
1404 let reg = world.registry();
1405
1406 fn count_calls(mut count: Local<u64>, x: u64) -> u64 {
1407 *count += 1;
1408 x.wrapping_add(*count)
1409 }
1410
1411 let mut p = PipelineBuilder::<u64>::new().then(count_calls, ®);
1412 p.run(world, input)
1413}
1414
1415#[inline(never)]
1416pub fn pipe_world_5_params(world: &mut World, input: u64) -> u64 {
1417 let reg = world.registry();
1418 let mut p = PipelineBuilder::<u64>::new().then(five_params, ®);
1419 p.run(world, input)
1420}
1421
1422#[inline(never)]
1423pub fn pipe_world_8_params(world: &mut World, input: u64) -> u64 {
1424 let reg = world.registry();
1425 let mut p = PipelineBuilder::<u64>::new().then(eight_params, ®);
1426 p.run(world, input)
1427}
1428
1429#[inline(never)]
1432pub fn pipe_world_res_branch(world: &mut World, input: u64) -> u64 {
1433 let reg = world.registry();
1434 let mut p = PipelineBuilder::<u64>::new()
1435 .then(add_res_a, ®)
1436 .then(add_one, ®);
1437 p.run(world, input)
1438}