#skip // expected output #expect 1 #expect 2 #expect 1 #expect 2 #expect 1 #expect 2 #expect 1 #expect 1 #expect 2 #expect 2 #expect 2 #expect 1 #expect 2 #expect 1 #expect 1 #expect 1 #expect 2 #expect 2 // ships required in order to run this code #ship debug : Debug #ship choice : Choice #ship fifo : Fifo choice.out1: [*] take, sendto debug.in; // this should never emit anything choice.out2: take; [*] notify debug.in; debug.in: notify fifo.out; [*] take, deliver, notify fifo.out; choice.in1: take; [*] deliver; choice.in2: take; [*] deliver; 1: sendto choice.in1; 2: sendto choice.in2; choice.in: [*] take, deliver; fifo.in: [*] take, deliver; -1: sendto fifo.in; 0: sendto fifo.in; 1: sendto fifo.in; -1: sendto fifo.in; 0: sendto fifo.in; 1: sendto fifo.in; -1: sendto fifo.in; 0: sendto fifo.in; 1: sendto fifo.in; -1: sendto fifo.in; 0: sendto fifo.in; 1: sendto fifo.in; -1: sendto fifo.in; 0: sendto fifo.in; 1: sendto fifo.in; -1: sendto fifo.in; 0: sendto fifo.in; 1: sendto fifo.in; fifo.out: [3] wait, take, sendto choice.in.muxIfZero; [3] wait, take, sendto choice.in.muxIfNonZero; [3] wait, take, sendto choice.in.muxIfPositive; [3] wait, take, sendto choice.in.muxIfNonPositive; [3] wait, take, sendto choice.in.muxIfNegative; [3] wait, take, sendto choice.in.muxIfNonNegative;