main.mx raw

   1  // Test: do chan arrays preserve pipe-bound tracking?
   2  package main
   3  
   4  import (
   5  	"fmt"
   6  	"smesh.lol/pkg/relay/wire"
   7  )
   8  
   9  func worker(in chan wire.IngestRequest, out chan wire.IngestResponse) {
  10  	req, ok := <-in
  11  	if !ok { return }
  12  	resp := wire.IngestResponse{ReqID: req.ReqID, Verdict: wire.VerdictAccept}
  13  	out <- resp
  14  }
  15  
  16  func main() {
  17  	const N = 4
  18  	ins := [N]chan wire.IngestRequest{}
  19  	outs := [N]chan wire.IngestResponse{}
  20  	for i := 0; i < N; i++ {
  21  		ins[i] = chan wire.IngestRequest{}
  22  		outs[i] = chan wire.IngestResponse{}
  23  		spawn(worker, ins[i], outs[i])
  24  	}
  25  	// Try send via array index
  26  	for i := 0; i < N; i++ {
  27  		ins[i] <- wire.IngestRequest{ReqID: uint32(i)}
  28  	}
  29  	// Try recv via array index
  30  	for i := 0; i < N; i++ {
  31  		resp := <-outs[i]
  32  		fmt.Printf("got reqID=%d verdict=%d\n", resp.ReqID, resp.Verdict)
  33  	}
  34  	println("done")
  35  }
  36