#executor #future #async #stepping

no-std wookie

包括单步执行器的异步测试/基准工具包。与 no-std 兼容。

6 个版本

0.3.2 2021 年 9 月 19 日
0.3.1 2021 年 8 月 24 日
0.2.0 2021 年 7 月 22 日
0.1.1 2021 年 4 月 26 日

#847测试

每月 34 次下载

Apache-2.0 WITH LLVM-exception

28KB
347

Wookie

License Package Documentation

包括单步执行器的异步测试/基准工具包。与 no-std 兼容。

状态:beta

我们已经迭代了几次,现在非常喜欢它现在的样子,并认为它是正确的。

用法

主要用户界面是 wookie! 宏,它用执行器包装一个 future 并将其固定在堆栈上。

use core::task::Poll;
use wookie::wookie;
wookie!(future: async { true });
assert_eq!(future.poll(), Poll::Ready(true));

// you can also just give a variable name if you have one:
let future = async { true };
wookie!(future);
assert_eq!(future.poll(), Poll::Ready(true));

// we can find out about the state of wakers any time:
assert_eq!(future.cloned(), 0);
assert_eq!(future.dropped(), 0);
assert_eq!(future.woken(), 0);
// or equivalently...
future.stats().assert(0, 0, 0);

如果您无法访问分配器,您可以使用 local! 宏代替,但是轮询是不安全的,您必须非常小心地维护 Local 方法中的 safety 部分所描述的不变式。

use core::task::Poll;
use wookie::local;
local!(future: async { true });
assert_eq!(unsafe { future.poll() }, Poll::Ready(true));

// you can also just give a variable name if you have one:
let future = async { true };
local!(future);
assert_eq!(unsafe { future.poll() }, Poll::Ready(true));

// we can find out about the state of wakers any time:
assert_eq!(future.cloned(), 0);
assert_eq!(future.dropped(), 0);
assert_eq!(future.woken(), 0);
// or equivalently...
future.stats().assert(0, 0, 0);

对于基准测试,我们提供了 dummy! 宏,其唤醒者不执行任何操作,但非常快速。

use core::task::Poll;
use wookie::dummy;
dummy!(future: async { true });
assert_eq!(future.poll(), Poll::Ready(true));

我们有 assert_pending!assert_ready! 以减少断言中的键入量

use wookie::*;
use core::task::Poll;
assert_pending!(Poll::<i32>::Pending); // pass
// assert_pending!(Poll::Ready(())); // would fail

// With 1 arg, assert_ready will returning the unwrapped value.
assert_eq!(42, assert_ready!(Poll::Ready(42)));
// assert_ready!(Poll::<i32>::Pending); // would fail

// With 2 args, it's like [`assert_eq`] on the unwrapped value.
assert_ready!(42, Poll::Ready(42));
// assert_ready!(Poll::<i32>::Pending); // would fail
// assert_ready!(42, Poll::Ready(420)); // would fail

MSRV: 1.51.0

特性

默认特性:alloc

  • alloc - 启用分配器的使用。由 Wookie / wookie! 需要。

版权 (c) 2021 James Laver, wookie 贡献者

许可 根据 Apache 许可证 2.0 版 (https://www.apache.org/licenses/LICENSE-2.0),带有 LLVM 异常 (https://spdx.org/licenses/LLVM-exception.html)。

除非您明确声明,否则您有意提交以包含在作品中的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式许可,不附加任何额外条款或条件。

依赖关系

~52KB