Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/tests/misc_testsuite/component-model/async/backpressure-overflow.wast
2450 views
;;! component_model_async = true

(component definition $A
  (core func $inc (canon backpressure.inc))
  (core func $dec (canon backpressure.dec))
  (core module $m
    (import "" "inc" (func $inc))
    (import "" "dec" (func $dec))
    (func (export "run") (param $inc i32) (param $dec i32)
      loop $l
        call $inc
        (local.tee $inc (i32.sub (local.get $inc) (i32.const 1)))
        if br $l end
      end

      loop $l
        call $dec
        (local.tee $dec (i32.sub (local.get $dec) (i32.const 1)))
        if br $l end
      end)
  )
  (core instance $i (instantiate $m
    (with "" (instance
      (export "inc" (func $inc))
      (export "dec" (func $dec))
    ))
  ))
  (func (export "run") (param "incs" u32) (param "decs" u32)
    (canon lift (core func $i "run")))
)

(component instance $a1 $A)
(assert_trap (invoke "run" (u32.const 0) (u32.const 1)) "backpressure counter overflow")

(component instance $a2 $A)
(assert_trap (invoke "run" (u32.const 1) (u32.const 2)) "backpressure counter overflow")

(component instance $a3 $A)
(assert_trap (invoke "run" (u32.const 65536) (u32.const 0)) "backpressure counter overflow")

(component instance $a4 $A)
(assert_return (invoke "run" (u32.const 65535) (u32.const 65535)))
(assert_trap (invoke "run" (u32.const 0) (u32.const 1)) "backpressure counter overflow")