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 ( self , value : T ) -> Self {
40
+ let mut result = self . into_value ( ) ;
41
+ result. push ( value) ;
42
+ Refined :: new ( result)
43
+ . ok ( )
44
+ . expect ( "This error is always unreachable" )
45
+ }
26
46
}
27
47
28
48
impl < T > Add for NonEmptyVec < T > {
@@ -39,6 +59,7 @@ impl<T> Add for NonEmptyVec<T> {
39
59
40
60
#[ cfg( test) ]
41
61
mod test {
62
+ use crate :: rule:: non_empty:: non_empty_vec_deque:: NonEmptyVecDeque ;
42
63
use crate :: rule:: non_empty:: NonEmptyVecRule ;
43
64
use crate :: rule:: { NonEmptyVec , Rule } ;
44
65
@@ -72,4 +93,41 @@ mod test {
72
93
assert_eq ! ( ne_vec. into_value( ) , vec![ 6 , 12 , 18 ] ) ;
73
94
Ok ( ( ) )
74
95
}
96
+
97
+ #[ test]
98
+ fn test_collect_to_deque ( ) -> anyhow:: Result < ( ) > {
99
+ let ne_vec = NonEmptyVec :: new ( vec ! [ 1 , 2 , 3 ] ) ?;
100
+ let ne_vec: NonEmptyVecDeque < i32 > =
101
+ ne_vec. into_iter ( ) . map ( |n| n * 2 ) . map ( |n| n * 3 ) . collect ( ) ;
102
+ assert_eq ! ( ne_vec. into_value( ) , vec![ 6 , 12 , 18 ] ) ;
103
+ Ok ( ( ) )
104
+ }
105
+
106
+ #[ test]
107
+ fn test_push ( ) -> anyhow:: Result < ( ) > {
108
+ let vec = NonEmptyVec :: new ( vec ! [ 1 ] ) ?. push ( 2 ) . push ( 3 ) ;
109
+ assert_eq ! ( vec. into_value( ) , vec![ 1 , 2 , 3 ] ) ;
110
+ Ok ( ( ) )
111
+ }
112
+
113
+ #[ test]
114
+ fn test_get ( ) -> anyhow:: Result < ( ) > {
115
+ let vec = NonEmptyVec :: new ( vec ! [ 1 ] ) ?;
116
+ assert_eq ! ( vec. get( 0 ) , Some ( & 1 ) ) ;
117
+ Ok ( ( ) )
118
+ }
119
+
120
+ #[ test]
121
+ fn test_len ( ) -> anyhow:: Result < ( ) > {
122
+ let vec = NonEmptyVec :: new ( vec ! [ 1 ] ) ?;
123
+ assert_eq ! ( vec. len( ) , 1 ) ;
124
+ Ok ( ( ) )
125
+ }
126
+
127
+ #[ test]
128
+ fn test_is_empty ( ) -> anyhow:: Result < ( ) > {
129
+ let vec = NonEmptyVec :: new ( vec ! [ 1 ] ) ?;
130
+ assert ! ( !vec. is_empty( ) ) ;
131
+ Ok ( ( ) )
132
+ }
75
133
}
0 commit comments