use criterion::Bencher; use time::ext::{NumericalDuration, NumericalStdDuration}; use time::Duration;
setup_benchmark! { "Duration",
fn is_zero(ben: &mut Bencher<'_>) { let a = (-1).nanoseconds(); let b = 0.seconds(); let c = 1.nanoseconds();
ben.iter(|| a.is_zero());
ben.iter(|| b.is_zero());
ben.iter(|| c.is_zero());
}
fn is_negative(ben: &mut Bencher<'_>) { let a = (-1).seconds(); let b = 0.seconds(); let c = 1.seconds();
ben.iter(|| a.is_negative());
ben.iter(|| b.is_negative());
ben.iter(|| c.is_negative());
}
fn is_positive(ben: &mut Bencher<'_>) { let a = (-1).seconds(); let b = 0.seconds(); let c = 1.seconds();
ben.iter(|| a.is_positive());
ben.iter(|| b.is_positive());
ben.iter(|| c.is_positive());
}
fn abs(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 0.seconds(); let c = (-1).seconds();
ben.iter(|| a.abs());
ben.iter(|| b.abs());
ben.iter(|| c.abs());
}
fn unsigned_abs(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 0.seconds(); let c = (-1).seconds();
ben.iter(|| a.unsigned_abs());
ben.iter(|| b.unsigned_abs());
ben.iter(|| c.unsigned_abs());
}
fn whole_weeks(ben: &mut Bencher<'_>) { let a = Duration::weeks(1); let b = Duration::weeks(-1); let c = Duration::days(6); let d = Duration::days(-6);
ben.iter(|| a.whole_weeks());
ben.iter(|| b.whole_weeks());
ben.iter(|| c.whole_weeks());
ben.iter(|| d.whole_weeks());
}
fn whole_days(ben: &mut Bencher<'_>) { let a = Duration::days(1); let b = Duration::days(-1); let c = Duration::hours(23); let d = Duration::hours(-23);
ben.iter(|| a.whole_days());
ben.iter(|| b.whole_days());
ben.iter(|| c.whole_days());
ben.iter(|| d.whole_days());
}
fn whole_hours(ben: &mut Bencher<'_>) { let a = Duration::hours(1); let b = Duration::hours(-1); let c = Duration::minutes(59); let d = Duration::minutes(-59);
ben.iter(|| a.whole_hours());
ben.iter(|| b.whole_hours());
ben.iter(|| c.whole_hours());
ben.iter(|| d.whole_hours());
}
fn whole_minutes(ben: &mut Bencher<'_>) { let a = 1.minutes(); let b = (-1).minutes(); let c = 59.seconds(); let d = (-59).seconds();
ben.iter(|| a.whole_minutes());
ben.iter(|| b.whole_minutes());
ben.iter(|| c.whole_minutes());
ben.iter(|| d.whole_minutes());
}
fn whole_seconds(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = (-1).seconds(); let c = 1.minutes(); let d = (-1).minutes();
ben.iter(|| a.whole_seconds());
ben.iter(|| b.whole_seconds());
ben.iter(|| c.whole_seconds());
ben.iter(|| d.whole_seconds());
}
fn as_seconds_f64(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = (-1).seconds(); let c = 1.minutes(); let d = (-1).minutes(); let e = 1.5.seconds(); let f = (-1.5).seconds();
ben.iter(|| a.as_seconds_f64());
ben.iter(|| b.as_seconds_f64());
ben.iter(|| c.as_seconds_f64());
ben.iter(|| d.as_seconds_f64());
ben.iter(|| e.as_seconds_f64());
ben.iter(|| f.as_seconds_f64());
}
fn as_seconds_f32(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = (-1).seconds(); let c = 1.minutes(); let d = (-1).minutes(); let e = 1.5.seconds(); let f = (-1.5).seconds();
ben.iter(|| a.as_seconds_f32());
ben.iter(|| b.as_seconds_f32());
ben.iter(|| c.as_seconds_f32());
ben.iter(|| d.as_seconds_f32());
ben.iter(|| e.as_seconds_f32());
ben.iter(|| f.as_seconds_f32());
}
fn whole_milliseconds(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = (-1).seconds(); let c = 1.milliseconds(); let d = (-1).milliseconds();
ben.iter(|| a.whole_milliseconds());
ben.iter(|| b.whole_milliseconds());
ben.iter(|| c.whole_milliseconds());
ben.iter(|| d.whole_milliseconds());
}
fn subsec_milliseconds(ben: &mut Bencher<'_>) { let a = 1.4.seconds(); let b = (-1.4).seconds();
ben.iter(|| a.subsec_milliseconds());
ben.iter(|| b.subsec_milliseconds());
}
fn whole_microseconds(ben: &mut Bencher<'_>) { let a = 1.milliseconds(); let b = (-1).milliseconds(); let c = 1.microseconds(); let d = (-1).microseconds();
ben.iter(|| a.whole_microseconds());
ben.iter(|| b.whole_microseconds());
ben.iter(|| c.whole_microseconds());
ben.iter(|| d.whole_microseconds());
}
fn subsec_microseconds(ben: &mut Bencher<'_>) { let a = 1.0004.seconds(); let b = (-1.0004).seconds();
ben.iter(|| a.subsec_microseconds());
ben.iter(|| b.subsec_microseconds());
}
fn whole_nanoseconds(ben: &mut Bencher<'_>) { let a = 1.microseconds(); let b = (-1).microseconds(); let c = 1.nanoseconds(); let d = (-1).nanoseconds();
ben.iter(|| a.whole_nanoseconds());
ben.iter(|| b.whole_nanoseconds());
ben.iter(|| c.whole_nanoseconds());
ben.iter(|| d.whole_nanoseconds());
}
fn subsec_nanoseconds(ben: &mut Bencher<'_>) { let a = 1.000_000_4.seconds(); let b = (-1.000_000_4).seconds();
ben.iter(|| a.subsec_nanoseconds());
ben.iter(|| b.subsec_nanoseconds());
}
fn checked_add(ben: &mut Bencher<'_>) { let a = 5.seconds(); let b = Duration::MAX; let c = (-5).seconds();
let a2 = 5.seconds(); let b2 = 1.nanoseconds(); let c2 = 5.seconds();
fn saturating_mul(ben: &mut Bencher<'_>) { let a = 5.seconds(); let b = 5.seconds(); let c = 5.seconds(); let d = Duration::MAX; let e = Duration::MIN; let f = Duration::MAX; let g = Duration::MIN;
fn try_from_std_duration(ben: &mut Bencher<'_>) { let a = 0.std_seconds(); let b = 1.std_seconds();
ben.iter(|| Duration::try_from(a));
ben.iter(|| Duration::try_from(b));
}
fn try_to_std_duration(ben: &mut Bencher<'_>) { let a = 0.seconds(); let b = 1.seconds(); let c = (-1).seconds();
ben.iter(|| StdDuration::try_from(a));
ben.iter(|| StdDuration::try_from(b));
ben.iter(|| StdDuration::try_from(c));
}
fn add(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 2.seconds(); let c = 500.milliseconds(); let d = (-1).seconds();
ben.iter(|| a + b + c + d);
}
fn add_std(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 2.std_seconds();
ben.iter(|| a + b);
}
fn std_add(ben: &mut Bencher<'_>) { let a = 1.std_seconds(); let b = 2.seconds();
ben.iter(|| a + b);
}
fn add_assign(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 500.milliseconds(); let c = (-1).seconds();
iter_batched_ref!(
ben,
|| 1.seconds(),
[
|duration| *duration += a,
|duration| *duration += b,
|duration| *duration += c,
]
);
}
fn add_assign_std(ben: &mut Bencher<'_>) { let a = 1.std_seconds(); let b = 500.std_milliseconds();
iter_batched_ref!(
ben,
|| 1.seconds(),
[
|duration| *duration += a,
|duration| *duration += b,
]
);
}
fn neg(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = (-1).seconds(); let c = 0.seconds();
ben.iter(|| -a);
ben.iter(|| -b);
ben.iter(|| -c);
}
fn sub(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 1.seconds(); let c = 1_500.milliseconds(); let d = 500.milliseconds(); let e = 1.seconds(); let f = (-1).seconds();
ben.iter(|| a - b);
ben.iter(|| b - c);
ben.iter(|| c - d);
ben.iter(|| d - e);
ben.iter(|| e - f);
ben.iter(|| f - a);
}
fn sub_std(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 2.std_seconds();
ben.iter(|| a - b);
}
fn std_sub(ben: &mut Bencher<'_>) { let a = 1.std_seconds(); let b = 2.seconds();
ben.iter(|| a - b);
}
fn sub_assign(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 500.milliseconds(); let c = (-1).seconds();
iter_batched_ref!(
ben,
|| 1.seconds(),
[
|duration| *duration -= a,
|duration| *duration -= b,
|duration| *duration -= c,
]
);
}
fn mul_int(ben: &mut Bencher<'_>) { let d = 1.seconds();
ben.iter(|| d * 2);
ben.iter(|| d * -2);
}
fn div(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 0.5.seconds();
ben.iter(|| a / b);
}
fn mul_float(ben: &mut Bencher<'_>) { let d = 1.seconds();
ben.iter(|| d * 1.5_f32);
ben.iter(|| d * 2.5_f32);
ben.iter(|| d * -1.5_f32);
ben.iter(|| d * 0_f32);
ben.iter(|| d * 1.5_f64);
ben.iter(|| d * 2.5_f64);
ben.iter(|| d * -1.5_f64);
ben.iter(|| d * 0_f64);
}
fn div_float(ben: &mut Bencher<'_>) { let d = 1.seconds();
ben.iter(|| d / 1_f32);
ben.iter(|| d / 2_f32);
ben.iter(|| d / -1_f32);
ben.iter(|| d / 1_f64);
ben.iter(|| d / 2_f64);
ben.iter(|| d / -1_f64);
}
fn partial_eq(ben: &mut Bencher<'_>) { let a = 1.minutes(); let b = (-1).minutes(); let c = 40.seconds();
ben.iter(|| a == b);
ben.iter(|| c == a);
}
fn partial_eq_std(ben: &mut Bencher<'_>) { let a = (-1).seconds(); let b = 1.std_seconds(); let c = (-1).minutes(); let d = 1.std_minutes(); let e = 40.seconds();
ben.iter(|| a == b);
ben.iter(|| c == d);
ben.iter(|| e == d);
}
fn std_partial_eq(ben: &mut Bencher<'_>) { let a = 1.std_seconds(); let b = (-1).seconds(); let c = 1.std_minutes(); let d = (-1).minutes(); let e = 40.std_seconds(); let f = 1.minutes();
ben.iter(|| a == b);
ben.iter(|| c == d);
ben.iter(|| e == f);
}
fn partial_ord(ben: &mut Bencher<'_>) { let a = 0.seconds(); let b = 1.seconds(); let c = (-1).seconds(); let d = 1.minutes(); let e = (-1).minutes();
ben.iter(|| a.partial_cmp(&a));
ben.iter(|| b.partial_cmp(&a));
ben.iter(|| b.partial_cmp(&c));
ben.iter(|| c.partial_cmp(&b));
ben.iter(|| a.partial_cmp(&c));
ben.iter(|| a.partial_cmp(&b));
ben.iter(|| c.partial_cmp(&a));
ben.iter(|| d.partial_cmp(&b));
ben.iter(|| e.partial_cmp(&c));
}
fn partial_ord_std(ben: &mut Bencher<'_>) { let a = 0.seconds(); let b = 0.std_seconds(); let c = 1.seconds(); let d = (-1).seconds(); let e = 1.std_seconds(); let f = 1.minutes(); let g = u64::MAX.std_seconds();
ben.iter(|| a.partial_cmp(&b));
ben.iter(|| c.partial_cmp(&b));
ben.iter(|| d.partial_cmp(&e));
ben.iter(|| a.partial_cmp(&e));
ben.iter(|| d.partial_cmp(&b));
ben.iter(|| f.partial_cmp(&e));
ben.iter(|| a.partial_cmp(&g));
}
fn std_partial_ord(ben: &mut Bencher<'_>) { let a = 0.std_seconds(); let b = 0.seconds(); let c = 1.std_seconds(); let d = (-1).seconds(); let e = 1.seconds(); let f = 1.std_minutes();
ben.iter(|| a.partial_cmp(&b));
ben.iter(|| c.partial_cmp(&b));
ben.iter(|| c.partial_cmp(&d));
ben.iter(|| a.partial_cmp(&d));
ben.iter(|| a.partial_cmp(&e));
ben.iter(|| f.partial_cmp(&e));
}
fn ord(ben: &mut Bencher<'_>) { let a = 1.seconds(); let b = 0.seconds(); let c = (-1).seconds(); let d = 1.minutes(); let e = (-1).minutes();
ben.iter(|| a > b);
ben.iter(|| a > c);
ben.iter(|| c < a);
ben.iter(|| b > c);
ben.iter(|| b < a);
ben.iter(|| c < b);
ben.iter(|| d > a);
ben.iter(|| e < c);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.