1;;! component_model_async = true
2
3(component definition $A
4  (core func $inc (canon backpressure.inc))
5  (core func $dec (canon backpressure.dec))
6  (core module $m
7    (import "" "inc" (func $inc))
8    (import "" "dec" (func $dec))
9    (func (export "run") (param $inc i32) (param $dec i32)
10      loop $l
11        call $inc
12        (local.tee $inc (i32.sub (local.get $inc) (i32.const 1)))
13        if br $l end
14      end
15
16      loop $l
17        call $dec
18        (local.tee $dec (i32.sub (local.get $dec) (i32.const 1)))
19        if br $l end
20      end)
21  )
22  (core instance $i (instantiate $m
23    (with "" (instance
24      (export "inc" (func $inc))
25      (export "dec" (func $dec))
26    ))
27  ))
28  (func (export "run") (param "incs" u32) (param "decs" u32)
29    (canon lift (core func $i "run")))
30)
31
32(component instance $a1 $A)
33(assert_trap (invoke "run" (u32.const 0) (u32.const 1)) "backpressure counter overflow")
34
35(component instance $a2 $A)
36(assert_trap (invoke "run" (u32.const 1) (u32.const 2)) "backpressure counter overflow")
37
38(component instance $a3 $A)
39(assert_trap (invoke "run" (u32.const 65536) (u32.const 0)) "backpressure counter overflow")
40
41(component instance $a4 $A)
42(assert_return (invoke "run" (u32.const 65535) (u32.const 65535)))
43(assert_trap (invoke "run" (u32.const 0) (u32.const 1)) "backpressure counter overflow")
44