sexp: tests to submodule

pull/21/head
Ondřej Hruška 4 years ago
parent a2dada519d
commit 3cb445a31c
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 128
      lib/spanned_sexp/src/lib.rs

@ -32,13 +32,6 @@ pub enum Sexp {
List(Vec<Sexp>), List(Vec<Sexp>),
} }
#[test]
fn sexp_size() {
// I just want to see when this changes, in the diff.
use std::mem;
assert_eq!(mem::size_of::<Sexp>(), mem::size_of::<isize>()*5);
}
/// The representation of an s-expression parse error. /// The representation of an s-expression parse error.
pub struct Error { pub struct Error {
/// The error message. /// The error message.
@ -79,11 +72,6 @@ impl fmt::Debug for Error {
} }
} }
#[test]
fn show_an_error() {
assert_eq!(format!("{:?}", parse("(aaaa").unwrap_err()), "1:4: unexpected eof");
}
fn get_line_and_column(s: &str, pos: usize) -> (usize, usize) { fn get_line_and_column(s: &str, pos: usize) -> (usize, usize) {
let mut line: usize = 1; let mut line: usize = 1;
let mut col: isize = -1; let mut col: isize = -1;
@ -98,20 +86,6 @@ fn get_line_and_column(s: &str, pos: usize) -> (usize, usize) {
(line, cmp::max(col, 0) as usize) (line, cmp::max(col, 0) as usize)
} }
#[test]
fn line_and_col_test() {
let s = "0123456789\n0123456789\n\n6";
assert_eq!(get_line_and_column(s, 4), (1, 4));
assert_eq!(get_line_and_column(s, 10), (2, 0));
assert_eq!(get_line_and_column(s, 11), (2, 0));
assert_eq!(get_line_and_column(s, 15), (2, 4));
assert_eq!(get_line_and_column(s, 21), (3, 0));
assert_eq!(get_line_and_column(s, 22), (4, 0));
assert_eq!(get_line_and_column(s, 23), (4, 0));
assert_eq!(get_line_and_column(s, 500), (4, 0));
}
#[cold] #[cold]
fn err_impl(message: &'static str, s: &str, pos: &usize) -> Err { fn err_impl(message: &'static str, s: &str, pos: &usize) -> Err {
@ -375,43 +349,75 @@ impl fmt::Debug for Sexp {
} }
} }
#[test] #[cfg(test)]
fn test_hello_world() { mod test {
assert_eq!( use super::*;
parse("(hello -42\n\t -4.0 \"world\") ; comment").unwrap(),
list(&[ atom_s("hello"), atom_i(-42), atom_f(-4.0), atom_s("world") ]));
}
#[test] #[test]
fn test_escaping() { fn test_hello_world() {
assert_eq!( assert_eq!(
parse("(\"\\\"\\q\" \"1234\" 1234)").unwrap(), parse("(hello -42\n\t -4.0 \"world\") ; comment").unwrap(),
list(&[ atom_s("\"\\q"), atom_s("1234"), atom_i(1234) ])); list(&[ atom_s("hello"), atom_i(-42), atom_f(-4.0), atom_s("world") ]));
} }
#[test] #[test]
fn test_pp() { fn test_escaping() {
let s = "(hello world (what is (up) (4 6.4 you \"123\\\\ \\\"\")))"; assert_eq!(
let sexp = parse(s).unwrap(); parse("(\"\\\"\\q\" \"1234\" 1234)").unwrap(),
assert_eq!(s, sexp.to_string()); list(&[ atom_s("\"\\q"), atom_s("1234"), atom_i(1234) ]));
assert_eq!(s, format!("{:?}", sexp)); }
}
#[test] #[test]
fn test_tight_parens() { fn test_pp() {
let s = "(hello(world))"; let s = "(hello world (what is (up) (4 6.4 you \"123\\\\ \\\"\")))";
let sexp = parse(s).unwrap(); let sexp = parse(s).unwrap();
assert_eq!(sexp, Sexp::List(vec![Sexp::Atom(Atom::S("hello".into())), assert_eq!(s, sexp.to_string());
Sexp::List(vec![Sexp::Atom(Atom::S("world".into()))])])); assert_eq!(s, format!("{:?}", sexp));
let s = "(this (has)tight(parens))"; }
let s2 = "( this ( has ) tight ( parens ) )";
assert_eq!(parse(s).unwrap(), parse(s2).unwrap()); #[test]
} fn test_tight_parens() {
let s = "(hello(world))";
let sexp = parse(s).unwrap();
assert_eq!(sexp, Sexp::List(vec![Sexp::Atom(Atom::S("hello".into())),
Sexp::List(vec![Sexp::Atom(Atom::S("world".into()))])]));
let s = "(this (has)tight(parens))";
let s2 = "( this ( has ) tight ( parens ) )";
assert_eq!(parse(s).unwrap(), parse(s2).unwrap());
}
#[test]
fn test_space_in_atom() {
let sexp = list(&[ atom_s("hello world")]);
let sexp_as_string = sexp.to_string();
assert_eq!("(\"hello world\")", sexp_as_string);
assert_eq!(sexp, parse(&sexp_as_string).unwrap());
}
#[test]
fn show_an_error() {
assert_eq!(format!("{:?}", parse("(aaaa").unwrap_err()), "1:4: unexpected eof");
}
#[test]
fn line_and_col_test() {
let s = "0123456789\n0123456789\n\n6";
assert_eq!(get_line_and_column(s, 4), (1, 4));
assert_eq!(get_line_and_column(s, 10), (2, 0));
assert_eq!(get_line_and_column(s, 11), (2, 0));
assert_eq!(get_line_and_column(s, 15), (2, 4));
#[test] assert_eq!(get_line_and_column(s, 21), (3, 0));
fn test_space_in_atom() { assert_eq!(get_line_and_column(s, 22), (4, 0));
let sexp = list(&[ atom_s("hello world")]); assert_eq!(get_line_and_column(s, 23), (4, 0));
let sexp_as_string = sexp.to_string(); assert_eq!(get_line_and_column(s, 500), (4, 0));
assert_eq!("(\"hello world\")", sexp_as_string); }
assert_eq!(sexp, parse(&sexp_as_string).unwrap());
#[test]
fn sexp_size() {
// I just want to see when this changes, in the diff.
use std::mem;
assert_eq!(mem::size_of::<Sexp>(), mem::size_of::<isize>()*5);
}
} }

Loading…
Cancel
Save