From 31081ba5a920afe4abec030f89f99bad62041503 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 25 Aug 2018 09:21:34 -0700 Subject: [PATCH] [types] Move tests to tests/ directory; implement a bunch of Display tests --- types/src/object.rs | 2 +- types/src/pair.rs | 11 +++----- types/src/sym.rs | 7 ----- types/tests/display.rs | 61 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 types/tests/display.rs diff --git a/types/src/object.rs b/types/src/object.rs index 3356605..d25df2e 100644 --- a/types/src/object.rs +++ b/types/src/object.rs @@ -54,7 +54,7 @@ impl Obj { impl fmt::Display for Obj { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { - Obj::Null => write!(f, "null"), + Obj::Null => write!(f, "()"), Obj::Ptr(obj) => write!(f, "{}", obj) } } diff --git a/types/src/pair.rs b/types/src/pair.rs index ce2c55f..ecb4c46 100644 --- a/types/src/pair.rs +++ b/types/src/pair.rs @@ -14,6 +14,10 @@ pub struct Pair { } impl Pair { + pub fn new(car: Obj, cdr: Obj) -> Pair { + Pair { car, cdr } + } + pub fn empty() -> Pair { Pair { car: Obj::Null, cdr: Obj::Null } } @@ -52,11 +56,4 @@ impl fmt::Display for Pair { #[cfg(test)] mod tests { use super::Pair; - - #[test] - fn display_empty_pair() { - let empty = Pair::empty(); - let disp = format!("{}", empty); - assert_eq!(disp, "(())"); - } } diff --git a/types/src/sym.rs b/types/src/sym.rs index 96be432..a502d5c 100644 --- a/types/src/sym.rs +++ b/types/src/sym.rs @@ -38,13 +38,6 @@ impl fmt::Display for Sym { mod tests { use super::Sym; - #[test] - fn syms_display_as_strings() { - let sym = Sym::with_str("abc"); - let disp = format!("{}", sym); - assert_eq!(disp, "abc"); - } - #[test] fn syms_with_the_same_name_are_equal() { let a = Sym::with_str("abc"); diff --git a/types/tests/display.rs b/types/tests/display.rs new file mode 100644 index 0000000..0b29054 --- /dev/null +++ b/types/tests/display.rs @@ -0,0 +1,61 @@ +/* types/tests/display.rs + * Eryn Wells + */ + +//! Tests of how various types implement Display. + +extern crate sibiltypes; + +use sibiltypes::{Obj, Pair, Sym}; + + +#[test] +fn empty_pairs_display_correctly() { + let empty = Pair::empty(); + let disp = format!("{}", empty); + assert_eq!(disp, "(())"); +} + +#[test] +fn pair_with_only_car_is_single_element_list() { + let sym = Obj::new(Sym::with_str("ab")); + let pair = Pair::with_car(sym); + let disp = format!("{}", pair); + assert_eq!(disp, "(ab)"); +} + +#[test] +fn pair_with_car_and_cdr_is_dotted_pair() { + let ab = Obj::new(Sym::with_str("ab")); + let cd = Obj::new(Sym::with_str("cd")); + let pair = Pair::new(ab, cd); + let disp = format!("{}", pair); + assert_eq!(disp, "(ab . cd)"); +} + +#[test] +fn two_pair_list_displays_as_list() { + let ab = Obj::new(Sym::with_str("ab")); + let cd = Obj::new(Sym::with_str("cd")); + let pair = Pair::new(ab, Obj::new(Pair::with_car(cd))); + let disp = format!("{}", pair); + assert_eq!(disp, "(ab cd)"); +} + +#[test] +fn three_element_list_with_full_second_pair() { + let ab = Obj::new(Sym::with_str("ab")); + let cd = Obj::new(Sym::with_str("cd")); + let ef = Obj::new(Sym::with_str("ef")); + let pair = Pair::new(ab, Obj::new(Pair::new(cd, ef))); + let disp = format!("{}", pair); + assert_eq!(disp, "(ab cd . ef)"); +} + +#[test] +fn syms_display_as_strings() { + let sym = Sym::with_str("abc"); + let disp = format!("{}", sym); + assert_eq!(disp, "abc"); +} +