diff options
| author | Tolmachev Igor <me@igorek.dev> | 2026-05-09 15:25:49 +0300 |
|---|---|---|
| committer | Tolmachev Igor <me@igorek.dev> | 2026-05-09 15:38:35 +0300 |
| commit | 60ad7b994c2126346c19769a1a5f5c8f679a05ee (patch) | |
| tree | 702b5dad7b34d1ca81fd9918345f648c26d088a2 /compiler/src/lexer/tests.rs | |
| parent | f898f3c3a17a7c71236cafff34f507b10d71f835 (diff) | |
| download | crisp-60ad7b994c2126346c19769a1a5f5c8f679a05ee.tar.gz crisp-60ad7b994c2126346c19769a1a5f5c8f679a05ee.zip | |
Fix lexer processing [+-].\d as symbol instead of number
Extended lookahead in the number branch to 3 chars.
Added tests for "-.5", "+.5", "-.0" in test_numbers and for
"-.", "+.", ".", "+.a", "-.a" in test_ambiguous.
Diffstat (limited to 'compiler/src/lexer/tests.rs')
| -rw-r--r-- | compiler/src/lexer/tests.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/compiler/src/lexer/tests.rs b/compiler/src/lexer/tests.rs index 89575c7..6f96c65 100644 --- a/compiler/src/lexer/tests.rs +++ b/compiler/src/lexer/tests.rs | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | use crate::span::Pos; | 1 | use crate::span::Pos; |
| 2 | 2 | ||
| 3 | use super::Token::*; | 3 | use super::Token::*; |
| 4 | use super::*; | 4 | use super::{Lexer, Token}; |
| 5 | 5 | ||
| 6 | fn tokenize<'a>(input: &'a str) -> Vec<Token<'a>> { | 6 | fn tokenize<'a>(input: &'a str) -> Vec<Token<'a>> { |
| 7 | Lexer::new(input).map(|s| s.inner).collect() | 7 | Lexer::new(input).map(|s| s.inner).collect() |
| @@ -67,6 +67,9 @@ fn test_numbers() { | |||
| 67 | ("1e10", vec![Number("1e10")]), | 67 | ("1e10", vec![Number("1e10")]), |
| 68 | ("1.5e-3", vec![Number("1.5e-3")]), | 68 | ("1.5e-3", vec![Number("1.5e-3")]), |
| 69 | (".5", vec![Number(".5")]), | 69 | (".5", vec![Number(".5")]), |
| 70 | ("-.5", vec![Number("-.5")]), | ||
| 71 | ("+.5", vec![Number("+.5")]), | ||
| 72 | ("-.0", vec![Number("-.0")]), | ||
| 70 | ]; | 73 | ]; |
| 71 | for (code, tokens) in cases { | 74 | for (code, tokens) in cases { |
| 72 | assert_eq!(tokenize(code), tokens); | 75 | assert_eq!(tokenize(code), tokens); |
| @@ -149,6 +152,11 @@ fn test_ambiguous() { | |||
| 149 | ("+foo", vec![Symbol("+foo")]), | 152 | ("+foo", vec![Symbol("+foo")]), |
| 150 | ("...", vec![Symbol("...")]), | 153 | ("...", vec![Symbol("...")]), |
| 151 | (".foo", vec![Symbol(".foo")]), | 154 | (".foo", vec![Symbol(".foo")]), |
| 155 | ("-.", vec![Symbol("-.")]), | ||
| 156 | ("+.", vec![Symbol("+.")]), | ||
| 157 | (".", vec![Symbol(".")]), | ||
| 158 | ("+.a", vec![Symbol("+.a")]), | ||
| 159 | ("-.a", vec![Symbol("-.a")]), | ||
| 152 | ]; | 160 | ]; |
| 153 | for (code, tokens) in cases { | 161 | for (code, tokens) in cases { |
| 154 | assert_eq!(tokenize(code), tokens); | 162 | assert_eq!(tokenize(code), tokens); |
