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  }