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 次下载
28KB
347 行
Wookie
包括单步执行器的异步测试/基准工具包。与 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