#![allow(dead_code, unused_imports, unused_must_use)]
use laminate::schema::InferredSchema;
use laminate::FlexValue;
use laminate_derive::Laminate;
use std::collections::HashMap;
fn load_fixture(path: &str) -> FlexValue {
let full_path = format!("{}/testdata/{}", env!("CARGO_MANIFEST_DIR"), path);
let json = std::fs::read_to_string(&full_path)
.unwrap_or_else(|e| panic!("Failed to read {full_path}: {e}"));
FlexValue::from_json(&json).unwrap()
}
#[test]
fn fhir_patient_extraction() {
let raw = load_fixture("healthcare/hl7_fhir_patient.json");
let family: String = raw.extract("[0].name[0].family").unwrap();
assert_eq!(family, "Smith");
let given = raw.each("[0].name[0].given");
assert_eq!(given.len(), 2);
let phone: String = raw.extract("[0].telecom[0].value").unwrap();
assert_eq!(phone, "+1-555-0101");
let city: String = raw.extract("[0].address[0].city").unwrap();
assert_eq!(city, "Springfield");
}
#[test]
fn fhir_patient_messy_fields() {
let raw = load_fixture("healthcare/hl7_fhir_patient.json");
let active: bool = raw.extract("[1].active").unwrap(); assert!(active);
let active3: bool = raw.extract("[2].active").unwrap(); assert!(active3);
let birth: String = raw.extract("[2].birthDate").unwrap();
assert_eq!(birth, "22/07/1955");
let mrn_val = raw.at("[2].identifier[0].value").unwrap();
let mrn_str: String = mrn_val.extract_root().unwrap();
assert_eq!(mrn_str, "44321");
let mrn_num: u64 = raw.extract("[2].identifier[0].value").unwrap();
assert_eq!(mrn_num, 44321);
}
#[test]
fn fhir_patient_extensions() {
let raw = load_fixture("healthcare/hl7_fhir_patient.json");
assert!(raw.has("[2].extension"));
let ext0_url: String = raw.extract("[2].extension[0].url").unwrap();
assert!(ext0_url.contains("patient-race"));
let smoking: String = raw.extract("[2].extension[1].valueString").unwrap();
assert_eq!(smoking, "former");
let birth4: String = raw.extract("[3].birthDate").unwrap();
assert_eq!(birth4, "1948");
let name_text: String = raw.extract("[3].name[0].text").unwrap();
assert!(name_text.contains("Bobby"));
}
#[test]
fn fhir_schema_inference() {
let raw = load_fixture("healthcare/hl7_fhir_patient.json");
let rows = raw.raw().as_array().unwrap().clone();
let schema = InferredSchema::from_values(&rows);
let active = &schema.fields["active"];
assert!(active.is_mixed_type());
eprintln!("\nFHIR Patient Schema:");
eprintln!("{}", schema.summary());
}
#[derive(Debug, Laminate)]
struct Transaction {
txn_id: String,
amount: String, currency: String,
#[laminate(rename = "type")]
txn_type: String,
#[laminate(coerce)]
status: String,
#[laminate(default)]
reference: String,
#[laminate(overflow)]
extra: HashMap<String, serde_json::Value>,
}
#[test]
fn financial_transactions_derive() {
let raw = load_fixture("financial/transactions.json");
let rows = raw.raw().as_array().unwrap();
let mut successes = 0;
for (i, row) in rows.iter().enumerate() {
match Transaction::from_flex_value(row) {
Ok((txn, _)) => {
successes += 1;
eprintln!(
"TXN {i}: {} {} {} — extra: {:?}",
txn.txn_id,
txn.amount,
txn.currency,
txn.extra.keys().collect::<Vec<_>>()
);
}
Err(e) => eprintln!("TXN {i}: FAILED: {e}"),
}
}
assert!(
successes >= 5,
"At least 5 transactions should parse, got {successes}"
);
}
#[test]
fn financial_schema_inference() {
let raw = load_fixture("financial/transactions.json");
let rows = raw.raw().as_array().unwrap().clone();
let schema = InferredSchema::from_values(&rows);
let amount = &schema.fields["amount"];
assert!(amount.is_mixed_type());
let fee = &schema.fields["fee"];
assert!(fee.is_mixed_type());
assert!(schema.fields.contains_key("flag_reason"));
assert!(schema.fields.contains_key("confirmations"));
eprintln!("\nFinancial Schema:");
eprintln!("{}", schema.summary());
}
#[test]
fn financial_audit() {
let raw = load_fixture("financial/transactions.json");
let rows = raw.raw().as_array().unwrap().clone();
let schema = InferredSchema::from_values(&rows);
let report = schema.audit(&rows);
eprintln!("\nFinancial Audit:");
eprintln!("{}", report.summary());
for v in &report.violations {
eprintln!(" {v}");
}
}
#[test]
fn tax_records_extraction() {
let raw = load_fixture("government/tax_records.json");
let gross: String = raw.extract("[0].gross_income").unwrap();
assert_eq!(gross, "125000.00");
let year: u32 = raw.extract("[1].tax_year").unwrap(); assert_eq!(year, 2025);
let gross_num: f64 = raw.extract("[1].gross_income").unwrap();
assert_eq!(gross_num, 85000.0);
let gross_locale: String = raw.extract("[2].gross_income").unwrap();
assert_eq!(gross_locale, "210,000.00");
assert!(raw.at("[3].gross_income").unwrap().is_null());
let ext: bool = raw.extract("[3].extension_filed").unwrap();
assert!(ext);
}
#[test]
fn tax_records_schema_inference() {
let raw = load_fixture("government/tax_records.json");
let rows = raw.raw().as_array().unwrap().clone();
let schema = InferredSchema::from_values(&rows);
let gross = &schema.fields["gross_income"];
assert!(gross.is_mixed_type() || gross.null_count > 0);
assert!(schema.fields.contains_key("extension_filed"));
assert!(schema.fields.contains_key("amended"));
assert!(schema.fields.contains_key("prior_year_agi"));
eprintln!("\nTax Records Schema:");
eprintln!("{}", schema.summary());
}
#[test]
fn sensor_readings_sentinel_detection() {
let raw = load_fixture("scientific/sensor_readings.json");
let temp: f64 = raw.extract("[0].temp_c").unwrap();
assert_eq!(temp, 15.2);
let bad_temp: f64 = raw.extract("[2].temp_c").unwrap();
assert_eq!(bad_temp, -9999.0);
let calm_result: Result<f64, _> = raw.extract("[3].wind_speed_ms");
assert!(calm_result.is_err());
let calm_str: String = raw.extract("[3].wind_speed_ms").unwrap();
assert_eq!(calm_str, "calm");
}
#[test]
fn sensor_readings_schema_inference() {
let raw = load_fixture("scientific/sensor_readings.json");
let rows = raw.raw().as_array().unwrap().clone();
let schema = InferredSchema::from_values(&rows);
let wind = &schema.fields["wind_speed_ms"];
assert!(wind.is_mixed_type());
let solar = &schema.fields["solar_radiation_wm2"];
assert!(solar.absent_count > 0);
let uv = &schema.fields["uv_index"];
assert!(uv.absent_count > 0);
eprintln!("\nSensor Schema:");
eprintln!("{}", schema.summary());
}
#[test]
fn sensor_audit_finds_sentinel_values() {
let raw = load_fixture("scientific/sensor_readings.json");
let rows = raw.raw().as_array().unwrap().clone();
let schema = InferredSchema::from_values(&rows);
let report = schema.audit(&rows);
let wind_stats = &report.field_stats["wind_speed_ms"];
assert!(
wind_stats.coercible > 0 || wind_stats.violations > 0,
"Expected 'calm' to be flagged: {wind_stats:?}"
);
eprintln!("\nSensor Audit:");
eprintln!("{}", report.summary());
for v in &report.violations {
eprintln!(" {v}");
}
}
#[derive(Debug, Laminate)]
struct PlayerStats {
#[laminate(coerce)]
strength: u32,
#[laminate(coerce)]
dexterity: u32,
#[laminate(coerce)]
intelligence: u32,
#[laminate(coerce)]
wisdom: u32,
#[laminate(coerce)]
charisma: u32,
}
#[test]
fn game_save_player_extraction() {
let raw = load_fixture("gaming/save_data.json");
let name: String = raw.extract("player.name").unwrap();
assert_eq!(name, "DragonSlayer42");
let level: u32 = raw.extract("player.level").unwrap();
assert_eq!(level, 67);
let exp: u64 = raw.extract("player.experience").unwrap();
assert_eq!(exp, 2450000);
let gold: u64 = raw.extract("player.gold").unwrap();
assert_eq!(gold, 154320);
}
#[test]
fn game_save_stats_derive() {
let raw = load_fixture("gaming/save_data.json");
let stats_val = raw.at("player.stats").unwrap();
let (stats, diags) = PlayerStats::from_flex_value(stats_val.raw()).unwrap();
assert_eq!(stats.strength, 45);
assert_eq!(stats.dexterity, 22);
assert_eq!(stats.intelligence, 15); assert_eq!(stats.wisdom, 18);
assert_eq!(stats.charisma, 12);
assert!(
diags.len() >= 2,
"Expected at least 2 coercions, got {}",
diags.len()
);
}
#[test]
fn game_save_inventory() {
let raw = load_fixture("gaming/save_data.json");
let items = raw.each("inventory");
assert_eq!(items.len(), 4);
let damage: String = raw.extract("inventory[0].damage").unwrap();
assert_eq!(damage, "45-60");
let item_id: u64 = raw.extract("inventory[2].id").unwrap(); assert_eq!(item_id, 1003);
let qty: u32 = raw.extract("inventory[2].quantity").unwrap(); assert_eq!(qty, 25);
let glow: String = raw.extract("inventory[3].custom_data.glow_color").unwrap();
assert_eq!(glow, "#FF00FF");
}
#[test]
fn game_save_settings_coercion() {
let raw = load_fixture("gaming/save_data.json");
let auto_save: bool = raw.extract("settings.auto_save").unwrap(); assert!(auto_save);
let music: f64 = raw.extract("settings.music_volume").unwrap(); assert!((music - 0.7).abs() < f64::EPSILON);
let show_dmg: bool = raw.extract("settings.show_damage_numbers").unwrap();
assert!(show_dmg);
let ui_scale: f64 = raw.extract("settings.ui_scale").unwrap(); assert!((ui_scale - 1.25).abs() < f64::EPSILON);
}
#[test]
fn game_save_mod_extensions_preserved() {
let raw = load_fixture("gaming/save_data.json");
assert!(raw.has("mod_data"));
assert!(raw.has("mod_data.enhanced_graphics"));
assert!(raw.has("mod_data.custom_quest_pack"));
let rt: bool = raw
.extract("mod_data.enhanced_graphics.settings.ray_tracing")
.unwrap();
assert!(rt);
let quests_added: u32 = raw
.extract("mod_data.custom_quest_pack.quests_added")
.unwrap();
assert_eq!(quests_added, 15);
}
#[test]
fn ollama_response_extraction() {
let raw = load_fixture("api-responses/ollama_response.json");
let model: String = raw.extract("model").unwrap();
assert_eq!(model, "llama3.2:latest");
let content: String = raw.extract("message.content").unwrap();
assert!(content.contains("Hello, world!"));
let done: bool = raw.extract("done").unwrap();
assert!(done);
let eval_count: u64 = raw.extract("eval_count").unwrap();
assert_eq!(eval_count, 42);
let total_dur: u64 = raw.extract("total_duration").unwrap();
assert!(total_dur > 1_000_000_000);
}