//@ run-pass
//@ needs-threads

use std::sync::mpsc::{channel, Receiver};
use std::thread;

fn periodical(n: isize) -> Receiver<bool> {
    let (chan, port) = channel();
    thread::spawn(move || {
        loop {
            for _ in 1..n {
                match chan.send(false) {
                    Ok(()) => {}
                    Err(..) => break,
                }
            }
            match chan.send(true) {
                Ok(()) => {}
                Err(..) => break,
            }
        }
    });
    return port;
}

fn integers() -> Receiver<isize> {
    let (chan, port) = channel();
    thread::spawn(move || {
        let mut i = 1;
        loop {
            match chan.send(i) {
                Ok(()) => {}
                Err(..) => break,
            }
            i = i + 1;
        }
    });
    return port;
}

fn main() {
    let ints = integers();
    let threes = periodical(3);
    let fives = periodical(5);
    for _ in 1..100 {
        match (ints.recv().unwrap(), threes.recv().unwrap(), fives.recv().unwrap()) {
            (_, true, true) => println!("FizzBuzz"),
            (_, true, false) => println!("Fizz"),
            (_, false, true) => println!("Buzz"),
            (i, false, false) => println!("{}", i),
        }
    }
}
