modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/chan/fifo.go (about) 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 9 package main 10 11 import "os" 12 13 const N = 10 14 15 func 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 28 func 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 37 func 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 53 func main() { 54 AsynchFifo() 55 SynchFifo() 56 }