From 843242e692280d604b74324ba26ead6158223439 Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Sun, 10 May 2026 12:54:41 +0300 Subject: Remove Float from parser Dropped to make the language simpler. --- compiler/src/ast/tests.rs | 96 +---------------------------------------------- 1 file changed, 2 insertions(+), 94 deletions(-) (limited to 'compiler/src/ast/tests.rs') diff --git a/compiler/src/ast/tests.rs b/compiler/src/ast/tests.rs index 505b075..44789cb 100644 --- a/compiler/src/ast/tests.rs +++ b/compiler/src/ast/tests.rs @@ -8,7 +8,6 @@ use crate::{ #[derive(Debug, PartialEq)] enum E { - Flt(f64), Int(i64), Str(&'static str), Sym(&'static str), @@ -21,7 +20,6 @@ impl From for E { fn from(expr: Expr) -> Self { match expr { Expr::Atom(atom) => match atom { - Atom::Float(f) => Flt(f), Atom::Integer(i) => Int(i), Atom::String(s) => Str(Box::leak(s.into())), Atom::Symbol(s) => Sym(Box::leak(s.into())), @@ -68,48 +66,12 @@ fn test_integers() { } } -#[test] -fn test_floats() { - let cases = vec![ - (vec![Number("2.71")], vec![Flt(2.71)]), - (vec![Number("-2.5")], vec![Flt(-2.5)]), - (vec![Number("+0.0")], vec![Flt(0.0)]), - (vec![Number(".5")], vec![Flt(0.5)]), - (vec![Number("-.5")], vec![Flt(-0.5)]), - (vec![Number("+.5")], vec![Flt(0.5)]), - (vec![Number("1e10")], vec![Flt(1e10)]), - (vec![Number("1E10")], vec![Flt(1e10)]), - (vec![Number("1.5e-3")], vec![Flt(1.5e-3)]), - (vec![Number("-1.5E+3")], vec![Flt(-1.5e3)]), - (vec![Number("inf")], vec![Flt(f64::INFINITY)]), - (vec![Number("-inf")], vec![Flt(f64::NEG_INFINITY)]), - (vec![Number("1e9999")], vec![Flt(f64::INFINITY)]), - (vec![Number("-1e9999")], vec![Flt(f64::NEG_INFINITY)]), - ]; - for (tokens, ast) in cases { - assert_eq!(parse(tokens.clone()), ast, "input: {tokens:?}"); - } -} - -#[test] -fn test_float_nan() { - let tokens = vec![Number("nan")]; - let expr = &parse(tokens.clone())[0]; - assert!( - matches!(expr, Flt(f) if f.is_nan()), - "input: {tokens:?}, got: {expr:?}" - ); -} - #[test] fn test_keywords() { let cases = vec![ (vec![Symbol("true")], vec![Bool(true)]), (vec![Symbol("false")], vec![Bool(false)]), (vec![Symbol("nil")], vec![Nil]), - (vec![Symbol("inf")], vec![Flt(f64::INFINITY)]), - (vec![Symbol("+inf")], vec![Flt(f64::INFINITY)]), - (vec![Symbol("-inf")], vec![Flt(f64::NEG_INFINITY)]), (vec![LeftPar, RightPar], vec![Nil]), ]; for (tokens, ast) in cases { @@ -117,16 +79,6 @@ fn test_keywords() { } } -#[test] -fn test_keyword_nan() { - let tokens = vec![Symbol("nan")]; - let expr = &parse(tokens.clone())[0]; - assert!( - matches!(expr, Flt(f) if f.is_nan()), - "input: {tokens:?}, got: {expr:?}" - ); -} - #[test] fn test_keywords_case_sensitive() { let cases = vec![ @@ -241,7 +193,7 @@ fn test_lists() { vec![ LeftPar, Number("1"), - Number("2.5"), + Number("-1"), String("s"), Symbol("foo"), Symbol("true"), @@ -250,7 +202,7 @@ fn test_lists() { ], vec![List(vec![ Int(1), - Flt(2.5), + Int(-1), Str("s"), Sym("foo"), Bool(true), @@ -350,36 +302,6 @@ fn test_invalid_integer() { } } -#[test] -fn test_invalid_float() { - let cases = vec![ - "12somE0txt", - "12som.0txt", - "12.3txt", - "1.2.3", - "1.2.3.4", - ".", - "+.", - "-.", - "1e", - "1e+", - "1e-", - "1.e", - ".e5", - "1ee5", - "1e1.5", - ]; - for number in cases { - let tokens = vec![Number(number)]; - let error = number.parse::().unwrap_err(); - assert_eq!( - parse_err(tokens.clone()), - Error::InvalidFloatLiteral(number.into(), error), - "input: {tokens:?}", - ); - } -} - #[test] fn test_unclosed_string() { let cases = vec![ @@ -504,20 +426,6 @@ fn test_error_span_invalid_integer() { assert_eq!(err.span, s, "input: {tokens:?}"); } -#[test] -fn test_error_span_invalid_float() { - let s = sp((1, 0, 0), (1, 5, 5)); - let tokens = vec![tsp(Number("1.2.3"), s)]; - let err = parse_sp_err(tokens.clone()); - - assert!( - matches!(err.inner, Error::InvalidFloatLiteral(..)), - "input: {tokens:?}, got: {:?}", - err.inner, - ); - assert_eq!(err.span, s, "input: {tokens:?}"); -} - #[test] fn test_error_span_unclosed_left_par() { let lp = sp((1, 0, 0), (1, 1, 1)); -- cgit v1.3