assert.Equal(t, Error{syscall.SIGUSR2}, ctx.Err())
}
-func TestImmediateCompletion(t *testing.T) {
+func TestPrecanceled(t *testing.T) {
parent, cancel := context.WithCancel(context.Background())
cancel()
<-parent.Done()
case _, ok := <-ctx.Done():
assert.False(t, ok, "Done() should be closed")
default:
- assert.False(t, true, "context should be complete")
+ assert.False(t, true, "Done() should be closed")
}
assert.Equal(t, context.Canceled, ctx.Err())
}
<-children[i].Done()
}
}
+
+func BenchmarkPrecanceled(b *testing.B) {
+ parent, cancel := context.WithCancel(context.Background())
+ cancel()
+ <-parent.Done()
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ ctx := UntilSignal(parent, syscall.SIGUSR2)
+ <-ctx.Done()
+ }
+}