From ddc7bc5aba8239ae1f83261ce1afb27f0ab0889e Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Fri, 12 Sep 2008 17:39:29 -0700 Subject: [PATCH] test program to generate multiples of a set of factors (as written, factors are 2, 3, and 5) R=r OCL=15286 CL=15286 --- test/235.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 test/235.go diff --git a/test/235.go b/test/235.go new file mode 100644 index 00000000000000..48bf60197321d3 --- /dev/null +++ b/test/235.go @@ -0,0 +1,61 @@ +// $G $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. + +package main + +type T chan uint64; + +func M(f uint64) (in, out *T) { + in = new(T, 100); + out = new(T, 100); + go func(in, out *T, f uint64) { + for { + out -< f * <- in; + } + }(in, out, f); + return in, out; +} + + +func min(xs *[]uint64) uint64 { + m := xs[0]; + for i := 1; i < len(xs); i++ { + if xs[i] < m { + m = xs[i]; + } + } + return m; +} + + +func main() { + F := []uint64{2, 3, 5}; + const n = len(F); + + x := uint64(1); + ins := new([]*T, n); + outs := new([]*T, n); + xs := new([]uint64, n); + for i := 0; i < n; i++ { + ins[i], outs[i] = M(F[i]); + xs[i] = x; + } + + for i := 0; i < 100; i++ { + t := min(xs); + for i := 0; i < n; i++ { + ins[i] -< x; + } + + for i := 0; i < n; i++ { + if xs[i] == x { xs[i] = <- outs[i]; } + } + + x = min(xs); + print(x, "\n"); + } + sys.exit(0); +}