linux-procfs 0.3.15

The linux-procfs is the data snap library for the `/proc/` filesystem on the linux os.
Documentation
use linux_procfs::System;

macro_rules! base_path_intel {
    () => {
        "fixtures/linux-4.4.0-cpu-intel"
    };
}

macro_rules! base_path_amd {
    () => {
        "fixtures/linux-4.4.0-cpu-amd"
    };
}

macro_rules! base_path_5_4_intel {
    () => {
        "fixtures/linux-5.4.0-cpu-intel"
    };
}

macro_rules! assert_eq_time_in_state {
    ($tis:expr => [$step:tt $value:tt]) => {
        let tis = &$tis;
        assert_eq!(tis.step, $step);
        assert_eq!(tis.value, $value);
    };
}

#[test]
fn test_cpufreqs_intel() {
    let mut sys = System::new(base_path_intel!());
    let max_cpu_num = sys.get_max_cpu_num();
    assert_eq!(max_cpu_num, 4);
    let cpufreqs = sys.get_cpufreqs(max_cpu_num);
    //
    assert_eq!(cpufreqs.cpufreqs[0].cur, 1870000);
    assert_eq!(cpufreqs.cpufreqs[0].max, 2403000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[0] => [2403000 3246210]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[1] => [2136000 2535951]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[2] => [1870000 7527266]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[3] => [1603000 33113100]);
    //
    assert_eq!(cpufreqs.cpufreqs[1].cur, 1870000);
    assert_eq!(cpufreqs.cpufreqs[1].max, 2403000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[0] => [2403000 3619917]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[1] => [2136000 1612091]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[2] => [1870000 5545859]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[3] => [1603000 35644660]);
    //
    assert_eq!(cpufreqs.cpufreqs[2].cur, 2136000);
    assert_eq!(cpufreqs.cpufreqs[2].max, 2403000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[0] => [2403000 4117556]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[1] => [2136000 1840436]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[2] => [1870000 6053471]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[3] => [1603000 34411063]);
    //
    assert_eq!(cpufreqs.cpufreqs[3].cur, 1603000);
    assert_eq!(cpufreqs.cpufreqs[3].max, 2403000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[0] => [2403000 4146582]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[1] => [2136000 1959969]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[2] => [1870000 6282662]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[3] => [1603000 34033314]);
}

#[test]
fn test_cpufreqs_amd() {
    let mut sys = System::new(base_path_amd!());
    let max_cpu_num = sys.get_max_cpu_num();
    assert_eq!(max_cpu_num, 4);
    let cpufreqs = sys.get_cpufreqs(max_cpu_num);
    //
    assert_eq!(cpufreqs.cpufreqs[0].cur, 2600000);
    assert_eq!(cpufreqs.cpufreqs[0].max, 2600000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[0] => [2600000 3859247]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[1] => [1900000 2383908]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[2] => [1400000 5079736]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[3] => [800000 3574662]);
    //
    assert_eq!(cpufreqs.cpufreqs[1].cur, 1400000);
    assert_eq!(cpufreqs.cpufreqs[1].max, 2600000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[0] => [2600000 3578210]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[1] => [1900000 2328768]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[2] => [1400000 5081434]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[3] => [800000 3909139]);
    //
    assert_eq!(cpufreqs.cpufreqs[2].cur, 800000);
    assert_eq!(cpufreqs.cpufreqs[2].max, 2600000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[0] => [2600000 3798695]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[1] => [1900000 2318342]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[2] => [1400000 5070897]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[3] => [800000 3709618]);
    //
    assert_eq!(cpufreqs.cpufreqs[3].cur, 1400000);
    assert_eq!(cpufreqs.cpufreqs[3].max, 2600000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[0] => [2600000 3763479]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[1] => [1900000 2354890]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[2] => [1400000 5101863]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[3] => [800000 3677320]);
}

#[test]
fn test_cpufreqs_5_4_intel() {
    let mut sys = System::new(base_path_5_4_intel!());
    let max_cpu_num = sys.get_max_cpu_num();
    assert_eq!(max_cpu_num, 4);
    let cpufreqs = sys.get_cpufreqs(max_cpu_num);
    //
    assert_eq!(cpufreqs.cpufreqs[0].cur, 2403000);
    assert_eq!(cpufreqs.cpufreqs[0].max, 2403000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[0] => [2403000 2606190]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[1] => [2136000 2022157]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[2] => [1870000 9230453]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[0].time_in_states[3] => [1603000 10607598]);
    //
    assert_eq!(cpufreqs.cpufreqs[1].cur, 1870000);
    assert_eq!(cpufreqs.cpufreqs[1].max, 2403000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[0] => [2403000 1401483]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[1] => [2136000 2025987]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[2] => [1870000 9639583]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[1].time_in_states[3] => [1603000 11399346]);
    //
    assert_eq!(cpufreqs.cpufreqs[2].cur, 1870000);
    assert_eq!(cpufreqs.cpufreqs[2].max, 2403000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[0] => [2403000 1518462]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[1] => [2136000 2292317]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[2] => [1870000 10271074]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[2].time_in_states[3] => [1603000 10384547]);
    //
    assert_eq!(cpufreqs.cpufreqs[3].cur, 2136000);
    assert_eq!(cpufreqs.cpufreqs[3].max, 2403000);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[0] => [2403000 1547880]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[1] => [2136000 2234251]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[2] => [1870000 9946724]);
    assert_eq_time_in_state!(cpufreqs.cpufreqs[3].time_in_states[3] => [1603000 10737548]);
}