hdrhistogram 0.1.5

Binding to HdrHistogram_c library
Documentation
extern crate libc;
use libc::{c_int64, c_int32, c_double};

#[repr(C)]
struct hdr_histogram {
    lowest_trackable_value: c_int64,
    highest_trackable_value: c_int64,
    unit_magnitude: c_int32,
    significant_figures: c_int64,
    sub_bucket_half_count_magnitude: c_int32,
    sub_bucket_half_count: c_int32,
    sub_bucket_mask: c_int64,
    sub_bucket_count: c_int32,
    bucket_count: c_int32,
    min_value: c_int64,
    max_value: c_int64,
    normalizing_index_offset: c_int32,
    conversion_ratio: c_double,
    counts_len: c_int32,
    total_count: c_int64,
    counts: c_int64[0],
}

#[link(name = "hdr_histogram")]
extern {
}

#[cfg(test)]
mod test {
    use super::Histogram;
    use super::HistoBucketCfg;
    
    #[test]
    fn test_create() {
        let h = Histogram::init(1, 3600000000, 3).unwrap();

        assert_eq!(h.counts.len(), 23552);
    }

    #[test]
    fn test_invalid_init() {
        assert!(Histogram::init(0, 6481024, 2).is_err());
        assert!(Histogram::init(80, 110, 5).is_err());
    }

    #[test]
    fn test_create_with_large_values() {
        let h = Histogram::init(20000000, 100000000, 5).unwrap();

        h.record_value(100000000);
        h.record_value(20000000);
        h.record_value(30000000);

        assert!(h.values_are_equivalent(20000000, h.value_at_percentile(50.0)));
        assert!(h.values_are_equivalent(30000000, h.value_at_percentile(83.33)));
        assert!(h.values_are_equivalent(100000000, h.value_at_percentile(83.34)));
        assert!(h.values_are_equivalent(100000000, h.value_at_percentile(99.0)));
    }
}