github.com/ngicks/gokugen@v0.0.5/scheduler/queue_bench_test.go (about)

     1  package scheduler_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/ngicks/gokugen/scheduler"
     9  )
    10  
    11  func emptyWork(taskCtx context.Context, scheduled time.Time) {}
    12  
    13  func BenchmarkQueue_RemoveCancelled_1000_allCancelled(b *testing.B) {
    14  	b.StopTimer()
    15  	q := scheduler.NewSyncQueue(0)
    16  	now := time.Now()
    17  	for i := 0; i < 1000; i++ {
    18  		t := scheduler.NewTask(now, emptyWork)
    19  		t.Cancel()
    20  		q.Push(t)
    21  	}
    22  	q.Push(scheduler.NewTask(now.Add(-1*time.Second), emptyWork))
    23  
    24  	b.StartTimer()
    25  	q.Exclude(func(ent *scheduler.Task) bool {
    26  		return ent.IsCancelled()
    27  	}, 0, 1000+1)
    28  }
    29  func BenchmarkQueue_RemoveCancelled_10000_halfCancelled(b *testing.B) {
    30  	b.StopTimer()
    31  	q := scheduler.NewSyncQueue(0)
    32  	now := time.Now()
    33  	for i := 0; i < 10000; i++ {
    34  		t := scheduler.NewTask(now, emptyWork)
    35  		if i < 10000/2 {
    36  			t.Cancel()
    37  		}
    38  		q.Push(t)
    39  	}
    40  	q.Push(scheduler.NewTask(now.Add(-1*time.Second), emptyWork))
    41  
    42  	b.StartTimer()
    43  	q.Exclude(func(ent *scheduler.Task) bool {
    44  		return ent.IsCancelled()
    45  	}, 0, 10000+1)
    46  }
    47  
    48  func BenchmarkQueue_RemoveCancelled_100000_halfCancelled(b *testing.B) {
    49  	b.StopTimer()
    50  	q := scheduler.NewSyncQueue(0)
    51  	now := time.Now()
    52  	for i := 0; i < 100000; i++ {
    53  		t := scheduler.NewTask(now, emptyWork)
    54  		if i < 100000/2 {
    55  			t.Cancel()
    56  		}
    57  		q.Push(t)
    58  	}
    59  	q.Push(scheduler.NewTask(now.Add(-1*time.Second), emptyWork))
    60  
    61  	b.StartTimer()
    62  	q.Exclude(func(ent *scheduler.Task) bool {
    63  		return ent.IsCancelled()
    64  	}, 0, 100000+1)
    65  }
    66  
    67  func BenchmarkQueue_RemoveCancelled_100000_oneCancelled(b *testing.B) {
    68  	b.StopTimer()
    69  	q := scheduler.NewSyncQueue(0)
    70  	now := time.Now()
    71  	for i := 0; i < 100000; i++ {
    72  		t := scheduler.NewTask(now, emptyWork)
    73  		q.Push(t)
    74  	}
    75  	t := scheduler.NewTask(now.Add(-1*time.Second), emptyWork)
    76  	t.Cancel()
    77  	q.Push(t)
    78  
    79  	b.StartTimer()
    80  	q.Exclude(func(ent *scheduler.Task) bool {
    81  		return ent.IsCancelled()
    82  	}, 0, 100000+1)
    83  }