Skip to main content

source_tools/
arena.rs

1use crate::{Span, ToSpan};
2use allocator_api2::alloc::Allocator;
3use csskit_arena::{Box, Vec};
4
5impl<'a, T: ToSpan, A: Allocator> ToSpan for Box<'a, T, A> {
6	fn to_span(&self) -> Span {
7		(**self).to_span()
8	}
9}
10
11impl<'a, T: ToSpan, A: Allocator> ToSpan for Vec<'a, T, A> {
12	fn to_span(&self) -> Span {
13		self[..].to_span()
14	}
15}
16
17#[cfg(test)]
18mod tests {
19	use super::*;
20	use crate::SourceOffset;
21	use csskit_arena::Arena;
22
23	#[test]
24	fn empty_vec_does_not_widen_span() {
25		let arena = Arena::default();
26		let empty: Vec<Span> = Vec::new_in(&arena);
27		let span = Span::new(SourceOffset(5), SourceOffset(9));
28		assert_eq!(empty.to_span(), Span::DUMMY);
29		assert_eq!(span + empty.to_span(), span);
30	}
31
32	#[test]
33	fn vec_spans_its_items() {
34		let arena = Arena::default();
35		let mut items = Vec::new_in(&arena);
36		items.push(Span::new(SourceOffset(5), SourceOffset(9)));
37		items.push(Span::new(SourceOffset(12), SourceOffset(20)));
38		assert_eq!(items.to_span(), Span::new(SourceOffset(5), SourceOffset(20)));
39	}
40}