mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-08-03 17:48:17 +00:00
26 lines
752 B
Rust
26 lines
752 B
Rust
#![no_main]
|
|
use libfuzzer_sys::{fuzz_target, Corpus};
|
|
use limbo_core::numeric::StrToF64;
|
|
use std::error::Error;
|
|
|
|
fn do_fuzz(text: String) -> Result<Corpus, Box<dyn Error>> {
|
|
let expected = {
|
|
let conn = rusqlite::Connection::open_in_memory()?;
|
|
conn.query_row(&format!("SELECT cast(? as real)"), (&text,), |row| {
|
|
row.get::<_, f64>(0)
|
|
})?
|
|
};
|
|
|
|
let actual = limbo_core::numeric::str_to_f64(&text)
|
|
.map(|v| {
|
|
let (StrToF64::Fractional(non_nan) | StrToF64::Decimal(non_nan)) = v;
|
|
f64::from(non_nan)
|
|
})
|
|
.unwrap_or(0.0);
|
|
|
|
assert_eq!(expected, actual);
|
|
|
|
Ok(Corpus::Keep)
|
|
}
|
|
|
|
fuzz_target!(|blob: String| -> Corpus { do_fuzz(blob).unwrap_or(Corpus::Keep) });
|