some regression tests
This commit is contained in:
parent
07c96b1948
commit
c7170a2650
5 changed files with 61 additions and 2 deletions
|
@ -2,6 +2,7 @@ package chart
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"math"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -265,3 +266,41 @@ func TestChartSingleSeries(t *testing.T) {
|
||||||
c.Render(PNG, buffer)
|
c.Render(PNG, buffer)
|
||||||
assert.NotEmpty(buffer.Bytes())
|
assert.NotEmpty(buffer.Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestChartRegressionBadRanges(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
c := Chart{
|
||||||
|
Series: []Series{
|
||||||
|
ContinuousSeries{
|
||||||
|
XValues: []float64{math.Inf(1), math.Inf(1), math.Inf(1), math.Inf(1), math.Inf(1)},
|
||||||
|
YValues: []float64{1.0, 2.0, 3.0, 4.0, 4.5},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
buffer := bytes.NewBuffer([]byte{})
|
||||||
|
c.Render(PNG, buffer)
|
||||||
|
assert.True(true, "Render needs to finish.")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestChartRegressionBadRangesByUser(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
c := Chart{
|
||||||
|
YAxis: YAxis{
|
||||||
|
Range: Range{
|
||||||
|
Min: math.Inf(-1),
|
||||||
|
Max: math.Inf(1), // this could really happen? eh.
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Series: []Series{
|
||||||
|
ContinuousSeries{
|
||||||
|
XValues: Seq(1.0, 10.0),
|
||||||
|
YValues: Seq(1.0, 10.0),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
buffer := bytes.NewBuffer([]byte{})
|
||||||
|
c.Render(PNG, buffer)
|
||||||
|
assert.True(true, "Render needs to finish.")
|
||||||
|
}
|
||||||
|
|
|
@ -43,8 +43,10 @@ const (
|
||||||
//DefaultHorizontalTickWidth is half the margin.
|
//DefaultHorizontalTickWidth is half the margin.
|
||||||
DefaultHorizontalTickWidth = DefaultYAxisMargin >> 1
|
DefaultHorizontalTickWidth = DefaultYAxisMargin >> 1
|
||||||
|
|
||||||
// DefaultTickCount is the defautl number of ticks to show
|
// DefaultTickCount is the default number of ticks to show
|
||||||
DefaultTickCount = 10
|
DefaultTickCount = 10
|
||||||
|
// DefaultTickCountSanityCheck is a hard limit on number of ticks to prevent infinite loops.
|
||||||
|
DefaultTickCountSanityCheck = 1 << 10 //1024
|
||||||
|
|
||||||
// DefaultMinimumTickHorizontalSpacing is the minimum distance between horizontal ticks.
|
// DefaultMinimumTickHorizontalSpacing is the minimum distance between horizontal ticks.
|
||||||
DefaultMinimumTickHorizontalSpacing = 20
|
DefaultMinimumTickHorizontalSpacing = 20
|
||||||
|
|
5
tick.go
5
tick.go
|
@ -9,6 +9,11 @@ func GenerateTicksWithStep(ra Range, step float64, vf ValueFormatter) []Tick {
|
||||||
Value: cursor,
|
Value: cursor,
|
||||||
Label: vf(cursor),
|
Label: vf(cursor),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// this guard is in place in case step is super, super small.
|
||||||
|
if len(ticks) > DefaultTickCountSanityCheck {
|
||||||
|
return ticks
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ticks
|
return ticks
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ func (ts TimeSeries) Len() int {
|
||||||
|
|
||||||
// GetValue gets a value at a given index.
|
// GetValue gets a value at a given index.
|
||||||
func (ts TimeSeries) GetValue(index int) (x float64, y float64) {
|
func (ts TimeSeries) GetValue(index int) (x float64, y float64) {
|
||||||
x = float64(ts.XValues[index].Unix())
|
x = TimeToFloat64(ts.XValues[index])
|
||||||
y = ts.YValues[index]
|
y = ts.YValues[index]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
13
util.go
13
util.go
|
@ -122,3 +122,16 @@ func AbsInt(value int) int {
|
||||||
}
|
}
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Seq produces an array of floats from [start,end] by optional steps.
|
||||||
|
func Seq(start, end float64, steps ...float64) []float64 {
|
||||||
|
var values []float64
|
||||||
|
step := 1.0
|
||||||
|
if len(steps) > 0 {
|
||||||
|
step = steps[0]
|
||||||
|
}
|
||||||
|
for x := start; x <= end; x += step {
|
||||||
|
values = append(values, x)
|
||||||
|
}
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue