use exprimo::Evaluator;
use serde_json::Value;
use std::collections::HashMap;
#[test]
fn test_overflow_addition() {
let evaluator = Evaluator::new(HashMap::new(), HashMap::new());
let result = evaluator.evaluate("1.7976931348623157e308 + 1.7976931348623157e308");
match result {
Ok(Value::Number(n)) => {
assert!(n.as_f64().unwrap() > 1.0e308);
}
Ok(val) => panic!("Expected Number, got {:?}", val),
Err(e) => panic!("Evaluation failed: {:?}", e),
}
}
#[test]
fn test_divide_by_zero() {
let evaluator = Evaluator::new(HashMap::new(), HashMap::new());
let result = evaluator.evaluate("1 / 0");
match result {
Ok(Value::Number(n)) => {
let val = n.as_f64().unwrap();
assert!(val > 1.0e308 || val.is_infinite());
}
Ok(val) => panic!("Expected Number, got {:?}", val),
Err(e) => panic!("Evaluation failed: {:?}", e),
}
}
#[test]
fn test_nan_creation() {
let evaluator = Evaluator::new(HashMap::new(), HashMap::new());
let result = evaluator.evaluate("0 / 0");
match result {
Ok(Value::Null) => {} Ok(Value::Number(n)) => {
println!("Got number: {:?}", n);
panic!("Expected Null for NaN, got Number: {:?}", n);
}
Ok(val) => panic!("Expected Null, got {:?}", val),
Err(e) => panic!("Evaluation failed: {:?}", e),
}
}
#[test]
fn test_escape_sequence() {
let evaluator = Evaluator::new(HashMap::new(), HashMap::new());
let result = evaluator.evaluate("'\\n'");
match result {
Ok(Value::String(s)) => assert_eq!(s, "\n"),
Ok(val) => panic!("Expected String, got {:?}", val),
Err(e) => panic!("Evaluation failed: {:?}", e),
}
}