good morning!!!!

Skip to content
Snippets Groups Projects
Select Git revision
  • c9efd6cc53a3ba4d0df18357ebda43e894fb1f45
  • master default protected
  • tomg_zalando_update
  • tomg_util-go-upgrade
  • tomg_tracing
  • tomg_traceconfig
  • tomg_critic
  • tomg_codegen
  • tomg_withContext
  • middleware
  • markiplier
  • runtime
  • gnet
  • interface
  • experimental-networking
  • v0.1.16
  • v0.1.15
  • v0.1.14
  • v0.1.13
  • v0.1.12
  • v0.1.11
  • v0.1.10
  • v0.1.9
  • v0.1.8
  • v0.1.7
  • v0.1.6
  • v0.1.5
  • v0.1.4
  • v0.1.3
  • v0.1.2
  • v0.1.0
  • v0.1.1
32 results

scheduler_test.go

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    scheduler_test.go 2.51 KiB
    package schedulers
    
    import (
    	"log"
    	"sync"
    	"testing"
    	"time"
    )
    
    type Work struct {
    	Sender   int
    	Duration time.Duration
    	Done     chan<- struct{}
    }
    
    type ShareTable struct {
    	table map[int]int
    	mu    sync.RWMutex
    }
    
    func (T *ShareTable) Inc(user int) {
    	T.mu.Lock()
    	defer T.mu.Unlock()
    
    	if T.table == nil {
    		T.table = make(map[int]int)
    	}
    	T.table[user]++
    }
    
    func (T *ShareTable) Get(user int) int {
    	T.mu.RLock()
    	defer T.mu.RUnlock()
    
    	v, _ := T.table[user]
    	return v
    }
    
    func testSink(sched *Scheduler, table *ShareTable) {
    	sink := sched.NewSink()
    	for {
    		w := sink.Read()
    		switch v := w.(type) {
    		case Work:
    			// dummy load
    			start := time.Now()
    			for time.Since(start) < v.Duration {
    			}
    			table.Inc(v.Sender)
    			close(v.Done)
    		}
    	}
    }
    
    func testSource(sched *Scheduler, id int, dur time.Duration) {
    	source := sched.NewSource()
    	for {
    		done := make(chan struct{})
    		w := Work{
    			Sender:   id,
    			Duration: dur,
    			Done:     done,
    		}
    		source.Schedule(w)
    		<-done
    	}
    }
    
    func TestScheduler(t *testing.T) {
    	var table ShareTable