use logos::Logos;
#[derive(Debug, Logos, PartialEq, Eq)]
#[logos(skip r"[ \t\r\n]")]
pub enum WCNFToken {
#[regex("c.*")]
Comment,
#[token("h")]
HardClause,
#[regex("[+-]?[0-9]+")]
Integer,
}
#[cfg(test)]
mod test {
use logos::Logos;
use crate::wcnf_token::WCNFToken;
#[test]
fn comments() {
let mut lex = WCNFToken::lexer("c adfsde\ncsdae\nc\n");
assert_eq!(lex.next(), Some(Ok(WCNFToken::Comment)));
assert_eq!(lex.next(), Some(Ok(WCNFToken::Comment)));
assert_eq!(lex.next(), Some(Ok(WCNFToken::Comment)));
assert_eq!(lex.next(), None);
}
#[test]
fn hard_clause() {
let mut lex = WCNFToken::lexer("h 31 123 0");
assert_eq!(lex.next(), Some(Ok(WCNFToken::HardClause)));
assert_eq!(lex.next(), Some(Ok(WCNFToken::Integer)));
assert_eq!(lex.next(), Some(Ok(WCNFToken::Integer)));
assert_eq!(lex.next(), Some(Ok(WCNFToken::Integer)));
assert_eq!(lex.next(), None);
}
#[test]
fn soft_clauses() {
let mut lex = WCNFToken::lexer("-23442 1 2 0");
assert_eq!(lex.next(), Some(Ok(WCNFToken::Integer)));
assert_eq!(lex.next(), Some(Ok(WCNFToken::Integer)));
assert_eq!(lex.next(), Some(Ok(WCNFToken::Integer)));
assert_eq!(lex.next(), Some(Ok(WCNFToken::Integer)));
assert_eq!(lex.next(), None);
}
}