11use  crate :: { 
22	sha256,  FromBase32 ,  PayeePubKey ,  PaymentSecret ,  PositiveTimestamp ,  RawDataPart ,  Sha256 , 
33} ; 
4- use  bech32:: { Base32Len ,  ToBase32 } ; 
4+ use  bech32:: { u5 ,   Base32Len ,  ToBase32 } ; 
55
66use  core:: fmt:: Debug ; 
77use  std:: str:: FromStr ; 
@@ -14,11 +14,11 @@ where
1414{ 
1515	let  serialized_32 = o. to_base32 ( ) ; 
1616	let  serialized_str = serialized_32. iter ( ) . map ( |f| f. to_char ( ) ) . collect :: < String > ( ) ; 
17- 	assert_eq ! ( serialized_str,  expected_str) ; 
17+ 	assert_eq ! ( serialized_str,  expected_str,   "Mismatch for {:?}" ,  o ) ; 
1818
1919	// deserialize back 
2020	let  o2 = T :: from_base32 ( & serialized_32) . unwrap ( ) ; 
21- 	assert_eq ! ( o,  o2) ; 
21+ 	assert_eq ! ( o,  o2,   "Mismatch for {}" ,  serialized_str ) ; 
2222} 
2323
2424/// Test base32 encode and decode, and also length hint 
2727	T :  ToBase32  + FromBase32  + Base32Len  + Eq  + Debug , 
2828	T :: Err :  Debug , 
2929{ 
30- 	assert_eq ! ( o. base32_len( ) ,  expected_str. len( ) ) ; 
30+ 	assert_eq ! ( o. base32_len( ) ,  expected_str. len( ) ,   "Mismatch for {} {:?}" ,  expected_str ,  o ) ; 
3131
3232	ser_de_test ( o,  expected_str) 
3333} 
@@ -67,8 +67,66 @@ fn positive_timestamp() {
6767fn  bolt11_invoice_features ( )  { 
6868	use  crate :: Bolt11InvoiceFeatures ; 
6969
70- 	let  features = Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ,  2 ,  3 ,  4 ,  5 ,  42 ,  100 ,  101 ] ) ; 
71- 	ser_de_test_len ( features,  "x2ep2q5zqxqsp" ) ; 
70+ 	// Test few values, lengths, and paddings 
71+ 	ser_de_test_len ( 
72+ 		Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ,  2 ,  3 ,  4 ,  5 ,  42 ,  100 ,  101 ] ) , 
73+ 		"x2ep2q5zqxqsp" , 
74+ 	) ; 
75+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ ] ) ,  "" ) ; 
76+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 0 ] ) ,  "" ) ; 
77+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ] ) ,  "p" ) ; 
78+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 31 ] ) ,  "l" ) ; 
79+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 100 ] ) ,  "ry" ) ; 
80+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 ] ) ,  "8l" ) ; 
81+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ] ) ,  "p" ) ; 
82+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ,  2 ] ) ,  "sp" ) ; 
83+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ,  2 ,  3 ] ) ,  "xqsp" ) ; 
84+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ,  2 ,  3 ,  4 ] ) ,  "zqxqsp" ) ; 
85+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 1 ,  2 ,  3 ,  4 ,  5 ] ) ,  "5zqxqsp" ) ; 
86+ 	ser_de_test_len ( 
87+ 		Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 ,  254 ,  253 ,  252 ,  251 ] ) , 
88+ 		"l070mlhl" , 
89+ 	) ; 
90+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 100 ,  0 ] ) ,  "ry" ) ; 
91+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 100 ,  0 ,  0 ,  0 ] ) ,  "ry" ) ; 
92+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 0 ,  100 ] ) ,  "eqq" ) ; 
93+ 	ser_de_test_len ( Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 0 ,  0 ,  0 ,  100 ] ) ,  "pjqqqqq" ) ; 
94+ 	ser_de_test_len ( 
95+ 		Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ] ) , 
96+ 		"rllllllllllllll" , 
97+ 	) ; 
98+ 	ser_de_test_len ( 
99+ 		Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  254 ] ) , 
100+ 		"rl0llllllllllll" , 
101+ 	) ; 
102+ 	ser_de_test_len ( 
103+ 		Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  127 ] ) , 
104+ 		"pllllllllllllll" , 
105+ 	) ; 
106+ 	ser_de_test_len ( 
107+ 		Bolt11InvoiceFeatures :: from_le_bytes ( vec ! [ 255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  255 ,  63 ] ) , 
108+ 		"llllllllllllll" , 
109+ 	) ; 
110+ 
111+ 	// To test skipping 0's in deserialization, we have to start with deserialization 
112+ 	assert_eq ! ( 
113+ 		Bolt11InvoiceFeatures :: from_base32( 
114+ 			& vec![ 0 ,  0 ,  0 ,  0 ,  0 ,  3 ,  4 ] 
115+ 				. iter( ) . copied( ) . map( |f| u5:: try_from_u8( f) . unwrap( ) ) . collect:: <Vec <_>>( ) [ ..] 
116+ 		) 
117+ 		. unwrap( ) 
118+ 		. le_flags( ) , 
119+ 		vec![ 100 ] 
120+ 	) ; 
121+ 	assert_eq ! ( 
122+ 		Bolt11InvoiceFeatures :: from_base32( 
123+ 			& vec![ 3 ,  4 ] 
124+ 				. iter( ) . copied( ) . map( |f| u5:: try_from_u8( f) . unwrap( ) ) . collect:: <Vec <_>>( ) [ ..] 
125+ 		) 
126+ 		. unwrap( ) 
127+ 		. le_flags( ) , 
128+ 		vec![ 100 ] 
129+ 	) ; 
72130} 
73131
74132#[ test]  
0 commit comments