summaryrefslogtreecommitdiff
path: root/tests/src
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-02-04 19:22:23 +0100
committerLaurenz <laurmaedje@gmail.com>2020-02-04 19:22:23 +0100
commite63ce52ae0d929506a1fa238477f039d14d53813 (patch)
tree74dd8ce425dc368021c6495273acbdf2e736be68 /tests/src
parent5c11aa72239ecbdd9577f027bdc7e9468d68414e (diff)
Merge `Parsed` and `Layouted` types into `Pass` with `Feedback` 🌝🎢🌚
Diffstat (limited to 'tests/src')
-rw-r--r--tests/src/typeset.rs66
1 files changed, 31 insertions, 35 deletions
diff --git a/tests/src/typeset.rs b/tests/src/typeset.rs
index 61889e95..efeb5aee 100644
--- a/tests/src/typeset.rs
+++ b/tests/src/typeset.rs
@@ -5,6 +5,7 @@ use std::fs::{File, create_dir_all, read_dir, read_to_string};
use std::io::{BufWriter, Write};
use std::panic;
use std::process::Command;
+use std::time::{Instant, Duration};
use futures_executor::block_on;
@@ -55,8 +56,6 @@ fn main() -> DynResult<()> {
}).ok();
}
- println!();
-
Ok(())
}
@@ -121,43 +120,40 @@ fn test(name: &str, src: &str) -> DynResult<()> {
/// Compile the source code with the typesetter.
fn compile(typesetter: &Typesetter, src: &str) -> MultiLayout {
- #![allow(unused_variables)]
- use std::time::Instant;
-
- // Warmup.
- #[cfg(not(debug_assertions))]
- let warmup = {
- let warmup_start = Instant::now();
- block_on(typesetter.typeset(&src));
- Instant::now() - warmup_start
- };
-
- let start = Instant::now();
- let parsed = typesetter.parse(&src);
- let parse = Instant::now() - start;
-
- if !parsed.errors.is_empty() {
- println!("parse errors: {:#?}", parsed.errors);
- }
-
- let start_layout = Instant::now();
- let layouted = block_on(typesetter.layout(&parsed.output));
- let layout = Instant::now() - start_layout;
- let total = Instant::now() - start;
-
- if !layouted.errors.is_empty() {
- println!("layout errors: {:#?}", layouted.errors);
- }
+ if cfg!(debug_assertions) {
+ let typeset = block_on(typesetter.typeset(src));
+ let errors = typeset.feedback.errors;
+
+ if !errors.is_empty() {
+ for error in errors {
+ println!(" {:?} {:?}: {}",
+ error.v.severity,
+ error.span,
+ error.v.message
+ );
+ }
+ }
- #[cfg(not(debug_assertions))] {
- println!(" - cold start: {:?}", warmup);
- println!(" - warmed up: {:?}", total);
+ typeset.output
+ } else {
+ fn measure<T>(f: impl FnOnce() -> T) -> (T, Duration) {
+ let start = Instant::now();
+ let output = f();
+ let duration = Instant::now() - start;
+ (output, duration)
+ };
+
+ let (_, cold) = measure(|| block_on(typesetter.typeset(src)));
+ let (model, parse) = measure(|| typesetter.parse(src).output);
+ let (layouts, layout) = measure(|| block_on(typesetter.layout(&model)).output);
+
+ println!(" - cold start: {:?}", cold);
+ println!(" - warmed up: {:?}", parse + layout);
println!(" - parsing: {:?}", parse);
println!(" - layouting: {:?}", layout);
- println!();
- }
- layouted.output
+ layouts
+ }
}
/// Command line options.