tests pass post refactor.

This commit is contained in:
Will Charczuk 2016-07-23 12:58:37 -07:00
parent fd2bfe14f0
commit d41c9313aa
3 changed files with 23 additions and 13 deletions

View file

@ -73,6 +73,8 @@ var (
// HolidayProvider is a function that returns if a given time falls on a holiday.
type HolidayProvider func(time.Time) bool
func DefaultHolidayProvider(_ time.Time) bool { return false }
// IsNYSEHoliday returns if a date was/is on a nyse holiday day.
func IsNYSEHoliday(t time.Time) bool {
te := t.In(Eastern())
@ -241,6 +243,10 @@ func NextMarketOpen(after, openTime time.Time, isHoliday HolidayProvider) time.T
afterEastern := after.In(Eastern())
todaysOpen := On(openTime, afterEastern)
if isHoliday == nil {
isHoliday = DefaultHolidayProvider
}
if afterEastern.Before(todaysOpen) && IsWeekDay(todaysOpen.Weekday()) && !isHoliday(todaysOpen) {
return todaysOpen
}
@ -262,6 +268,10 @@ func NextMarketOpen(after, openTime time.Time, isHoliday HolidayProvider) time.T
func NextMarketClose(after, closeTime time.Time, isHoliday HolidayProvider) time.Time {
afterEastern := after.In(Eastern())
if isHoliday == nil {
isHoliday = DefaultHolidayProvider
}
todaysClose := On(closeTime, afterEastern)
if afterEastern.Before(todaysClose) && IsWeekDay(todaysClose.Weekday()) && !isHoliday(todaysClose) {
return todaysClose
@ -292,7 +302,7 @@ func CalculateMarketSecondsBetween(start, end, marketOpen, marketClose time.Time
seconds += int64(startMarketClose.Sub(se) / time.Second)
}
cursor := NextMarketOpen(startMarketClose, marketClose, isHoliday)
cursor := NextMarketOpen(startMarketClose, marketOpen, isHoliday)
for BeforeDate(cursor, ee) {
if IsWeekDay(cursor.Weekday()) && !isHoliday(cursor) {
close := NextMarketClose(cursor, marketClose, isHoliday)

View file

@ -34,15 +34,15 @@ func TestNextMarketOpen(t *testing.T) {
weekend := time.Date(2016, 07, 23, 9, 31, 0, 0, Eastern())
assert.True(todayOpen.Equal(NextMarketOpen(beforeOpen)))
assert.True(tomorrowOpen.Equal(NextMarketOpen(afterOpen)))
assert.True(mondayOpen.Equal(NextMarketOpen(afterFriday)))
assert.True(mondayOpen.Equal(NextMarketOpen(weekend)))
assert.True(todayOpen.Equal(NextMarketOpen(beforeOpen, NYSEOpen, IsNYSEHoliday)))
assert.True(tomorrowOpen.Equal(NextMarketOpen(afterOpen, NYSEOpen, IsNYSEHoliday)))
assert.True(mondayOpen.Equal(NextMarketOpen(afterFriday, NYSEOpen, IsNYSEHoliday)))
assert.True(mondayOpen.Equal(NextMarketOpen(weekend, NYSEOpen, IsNYSEHoliday)))
testRegression := time.Date(2016, 07, 18, 16, 0, 0, 0, Eastern())
shouldbe := time.Date(2016, 07, 19, 9, 30, 0, 0, Eastern())
assert.True(shouldbe.Equal(NextMarketOpen(testRegression)))
assert.True(shouldbe.Equal(NextMarketOpen(testRegression, NYSEOpen, IsNYSEHoliday)))
}
func TestNextMarketClose(t *testing.T) {
@ -59,10 +59,10 @@ func TestNextMarketClose(t *testing.T) {
weekend := time.Date(2016, 07, 23, 9, 31, 0, 0, Eastern())
assert.True(todayClose.Equal(NextMarketClose(beforeClose)))
assert.True(tomorrowClose.Equal(NextMarketClose(afterClose)))
assert.True(mondayClose.Equal(NextMarketClose(afterFriday)))
assert.True(mondayClose.Equal(NextMarketClose(weekend)))
assert.True(todayClose.Equal(NextMarketClose(beforeClose, NYSEClose, IsNYSEHoliday)))
assert.True(tomorrowClose.Equal(NextMarketClose(afterClose, NYSEClose, IsNYSEHoliday)))
assert.True(mondayClose.Equal(NextMarketClose(afterFriday, NYSEClose, IsNYSEHoliday)))
assert.True(mondayClose.Equal(NextMarketClose(weekend, NYSEClose, IsNYSEHoliday)))
}
func TestCalculateMarketSecondsBetween(t *testing.T) {
@ -73,7 +73,7 @@ func TestCalculateMarketSecondsBetween(t *testing.T) {
shouldbe := 5 * 6.5 * 60 * 60
assert.Equal(shouldbe, CalculateMarketSecondsBetween(start, end))
assert.Equal(shouldbe, CalculateMarketSecondsBetween(start, end, NYSEOpen, NYSEClose, IsNYSEHoliday))
}
func TestCalculateMarketSecondsBetweenLTM(t *testing.T) {
@ -83,5 +83,5 @@ func TestCalculateMarketSecondsBetweenLTM(t *testing.T) {
end := time.Date(2016, 07, 01, 9, 30, 0, 0, Eastern())
shouldbe := 253 * 6.5 * 60 * 60 //253 full market days since this date last year.
assert.Equal(shouldbe, CalculateMarketSecondsBetween(start, end))
assert.Equal(shouldbe, CalculateMarketSecondsBetween(start, end, NYSEOpen, NYSEClose, IsNYSEHoliday))
}

View file

@ -47,7 +47,7 @@ func drawChart(res http.ResponseWriter, req *http.Request) {
},
YAxis: chart.YAxis{
Style: chart.Style{Show: true},
Range: chart.Range{
Range: &chart.ContinuousRange{
Max: 220.0,
Min: 180.0,
},