4
4
// You can read more about it at https://doc.rust-lang.org/std/convert/trait.TryFrom.html
5
5
use std:: convert:: { TryFrom , TryInto } ;
6
6
7
- #[ derive( Debug ) ]
7
+ #[ derive( Debug , PartialEq ) ]
8
8
struct Color {
9
9
red : u8 ,
10
10
green : u8 ,
@@ -25,22 +25,19 @@ struct Color {
25
25
// Tuple implementation
26
26
impl TryFrom < ( i16 , i16 , i16 ) > for Color {
27
27
type Error = String ;
28
- fn try_from ( tuple : ( i16 , i16 , i16 ) ) -> Result < Self , Self :: Error > {
29
- }
28
+ fn try_from ( tuple : ( i16 , i16 , i16 ) ) -> Result < Self , Self :: Error > { }
30
29
}
31
30
32
31
// Array implementation
33
32
impl TryFrom < [ i16 ; 3 ] > for Color {
34
33
type Error = String ;
35
- fn try_from ( arr : [ i16 ; 3 ] ) -> Result < Self , Self :: Error > {
36
- }
34
+ fn try_from ( arr : [ i16 ; 3 ] ) -> Result < Self , Self :: Error > { }
37
35
}
38
36
39
37
// Slice implementation
40
38
impl TryFrom < & [ i16 ] > for Color {
41
39
type Error = String ;
42
- fn try_from ( slice : & [ i16 ] ) -> Result < Self , Self :: Error > {
43
- }
40
+ fn try_from ( slice : & [ i16 ] ) -> Result < Self , Self :: Error > { }
44
41
}
45
42
46
43
fn main ( ) {
@@ -66,71 +63,93 @@ mod tests {
66
63
use super :: * ;
67
64
68
65
#[ test]
69
- #[ should_panic]
70
66
fn test_tuple_out_of_range_positive ( ) {
71
- let _ = Color :: try_from ( ( 256 , 1000 , 10000 ) ) . unwrap ( ) ;
67
+ assert ! ( Color :: try_from( ( 256 , 1000 , 10000 ) ) . is_err ( ) ) ;
72
68
}
73
69
#[ test]
74
- #[ should_panic]
75
70
fn test_tuple_out_of_range_negative ( ) {
76
- let _ = Color :: try_from ( ( -1 , -10 , -256 ) ) . unwrap ( ) ;
71
+ assert ! ( Color :: try_from( ( -1 , -10 , -256 ) ) . is_err( ) ) ;
72
+ }
73
+ #[ test]
74
+ fn test_tuple_sum ( ) {
75
+ assert ! ( Color :: try_from( ( -1 , 255 , 255 ) ) . is_err( ) ) ;
77
76
}
78
77
#[ test]
79
78
fn test_tuple_correct ( ) {
80
- let c: Color = ( 183 , 65 , 14 ) . try_into ( ) . unwrap ( ) ;
81
- assert_eq ! ( c. red, 183 ) ;
82
- assert_eq ! ( c. green, 65 ) ;
83
- assert_eq ! ( c. blue, 14 ) ;
79
+ let c: Result < Color , String > = ( 183 , 65 , 14 ) . try_into ( ) ;
80
+ assert_eq ! (
81
+ c,
82
+ Ok ( Color {
83
+ red: 183 ,
84
+ green: 65 ,
85
+ blue: 14
86
+ } )
87
+ ) ;
84
88
}
85
-
86
89
#[ test]
87
- #[ should_panic]
88
90
fn test_array_out_of_range_positive ( ) {
89
- let _: Color = [ 1000 , 10000 , 256 ] . try_into ( ) . unwrap ( ) ;
91
+ let c: Color = [ 1000 , 10000 , 256 ] . try_into ( ) ;
92
+ assert ! ( c. is_err( ) ) ;
90
93
}
91
94
#[ test]
92
- #[ should_panic]
93
95
fn test_array_out_of_range_negative ( ) {
94
- let _: Color = [ -10 , -256 , -1 ] . try_into ( ) . unwrap ( ) ;
96
+ let c: Color = [ -10 , -256 , -1 ] . try_into ( ) ;
97
+ assert ! ( c. is_err( ) ) ;
95
98
}
96
99
#[ test]
100
+ fn test_array_sum ( ) {
101
+ let c: Color = [ -1 , 255 , 255 ] . try_into ( ) ;
102
+ assert ! ( c. is_err( ) ) ;
103
+ }
104
+ #[ test]
105
+ #[ test]
97
106
fn test_array_correct ( ) {
98
- let c: Color = [ 183 , 65 , 14 ] . try_into ( ) . unwrap ( ) ;
99
- assert_eq ! ( c. red, 183 ) ;
100
- assert_eq ! ( c. green, 65 ) ;
101
- assert_eq ! ( c. blue, 14 ) ;
107
+ let c: Result < Color , String > = [ 183 , 65 , 14 ] . try_into ( ) ;
108
+ assert_eq ! (
109
+ c,
110
+ Ok ( Color {
111
+ red: 183 ,
112
+ green: 65 ,
113
+ blue: 14
114
+ } )
115
+ ) ;
102
116
}
103
-
104
117
#[ test]
105
- #[ should_panic]
106
118
fn test_slice_out_of_range_positive ( ) {
107
119
let arr = [ 10000 , 256 , 1000 ] ;
108
- let _ = Color :: try_from ( & arr[ ..] ) . unwrap ( ) ;
120
+ assert ! ( Color :: try_from( & arr[ ..] ) . is_err ( ) ) ;
109
121
}
110
122
#[ test]
111
- #[ should_panic]
112
123
fn test_slice_out_of_range_negative ( ) {
113
124
let arr = [ -256 , -1 , -10 ] ;
114
- let _ = Color :: try_from ( & arr[ ..] ) . unwrap ( ) ;
125
+ assert ! ( Color :: try_from( & arr[ ..] ) . is_err( ) ) ;
126
+ }
127
+ #[ test]
128
+ fn test_slice_sum ( ) {
129
+ let arr = [ -1 , 255 , 255 ] ;
130
+ assert ! ( Color :: try_from( & arr[ ..] ) . is_err( ) ) ;
115
131
}
116
132
#[ test]
117
133
fn test_slice_correct ( ) {
118
134
let v = vec ! [ 183 , 65 , 14 ] ;
119
- let c = Color :: try_from ( & v[ ..] ) . unwrap ( ) ;
120
- assert_eq ! ( c. red, 183 ) ;
121
- assert_eq ! ( c. green, 65 ) ;
122
- assert_eq ! ( c. blue, 14 ) ;
135
+ let c: Result < Color , String > = Color :: try_from ( & v[ ..] ) ;
136
+ assert_eq ! (
137
+ c,
138
+ Ok ( Color {
139
+ red: 183 ,
140
+ green: 65 ,
141
+ blue: 14
142
+ } )
143
+ ) ;
123
144
}
124
145
#[ test]
125
- #[ should_panic]
126
146
fn test_slice_excess_length ( ) {
127
147
let v = vec ! [ 0 , 0 , 0 , 0 ] ;
128
- let _ = Color :: try_from ( & v[ ..] ) . unwrap ( ) ;
148
+ assert ! ( Color :: try_from( & v[ ..] ) . is_err ( ) ) ;
129
149
}
130
150
#[ test]
131
- #[ should_panic]
132
151
fn test_slice_insufficient_length ( ) {
133
152
let v = vec ! [ 0 , 0 ] ;
134
- let _ = Color :: try_from ( & v[ ..] ) . unwrap ( ) ;
153
+ assert ! ( Color :: try_from( & v[ ..] ) . is_err ( ) ) ;
135
154
}
136
155
}
0 commit comments