// $G $D/$F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

var counter uint
var shift uint

func GetValue() uint {
  counter++;
  return 1 << shift
}

func Send(a, b chan uint) int {
  var i int;
  LOOP:
    for {
      select {
      case a <- GetValue():
	i++;
	a = nil;
      case b <- GetValue():
	i++;
	b = nil;
      default:
	break LOOP;
      }
      shift++;
    }
  return i;
}

func main() {
  a := make(chan uint, 1);
  b := make(chan uint, 1);
  if v := Send(a, b); v != 2 {
    panicln("Send returned", v, "!= 2");
  }
  if av, bv := <- a, <- b; av | bv != 3 {
    panicln("bad values", av, bv);
  }
  if v := Send(a, nil); v != 1 {
    panicln("Send returned", v, "!= 1");
  }
  if counter != 10 {
    panicln("counter is", counter, "!= 10");
  }
}
