Skip to main content

nexus_rt/codegen_audit/
pipeline.rs

1//! Pipeline codegen audit cases.
2//!
3//! Categories 1-12 from the assembly audit plan.
4
5#![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// ═══════════════════════════════════════════════════════════════════
14// 1. Linear chains
15// ═══════════════════════════════════════════════════════════════════
16
17#[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, &reg);
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, &reg)
29        .then(double, &reg);
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, &reg)
38        .then(double, &reg)
39        .then(add_three, &reg);
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, &reg)
48        .then(double, &reg)
49        .then(add_three, &reg)
50        .then(square, &reg)
51        .then(sub_ten, &reg);
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, &reg)
60        .then(double, &reg)
61        .then(add_three, &reg)
62        .then(square, &reg)
63        .then(sub_ten, &reg)
64        .then(shr_one, &reg)
65        .then(xor_mask, &reg)
66        .then(add_seven, &reg)
67        .then(triple, &reg)
68        .then(add_forty_two, &reg);
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, &reg)
77        .then(double, &reg)
78        .then(add_three, &reg)
79        .then(square, &reg)
80        .then(sub_ten, &reg)
81        .then(shr_one, &reg)
82        .then(xor_mask, &reg)
83        .then(add_seven, &reg)
84        .then(triple, &reg)
85        .then(add_forty_two, &reg)
86        .then(add_one, &reg)
87        .then(double, &reg)
88        .then(add_three, &reg)
89        .then(square, &reg)
90        .then(sub_ten, &reg)
91        .then(shr_one, &reg)
92        .then(xor_mask, &reg)
93        .then(add_seven, &reg)
94        .then(triple, &reg)
95        .then(add_forty_two, &reg);
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, &reg)
104        .then(double, &reg)
105        .then(add_three, &reg);
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, &reg)
114        .then(add_res_a, &reg)
115        .then(write_res_a, &reg)
116        .then(add_both, &reg)
117        .then(three_params, &reg);
118    p.run(world, input)
119}
120
121// ═══════════════════════════════════════════════════════════════════
122// 2. Guard, filter, dedup
123// ═══════════════════════════════════════════════════════════════════
124
125#[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, &reg)
130        .guard(|x: &u64| *x > 10, &reg)
131        .inspect(|_x: &u64| {}, &reg);
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, &reg)
140        .guard(|x: &u64| *x > 10, &reg)
141        .map(double, &reg)
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, &reg)
151        .guard(|x: &u64| *x > 10, &reg)
152        .filter(|x: &u64| *x < 1000, &reg)
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, &reg)
162        .dedup()
163        .inspect(|_x: &u64| {}, &reg);
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, &reg)
172        .dedup()
173        .map(double, &reg)
174        .unwrap_or_else(|| 0, &reg);
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, &reg)
183        .guard(|x: &[u8; 256]| x[0] > 0, &reg);
184    p.run(world, input)
185}
186
187// ═══════════════════════════════════════════════════════════════════
188// 3a. Individual Option combinators
189// ═══════════════════════════════════════════════════════════════════
190
191#[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, &reg)
196        .map(double, &reg);
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, &reg)
205        .and_then(checked_double, &reg);
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, &reg)
214        .filter(|x: &u64| *x < 1000, &reg);
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, &reg)
223        .inspect(|_x: &u64| {}, &reg);
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, &reg)
232        .on_none(|| {}, &reg);
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, &reg)
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, &reg)
250        .ok_or_else(|| 42u32, &reg);
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, &reg)
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, &reg)
268        .unwrap_or_else(|| 0, &reg);
269    p.run(world, input)
270}
271
272// ═══════════════════════════════════════════════════════════════════
273// 3b. Option combinator chains
274// ═══════════════════════════════════════════════════════════════════
275
276#[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, &reg)
281        .guard(|x: &u64| *x > 0, &reg)
282        .map(double, &reg)
283        .filter(|x: &u64| *x < 1000, &reg)
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, &reg)
293        .guard(|x: &u64| *x > 0, &reg)
294        .map(double, &reg)
295        .and_then(checked_double, &reg)
296        .unwrap_or_else(|| 0, &reg);
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, &reg)
305        .guard(|x: &u64| *x > 0, &reg)
306        .filter(|x: &u64| *x < 1000, &reg)
307        .inspect(|_x: &u64| {}, &reg)
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, &reg)
317        .guard(|x: &u64| *x > 0, &reg)
318        .filter(|x: &u64| *x < 10000, &reg)
319        .filter(|x: &u64| *x > 5, &reg)
320        .filter(|x: &u64| x & 1 == 0, &reg)
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, &reg)
330        .guard(|x: &u64| *x > 0, &reg)
331        .map(add_one, &reg)
332        .map(double, &reg)
333        .map(add_three, &reg)
334        .map(square, &reg)
335        .map(sub_ten, &reg)
336        .unwrap_or(0);
337    p.run(world, input)
338}
339
340// -- Early termination stress: guard → long dead chain on None path --
341
342#[inline(never)]
343pub fn pipe_opt_guard_skip_10(world: &mut World, input: u64) -> u64 {
344    let reg = world.registry();
345    // The guard at step 1 can return None. The 10 maps after it should
346    // all be dead code on that path — does the compiler branch once and
347    // skip everything?
348    let mut p = PipelineBuilder::<u64>::new()
349        .then(|x: u64| x, &reg)
350        .guard(|x: &u64| *x > 100, &reg)
351        .map(add_one, &reg)
352        .map(double, &reg)
353        .map(add_three, &reg)
354        .map(square, &reg)
355        .map(sub_ten, &reg)
356        .map(shr_one, &reg)
357        .map(xor_mask, &reg)
358        .map(add_seven, &reg)
359        .map(triple, &reg)
360        .map(add_forty_two, &reg)
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    // Guard → filter at step 2 → 8 more maps. If filter returns None,
369    // all 8 maps should be skipped.
370    let mut p = PipelineBuilder::<u64>::new()
371        .then(|x: u64| x, &reg)
372        .guard(|x: &u64| *x > 0, &reg)
373        .filter(|x: &u64| *x < 50, &reg)
374        .map(add_one, &reg)
375        .map(double, &reg)
376        .map(add_three, &reg)
377        .map(square, &reg)
378        .map(sub_ten, &reg)
379        .map(shr_one, &reg)
380        .map(xor_mask, &reg)
381        .map(add_seven, &reg)
382        .unwrap_or(0);
383    p.run(world, input)
384}
385
386// ═══════════════════════════════════════════════════════════════════
387// 4a. Individual Result combinators
388// ═══════════════════════════════════════════════════════════════════
389
390#[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, &reg)
395        .map(double, &reg);
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, &reg)
404        .and_then(try_parse, &reg);
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, &reg)
416        .catch(log_error, &reg);
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, &reg)
425        .map_err(|e: u32| e as u64, &reg);
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, &reg)
434        .or_else(|e: u32| Err(e as u64), &reg);
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, &reg)
443        .inspect(|_x: &u64| {}, &reg);
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, &reg)
452        .inspect_err(|_e: &u32| {}, &reg);
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, &reg).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, &reg)
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, &reg)
477        .unwrap_or_else(|e: u32| e as u64, &reg);
478    p.run(world, input)
479}
480
481// ═══════════════════════════════════════════════════════════════════
482// 4b. Result combinator chains
483// ═══════════════════════════════════════════════════════════════════
484
485#[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, &reg)
490        .map(double, &reg)
491        .and_then(try_parse, &reg)
492        .unwrap_or_else(|e: u32| e as u64, &reg);
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, &reg)
501        .map_err(|e: u32| e as u64, &reg)
502        .or_else(|e: u64| Ok::<u64, u64>(e), &reg)
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, &reg)
512        .inspect(|_v: &u64| {}, &reg)
513        .inspect_err(|_e: &u32| {}, &reg)
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, &reg)
526        .catch(log_error, &reg)
527        .map(double, &reg)
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, &reg)
537        .map(add_one, &reg)
538        .map(double, &reg)
539        .map(add_three, &reg)
540        .map(square, &reg)
541        .map(sub_ten, &reg)
542        .unwrap_or(0);
543    p.run(world, input)
544}
545
546// -- Early termination stress: Err → long dead chain on Err path --
547
548#[inline(never)]
549pub fn pipe_res_err_skip_10(world: &mut World, input: u64) -> u64 {
550    let reg = world.registry();
551    // try_parse returns Err for input >= 10_000. The 10 maps after it
552    // should all be skipped on the Err path — single branch or per-step?
553    let mut p = PipelineBuilder::<u64>::new()
554        .then(try_parse, &reg)
555        .map(add_one, &reg)
556        .map(double, &reg)
557        .map(add_three, &reg)
558        .map(square, &reg)
559        .map(sub_ten, &reg)
560        .map(shr_one, &reg)
561        .map(xor_mask, &reg)
562        .map(add_seven, &reg)
563        .map(triple, &reg)
564        .map(add_forty_two, &reg)
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    // try_parse → catch converts Err → None. Then 8 option maps should
573    // all be dead code if the original result was Err.
574
575    fn log_error(_err: u32) {}
576
577    let mut p = PipelineBuilder::<u64>::new()
578        .then(try_parse, &reg)
579        .catch(log_error, &reg)
580        .map(add_one, &reg)
581        .map(double, &reg)
582        .map(add_three, &reg)
583        .map(square, &reg)
584        .map(sub_ten, &reg)
585        .map(shr_one, &reg)
586        .map(xor_mask, &reg)
587        .map(add_seven, &reg)
588        .unwrap_or(0);
589    p.run(world, input)
590}
591
592// ═══════════════════════════════════════════════════════════════════
593// 5. Type transitions
594// ═══════════════════════════════════════════════════════════════════
595
596#[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, &reg)
601        .guard(|x: &u64| *x > 10, &reg)
602        .unwrap_or(0)
603        .then(double, &reg);
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, &reg)
612        .guard(|x: &u64| *x > 0, &reg)
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, &reg)
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, &reg)
636        .catch(log_error, &reg)
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, &reg)
649        .guard(|x: &u64| *x > 0, &reg)
650        .ok_or(0u32)
651        .catch(log_error, &reg)
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, &reg)
664        .guard(|x: &u64| *x > 0, &reg)
665        .ok_or(0u32)
666        .map(double, &reg)
667        .catch(log_error, &reg)
668        .unwrap_or(0)
669        .then(add_three, &reg);
670    p.run(world, input)
671}
672
673// ═══════════════════════════════════════════════════════════════════
674// 6. Branching (route, switch)
675// ═══════════════════════════════════════════════════════════════════
676
677#[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, &reg);
682    let on_false = PipelineBuilder::<u64>::new().then(add_one, &reg);
683
684    let mut p = PipelineBuilder::<u64>::new()
685        .then(add_one, &reg)
686        .route(|x: &u64| *x > 100, &reg, on_true, on_false)
687        .then(add_three, &reg);
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, &reg);
696    let arm_b = PipelineBuilder::<u64>::new().then(triple, &reg);
697    let arm_c = PipelineBuilder::<u64>::new().then(add_one, &reg);
698
699    let inner_false = PipelineBuilder::<u64>::new().then(|x: u64| x, &reg).route(
700        |x: &u64| *x > 50,
701        &reg,
702        arm_b,
703        arm_c,
704    );
705
706    let mut p = PipelineBuilder::<u64>::new().then(|x: u64| x, &reg).route(
707        |x: &u64| *x > 100,
708        &reg,
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, &reg)
721        .then(add_three, &reg)
722        .then(square, &reg)
723        .then(sub_ten, &reg)
724        .then(shr_one, &reg);
725
726    let arm_f = PipelineBuilder::<u64>::new()
727        .then(add_one, &reg)
728        .then(triple, &reg)
729        .then(xor_mask, &reg)
730        .then(add_seven, &reg)
731        .then(add_forty_two, &reg);
732
733    let mut p = PipelineBuilder::<u64>::new().then(add_one, &reg).route(
734        |x: &u64| *x > 100,
735        &reg,
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, &reg).then(
746        |x: u64| {
747            if x > 100 {
748                x.wrapping_mul(2)
749            } else {
750                x.wrapping_add(1)
751            }
752        },
753        &reg,
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        &reg,
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, &reg);
776    let mut arm_small = resolve_step(add_one, &reg);
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        &reg,
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), &reg);
796    p.run(world, input)
797}
798
799// ═══════════════════════════════════════════════════════════════════
800// 7. Splat
801// ═══════════════════════════════════════════════════════════════════
802
803#[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, &reg);
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, &reg)
817        .splat()
818        .then(splat_add, &reg);
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, &reg)
827        .splat()
828        .then(splat_3, &reg);
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, &reg)
837        .splat()
838        .then(splat_4, &reg);
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, &reg)
847        .splat()
848        .then(splat_5, &reg);
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, &reg)
862        .splat()
863        .then(splat_with_res, &reg);
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, &reg)
872        .splat()
873        .then(splat_add, &reg)
874        .guard(|x: &u64| *x > 10, &reg)
875        .unwrap_or(0);
876    p.run(world, input)
877}
878
879// ═══════════════════════════════════════════════════════════════════
880// 8. Bool combinators
881// ═══════════════════════════════════════════════════════════════════
882
883#[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, &reg).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, &reg)
895        .and(|| true, &reg);
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, &reg)
904        .or(|| false, &reg);
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, &reg)
913        .xor(|| true, &reg);
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, &reg)
922        .and(|| true, &reg)
923        .or(|| false, &reg)
924        .not()
925        .xor(|| true, &reg);
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, &reg)
934        .and(|| true, &reg)
935        .guard(|b: &bool| *b, &reg)
936        .unwrap_or(false)
937        .then(|b: bool| if b { 1u64 } else { 0u64 }, &reg);
938    p.run(world, input)
939}
940
941// ═══════════════════════════════════════════════════════════════════
942// 9. Clone transitions
943// ═══════════════════════════════════════════════════════════════════
944
945#[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        // Leak to get 'static for the audit — the point is the cloned() codegen.
951        Box::leak(Box::new(x))
952    }
953
954    let mut p = PipelineBuilder::<u64>::new()
955        .then(take_ref, &reg)
956        .cloned()
957        .then(double, &reg);
958    p.run(world, input)
959}
960
961// ═══════════════════════════════════════════════════════════════════
962// 10. Side effects (tap, tee)
963// ═══════════════════════════════════════════════════════════════════
964
965#[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, &reg)
970        .tap(|_x: &u64| {}, &reg)
971        .then(double, &reg);
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, &reg)
980        .tap(|_x: &u64| {}, &reg)
981        .then(add_one, &reg)
982        .tap(|_x: &u64| {}, &reg)
983        .then(double, &reg);
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, &reg);
992
993    let mut p = PipelineBuilder::<u64>::new()
994        .then(add_one, &reg)
995        .tee(side)
996        .then(double, &reg);
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, &reg)
1006        .then(ref_double, &reg)
1007        .then(ref_add_three, &reg)
1008        .then(ref_square, &reg)
1009        .then(ref_consume, &reg);
1010
1011    let mut p = PipelineBuilder::<u64>::new()
1012        .then(add_one, &reg)
1013        .tee(side)
1014        .then(double, &reg);
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, &reg)
1023        .tap(
1024            |w: &mut World, x: &u64| {
1025                // Force a World access in the tap closure.
1026                let _ = w.resource::<ResA>().0.wrapping_add(*x);
1027            },
1028            &reg,
1029        )
1030        .then(double, &reg);
1031    p.run(world, input)
1032}
1033
1034// ═══════════════════════════════════════════════════════════════════
1035// 11. Dispatch & fan-out
1036// ═══════════════════════════════════════════════════════════════════
1037
1038#[inline(never)]
1039pub fn pipe_dispatch_handler(world: &mut World, input: u64) {
1040    let reg = world.registry();
1041    let handler = consume_val.into_handler(&reg);
1042    let mut p = PipelineBuilder::<u64>::new()
1043        .then(add_one, &reg)
1044        .dispatch(handler);
1045    p.run(world, input);
1046}
1047
1048// ═══════════════════════════════════════════════════════════════════
1049// 12. World interaction (param resolution codegen)
1050// ═══════════════════════════════════════════════════════════════════
1051
1052#[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, &reg);
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, &reg);
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, &reg)
1071        .then(write_res_a, &reg);
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, &reg);
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, &reg)
1087        .then(add_res_a, &reg)
1088        .then(write_res_a, &reg)
1089        .then(double, &reg)
1090        .then(add_both, &reg);
1091    p.run(world, input)
1092}
1093
1094// Change detection probes removed — resource stamping replaced by reactor
1095// interest-based notification.
1096
1097// ---- Remaining section 3b gap: 3.13 ----
1098
1099#[inline(never)]
1100pub fn pipe_opt_ok_or_chain(world: &mut World, input: u64) -> u64 {
1101    let reg = world.registry();
1102    // guard → ok_or → Result combinators → unwrap
1103    let mut p = PipelineBuilder::<u64>::new()
1104        .then(|x: u64| x, &reg)
1105        .guard(|x: &u64| *x > 0, &reg)
1106        .ok_or(0u32)
1107        .map(double, &reg)
1108        .and_then(try_parse, &reg)
1109        .unwrap_or_else(|e: u32| e as u64, &reg);
1110    p.run(world, input)
1111}
1112
1113// ---- Remaining section 5 gaps: 5.6, 5.7 ----
1114
1115#[inline(never)]
1116pub fn pipe_trans_nested_option(world: &mut World, input: u64) -> Option<Option<u64>> {
1117    let reg = world.registry();
1118    // maybe_positive → Option<u64>, then map(checked_double) → Option<Option<u64>>
1119    let mut p = PipelineBuilder::<u64>::new()
1120        .then(maybe_positive, &reg)
1121        .map(checked_double, &reg);
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    // maybe_positive → Option<u64>, then map(try_parse) → Option<Result<u64, u32>>
1129    let mut p = PipelineBuilder::<u64>::new()
1130        .then(maybe_positive, &reg)
1131        .map(try_parse, &reg);
1132    p.run(world, input)
1133}
1134
1135// ---- Remaining section 6 gaps: 6.3 ----
1136
1137#[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, &reg);
1142    let arm_b = PipelineBuilder::<u64>::new().then(triple, &reg);
1143    let arm_c = PipelineBuilder::<u64>::new().then(add_one, &reg);
1144    let arm_d = PipelineBuilder::<u64>::new().then(add_seven, &reg);
1145
1146    // Inner-most route: 3rd level
1147    let inner2 = PipelineBuilder::<u64>::new().then(|x: u64| x, &reg).route(
1148        |x: &u64| *x > 25,
1149        &reg,
1150        arm_c,
1151        arm_d,
1152    );
1153
1154    // 2nd level
1155    let inner1 = PipelineBuilder::<u64>::new().then(|x: u64| x, &reg).route(
1156        |x: &u64| *x > 50,
1157        &reg,
1158        arm_b,
1159        inner2,
1160    );
1161
1162    // Top level — 4-way via nesting
1163    let mut p = PipelineBuilder::<u64>::new().then(|x: u64| x, &reg).route(
1164        |x: &u64| *x > 100,
1165        &reg,
1166        arm_a,
1167        inner1,
1168    );
1169    p.run(world, input)
1170}
1171
1172// ---- Remaining section 7 gap: 7.8 ----
1173
1174#[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, &reg)
1191        .splat()
1192        .then(combine_pair, &reg);
1193    p.run(world, input)
1194}
1195
1196// ---- Remaining section 9 gaps: 9.1, 9.3, 9.4, 9.5 ----
1197
1198#[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    // &u64 → u64 via cloned() — should be a single load
1207    let mut p = PipelineBuilder::<u64>::new()
1208        .then(take_ref, &reg)
1209        .cloned()
1210        .then(double, &reg);
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    // Option<&u64> → Option<u64> via cloned()
1227    let mut p = PipelineBuilder::<u64>::new()
1228        .then(maybe_ref, &reg)
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    // Result<&u64, u32> → Result<u64, u32> via cloned()
1247    let mut p = PipelineBuilder::<u64>::new()
1248        .then(try_ref, &reg)
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    // &[u8; 256] → [u8; 256] via cloned() — should be memcpy
1265    let mut p = PipelineBuilder::<u64>::new().then(make_ref, &reg).cloned();
1266    p.run(world, input)
1267}
1268
1269// ---- Remaining section 11 gaps: 11.2-11.7 ----
1270
1271#[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(&reg);
1283    let h2 = sink_b.into_handler(&reg);
1284
1285    let mut p = PipelineBuilder::<u64>::new()
1286        .then(add_one, &reg)
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(&reg);
1309    let h2 = sink_b.into_handler(&reg);
1310    let h3 = sink_c.into_handler(&reg);
1311    let h4 = sink_d.into_handler(&reg);
1312
1313    let mut p = PipelineBuilder::<u64>::new()
1314        .then(add_one, &reg)
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, &reg)
1350        .dispatch(fan_out!(
1351            s1.into_handler(&reg),
1352            s2.into_handler(&reg),
1353            s3.into_handler(&reg),
1354            s4.into_handler(&reg),
1355            s5.into_handler(&reg),
1356            s6.into_handler(&reg),
1357            s7.into_handler(&reg),
1358            s8.into_handler(&reg)
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(&reg));
1379    bc.add(sink_b.into_handler(&reg));
1380    bc.add(sink_c.into_handler(&reg));
1381
1382    let mut p = PipelineBuilder::<u64>::new()
1383        .then(add_one, &reg)
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(&reg);
1392    // dispatch returns () — then we continue the chain from ()
1393    let mut p = PipelineBuilder::<u64>::new()
1394        .then(add_one, &reg)
1395        .dispatch(handler)
1396        .then(|_unit: ()| 42u64, &reg);
1397    p.run(world, input)
1398}
1399
1400// ---- Remaining section 12 gaps: 12.4, 12.6, 12.7, 12.11 ----
1401
1402#[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, &reg);
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, &reg);
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, &reg);
1426    p.run(world, input)
1427}
1428
1429// Replacement for the removed changed_after audit: exercises pipeline
1430// world-parameter codegen with Res + arithmetic.
1431#[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, &reg)
1436        .then(add_one, &reg);
1437    p.run(world, input)
1438}