#![cfg(not(target_arch = "wasm32"))]
#[cfg(test)]
mod tests {
use ries_rs::expr::Expression;
#[test]
fn test_to_infix_basic() {
let expr = Expression::parse("x1+").unwrap();
println!("Parsed 'x1+':");
println!(" Symbols slice: {:?}", expr.symbols());
for (i, sym) in expr.symbols().iter().enumerate() {
println!(
" [{}] {:?} seft={:?} display={}",
i,
sym,
sym.seft(),
sym.display_name()
);
}
let infix = expr.to_infix();
println!(" to_infix result: '{}'", infix);
assert_eq!(infix, "x+1");
}
#[test]
fn test_to_infix_postfix() {
let expr = Expression::parse("x1+").unwrap();
println!("Parsed 'x1+':");
println!(" Symbols slice: {:?}", expr.symbols());
for (i, sym) in expr.symbols().iter().enumerate() {
println!(
" [{}] {:?} seft={:?} display={}",
i,
sym,
sym.seft(),
sym.display_name()
);
}
let infix = expr.to_infix();
println!(" to_infix result: '{}'", infix);
assert_eq!(infix, "x+1");
}
#[test]
fn test_to_infix_complex() {
let expr = Expression::parse("2x*").unwrap();
let infix = expr.to_infix();
println!(" '2x*' -> '{}'", infix);
assert!(infix.contains("2") && infix.contains("x"));
}
#[test]
fn test_wasm_search_like() {
use ries_rs::gen::GenConfig;
use ries_rs::search::{search_with_stats_and_config, SearchConfig};
let target = 2.0;
let (max_lhs, max_rhs) = ries_rs::search::level_to_complexity(0);
let gen_config = GenConfig {
max_lhs_complexity: max_lhs,
max_rhs_complexity: max_rhs,
..GenConfig::default()
};
let search_config = SearchConfig {
target,
max_matches: 5,
stop_at_exact: true,
..SearchConfig::default()
};
let (matches, _stats) = search_with_stats_and_config(&gen_config, &search_config);
println!("Found {} matches", matches.len());
for (i, m) in matches.iter().enumerate().take(10) {
println!("Match {}: LHS symbols: {:?}", i, m.lhs.expr.symbols());
println!(" LHS infix: {}", m.lhs.expr.to_infix());
println!(" RHS symbols: {:?}", m.rhs.expr.symbols());
println!(" RHS infix: {}", m.rhs.expr.to_infix());
}
assert!(matches.len() <= search_config.max_matches);
}
#[test]
fn test_all_binary_operators() {
use ries_rs::expr::Expression;
use ries_rs::symbol::Symbol;
let test_cases = vec![
("x1+", Symbol::Add), ("x1-", Symbol::Sub), ("x1*", Symbol::Mul), ("x1/", Symbol::Div), ("x1^", Symbol::Pow), ("x1v", Symbol::Root), ("x1L", Symbol::Log), ("x1A", Symbol::Atan2), ];
for (postfix, expected_sym) in test_cases {
println!("Testing postfix: {}", postfix);
let expr = Expression::parse(postfix).unwrap();
println!(" Symbols: {:?}", expr.symbols());
assert!(
expr.symbols().contains(&expected_sym),
"Expected symbol {:?} in expression {:?}",
expected_sym,
expr.symbols()
);
let result = expr.to_infix();
println!(" Infix: {}", result);
assert!(!result.is_empty(), "Result should not be empty");
}
}
}