"Fossies" - the Fresh Open Source Software Archive

Member "go/test/235.go" (26 Apr 2023, 1596 Bytes) of package /linux/misc/go1.20.4.src.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Go source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    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 // Solve the 2,3,5 problem (print all numbers with 2, 3, or 5 as factor) using channels.
    8 // Test the solution, silently.
    9 
   10 package main
   11 
   12 type T chan uint64
   13 
   14 func M(f uint64) (in, out T) {
   15     in = make(T, 100)
   16     out = make(T, 100)
   17     go func(in, out T, f uint64) {
   18         for {
   19             out <- f*<-in
   20         }
   21     }(in, out, f)
   22     return in, out
   23 }
   24 
   25 
   26 func min(xs []uint64) uint64 {
   27     m := xs[0]
   28     for i := 1; i < len(xs); i++ {
   29         if xs[i] < m {
   30             m = xs[i]
   31         }
   32     }
   33     return m
   34 }
   35 
   36 
   37 func main() {
   38     F := []uint64{2, 3, 5}
   39     var n = len(F)
   40     OUT := []uint64{
   41         2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36,
   42         40, 45, 48, 50, 54, 60, 64, 72, 75, 80, 81, 90, 96, 100, 108, 120, 125,
   43         128, 135, 144, 150, 160, 162, 180, 192, 200, 216, 225, 240, 243, 250,
   44         256, 270, 288, 300, 320, 324, 360, 375, 384, 400, 405, 432, 450, 480,
   45         486, 500, 512, 540, 576, 600, 625, 640, 648, 675, 720, 729, 750, 768,
   46         800, 810, 864, 900, 960, 972, 1000, 1024, 1080, 1125, 1152, 1200, 1215,
   47         1250, 1280, 1296, 1350, 1440, 1458, 1500, 1536, 1600}
   48 
   49     x := uint64(1)
   50     ins := make([]T, n)
   51     outs := make([]T, n)
   52     xs := make([]uint64, n)
   53     for i := 0; i < n; i++ {
   54         ins[i], outs[i] = M(F[i])
   55         xs[i] = x
   56     }
   57 
   58     for i := 0; i < len(OUT); i++ {
   59         for i := 0; i < n; i++ {
   60             ins[i] <- x
   61         }
   62 
   63         for i := 0; i < n; i++ {
   64             if xs[i] == x {
   65                 xs[i] = <-outs[i]
   66             }
   67         }
   68 
   69         x = min(xs)
   70         if x != OUT[i] {
   71             println("bad: ", x, " should be ", OUT[i])
   72             panic("235")
   73         }
   74     }
   75 }