use std::fs; use anyhow::Result; use assert_cmd::prelude::*; use predicates::str::contains; use crate::support::*; mod support; #[test] #[cfg_attr( windows, ignore = "test is currently failing in ci and needs to be debugged" )] fn it_runs_bench_with_basic_component() -> Result<()> { let project = Project::new("foo", true)?; fs::write( project.root().join("wit/world.wit"), " package my:fibonacci; interface types { type size = u32; } world generator { use types.{size}; export fibonacci: func(input: size) -> u32; }", )?; fs::write( project.root().join("src/lib.rs"), r#" #![feature(test)] #[allow(warnings)] mod bindings; extern crate test; use bindings::{Guest, Size}; use test::Bencher; struct Component; fn fibonacci(n: Size) -> u32 { if n < 2 { 1 } else { fibonacci(n - 1) + fibonacci(n - 2) } } impl Guest for Component { fn fibonacci(size: Size) -> u32 { fibonacci(size) } } bindings::export!(Component with_types_in bindings); #[bench] fn bench_recursive_fibonacci(b: &mut Bencher) { b.iter(|| { (0..5).map(fibonacci).collect::>() }) }"#, )?; project .cargo_component(["bench"]) .env("RUSTUP_TOOLCHAIN", "nightly") .assert() .stdout(contains("test bench_recursive_fibonacci ...")) .stdout(contains("test result: ok.")) .success(); Ok(()) }