#![allow(
clippy::arithmetic_side_effects,
unused_mut,
clippy::needless_lifetimes,
clippy::needless_pass_by_value,
clippy::unwrap_used,
clippy::ref_option
)]
use kash::kash;
use std::thread::sleep;
use std::time::{Duration, Instant};
#[kash(size = "50")]
fn slow_fn(n: u32) -> String {
if n == 0 {
return "done".to_string();
}
sleep(Duration::new(1, 0));
slow_fn(n - 1)
}
#[kash(size = "50")]
#[must_use]
pub fn slow_fn_with_mut_self(mut n: u32) -> String {
if n == 0 {
return "done".to_string();
}
sleep(Duration::new(1, 0));
slow_fn_with_mut_self(n - 1)
}
#[kash(size = "50")]
#[must_use]
pub fn slow_fn_with_lifetime<'a>(n: &'a i32) -> String {
if *n == 0 {
return "done".to_string();
}
sleep(Duration::new(1, 0));
slow_fn_with_lifetime(&(n - 1))
}
#[kash(key(ty = "String", expr = r#"{ format!("{}", n.to_string()) }"#))]
fn slow_fn_generic<T>(n: T) -> String
where
T: ToString,
{
sleep(Duration::new(1, 0));
n.to_string()
}
#[kash(key(ty = "String", expr = r#"{ format!("{}", n.to_string()) }"#))]
fn slow_fn_ref_generic<T>(n: &T) -> String
where
T: ToString,
{
sleep(Duration::new(1, 0));
n.to_string()
}
#[kash(key(
ty = "String",
expr = r#"{ format!("{}", n.clone().unwrap().to_string()) }"#
))]
fn slow_fn_ref_option_generic<T>(n: &Option<T>) -> String
where
T: ToString + Clone,
{
sleep(Duration::new(1, 0));
n.clone().unwrap().to_string()
}
pub fn main() {
println!("[kash] Initial run...");
let now = Instant::now();
let _ = slow_fn(10);
println!("[kash] Elapsed: {}\n", now.elapsed().as_secs());
println!("[kash] Kash run...");
let now = Instant::now();
let _ = slow_fn(10);
println!("[kash] Elapsed: {}\n", now.elapsed().as_secs());
println!("done!");
}