Author: Kodi
Date: 2010-07-08 01:42:53 +0200 (Thu, 08 Jul 2010)
New Revision: 31571

Modified:
   docs/Perl6/Spec/S32-setting-library/Temporal.pod
   t/spec/S32-temporal/DateTime.t
Log:
[S32] Dropped mention of quarters from Temporal.pod. I don't think 
quarter-numbering belongs in the core, since (as far as I know) there is no 
precise standard way of dividing calendar years into four.

Modified: docs/Perl6/Spec/S32-setting-library/Temporal.pod
===================================================================
--- docs/Perl6/Spec/S32-setting-library/Temporal.pod    2010-07-07 22:19:08 UTC 
(rev 31570)
+++ docs/Perl6/Spec/S32-setting-library/Temporal.pod    2010-07-07 23:42:53 UTC 
(rev 31571)
@@ -128,9 +128,6 @@
 month, the day itself included. For example, June 9, 2003 is the second
 Monday of the month, and so this method returns 2 for that day.
 
-The C<quarter> method returns the quarter of the year, a value between 1
-and 4. The C<day-of-quarter> method returns the day of the quarter.
-
 The C<day-of-year> method returns the day of the year, a value between 1
 and 366.
 

Modified: t/spec/S32-temporal/DateTime.t
===================================================================
--- t/spec/S32-temporal/DateTime.t      2010-07-07 22:19:08 UTC (rev 31570)
+++ t/spec/S32-temporal/DateTime.t      2010-07-07 23:42:53 UTC (rev 31571)
@@ -1,8 +1,10 @@
 use v6;
 use Test;
 
+use Temporal; use Date; # XXX
+
 plan *;
-
+#`⁅
 my ( DateTime $g1, DateTime $g2, Num $t, Int $d );
 
 $g1 = DateTime.from-epoch(0);
@@ -132,17 +134,17 @@
 is $date.month, 6, 'Date month'; # test 23
 is $date.day, 4, 'Date day'; # test 24
 
-# ---------------------------------------------------------------
-
+# --------------------------------------------------------------------
+#`⁆
 sub dt { DateTime.new(year => 1984, |%_); }
 sub ds (Str $s) { DateTime.new($s) }
 sub ymd ($y, $m, $d) { DateTime.new(year => $y, month => $m, day => $d); }
 
 my $now = DateTime.now;
-
-# ---------------------------------------------------------------
+#`⁅
+# --------------------------------------------------------------------
 # Input validation
-# ---------------------------------------------------------------
+# --------------------------------------------------------------------
 
 # L<S32::Temporal/'C<DateTime>'/outside of the ranges specified>
 
@@ -197,9 +199,9 @@
 lives_ok { $now.set(second => 61.5) }, 'DateTime accepts second 61.5 (.set)';
 dies_ok { $now.set(second => 62) }, 'DateTime rejects second 62 (.set)';
 
-# ---------------------------------------------------------------
+# --------------------------------------------------------------------
 # L<S32::Temporal/'"Get" methods'/'The method C<whole-second>'>
-# ---------------------------------------------------------------
+# --------------------------------------------------------------------
 
 is dt(second => 22).whole-second, 22, 'DateTime.whole-second (22)';
 is dt(second => 22.1).whole-second, 22, 'DateTime.whole-second (22.1)';
@@ -209,9 +211,9 @@
 is dt(second => 60).whole-second, 60, 'DateTime.whole-second (60)';
 is dt(second => 60.5).whole-second, 60, 'DateTime.whole-second (60.5)';
 
-# ---------------------------------------------------------------
+# --------------------------------------------------------------------
 # L<S32::Temporal/'"Get" methods'/'The method C<week>'>
-# ---------------------------------------------------------------
+# --------------------------------------------------------------------
 
 is ymd(1977, 8, 20).week.join(' '), '1977 33', 'DateTime.week (1977-8-20)';
 is ymd(1977, 8, 20).week-year, 1977, 'DateTime.week (1977-8-20)';
@@ -238,14 +240,121 @@
 is ymd(2010, 01, 03).week-year, 2009, 'DateTime.week-year (2010-01-03)';
 is ymd(2010, 01, 03).week-number, 53, 'DateTime.week-number (2010-01-03)';
 
-# ---------------------------------------------------------------
+# --------------------------------------------------------------------
 # L<S32::Temporal/'"Get" methods'/"also $dt.date('-')">
