enotation 0.2.0

Extended s-notation
Documentation
use from_pest::FromPest;
use insta::assert_snapshot;
use pest::Parser;

use super::{QuasiQuote, Quote};
use crate::{ENotationParser, Rule};

fn quote(input: &str) -> Quote {
    let mut output = ENotationParser::parse(Rule::quote, input).unwrap();
    Quote::from_pest(&mut output).unwrap()
}
fn quasi_quote(input: &str) -> QuasiQuote {
    let mut output = ENotationParser::parse(Rule::quasiquote, input).unwrap();
    QuasiQuote::from_pest(&mut output).unwrap()
}

#[test]
fn parse_quote() {
    assert_snapshot!(quote("'(1 2 3)"), @"'(1 2 3)");
    assert_snapshot!(quote("'1"), @"'1");
    assert_snapshot!(quote("''1"), @"''1");
}

#[test]
fn parse_quasi_quote_and_unquoting() {
    assert_snapshot!(quasi_quote("`(1 2 3)"), @"`(1 2 3)");
    assert_snapshot!(quasi_quote("`(1 2 ,a)"), @"`(1 2 ,a)");
    assert_snapshot!(quasi_quote("`(1 ,@b)"), @"`(1 ,@b)");
}