> Mainly don't go with hires even though a 'famous' module already does.

Sounds reasonable to me.  Here is a revised version of the patch.  I made a basic 
attempt at testing.  The tests I think are questionable are already inside a skip 
block.  That way it won't break the CVS version and hopefully a few people will 
comment out the skip and give it a try before the next release.

-J

--
cvs server: Diffing .
Index: Makefile.PL
===================================================================
RCS file: /cvsroot/perl-date-time/modules/DateTime.pm/Makefile.PL,v
retrieving revision 1.29
diff -u -r1.29 Makefile.PL
--- Makefile.PL 13 Jun 2003 18:04:06 -0000      1.29
+++ Makefile.PL 3 Aug 2003 09:12:13 -0000
@@ -78,6 +78,7 @@
                                      'Params::Validate' => 0.52,
                                      'Test::More'  => 0,
                                      'Time::Local' => 1.04,
+                                     'Time::HiRes' => 1.50,
                                      'DateTime::LeapSecond' => 0.02,
                                    },
                  );
cvs server: Diffing lib
Index: lib/DateTime.pm
===================================================================
RCS file: /cvsroot/perl-date-time/modules/DateTime.pm/lib/DateTime.pm,v
retrieving revision 1.232
diff -u -r1.232 DateTime.pm
--- lib/DateTime.pm     31 Jul 2003 23:49:41 -0000      1.232
+++ lib/DateTime.pm     3 Aug 2003 09:12:15 -0000
@@ -48,6 +48,7 @@
 use DateTime::LeapSecond;
 use Params::Validate qw( validate SCALAR BOOLEAN HASHREF OBJECT );
 use Time::Local ();
+use Time::HiRes;

 # for some reason, overloading doesn't work unless fallback is listed
 # early.
@@ -385,7 +386,7 @@

     # Because epoch may come from Time::HiRes
     my $fraction = $p{epoch} - int( $p{epoch} );
-    $args{nanosecond} = $fraction * MAX_NANOSECONDS
+    $args{nanosecond} = int( $fraction * MAX_NANOSECONDS )
         if $fraction;

     # Note, for very large negative values this may give a blatantly
@@ -404,6 +405,8 @@

 # use scalar time in case someone's loaded Time::Piece
 sub now { shift->from_epoch( epoch => (scalar time), @_ ) }
+
+sub now_high_res { shift->from_epoch( epoch => Time::HiRes::time, @_ ) }

 sub today { shift->now(@_)->truncate( to => 'day' ) }

cvs server: Diffing lib/DateTime
cvs server: Diffing lib/DateTime/Language
cvs server: Diffing t
Index: t/04epoch.t
===================================================================
RCS file: /cvsroot/perl-date-time/modules/DateTime.pm/t/04epoch.t,v
retrieving revision 1.16
diff -u -r1.16 04epoch.t
--- t/04epoch.t 13 Jun 2003 16:57:54 -0000      1.16
+++ t/04epoch.t 3 Aug 2003 09:12:15 -0000
@@ -2,7 +2,8 @@

 use strict;

-use Test::More tests => 31;
+use Test::More tests => 36;
+use Time::HiRes;

 use DateTime;

@@ -32,6 +33,24 @@
     is( $nowtest->hour, $nowtest2->hour, "Hour: Create without args" );
     is( $nowtest->month, $nowtest2->month, "Month : Create without args" );
     is( $nowtest->minute, $nowtest2->minute, "Minute: Create without args" );
+}
+
+{
+    # these tests could break if the time changed during the next three lines
+    my $now = Time::HiRes::time;
+    my $nowtest = DateTime->now_high_res();
+    my $nowtest2 = DateTime->from_epoch( epoch => $now );
+    is( $nowtest->hour, $nowtest2->hour, "Hour: Create without args" );
+    is( $nowtest->month, $nowtest2->month, "Month : Create without args" );
+    is( $nowtest->minute, $nowtest2->minute, "Minute: Create without args" );
+    SKIP: {
+        skip "This might be crazy", 2;
+
+        my $dur = $nowtest - $nowtest2;
+        is( $dur->seconds, 0, "Second: Create without args" );
+        ok( $dur->nanoseconds < 100_000_000, "Nanosecond: Create without args" );
+    };
+
 }

 {

Reply via email to