]> Cypherpunks repositories - gostls13.git/commitdiff
time: fix daysIn for December
authorPeter Mundy <go.peter.90@gmail.com>
Wed, 7 Dec 2011 19:47:25 +0000 (14:47 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 7 Dec 2011 19:47:25 +0000 (14:47 -0500)
daysBefore[12+1]: index out of range
time.December and Windows SYSTEMTIME.wMonth
are 12 for December.

R=rsc, dsymonds
CC=golang-dev
https://golang.org/cl/5448130

src/pkg/time/internal_test.go
src/pkg/time/time.go
src/pkg/time/time_test.go

index 2c4df335f9b44a4e247e4cc3183eb65d71e5bd7e..b753896d775e132093f3ba474084c120b47236b4 100644 (file)
@@ -10,3 +10,4 @@ func init() {
 }
 
 var Interrupt = interrupt
+var DaysIn = daysIn
index 04ed86cf25f860e8de782092627a184db98d3e62..4e9accfe581a5b69bb96aaee931c2b7235ab6987 100644 (file)
@@ -673,7 +673,7 @@ func daysIn(m Month, year int) int {
        if m == February && isLeap(year) {
                return 29
        }
-       return int(daysBefore[m+1] - daysBefore[m])
+       return int(daysBefore[m] - daysBefore[m-1])
 }
 
 // Provided by package runtime.
index 6d1e79b542bb28c770846f777dbee9402d54ae24..464e9bfa2c6affda66ee395b3500d0c29219b950 100644 (file)
@@ -632,6 +632,29 @@ func TestDate(t *testing.T) {
        }
 }
 
+var daysInTests = []struct {
+       year, month, di int
+}{
+       {2011, 1, 31},  // January, first month, 31 days
+       {2011, 2, 28},  // February, non-leap year, 28 days
+       {2012, 2, 29},  // February, leap year, 29 days
+       {2011, 6, 30},  // June, 30 days
+       {2011, 12, 31}, // December, last month, 31 days
+}
+
+func TestDaysIn(t *testing.T) {
+       // The daysIn function is not exported.
+       // Test the daysIn function via the `var DaysIn = daysIn`
+       // statement in the internal_test.go file.
+       for _, tt := range daysInTests {
+               di := DaysIn(Month(tt.month), tt.year)
+               if di != tt.di {
+                       t.Errorf("got %d; expected %d for %d-%02d",
+                               di, tt.di, tt.year, tt.month)
+               }
+       }
+}
+
 func BenchmarkNow(b *testing.B) {
        for i := 0; i < b.N; i++ {
                Now()