Skip to content

Commit

Permalink
Use more consistent measure for benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
jhpratt committed Aug 17, 2021
1 parent 102437e commit e52e355
Show file tree
Hide file tree
Showing 15 changed files with 247 additions and 230 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ libc = "0.2.98"

[dev-dependencies]
criterion = { version = "0.3.5", features = ["html_reports"] }
criterion-cycles-per-byte = "0.1.2"
rand = { version = "0.8.4", default-features = false }
serde = { version = "1.0.126", default-features = false }
serde_test = "1.0.126"
Expand Down
71 changes: 36 additions & 35 deletions benchmarks/date.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use criterion::Bencher;
use criterion_cycles_per_byte::CyclesPerByte;
use time::ext::{NumericalDuration, NumericalStdDuration};
use time::macros::date;
use time::{Date, Month, Time, Weekday};
Expand All @@ -7,40 +8,40 @@ setup_benchmark! {
"Date",

// region: constructors
fn from_calendar_date(ben: &mut Bencher<'_>) {
fn from_calendar_date(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| Date::from_calendar_date(2019, Month::January, 1));
ben.iter(|| Date::from_calendar_date(2019, Month::December, 31));
ben.iter(|| Date::from_calendar_date(2020, Month::January, 1));
ben.iter(|| Date::from_calendar_date(2020, Month::December, 31));
}

fn from_ordinal_date(ben: &mut Bencher<'_>) {
fn from_ordinal_date(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| Date::from_ordinal_date(2019, 1));
ben.iter(|| Date::from_ordinal_date(2019, 365));
ben.iter(|| Date::from_ordinal_date(2020, 1));
ben.iter(|| Date::from_ordinal_date(2020, 366));
}

fn from_iso_week_date(ben: &mut Bencher<'_>) {
fn from_iso_week_date(ben: &mut Bencher<'_, CyclesPerByte>) {
use Weekday::*;
ben.iter(|| Date::from_iso_week_date(2019, 1, Tuesday));
ben.iter(|| Date::from_iso_week_date(2020, 1, Tuesday));
ben.iter(|| Date::from_iso_week_date(2020, 1, Wednesday));
ben.iter(|| Date::from_iso_week_date(2020, 53, Thursday));
}

fn from_julian_day(ben: &mut Bencher<'_>) {
fn from_julian_day(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| Date::from_julian_day(-34_803_190));
}
// endregion constructors

// region: getters
fn year(ben: &mut Bencher<'_>) {
fn year(ben: &mut Bencher<'_, CyclesPerByte>) {
let d = date!(2019-002);
ben.iter(|| d.year());
}

fn month(ben: &mut Bencher<'_>) {
fn month(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).month());
ben.iter(|| date!(2019-02-01).month());
ben.iter(|| date!(2019-03-01).month());
Expand All @@ -55,7 +56,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).month());
}

fn day(ben: &mut Bencher<'_>) {
fn day(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).day());
ben.iter(|| date!(2019-02-01).day());
ben.iter(|| date!(2019-03-01).day());
Expand All @@ -70,7 +71,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).day());
}

fn ordinal(ben: &mut Bencher<'_>) {
fn ordinal(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).ordinal());
ben.iter(|| date!(2019-02-01).ordinal());
ben.iter(|| date!(2019-03-01).ordinal());
Expand All @@ -85,7 +86,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).ordinal());
}

fn iso_week(ben: &mut Bencher<'_>) {
fn iso_week(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).iso_week());
ben.iter(|| date!(2019-02-01).iso_week());
ben.iter(|| date!(2019-03-01).iso_week());
Expand All @@ -100,7 +101,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).iso_week());
}

fn sunday_based_week(ben: &mut Bencher<'_>) {
fn sunday_based_week(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).sunday_based_week());
ben.iter(|| date!(2019-02-01).sunday_based_week());
ben.iter(|| date!(2019-03-01).sunday_based_week());
Expand All @@ -115,7 +116,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).sunday_based_week());
}

fn monday_based_week(ben: &mut Bencher<'_>) {
fn monday_based_week(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).monday_based_week());
ben.iter(|| date!(2019-02-01).monday_based_week());
ben.iter(|| date!(2019-03-01).monday_based_week());
Expand All @@ -130,7 +131,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).monday_based_week());
}

fn to_calendar_date(ben: &mut Bencher<'_>) {
fn to_calendar_date(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).to_calendar_date());
ben.iter(|| date!(2019-02-01).to_calendar_date());
ben.iter(|| date!(2019-03-01).to_calendar_date());
Expand All @@ -145,7 +146,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).to_calendar_date());
}

fn to_ordinal_date(ben: &mut Bencher<'_>) {
fn to_ordinal_date(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).to_ordinal_date());
ben.iter(|| date!(2019-02-01).to_ordinal_date());
ben.iter(|| date!(2019-03-01).to_ordinal_date());
Expand All @@ -160,7 +161,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).to_ordinal_date());
}

fn to_iso_week_date(ben: &mut Bencher<'_>) {
fn to_iso_week_date(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).to_iso_week_date());
ben.iter(|| date!(2019-02-01).to_iso_week_date());
ben.iter(|| date!(2019-03-01).to_iso_week_date());
Expand All @@ -175,7 +176,7 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).to_iso_week_date());
}

