use crate::common::create_test_evaluator;
#[test]
fn test_sin_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("SIN"),
args: vec![vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Integer(0))],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
assert_eq!(result, vibesql_types::SqlValue::Double(0.0));
}
#[test]
fn test_cos_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("COS"),
args: vec![vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Integer(0))],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
assert_eq!(result, vibesql_types::SqlValue::Double(1.0));
}
#[test]
fn test_tan_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("TAN"),
args: vec![vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Integer(0))],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
assert_eq!(result, vibesql_types::SqlValue::Double(0.0));
}
#[test]
fn test_asin_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("ASIN"),
args: vec![vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Double(0.5))],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
if let vibesql_types::SqlValue::Double(val) = result {
assert!((val - 0.5236).abs() < 0.001);
} else {
panic!("Expected Double value");
}
}
#[test]
fn test_acos_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("ACOS"),
args: vec![vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Double(0.5))],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
if let vibesql_types::SqlValue::Double(val) = result {
assert!((val - 1.0472).abs() < 0.001);
} else {
panic!("Expected Double value");
}
}
#[test]
fn test_atan_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("ATAN"),
args: vec![vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Integer(1))],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
if let vibesql_types::SqlValue::Double(val) = result {
assert!((val - 0.7854).abs() < 0.001);
} else {
panic!("Expected Double value");
}
}
#[test]
fn test_atan2_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("ATAN2"),
args: vec![
vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Integer(1)),
vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Integer(1)),
],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
if let vibesql_types::SqlValue::Double(val) = result {
assert!((val - 0.7854).abs() < 0.001);
} else {
panic!("Expected Double value");
}
}
#[test]
fn test_radians_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("RADIANS"),
args: vec![vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Integer(180))],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
if let vibesql_types::SqlValue::Double(val) = result {
assert!((val - std::f64::consts::PI).abs() < 0.0001);
} else {
panic!("Expected Double value");
}
}
#[test]
fn test_degrees_function() {
let (evaluator, row) = create_test_evaluator();
let expr = vibesql_ast::Expression::Function {
name: vibesql_ast::FunctionIdentifier::new("DEGREES"),
args: vec![vibesql_ast::Expression::Literal(vibesql_types::SqlValue::Double(
std::f64::consts::PI,
))],
character_unit: None,
};
let result = evaluator.eval(&expr, &row).unwrap();
if let vibesql_types::SqlValue::Double(val) = result {
assert!((val - 180.0).abs() < 0.0001);
} else {
panic!("Expected Double value");
}
}