From 15843b3ded81699e33f956d78f58bc73dcd87eee Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Thu, 9 Oct 2025 11:29:14 +0200 Subject: chore: check JSON representation of Value --- lambda-calcul/rust/src/ast.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'lambda-calcul/rust/src') diff --git a/lambda-calcul/rust/src/ast.rs b/lambda-calcul/rust/src/ast.rs index d0f1d6f..0aaeab4 100644 --- a/lambda-calcul/rust/src/ast.rs +++ b/lambda-calcul/rust/src/ast.rs @@ -102,7 +102,6 @@ mod ast_tests { use proptest::prelude::*; proptest! { - #[test] fn display_multiple_applications_as_a_sequence(atoms in vec("[a-z]".prop_map(Sym), 2..10)) { let init = atoms.first().unwrap().clone(); @@ -112,6 +111,25 @@ mod ast_tests { assert_eq!(value.to_string(), format!("({})", atoms.iter().map(|v| v.to_string()).collect::>().join(" "))); - } + } + + #[test] + fn can_serialize_and_deserialize(value in any::()) { + let serialized = serde_json::to_string(&value).unwrap(); + let deserialized: Value = serde_json::from_str(&serialized).unwrap(); + assert_eq!(value, deserialized); + } + } + + #[test] + fn can_represent_let_expression_in_json() { + let let_expr = Let( + "x".to_string(), + Box::new(Num(42)), + Box::new(Sym("x".to_string())), + ); + let serialized = serde_json::to_string(&let_expr).unwrap(); + let expected = r#"{"Let":["x",{"Num":42},{"Sym":"x"}]}"#; + assert_eq!(serialized, expected); } } -- cgit v1.2.3