<commit_before>// $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 that unbuffered channels act as pure fifos.

package main

const N = 10

func AsynchFifo() {
	ch := new(chan int, N);
	for i := 0; i < N; i++ {
		ch -< i
	}
	for i := 0; i < N; i++ {
		if <-ch != i {
			print "bad receive\n";
			sys.exit(1);
		}
	}
}

func Chain(ch *chan<- int, val int, in *chan<- int, out *chan-< int) {
	<-in;
	if <-ch != val {
		panic val
	}
	out -< 1
}

// thread together a daisy chain to read the elements in sequence
func SynchFifo() {
	ch := new(chan int);
	in := new(chan int);
	start := in;
	for i := 0; i < N; i++ {
		out := new(chan int);
		go Chain(ch, i, in, out);
		in = out;
	}
	start -< 0;
	for i := 0; i < N; i++ {
		ch -< i
	}
}

func main() {
	AsynchFifo();
	SynchFifo();
}

<commit_msg>fix bug - need to read final message in daisy chain to avoid hang<commit_after>// $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 that unbuffered channels act as pure fifos.

package main

const N = 10

func AsynchFifo() {
	ch := new(chan int, N);
	for i := 0; i < N; i++ {
		ch -< i
	}
	for i := 0; i < N; i++ {
		if <-ch != i {
			print "bad receive\n";
			sys.exit(1);
		}
	}
}

func Chain(ch *chan<- int, val int, in *chan<- int, out *chan-< int) {
	<-in;
	if <-ch != val {
		panic val
	}
	out -< 1
}

// thread together a daisy chain to read the elements in sequence
func SynchFifo() {
	ch := new(chan int);
	in := new(chan int);
	start := in;
	for i := 0; i < N; i++ {
		out := new(chan int);
		go Chain(ch, i, in, out);
		in = out;
	}
	start -< 0;
	for i := 0; i < N; i++ {
		ch -< i
	}
	<-in
}

func main() {
	AsynchFifo();
	SynchFifo();
}


{'fraction_non_alphanumeric': 0.17722165474974463, 'fraction_numerical': 0.013278855975485188, 'mean_word_length': 2.424825174825175, 'pattern_counts': {'":': 0, '<': 32, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5586001', 'n_tokens_mistral': 871, 'n_tokens_neox': 797, 'n_words': 301}