@@ -1003,6 +1003,7 @@ pub struct AllocError;
10031003
10041004#[ cfg( test) ]
10051005mod tests {
1006+ use core:: convert:: Infallible ;
10061007 use super :: * ;
10071008
10081009 #[ test]
@@ -1169,4 +1170,146 @@ mod tests {
11691170 Destination type: bool"
11701171 ) ;
11711172 }
1173+
1174+ #[ test]
1175+ fn test_convert_error_debug ( ) {
1176+ let err: ConvertError <
1177+ AlignmentError < & [ u8 ] , u16 > ,
1178+ SizeError < & [ u8 ] , u16 > ,
1179+ ValidityError < & [ u8 ] , bool > ,
1180+ > = ConvertError :: Alignment ( AlignmentError :: new_checked ( & [ 0u8 ] ) ) ;
1181+ assert_eq ! ( format!( "{:?}" , err) , "Alignment(AlignmentError)" ) ;
1182+
1183+ let err: ConvertError <
1184+ AlignmentError < & [ u8 ] , u16 > ,
1185+ SizeError < & [ u8 ] , u16 > ,
1186+ ValidityError < & [ u8 ] , bool > ,
1187+ > = ConvertError :: Size ( SizeError :: new ( & [ 0u8 ] ) ) ;
1188+ assert_eq ! ( format!( "{:?}" , err) , "Size(SizeError)" ) ;
1189+
1190+ let err: ConvertError <
1191+ AlignmentError < & [ u8 ] , u16 > ,
1192+ SizeError < & [ u8 ] , u16 > ,
1193+ ValidityError < & [ u8 ] , bool > ,
1194+ > = ConvertError :: Validity ( ValidityError :: new ( & [ 0u8 ] ) ) ;
1195+ assert_eq ! ( format!( "{:?}" , err) , "Validity(ValidityError)" ) ;
1196+ }
1197+
1198+ #[ test]
1199+ fn test_convert_error_from_unaligned ( ) {
1200+ // u8 is Unaligned
1201+ let err: ConvertError <
1202+ AlignmentError < & [ u8 ] , u8 > ,
1203+ SizeError < & [ u8 ] , u8 > ,
1204+ ValidityError < & [ u8 ] , bool > ,
1205+ > = ConvertError :: Size ( SizeError :: new ( & [ 0u8 ] ) ) ;
1206+ let converted: ConvertError < Infallible , SizeError < & [ u8 ] , u8 > , ValidityError < & [ u8 ] , bool > > =
1207+ ConvertError :: from ( err) ;
1208+ match converted {
1209+ ConvertError :: Size ( _) => { }
1210+ _ => panic ! ( "Expected Size error" ) ,
1211+ }
1212+ }
1213+
1214+ #[ test]
1215+ fn test_alignment_error_display_debug ( ) {
1216+ let err: AlignmentError < & [ u8 ] , u16 > = AlignmentError :: new_checked ( & [ 0u8 ] ) ;
1217+ assert ! ( format!( "{:?}" , err) . contains( "AlignmentError" ) ) ;
1218+ assert ! ( format!( "{}" , err) . contains( "address of the source is not a multiple" ) ) ;
1219+ }
1220+
1221+ #[ test]
1222+ fn test_size_error_display_debug ( ) {
1223+ let err: SizeError < & [ u8 ] , u16 > = SizeError :: new ( & [ 0u8 ] ) ;
1224+ assert ! ( format!( "{:?}" , err) . contains( "SizeError" ) ) ;
1225+ assert ! ( format!( "{}" , err) . contains( "source was incorrectly sized" ) ) ;
1226+ }
1227+
1228+ #[ test]
1229+ fn test_validity_error_display_debug ( ) {
1230+ let err: ValidityError < & [ u8 ] , bool > = ValidityError :: new ( & [ 0u8 ] ) ;
1231+ assert ! ( format!( "{:?}" , err) . contains( "ValidityError" ) ) ;
1232+ assert ! ( format!( "{}" , err) . contains( "source bytes are not a valid value" ) ) ;
1233+ }
1234+
1235+ #[ test]
1236+ fn test_convert_error_display_debug_more ( ) {
1237+ let err: ConvertError <
1238+ AlignmentError < & [ u8 ] , u16 > ,
1239+ SizeError < & [ u8 ] , u16 > ,
1240+ ValidityError < & [ u8 ] , bool > ,
1241+ > = ConvertError :: Alignment ( AlignmentError :: new_checked ( & [ 0u8 ] ) ) ;
1242+ assert ! ( format!( "{}" , err) . contains( "address of the source is not a multiple" ) ) ;
1243+
1244+ let err: ConvertError <
1245+ AlignmentError < & [ u8 ] , u16 > ,
1246+ SizeError < & [ u8 ] , u16 > ,
1247+ ValidityError < & [ u8 ] , bool > ,
1248+ > = ConvertError :: Size ( SizeError :: new ( & [ 0u8 ] ) ) ;
1249+ assert ! ( format!( "{}" , err) . contains( "source was incorrectly sized" ) ) ;
1250+
1251+ let err: ConvertError <
1252+ AlignmentError < & [ u8 ] , u16 > ,
1253+ SizeError < & [ u8 ] , u16 > ,
1254+ ValidityError < & [ u8 ] , bool > ,
1255+ > = ConvertError :: Validity ( ValidityError :: new ( & [ 0u8 ] ) ) ;
1256+ assert ! ( format!( "{}" , err) . contains( "source bytes are not a valid value" ) ) ;
1257+ }
1258+
1259+ #[ test]
1260+ fn test_alignment_error_methods ( ) {
1261+ let err: AlignmentError < & [ u8 ] , u16 > = AlignmentError :: new_checked ( & [ 0u8 ] ) ;
1262+
1263+ // into_src
1264+ let src = err. clone ( ) . into_src ( ) ;
1265+ assert_eq ! ( src, & [ 0u8 ] ) ;
1266+
1267+ // into
1268+ let converted: ConvertError <
1269+ AlignmentError < & [ u8 ] , u16 > ,
1270+ SizeError < & [ u8 ] , u16 > ,
1271+ ValidityError < & [ u8 ] , bool > ,
1272+ > = err. clone ( ) . into ( ) ;
1273+ match converted {
1274+ ConvertError :: Alignment ( _) => { }
1275+ _ => panic ! ( "Expected Alignment error" ) ,
1276+ }
1277+
1278+ // clone
1279+ let cloned = err. clone ( ) ;
1280+ assert_eq ! ( err, cloned) ;
1281+
1282+ // eq
1283+ assert_eq ! ( err, cloned) ;
1284+ let err2: AlignmentError < & [ u8 ] , u16 > = AlignmentError :: new_checked ( & [ 1u8 ] ) ;
1285+ assert_ne ! ( err, err2) ;
1286+ }
1287+
1288+ #[ test]
1289+ fn test_convert_error_from_unaligned_variants ( ) {
1290+ // u8 is Unaligned
1291+ let err: ConvertError <
1292+ AlignmentError < & [ u8 ] , u8 > ,
1293+ SizeError < & [ u8 ] , u8 > ,
1294+ ValidityError < & [ u8 ] , bool > ,
1295+ > = ConvertError :: Validity ( ValidityError :: new ( & [ 0u8 ] ) ) ;
1296+ let converted: ConvertError < Infallible , SizeError < & [ u8 ] , u8 > , ValidityError < & [ u8 ] , bool > > =
1297+ ConvertError :: from ( err) ;
1298+ match converted {
1299+ ConvertError :: Validity ( _) => { }
1300+ _ => panic ! ( "Expected Validity error" ) ,
1301+ }
1302+
1303+ let err: ConvertError <
1304+ AlignmentError < & [ u8 ] , u8 > ,
1305+ SizeError < & [ u8 ] , u8 > ,
1306+ ValidityError < & [ u8 ] , bool > ,
1307+ > = ConvertError :: Size ( SizeError :: new ( & [ 0u8 ] ) ) ;
1308+ let converted: ConvertError < Infallible , SizeError < & [ u8 ] , u8 > , ValidityError < & [ u8 ] , bool > > =
1309+ ConvertError :: from ( err) ;
1310+ match converted {
1311+ ConvertError :: Size ( _) => { }
1312+ _ => panic ! ( "Expected Size error" ) ,
1313+ }
1314+ }
11721315}
0 commit comments