nvzqz / divan

Fast and simple benchmarking for Rust projects
https://nikolaivazquez.com/blog/divan/
Apache License 2.0
924 stars 26 forks source link

Divan introduces type errors #60

Open 81standish opened 1 month ago

81standish commented 1 month ago

This code:

use std::ops::{Add, Mul};

#[divan::bench(args=[(3,4), (5,6)], types=[u8, u32, u64, u128, usize])]
fn f<T>((x, y): (T,T)) -> (T,T)
where T: Copy + Add<Output = T> + Mul<Output = T>
{
    (x + y, x * y)
}

fn main() {
    println!("f::<u128>(3,4) = {:?}", f::<u128>((3,4)));
    println!("f::<u8>(3,4) = {:?}", f::<u8>((3,4)));
    divan::main();
}

produces this error:

error[E0412]: cannot find type `T` in this scope: bug_divan(bench)
 --> benches/bug_divan.rs:4:18
  |
4 | fn f<T>((x, y): (T,T)) -> (T,T)
  |                  ^ not found in this scope

error[E0412]: cannot find type `T` in this scope
 --> benches/bug_divan.rs:4:20
  |
4 | fn f<T>((x, y): (T,T)) -> (T,T)
  |                    ^ not found in this scope

For more information about this error, try `rustc --explain E0412`.
error: could not compile `fe_cards` (bench "bug_divan") due to 2 previous errors

When the divan attribute above f is removed; the program compiles and runs. I'm sorry, I'm new to rust and macros are beyond my ken, so I can't offer any suggestions.

Anyway; thank you for divan and I liked your talk. At the moment, I'm exploring the performance of different combinatorial algorithm implementations and the effects of different primitive type choises. divan is a nice fit.