Skip to content

Commit f9481d8

Browse files
author
Eric Holk
committed
---
yaml --- r: 4081 b: refs/heads/master c: 4a6ccf3 h: refs/heads/master i: 4079: 0c2bb89 v: v3
1 parent 5007abd commit f9481d8

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 54be5b044f71ca9e191b26b2e65ff6541f377358
2+
refs/heads/master: 4a6ccf3b0ff7a476aa8d692766214bc8ebdfc1dc

trunk/src/test/run-pass/issue-687.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// xfail-stage0
2+
3+
use std;
4+
import std::ivec;
5+
6+
tag msg {
7+
closed;
8+
received(u8[]);
9+
}
10+
11+
fn producer(chan[u8[]] c) {
12+
c <| ~[1u8, 2u8, 3u8, 4u8];
13+
let u8[] empty = ~[];
14+
c <| empty;
15+
}
16+
17+
fn packager(chan[chan[u8[]]] cb, chan[msg] msg) {
18+
let port[u8[]] p = port();
19+
cb <| chan(p);
20+
while (true) {
21+
log "waiting for bytes";
22+
let u8[] data;
23+
p |> data;
24+
log "got bytes";
25+
if (ivec::len[u8](data) == 0u) {
26+
log "got empty bytes, quitting";
27+
break;
28+
}
29+
log "sending non-empty buffer of length";
30+
log ivec::len[u8](data);
31+
msg <| received(data);
32+
log "sent non-empty buffer";
33+
}
34+
log "sending closed message";
35+
msg <| closed;
36+
log "sent closed message";
37+
}
38+
39+
fn main() {
40+
let port[msg] p = port();
41+
let port[chan[u8[]]] recv_reader = port();
42+
auto pack = spawn packager(chan(recv_reader), chan(p));
43+
44+
let chan[u8[]] source_chan;
45+
recv_reader |> source_chan;
46+
let task prod = spawn producer(source_chan);
47+
48+
while (true) {
49+
let msg msg;
50+
p |> msg;
51+
alt (msg) {
52+
case (closed) {
53+
log "Got close message";
54+
break;
55+
}
56+
case (received(?data)) {
57+
log "Got data. Length is:";
58+
log ivec::len[u8](data);
59+
}
60+
}
61+
}
62+
}

0 commit comments

Comments
 (0)