Lines
100 %
Functions
85.71 %
Branches
use crate::ast::Expr;
use super::Reader;
fn reader_error(input: &str) -> String {
Reader::parse(input)
.err()
.map(|e| e.to_string())
.unwrap_or_else(|| panic!("{input:?} must be a reader error"))
}
#[test]
fn scheme_true_is_a_reader_error() {
for input in ["#t", "#T", "(if #t 1 2)"] {
let message = reader_error(input);
assert!(
message.contains("#t is not nomiscript syntax; use t"),
"{input:?}: {message}"
);
fn scheme_false_is_a_reader_error() {
for input in ["#f", "#F", "'#f"] {
message.contains("#f is not nomiscript syntax; use nil"),
fn empty_parens_read_as_nil() {
assert_eq!(Reader::parse("()").unwrap().exprs, vec![Expr::Nil]);
assert_eq!(Reader::parse("( )").unwrap().exprs, vec![Expr::Nil]);
assert_eq!(Reader::parse("'()").unwrap().exprs, vec![Expr::Nil]);
assert_eq!(Reader::parse("'t").unwrap().exprs, vec![Expr::T]);
fn a_symbol_that_starts_with_nil_is_one_symbol() {
assert_eq!(
Reader::parse("nilly nil-x").unwrap().exprs,
vec![Expr::Symbol("NILLY".into()), Expr::Symbol("NIL-X".into())]