esexpr-text 0.3.1

ESExpr serialization text format.
Documentation
#![expect(missing_docs, reason = "Tests")]

use std::fs;
use std::path::Path;

use esexpr::ESExpr;

fn parse_test(path: &Path) {
	let esx = std::fs::read_to_string(&path).unwrap();
	let esx = esexpr_text::parse_multi(&esx).unwrap();

	let mut json = path.parent().unwrap().to_path_buf();
	json.push(format!("{}.json", path.file_stem().unwrap().to_str().unwrap()));
	let json = std::fs::read_to_string(json).unwrap();
	let json: esexpr_json::JsonEncodedESExpr = serde_json::from_str(&json).unwrap();
	let json = match json {
		esexpr_json::JsonEncodedESExpr::List(items) => items,
		_ => vec![json],
	};
	let json = json
		.into_iter()
		.map(esexpr_json::JsonEncodedESExpr::into_esexpr)
		.collect::<Vec<_>>();

	assert_eq!(esx, json);
}

#[test]
fn parse_tests() {
	for path in fs::read_dir(concat!(env!("CARGO_MANIFEST_DIR"), "/../../tests")).unwrap() {
		let path = path.unwrap().path();
		if path.extension().unwrap() != "esx" {
			continue;
		}

		parse_test(&path);
	}
}


#[test]
fn parse_nan() {
	assert!(matches!(esexpr_text::parse(" #float32:nan ").unwrap(), ESExpr::Float32(f) if f.is_nan()));
	assert!(matches!(esexpr_text::parse(" #float64:nan ").unwrap(), ESExpr::Float64(f) if f.is_nan()));
}