rustogram 0.1.4

A rust port of HdrHistogram
Documentation
extern crate rustogram;
const HIGHEST_TRACKABLE_VALUE: i64 = 3600 * 1000 * 1000;
const NUMBER_OF_SIGNIFICANT_VALUE_DIGITS: i32 = 3;
const TEST_VALUE_LEVEL: i64 = 4;

use rustogram::histogram::*;

#[test]
fn test_empty_histogram() {
    let histogram = new_histogram(HIGHEST_TRACKABLE_VALUE, NUMBER_OF_SIGNIFICANT_VALUE_DIGITS);

    assert_eq!(0, histogram.get_min_value());
    assert_eq!(0, histogram.get_max_value());
    assert_eq!(0.0, histogram.get_mean());
    assert_eq!(0.0, histogram.get_std_deviation());
    assert_eq!(100.0, histogram.get_percentile_at_or_below_value(0));
}

#[test]
fn test_construction_argument_gets() {
    let histogram = new_histogram(HIGHEST_TRACKABLE_VALUE, NUMBER_OF_SIGNIFICANT_VALUE_DIGITS);

    assert_eq!(1, histogram.get_lowest_discernible_value());
    assert_eq!(HIGHEST_TRACKABLE_VALUE, histogram.get_highest_trackable_value());
    assert_eq!(NUMBER_OF_SIGNIFICANT_VALUE_DIGITS, histogram.get_number_of_significant_value_digits());
}

#[test]
fn test_record_value() {
    let mut histogram = new_histogram(HIGHEST_TRACKABLE_VALUE, NUMBER_OF_SIGNIFICANT_VALUE_DIGITS);

    histogram.record_value(TEST_VALUE_LEVEL);

    assert_eq!(1, histogram.get_total_count());
    assert_eq!(1, histogram.get_count_at_value(TEST_VALUE_LEVEL));
    assert_eq!(TEST_VALUE_LEVEL, histogram.get_max_value());
}

#[test]
fn test_construction_with_large_numbers() {
    let mut histogram = new_histogram_lower_bound(20000000, 100000000, 5);

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

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

#[test]
fn test_reset() {
    let mut histogram = new_histogram(HIGHEST_TRACKABLE_VALUE, NUMBER_OF_SIGNIFICANT_VALUE_DIGITS);

    histogram.record_value(TEST_VALUE_LEVEL);

    histogram.reset();

    assert_eq!(0, histogram.get_count_at_value(TEST_VALUE_LEVEL));
    assert_eq!(0, histogram.get_total_count());
    verify_max_value(histogram);
}

#[test]
fn test_get_min_value() {
    let mut histogram = new_histogram(HIGHEST_TRACKABLE_VALUE, NUMBER_OF_SIGNIFICANT_VALUE_DIGITS);

    histogram.record_value(1_000);
    histogram.record_value(1_000_000);

    assert_eq!(1_000, histogram.get_min_value());
}

#[test]
fn test_get_max_value() {
   let mut histogram = new_histogram(HIGHEST_TRACKABLE_VALUE, NUMBER_OF_SIGNIFICANT_VALUE_DIGITS);
    histogram.record_value(1_000);
    histogram.record_value(1_000_000);

    assert_eq!(1_000_000, histogram.get_max_value());
}

fn verify_max_value(histogram: Histogram) {
    let mut computed_max_value: i64 = 0;
    for i in 0..histogram.get_counts_array_length() {
        if histogram.get_count_at_index(i) > 0 {
            computed_max_value = histogram.value_from_index(i);
        }
    }

    computed_max_value = if computed_max_value == 0 { 0 } else { histogram.highest_equivalent_value(computed_max_value) };

    assert_eq!(computed_max_value, histogram.get_max_value());
}