diff options
Diffstat (limited to 'lambda-calcul/rust/src/ast.rs')
| -rw-r--r-- | lambda-calcul/rust/src/ast.rs | 22 |
1 files changed, 20 insertions, 2 deletions
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::<Vec<String>>().join(" "))); - } + } + + #[test] + fn can_serialize_and_deserialize(value in any::<Value>()) { + 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); } } |
