cow-parser 0.1.1

A parser for the esoteric Cow programming language.
Documentation
use anyhow::Result;
use cow_parser::{get_commands, optimize_cow_source, parse_cow_source, Rule};

#[test]
fn test_parse_cow_source_success() -> Result<()> {
    let result = parse_cow_source("MoO MOo");
    assert!(result.is_ok());
    Ok(())
}

#[test]
fn test_parse_cow_source_failure() {
    let result = parse_cow_source("Invalid Command");
    assert!(result.is_ok()); 
}

#[test]
fn test_get_commands_simple() -> Result<()> {
    let commands = get_commands("MoO")?;
    assert_eq!(commands, vec!["MoO"]);
    Ok(())
}

#[test]
fn test_get_commands_with_comments() -> Result<()> {
    let source = "Comment MoO another mOo";
    let commands = get_commands(source)?;
    assert_eq!(commands, vec!["MoO", "mOo"]);
    Ok(())
}

#[test]
fn test_optimize_increments() -> Result<()> {
    let source = "MoO MoO MoO";
    let optimized = optimize_cow_source(source)?;
    assert_eq!(optimized, vec!["increment(3)"]);
    Ok(())
}

#[test]
fn test_optimize_decrements() -> Result<()> {
    let source = "MOo MOo";
    let optimized = optimize_cow_source(source)?;
    assert_eq!(optimized, vec!["decrement(2)"]);
    Ok(())
}

#[test]
fn test_optimize_cancelling_moves() -> Result<()> {
    let source = "mOo moO";
    let optimized = optimize_cow_source(source)?;
    assert!(optimized.is_empty());
    Ok(())
}

#[test]
fn test_optimize_mixed_commands() -> Result<()> {
    let source = "mOo MMM moO MOo MOo MoO";
    let optimized = optimize_cow_source(source)?;
    assert_eq!(optimized, vec!["MMM", "decrement(2)", "increment(1)"]);
    Ok(())
}