github.com/gogf/gf@v1.16.9/os/gtimer/gtimer_z_unit_timer_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 // Timer Operations 8 9 package gtimer_test 10 11 import ( 12 "testing" 13 "time" 14 15 "github.com/gogf/gf/container/garray" 16 "github.com/gogf/gf/os/gtimer" 17 "github.com/gogf/gf/test/gtest" 18 ) 19 20 func New() *gtimer.Timer { 21 return gtimer.New() 22 } 23 24 func TestTimer_Add_Close(t *testing.T) { 25 gtest.C(t, func(t *gtest.T) { 26 timer := New() 27 array := garray.New(true) 28 //fmt.Println("start", time.Now()) 29 timer.Add(200*time.Millisecond, func() { 30 //fmt.Println("job1", time.Now()) 31 array.Append(1) 32 }) 33 timer.Add(200*time.Millisecond, func() { 34 //fmt.Println("job2", time.Now()) 35 array.Append(1) 36 }) 37 timer.Add(400*time.Millisecond, func() { 38 //fmt.Println("job3", time.Now()) 39 array.Append(1) 40 }) 41 time.Sleep(250 * time.Millisecond) 42 t.Assert(array.Len(), 2) 43 time.Sleep(250 * time.Millisecond) 44 t.Assert(array.Len(), 5) 45 timer.Close() 46 time.Sleep(250 * time.Millisecond) 47 fixedLength := array.Len() 48 time.Sleep(250 * time.Millisecond) 49 t.Assert(array.Len(), fixedLength) 50 }) 51 } 52 53 func TestTimer_Start_Stop_Close(t *testing.T) { 54 gtest.C(t, func(t *gtest.T) { 55 timer := New() 56 array := garray.New(true) 57 timer.Add(1000*time.Millisecond, func() { 58 array.Append(1) 59 }) 60 t.Assert(array.Len(), 0) 61 time.Sleep(1200 * time.Millisecond) 62 t.Assert(array.Len(), 1) 63 timer.Stop() 64 time.Sleep(1200 * time.Millisecond) 65 t.Assert(array.Len(), 1) 66 timer.Start() 67 time.Sleep(1200 * time.Millisecond) 68 t.Assert(array.Len(), 2) 69 timer.Close() 70 time.Sleep(1200 * time.Millisecond) 71 t.Assert(array.Len(), 2) 72 }) 73 } 74 75 func TestJob_Reset(t *testing.T) { 76 gtest.C(t, func(t *gtest.T) { 77 timer := New() 78 array := garray.New(true) 79 job := timer.AddSingleton(500*time.Millisecond, func() { 80 array.Append(1) 81 }) 82 time.Sleep(300 * time.Millisecond) 83 job.Reset() 84 time.Sleep(300 * time.Millisecond) 85 job.Reset() 86 time.Sleep(300 * time.Millisecond) 87 job.Reset() 88 time.Sleep(600 * time.Millisecond) 89 t.Assert(array.Len(), 1) 90 }) 91 } 92 93 func TestTimer_AddSingleton(t *testing.T) { 94 gtest.C(t, func(t *gtest.T) { 95 timer := New() 96 array := garray.New(true) 97 timer.AddSingleton(200*time.Millisecond, func() { 98 array.Append(1) 99 time.Sleep(10 * time.Second) 100 }) 101 time.Sleep(250 * time.Millisecond) 102 t.Assert(array.Len(), 1) 103 104 time.Sleep(500 * time.Millisecond) 105 t.Assert(array.Len(), 1) 106 }) 107 } 108 109 func TestTimer_AddOnce(t *testing.T) { 110 gtest.C(t, func(t *gtest.T) { 111 timer := New() 112 array := garray.New(true) 113 timer.AddOnce(200*time.Millisecond, func() { 114 array.Append(1) 115 }) 116 timer.AddOnce(200*time.Millisecond, func() { 117 array.Append(1) 118 }) 119 time.Sleep(250 * time.Millisecond) 120 t.Assert(array.Len(), 2) 121 time.Sleep(250 * time.Millisecond) 122 t.Assert(array.Len(), 2) 123 timer.Close() 124 time.Sleep(250 * time.Millisecond) 125 fixedLength := array.Len() 126 time.Sleep(250 * time.Millisecond) 127 t.Assert(array.Len(), fixedLength) 128 }) 129 } 130 131 func TestTimer_AddTimes(t *testing.T) { 132 gtest.C(t, func(t *gtest.T) { 133 timer := New() 134 array := garray.New(true) 135 timer.AddTimes(200*time.Millisecond, 2, func() { 136 array.Append(1) 137 }) 138 time.Sleep(1000 * time.Millisecond) 139 t.Assert(array.Len(), 2) 140 }) 141 } 142 143 func TestTimer_DelayAdd(t *testing.T) { 144 gtest.C(t, func(t *gtest.T) { 145 timer := New() 146 array := garray.New(true) 147 timer.DelayAdd(200*time.Millisecond, 200*time.Millisecond, func() { 148 array.Append(1) 149 }) 150 time.Sleep(250 * time.Millisecond) 151 t.Assert(array.Len(), 0) 152 time.Sleep(250 * time.Millisecond) 153 t.Assert(array.Len(), 1) 154 }) 155 } 156 157 func TestTimer_DelayAddJob(t *testing.T) { 158 gtest.C(t, func(t *gtest.T) { 159 timer := New() 160 array := garray.New(true) 161 timer.DelayAddEntry(200*time.Millisecond, 200*time.Millisecond, func() { 162 array.Append(1) 163 }, false, 100, gtimer.StatusReady) 164 time.Sleep(250 * time.Millisecond) 165 t.Assert(array.Len(), 0) 166 time.Sleep(250 * time.Millisecond) 167 t.Assert(array.Len(), 1) 168 }) 169 } 170 171 func TestTimer_DelayAddSingleton(t *testing.T) { 172 gtest.C(t, func(t *gtest.T) { 173 timer := New() 174 array := garray.New(true) 175 timer.DelayAddSingleton(200*time.Millisecond, 200*time.Millisecond, func() { 176 array.Append(1) 177 time.Sleep(10 * time.Second) 178 }) 179 time.Sleep(250 * time.Millisecond) 180 t.Assert(array.Len(), 0) 181 182 time.Sleep(1000 * time.Millisecond) 183 t.Assert(array.Len(), 1) 184 }) 185 } 186 187 func TestTimer_DelayAddOnce(t *testing.T) { 188 gtest.C(t, func(t *gtest.T) { 189 timer := New() 190 array := garray.New(true) 191 timer.DelayAddOnce(200*time.Millisecond, 200*time.Millisecond, func() { 192 array.Append(1) 193 }) 194 time.Sleep(250 * time.Millisecond) 195 t.Assert(array.Len(), 0) 196 197 time.Sleep(250 * time.Millisecond) 198 t.Assert(array.Len(), 1) 199 200 time.Sleep(500 * time.Millisecond) 201 t.Assert(array.Len(), 1) 202 }) 203 } 204 205 func TestTimer_DelayAddTimes(t *testing.T) { 206 gtest.C(t, func(t *gtest.T) { 207 timer := New() 208 array := garray.New(true) 209 timer.DelayAddTimes(200*time.Millisecond, 500*time.Millisecond, 2, func() { 210 array.Append(1) 211 }) 212 time.Sleep(200 * time.Millisecond) 213 t.Assert(array.Len(), 0) 214 215 time.Sleep(600 * time.Millisecond) 216 t.Assert(array.Len(), 1) 217 218 time.Sleep(600 * time.Millisecond) 219 t.Assert(array.Len(), 2) 220 221 time.Sleep(1000 * time.Millisecond) 222 t.Assert(array.Len(), 2) 223 }) 224 } 225 226 func TestTimer_AddLessThanInterval(t *testing.T) { 227 gtest.C(t, func(t *gtest.T) { 228 timer := gtimer.New(gtimer.TimerOptions{ 229 Interval: 100 * time.Millisecond, 230 }) 231 array := garray.New(true) 232 timer.Add(20*time.Millisecond, func() { 233 array.Append(1) 234 }) 235 time.Sleep(50 * time.Millisecond) 236 t.Assert(array.Len(), 0) 237 238 time.Sleep(110 * time.Millisecond) 239 t.Assert(array.Len(), 1) 240 241 time.Sleep(110 * time.Millisecond) 242 t.Assert(array.Len(), 2) 243 }) 244 } 245 246 func TestTimer_AddLeveledJob1(t *testing.T) { 247 gtest.C(t, func(t *gtest.T) { 248 timer := New() 249 array := garray.New(true) 250 //glog.Println("start") 251 timer.DelayAdd(1000*time.Millisecond, 1000*time.Millisecond, func() { 252 //glog.Println("add") 253 array.Append(1) 254 }) 255 time.Sleep(1500 * time.Millisecond) 256 t.Assert(array.Len(), 0) 257 time.Sleep(1300 * time.Millisecond) 258 //glog.Println("check") 259 t.Assert(array.Len(), 1) 260 }) 261 } 262 263 func TestTimer_Exit(t *testing.T) { 264 gtest.C(t, func(t *gtest.T) { 265 timer := New() 266 array := garray.New(true) 267 timer.Add(200*time.Millisecond, func() { 268 array.Append(1) 269 gtimer.Exit() 270 }) 271 time.Sleep(1000 * time.Millisecond) 272 t.Assert(array.Len(), 1) 273 }) 274 }