// $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.

// Verify channel operations that test for blocking
// Use several sizes and types of operands

package main

import "runtime"
import "time"

func i32receiver(c chan int32, strobe chan bool) {
	if <-c != 123 { panic("i32 value") }
	strobe <- true
}

func i32sender(c chan int32, strobe chan bool) {
	c <- 234;
	strobe <- true
}

func i64receiver(c chan int64, strobe chan bool) {
	if <-c != 123456 { panic("i64 value") }
	strobe <- true
}

func i64sender(c chan int64, strobe chan bool) {
	c <- 234567;
	strobe <- true
}

func breceiver(c chan bool, strobe chan bool) {
	if ! <-c { panic("b value") }
	strobe <- true
}

func bsender(c chan bool, strobe chan bool) {
	c <- true;
	strobe <- true
}

func sreceiver(c chan string, strobe chan bool) {
	if <-c != "hello" { panic("s value") }
	strobe <- true
}

func ssender(c chan string, strobe chan bool) {
	c <- "hello again";
	strobe <- true
}

var ticker = time.Tick(10*1000);	// 10 us
func sleep() {
	<-ticker;
	<-ticker;
	runtime.Gosched();
	runtime.Gosched();
	runtime.Gosched();
}

func main() {
	var i32 int32;
	var i64 int64;
	var b bool;
	var s string;
	var ok bool;

	var sync = make(chan bool);

	for buffer := 0; buffer < 2; buffer++ {
		c32 := make(chan int32, buffer);
		c64 := make(chan int64, buffer);
		cb := make(chan bool, buffer);
		cs := make(chan string, buffer);

		i32, ok = <-c32;
		if ok { panic("blocked i32sender") }

		i64, ok = <-c64;
		if ok { panic("blocked i64sender") }

		b, ok = <-cb;
		if ok { panic("blocked bsender") }

		s, ok = <-cs;
		if ok { panic("blocked ssender") }

		go i32receiver(c32, sync);
		sleep();
		ok = c32 <- 123;
		if !ok { panic("i32receiver buffer=", buffer) }
		<-sync;

		go i32sender(c32, sync);
		if buffer > 0 { <-sync } else { sleep() }
		i32, ok = <-c32;
		if !ok { panic("i32sender buffer=", buffer) }
		if i32 != 234 { panic("i32sender value") }
		if buffer == 0 { <-sync }

		go i64receiver(c64, sync);
		sleep();
		ok = c64 <- 123456;
		if !ok { panic("i64receiver") }
		<-sync;

		go i64sender(c64, sync);
		if buffer > 0 { <-sync } else { sleep() }
		i64, ok = <-c64;
		if !ok { panic("i64sender") }
		if i64 != 234567 { panic("i64sender value") }
		if buffer == 0 { <-sync }

		go breceiver(cb, sync);
		sleep();
		ok = cb <- true;
		if !ok { panic("breceiver") }
		<-sync;

		go bsender(cb, sync);
		if buffer > 0 { <-sync } else { sleep() }
		b, ok = <-cb;
		if !ok { panic("bsender") }
		if !b{ panic("bsender value") }
		if buffer == 0 { <-sync }

		go sreceiver(cs, sync);
		sleep();
		ok = cs <- "hello";
		if !ok { panic("sreceiver") }
		<-sync;

		go ssender(cs, sync);
		if buffer > 0 { <-sync } else { sleep() }
		s, ok = <-cs;
		if !ok { panic("ssender") }
		if s != "hello again" { panic("ssender value") }
		if buffer == 0 { <-sync }
	}
	print("PASS\n")
}
