func TestTimeQueue_acceptance_messageAddedBeforeStart(t *testing.T) { tq := timequeue.New() tq.Push(time.Now(), "now") tq.Start() defer tq.Stop() if message := <-tq.Messages(); message.Data != "now" { t.Errorf("message was not released") } }
func Example() { tq := timequeue.New() tq.Start() //this would normally be a long-running process, //and not stop at the return of a function call. defer tq.Stop() startTime := time.Now() tq.Push(startTime, "this will be released immediately") //adding Messages in chronological order. for i := 1; i <= 4; i++ { tq.Push( startTime.Add(time.Duration(i)*time.Second), fmt.Sprintf("message at second %v", i), ) } //adding Messages in reverse chronological order. for i := 8; i >= 5; i-- { tq.Push( startTime.Add(time.Duration(i)*time.Second), fmt.Sprintf("message at second %v", i), ) } //receive all 9 Messages that were pushed. for i := 0; i < 9; i++ { message := <-tq.Messages() fmt.Println(message.Data) } fmt.Printf("there are %v messages left in the queue\n", tq.Size()) endTime := time.Now() if endTime.Sub(startTime) > time.Duration(8)*time.Second { fmt.Println("releasing all messages took more than 8 seconds") } else { fmt.Println("releasing all messages took less than 8 seconds") } //Output: //this will be released immediately //message at second 1 //message at second 2 //message at second 3 //message at second 4 //message at second 5 //message at second 6 //message at second 7 //message at second 8 //there are 0 messages left in the queue //releasing all messages took more than 8 seconds }
func ExampleTimeQueue_PopAllUntil() { tq := timequeue.New() now := time.Now() for i := 0; i < 4; i++ { tq.Push(now.Add(time.Duration(i)*time.Second), i) } tq.PopAllUntil(now.Add(time.Duration(2)*time.Second), true) for i := 0; i < 2; i++ { message := <-tq.Messages() fmt.Println(message.Data) } fmt.Println("messages left:", tq.Size()) //Output: //0 //1 //messages left: 2 }