1// run 2 3// Copyright 2009 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Test that unbuffered channels act as pure fifos. 8 9package main 10 11import "os" 12 13const N = 10 14 15func AsynchFifo() { 16 ch := make(chan int, N) 17 for i := 0; i < N; i++ { 18 ch <- i 19 } 20 for i := 0; i < N; i++ { 21 if <-ch != i { 22 print("bad receive\n") 23 os.Exit(1) 24 } 25 } 26} 27 28func Chain(ch <-chan int, val int, in <-chan int, out chan<- int) { 29 <-in 30 if <-ch != val { 31 panic(val) 32 } 33 out <- 1 34} 35 36// thread together a daisy chain to read the elements in sequence 37func SynchFifo() { 38 ch := make(chan int) 39 in := make(chan int) 40 start := in 41 for i := 0; i < N; i++ { 42 out := make(chan int) 43 go Chain(ch, i, in, out) 44 in = out 45 } 46 start <- 0 47 for i := 0; i < N; i++ { 48 ch <- i 49 } 50 <-in 51} 52 53func main() { 54 AsynchFifo() 55 SynchFifo() 56} 57 58