fn weekday(ben: &mut Bencher<'_>) {
fn weekday(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).weekday());
ben.iter(|| date!(2019-02-01).weekday());
ben.iter(|| date!(2019-03-01).weekday());
Expand All @@ -190,23 +191,23 @@ setup_benchmark! {
ben.iter(|| date!(2019-12-01).weekday());
}

fn next_day(ben: &mut Bencher<'_>) {
fn next_day(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).next_day());
ben.iter(|| date!(2019-02-01).next_day());
ben.iter(|| date!(2019-12-31).next_day());
ben.iter(|| date!(2020-12-31).next_day());
ben.iter(|| Date::MAX.next_day());
}

fn previous_day(ben: &mut Bencher<'_>) {
fn previous_day(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-02).previous_day());
ben.iter(|| date!(2019-02-01).previous_day());
ben.iter(|| date!(2020-01-01).previous_day());
ben.iter(|| date!(2021-01-01).previous_day());
ben.iter(|| Date::MIN.previous_day());
}

fn to_julian_day(ben: &mut Bencher<'_>) {
fn to_julian_day(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-01).to_julian_day());
ben.iter(|| date!(2019-02-01).to_julian_day());
ben.iter(|| date!(2019-03-01).to_julian_day());
Expand All @@ -223,43 +224,43 @@ setup_benchmark! {
// endregion getters

// region: attach time
fn midnight(ben: &mut Bencher<'_>) {
fn midnight(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(1970-01-01).midnight());
}

fn with_time(ben: &mut Bencher<'_>) {
fn with_time(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(1970-01-01).with_time(Time::MIDNIGHT));
}

fn with_hms(ben: &mut Bencher<'_>) {
fn with_hms(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(1970-01-01).with_hms(0, 0, 0));
}

fn with_hms_milli(ben: &mut Bencher<'_>) {
fn with_hms_milli(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(1970-01-01).with_hms_milli(0, 0, 0, 0));
}

fn with_hms_micro(ben: &mut Bencher<'_>) {
fn with_hms_micro(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(1970-01-01).with_hms_micro(0, 0, 0, 0));
}

fn with_hms_nano(ben: &mut Bencher<'_>) {
fn with_hms_nano(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(1970-01-01).with_hms_nano(0, 0, 0, 0));
}
// endregion attach time

// region: trait impls
fn add(ben: &mut Bencher<'_>) {
fn add(ben: &mut Bencher<'_, CyclesPerByte>) {
let dt = 5.days();
ben.iter(|| date!(2019-01-01) + dt);
}

fn add_std(ben: &mut Bencher<'_>) {
fn add_std(ben: &mut Bencher<'_, CyclesPerByte>) {
let dt = 5.std_days();
ben.iter(|| date!(2019-01-01) + dt);
}

fn add_assign(ben: &mut Bencher<'_>) {
fn add_assign(ben: &mut Bencher<'_, CyclesPerByte>) {
let dt = 1.days();
iter_batched_ref!(
ben,
Expand All @@ -268,7 +269,7 @@ setup_benchmark! {
);
}

fn add_assign_std(ben: &mut Bencher<'_>) {
fn add_assign_std(ben: &mut Bencher<'_, CyclesPerByte>) {
let dt = 1.std_days();
iter_batched_ref!(
ben,
Expand All @@ -277,17 +278,17 @@ setup_benchmark! {
);
}

fn sub(ben: &mut Bencher<'_>) {
fn sub(ben: &mut Bencher<'_, CyclesPerByte>) {
let dt = 5.days();
ben.iter(|| date!(2019-01-06) - dt);
}

fn sub_std(ben: &mut Bencher<'_>) {
fn sub_std(ben: &mut Bencher<'_, CyclesPerByte>) {
let dt = 5.std_days();
ben.iter(|| date!(2019-01-06) - dt);
}

fn sub_assign(ben: &mut Bencher<'_>) {
fn sub_assign(ben: &mut Bencher<'_, CyclesPerByte>) {
let dt = 1.days();
iter_batched_ref!(
ben,
Expand All @@ -296,7 +297,7 @@ setup_benchmark! {
);
}

fn sub_assign_std(ben: &mut Bencher<'_>) {
fn sub_assign_std(ben: &mut Bencher<'_, CyclesPerByte>) {
let dt = 1.std_days();
iter_batched_ref!(
ben,
Expand All @@ -305,19 +306,19 @@ setup_benchmark! {
);
}

fn sub_self(ben: &mut Bencher<'_>) {
fn sub_self(ben: &mut Bencher<'_, CyclesPerByte>) {
ben.iter(|| date!(2019-01-02) - date!(2019-01-01));
}

fn partial_ord(ben: &mut Bencher<'_>) {
fn partial_ord(ben: &mut Bencher<'_, CyclesPerByte>) {
let first = date!(2019-01-01);
let second = date!(2019-01-02);
ben.iter(|| first.partial_cmp(&first));
ben.iter(|| first.partial_cmp(&second));
ben.iter(|| second.partial_cmp(&first));
}

fn ord(ben: &mut Bencher<'_>) {
fn ord(ben: &mut Bencher<'_, CyclesPerByte>) {
let first = date!(2019-01-01);
let second = date!(2019-01-02);
ben.iter(|| first.cmp(&first));
Expand Down
Loading

0 comments on commit e52e355

Please sign in to comment.