#[macro_use]
extern crate log;
extern crate env_logger;
extern crate cfg;
extern crate earley_omnitool;
mod helpers;
use cfg::earley::Grammar;
use earley_omnitool::forest::NullForest;
use earley_omnitool::grammar::InternalGrammar;
use earley_omnitool::recognizer::Recognizer;
use helpers::Parse;
#[test]
fn test_recognize_nested() {
let _ = env_logger::try_init();
let mut external = Grammar::new();
let (start, nested, terminal) = external.sym();
external.rule(start).rhs([nested, terminal])
.rule(nested).rhs([terminal, terminal]);
external.set_start(start);
let cfg = InternalGrammar::from_grammar(&external);
let mut rec = Recognizer::new(&cfg, NullForest);
let finished = rec.parse(&[terminal.usize() as u32; 3]);
assert!(finished);
}
#[test]
fn test_recognize_reset() {
let _ = env_logger::try_init();
let mut external = Grammar::new();
let (start, nested, terminal) = external.sym();
external.rule(start).rhs([nested, terminal])
.rule(nested).rhs([terminal, terminal]);
external.set_start(start);
let cfg = InternalGrammar::from_grammar(&external);
let mut rec = Recognizer::new(&cfg, NullForest);
for _ in 0..100 {
let finished = rec.parse(&[terminal.usize() as u32; 3]);
assert!(finished);
rec.reset();
}
}