finalizing work on text rotation.
This commit is contained in:
parent
8595962d99
commit
53280b9258
10 changed files with 56 additions and 28 deletions
18
.vscode/launch.json
vendored
Normal file
18
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Launch",
|
||||||
|
"type": "go",
|
||||||
|
"request": "launch",
|
||||||
|
"mode": "test",
|
||||||
|
"remotePath": "",
|
||||||
|
"port": 2345,
|
||||||
|
"host": "127.0.0.1",
|
||||||
|
"program": "${workspaceRoot}",
|
||||||
|
"env": {},
|
||||||
|
"args": [],
|
||||||
|
"showLog": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -14,11 +14,11 @@ func readData() ([]time.Time, []float64) {
|
||||||
var yvalues []float64
|
var yvalues []float64
|
||||||
util.ReadFileByLines("requests.csv", func(line string) {
|
util.ReadFileByLines("requests.csv", func(line string) {
|
||||||
parts := strings.Split(line, ",")
|
parts := strings.Split(line, ",")
|
||||||
year := util.ParseInt(parts[0])
|
year := util.String.ParseInt(parts[0])
|
||||||
month := util.ParseInt(parts[1])
|
month := util.String.ParseInt(parts[1])
|
||||||
day := util.ParseInt(parts[2])
|
day := util.String.ParseInt(parts[2])
|
||||||
hour := util.ParseInt(parts[3])
|
hour := util.String.ParseInt(parts[3])
|
||||||
elapsedMillis := util.ParseFloat64(parts[4])
|
elapsedMillis := util.String.ParseFloat64(parts[4])
|
||||||
xvalues = append(xvalues, time.Date(year, time.Month(month), day, hour, 0, 0, 0, time.UTC))
|
xvalues = append(xvalues, time.Date(year, time.Month(month), day, hour, 0, 0, 0, time.UTC))
|
||||||
yvalues = append(yvalues, elapsedMillis)
|
yvalues = append(yvalues, elapsedMillis)
|
||||||
})
|
})
|
||||||
|
|
BIN
go-chart.test
Executable file
BIN
go-chart.test
Executable file
Binary file not shown.
|
@ -33,12 +33,12 @@ func (mhr MarketHoursRange) IsZero() bool {
|
||||||
|
|
||||||
// GetMin returns the min value.
|
// GetMin returns the min value.
|
||||||
func (mhr MarketHoursRange) GetMin() float64 {
|
func (mhr MarketHoursRange) GetMin() float64 {
|
||||||
return TimeToFloat64(mhr.Min)
|
return Time.ToFloat64(mhr.Min)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMax returns the max value.
|
// GetMax returns the max value.
|
||||||
func (mhr MarketHoursRange) GetMax() float64 {
|
func (mhr MarketHoursRange) GetMax() float64 {
|
||||||
return TimeToFloat64(mhr.GetEffectiveMax())
|
return Time.ToFloat64(mhr.GetEffectiveMax())
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetEffectiveMax gets either the close on the max, or the max itself.
|
// GetEffectiveMax gets either the close on the max, or the max itself.
|
||||||
|
@ -52,13 +52,13 @@ func (mhr MarketHoursRange) GetEffectiveMax() time.Time {
|
||||||
|
|
||||||
// SetMin sets the min value.
|
// SetMin sets the min value.
|
||||||
func (mhr *MarketHoursRange) SetMin(min float64) {
|
func (mhr *MarketHoursRange) SetMin(min float64) {
|
||||||
mhr.Min = Float64ToTime(min)
|
mhr.Min = Time.FromFloat64(min)
|
||||||
mhr.Min = mhr.Min.In(mhr.GetTimezone())
|
mhr.Min = mhr.Min.In(mhr.GetTimezone())
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetMax sets the max value.
|
// SetMax sets the max value.
|
||||||
func (mhr *MarketHoursRange) SetMax(max float64) {
|
func (mhr *MarketHoursRange) SetMax(max float64) {
|
||||||
mhr.Max = Float64ToTime(max)
|
mhr.Max = Time.FromFloat64(max)
|
||||||
mhr.Max = mhr.Max.In(mhr.GetTimezone())
|
mhr.Max = mhr.Max.In(mhr.GetTimezone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ func (mhr *MarketHoursRange) makeTicks(vf ValueFormatter, times []time.Time) []T
|
||||||
ticks := make([]Tick, len(times))
|
ticks := make([]Tick, len(times))
|
||||||
for index, t := range times {
|
for index, t := range times {
|
||||||
ticks[index] = Tick{
|
ticks[index] = Tick{
|
||||||
Value: TimeToFloat64(t),
|
Value: Time.ToFloat64(t),
|
||||||
Label: vf(t),
|
Label: vf(t),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ func (mhr MarketHoursRange) String() string {
|
||||||
|
|
||||||
// Translate maps a given value into the ContinuousRange space.
|
// Translate maps a given value into the ContinuousRange space.
|
||||||
func (mhr MarketHoursRange) Translate(value float64) int {
|
func (mhr MarketHoursRange) Translate(value float64) int {
|
||||||
valueTime := Float64ToTime(value)
|
valueTime := Time.FromFloat64(value)
|
||||||
valueTimeEastern := valueTime.In(Date.Eastern())
|
valueTimeEastern := valueTime.In(Date.Eastern())
|
||||||
totalSeconds := Date.CalculateMarketSecondsBetween(mhr.Min, mhr.GetEffectiveMax(), mhr.GetMarketOpen(), mhr.GetMarketClose(), mhr.HolidayProvider)
|
totalSeconds := Date.CalculateMarketSecondsBetween(mhr.Min, mhr.GetEffectiveMax(), mhr.GetMarketOpen(), mhr.GetMarketClose(), mhr.HolidayProvider)
|
||||||
valueDelta := Date.CalculateMarketSecondsBetween(mhr.Min, valueTimeEastern, mhr.GetMarketOpen(), mhr.GetMarketClose(), mhr.HolidayProvider)
|
valueDelta := Date.CalculateMarketSecondsBetween(mhr.Min, valueTimeEastern, mhr.GetMarketOpen(), mhr.GetMarketClose(), mhr.HolidayProvider)
|
||||||
|
|
|
@ -35,9 +35,9 @@ func TestMarketHoursRangeTranslate(t *testing.T) {
|
||||||
|
|
||||||
weds := time.Date(2016, 07, 20, 9, 30, 0, 0, Date.Eastern())
|
weds := time.Date(2016, 07, 20, 9, 30, 0, 0, Date.Eastern())
|
||||||
|
|
||||||
assert.Equal(0, r.Translate(TimeToFloat64(r.Min)))
|
assert.Equal(0, r.Translate(Time.ToFloat64(r.Min)))
|
||||||
assert.Equal(400, r.Translate(TimeToFloat64(weds)))
|
assert.Equal(400, r.Translate(Time.ToFloat64(weds)))
|
||||||
assert.Equal(1000, r.Translate(TimeToFloat64(r.Max)))
|
assert.Equal(1000, r.Translate(Time.ToFloat64(r.Max)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMarketHoursRangeGetTicks(t *testing.T) {
|
func TestMarketHoursRangeGetTicks(t *testing.T) {
|
||||||
|
@ -67,6 +67,6 @@ func TestMarketHoursRangeGetTicks(t *testing.T) {
|
||||||
ticks := ra.GetTicks(r, defaults, TimeValueFormatter)
|
ticks := ra.GetTicks(r, defaults, TimeValueFormatter)
|
||||||
assert.NotEmpty(ticks)
|
assert.NotEmpty(ticks)
|
||||||
assert.Len(ticks, 5)
|
assert.Len(ticks, 5)
|
||||||
assert.NotEqual(TimeToFloat64(ra.Min), ticks[0].Value)
|
assert.NotEqual(Time.ToFloat64(ra.Min), ticks[0].Value)
|
||||||
assert.NotEmpty(ticks[0].Label)
|
assert.NotEmpty(ticks[0].Label)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,16 +19,6 @@ const (
|
||||||
_r2d = (180.0 / math.Pi)
|
_r2d = (180.0 / math.Pi)
|
||||||
)
|
)
|
||||||
|
|
||||||
// TimeToFloat64 returns a float64 representation of a time.
|
|
||||||
func TimeToFloat64(t time.Time) float64 {
|
|
||||||
return float64(t.UnixNano())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float64ToTime returns a time from a float64.
|
|
||||||
func Float64ToTime(tf float64) time.Time {
|
|
||||||
return time.Unix(0, int64(tf))
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// Math contains helper methods for common math operations.
|
// Math contains helper methods for common math operations.
|
||||||
Math = &mathUtil{}
|
Math = &mathUtil{}
|
|
@ -30,14 +30,14 @@ 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, y float64) {
|
func (ts TimeSeries) GetValue(index int) (x, y float64) {
|
||||||
x = TimeToFloat64(ts.XValues[index])
|
x = Time.ToFloat64(ts.XValues[index])
|
||||||
y = ts.YValues[index]
|
y = ts.YValues[index]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLastValue gets the last value.
|
// GetLastValue gets the last value.
|
||||||
func (ts TimeSeries) GetLastValue() (x, y float64) {
|
func (ts TimeSeries) GetLastValue() (x, y float64) {
|
||||||
x = TimeToFloat64(ts.XValues[len(ts.XValues)-1])
|
x = Time.ToFloat64(ts.XValues[len(ts.XValues)-1])
|
||||||
y = ts.YValues[len(ts.YValues)-1]
|
y = ts.YValues[len(ts.YValues)-1]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
20
time_util.go
Normal file
20
time_util.go
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package chart
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
var (
|
||||||
|
// Time contains time utility functions.
|
||||||
|
Time = timeUtil{}
|
||||||
|
)
|
||||||
|
|
||||||
|
type timeUtil struct{}
|
||||||
|
|
||||||
|
// TimeToFloat64 returns a float64 representation of a time.
|
||||||
|
func (tu timeUtil) ToFloat64(t time.Time) float64 {
|
||||||
|
return float64(t.UnixNano())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float64ToTime returns a time from a float64.
|
||||||
|
func (tu timeUtil) FromFloat64(tf float64) time.Time {
|
||||||
|
return time.Unix(0, int64(tf))
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ func TestTimeValueFormatterWithFormat(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
|
|
||||||
d := time.Now()
|
d := time.Now()
|
||||||
di := TimeToFloat64(d)
|
di := Time.ToFloat64(d)
|
||||||
df := float64(di)
|
df := float64(di)
|
||||||
|
|
||||||
s := TimeValueFormatterWithFormat(d, DefaultDateFormat)
|
s := TimeValueFormatterWithFormat(d, DefaultDateFormat)
|
||||||
|
|
Loading…
Reference in a new issue