aboutsummaryrefslogtreecommitdiff
path: root/test-suite/tests/linear.rs
blob: dab51f9b77e9e1f940e1ed0560271e02cc2bbc00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use std::time::{Duration, Instant};
use toml::Value;

const TOLERANCE: f64 = 2.0;

fn measure_time(entries: usize, f: impl Fn(usize) -> String) -> Duration {
    let start = Instant::now();
    let mut s = String::new();
    for i in 0..entries {
        s += &f(i);
        s += "entry = 42\n"
    }
    s.parse::<Value>().unwrap();
    Instant::now() - start
}

#[test]
fn linear_increase_map() {
    let time_1 = measure_time(100, |i| format!("[header_no_{}]\n", i));
    let time_4 = measure_time(400, |i| format!("[header_no_{}]\n", i));
    dbg!(time_1, time_4);
    // Now ensure that the deserialization time has increased linearly
    // (within a tolerance interval) instead of, say, quadratically
    assert!(time_4 > time_1.mul_f64(4.0 - TOLERANCE));
    assert!(time_4 < time_1.mul_f64(4.0 + TOLERANCE));
}

#[test]
fn linear_increase_array() {
    let time_1 = measure_time(100, |i| format!("[[header_no_{}]]\n", i));
    let time_4 = measure_time(400, |i| format!("[[header_no_{}]]\n", i));
    dbg!(time_1, time_4);
    // Now ensure that the deserialization time has increased linearly
    // (within a tolerance interval) instead of, say, quadratically
    assert!(time_4 > time_1.mul_f64(4.0 - TOLERANCE));
    assert!(time_4 < time_1.mul_f64(4.0 + TOLERANCE));
}