ruby-changes:2469
From: ko1@a...
Date: 18 Nov 2007 18:30:28 +0900
Subject: [ruby-changes:2469] akr - Ruby:r13960 (trunk): * time.c (time_minus): fix Time.at(2**60+1) - Time.at(2**60).
akr 2007-11-18 18:30:17 +0900 (Sun, 18 Nov 2007) New Revision: 13960 Modified files: trunk/ChangeLog trunk/test/ruby/test_time.rb trunk/time.c Log: * time.c (time_minus): fix Time.at(2**60+1) - Time.at(2**60). http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/time.c?r1=13960&r2=13959 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13960&r2=13959 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_time.rb?r1=13960&r2=13959 Index: time.c =================================================================== --- time.c (revision 13959) +++ time.c (revision 13960) @@ -1320,9 +1320,11 @@ double f; GetTimeval(time2, tobj2); - f = (double)tobj->tv.tv_sec - (double)tobj2->tv.tv_sec; + if (tobj->tv.tv_sec < tobj2->tv.tv_sec) + f = -(double)(unsigned_time_t)(tobj2->tv.tv_sec - tobj->tv.tv_sec); + else + f = (double)(unsigned_time_t)(tobj->tv.tv_sec - tobj2->tv.tv_sec); f += ((double)tobj->tv.tv_usec - (double)tobj2->tv.tv_usec)*1e-6; - /* XXX: should check float overflow on 64bit time_t platforms */ return DOUBLE2NUM(f); } Index: ChangeLog =================================================================== --- ChangeLog (revision 13959) +++ ChangeLog (revision 13960) @@ -1,3 +1,7 @@ +Sun Nov 18 18:27:47 2007 Tanaka Akira <akr@f...> + + * time.c (time_minus): fix Time.at(2**60+1) - Time.at(2**60). + Sun Nov 18 17:28:49 2007 Tanaka Akira <akr@f...> * time.c (time_arg): show actual year in 2-3 digits year warning. Index: test/ruby/test_time.rb =================================================================== --- test/ruby/test_time.rb (revision 13959) +++ test/ruby/test_time.rb (revision 13960) @@ -71,4 +71,14 @@ assert_equal(Time.at(0x7fffffff), Time.at(-0x80000000) - (-0xffffffff)) end end + + def test_big_minus + begin + bigtime0 = Time.at(2**60) + bigtime1 = Time.at(2**60+1) + rescue RangeError + return + end + assert_equal(1.0, bigtime1 - bigtime0) + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml