Add tests asserting the function-like semantics of join!()
This commit is contained in:
parent
e277a98758
commit
f8dc13db43
@ -64,6 +64,40 @@ fn test_join() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tests that `join!(…)` behaves "like a function": evaluating its arguments
|
||||||
|
/// before applying any of its own logic.
|
||||||
|
///
|
||||||
|
/// _e.g._, `join!(async_fn(&borrowed), …)` does not consume `borrowed`;
|
||||||
|
/// and `join!(opt_fut?, …)` does let that `?` refer to the callsite scope.
|
||||||
|
mod test_join_function_like_value_arg_semantics {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
async fn async_fn(_: impl Sized) {}
|
||||||
|
|
||||||
|
// no need to _run_ this test, just to compile it.
|
||||||
|
fn _join_does_not_unnecessarily_move_mentioned_bindings() {
|
||||||
|
let not_copy = vec![()];
|
||||||
|
let _ = join!(async_fn(¬_copy)); // should not move `not_copy`
|
||||||
|
let _ = not_copy; // OK
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn join_lets_control_flow_effects_such_as_try_flow_through() {
|
||||||
|
let maybe_fut = None;
|
||||||
|
if false {
|
||||||
|
*&mut { maybe_fut } = Some(async {});
|
||||||
|
loop {}
|
||||||
|
}
|
||||||
|
assert!(Option::is_none(&try { join!(maybe_fut?, async { unreachable!() }) }));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn join_is_able_to_handle_temporaries() {
|
||||||
|
let _ = join!(async_fn(&String::from("temporary")));
|
||||||
|
let () = block_on(join!(async_fn(&String::from("temporary"))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn block_on(fut: impl Future) {
|
fn block_on(fut: impl Future) {
|
||||||
struct Waker;
|
struct Waker;
|
||||||
impl Wake for Waker {
|
impl Wake for Waker {
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
#![feature(str_internals)]
|
#![feature(str_internals)]
|
||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
#![feature(trusted_len)]
|
#![feature(trusted_len)]
|
||||||
|
#![feature(try_blocks)]
|
||||||
#![feature(try_trait_v2)]
|
#![feature(try_trait_v2)]
|
||||||
#![feature(slice_internals)]
|
#![feature(slice_internals)]
|
||||||
#![feature(slice_partition_dedup)]
|
#![feature(slice_partition_dedup)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user