use super::*;
#[test]
fn test_s_flag_shows_equation_form_not_misleading_x_equals() {
let (stdout, _stderr) =
run_ries(&["2.5063", "--classic", "--report", "false", "-s", "-n", "1"]);
assert!(
stdout.contains("tanpi(x)") || stdout.contains("cospi(") || stdout.contains("atan2("),
"expected -s to either preserve equation form or show a valid inverse transform\n{}",
stdout
);
assert!(
!stdout.contains("x = 4-e^4"),
"expected -s to avoid misleading direct assignment\n{}",
stdout
);
}
#[test]
fn test_s_flag_without_complex_lhs_works_correctly() {
let (stdout, _stderr) = run_ries(&["2.5", "--classic", "--report", "false", "-s", "-n", "1"]);
assert!(
stdout.contains(" = 5/2") && stdout.contains("('exact' match)"),
"expected -s to work for simple x = value equations\n{}",
stdout
);
}
#[test]
fn test_p_flag_without_file_accepts_target() {
let output = run_ries_raw(&["-p", "2.5", "--classic", "--report", "false", "-n", "1"]);
assert!(
output.status.success(),
"Should accept target after -p\nstdout:\n{}\nstderr:\n{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("2.5"),
"Should show target value 2.5\n{}",
stdout
);
}
#[test]
fn test_l_flag_liouvillian_mode() {
let output = run_ries_raw(&["-l", "2.5", "--classic", "--report", "false", "-n", "1"]);
assert!(
output.status.success(),
"Should parse -l as liouvillian + target\nstdout:\n{}\nstderr:\n{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("2.5"),
"Should show target value 2.5\n{}",
stdout
);
}
#[test]
fn test_level_flag_with_integer() {
let output = run_ries_raw(&[
"--level",
"1",
"2.5",
"--classic",
"--report",
"false",
"-n",
"1",
]);
assert!(
output.status.success(),
"Should parse --level 1 with target 2.5\nstdout:\n{}\nstderr:\n{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("2.5"),
"Should show target value 2.5\n{}",
stdout
);
}
#[test]
fn test_i_flag_fallback_to_r() {
let output = run_ries_raw(&["-i", "2.5", "--classic", "--report", "false", "-n", "1"]);
assert!(
output.status.success(),
"Should fallback to -r mode\nstdout:\n{}\nstderr:\n{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let combined = format!(
"{}{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
assert!(
combined.contains("Replacing -i with -r") || combined.contains("replacing -i with -r"),
"Should warn about fallback\nstdout:\n{}\nstderr:\n{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("2.5") || stdout.contains("2 x = 5"),
"Should find matches for 2.5\n{}",
stdout
);
}
#[test]
fn test_ie_integer_exact_mode() {
let output = run_ries_raw(&["--ie", "3.0", "--classic", "--report", "false"]);
assert!(output.status.success(), "Should succeed with --ie flag");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("3") && stdout.contains("('exact' match)"),
"Should find x=3 as exact match\n{}",
stdout
);
}
#[test]
fn test_re_rational_exact_mode() {
let output = run_ries_raw(&["--re", "2.5", "--classic", "--report", "false"]);
assert!(output.status.success(), "Should succeed with --re flag");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("('exact' match)"),
"Should find exact match for 2.5\n{}",
stdout
);
}
#[test]
fn test_s_bare_symbol_table() {
let output = run_ries_raw(&["-S"]);
assert!(output.status.success(), "Should succeed with bare -S");
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("pi") && stdout.contains("e"),
"Should print symbol table with pi and e\n{}",
stdout
);
assert!(
stdout.contains("Explicit values") || stdout.contains("description"),
"Should show symbol table header\n{}",
stdout
);
}
#[test]
fn test_e_bare_enable_all() {
let output = run_ries_raw(&["-E", "2.5", "--classic", "--report", "false", "-n", "1"]);
assert!(
output.status.success(),
"Should succeed with bare -E: {:?}",
output
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("2.5"),
"Should show target value\n{}",
stdout
);
}