@@ -5,6 +5,7 @@ package deadline
55
66import (
77 "context"
8+ "sync/atomic"
89 "testing"
910 "time"
1011
@@ -93,6 +94,68 @@ func TestDeadline(t *testing.T) {
9394 expectedCalls := []byte {0 }
9495 assert .Equal (t , expectedCalls , calls , "Wrong order of deadline signal" )
9596 })
97+
98+ t .Run ("DeadlineAfterFuncExceedFuture" , func (t * testing.T ) {
99+ now := time .Now ()
100+
101+ d := New ()
102+ var trigger atomic.Int32
103+ d .AfterFunc (func () {
104+ trigger .Add (1 )
105+ })
106+ d .Set (now .Add (10 * time .Millisecond ))
107+ <- time .After (20 * time .Millisecond )
108+ d .Set (now .Add (10 * time .Millisecond ))
109+ <- time .After (20 * time .Millisecond )
110+
111+ assert .Equal (t , int32 (1 ), trigger .Load (), "Function triggered wrong number of time" )
112+ })
113+
114+ t .Run ("DeadlineAfterFuncExceedPast" , func (t * testing.T ) {
115+ now := time .Now ()
116+
117+ d := New ()
118+ var trigger atomic.Int32
119+ d .AfterFunc (func () {
120+ trigger .Add (1 )
121+ })
122+ d .Set (now .Add (10 * time .Millisecond ))
123+ d .Set (now .Add (- 10 * time .Millisecond ))
124+ <- time .After (20 * time .Millisecond )
125+
126+ assert .Equal (t , int32 (1 ), trigger .Load (), "Function triggered wrong number of time" )
127+ })
128+
129+ t .Run ("DeadlineAfterFuncCancel" , func (t * testing.T ) {
130+ now := time .Now ()
131+
132+ d := New ()
133+ var trigger atomic.Int32
134+ d .AfterFunc (func () {
135+ trigger .Add (1 )
136+ })
137+
138+ d .Set (now .Add (10 * time .Millisecond ))
139+ d .Set (time.Time {})
140+ <- time .After (20 * time .Millisecond )
141+
142+ assert .Equal (t , int32 (0 ), trigger .Load (), "Function triggered wrong number of time" )
143+ })
144+
145+ t .Run ("DeadlineAfterFuncDetach" , func (t * testing.T ) {
146+ now := time .Now ()
147+
148+ d := New ()
149+ var trigger atomic.Int32
150+ detach := d .AfterFunc (func () {
151+ trigger .Add (1 )
152+ })
153+ detach ()
154+ d .Set (now .Add (10 * time .Millisecond ))
155+ <- time .After (20 * time .Millisecond )
156+
157+ assert .Equal (t , int32 (0 ), trigger .Load (), "Function triggered wrong number of time" )
158+ })
96159}
97160
98161func sendOnDone (ctx context.Context , done <- chan struct {}, dest chan byte , val byte ) {
0 commit comments