From b2769afffd0846fbf87aa64ecf76ad84935e4fec Mon Sep 17 00:00:00 2001 From: bit-aloo Date: Sat, 18 Oct 2025 15:05:36 +0530 Subject: [PATCH] add test --- core/util.rs | 42 +++++++++++++++++++++++++++++++++++++++++- testing/select.test | 7 ++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/core/util.rs b/core/util.rs index ef1a27d05..426e5f8f6 100644 --- a/core/util.rs +++ b/core/util.rs @@ -1376,7 +1376,7 @@ pub fn rewrite_column_references_if_needed( #[cfg(test)] pub mod tests { use super::*; - use crate::schema::Type as SchemaValueType; + use crate::{schema::Type as SchemaValueType, types::Text}; use turso_parser::ast::{self, Expr, Literal, Name, Operator::*, Type}; #[test] @@ -2387,4 +2387,44 @@ pub mod tests { assert_eq!(result, expected, "Failed for input: {input}"); } } + + #[test] + fn test_checked_cast_text_to_numeric_lossless_property() { + use Value::*; + assert_eq!(checked_cast_text_to_numeric("1.xx", true), Err(())); + assert_eq!(checked_cast_text_to_numeric("abc", true), Err(())); + assert_eq!(checked_cast_text_to_numeric("--5", true), Err(())); + assert_eq!(checked_cast_text_to_numeric("12.34.56", true), Err(())); + assert_eq!(checked_cast_text_to_numeric("", true), Err(())); + assert_eq!(checked_cast_text_to_numeric(" ", true), Err(())); + assert_eq!(checked_cast_text_to_numeric("0", true), Ok(Integer(0))); + assert_eq!(checked_cast_text_to_numeric("42", true), Ok(Integer(42))); + assert_eq!(checked_cast_text_to_numeric("-42", true), Ok(Integer(-42))); + assert_eq!( + checked_cast_text_to_numeric("999999999999", true), + Ok(Integer(999_999_999_999)) + ); + assert_eq!(checked_cast_text_to_numeric("1.0", true), Ok(Float(1.0))); + assert_eq!( + checked_cast_text_to_numeric("-3.22", true), + Ok(Float(-3.22)) + ); + assert_eq!( + checked_cast_text_to_numeric("0.001", true), + Ok(Float(0.001)) + ); + assert_eq!(checked_cast_text_to_numeric("2e3", true), Ok(Float(2000.0))); + assert_eq!( + checked_cast_text_to_numeric("-5.5e-2", true), + Ok(Float(-0.055)) + ); + assert_eq!( + checked_cast_text_to_numeric(" 123 ", true), + Ok(Integer(123)) + ); + assert_eq!( + checked_cast_text_to_numeric("\t-3.22\n", true), + Ok(Float(-3.22)) + ); + } } diff --git a/testing/select.test b/testing/select.test index c42e38e42..1267f131d 100755 --- a/testing/select.test +++ b/testing/select.test @@ -1008,6 +1008,11 @@ do_execsql_test_in_memory_error_content limit-expr-invalid-data-type-4 { SELECT 1 LIMIT 4+NULL; } {"datatype mismatch"} +do_execsql_test_in_memory_error_content limit-expression-invalid-type { + SELECT 1 LIMIT '1.xx'; +} {"datatype mismatch"} + + do_execsql_test_on_specific_db {:memory:} rowid-references { CREATE TABLE test_table (id INTEGER); INSERT INTO test_table VALUES (5),(5); @@ -1093,4 +1098,4 @@ do_execsql_test_on_specific_db {:memory:} unambiguous-self-join { 2|3 3|1 3|2 -3|3} +3|3} \ No newline at end of file