github.com/neugram/ng@v0.0.0-20180309130942-d472ff93d872/eval/testdata/sync.ng (about)

     1  import "sync"
     2  
     3  ok := true
     4  
     5  wg := sync.WaitGroup{}
     6  mu := sync.Mutex{}
     7  x := 0
     8  for i := 0; i < 5; i++ {
     9  	wg.Add(1)
    10  	go func(i int) {
    11  		mu.Lock()
    12  		x += i
    13  		mu.Unlock()
    14  		wg.Done()
    15  	}(i)
    16  }
    17  wg.Wait()
    18  
    19  if want := 0 + 1 + 2 + 3 + 4; x != want {
    20  	printf("x=%d, want=%d\n", x, want)
    21  	ok = false
    22  }
    23  
    24  ch := make(chan int, 5)
    25  sendch := (chan<- int)(ch)
    26  for i := 0; i < 5; i++ {
    27  	go func(i int) {
    28  		sendch <- i
    29  	}(i)
    30  }
    31  recvch := (<-chan int)(ch)
    32  y := 0
    33  for i := 0; i < 5; i++ {
    34  	y += <-recvch
    35  }
    36  if want := 0 + 1 + 2 + 3 + 4; y != want {
    37  	printf("y=%d, want=%d\n", y, want)
    38  	ok = false
    39  }
    40  
    41  if ok {
    42  	print("OK")
    43  }