diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-07-26 00:08:08 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-07-26 00:08:08 +0200 |
| commit | 56cbf96fe2b3b82d34b2e69a49bcb7b0c0267f6a (patch) | |
| tree | d3507c4cb6bb9cc8f269293758036e7172a5ef21 /tests | |
| parent | 88d3be258114d631f6e1381e756ff9bb8aba6b0e (diff) | |
Move incremental test into separate function
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/typeset.rs | 80 |
1 files changed, 45 insertions, 35 deletions
diff --git a/tests/typeset.rs b/tests/typeset.rs index 6b2258bf..59eb008f 100644 --- a/tests/typeset.rs +++ b/tests/typeset.rs @@ -16,7 +16,7 @@ use typst::eval::{eval, Scope, Value}; use typst::exec::{exec, State}; use typst::geom::{self, Length, PathElement, Point, Sides, Size}; use typst::image::ImageId; -use typst::layout::{layout, Element, Frame, Geometry, Paint, Text}; +use typst::layout::{layout, Element, Frame, Geometry, LayoutTree, Paint, Text}; use typst::loading::{FileId, FsLoader}; use typst::parse::{parse, LineMap, Scanner}; use typst::syntax::{Location, Pos}; @@ -256,6 +256,7 @@ fn test_part( diags.extend(tree.diags); let mut ok = true; + for panic in panics.borrow().iter() { let line = map.location(panic.pos).unwrap().line; println!(" Assertion failed in line {} ❌", lines + line); @@ -290,50 +291,59 @@ fn test_part( } #[cfg(feature = "layout-cache")] - { - let reference = ctx.layouts.clone(); - for level in 0 .. reference.levels() { - ctx.layouts = reference.clone(); - ctx.layouts.retain(|x| x == level); - if ctx.layouts.is_empty() { - continue; - } + (ok &= test_incremental(ctx, i, &tree.output, &frames)); - ctx.layouts.turnaround(); + if !compare_ref { + frames.clear(); + } - let cached = layout(ctx, &tree.output); - let misses = ctx - .layouts - .entries() - .filter(|e| e.level() == level && !e.hit() && e.age() == 2) - .count(); + (ok, compare_ref, frames) +} - if misses > 0 { - ok = false; - println!( - " Recompilation had {} cache misses on level {} (Subtest {}) ❌", - misses, level, i - ); - } +#[cfg(feature = "layout-cache")] +fn test_incremental( + ctx: &mut Context, + i: usize, + tree: &LayoutTree, + frames: &[Rc<Frame>], +) -> bool { + let mut ok = true; - if cached != frames { - ok = false; - println!( - " Recompilation of subtest {} differs from clean pass ❌", - i - ); - } + let reference = ctx.layouts.clone(); + for level in 0 .. reference.levels() { + ctx.layouts = reference.clone(); + ctx.layouts.retain(|x| x == level); + if ctx.layouts.is_empty() { + continue; } - ctx.layouts = reference; ctx.layouts.turnaround(); - } - if !compare_ref { - frames.clear(); + let cached = layout(ctx, tree); + let misses = ctx + .layouts + .entries() + .filter(|e| e.level() == level && !e.hit() && e.age() == 2) + .count(); + + if misses > 0 { + println!( + " Subtest {} relayout had {} cache misses on level {} ❌", + i, misses, level + ); + ok = false; + } + + if cached != frames { + println!(" Subtest {} relayout differs from clean pass ❌", i); + ok = false; + } } - (ok, compare_ref, frames) + ctx.layouts = reference; + ctx.layouts.turnaround(); + + ok } fn parse_metadata(src: &str, map: &LineMap) -> (Option<bool>, DiagSet) { |
