// 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. // Test that unbuffered channels act as pure fifos. 'use strict' const Channel = require('../../lib') it(`fifo`, function () { const N = 10 const AsynchFifo = async () => { const ch = Channel(10) for (let i = 0; i < N; i++) { await ch.push(i) } for (let i = 0; i < N; i++) { if (await ch.shift() !== i) { throw new Error(`bad receive`) } } } const Chain = async (ch, val, input, output) => { await input.shift() if (await ch.shift() !== val) { throw new Error(val) } await output.push(1) } // thread together a daisy chain to read the elements in sequence const SynchFifo = async () => { const ch = Channel() let input = Channel() let start = input for (let i = 0; i < N; i++) { const output = Channel() Chain(ch, i, input, output) input = output } await start.push(0) for (let i = 0; i < N; i++) { await ch.push(i) } await input.shift() } AsynchFifo() SynchFifo() })