#[macro_use]
extern crate bencher;
extern crate bdays;
extern crate chrono;

use bdays::HolidayCalendar;
use bencher::Bencher;

fn bench_weekendsonly(bench: &mut Bencher) {
    let cal = bdays::calendars::WeekendsOnly;
    let d0 = chrono::NaiveDate::from_ymd(2015, 06, 29);
    let d1 = chrono::NaiveDate::from_ymd(2100, 12, 20);

    bench.iter(|| {
        cal.bdays(d0, d1);
    })
}

fn bench_brsettlement(bench: &mut Bencher) {
    let cal = bdays::calendars::brazil::BRSettlement;
    let d0 = chrono::NaiveDate::from_ymd(2015, 06, 29);
    let d1 = chrono::NaiveDate::from_ymd(2100, 12, 20);

    bench.iter(|| {
        cal.bdays(d0, d1);
    })
}

fn bench_brsettlement_cached(bench: &mut Bencher) {
    let cal = bdays::calendars::brazil::BRSettlement;
    let d0 = chrono::NaiveDate::from_ymd(2015, 06, 29);
    let d1 = chrono::NaiveDate::from_ymd(2100, 12, 20);

    let cached_cal = bdays::HolidayCalendarCache::new(
        cal,
        chrono::NaiveDate::from_ymd(1980, 1, 1),
        chrono::NaiveDate::from_ymd(2100, 12, 31),
    );

    bench.iter(|| {
        cached_cal.bdays(d0, d1);
    })
}

benchmark_group!(
    benches,
    bench_weekendsonly,
    bench_brsettlement,
    bench_brsettlement_cached
);
benchmark_main!(benches);
