// expected output #skip #expect 2 #expect 1 #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 fifo : Fifo #ship fifo1 : Fifo #ship fifo2 : Fifo #ship choice : Choice // alternate values from choice1+choice2 choice.out1: [*] take, notify fifo1.out; choice.out2: [*] take, notify fifo2.out; debug.in: [*] take, deliver, notify fifo.out; choice.in1: take; [*] deliver; 1: sendto choice.in1; // choice.in2 should never be used (FIXME: test this) choice.in: [*] take, deliver; fifo.in: [*] take, deliver; 0: 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: [2] wait, take, sendto choice.in.deMuxIfZero; fifo.out: [2] wait, take, sendto choice.in.deMuxIfNonZero; fifo.out: [3] wait, take, sendto choice.in.deMuxIfPositive; fifo.out: [3] wait, take, sendto choice.in.deMuxIfNonPositive; fifo.out: [3] wait, take, sendto choice.in.deMuxIfNegative; fifo.out: [3] wait, take, sendto choice.in.deMuxIfNonNegative; 0: sendto fifo.out; 1: sendto fifo1.in; fifo1.in: take, deliver; fifo1.out: take; [*] wait, sendto debug.in; 2: sendto fifo2.in; fifo2.in: take, deliver; fifo2.out: take; [*] wait, sendto debug.in;