Files @ b7be5c34cd3a
Branch filter:

Location: CSY/reowolf/src/test/setup.rs

b7be5c34cd3a 2.7 KiB application/rls-services+xml Show Annotation Show as Raw Download as Raw
Christopher Esterhuyse
cleaned up tests
use super::*;
use crate::common::*;
use crate::runtime::*;
use PortBinding::*;

#[test]
fn config_ok_0() {
    let pdl = b"primitive main() {}";
    let d = ProtocolD::parse(pdl).unwrap();
    let pol = d.component_polarities(b"main").unwrap();
    assert_eq!(&pol[..], &[]);
}

#[test]
fn config_ok_2() {
    let pdl = b"primitive main(in x, out y) {}";
    let d = ProtocolD::parse(pdl).unwrap();
    let pol = d.component_polarities(b"main").unwrap();
    assert_eq!(&pol[..], &[Getter, Putter]);
}

#[test]
#[should_panic]
fn config_non_port() {
    let pdl = b"primitive main(in q, int q) {}";
    ProtocolD::parse(pdl).unwrap();
}

#[test]
fn bind_too_much() {
    let mut x = Connector::Unconfigured(Unconfigured { controller_id: 0 });
    x.configure(b"primitive main(in a) {}", b"main").unwrap();
    x.bind_port(0, Native).unwrap();
    assert!(x.bind_port(1, Native).is_err());
}

#[test]
fn config_and_connect_2() {
    let timeout = Duration::from_millis(1_500);
    let addrs = [next_addr(), next_addr()];
    assert!(do_all(&[
        &|x| {
            x.configure(b"primitive main(in a, out b) {}", b"main").unwrap();
            x.bind_port(0, Passive(addrs[0])).unwrap();
            x.bind_port(1, Passive(addrs[1])).unwrap();
            x.connect(timeout).unwrap();
        },
        &|x| {
            x.configure(b"primitive main(out a, in b) {}", b"main").unwrap();
            x.bind_port(0, Active(addrs[0])).unwrap();
            x.bind_port(1, Active(addrs[1])).unwrap();
            x.connect(timeout).unwrap();
        },
    ]));
}

#[test]
fn config_and_connect_chain() {
    let timeout = Duration::from_millis(1_500);
    let addrs = [next_addr(), next_addr(), next_addr()];
    assert!(do_all(&[
        &|x| {
            // PRODUCER A->
            x.configure(b"primitive main(out a) {}", b"main").unwrap();
            x.bind_port(0, Active(addrs[0])).unwrap();
            x.connect(timeout).unwrap();
        },
        &|x| {
            // FORWARDER ->B->
            x.configure(b"primitive main(in a, out b) {}", b"main").unwrap();
            x.bind_port(0, Passive(addrs[0])).unwrap();
            x.bind_port(1, Active(addrs[1])).unwrap();
            x.connect(timeout).unwrap();
        },
        &|x| {
            // FORWARDER ->C->
            x.configure(b"primitive main(in a, out b) {}", b"main").unwrap();
            x.bind_port(0, Passive(addrs[1])).unwrap();
            x.bind_port(1, Active(addrs[2])).unwrap();
            x.connect(timeout).unwrap();
        },
        &|x| {
            // CONSUMER ->D
            x.configure(b"primitive main(in a) {}", b"main").unwrap();
            x.bind_port(0, Passive(addrs[2])).unwrap();
            x.connect(timeout).unwrap();
        },
    ]));
}