use criterion::{black_box, criterion_group, criterion_main, Criterion}; use proc_macro2::TokenStream; use quote::quote; use quote_into::quote_into; fn using_quote() -> TokenStream { let values = (0..50).map(|i| quote! {Some(#i)}); quote! { let u = [#(#values,)*]; } } fn using_quote_into() -> TokenStream { let mut stream = TokenStream::new(); quote_into! { stream += let u = [#{ for i in 0..50 { quote_into!( stream += Some(#i),) } }];} stream } pub fn compare_loop(c: &mut Criterion) { { let a = using_quote().to_string(); let b = using_quote_into().to_string(); assert_eq!(a, b); } c.bench_function("quote", |b| b.iter(|| black_box(using_quote()))); c.bench_function("quote_into", |b| b.iter(|| black_box(using_quote_into()))); } criterion_group!(benches, compare_loop); criterion_main!(benches);