-# ---------------------------------------------------------------
+# --------------------------------------------------------------------
 
 is $now.date, $now.ymd, 'DateTime.ymd can be spelled as DateTime.date';
 is $now.time, $now.hms, 'DateTime.hms can be spelled as DateTime.time';
 
+# --------------------------------------------------------------------
+# L<S32::Temporal/'"Set" methods'/'The C<truncate> method'>
+# --------------------------------------------------------------------
+
+{
+    my $moon-landing = dt    # Although the seconds part is fictional.
+       year => 1969, month => 6, day => 20,
+       hour => 8, minute => 17, second => 32.4;
+
+    my $dt = $moon-landing.clone; $dt.truncate(to => 'second');
+    is $dt.second, 32, 'DateTime.truncate(to => "second")';
+    $dt = $moon-landing.clone; $dt.truncate(to => 'minute');
+    is $dt.iso8601, '1969-06-20T08:17:00+0000', 'DateTime.truncate(to => 
"minute")';
+    $dt = $moon-landing.clone; $dt.truncate(to => 'hour');
+    is $dt.iso8601, '1969-06-20T08:00:00+0000', 'DateTime.truncate(to => 
"hour")';
+    $dt = $moon-landing.clone; $dt.truncate(to => 'day');
+    is $dt.iso8601, '1969-06-20T00:00:00+0000', 'DateTime.truncate(to => 
"day")';
+    $dt = $moon-landing.clone; $dt.truncate(to => 'month');
+    is $dt.iso8601, '1969-06-01T00:00:00+0000', 'DateTime.truncate(to => 
"month")';
+    $dt = $moon-landing.clone; $dt.truncate(to => 'year');
+    is $dt.iso8601, '1969-01-01T00:00:00+0000', 'DateTime.truncate(to => 
"year")';
+
+    $dt = ymd 1999, 1, 18; $dt.truncate(to => 'week');
+    is $dt.iso8601, '1999-01-18T00:00:00+0000', 'DateTime.truncate(to => 
"week") (no change in day)';
+    $dt = ymd 1999, 1, 19; $dt.truncate(to => 'week');
+    is $dt.iso8601, '1999-01-18T00:00:00+0000', 'DateTime.truncate(to => 
"week") (short jump)';
+    $dt = ymd 1999, 1, 17; $dt.truncate(to => 'week');
+    is $dt.iso8601, '1999-01-11T00:00:00+0000', 'DateTime.truncate(to => 
"week") (long jump)';
+    $dt = ymd 1999, 4, 2; $dt.truncate(to => 'week');
+    is $dt.iso8601, '1999-03-29T00:00:00+0000', 'DateTime.truncate(to => 
"week") (changing month)';
+    $dt = ymd 1999, 1, 3; $dt.truncate(to => 'week');
+    is $dt.iso8601, '1998-12-28T00:00:00+0000', 'DateTime.truncate(to => 
"week") (changing year)';
+    $dt = ymd 2000, 3, 1; $dt.truncate(to => 'week');
+    is $dt.iso8601, '2000-02-28T00:00:00+0000', 'DateTime.truncate(to => 
"week") (skipping over Leap Day)';
+    $dt = ymd 1988, 3, 3; $dt.truncate(to => 'week');
+    is $dt.iso8601, '1988-02-29T00:00:00+0000', 'DateTime.truncate(to => 
"week") (landing on Leap Day)';
+}
+
+# --------------------------------------------------------------------
+# L<S32::Temporal/'"Get" methods'/'The C<day-of-year> method'>
+# --------------------------------------------------------------------
+
+is ymd(1975,  1,  1).day-of-year,   1, 'DateTime.day-of-year (1975-01-01)';
+is ymd(1977,  5,  5).day-of-year, 125, 'DateTime.day-of-year (1977-05-05)';
+is ymd(1983, 11, 27).day-of-year, 331, 'DateTime.day-of-year (1983-11-27)';
+is ymd(1999,  2, 28).day-of-year,  59, 'DateTime.day-of-year (1999-02-28)';
+is ymd(1999,  3,  1).day-of-year,  60, 'DateTime.day-of-year (1999-03-01)';
+is ymd(1999, 12, 31).day-of-year, 365, 'DateTime.day-of-year (1999-12-31)';
+is ymd(2000,  2, 28).day-of-year,  59, 'DateTime.day-of-year (2000-02-28)';
+is ymd(2000,  2, 29).day-of-year,  60, 'DateTime.day-of-year (2000-02-29)';
+is ymd(2000,  3,  1).day-of-year,  61, 'DateTime.day-of-year (2000-03-01)';
+is ymd(2000, 12, 31).day-of-year, 366, 'DateTime.day-of-year (2000-12-31)';
+
+# --------------------------------------------------------------------
+# L<S32::Temporal/'"Get" methods'/'The C<weekday-of-month> method'>
+# --------------------------------------------------------------------
+
+is ymd(1982, 2,  1).weekday-of-month, 1, 'DateTime.weekday-of-month 
(1982-02-01)';
+is ymd(1982, 2,  7).weekday-of-month, 1, 'DateTime.weekday-of-month 
(1982-02-07)';
+is ymd(1982, 2,  8).weekday-of-month, 2, 'DateTime.weekday-of-month 
(1982-02-08)';
+is ymd(1982, 2, 18).weekday-of-month, 3, 'DateTime.weekday-of-month 
(1982-02-18)';
+is ymd(1982, 2, 28).weekday-of-month, 4, 'DateTime.weekday-of-month 
(1982-02-28)';
+is ymd(1982, 4,  4).weekday-of-month, 1, 'DateTime.weekday-of-month 
(1982-04-04)';
+is ymd(1982, 4,  7).weekday-of-month, 1, 'DateTime.weekday-of-month 
(1982-04-07)';
+is ymd(1982, 4,  8).weekday-of-month, 2, 'DateTime.weekday-of-month 
(1982-04-08)';
+is ymd(1982, 4, 13).weekday-of-month, 2, 'DateTime.weekday-of-month 
(1982-04-13)';
+is ymd(1982, 4, 30).weekday-of-month, 5, 'DateTime.weekday-of-month 
(1982-04-30)';
+
+# --------------------------------------------------------------------
+# L<S32::Temporal/'"Set" methods'/adjust the time zone>
+# --------------------------------------------------------------------
+
+# We use $dt.set(timezone => FOO) instead of $dt.timezone = FOO
+# because Rakudo hasn't yet implemented the latter.
+
+{
+    sub t0($tz) { ds "2005-02-04T15:25:00$tz" }
+
+    say 'a';
+    my $dt = t0 '+0900'; $dt.set(timezone => '+0600');
+    is $dt.hour, 12, 'Changing time zones';
+
+    $dt = t0 '+0200'; $dt.set(timezone => '+0400');
+    is $dt.iso8601, '2005-02-04T17:25:00+0400', 'Changing time zones';
+    $dt = t0 '+0000'; $dt.set(timezone => '-0100');
+    is $dt.iso8601, '2005-02-04T14:25:00-0100', 'Changing time zones';
+    $dt = t0 '+0100'; $dt.set(timezone => '-0100');
+    is $dt.iso8601, '2005-02-04T13:25:00-0100', 'Changing time zones';
+    $dt = t0 '-0200'; $dt.set(timezone => '-0500');
+    is $dt.iso8601, '2005-02-04T12:25:00-0500', 'Changing time zones';
+    $dt = t0 '+0000'; $dt.set(timezone => '-0013');
+    is $dt.iso8601, '2005-02-04T15:12:00-0013', 'Changing time zones (minus 
minutes)';
+    $dt = t0 '+0000'; $dt.set(timezone => '-0027');
+    is $dt.iso8601, '2005-02-04T14:58:00-0027', 'Changing time zones (hour 
rollover 1)';
+    $dt = t0 '+0000'; $dt.set(timezone => '+0044');
+    is $dt.iso8601, '2005-02-04T16:09:00+0044', 'Changing time zones (hour 
rollover 2)';
+    $dt = t0 '+0311'; $dt.set(timezone => '-0227');
+    is $dt.iso8601, '2005-02-04T09:47:00-0227', 'Changing time zones (hours 
and minutes)';
+    $dt = t0 '+0000'; $dt.set(timezone => '-1855');
+    is $dt.iso8601, '2005-02-03T20:30:00-1855', 'Changing time zones (day 
rollover)';
+    $dt = ds "2005-01-01T02:22:00+0300"; $dt.set(timezone => '+0035');
+    is $dt.iso8601, '2004-12-31T23:57:00+0035', 'Changing time zones (year 
rollover)';
+}
+#`⁆
+
+
 # TODO: day-of-month
+# TODO: offset
 
 done_testing;
 

Reply via email to