The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
#     Test script for Astro::Sunrise
#     Copyright (C) 2015 Ron Hill and Jean Forget
#
#     This program is distributed under the same terms as Perl 5.16.3:
#     GNU Public License version 1 or later and Perl Artistic License
#
#     You can find the text of the licenses in the F<LICENSE> file or at
#     L<http://www.perlfoundation.org/artistic_license_1_0>
#     and L<http://www.gnu.org/licenses/gpl-1.0.html>.
#
#     Here is the summary of GPL:
#
#     This program is free software; you can redistribute it and/or modify
#     it under the terms of the GNU General Public License as published by
#     the Free Software Foundation; either version 1, or (at your option)
#     any later version.
#
#     This program is distributed in the hope that it will be useful,
#     but WITHOUT ANY WARRANTY; without even the implied warranty of
#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#     GNU General Public License for more details.
#
#     You should have received a copy of the GNU General Public License
#     along with this program; if not, write to the Free Software Foundation,
#     Inc., <http://www.fsf.org/>.
#
use strict;
use warnings;
use POSIX qw(floor ceil);
use Astro::Sunrise;
use Test::More;

my @data = load_data();
plan(tests => 2 * @data); # I prefer having Perl counting my tests than myself

my ($long, $lat, $offset);
my $fudge = 0; # in minutes

for (@data) {
    my ($yyyy, $mm, $dd, $loc, $lat_d, $lat_m, $lat_x, $lon_d, $lon_m, $lon_x, $alt, $upper_limb, $expect_r, $expect_s)
       = $_ =~ /(\d+)\s+(\d+)\s+(\d+)     # date in YYYY MM DD format $1 $2 $3
               \s+(\w+)                   # location $4
               \s+(\d+)\s+(\d+)\s+(\w)    # latitude $5 $6 $7
               \s+(\d+)\s+(\d+)\s+(\w)    # longitude $8 $9 $10
               \s+(\S+)                   # altitude $11
               \s+(\d)                    # upper limb $12
               \s+sunrise:\s+(\d+:\d+)    # sunrise $13
               \s+sunset:\s+(\d+:\d+)/x;  # sunset $14
    if ( $lat_x eq 'N' ) {
      $lat = sprintf( "%.3f", ( $lat_d + ( $lat_m / 60 ) ) );
    }
    elsif ( $lat_x eq 'S' ) {
      $lat = sprintf( "%.3f", -( $lat_d + ( $lat_m / 60 ) ) );
    }

    if ( $lon_x eq 'E' ) {
      $long = sprintf( "%.3f", $lon_d + ( $lon_m / 60 ) );
    }
    elsif ( $lon_x eq 'W' ) {
      $long = sprintf( "%.3f", -( $lon_d + ( $lon_m / 60 ) ) );
    }

    if ($long < 0) {
      $offset = ceil( $long / 15 );
    }
    elsif ($long > 0) {
      $offset = floor( $long /15 );
    }
    else {
      $offset = 0;
    }

    my ( $sunrise, $sunset ) = sunrise( { year => $yyyy, month => $mm,  day => $dd,
                                          lon  => $long, lat   => $lat, tz  => $offset,
                                          alt  => $alt,  upper_limb => $upper_limb } );

    my $exp_h = fudge_h($expect_r, $fudge);
    my $exp_l = fudge_l($expect_r, $fudge);
    ok ($sunrise ge $exp_l && $sunrise le $exp_h
         , "Sunrise for $loc $yyyy-$mm-$dd  $alt $upper_limb $exp_l $sunrise $exp_h");
    $exp_h = fudge_h($expect_s, $fudge);
    $exp_l = fudge_l($expect_s, $fudge);
    ok ($sunset ge $exp_l && $sunset le $exp_h
         , "Sunset  for $loc $yyyy-$mm-$dd  $alt $upper_limb $exp_l $sunset $exp_h");

}

sub fudge_h {
  my ($exp, $fudge) = @_;
  my ($hh, $mn) = $exp =~ /^(\d\d):(\d\d)$/;
  $mn += $fudge;
  if ($mn > 59) {
    $hh ++;
    $mn -= 60;
  }
  if ($hh > 23) {
    $hh -= 24;
  }
  elsif ($hh < 0) {
    $hh += 24;
  }
  return sprintf("%02d:%02d", $hh, $mn);
}

sub fudge_l {
  my ($exp, $fudge) = @_;
  my ($hh, $mn) = $exp =~ /^(\d\d):(\d\d)$/;
  $mn -= $fudge;
  if ($mn < 0) {
    $hh --;
    $mn += 60;
  }
  if ($hh > 23) {
    $hh -= 24;
  }
  elsif ($hh < 0) {
    $hh += 24;
  }
  return sprintf("%02d:%02d", $hh, $mn);
}

