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