diff options
| -rw-r--r-- | progs/bench/fib.sy | 6 | ||||
| -rw-r--r-- | progs/bench/fib_iter.sy | 3 | ||||
| -rw-r--r-- | progs/bench/sum.sy | 3 | ||||
| -rw-r--r-- | src/lib.rs | 8 | ||||
| -rw-r--r-- | sylt_macro/src/lib.rs | 44 |
5 files changed, 48 insertions, 16 deletions
diff --git a/progs/bench/fib.sy b/progs/bench/fib.sy index 76c3af7..ad10e20 100644 --- a/progs/bench/fib.sy +++ b/progs/bench/fib.sy @@ -8,7 +8,7 @@ fib :: fn a:int -> int { } // 23 is around where things start getting slow. start :: fn { - //TODO pass arguments to skip debug printing. this test is very slow otherwise - <!> - // fib(23) <=> 28657 + fib(23) <=> 28657 } + +// flags: no_print diff --git a/progs/bench/fib_iter.sy b/progs/bench/fib_iter.sy index f82d6f8..7ed1021 100644 --- a/progs/bench/fib_iter.sy +++ b/progs/bench/fib_iter.sy @@ -1,7 +1,6 @@ // A Fibonacci implementation that is a little // less awful. But we run it 1000 times instead. start :: fn { - <!> j := 0 for , j < 1000, j = j + 1 { a := 0 @@ -15,3 +14,5 @@ start :: fn { a <=> 12586269025 } } + +// flags: no_print diff --git a/progs/bench/sum.sy b/progs/bench/sum.sy index 39252cd..76fe392 100644 --- a/progs/bench/sum.sy +++ b/progs/bench/sum.sy @@ -1,9 +1,10 @@ // Adds the numbers 0 to 100000 start :: fn { - <!> sum := 0 for i := 0, i <= 100000, i += 1 { sum += i } sum <=> 5000050000 } + +// flags: no_print @@ -873,14 +873,14 @@ mod tests { #[macro_export] macro_rules! test_file { - ($fn:ident, $path:literal) => { + ($fn:ident, $path:literal, $print:expr) => { #[test] fn $fn() { let file = std::path::Path::new($path); - crate::run_file(&file, true, Vec::new()).unwrap(); + crate::run_file(&file, $print, Vec::new()).unwrap(); } }; - ($fn:ident, $path:literal, $errs:tt) => { + ($fn:ident, $path:literal, $print:expr, $errs:tt) => { #[test] fn $fn() { use crate::error::ErrorKind; @@ -888,7 +888,7 @@ mod tests { use crate::Type; let file = std::path::Path::new($path); - let res = crate::run_file(&file, true, Vec::new()); + let res = crate::run_file(&file, $print, Vec::new()); $crate::assert_errs!(res, $errs); } }; diff --git a/sylt_macro/src/lib.rs b/sylt_macro/src/lib.rs index 96f7112..95b79c6 100644 --- a/sylt_macro/src/lib.rs +++ b/sylt_macro/src/lib.rs @@ -160,13 +160,41 @@ pub fn link(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream { proc_macro::TokenStream::from(tokens) } -fn parse_test(contents: String) -> Option<String> { +struct TestSettings { + errors: Option<String>, + print: bool, +} + +impl Default for TestSettings { + fn default() -> Self { + Self { + errors: None, + print: true, + } + } +} + +fn parse_test_settings(contents: String) -> TestSettings { + let mut settings = TestSettings::default(); + for line in contents.split("\n") { if line.starts_with("// errors: ") { - return Some(line.strip_prefix("// errors: ").unwrap().to_string()); + settings.errors = Some(line.strip_prefix("// errors: ").unwrap().to_string()); + } else if line.starts_with("// flags: ") { + for flag in line.split(" ").skip(2) { + match flag { + "no_print" => { + settings.print = false; + } + _ => { + panic!("Unknown test flag '{}'", flag); + } + } + } } } - None + + settings } fn find_test_paths(directory: &Path) -> proc_macro2::TokenStream { @@ -188,14 +216,16 @@ fn find_test_paths(directory: &Path) -> proc_macro2::TokenStream { let path_string = path.to_str().unwrap(); let test_name = format_ident!("file_{}", file_name.replace(".sy", "")); - let tokens = if let Some(wanted_err) = parse_test(std::fs::read_to_string(path.clone()).unwrap()) { - let wanted_err: proc_macro2::TokenStream = wanted_err.parse().unwrap(); + let settings = parse_test_settings(std::fs::read_to_string(path.clone()).unwrap()); + let print = settings.print; + let tokens = if let Some(wanted_errs) = settings.errors { + let wanted_errs: proc_macro2::TokenStream = wanted_errs.parse().unwrap(); quote! { - test_file!(#test_name, #path_string, #wanted_err); + test_file!(#test_name, #path_string, #print, #wanted_errs); } } else { quote! { - test_file!(#test_name, #path_string); + test_file!(#test_name, #path_string, #print); } }; |
