lean4-htt/tests/lean/run/async_select_timer.lean
Sofia Rodrigues f9adafe54d
feat: adds acceptSelector and modified selectors (#10667)
This PR adds more selectors for TCP and Signals.

It also fixes a problem with `Selectors` that they cannot be closures
over a promise, otherwise it causes the waiter promise to never be
dropped.
2025-10-17 14:53:46 +00:00

32 lines
718 B
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Std.Internal.Async.Timer
open Std Internal IO Async
def test1 : Async Nat := do
let s1 ← Sleep.mk 1000
let s2 ← Sleep.mk 1500
Selectable.one #[
.case (s2.selector) fun _ => return 2,
.case (s1.selector) fun _ => return 1,
]
/-- info: 1 -/
#guard_msgs in
#eval test1 |>.block
def test2 : Async Nat := do
Selectable.one #[
.case (← Selector.sleep 1500) fun _ => return 2,
.case (← Selector.sleep 1000) fun _ => return 1,
]
/-- info: 1 -/
#guard_msgs in
#eval EAsync.block <| show Async _ from do
test2
/-- error: Selectable.one requires at least one Selectable -/
#guard_msgs in
#eval EAsync.block <| show Async _ from do
let foo ← Selectable.one (α := Unit) #[]