tweaks to range validation.
This commit is contained in:
parent
114738a2de
commit
b2de33058f
44
chart.go
44
chart.go
|
@ -2,6 +2,7 @@ package chart
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
|
||||
|
@ -69,8 +70,12 @@ func (c Chart) GetHeight() int {
|
|||
// Render renders the chart with the given renderer to the given io.Writer.
|
||||
func (c Chart) Render(rp RendererProvider, w io.Writer) error {
|
||||
if len(c.Series) == 0 {
|
||||
return errors.New("Please provide at least one series")
|
||||
return errors.New("please provide at least one series")
|
||||
}
|
||||
if visibleSeriesErr := c.checkHasVisibleSeries(); visibleSeriesErr != nil {
|
||||
return visibleSeriesErr
|
||||
}
|
||||
|
||||
c.YAxisSecondary.AxisType = YAxisSecondary
|
||||
|
||||
r, err := rp(c.GetWidth(), c.GetHeight())
|
||||
|
@ -134,6 +139,17 @@ func (c Chart) Render(rp RendererProvider, w io.Writer) error {
|
|||
return r.Save(w)
|
||||
}
|
||||
|
||||
func (c Chart) checkHasVisibleSeries() error {
|
||||
hasVisibleSeries := false
|
||||
for _, s := range c.Series {
|
||||
hasVisibleSeries = hasVisibleSeries || (s.GetStyle().IsZero() || s.GetStyle().Show)
|
||||
}
|
||||
if !hasVisibleSeries {
|
||||
return fmt.Errorf("must have (1) visible series; make sure if you set a style, you set .Show = true")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c Chart) validateSeries() error {
|
||||
var err error
|
||||
for _, s := range c.Series {
|
||||
|
@ -272,15 +288,29 @@ func (c Chart) getRanges() (xrange, yrange, yrangeAlt Range) {
|
|||
}
|
||||
|
||||
func (c Chart) checkRanges(xr, yr, yra Range) error {
|
||||
if math.IsInf(xr.GetDelta(), 0) || math.IsNaN(xr.GetDelta()) || xr.GetDelta() == 0 {
|
||||
return errors.New("Invalid (infinite or NaN) x-range delta")
|
||||
xDelta := xr.GetDelta()
|
||||
if math.IsInf(xDelta, 0) {
|
||||
return errors.New("infinite x-range delta")
|
||||
}
|
||||
if math.IsInf(yr.GetDelta(), 0) || math.IsNaN(yr.GetDelta()) || yr.GetDelta() == 0 {
|
||||
return errors.New("Invalid (infinite or NaN) y-range delta")
|
||||
if math.IsNaN(xDelta) {
|
||||
return errors.New("nan x-range delta")
|
||||
}
|
||||
|
||||
yDelta := yr.GetDelta()
|
||||
if math.IsInf(yDelta, 0) {
|
||||
return errors.New("infinite y-range delta")
|
||||
}
|
||||
if math.IsNaN(yDelta) {
|
||||
return errors.New("nan y-range delta")
|
||||
}
|
||||
|
||||
if c.hasSecondarySeries() {
|
||||
if math.IsInf(yra.GetDelta(), 0) || math.IsNaN(yra.GetDelta()) || yra.GetDelta() == 0 {
|
||||
return errors.New("Invalid (infinite or NaN) y-secondary-range delta")
|
||||
yraDelta := yra.GetDelta()
|
||||
if math.IsInf(yraDelta, 0) {
|
||||
return errors.New("infinite secondary y-range delta")
|
||||
}
|
||||
if math.IsNaN(yraDelta) {
|
||||
return errors.New("nan secondary y-range delta")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user