plotnik-core 0.3.2

Core data structures for Plotnik
Documentation
use super::*;

#[test]
fn roundtrip() {
    let json = r#"{
        "name": "test",
        "rules": {
            "source_file": { "type": "SYMBOL", "name": "expression" },
            "expression": { "type": "STRING", "value": "x" }
        }
    }"#;

    let grammar = Grammar::from_json(json).unwrap();
    let binary = grammar.to_binary();
    let decoded = Grammar::from_binary(&binary).unwrap();

    assert_eq!(grammar.name, decoded.name);
    assert_eq!(grammar.rules.len(), decoded.rules.len());
}

#[test]
fn roundtrip_preserves_order() {
    let json = r#"{
        "name": "test",
        "rules": {
            "program": { "type": "SYMBOL", "name": "statement" },
            "statement": { "type": "SYMBOL", "name": "expression" },
            "expression": { "type": "STRING", "value": "x" }
        }
    }"#;

    let grammar = Grammar::from_json(json).unwrap();
    let binary = grammar.to_binary();
    let decoded = Grammar::from_binary(&binary).unwrap();

    assert_eq!(decoded.rules[0].0, "program");
    assert_eq!(decoded.rules[1].0, "statement");
    assert_eq!(decoded.rules[2].0, "expression");
}