go-chart/sma_series_test.go

114 lines
2.3 KiB
Go
Raw Normal View History

2016-07-14 15:30:57 -04:00
package chart
import (
"testing"
"github.com/blendlabs/go-assert"
2017-04-30 03:39:38 -04:00
"github.com/wcharczuk/go-chart/sequence"
"github.com/wcharczuk/go-chart/util"
2016-07-14 15:30:57 -04:00
)
2017-04-28 19:07:36 -04:00
type mockValuesProvider struct {
2016-07-14 15:30:57 -04:00
X []float64
Y []float64
}
2017-04-28 19:07:36 -04:00
func (m mockValuesProvider) Len() int {
2017-04-30 03:39:38 -04:00
return util.Math.MinInt(len(m.X), len(m.Y))
2016-07-14 15:30:57 -04:00
}
2017-04-28 19:07:36 -04:00
func (m mockValuesProvider) GetValues(index int) (x, y float64) {
if index < 0 {
panic("negative index at GetValue()")
}
2017-04-30 04:12:15 -04:00
if index >= util.Math.MinInt(len(m.X), len(m.Y)) {
panic("index is outside the length of m.X or m.Y")
}
2016-07-14 15:30:57 -04:00
x = m.X[index]
y = m.Y[index]
return
}
func TestSMASeriesGetValue(t *testing.T) {
2016-07-14 15:30:57 -04:00
assert := assert.New(t)
2017-04-28 19:07:36 -04:00
mockSeries := mockValuesProvider{
2017-04-30 03:39:38 -04:00
sequence.Values(1.0, 10.0),
sequence.Values(10, 1.0),
2016-07-14 15:30:57 -04:00
}
assert.Equal(10, mockSeries.Len())
mas := &SMASeries{
2016-07-14 15:30:57 -04:00
InnerSeries: mockSeries,
Period: 10,
2016-07-14 15:30:57 -04:00
}
var yvalues []float64
for x := 0; x < mas.Len(); x++ {
2017-04-28 19:07:36 -04:00
_, y := mas.GetValues(x)
2016-07-14 15:30:57 -04:00
yvalues = append(yvalues, y)
}
assert.Equal(10.0, yvalues[0])
assert.Equal(9.5, yvalues[1])
assert.Equal(9.0, yvalues[2])
assert.Equal(8.5, yvalues[3])
assert.Equal(8.0, yvalues[4])
assert.Equal(7.5, yvalues[5])
assert.Equal(7.0, yvalues[6])
assert.Equal(6.5, yvalues[7])
assert.Equal(6.0, yvalues[8])
}
2016-07-14 15:31:42 -04:00
func TestSMASeriesGetLastValueWindowOverlap(t *testing.T) {
2016-07-14 15:31:42 -04:00
assert := assert.New(t)
2017-04-28 19:07:36 -04:00
mockSeries := mockValuesProvider{
2017-04-30 03:39:38 -04:00
sequence.Values(1.0, 10.0),
sequence.Values(10, 1.0),
2016-07-14 15:31:42 -04:00
}
assert.Equal(10, mockSeries.Len())
mas := &SMASeries{
2016-07-14 15:31:42 -04:00
InnerSeries: mockSeries,
Period: 15,
2016-07-14 15:31:42 -04:00
}
2016-07-14 16:14:02 -04:00
var yvalues []float64
for x := 0; x < mas.Len(); x++ {
2017-04-28 19:07:36 -04:00
_, y := mas.GetValues(x)
2016-07-14 16:14:02 -04:00
yvalues = append(yvalues, y)
}
2017-04-28 19:07:36 -04:00
lx, ly := mas.GetLastValues()
2016-07-14 15:31:42 -04:00
assert.Equal(10.0, lx)
assert.Equal(5.5, ly)
2016-07-14 16:14:02 -04:00
assert.Equal(yvalues[len(yvalues)-1], ly)
2016-07-14 15:31:42 -04:00
}
2016-07-14 16:11:03 -04:00
func TestSMASeriesGetLastValue(t *testing.T) {
2016-07-14 16:11:03 -04:00
assert := assert.New(t)
2017-04-28 19:07:36 -04:00
mockSeries := mockValuesProvider{
2017-04-30 03:39:38 -04:00
sequence.Values(1.0, 100.0),
sequence.Values(100, 1.0),
2016-07-14 16:11:03 -04:00
}
assert.Equal(100, mockSeries.Len())
mas := &SMASeries{
2016-07-14 16:11:03 -04:00
InnerSeries: mockSeries,
Period: 10,
2016-07-14 16:11:03 -04:00
}
2016-07-14 16:13:35 -04:00
var yvalues []float64
for x := 0; x < mas.Len(); x++ {
2017-04-28 19:07:36 -04:00
_, y := mas.GetValues(x)
2016-07-14 16:13:35 -04:00
yvalues = append(yvalues, y)
}
2017-04-28 19:07:36 -04:00
lx, ly := mas.GetLastValues()
2016-07-14 16:11:03 -04:00
assert.Equal(100.0, lx)
assert.Equal(6, ly)
2016-07-14 16:13:35 -04:00
assert.Equal(yvalues[len(yvalues)-1], ly)
2016-07-14 16:11:03 -04:00
}