#!/usr/bin/env perl use strict; use warnings; use Time::Piece; use Time::Seconds; use Test::More; my @ranges = ( ['11:00', '13:00', '12:00', '12:00:00'], ['23:00', '01:00', '00:00', '00:00:00'], ['23:30', '00:30', '00:00', '00:00:00'], ['12:00', '12:00', '12:00', '12:00:00'], ['00:00', '00:00', '00:00', '00:00:00'], ['00:00', '00:02', '00:01', '00:01:00'], ['00:00', '00:01', '00:00', '00:00:30'], ['23:58', '00:00', '23:59', '23:59:00'], ['23:59', '00:00', '23:59', '23:59:30'], ); plan tests => @ranges * 2; test_average($_) for @ranges; sub test_average { my ($range) = @_; my $t0 = get_tp($range->[0]); my $t1 = get_tp($range->[1]); $t1 += ONE_DAY if $t1 < $t0; my $avg = ($t1->epoch + $t0->epoch) / 2; ok( Time::Piece->strptime($avg, '%s')->strftime('%H:%M') eq $range->[2], "$range->[0] -> $range->[1]: Avg = $range->[2] [HH:MM]" ); ok( Time::Piece->strptime($avg, '%s')->strftime('%H:%M:%S') eq $range->[3], "$range->[0] -> $range->[1]: Avg = $range->[3] [HH:MM:SS]" ); } sub get_tp { Time::Piece->strptime(shift, '%H:%M') }