1#!/usr/bin/perl -w
2
3use strict;
4
5use Test::More tests => 16;
6
7use DateTime;
8
9# Borrowed from Matt Sergeant's Time::Piece
10
11# A table of MJD and components
12my @mjd = ( '51603.524' =>
13            { year   => 2000,
14              month  => 2,
15              day    => 29,
16              hour   => 12,
17              minute => 34,
18              second => 56,
19            },
20
21            '40598.574' =>
22            { year   => 1970,
23              month  => 1,
24              day    => 12,
25              hour   => 13,
26              minute => 46,
27              second => 51,
28            },
29
30            '52411.140' =>
31            { year   => 2002,
32              month  => 5,
33              day    => 17,
34              hour   => 3,
35              minute => 21,
36              second => 43,
37            },
38
39            '53568.547' =>
40            { year   => 2005,
41              month  => 7,
42              day    => 17,
43              hour   => 13,
44              minute => 8,
45              second => 23,
46            },
47
48            '52295.218' =>
49            { year   => 2002,
50              month  => 1,
51              day    => 21,
52              hour   => 5,
53              minute => 13,
54              second => 20,
55            },
56
57            '52295.399' =>
58            { year   => 2002,
59              month  => 1,
60              day    => 21,
61              hour   => 9,
62              minute => 35,
63              second => 3,
64            },
65
66            # beginning of MJD
67            '0.000' =>
68            { year   => 1858,
69              month  => 11,
70              day    => 17,
71              hour   => 0,
72              minute => 0,
73              second => 0,
74            },
75
76            # beginning of JD
77            '-2400000.500' =>
78            { year   => -4713,
79              month  => 11,
80              day    => 24,
81              hour   => 12,
82              minute => 0,
83              second => 0,
84            },
85          );
86
87while ( my ( $mjd, $comps ) = splice @mjd, 0, 2 )
88{
89    my $dt = DateTime->new( %$comps,
90                            time_zone => 'UTC',
91                          );
92
93    is( sprintf( '%.3f', $dt->mjd ), $mjd, "MJD should be $mjd" );
94
95    my $jd = sprintf( '%.3f', $mjd + 2_400_000.5 );
96    is( sprintf( '%.3f', $dt->jd ), $jd, "JD should be $jd" );
97}
98