github.com/influxdata/influxdb/v2@v2.7.6/influxql/query/internal/gota/ema_test.go (about) 1 package gota 2 3 import "testing" 4 5 func TestEMA(t *testing.T) { 6 list := []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1} 7 8 // expList is generated by the following code: 9 // expList, _ := talib.Ema(list, 10, nil) 10 expList := []float64{5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.136363636363637, 11.475206611570249, 11.570623591284749, 11.466873847414794, 11.200169511521196, 10.800138691244614, 10.291022565563775, 9.692654826370362, 9.021263039757569, 8.290124305256192, 7.510101704300521, 6.690083212609517, 5.837340810316878, 4.957824299350173} 11 12 ema := NewEMA(10, WarmSMA) 13 var actList []float64 14 for _, v := range list { 15 if vOut := ema.Add(v); ema.Warmed() { 16 actList = append(actList, vOut) 17 } 18 } 19 20 if diff := diffFloats(expList, actList, 0.0000001); diff != "" { 21 t.Errorf("unexpected floats:\n%s", diff) 22 } 23 } 24 25 func TestDEMA(t *testing.T) { 26 list := []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1} 27 28 // expList is generated by the following code: 29 // expList, _ := talib.Dema(list, 10, nil) 30 expList := []float64{13.568840926166246, 12.701748119313985, 11.701405062848783, 10.611872766773773, 9.465595022565749, 8.28616628396151, 7.090477085921927, 5.8903718513360275, 4.693925476073202, 3.5064225149113692, 2.331104912318361} 31 32 dema := NewDEMA(10, WarmSMA) 33 var actList []float64 34 for _, v := range list { 35 if vOut := dema.Add(v); dema.Warmed() { 36 actList = append(actList, vOut) 37 } 38 } 39 40 if diff := diffFloats(expList, actList, 0.0000001); diff != "" { 41 t.Errorf("unexpected floats:\n%s", diff) 42 } 43 } 44 45 func TestTEMA(t *testing.T) { 46 list := []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1} 47 48 // expList is generated by the following code: 49 // expList, _ := talib.Tema(list, 4, nil) 50 expList := []float64{10, 11, 12, 13, 14, 15, 14.431999999999995, 13.345600000000001, 12.155520000000001, 11, 9.906687999999997, 8.86563072, 7.8589122560000035, 6.871005491200005, 5.891160883200005, 4.912928706560004, 3.932955104051203, 2.9498469349785603, 1.9633255712030717, 0.9736696408637435} 51 52 tema := NewTEMA(4, WarmSMA) 53 var actList []float64 54 for _, v := range list { 55 if vOut := tema.Add(v); tema.Warmed() { 56 actList = append(actList, vOut) 57 } 58 } 59 60 if diff := diffFloats(expList, actList, 0.0000001); diff != "" { 61 t.Errorf("unexpected floats:\n%s", diff) 62 } 63 } 64 65 func TestEmaWarmCount(t *testing.T) { 66 period := 9 67 ema := NewEMA(period, WarmSMA) 68 69 var i int 70 for i = 0; i < period*10; i++ { 71 ema.Add(float64(i)) 72 if ema.Warmed() { 73 break 74 } 75 } 76 77 if got, want := i, ema.WarmCount(); got != want { 78 t.Errorf("unexpected warm count: got=%d want=%d", got, want) 79 } 80 } 81 82 func TestDemaWarmCount(t *testing.T) { 83 period := 9 84 dema := NewDEMA(period, WarmSMA) 85 86 var i int 87 for i = 0; i < period*10; i++ { 88 dema.Add(float64(i)) 89 if dema.Warmed() { 90 break 91 } 92 } 93 94 if got, want := i, dema.WarmCount(); got != want { 95 t.Errorf("unexpected warm count: got=%d want=%d", got, want) 96 } 97 } 98 99 func TestTemaWarmCount(t *testing.T) { 100 period := 9 101 tema := NewTEMA(period, WarmSMA) 102 103 var i int 104 for i = 0; i < period*10; i++ { 105 tema.Add(float64(i)) 106 if tema.Warmed() { 107 break 108 } 109 } 110 111 if got, want := i, tema.WarmCount(); got != want { 112 t.Errorf("unexpected warm count: got=%d want=%d", got, want) 113 } 114 }