use qail_pg::PgDriver;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("╔═══════════════════════════════════════════════════════════╗");
println!("║ BATTLE TEST #11: NaN and Infinity 🧮 ║");
println!("╚═══════════════════════════════════════════════════════════╝\n");
let mut driver =
PgDriver::connect_with_password("localhost", 5432, "postgres", "postgres", "postgres")
.await?;
println!("1️⃣ Fetching special floats from Postgres...");
let sql = "SELECT 'NaN'::float8, 'Infinity'::float8, '-Infinity'::float8";
let rows = driver.fetch_raw(sql).await?;
if rows.is_empty() {
println!(" ❌ FAIL: No rows returned.");
return Err("No rows".into());
}
let row = &rows[0];
let val_nan = row.get_f64(0);
let val_inf = row.get_f64(1);
let val_neg_inf = row.get_f64(2);
println!(
" Received: [{:?}, {:?}, {:?}]",
val_nan, val_inf, val_neg_inf
);
match val_nan {
Some(v) if v.is_nan() => {
println!(" ✅ PASS: NaN parsed correctly.");
}
Some(v) => {
println!(" ❌ FAIL: NaN became {}!", v);
}
None => {
println!(" ❌ FAIL: NaN returned None (parse failed).");
}
}
match val_inf {
Some(v) if v.is_infinite() && v.is_sign_positive() => {
println!(" ✅ PASS: +Infinity parsed correctly.");
}
Some(v) => {
println!(" ❌ FAIL: +Infinity became {}!", v);
}
None => {
println!(" ❌ FAIL: +Infinity returned None.");
}
}
match val_neg_inf {
Some(v) if v.is_infinite() && v.is_sign_negative() => {
println!(" ✅ PASS: -Infinity parsed correctly.");
}
Some(v) => {
println!(" ❌ FAIL: -Infinity became {}!", v);
}
None => {
println!(" ❌ FAIL: -Infinity returned None.");
}
}
println!("\n ✅ ALL NaN/Infinity tests completed without panic.");
Ok(())
}