Files
gocryptotrader/gctscript/modules/gct/common_test.go
Adrian Gallagher 9f775ca952 Indicators: Add support for correlation coefficient (#519)
* Add support for correlation coefficient code

* Bump ta depends

* Bump gct-ta depends version
2020-06-23 17:49:08 +10:00

178 lines
3.8 KiB
Go

package gct
import (
"os"
"path/filepath"
"testing"
"time"
objects "github.com/d5/tengo/v2"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/gctscript/modules/ta/indicators"
)
var (
atrPayload = &indicators.ATR{Array: oneElement}
bbandsPayload = &indicators.BBands{Array: threeElement}
emaPayload = &indicators.EMA{Array: oneElement}
macdPayload = &indicators.MACD{Array: threeElement}
mfiPayload = &indicators.MFI{Array: oneElement}
obvPayload = &indicators.OBV{Array: oneElement}
rsiPayload = &indicators.RSI{Array: oneElement}
smaPayload = &indicators.SMA{Array: oneElement}
correlationPayload = &indicators.Correlation{Array: oneElement}
ohlcPayload = &OHLCV{Map: ohlcdata}
unhandled = &objects.Array{}
oneElement = objects.Array{
Value: []objects.Object{
&objects.Float{Value: 1},
&objects.Float{Value: 2},
&objects.Float{Value: 3},
&objects.Float{Value: 4},
&objects.Float{Value: 5},
},
}
threeElement = objects.Array{
Value: []objects.Object{
&objects.Array{
Value: []objects.Object{
&objects.Float{Value: 11},
&objects.Float{Value: 12},
&objects.Float{Value: 13},
},
},
&objects.Array{
Value: []objects.Object{
&objects.Float{Value: 21},
&objects.Float{Value: 22},
&objects.Float{Value: 23},
},
},
&objects.Array{
Value: []objects.Object{
&objects.Float{Value: 31},
&objects.Float{Value: 32},
&objects.Float{Value: 33},
},
},
&objects.Array{
Value: []objects.Object{
&objects.Float{Value: 41},
&objects.Float{Value: 42},
&objects.Float{Value: 43},
},
},
&objects.Array{
Value: []objects.Object{
&objects.Float{Value: 51},
&objects.Float{Value: 52},
&objects.Float{Value: 53},
},
},
},
}
ohlcv = []objects.Object{
&objects.Time{Value: time.Now()},
&objects.Float{Value: 100},
&objects.Float{Value: 100},
&objects.Float{Value: 100},
&objects.Float{Value: 100},
&objects.Float{Value: 1},
}
ohlcdata = objects.Map{
Value: map[string]objects.Object{
"exchange": &objects.String{Value: "exchange"},
"pair": &objects.String{Value: "BTC-USD"},
"asset": &objects.String{Value: asset.Spot.String()},
"intervals": &objects.String{Value: time.Minute.String()},
"candles": &objects.Array{
Value: []objects.Object{
&objects.Array{
Value: ohlcv,
},
&objects.Array{
Value: ohlcv,
},
&objects.Array{
Value: ohlcv,
},
&objects.Array{
Value: ohlcv,
},
&objects.Array{
Value: ohlcv,
},
},
},
},
}
)
func TestCommonWriteToCSV(t *testing.T) {
t.Parallel()
OutputDir = filepath.Join(os.TempDir(), "script-temp")
defer func() {
err := os.RemoveAll(OutputDir)
if err != nil {
t.Fatal(err)
}
}()
_, err := WriteAsCSV()
if err == nil {
t.Fatal("error cannot be nil")
}
_, err = WriteAsCSV(nil)
if err == nil {
t.Fatal("error cannot be nil")
}
_, err = WriteAsCSV(&objects.String{Value: "something.txt"})
if err == nil {
t.Fatal(err)
}
_, err = WriteAsCSV(&objects.String{Value: "something.txt"},
&objects.String{Value: "extra string"})
if err == nil {
t.Fatal(err)
}
_, err = WriteAsCSV(&objects.String{Value: "script-temp.csv"}, unhandled)
if err == nil {
t.Fatal("error cannot be nil")
}
_, err = WriteAsCSV(&objects.String{Value: "script-temp.csv"},
atrPayload,
bbandsPayload,
emaPayload,
macdPayload,
mfiPayload,
obvPayload,
rsiPayload,
smaPayload,
correlationPayload,
ohlcPayload)
if err != nil {
t.Fatal(err)
}
_, err = WriteAsCSV(atrPayload)
if err == nil {
t.Fatal(err)
}
_, err = WriteAsCSV(&objects.String{Value: "test.gct-script-temp2"},
atrPayload)
if err != nil {
t.Fatal(err)
}
}