mod front_of_house;
mod mod_error_deal;
pub mod mod_template;
pub mod mod_trait;
mod mod_clouser;
use std::time::Duration;
use crate::mod_clouser::simulated_expensive_calculation;
use self::front_of_house::hosting;
pub fn eat_at_restaurant(){
crate::front_of_house::hosting::add_to_waitlist();
front_of_house::hosting::add_to_waitlist();
hosting::add_to_waitlist();
let mut meal = front_of_house::serving::back_of_house::Breakfast::summer("Rye");
meal.toast = String::from("Wheat");
println!("eat at restaurant : {}", meal.toast);
}
pub fn error_demo(){
mod_error_deal::error_deal();
mod_error_deal::read_username_from_file().expect("msg");
}
pub fn notify<T: mod_trait::Summary>(item: T){
println!("Breaking News! {}", item.summarize());
}
pub fn add_two(num: i32) -> i32{
num + 2
}
pub fn generate_work(intensity: u32, random_number: u32){
let mut expensive_closure = mod_clouser::Cacher::new(|num|{
println!("calculating slowly...");
std::thread::sleep(Duration::from_secs(2));
num
});
if intensity < 25{
println!("Today, do {} pushups", expensive_closure.value(intensity));
println!("Next, do {} situps", expensive_closure.value(intensity));
}else{
if random_number == 3{
println!("Take a break today! Remember to stay hydrated!");
}else{
println!("Today, run for {} minutes", expensive_closure.value(intensity));
}
}
}
#[cfg(test)]
mod testst{
use crate::mod_clouser::{shoes_in_my_size, Counter};
use super::*;
#[test]
fn it_works(){
assert_eq!(2 + 2, 4);
}
#[test]
fn another(){
}
#[test]
fn another_works() -> Result<(), String>{
let a = private_run()?;
Ok(())
}
fn private_run() -> Result<(), String>{
if 2 + 2 == 4{
Ok(())
}else {
Err(String::from("fdfsfsadf"))
}
}
#[test]
fn filter_by_size(){
let shoes = vec![
mod_clouser::Shoe::new(10, String::from("sneaker")),
mod_clouser::Shoe::new(13, String::from("sandal")),
mod_clouser::Shoe::new(10, String::from("boot")),
];
let in_my_size = mod_clouser::shoes_in_my_size(shoes, 10);
assert_eq!(in_my_size, vec![
mod_clouser::Shoe::new(10, String::from("sneaker")),
mod_clouser::Shoe::new(10, String::from("boot"))
])
}
#[test]
fn calling_next_directly(){
let mut counter = mod_clouser::Counter::new();
assert_eq!(counter.next(), Some(1));
assert_eq!(counter.next(), Some(2));
assert_eq!(counter.next(), Some(3));
assert_eq!(counter.next(), Some(4));
assert_eq!(counter.next(), Some(5));
assert_eq!(counter.next(), None);
assert_eq!(counter.next(), None);
assert_eq!(counter.next(), None);
assert_eq!(counter.next(), None);
}
#[test]
fn using_other_iterator_trait_methods(){
let sum: u32 = Counter::new().zip(Counter::new().skip(1)).map(|(a, b)|a*b).filter(|x|x % 3 == 0).sum();
assert_eq!(18, sum);
}
}