diff --git a/src/parse.rs b/src/parse.rs index ac07a1f..01471de 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -164,16 +164,12 @@ fn tokenize(input: &str) -> Vec { } TokState::Unit => { if c.is_ascii_digit() || c == '-' { - tokens.push(Token::Unit(token)); + tokens.push(Token::Unit(token.trim().to_string())); state = TokState::Number; token = String::new(); token.push(c); - } else if !c.is_whitespace() { - token.push(c); } else { - tokens.push(Token::Unit(token)); - state = TokState::Neutral; - token = String::new(); + token.push(c); } } } @@ -182,7 +178,7 @@ fn tokenize(input: &str) -> Vec { match state { TokState::Neutral => { assert!(token.len() == 0); } TokState::Number => { tokens.push(Token::Number(token.trim().to_string())); } - TokState::Unit => { tokens.push(Token::Unit(token)); } + TokState::Unit => { tokens.push(Token::Unit(token.trim().to_string())); } } tokens @@ -304,13 +300,6 @@ mod test { Token::Unit("ft".to_string()), ] ); - assert_eq!( - tokenize("ft in"), - vec![ - Token::Unit("ft".to_string()), - Token::Unit("in".to_string()), - ] - ); assert_eq!( tokenize("5 ft 7 in"), vec![ @@ -336,5 +325,18 @@ mod test { Token::Unit("lbs".to_string()), ] ); + assert_eq!( + tokenize("sq ft"), + vec![ + Token::Unit("sq ft".to_string()), + ] + ); + assert_eq!( + tokenize("sq ft2"), + vec![ + Token::Unit("sq ft".to_string()), + Token::Number("2".to_string()), + ] + ); } }