mirror of
https://github.com/typst/typst
synced 2025-05-14 17:15:28 +08:00
Iterator over coverage
This commit is contained in:
parent
29b31c4a5a
commit
2589692b00
@ -418,6 +418,18 @@ impl Coverage {
|
|||||||
|
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Iterate over all covered codepoints.
|
||||||
|
pub fn iter(&self) -> impl Iterator<Item = u32> + '_ {
|
||||||
|
let mut inside = false;
|
||||||
|
let mut cursor = 0;
|
||||||
|
self.0.iter().flat_map(move |run| {
|
||||||
|
let range = if inside { cursor..cursor + run } else { 0..0 };
|
||||||
|
inside = !inside;
|
||||||
|
cursor += run;
|
||||||
|
range
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@ -466,4 +478,11 @@ mod tests {
|
|||||||
&[2, 3, 4, 3, 3, 1, 2, 2],
|
&[2, 3, 4, 3, 3, 1, 2, 2],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_coverage_iter() {
|
||||||
|
let codepoints = vec![2, 3, 7, 8, 9, 14, 15, 19, 21];
|
||||||
|
let coverage = Coverage::from_vec(codepoints.clone());
|
||||||
|
assert_eq!(coverage.iter().collect::<Vec<_>>(), codepoints);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user