github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/distrib/test/t4_test.go (about)

     1  // +build p4
     2  // go test -tags=p4
     3  
     4  package test
     5  
     6  import (
     7  	"fmt"
     8  	"math/rand"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/pbberlin/tools/distrib"
    13  )
    14  
    15  var opt = distrib.NewDefaultOptions()
    16  
    17  type MyWorker struct {
    18  	Inp, Res int
    19  }
    20  
    21  func (m *MyWorker) Work() {
    22  	m.Res = 500 + m.Inp
    23  	time.Sleep(time.Millisecond * time.Duration(rand.Intn(20)))
    24  }
    25  
    26  func Test4(t *testing.T) {
    27  	opt.CollectRemainder = true
    28  	do(t, 3)
    29  
    30  }
    31  
    32  func Test5(t *testing.T) {
    33  	// opt.CollectRemainder = false
    34  	// do(t, 3)
    35  }
    36  
    37  func Test6(t *testing.T) {
    38  	opt.CollectRemainder = true
    39  	opt.Want = 4
    40  	do(t, 20)
    41  }
    42  
    43  func Test7(t *testing.T) {
    44  	opt.CollectRemainder = false
    45  	opt.Want = 4
    46  	do(t, 20)
    47  }
    48  
    49  func do(t *testing.T, precreatedPackets int) {
    50  
    51  	rand.Seed(time.Now().UnixNano())
    52  
    53  	fmt.Printf("\n--------------------\n")
    54  
    55  	jobs := make([]distrib.Worker, 0, precreatedPackets)
    56  	for i := 0; i < precreatedPackets; i++ {
    57  		job := distrib.Worker(&MyWorker{Inp: i})
    58  		jobs = append(jobs, job)
    59  	}
    60  
    61  	ret, msg := distrib.Distrib(jobs, opt)
    62  	fmt.Print(msg.String())
    63  
    64  	if len(ret) != precreatedPackets {
    65  		// t.Errorf("wnt %v got %v", precreatedPackets, len(ret))
    66  	}
    67  
    68  	for k, v := range ret {
    69  		v1, _ := v.Worker.(*MyWorker)
    70  		fmt.Printf("   %2v  %2v  => %v\n", k, v1.Inp, v1.Res)
    71  		if v1.Inp != v1.Res-500 {
    72  			t.Errorf("%v %v", v1.Inp, v1.Res)
    73  		}
    74  	}
    75  
    76  }