aboutsummaryrefslogtreecommitdiff
path: root/challenge-259/barroff/raku/ch-1.p6
blob: b4c7923b7d543056c2366697452766ac2c804342 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env raku

use v6.d;

sub banking-day-offset(Date:D $start_date, Int:D $offset, @bank_holidays = [] --> Date) {
    return banking-day-offset($start_date.succ, $offset, @bank_holidays) if $start_date.day-of-week ∈ (6, 7);
    return banking-day-offset($start_date.succ, $offset, @bank_holidays) if $start_date@bank_holidays;
    return $start_date if $offset == 0;
    return banking-day-offset($start_date.succ, $offset - 1, @bank_holidays);
}

#| Run test cases
multi sub MAIN('test') {
    use Test;
    plan 2;

    is banking-day-offset(Date.new('2018-06-28'), 3, [Date.new('2018-07-03')]),
        Date.new('2018-07-04'), 'works for 2018-07-04';
    is banking-day-offset(Date.new('2018-06-28'), 3),
        Date.new('2018-07-03'), 'works for 2018-07-03';
}