use super::fixtures::*;
#[test]
fn test_current_time_precision_0() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIME",
vec![create_literal(vibesql_types::SqlValue::Integer(0))],
);
let result = evaluator.eval(&expr, &row).unwrap();
match result {
vibesql_types::SqlValue::Time(s) => {
validate_fractional_precision(&s.to_string(), 0);
validate_time_format(&s.to_string());
}
_ => panic!("CURRENT_TIME should return Time type"),
}
}
#[test]
fn test_current_time_precision_3() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIME",
vec![create_literal(vibesql_types::SqlValue::Integer(3))],
);
let result = evaluator.eval(&expr, &row).unwrap();
match result {
vibesql_types::SqlValue::Time(s) => {
let time_str = s.to_string();
assert!(time_str.contains(':'), "Should be valid time format");
}
_ => panic!("CURRENT_TIME should return Time type"),
}
}
#[test]
fn test_current_time_precision_6() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIME",
vec![create_literal(vibesql_types::SqlValue::Integer(6))],
);
let result = evaluator.eval(&expr, &row).unwrap();
match result {
vibesql_types::SqlValue::Time(s) => {
let time_str = s.to_string();
assert!(time_str.contains(':'), "Should be valid time format");
}
_ => panic!("CURRENT_TIME should return Time type"),
}
}
#[test]
fn test_current_time_precision_9() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIME",
vec![create_literal(vibesql_types::SqlValue::Integer(9))],
);
let result = evaluator.eval(&expr, &row).unwrap();
match result {
vibesql_types::SqlValue::Time(s) => {
let time_str = s.to_string();
assert!(time_str.contains(':'), "Should be valid time format");
}
_ => panic!("CURRENT_TIME should return Time type"),
}
}
#[test]
fn test_current_time_precision_invalid_high() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIME",
vec![create_literal(vibesql_types::SqlValue::Integer(10))],
);
let result = evaluator.eval(&expr, &row);
assert!(result.is_err(), "Precision 10 should return an error");
let err_msg = format!("{:?}", result.unwrap_err());
assert!(err_msg.to_lowercase().contains("precision"), "Error should mention precision");
}
#[test]
fn test_current_time_precision_invalid_negative() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIME",
vec![create_literal(vibesql_types::SqlValue::Integer(-1))],
);
let result = evaluator.eval(&expr, &row);
assert!(result.is_err(), "Negative precision should return an error");
}
#[test]
fn test_current_timestamp_precision_0() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIMESTAMP",
vec![create_literal(vibesql_types::SqlValue::Integer(0))],
);
let result = evaluator.eval(&expr, &row).unwrap();
match result {
vibesql_types::SqlValue::Timestamp(s) => {
validate_fractional_precision(&s.to_string(), 0);
validate_timestamp_format(&s.to_string());
}
_ => panic!("CURRENT_TIMESTAMP should return Timestamp type"),
}
}
#[test]
fn test_current_timestamp_precision_3() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIMESTAMP",
vec![create_literal(vibesql_types::SqlValue::Integer(3))],
);
let result = evaluator.eval(&expr, &row).unwrap();
match result {
vibesql_types::SqlValue::Timestamp(s) => {
let timestamp_str = s.to_string();
assert!(timestamp_str.contains(':'), "Should be valid timestamp format");
assert!(timestamp_str.contains(' '), "Should have date and time parts");
}
_ => panic!("CURRENT_TIMESTAMP should return Timestamp type"),
}
}
#[test]
fn test_current_timestamp_precision_6() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIMESTAMP",
vec![create_literal(vibesql_types::SqlValue::Integer(6))],
);
let result = evaluator.eval(&expr, &row).unwrap();
match result {
vibesql_types::SqlValue::Timestamp(s) => {
let timestamp_str = s.to_string();
assert!(timestamp_str.contains(':'), "Should be valid timestamp format");
assert!(timestamp_str.contains(' '), "Should have date and time parts");
}
_ => panic!("CURRENT_TIMESTAMP should return Timestamp type"),
}
}
#[test]
fn test_current_timestamp_precision_invalid() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIMESTAMP",
vec![create_literal(vibesql_types::SqlValue::Integer(10))],
);
let result = evaluator.eval(&expr, &row);
assert!(result.is_err(), "Precision 10 should return an error");
}
#[test]
fn test_current_time_too_many_args() {
let (evaluator, row) = setup_test();
let expr = create_datetime_function(
"CURRENT_TIME",
vec![
create_literal(vibesql_types::SqlValue::Integer(3)),
create_literal(vibesql_types::SqlValue::Integer(5)),
],
);
let result = evaluator.eval(&expr, &row);
assert!(result.is_err(), "Should error with too many arguments");
}