1#![cfg_attr(docsrs, feature(doc_auto_cfg))]
24#![warn(clippy::print_stderr)]
25#![warn(clippy::print_stdout)]
26
27pub use libtest2_harness::Harness;
28pub use libtest2_harness::RunError;
29pub use libtest2_harness::RunResult;
30pub use libtest2_harness::State;
31pub use libtest2_harness::TestKind;
32
33use libtest2_harness::Case;
34use libtest2_harness::Source;
35
36pub struct Trial {
37 name: String,
38 #[allow(clippy::type_complexity)]
39 runner: Box<dyn Fn(&State) -> Result<(), RunError> + Send + Sync>,
40}
41
42impl Trial {
43 pub fn test(
44 name: impl Into<String>,
45 runner: impl Fn(&State) -> Result<(), RunError> + Send + Sync + 'static,
46 ) -> Self {
47 Self {
48 name: name.into(),
49 runner: Box::new(runner),
50 }
51 }
52}
53
54impl Case for Trial {
55 fn name(&self) -> &str {
56 &self.name
57 }
58 fn kind(&self) -> TestKind {
59 Default::default()
60 }
61 fn source(&self) -> Option<&Source> {
62 None
63 }
64 fn exclusive(&self, _: &State) -> bool {
65 false
66 }
67
68 fn run(&self, state: &State) -> Result<(), RunError> {
69 (self.runner)(state)
70 }
71}
72
73#[doc = include_str!("../README.md")]
74#[cfg(doctest)]
75pub struct ReadmeDoctests;