Lines
100 %
Functions
Branches
use crate::ast::Expr;
use crate::runtime::Value;
use super::{format_expr, format_runtime_value};
fn sym(name: &str) -> Expr {
Expr::Symbol(name.into())
}
#[test]
fn nil_and_the_empty_list_print_as_nil() {
assert_eq!(format_expr(&Expr::Nil), "nil");
assert_eq!(format_expr(&Expr::List(vec![])), "nil");
assert_eq!(format_runtime_value(&Value::Nil), "nil");
fn a_cons_chain_ending_in_nil_prints_as_a_proper_list() {
assert_eq!(format_expr(&Expr::cons(sym("A"), Expr::Nil)), "(A)");
assert_eq!(
format_expr(&Expr::cons(sym("A"), Expr::cons(sym("B"), Expr::Nil))),
"(A B)"
);
fn a_cons_chain_ending_in_an_atom_keeps_its_dot() {
assert_eq!(format_expr(&Expr::cons(sym("A"), sym("B"))), "(A . B)");
format_expr(&Expr::cons(sym("A"), Expr::cons(sym("B"), sym("C")))),
"(A B . C)"