Skip to main content

ranges_ext/
test_helper.rs

1use crate::RangeOp;
2use core::ops::Range;
3
4/// 测试用的 Range 类型
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct TestRange {
7    pub start: u64,
8    pub end: u64,
9    pub kind: RangeKind,
10    pub overwritable: bool,
11}
12
13impl Default for TestRange {
14    fn default() -> Self {
15        Self {
16            start: 0,
17            end: 0,
18            kind: RangeKind::default(),
19            overwritable: true,
20        }
21    }
22}
23
24#[derive(Debug, Clone, PartialEq, Eq, Default)]
25pub enum RangeKind {
26    #[default]
27    TypeA,
28    TypeB,
29    TypeC,
30}
31
32impl TestRange {
33    pub fn new(start: u64, end: u64, kind: RangeKind) -> Self {
34        Self {
35            start,
36            end,
37            kind,
38            overwritable: true,
39        }
40    }
41
42    pub fn new_with_overwritable(
43        start: u64,
44        end: u64,
45        kind: RangeKind,
46        overwritable: bool,
47    ) -> Self {
48        Self {
49            start,
50            end,
51            kind,
52            overwritable,
53        }
54    }
55}
56
57impl RangeOp for TestRange {
58    type Kind = RangeKind;
59    type Type = u64;
60
61    fn range(&self) -> Range<Self::Type> {
62        self.start..self.end
63    }
64
65    fn kind(&self) -> Self::Kind {
66        self.kind.clone()
67    }
68
69    fn overwritable(&self, _other: &Self) -> bool {
70        self.overwritable
71    }
72
73    fn clone_with_range(&self, range: Range<Self::Type>) -> Self {
74        Self {
75            start: range.start,
76            end: range.end,
77            kind: self.kind.clone(),
78            overwritable: self.overwritable,
79        }
80    }
81}