gitlab.com/aquachain/aquachain@v1.17.16-rc3.0.20221018032414-e3ddf1e1c055/common/metrics/ewma_test.go (about) 1 // Copyright 2018 The aquachain Authors 2 // This file is part of the aquachain library. 3 // 4 // The aquachain library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The aquachain library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the aquachain library. If not, see <http://www.gnu.org/licenses/>. 16 17 package metrics 18 19 import "testing" 20 21 func BenchmarkEWMA(b *testing.B) { 22 a := NewEWMA1() 23 b.ResetTimer() 24 for i := 0; i < b.N; i++ { 25 a.Update(1) 26 a.Tick() 27 } 28 } 29 30 func TestEWMA1(t *testing.T) { 31 a := NewEWMA1() 32 a.Update(3) 33 a.Tick() 34 if rate := a.Rate(); 0.6 != rate { 35 t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) 36 } 37 elapseMinute(a) 38 if rate := a.Rate(); 0.22072766470286553 != rate { 39 t.Errorf("1 minute a.Rate(): 0.22072766470286553 != %v\n", rate) 40 } 41 elapseMinute(a) 42 if rate := a.Rate(); 0.08120116994196772 != rate { 43 t.Errorf("2 minute a.Rate(): 0.08120116994196772 != %v\n", rate) 44 } 45 elapseMinute(a) 46 if rate := a.Rate(); 0.029872241020718428 != rate { 47 t.Errorf("3 minute a.Rate(): 0.029872241020718428 != %v\n", rate) 48 } 49 elapseMinute(a) 50 if rate := a.Rate(); 0.01098938333324054 != rate { 51 t.Errorf("4 minute a.Rate(): 0.01098938333324054 != %v\n", rate) 52 } 53 elapseMinute(a) 54 if rate := a.Rate(); 0.004042768199451294 != rate { 55 t.Errorf("5 minute a.Rate(): 0.004042768199451294 != %v\n", rate) 56 } 57 elapseMinute(a) 58 if rate := a.Rate(); 0.0014872513059998212 != rate { 59 t.Errorf("6 minute a.Rate(): 0.0014872513059998212 != %v\n", rate) 60 } 61 elapseMinute(a) 62 if rate := a.Rate(); 0.0005471291793327122 != rate { 63 t.Errorf("7 minute a.Rate(): 0.0005471291793327122 != %v\n", rate) 64 } 65 elapseMinute(a) 66 if rate := a.Rate(); 0.00020127757674150815 != rate { 67 t.Errorf("8 minute a.Rate(): 0.00020127757674150815 != %v\n", rate) 68 } 69 elapseMinute(a) 70 if rate := a.Rate(); 7.404588245200814e-05 != rate { 71 t.Errorf("9 minute a.Rate(): 7.404588245200814e-05 != %v\n", rate) 72 } 73 elapseMinute(a) 74 if rate := a.Rate(); 2.7239957857491083e-05 != rate { 75 t.Errorf("10 minute a.Rate(): 2.7239957857491083e-05 != %v\n", rate) 76 } 77 elapseMinute(a) 78 if rate := a.Rate(); 1.0021020474147462e-05 != rate { 79 t.Errorf("11 minute a.Rate(): 1.0021020474147462e-05 != %v\n", rate) 80 } 81 elapseMinute(a) 82 if rate := a.Rate(); 3.6865274119969525e-06 != rate { 83 t.Errorf("12 minute a.Rate(): 3.6865274119969525e-06 != %v\n", rate) 84 } 85 elapseMinute(a) 86 if rate := a.Rate(); 1.3561976441886433e-06 != rate { 87 t.Errorf("13 minute a.Rate(): 1.3561976441886433e-06 != %v\n", rate) 88 } 89 elapseMinute(a) 90 if rate := a.Rate(); 4.989172314621449e-07 != rate { 91 t.Errorf("14 minute a.Rate(): 4.989172314621449e-07 != %v\n", rate) 92 } 93 elapseMinute(a) 94 if rate := a.Rate(); 1.8354139230109722e-07 != rate { 95 t.Errorf("15 minute a.Rate(): 1.8354139230109722e-07 != %v\n", rate) 96 } 97 } 98 99 func TestEWMA5(t *testing.T) { 100 a := NewEWMA5() 101 a.Update(3) 102 a.Tick() 103 if rate := a.Rate(); 0.6 != rate { 104 t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) 105 } 106 elapseMinute(a) 107 if rate := a.Rate(); 0.49123845184678905 != rate { 108 t.Errorf("1 minute a.Rate(): 0.49123845184678905 != %v\n", rate) 109 } 110 elapseMinute(a) 111 if rate := a.Rate(); 0.4021920276213837 != rate { 112 t.Errorf("2 minute a.Rate(): 0.4021920276213837 != %v\n", rate) 113 } 114 elapseMinute(a) 115 if rate := a.Rate(); 0.32928698165641596 != rate { 116 t.Errorf("3 minute a.Rate(): 0.32928698165641596 != %v\n", rate) 117 } 118 elapseMinute(a) 119 if rate := a.Rate(); 0.269597378470333 != rate { 120 t.Errorf("4 minute a.Rate(): 0.269597378470333 != %v\n", rate) 121 } 122 elapseMinute(a) 123 if rate := a.Rate(); 0.2207276647028654 != rate { 124 t.Errorf("5 minute a.Rate(): 0.2207276647028654 != %v\n", rate) 125 } 126 elapseMinute(a) 127 if rate := a.Rate(); 0.18071652714732128 != rate { 128 t.Errorf("6 minute a.Rate(): 0.18071652714732128 != %v\n", rate) 129 } 130 elapseMinute(a) 131 if rate := a.Rate(); 0.14795817836496392 != rate { 132 t.Errorf("7 minute a.Rate(): 0.14795817836496392 != %v\n", rate) 133 } 134 elapseMinute(a) 135 if rate := a.Rate(); 0.12113791079679326 != rate { 136 t.Errorf("8 minute a.Rate(): 0.12113791079679326 != %v\n", rate) 137 } 138 elapseMinute(a) 139 if rate := a.Rate(); 0.09917933293295193 != rate { 140 t.Errorf("9 minute a.Rate(): 0.09917933293295193 != %v\n", rate) 141 } 142 elapseMinute(a) 143 if rate := a.Rate(); 0.08120116994196763 != rate { 144 t.Errorf("10 minute a.Rate(): 0.08120116994196763 != %v\n", rate) 145 } 146 elapseMinute(a) 147 if rate := a.Rate(); 0.06648189501740036 != rate { 148 t.Errorf("11 minute a.Rate(): 0.06648189501740036 != %v\n", rate) 149 } 150 elapseMinute(a) 151 if rate := a.Rate(); 0.05443077197364752 != rate { 152 t.Errorf("12 minute a.Rate(): 0.05443077197364752 != %v\n", rate) 153 } 154 elapseMinute(a) 155 if rate := a.Rate(); 0.04456414692860035 != rate { 156 t.Errorf("13 minute a.Rate(): 0.04456414692860035 != %v\n", rate) 157 } 158 elapseMinute(a) 159 if rate := a.Rate(); 0.03648603757513079 != rate { 160 t.Errorf("14 minute a.Rate(): 0.03648603757513079 != %v\n", rate) 161 } 162 elapseMinute(a) 163 if rate := a.Rate(); 0.0298722410207183831020718428 != rate { 164 t.Errorf("15 minute a.Rate(): 0.0298722410207183831020718428 != %v\n", rate) 165 } 166 } 167 168 func TestEWMA15(t *testing.T) { 169 a := NewEWMA15() 170 a.Update(3) 171 a.Tick() 172 if rate := a.Rate(); 0.6 != rate { 173 t.Errorf("initial a.Rate(): 0.6 != %v\n", rate) 174 } 175 elapseMinute(a) 176 if rate := a.Rate(); 0.5613041910189706 != rate { 177 t.Errorf("1 minute a.Rate(): 0.5613041910189706 != %v\n", rate) 178 } 179 elapseMinute(a) 180 if rate := a.Rate(); 0.5251039914257684 != rate { 181 t.Errorf("2 minute a.Rate(): 0.5251039914257684 != %v\n", rate) 182 } 183 elapseMinute(a) 184 if rate := a.Rate(); 0.4912384518467888184678905 != rate { 185 t.Errorf("3 minute a.Rate(): 0.4912384518467888184678905 != %v\n", rate) 186 } 187 elapseMinute(a) 188 if rate := a.Rate(); 0.459557003018789 != rate { 189 t.Errorf("4 minute a.Rate(): 0.459557003018789 != %v\n", rate) 190 } 191 elapseMinute(a) 192 if rate := a.Rate(); 0.4299187863442732 != rate { 193 t.Errorf("5 minute a.Rate(): 0.4299187863442732 != %v\n", rate) 194 } 195 elapseMinute(a) 196 if rate := a.Rate(); 0.4021920276213831 != rate { 197 t.Errorf("6 minute a.Rate(): 0.4021920276213831 != %v\n", rate) 198 } 199 elapseMinute(a) 200 if rate := a.Rate(); 0.37625345116383313 != rate { 201 t.Errorf("7 minute a.Rate(): 0.37625345116383313 != %v\n", rate) 202 } 203 elapseMinute(a) 204 if rate := a.Rate(); 0.3519877317060185 != rate { 205 t.Errorf("8 minute a.Rate(): 0.3519877317060185 != %v\n", rate) 206 } 207 elapseMinute(a) 208 if rate := a.Rate(); 0.3292869816564153165641596 != rate { 209 t.Errorf("9 minute a.Rate(): 0.3292869816564153165641596 != %v\n", rate) 210 } 211 elapseMinute(a) 212 if rate := a.Rate(); 0.3080502714195546 != rate { 213 t.Errorf("10 minute a.Rate(): 0.3080502714195546 != %v\n", rate) 214 } 215 elapseMinute(a) 216 if rate := a.Rate(); 0.2881831806538789 != rate { 217 t.Errorf("11 minute a.Rate(): 0.2881831806538789 != %v\n", rate) 218 } 219 elapseMinute(a) 220 if rate := a.Rate(); 0.26959737847033216 != rate { 221 t.Errorf("12 minute a.Rate(): 0.26959737847033216 != %v\n", rate) 222 } 223 elapseMinute(a) 224 if rate := a.Rate(); 0.2522102307052083 != rate { 225 t.Errorf("13 minute a.Rate(): 0.2522102307052083 != %v\n", rate) 226 } 227 elapseMinute(a) 228 if rate := a.Rate(); 0.23594443252115815 != rate { 229 t.Errorf("14 minute a.Rate(): 0.23594443252115815 != %v\n", rate) 230 } 231 elapseMinute(a) 232 if rate := a.Rate(); 0.2207276647028646247028654470286553 != rate { 233 t.Errorf("15 minute a.Rate(): 0.2207276647028646247028654470286553 != %v\n", rate) 234 } 235 } 236 237 func elapseMinute(a EWMA) { 238 for i := 0; i < 12; i++ { 239 a.Tick() 240 } 241 }