added grammar files
This commit is contained in:
		| @@ -0,0 +1,16 @@ | ||||
|  | ||||
|  | ||||
| #[test] | ||||
| fn identifiers() { | ||||
|     use crate::expressions::IdentifierParser as IdentParser; | ||||
|     assert!(IdentParser::new().parse("a").is_ok()); | ||||
|     assert!(IdentParser::new().parse("_").is_ok()); | ||||
|     assert!(IdentParser::new().parse("a_a_a_").is_ok()); | ||||
|     assert!(IdentParser::new().parse("_0").is_ok()); | ||||
|     assert!(IdentParser::new().parse("_a").is_ok()); | ||||
|     assert!(IdentParser::new().parse("__").is_ok()); | ||||
|  | ||||
|     assert!(IdentParser::new().parse("0").is_err()); | ||||
|     assert!(IdentParser::new().parse("0123456").is_err()); | ||||
|     assert!(IdentParser::new().parse("0aaaa").is_err()); | ||||
| } | ||||
| @@ -0,0 +1,49 @@ | ||||
| use crate::literals::AtomParser as Parser; | ||||
| use std::any::type_name_of_val; | ||||
| use std::convert::identity; | ||||
|  | ||||
| #[test] | ||||
| fn int_literals() { | ||||
|     let parser = Parser::new(); | ||||
|     let valid_ints = vec!["1234567890", "(1234567890)", "((((1))))"]; | ||||
|     let invalid_ints = vec!["01", "(1", "6543)", "((987652345)"]; | ||||
|  | ||||
|     assert!(valid_ints.into_iter().all(|s| parser.parse(s).is_ok())); | ||||
|     assert!(invalid_ints.into_iter().all(|s| parser.parse(s).is_err())); | ||||
| } | ||||
|  | ||||
| #[test] | ||||
| fn test_float_dots() { | ||||
|     let valid_floats = vec![ | ||||
|         "0.0", | ||||
|         "-0.0", | ||||
|         "3.141592653589793", | ||||
|         "-1.123456765432123456789", | ||||
|     ]; | ||||
|     assert!(Parser::new().parse("1.1").is_ok()); | ||||
|     assert!(Parser::new().parse("-1.1").is_ok()); | ||||
|     assert!(Parser::new().parse(".1").is_ok()); | ||||
|     assert!(Parser::new().parse("-.1").is_ok()); | ||||
| } | ||||
|  | ||||
| #[test] | ||||
| fn test_float_exps() { | ||||
|     let parser = crate::literals::FloatParser::new(); | ||||
|  | ||||
|     let valid_float_exps: Vec<&str> = vec![ | ||||
|         "1e1", "-1e1", "1e-1", "-1e-1", "1.1e1", "1.1e-1", "-1.1e1", "-1.1e-1", ".1e1", "-.1e1", | ||||
|         "-.1e-1", "1E1", "-1E1", "1E-1", "-1E-1", "1.1E1", "1.1E-1", "-1.1E1", "-1.1E-1", ".1E1", | ||||
|         "-.1E1", "-.1E-1", | ||||
|     ]; | ||||
|  | ||||
|     let invalid_float_exps: Vec<&str> = vec!["AAAAAAAAAAAAAAA", "1.e1", "1e1.1", "1.1e1.1", "-1e1.1", "1e-1.1"]; | ||||
|  | ||||
|     assert!( | ||||
|         valid_float_exps | ||||
|             .into_iter() | ||||
|             .all(|s| parser.parse(s).is_ok()) | ||||
|     ); | ||||
|     assert!(invalid_float_exps | ||||
|         .into_iter() | ||||
|         .all(|s| parser.parse(s).is_err())); | ||||
| } | ||||
|   | ||||
| @@ -1,57 +1,2 @@ | ||||
| #[cfg(test)] | ||||
| mod test { | ||||
|     use crate::grammar; | ||||
|     use grammar::AtomParser as Parser; | ||||
|     #[test] | ||||
|     fn int_literals() { | ||||
|         assert!(Parser::new().parse("22").is_ok()); | ||||
|         assert!(Parser::new().parse("(22)").is_ok()); | ||||
|         assert!(Parser::new().parse("((22))").is_ok()); | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
|     fn test_float_dots() { | ||||
|         assert!(Parser::new().parse("1.1").is_ok()); | ||||
|         assert!(Parser::new().parse("-1.1").is_ok()); | ||||
|         assert!(Parser::new().parse(".1").is_ok()); | ||||
|         assert!(Parser::new().parse("-.1").is_ok()); | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
|     fn test_float_exps() { | ||||
|         assert!(Parser::new().parse("(1e1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1e1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1e-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1e-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1E1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1E1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1E-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1E-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.1e1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.1e1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.1e-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.1e-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.1E1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.1E1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.1E-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.1E-1)").is_ok()); | ||||
|  | ||||
|         assert!(Parser::new().parse("(1.0e1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-0.1e1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.0e-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.0e-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.E1)").is_err()); | ||||
|         assert!(Parser::new().parse("(-1E1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1E-10)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1E-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.1e1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.1e1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.1e-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.1e-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.1E1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.1E1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(1.1E-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("(-1.1E-1)").is_ok()); | ||||
|         assert!(Parser::new().parse("FOOBAR").is_err()); | ||||
|     } | ||||
| } | ||||
| mod literals; | ||||
| mod expressions; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user