ccs 0.1.0

A simple implementation of the Calculus of Communicating Systems by Robin Milner
use std::fs;

use crate::parser;

fn parse_file_twice(file: &str) {
    let contents = fs::read_to_string(file).unwrap();

    let first_parse_iteration = parser::parse(file.to_string(), &contents).unwrap();
    let first_string = first_parse_iteration.to_string();
    let second_parse_iteration = parser::parse(file.to_string(), &first_string).unwrap();

    for (name, spec) in first_parse_iteration.processes() {
        assert_eq!(spec.to_string(), second_parse_iteration.processes().get(name).unwrap().to_string(), "[{}]", file);
        assert_eq!(spec, second_parse_iteration.processes().get(name).unwrap(), "[{}]", file);
    }
    for (name, spec) in second_parse_iteration.processes() {
        assert_eq!(spec.to_string(), first_parse_iteration.processes().get(name).unwrap().to_string(), "[{}]", file);
        assert_eq!(spec, first_parse_iteration.processes().get(name).unwrap(), "[{}]", file);
    }

    assert_eq!(first_parse_iteration, second_parse_iteration, "[{}]", file);
}


#[test]
fn parse_twice() {
    for example in super::EXAMPLES {
        parse_file_twice(example)
    }
}