#
# The data below have been prepared by a C program which includes
# Paul Schlyter's code. Therefore, what is tested is the compatibility
# of the Perl code with the C code.
#
# See how this C program is generated in
# https://github.com/jforget/Astro-Sunrise/blob/master/util/mktest-04a
#
# Why those locations?
# Greenwich because it is located on the eponymous prime meridian
# Reykjavik, because it is close to the Northern Arctic Circle, so it can be used to check polar night and midnight sun
# Quito because it is near the prime parallel, better known as "equator"
# El Hierro, because it is located on a former prime meridian
#
# Warning: as you can see, the computation of sunrise and sunset is called with an altitude -0.833
# and with upper_limb = 1. This is silly, because that means that the radius is accounted
# twice instead of just once. But the purpose of this programme is just to check
# that the Perl implementation of the algorithm is compatible with the C implementation.
sub load_data {
    return split "\n", <<'EOD';
2013  1  1 Greenwich            51 28 N   0  0 E 10         0 sunrise: 09:50 sunset: 14:17
2013  1  1 Greenwich            51 28 N   0  0 E 10         1 sunrise: 09:47 sunset: 14:21
2013  1  1 Greenwich            51 28 N   0  0 E 0          0 sunrise: 08:12 sunset: 15:55
2013  1  1 Greenwich            51 28 N   0  0 E 0          1 sunrise: 08:10 sunset: 15:57
2013  1  1 Greenwich            51 28 N   0  0 E -0.583     0 sunrise: 08:07 sunset: 16:00
2013  1  1 Greenwich            51 28 N   0  0 E -0.583     1 sunrise: 08:05 sunset: 16:02
2013  1  1 Greenwich            51 28 N   0  0 E -0.833     0 sunrise: 08:05 sunset: 16:02
2013  1  1 Greenwich            51 28 N   0  0 E -0.833     1 sunrise: 08:03 sunset: 16:04
2013  1  1 Greenwich            51 28 N   0  0 E -12        0 sunrise: 06:43 sunset: 17:25
2013  1  1 Greenwich            51 28 N   0  0 E -12        1 sunrise: 06:41 sunset: 17:26
2013  1  1 Greenwich            51 28 N   0  0 E -18        0 sunrise: 06:02 sunset: 18:05
2013  1  1 Greenwich            51 28 N   0  0 E -18        1 sunrise: 06:00 sunset: 18:07
2013  1  1 Reykjavik            64  4 N  21 58 W 10         0 sunrise: 12:32 sunset: 12:32 polar night or midnight sun
2013  1  1 Reykjavik            64  4 N  21 58 W 10         1 sunrise: 12:32 sunset: 12:32 polar night or midnight sun
2013  1  1 Reykjavik            64  4 N  21 58 W 0          0 sunrise: 10:34 sunset: 14:29
2013  1  1 Reykjavik            64  4 N  21 58 W 0          1 sunrise: 10:29 sunset: 14:35
2013  1  1 Reykjavik            64  4 N  21 58 W -0.583     0 sunrise: 10:23 sunset: 14:41
2013  1  1 Reykjavik            64  4 N  21 58 W -0.583     1 sunrise: 10:18 sunset: 14:46
2013  1  1 Reykjavik            64  4 N  21 58 W -0.833     0 sunrise: 10:18 sunset: 14:45
2013  1  1 Reykjavik            64  4 N  21 58 W -0.833     1 sunrise: 10:13 sunset: 14:50
2013  1  1 Reykjavik            64  4 N  21 58 W -12        0 sunrise: 07:55 sunset: 17:08
2013  1  1 Reykjavik            64  4 N  21 58 W -12        1 sunrise: 07:52 sunset: 17:11
2013  1  1 Reykjavik            64  4 N  21 58 W -18        0 sunrise: 06:55 sunset: 18:08
2013  1  1 Reykjavik            64  4 N  21 58 W -18        1 sunrise: 06:53 sunset: 18:10
2013  1  1 Quito                 0 15 S  78 35 W 10         0 sunrise: 07:01 sunset: 17:35
2013  1  1 Quito                 0 15 S  78 35 W 10         1 sunrise: 07:00 sunset: 17:36
2013  1  1 Quito                 0 15 S  78 35 W 0          0 sunrise: 06:18 sunset: 18:19
2013  1  1 Quito                 0 15 S  78 35 W 0          1 sunrise: 06:17 sunset: 18:20
2013  1  1 Quito                 0 15 S  78 35 W -0.583     0 sunrise: 06:15 sunset: 18:21
2013  1  1 Quito                 0 15 S  78 35 W -0.583     1 sunrise: 06:14 sunset: 18:22
2013  1  1 Quito                 0 15 S  78 35 W -0.833     0 sunrise: 06:14 sunset: 18:22
2013  1  1 Quito                 0 15 S  78 35 W -0.833     1 sunrise: 06:13 sunset: 18:23
2013  1  1 Quito                 0 15 S  78 35 W -12        0 sunrise: 05:25 sunset: 19:11
2013  1  1 Quito                 0 15 S  78 35 W -12        1 sunrise: 05:24 sunset: 19:12
2013  1  1 Quito                 0 15 S  78 35 W -18        0 sunrise: 04:59 sunset: 19:37
2013  1  1 Quito                 0 15 S  78 35 W -18        1 sunrise: 04:58 sunset: 19:38
2013  1  1 El_Hierro            27 44 N  18  3 W 10         0 sunrise: 07:59 sunset: 16:33
2013  1  1 El_Hierro            27 44 N  18  3 W 10         1 sunrise: 07:58 sunset: 16:34
2013  1  1 El_Hierro            27 44 N  18  3 W 0          0 sunrise: 07:07 sunset: 17:24
2013  1  1 El_Hierro            27 44 N  18  3 W 0          1 sunrise: 07:06 sunset: 17:26
2013  1  1 El_Hierro            27 44 N  18  3 W -0.583     0 sunrise: 07:04 sunset: 17:27
2013  1  1 El_Hierro            27 44 N  18  3 W -0.583     1 sunrise: 07:03 sunset: 17:29
2013  1  1 El_Hierro            27 44 N  18  3 W -0.833     0 sunrise: 07:03 sunset: 17:29
2013  1  1 El_Hierro            27 44 N  18  3 W -0.833     1 sunrise: 07:02 sunset: 17:30
2013  1  1 El_Hierro            27 44 N  18  3 W -12        0 sunrise: 06:08 sunset: 18:23
2013  1  1 El_Hierro            27 44 N  18  3 W -12        1 sunrise: 06:07 sunset: 18:25
2013  1  1 El_Hierro            27 44 N  18  3 W -18        0 sunrise: 05:40 sunset: 18:52
2013  1  1 El_Hierro            27 44 N  18  3 W -18        1 sunrise: 05:39 sunset: 18:53
2013  3 21 Greenwich            51 28 N   0  0 E 10         0 sunrise: 07:10 sunset: 17:05
2013  3 21 Greenwich            51 28 N   0  0 E 10         1 sunrise: 07:08 sunset: 17:06
2013  3 21 Greenwich            51 28 N   0  0 E 0          0 sunrise: 06:05 sunset: 18:09
2013  3 21 Greenwich            51 28 N   0  0 E 0          1 sunrise: 06:03 sunset: 18:11
2013  3 21 Greenwich            51 28 N   0  0 E -0.583     0 sunrise: 06:01 sunset: 18:13
2013  3 21 Greenwich            51 28 N   0  0 E -0.583     1 sunrise: 06:00 sunset: 18:15
2013  3 21 Greenwich            51 28 N   0  0 E -0.833     0 sunrise: 06:00 sunset: 18:15
2013  3 21 Greenwich            51 28 N   0  0 E -0.833     1 sunrise: 05:58 sunset: 18:16
2013  3 21 Greenwich            51 28 N   0  0 E -12        0 sunrise: 04:47 sunset: 19:27
2013  3 21 Greenwich            51 28 N   0  0 E -12        1 sunrise: 04:45 sunset: 19:29
2013  3 21 Greenwich            51 28 N   0  0 E -18        0 sunrise: 04:06 sunset: 20:08
2013  3 21 Greenwich            51 28 N   0  0 E -18        1 sunrise: 04:04 sunset: 20:10
2013  3 21 Reykjavik            64  4 N  21 58 W 10         0 sunrise: 08:05 sunset: 17:05
2013  3 21 Reykjavik            64  4 N  21 58 W 10         1 sunrise: 08:02 sunset: 17:08
2013  3 21 Reykjavik            64  4 N  21 58 W 0          0 sunrise: 06:31 sunset: 18:39
2013  3 21 Reykjavik            64  4 N  21 58 W 0          1 sunrise: 06:29 sunset: 18:41
2013  3 21 Reykjavik            64  4 N  21 58 W -0.583     0 sunrise: 06:26 sunset: 18:44
2013  3 21 Reykjavik            64  4 N  21 58 W -0.583     1 sunrise: 06:24 sunset: 18:46
2013  3 21 Reykjavik            64  4 N  21 58 W -0.833     0 sunrise: 06:24 sunset: 18:46
2013  3 21 Reykjavik            64  4 N  21 58 W -0.833     1 sunrise: 06:21 sunset: 18:49
2013  3 21 Reykjavik            64  4 N  21 58 W -12        0 sunrise: 04:37 sunset: 20:33
2013  3 21 Reykjavik            64  4 N  21 58 W -12        1 sunrise: 04:35 sunset: 20:35
2013  3 21 Reykjavik            64  4 N  21 58 W -18        0 sunrise: 03:30 sunset: 21:40
2013  3 21 Reykjavik            64  4 N  21 58 W -18        1 sunrise: 03:27 sunset: 21:43
2013  3 21 Quito                 0 15 S  78 35 W 10         0 sunrise: 07:01 sunset: 17:41
2013  3 21 Quito                 0 15 S  78 35 W 10         1 sunrise: 07:00 sunset: 17:42
2013  3 21 Quito                 0 15 S  78 35 W 0          0 sunrise: 06:21 sunset: 18:21
2013  3 21 Quito                 0 15 S  78 35 W 0          1 sunrise: 06:20 sunset: 18:22
2013  3 21 Quito                 0 15 S  78 35 W -0.583     0 sunrise: 06:19 sunset: 18:24
2013  3 21 Quito                 0 15 S  78 35 W -0.583     1 sunrise: 06:18 sunset: 18:25
2013  3 21 Quito                 0 15 S  78 35 W -0.833     0 sunrise: 06:18 sunset: 18:25
2013  3 21 Quito                 0 15 S  78 35 W -0.833     1 sunrise: 06:17 sunset: 18:26
2013  3 21 Quito                 0 15 S  78 35 W -12        0 sunrise: 05:33 sunset: 19:09
2013  3 21 Quito                 0 15 S  78 35 W -12        1 sunrise: 05:32 sunset: 19:10
2013  3 21 Quito                 0 15 S  78 35 W -18        0 sunrise: 05:09 sunset: 19:33
2013  3 21 Quito                 0 15 S  78 35 W -18        1 sunrise: 05:08 sunset: 19:34
2013  3 21 El_Hierro            27 44 N  18  3 W 10         0 sunrise: 07:04 sunset: 17:35
2013  3 21 El_Hierro            27 44 N  18  3 W 10         1 sunrise: 07:02 sunset: 17:36
2013  3 21 El_Hierro            27 44 N  18  3 W 0          0 sunrise: 06:18 sunset: 18:20
2013  3 21 El_Hierro            27 44 N  18  3 W 0          1 sunrise: 06:17 sunset: 18:21
2013  3 21 El_Hierro            27 44 N  18  3 W -0.583     0 sunrise: 06:16 sunset: 18:23
2013  3 21 El_Hierro            27 44 N  18  3 W -0.583     1 sunrise: 06:15 sunset: 18:24
2013  3 21 El_Hierro            27 44 N  18  3 W -0.833     0 sunrise: 06:15 sunset: 18:24
2013  3 21 El_Hierro            27 44 N  18  3 W -0.833     1 sunrise: 06:13 sunset: 18:25
2013  3 21 El_Hierro            27 44 N  18  3 W -12        0 sunrise: 05:24 sunset: 19:15
2013  3 21 El_Hierro            27 44 N  18  3 W -12        1 sunrise: 05:23 sunset: 19:16
2013  3 21 El_Hierro            27 44 N  18  3 W -18        0 sunrise: 04:57 sunset: 19:42
2013  3 21 El_Hierro            27 44 N  18  3 W -18        1 sunrise: 04:55 sunset: 19:43
2013  6 21 Greenwich            51 28 N   0  0 E 10         0 sunrise: 05:06 sunset: 18:58
2013  6 21 Greenwich            51 28 N   0  0 E 10         1 sunrise: 05:04 sunset: 18:59
2013  6 21 Greenwich            51 28 N   0  0 E 0          0 sunrise: 03:50 sunset: 20:14
2013  6 21 Greenwich            51 28 N   0  0 E 0          1 sunrise: 03:48 sunset: 20:16
2013  6 21 Greenwich            51 28 N   0  0 E -0.583     0 sunrise: 03:45 sunset: 20:19
2013  6 21 Greenwich            51 28 N   0  0 E -0.583     1 sunrise: 03:43 sunset: 20:21
2013  6 21 Greenwich            51 28 N   0  0 E -0.833     0 sunrise: 03:43 sunset: 20:21
2013  6 21 Greenwich            51 28 N   0  0 E -0.833     1 sunrise: 03:41 sunset: 20:23
2013  6 21 Greenwich            51 28 N   0  0 E -12        0 sunrise: 01:41 sunset: 22:23
2013  6 21 Greenwich            51 28 N   0  0 E -12        1 sunrise: 01:36 sunset: 22:27
2013  6 21 Greenwich            51 28 N   0  0 E -18        0 sunrise: 00:02 sunset: 24:02 polar night or midnight sun
2013  6 21 Greenwich            51 28 N   0  0 E -18        1 sunrise: 00:02 sunset: 24:02 polar night or midnight sun
2013  6 21 Reykjavik            64  4 N  21 58 W 10         0 sunrise: 04:41 sunset: 20:19
2013  6 21 Reykjavik            64  4 N  21 58 W 10         1 sunrise: 04:38 sunset: 20:22
2013  6 21 Reykjavik            64  4 N  21 58 W 0          0 sunrise: 02:17 sunset: 22:42
2013  6 21 Reykjavik            64  4 N  21 58 W 0          1 sunrise: 02:12 sunset: 22:48
2013  6 21 Reykjavik            64  4 N  21 58 W -0.583     0 sunrise: 02:04 sunset: 22:56
2013  6 21 Reykjavik            64  4 N  21 58 W -0.583     1 sunrise: 01:57 sunset: 23:02
2013  6 21 Reykjavik            64  4 N  21 58 W -0.833     0 sunrise: 01:57 sunset: 23:02
2013  6 21 Reykjavik            64  4 N  21 58 W -0.833     1 sunrise: 01:50 sunset: 23:09
2013  6 21 Reykjavik            64  4 N  21 58 W -12        0 sunrise: 00:30 sunset: 24:30 polar night or midnight sun
2013  6 21 Reykjavik            64  4 N  21 58 W -12        1 sunrise: 00:30 sunset: 24:30 polar night or midnight sun
2013  6 21 Reykjavik            64  4 N  21 58 W -18        0 sunrise: 00:30 sunset: 24:30 polar night or midnight sun
2013  6 21 Reykjavik            64  4 N  21 58 W -18        1 sunrise: 00:30 sunset: 24:30 polar night or midnight sun
2013  6 21 Quito                 0 15 S  78 35 W 10         0 sunrise: 07:00 sunset: 17:32
2013  6 21 Quito                 0 15 S  78 35 W 10         1 sunrise: 06:59 sunset: 17:33
2013  6 21 Quito                 0 15 S  78 35 W 0          0 sunrise: 06:17 sunset: 18:16
2013  6 21 Quito                 0 15 S  78 35 W 0          1 sunrise: 06:15 sunset: 18:17
2013  6 21 Quito                 0 15 S  78 35 W -0.583     0 sunrise: 06:14 sunset: 18:18
2013  6 21 Quito                 0 15 S  78 35 W -0.583     1 sunrise: 06:13 sunset: 18:19
2013  6 21 Quito                 0 15 S  78 35 W -0.833     0 sunrise: 06:13 sunset: 18:19
2013  6 21 Quito                 0 15 S  78 35 W -0.833     1 sunrise: 06:12 sunset: 18:21
2013  6 21 Quito                 0 15 S  78 35 W -12        0 sunrise: 05:24 sunset: 19:08
2013  6 21 Quito                 0 15 S  78 35 W -12        1 sunrise: 05:23 sunset: 19:09
2013  6 21 Quito                 0 15 S  78 35 W -18        0 sunrise: 04:58 sunset: 19:34
2013  6 21 Quito                 0 15 S  78 35 W -18        1 sunrise: 04:57 sunset: 19:36
2013  6 21 El_Hierro            27 44 N  18  3 W 10         0 sunrise: 06:11 sunset: 18:17
2013  6 21 El_Hierro            27 44 N  18  3 W 10         1 sunrise: 06:10 sunset: 18:19
2013  6 21 El_Hierro            27 44 N  18  3 W 0          0 sunrise: 05:21 sunset: 19:07
2013  6 21 El_Hierro            27 44 N  18  3 W 0          1 sunrise: 05:20 sunset: 19:08
2013  6 21 El_Hierro            27 44 N  18  3 W -0.583     0 sunrise: 05:18 sunset: 19:10
2013  6 21 El_Hierro            27 44 N  18  3 W -0.583     1 sunrise: 05:17 sunset: 19:11
2013  6 21 El_Hierro            27 44 N  18  3 W -0.833     0 sunrise: 05:17 sunset: 19:11
2013  6 21 El_Hierro            27 44 N  18  3 W -0.833     1 sunrise: 05:16 sunset: 19:12
2013  6 21 El_Hierro            27 44 N  18  3 W -12        0 sunrise: 04:18 sunset: 20:10
2013  6 21 El_Hierro            27 44 N  18  3 W -12        1 sunrise: 04:17 sunset: 20:11
2013  6 21 El_Hierro            27 44 N  18  3 W -18        0 sunrise: 03:44 sunset: 20:44
2013  6 21 El_Hierro            27 44 N  18  3 W -18        1 sunrise: 03:43 sunset: 20:45
2013  8 31 Greenwich            51 28 N   0  0 E 10         0 sunrise: 06:22 sunset: 17:39
2013  8 31 Greenwich            51 28 N   0  0 E 10         1 sunrise: 06:20 sunset: 17:40
2013  8 31 Greenwich            51 28 N   0  0 E 0          0 sunrise: 05:17 sunset: 18:43
2013  8 31 Greenwich            51 28 N   0  0 E 0          1 sunrise: 05:15 sunset: 18:45
2013  8 31 Greenwich            51 28 N   0  0 E -0.583     0 sunrise: 05:13 sunset: 18:47
2013  8 31 Greenwich            51 28 N   0  0 E -0.583     1 sunrise: 05:12 sunset: 18:49
2013  8 31 Greenwich            51 28 N   0  0 E -0.833     0 sunrise: 05:12 sunset: 18:49
2013  8 31 Greenwich            51 28 N   0  0 E -0.833     1 sunrise: 05:10 sunset: 18:51
2013  8 31 Greenwich            51 28 N   0  0 E -12        0 sunrise: 03:54 sunset: 20:07
2013  8 31 Greenwich            51 28 N   0  0 E -12        1 sunrise: 03:52 sunset: 20:09
2013  8 31 Greenwich            51 28 N   0  0 E -18        0 sunrise: 03:06 sunset: 20:54
2013  8 31 Greenwich            51 28 N   0  0 E -18        1 sunrise: 03:04 sunset: 20:57
2013  8 31 Reykjavik            64  4 N  21 58 W 10         0 sunrise: 06:50 sunset: 18:06
2013  8 31 Reykjavik            64  4 N  21 58 W 10         1 sunrise: 06:48 sunset: 18:09
2013  8 31 Reykjavik            64  4 N  21 58 W 0          0 sunrise: 05:17 sunset: 19:39
2013  8 31 Reykjavik            64  4 N  21 58 W 0          1 sunrise: 05:14 sunset: 19:42
2013  8 31 Reykjavik            64  4 N  21 58 W -0.583     0 sunrise: 05:11 sunset: 19:45
2013  8 31 Reykjavik            64  4 N  21 58 W -0.583     1 sunrise: 05:09 sunset: 19:48
2013  8 31 Reykjavik            64  4 N  21 58 W -0.833     0 sunrise: 05:09 sunset: 19:47
2013  8 31 Reykjavik            64  4 N  21 58 W -0.833     1 sunrise: 05:06 sunset: 19:50
2013  8 31 Reykjavik            64  4 N  21 58 W -12        0 sunrise: 03:01 sunset: 21:55
2013  8 31 Reykjavik            64  4 N  21 58 W -12        1 sunrise: 02:57 sunset: 21:59
2013  8 31 Reykjavik            64  4 N  21 58 W -18        0 sunrise: 00:28 sunset: 24:28 polar night or midnight sun
2013  8 31 Reykjavik            64  4 N  21 58 W -18        1 sunrise: 00:28 sunset: 24:28 polar night or midnight sun
2013  8 31 Quito                 0 15 S  78 35 W 10         0 sunrise: 06:55 sunset: 17:34
2013  8 31 Quito                 0 15 S  78 35 W 10         1 sunrise: 06:54 sunset: 17:35
2013  8 31 Quito                 0 15 S  78 35 W 0          0 sunrise: 06:15 sunset: 18:14
2013  8 31 Quito                 0 15 S  78 35 W 0          1 sunrise: 06:14 sunset: 18:15
2013  8 31 Quito                 0 15 S  78 35 W -0.583     0 sunrise: 06:12 sunset: 18:17
2013  8 31 Quito                 0 15 S  78 35 W -0.583     1 sunrise: 06:11 sunset: 18:18
2013  8 31 Quito                 0 15 S  78 35 W -0.833     0 sunrise: 06:11 sunset: 18:18
2013  8 31 Quito                 0 15 S  78 35 W -0.833     1 sunrise: 06:10 sunset: 18:19
2013  8 31 Quito                 0 15 S  78 35 W -12        0 sunrise: 05:26 sunset: 19:03
2013  8 31 Quito                 0 15 S  78 35 W -12        1 sunrise: 05:25 sunset: 19:04
2013  8 31 Quito                 0 15 S  78 35 W -18        0 sunrise: 05:02 sunset: 19:27
2013  8 31 Quito                 0 15 S  78 35 W -18        1 sunrise: 05:01 sunset: 19:28
2013  8 31 El_Hierro            27 44 N  18  3 W 10         0 sunrise: 06:40 sunset: 17:45
2013  8 31 El_Hierro            27 44 N  18  3 W 10         1 sunrise: 06:39 sunset: 17:46
2013  8 31 El_Hierro            27 44 N  18  3 W 0          0 sunrise: 05:55 sunset: 18:30
2013  8 31 El_Hierro            27 44 N  18  3 W 0          1 sunrise: 05:53 sunset: 18:32
2013  8 31 El_Hierro            27 44 N  18  3 W -0.583     0 sunrise: 05:52 sunset: 18:33
2013  8 31 El_Hierro            27 44 N  18  3 W -0.583     1 sunrise: 05:51 sunset: 18:34
2013  8 31 El_Hierro            27 44 N  18  3 W -0.833     0 sunrise: 05:51 sunset: 18:34
2013  8 31 El_Hierro            27 44 N  18  3 W -0.833     1 sunrise: 05:49 sunset: 18:35
2013  8 31 El_Hierro            27 44 N  18  3 W -12        0 sunrise: 04:59 sunset: 19:26
2013  8 31 El_Hierro            27 44 N  18  3 W -12        1 sunrise: 04:58 sunset: 19:27
2013  8 31 El_Hierro            27 44 N  18  3 W -18        0 sunrise: 04:30 sunset: 19:55
2013  8 31 El_Hierro            27 44 N  18  3 W -18        1 sunrise: 04:29 sunset: 19:56
2013  9 21 Greenwich            51 28 N   0  0 E 10         0 sunrise: 06:55 sunset: 16:51
2013  9 21 Greenwich            51 28 N   0  0 E 10         1 sunrise: 06:53 sunset: 16:53
2013  9 21 Greenwich            51 28 N   0  0 E 0          0 sunrise: 05:50 sunset: 17:56
2013  9 21 Greenwich            51 28 N   0  0 E 0          1 sunrise: 05:49 sunset: 17:57
2013  9 21 Greenwich            51 28 N   0  0 E -0.583     0 sunrise: 05:47 sunset: 17:59
2013  9 21 Greenwich            51 28 N   0  0 E -0.583     1 sunrise: 05:45 sunset: 18:01
2013  9 21 Greenwich            51 28 N   0  0 E -0.833     0 sunrise: 05:45 sunset: 18:01
2013  9 21 Greenwich            51 28 N   0  0 E -0.833     1 sunrise: 05:43 sunset: 18:03
2013  9 21 Greenwich            51 28 N   0  0 E -12        0 sunrise: 04:32 sunset: 19:14
2013  9 21 Greenwich            51 28 N   0  0 E -12        1 sunrise: 04:30 sunset: 19:16
2013  9 21 Greenwich            51 28 N   0  0 E -18        0 sunrise: 03:51 sunset: 19:55
2013  9 21 Greenwich            51 28 N   0  0 E -18        1 sunrise: 03:49 sunset: 19:57
2013  9 21 Reykjavik            64  4 N  21 58 W 10         0 sunrise: 07:50 sunset: 16:52
2013  9 21 Reykjavik            64  4 N  21 58 W 10         1 sunrise: 07:47 sunset: 16:54
2013  9 21 Reykjavik            64  4 N  21 58 W 0          0 sunrise: 06:17 sunset: 18:25
2013  9 21 Reykjavik            64  4 N  21 58 W 0          1 sunrise: 06:14 sunset: 18:27
2013  9 21 Reykjavik            64  4 N  21 58 W -0.583     0 sunrise: 06:11 sunset: 18:30
2013  9 21 Reykjavik            64  4 N  21 58 W -0.583     1 sunrise: 06:09 sunset: 18:33
2013  9 21 Reykjavik            64  4 N  21 58 W -0.833     0 sunrise: 06:09 sunset: 18:33
2013  9 21 Reykjavik            64  4 N  21 58 W -0.833     1 sunrise: 06:07 sunset: 18:35
2013  9 21 Reykjavik            64  4 N  21 58 W -12        0 sunrise: 04:23 sunset: 20:19
2013  9 21 Reykjavik            64  4 N  21 58 W -12        1 sunrise: 04:20 sunset: 20:22
2013  9 21 Reykjavik            64  4 N  21 58 W -18        0 sunrise: 03:15 sunset: 21:27
2013  9 21 Reykjavik            64  4 N  21 58 W -18        1 sunrise: 03:12 sunset: 21:30
2013  9 21 Quito                 0 15 S  78 35 W 10         0 sunrise: 06:47 sunset: 17:27
2013  9 21 Quito                 0 15 S  78 35 W 10         1 sunrise: 06:46 sunset: 17:28
2013  9 21 Quito                 0 15 S  78 35 W 0          0 sunrise: 06:07 sunset: 18:07
2013  9 21 Quito                 0 15 S  78 35 W 0          1 sunrise: 06:06 sunset: 18:08
2013  9 21 Quito                 0 15 S  78 35 W -0.583     0 sunrise: 06:05 sunset: 18:10
2013  9 21 Quito                 0 15 S  78 35 W -0.583     1 sunrise: 06:04 sunset: 18:11
2013  9 21 Quito                 0 15 S  78 35 W -0.833     0 sunrise: 06:04 sunset: 18:11
2013  9 21 Quito                 0 15 S  78 35 W -0.833     1 sunrise: 06:03 sunset: 18:12
2013  9 21 Quito                 0 15 S  78 35 W -12        0 sunrise: 05:19 sunset: 18:55
2013  9 21 Quito                 0 15 S  78 35 W -12        1 sunrise: 05:18 sunset: 18:56
2013  9 21 Quito                 0 15 S  78 35 W -18        0 sunrise: 04:55 sunset: 19:19
2013  9 21 Quito                 0 15 S  78 35 W -18        1 sunrise: 04:54 sunset: 19:20
2013  9 21 El_Hierro            27 44 N  18  3 W 10         0 sunrise: 06:49 sunset: 17:21
2013  9 21 El_Hierro            27 44 N  18  3 W 10         1 sunrise: 06:48 sunset: 17:22
2013  9 21 El_Hierro            27 44 N  18  3 W 0          0 sunrise: 06:04 sunset: 18:06
2013  9 21 El_Hierro            27 44 N  18  3 W 0          1 sunrise: 06:03 sunset: 18:07
2013  9 21 El_Hierro            27 44 N  18  3 W -0.583     0 sunrise: 06:01 sunset: 18:09
2013  9 21 El_Hierro            27 44 N  18  3 W -0.583     1 sunrise: 06:00 sunset: 18:10
2013  9 21 El_Hierro            27 44 N  18  3 W -0.833     0 sunrise: 06:00 sunset: 18:10
2013  9 21 El_Hierro            27 44 N  18  3 W -0.833     1 sunrise: 05:59 sunset: 18:11
2013  9 21 El_Hierro            27 44 N  18  3 W -12        0 sunrise: 05:10 sunset: 19:01
2013  9 21 El_Hierro            27 44 N  18  3 W -12        1 sunrise: 05:09 sunset: 19:02
2013  9 21 El_Hierro            27 44 N  18  3 W -18        0 sunrise: 04:42 sunset: 19:28
2013  9 21 El_Hierro            27 44 N  18  3 W -18        1 sunrise: 04:41 sunset: 19:29
2013 12 31 Greenwich            51 28 N   0  0 E 10         0 sunrise: 09:51 sunset: 14:16
2013 12 31 Greenwich            51 28 N   0  0 E 10         1 sunrise: 09:47 sunset: 14:19
2013 12 31 Greenwich            51 28 N   0  0 E 0          0 sunrise: 08:12 sunset: 15:54
2013 12 31 Greenwich            51 28 N   0  0 E 0          1 sunrise: 08:10 sunset: 15:56
2013 12 31 Greenwich            51 28 N   0  0 E -0.583     0 sunrise: 08:08 sunset: 15:59
2013 12 31 Greenwich            51 28 N   0  0 E -0.583     1 sunrise: 08:05 sunset: 16:01
2013 12 31 Greenwich            51 28 N   0  0 E -0.833     0 sunrise: 08:06 sunset: 16:01
2013 12 31 Greenwich            51 28 N   0  0 E -0.833     1 sunrise: 08:03 sunset: 16:03
2013 12 31 Greenwich            51 28 N   0  0 E -12        0 sunrise: 06:43 sunset: 17:23
2013 12 31 Greenwich            51 28 N   0  0 E -12        1 sunrise: 06:41 sunset: 17:25
2013 12 31 Greenwich            51 28 N   0  0 E -18        0 sunrise: 06:02 sunset: 18:04
2013 12 31 Greenwich            51 28 N   0  0 E -18        1 sunrise: 06:00 sunset: 18:06
2013 12 31 Reykjavik            64  4 N  21 58 W 10         0 sunrise: 12:31 sunset: 12:31 polar night or midnight sun
2013 12 31 Reykjavik            64  4 N  21 58 W 10         1 sunrise: 12:31 sunset: 12:31 polar night or midnight sun
2013 12 31 Reykjavik            64  4 N  21 58 W 0          0 sunrise: 10:35 sunset: 14:27
2013 12 31 Reykjavik            64  4 N  21 58 W 0          1 sunrise: 10:30 sunset: 14:32
2013 12 31 Reykjavik            64  4 N  21 58 W -0.583     0 sunrise: 10:24 sunset: 14:38
2013 12 31 Reykjavik            64  4 N  21 58 W -0.583     1 sunrise: 10:19 sunset: 14:43
2013 12 31 Reykjavik            64  4 N  21 58 W -0.833     0 sunrise: 10:19 sunset: 14:43
2013 12 31 Reykjavik            64  4 N  21 58 W -0.833     1 sunrise: 10:14 sunset: 14:48
2013 12 31 Reykjavik            64  4 N  21 58 W -12        0 sunrise: 07:55 sunset: 17:07
2013 12 31 Reykjavik            64  4 N  21 58 W -12        1 sunrise: 07:52 sunset: 17:10
2013 12 31 Reykjavik            64  4 N  21 58 W -18        0 sunrise: 06:56 sunset: 18:06
2013 12 31 Reykjavik            64  4 N  21 58 W -18        1 sunrise: 06:53 sunset: 18:09
2013 12 31 Quito                 0 15 S  78 35 W 10         0 sunrise: 07:01 sunset: 17:34
2013 12 31 Quito                 0 15 S  78 35 W 10         1 sunrise: 06:59 sunset: 17:36
2013 12 31 Quito                 0 15 S  78 35 W 0          0 sunrise: 06:17 sunset: 18:18
2013 12 31 Quito                 0 15 S  78 35 W 0          1 sunrise: 06:16 sunset: 18:19
2013 12 31 Quito                 0 15 S  78 35 W -0.583     0 sunrise: 06:15 sunset: 18:20
2013 12 31 Quito                 0 15 S  78 35 W -0.583     1 sunrise: 06:13 sunset: 18:22
2013 12 31 Quito                 0 15 S  78 35 W -0.833     0 sunrise: 06:13 sunset: 18:22
2013 12 31 Quito                 0 15 S  78 35 W -0.833     1 sunrise: 06:12 sunset: 18:23
2013 12 31 Quito                 0 15 S  78 35 W -12        0 sunrise: 05:25 sunset: 19:10
2013 12 31 Quito                 0 15 S  78 35 W -12        1 sunrise: 05:24 sunset: 19:11
2013 12 31 Quito                 0 15 S  78 35 W -18        0 sunrise: 04:59 sunset: 19:36
2013 12 31 Quito                 0 15 S  78 35 W -18        1 sunrise: 04:57 sunset: 19:38
2013 12 31 El_Hierro            27 44 N  18  3 W 10         0 sunrise: 07:59 sunset: 16:32
2013 12 31 El_Hierro            27 44 N  18  3 W 10         1 sunrise: 07:58 sunset: 16:33
2013 12 31 El_Hierro            27 44 N  18  3 W 0          0 sunrise: 07:07 sunset: 17:24
2013 12 31 El_Hierro            27 44 N  18  3 W 0          1 sunrise: 07:06 sunset: 17:25
2013 12 31 El_Hierro            27 44 N  18  3 W -0.583     0 sunrise: 07:04 sunset: 17:27
2013 12 31 El_Hierro            27 44 N  18  3 W -0.583     1 sunrise: 07:03 sunset: 17:28
2013 12 31 El_Hierro            27 44 N  18  3 W -0.833     0 sunrise: 07:03 sunset: 17:28
2013 12 31 El_Hierro            27 44 N  18  3 W -0.833     1 sunrise: 07:01 sunset: 17:29
2013 12 31 El_Hierro            27 44 N  18  3 W -12        0 sunrise: 06:08 sunset: 18:23
2013 12 31 El_Hierro            27 44 N  18  3 W -12        1 sunrise: 06:07 sunset: 18:24
2013 12 31 El_Hierro            27 44 N  18  3 W -18        0 sunrise: 05:39 sunset: 18:51
2013 12 31 El_Hierro            27 44 N  18  3 W -18        1 sunrise: 05:38 sunset: 18:52
EOD
}