From 92e86032cadc0d5042190c34de0c131feba98acd Mon Sep 17 00:00:00 2001 From: Sander Hautvast Date: Fri, 24 Jan 2020 13:17:16 +0100 Subject: [PATCH] added unittests for the functionality sofar --- src/main.rs | 3 +++ src/tests.rs | 39 +++++++++++++++++++++++++++++++++++++++ src/tokens.rs | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/tests.rs diff --git a/src/main.rs b/src/main.rs index 7a868c0..d3e77f0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,9 @@ use std::process; mod scanner; mod tokens; +#[cfg(test)] +mod tests; + /// main /// no arguments: run interactively /// 1 argument: run the script file specified diff --git a/src/tests.rs b/src/tests.rs new file mode 100644 index 0000000..b8d8b47 --- /dev/null +++ b/src/tests.rs @@ -0,0 +1,39 @@ +#[cfg(test)] +use crate::scanner::scan_tokens; +use crate::tokens::TokenType::*; + +#[test] +fn test_scan_empty_source() { + let tokens = scan_tokens("").unwrap(); + assert_eq!(tokens.len(), 1); + + let token = tokens.get(0).unwrap(); + assert_eq!(token.token_type, EOF); + assert_eq!(token.line, 1); +} + +#[test] +fn test_scan_single_char_tokens() { + let tokens = scan_tokens(">").unwrap(); + assert_eq!(tokens.len(), 2); + + let token = tokens.get(0).unwrap(); + assert_eq!(token.token_type, GREATER); + assert_eq!(token.lexeme, ">"); + + let token = tokens.get(1).unwrap(); + assert_eq!(token.token_type, EOF); +} + +#[test] +fn test_scan_double_char_tokens() { + let tokens = scan_tokens(">=").unwrap(); + assert_eq!(tokens.len(), 2); + + let token = tokens.get(0).unwrap(); + assert_eq!(token.token_type, GREATEREQUAL); + assert_eq!(token.lexeme, ">="); + + let token = tokens.get(1).unwrap(); + assert_eq!(token.token_type, EOF); +} diff --git a/src/tokens.rs b/src/tokens.rs index 1fe45ea..42bdc3a 100644 --- a/src/tokens.rs +++ b/src/tokens.rs @@ -31,7 +31,7 @@ impl fmt::Debug for Token<'_> { } } -#[derive(Debug, Clone, Copy)] +#[derive(Eq, PartialEq, Debug, Clone, Copy)] pub enum TokenType { // Single-character tokens. LEFTPAREN, // (