Skip to content

Commit 761cab3

Browse files
committed
vec dequeのpushとかを追加
1 parent 0951810 commit 761cab3

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

src/rule/non_empty/non_empty_vec_deque.rs

+73
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,34 @@ where
2323
.ok()
2424
.expect("This error is always unreachable")
2525
}
26+
27+
pub fn get(&self, index: usize) -> Option<&T> {
28+
self.value().get(index)
29+
}
30+
31+
pub fn len(&self) -> usize {
32+
self.value().len()
33+
}
34+
35+
pub fn is_empty(&self) -> bool {
36+
false
37+
}
38+
39+
pub fn push_front(self, value: T) -> Self {
40+
let mut result = self.into_value();
41+
result.push_front(value);
42+
Refined::new(result)
43+
.ok()
44+
.expect("This error is always unreachable")
45+
}
46+
47+
pub fn push_back(self, value: T) -> Self {
48+
let mut result = self.into_value();
49+
result.push_back(value);
50+
Refined::new(result)
51+
.ok()
52+
.expect("This error is always unreachable")
53+
}
2654
}
2755

2856
impl<T> Add for NonEmptyVecDeque<T> {
@@ -36,3 +64,48 @@ impl<T> Add for NonEmptyVecDeque<T> {
3664
.expect("This error is always unreachable")
3765
}
3866
}
67+
68+
#[cfg(test)]
69+
mod test {
70+
use crate::rule::non_empty::non_empty_vec_deque::NonEmptyVecDeque;
71+
use std::collections::VecDeque;
72+
73+
#[test]
74+
fn test_vec_deque_push() -> anyhow::Result<()> {
75+
let mut deque = VecDeque::new();
76+
deque.push_front(1);
77+
let deque = NonEmptyVecDeque::new(deque)?.push_front(2).push_back(3);
78+
assert_eq!(
79+
deque.into_value().into_iter().collect::<Vec<_>>(),
80+
vec![2, 1, 3]
81+
);
82+
Ok(())
83+
}
84+
85+
#[test]
86+
fn test_get() -> anyhow::Result<()> {
87+
let mut deque = VecDeque::new();
88+
deque.push_front(1);
89+
let deque = NonEmptyVecDeque::new(deque)?;
90+
assert_eq!(deque.get(0), Some(&1));
91+
Ok(())
92+
}
93+
94+
#[test]
95+
fn test_len() -> anyhow::Result<()> {
96+
let mut deque = VecDeque::new();
97+
deque.push_front(1);
98+
let deque = NonEmptyVecDeque::new(deque)?;
99+
assert_eq!(deque.len(), 1);
100+
Ok(())
101+
}
102+
103+
#[test]
104+
fn test_is_empty() -> anyhow::Result<()> {
105+
let mut deque = VecDeque::new();
106+
deque.push_front(1);
107+
let deque = NonEmptyVecDeque::new(deque)?;
108+
assert!(!deque.is_empty());
109+
Ok(())
110+
}
111+
}

0 commit comments

Comments
 (0)