227 lines
9.4 KiB
Go
227 lines
9.4 KiB
Go
package julian
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestMonthLength(t *testing.T) {
|
|
var tests = []struct {
|
|
y int
|
|
m time.Month
|
|
want int
|
|
}{
|
|
{2001, time.January, 31},
|
|
{2001, time.February, 28},
|
|
{2000, time.February, 29},
|
|
{2001, time.March, 31},
|
|
{2001, time.April, 30},
|
|
{2001, time.May, 31},
|
|
{2001, time.June, 30},
|
|
{2001, time.July, 31},
|
|
{2001, time.August, 31},
|
|
{2001, time.September, 30},
|
|
{2001, time.October, 31},
|
|
{2001, time.November, 30},
|
|
{2001, time.December, 31},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
testname := fmt.Sprintf("%v, %d", tt.m, tt.y)
|
|
t.Run(testname, func(t *testing.T) {
|
|
ans := monthLength(tt.y, tt.m)
|
|
if ans != tt.want {
|
|
t.Errorf("got %d, want %d", ans, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDateDiff(t *testing.T) {
|
|
var tests = []struct {
|
|
d Date
|
|
days int
|
|
want Date
|
|
}{
|
|
{Date{2001, time.January, 20}, 5, Date{2001, time.January, 25}},
|
|
{Date{2001, time.February, 28}, 5, Date{2001, time.March, 5}},
|
|
{Date{2004, time.February, 28}, 5, Date{2004, time.March, 4}},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
testname := fmt.Sprintf("%v, %d", tt.d, tt.days)
|
|
t.Run(testname, func(t *testing.T) {
|
|
ans := dateDiff(tt.d, tt.days)
|
|
if ans != tt.want {
|
|
t.Errorf("got %d, want %d", ans, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNextMonth(t *testing.T) {
|
|
ans1, ans2 := nextMonth(2000, time.December)
|
|
if ans1 != 2001 || ans2 != time.January {
|
|
t.Errorf("nextMonth(2000, time.December) = %d, %v; want 2001, time.January", ans1, ans2)
|
|
}
|
|
}
|
|
|
|
func TestJDateToTime(t *testing.T) {
|
|
gDate := func(year int, month time.Month, day int) time.Time {
|
|
return time.Date(year, month, day, 0, 0, 0, 0, time.UTC)
|
|
}
|
|
var tests = []struct {
|
|
d Date
|
|
want time.Time
|
|
}{
|
|
{Date{100, time.February, 29}, gDate(100, time.February, 27)},
|
|
{Date{100, time.March, 1}, gDate(100, time.February, 28)},
|
|
{Date{100, time.March, 2}, gDate(100, time.March, 1)},
|
|
{Date{200, time.February, 28}, gDate(200, time.February, 27)},
|
|
{Date{200, time.February, 29}, gDate(200, time.February, 28)},
|
|
{Date{200, time.March, 1}, gDate(200, time.March, 1)},
|
|
{Date{300, time.February, 28}, gDate(300, time.February, 28)},
|
|
{Date{300, time.February, 29}, gDate(300, time.March, 1)},
|
|
{Date{300, time.March, 1}, gDate(300, time.March, 2)},
|
|
{Date{500, time.February, 28}, gDate(500, time.March, 1)},
|
|
{Date{500, time.February, 29}, gDate(500, time.March, 2)},
|
|
{Date{500, time.March, 1}, gDate(500, time.March, 3)},
|
|
{Date{600, time.February, 28}, gDate(600, time.March, 2)},
|
|
{Date{600, time.February, 29}, gDate(600, time.March, 3)},
|
|
{Date{600, time.March, 1}, gDate(600, time.March, 4)},
|
|
{Date{700, time.February, 28}, gDate(700, time.March, 3)},
|
|
{Date{700, time.February, 29}, gDate(700, time.March, 4)},
|
|
{Date{700, time.March, 1}, gDate(700, time.March, 5)},
|
|
{Date{900, time.February, 28}, gDate(900, time.March, 4)},
|
|
{Date{900, time.February, 29}, gDate(900, time.March, 5)},
|
|
{Date{900, time.March, 1}, gDate(900, time.March, 6)},
|
|
{Date{1000, time.February, 28}, gDate(1000, time.March, 5)},
|
|
{Date{1000, time.February, 29}, gDate(1000, time.March, 6)},
|
|
{Date{1000, time.March, 1}, gDate(1000, time.March, 7)},
|
|
{Date{1100, time.February, 28}, gDate(1100, time.March, 6)},
|
|
{Date{1100, time.February, 29}, gDate(1100, time.March, 7)},
|
|
{Date{1100, time.March, 1}, gDate(1100, time.March, 8)},
|
|
{Date{1300, time.February, 28}, gDate(1300, time.March, 7)},
|
|
{Date{1300, time.February, 29}, gDate(1300, time.March, 8)},
|
|
{Date{1300, time.March, 1}, gDate(1300, time.March, 9)},
|
|
{Date{1400, time.February, 28}, gDate(1400, time.March, 8)},
|
|
{Date{1400, time.February, 29}, gDate(1400, time.March, 9)},
|
|
{Date{1400, time.March, 1}, gDate(1400, time.March, 10)},
|
|
{Date{1500, time.February, 28}, gDate(1500, time.March, 9)},
|
|
{Date{1500, time.February, 29}, gDate(1500, time.March, 10)},
|
|
{Date{1500, time.March, 1}, gDate(1500, time.March, 11)},
|
|
{Date{1582, time.October, 4}, gDate(1582, time.October, 14)},
|
|
{Date{1582, time.October, 5}, gDate(1582, time.October, 15)},
|
|
{Date{1582, time.October, 6}, gDate(1582, time.October, 16)},
|
|
{Date{1700, time.February, 18}, gDate(1700, time.February, 28)},
|
|
{Date{1700, time.February, 19}, gDate(1700, time.March, 1)},
|
|
{Date{1700, time.February, 28}, gDate(1700, time.March, 10)},
|
|
{Date{1700, time.February, 29}, gDate(1700, time.March, 11)},
|
|
{Date{1700, time.March, 1}, gDate(1700, time.March, 12)},
|
|
{Date{1800, time.February, 17}, gDate(1800, time.February, 28)},
|
|
{Date{1800, time.February, 18}, gDate(1800, time.March, 1)},
|
|
{Date{1800, time.February, 28}, gDate(1800, time.March, 11)},
|
|
{Date{1800, time.February, 29}, gDate(1800, time.March, 12)},
|
|
{Date{1800, time.March, 1}, gDate(1800, time.March, 13)},
|
|
{Date{1900, time.February, 16}, gDate(1900, time.February, 28)},
|
|
{Date{1900, time.February, 17}, gDate(1900, time.March, 1)},
|
|
{Date{1900, time.February, 28}, gDate(1900, time.March, 12)},
|
|
{Date{1900, time.February, 29}, gDate(1900, time.March, 13)},
|
|
{Date{1900, time.March, 1}, gDate(1900, time.March, 14)},
|
|
{Date{2100, time.February, 15}, gDate(2100, time.February, 28)},
|
|
{Date{2100, time.February, 16}, gDate(2100, time.March, 1)},
|
|
{Date{2100, time.February, 28}, gDate(2100, time.March, 13)},
|
|
{Date{2100, time.February, 29}, gDate(2100, time.March, 14)},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
testname := fmt.Sprintf("%v, %v", tt.d, tt.want)
|
|
t.Run(testname, func(t *testing.T) {
|
|
ans := JDateToTime(tt.d)
|
|
if ans != tt.want {
|
|
t.Errorf("got %v, want %v", ans, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestTimeToJDate(t *testing.T) {
|
|
gDate := func(year int, month time.Month, day int) time.Time {
|
|
return time.Date(year, month, day, 0, 0, 0, 0, time.UTC)
|
|
}
|
|
var tests = []struct {
|
|
gd time.Time
|
|
want Date
|
|
}{
|
|
{gDate(100, time.February, 27), Date{100, time.February, 29}},
|
|
{gDate(100, time.February, 28), Date{100, time.March, 1}},
|
|
{gDate(100, time.March, 1), Date{100, time.March, 2}},
|
|
{gDate(200, time.February, 27), Date{200, time.February, 28}},
|
|
{gDate(200, time.February, 28), Date{200, time.February, 29}},
|
|
{gDate(200, time.March, 1), Date{200, time.March, 1}},
|
|
{gDate(300, time.February, 28), Date{300, time.February, 28}},
|
|
{gDate(300, time.March, 1), Date{300, time.February, 29}},
|
|
{gDate(300, time.March, 2), Date{300, time.March, 1}},
|
|
{gDate(500, time.March, 1), Date{500, time.February, 28}},
|
|
{gDate(500, time.March, 2), Date{500, time.February, 29}},
|
|
{gDate(500, time.March, 3), Date{500, time.March, 1}},
|
|
{gDate(600, time.March, 2), Date{600, time.February, 28}},
|
|
{gDate(600, time.March, 3), Date{600, time.February, 29}},
|
|
{gDate(600, time.March, 4), Date{600, time.March, 1}},
|
|
{gDate(700, time.March, 3), Date{700, time.February, 28}},
|
|
{gDate(700, time.March, 4), Date{700, time.February, 29}},
|
|
{gDate(700, time.March, 5), Date{700, time.March, 1}},
|
|
{gDate(900, time.March, 4), Date{900, time.February, 28}},
|
|
{gDate(900, time.March, 5), Date{900, time.February, 29}},
|
|
{gDate(900, time.March, 6), Date{900, time.March, 1}},
|
|
{gDate(1000, time.March, 5), Date{1000, time.February, 28}},
|
|
{gDate(1000, time.March, 6), Date{1000, time.February, 29}},
|
|
{gDate(1000, time.March, 7), Date{1000, time.March, 1}},
|
|
{gDate(1100, time.March, 6), Date{1100, time.February, 28}},
|
|
{gDate(1100, time.March, 7), Date{1100, time.February, 29}},
|
|
{gDate(1100, time.March, 8), Date{1100, time.March, 1}},
|
|
{gDate(1300, time.March, 7), Date{1300, time.February, 28}},
|
|
{gDate(1300, time.March, 8), Date{1300, time.February, 29}},
|
|
{gDate(1300, time.March, 9), Date{1300, time.March, 1}},
|
|
{gDate(1400, time.March, 8), Date{1400, time.February, 28}},
|
|
{gDate(1400, time.March, 9), Date{1400, time.February, 29}},
|
|
{gDate(1400, time.March, 10), Date{1400, time.March, 1}},
|
|
{gDate(1500, time.March, 9), Date{1500, time.February, 28}},
|
|
{gDate(1500, time.March, 10), Date{1500, time.February, 29}},
|
|
{gDate(1500, time.March, 11), Date{1500, time.March, 1}},
|
|
{gDate(1582, time.October, 14), Date{1582, time.October, 4}},
|
|
{gDate(1582, time.October, 15), Date{1582, time.October, 5}},
|
|
{gDate(1582, time.October, 16), Date{1582, time.October, 6}},
|
|
{gDate(1700, time.February, 28), Date{1700, time.February, 18}},
|
|
{gDate(1700, time.March, 1), Date{1700, time.February, 19}},
|
|
{gDate(1700, time.March, 10), Date{1700, time.February, 28}},
|
|
{gDate(1700, time.March, 11), Date{1700, time.February, 29}},
|
|
{gDate(1700, time.March, 12), Date{1700, time.March, 1}},
|
|
{gDate(1800, time.February, 28), Date{1800, time.February, 17}},
|
|
{gDate(1800, time.March, 1), Date{1800, time.February, 18}},
|
|
{gDate(1800, time.March, 11), Date{1800, time.February, 28}},
|
|
{gDate(1800, time.March, 12), Date{1800, time.February, 29}},
|
|
{gDate(1800, time.March, 13), Date{1800, time.March, 1}},
|
|
{gDate(1900, time.February, 28), Date{1900, time.February, 16}},
|
|
{gDate(1900, time.March, 1), Date{1900, time.February, 17}},
|
|
{gDate(1900, time.March, 12), Date{1900, time.February, 28}},
|
|
{gDate(1900, time.March, 13), Date{1900, time.February, 29}},
|
|
{gDate(1900, time.March, 14), Date{1900, time.March, 1}},
|
|
{gDate(2100, time.February, 28), Date{2100, time.February, 15}},
|
|
{gDate(2100, time.March, 1), Date{2100, time.February, 16}},
|
|
{gDate(2100, time.March, 13), Date{2100, time.February, 28}},
|
|
{gDate(2100, time.March, 14), Date{2100, time.February, 29}},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
testname := fmt.Sprintf("%v, %v", tt.gd, tt.want)
|
|
t.Run(testname, func(t *testing.T) {
|
|
ans := TimeToJDate(tt.gd)
|
|
if ans != tt.want {
|
|
t.Errorf("got %v, want %v", ans, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|