mirror of https://github.com/dnomd343/klotski.git
				
				
			
				 3 changed files with 141 additions and 36 deletions
			
			
		@ -1,58 +1,98 @@ | 
				
			|||
use std::fmt; | 
				
			|||
 | 
				
			|||
#[derive(Debug)] | 
				
			|||
pub(crate) struct Duration { | 
				
			|||
    picos: u64 | 
				
			|||
} | 
				
			|||
 | 
				
			|||
impl Duration { | 
				
			|||
    #[allow(dead_code)] | 
				
			|||
    pub(crate) fn from_ns(ns: f64) -> Duration { | 
				
			|||
        Duration { | 
				
			|||
            picos: (ns * (1_000 as f64)) as u64 | 
				
			|||
    #[inline] | 
				
			|||
    fn to_ps(&self) -> f64 { | 
				
			|||
        self.picos as f64 / (1 as f64) | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[inline] | 
				
			|||
    fn to_ns(&self) -> f64 { | 
				
			|||
        self.picos as f64 / (1_000 as f64) | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[allow(dead_code)] | 
				
			|||
    pub(crate) fn from_us(us: f64) -> Duration { | 
				
			|||
        Duration { | 
				
			|||
            picos: (us * (1_000_000 as f64)) as u64 | 
				
			|||
    #[inline] | 
				
			|||
    fn to_us(&self) -> f64 { | 
				
			|||
        self.picos as f64 / (1_000_000 as f64) | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[inline] | 
				
			|||
    fn to_ms(&self) -> f64 { | 
				
			|||
        self.picos as f64 / (1_000_000_000 as f64) | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
    #[allow(dead_code)] | 
				
			|||
    pub(crate) fn from_ms(ms: f64) -> Duration { | 
				
			|||
        Duration { | 
				
			|||
            picos: (ms * (1_000_000_000 as f64)) as u64 | 
				
			|||
impl Duration { | 
				
			|||
    #[inline] | 
				
			|||
    fn to_ps_str(&self) -> String { | 
				
			|||
        format!("{:.03}ps", self.to_ps()) | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[inline] | 
				
			|||
    fn to_ns_str(&self) -> String { | 
				
			|||
        format!("{:.03}ns", self.to_ns()) | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[inline] | 
				
			|||
    fn to_us_str(&self) -> String { | 
				
			|||
        format!("{:.03}us", self.to_us()) | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[inline] | 
				
			|||
    fn to_ms_str(&self) -> String { | 
				
			|||
        format!("{:.03}ms", self.to_ms()) | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
impl Duration { | 
				
			|||
    #[inline] | 
				
			|||
    #[allow(dead_code)] | 
				
			|||
    pub(crate) fn from_s(s: f64) -> Duration { | 
				
			|||
    pub(crate) fn from_ps(ps: f64) -> Duration { | 
				
			|||
        Duration { | 
				
			|||
            picos: (s * (1_000_000_000_000 as i64 as f64)) as u64 | 
				
			|||
            picos: (ps * (1 as f64)) as u64 | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[inline] | 
				
			|||
    #[allow(dead_code)] | 
				
			|||
    pub(crate) fn to_ns(&self) -> String { | 
				
			|||
        let tmp = self.picos as f64 / (1_000 as f64); | 
				
			|||
        format!("{:.03}ns", tmp) | 
				
			|||
    pub(crate) fn from_ns(ns: f64) -> Duration { | 
				
			|||
        Duration { | 
				
			|||
            picos: (ns * (1_000 as f64)) as u64 | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[inline] | 
				
			|||
    #[allow(dead_code)] | 
				
			|||
    pub(crate) fn to_us(&self) -> String { | 
				
			|||
        let tmp = self.picos as f64 / (1_000_000 as f64); | 
				
			|||
        format!("{:.03}us", tmp) | 
				
			|||
    pub(crate) fn from_us(us: f64) -> Duration { | 
				
			|||
        Duration { | 
				
			|||
            picos: (us * (1_000_000 as f64)) as u64 | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    #[inline] | 
				
			|||
    #[allow(dead_code)] | 
				
			|||
    pub(crate) fn to_ms(&self) -> String { | 
				
			|||
        let tmp = self.picos as f64 / (1_000_000_000 as f64); | 
				
			|||
        format!("{:.03}ms", tmp) | 
				
			|||
    pub(crate) fn from_ms(ms: f64) -> Duration { | 
				
			|||
        Duration { | 
				
			|||
            picos: (ms * (1_000_000_000 as f64)) as u64 | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
    #[allow(dead_code)] | 
				
			|||
    pub(crate) fn to_s(&self) -> String { | 
				
			|||
        let tmp = self.picos as f64 / (1_000_000_000_000 as i64 as f64); | 
				
			|||
        format!("{:.03}s", tmp) | 
				
			|||
impl fmt::Display for Duration { | 
				
			|||
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | 
				
			|||
        write!(f, "{}", if self.picos < 1000 { | 
				
			|||
            self.to_ps_str() | 
				
			|||
        } else if self.picos < 1_000_000 { | 
				
			|||
            self.to_ns_str() | 
				
			|||
        } else if self.picos < 1_000_000_000 { | 
				
			|||
            self.to_us_str() | 
				
			|||
        } else { | 
				
			|||
            self.to_ms_str() | 
				
			|||
        }) | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
@ -1,18 +1,35 @@ | 
				
			|||
mod ffi; | 
				
			|||
 | 
				
			|||
mod chore; | 
				
			|||
 | 
				
			|||
use chore::Duration; | 
				
			|||
 | 
				
			|||
pub fn demo() { | 
				
			|||
 | 
				
			|||
    use ffi::*; | 
				
			|||
 | 
				
			|||
pub fn demo() { | 
				
			|||
    // println!("demo: {}", Duration::from_ps(233 as f64).to_string());
 | 
				
			|||
    // println!("demo: {}", Duration::from_ns(233 as f64).to_string());
 | 
				
			|||
    // println!("demo: {}", Duration::from_us(233 as f64).to_string());
 | 
				
			|||
    // println!("demo: {}", Duration::from_ms(233 as f64).to_string());
 | 
				
			|||
    // println!("demo: {}", Duration::from_ms(233000 as f64).to_string());
 | 
				
			|||
 | 
				
			|||
    println!("warm up: {}", warm_up(0x100_0000)); | 
				
			|||
 | 
				
			|||
    println!("range flip: {}", range_flip()); | 
				
			|||
 | 
				
			|||
    println!("basic ranges: {}", basic_ranges().unwrap()); | 
				
			|||
    println!("all cases: {}", all_cases().unwrap()); | 
				
			|||
 | 
				
			|||
    preparation(); | 
				
			|||
 | 
				
			|||
    println!("warm up: {}", warm_up(0x100_0000).to_ms()); | 
				
			|||
    println!("raw code check: {}", raw_code_check().unwrap()); | 
				
			|||
    println!("short code check: {}", short_code_check().unwrap()); | 
				
			|||
    println!("common code check: {}", common_code_check().unwrap()); | 
				
			|||
 | 
				
			|||
    println!("range flip: {}", range_flip().to_ns()); | 
				
			|||
    println!("raw code check random: {}", raw_code_check_random()); | 
				
			|||
    println!("short code check random: {}", short_code_check_random()); | 
				
			|||
    println!("common code check random: {}", common_code_check_random()); | 
				
			|||
 | 
				
			|||
    println!("basic ranges: {}", basic_ranges().unwrap().to_ms()); | 
				
			|||
    println!("all cases: {}", all_cases().unwrap().to_ms()); | 
				
			|||
    println!("benchmark complete"); | 
				
			|||
 | 
				
			|||
} | 
				
			|||
 | 
				
			|||
					Loading…
					
					
				
		Reference in new issue