23
23
. ok ( )
24
24
. expect ( "This error is always unreachable" )
25
25
}
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
+ }
26
54
}
27
55
28
56
impl < T > Add for NonEmptyVecDeque < T > {
@@ -36,3 +64,48 @@ impl<T> Add for NonEmptyVecDeque<T> {
36
64
. expect ( "This error is always unreachable" )
37
65
}
38
66
}
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