aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-03-05 19:47:00 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-03-05 19:47:00 +0100
commitb1fab16befb78232d7a913f58beef639c5891e26 (patch)
tree3a8596bca862ecee3d464aa933bd6411d4c442a8
parent0b15a38e324c3940318df462812c42f74a544267 (diff)
downloadsylt-b1fab16befb78232d7a913f58beef639c5891e26.tar.gz
set no_print in tests
-rw-r--r--progs/bench/fib.sy6
-rw-r--r--progs/bench/fib_iter.sy3
-rw-r--r--progs/bench/sum.sy3
-rw-r--r--src/lib.rs8
-rw-r--r--sylt_macro/src/lib.rs44
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
diff --git a/src/lib.rs b/src/lib.rs
index afde461..e94eaad 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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);
}
};