@@ -2276,6 +2276,62 @@ extension DataTests {
2276
2276
#expect( " TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBzb2RhbGVzIGVyYXQsIHNpdCBhbWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2VkIG9ybmFyZSBmZWxpcy4gTnVuYyBtYXVyaXMgdHVycGlzLCBiaWJlbmR1bSBub24gbGVjdHVzIHF1aXMsIG1hbGVzdWFkYSBwbGFjZXJhdCB0dXJwaXMuIE5hbSBhZGlwaXNjaW5nIG5vbiBtYXNzYSBldCBzZW1wZXIuIE51bGxhIGNvbnZhbGxpcyBzZW1wZXIgYmliZW5kdW0uIEFsaXF1YW0gZGljdHVtIG51bGxhIGN1cnN1cyBtaSB1bHRyaWNpZXMsIGF0IHRpbmNpZHVudCBtaSBzYWdpdHRpcy4gTnVsbGEgZmF1Y2lidXMgYXQgZHVpIHF1aXMgc29kYWxlcy4gTW9yYmkgcnV0cnVtLCBkdWkgaWQgdWx0cmljZXMgdmVuZW5hdGlzLCBhcmN1IHVybmEgZWdlc3RhcyBmZWxpcywgdmVsIHN1c2NpcGl0IG1hdXJpcyBhcmN1IHF1aXMgcmlzdXMuIE51bmMgdmVuZW5hdGlzIGxpZ3VsYSBhdCBvcmNpIHRyaXN0aXF1ZSwgZXQgbWF0dGlzIHB1cnVzIHB1bHZpbmFyLiBFdGlhbSB1bHRyaWNpZXMgZXN0IG9kaW8uIE51bmMgZWxlaWZlbmQgbWFsZXN1YWRhIGp1c3RvLCBuZWMgZXVpc21vZCBzZW0gdWx0cmljZXMgcXVpcy4gRXRpYW0gbmVjIG5pYmggc2l0IGFtZXQgbG9yZW0gZmF1Y2lidXMgZGFwaWJ1cyBxdWlzIG5lYyBsZW8uIFByYWVzZW50IHNpdCBhbWV0IG1hdXJpcyB2ZWwgbGFjdXMgaGVuZHJlcml0IHBvcnRhIG1vbGxpcyBjb25zZWN0ZXR1ciBtaS4gRG9uZWMgZWdldCB0b3J0b3IgZHVpLiBNb3JiaSBpbXBlcmRpZXQsIGFyY3Ugc2l0IGFtZXQgZWxlbWVudHVtIGludGVyZHVtLCBxdWFtIG5pc2wgdGVtcG9yIHF1YW0sIHZpdGFlIGZldWdpYXQgYXVndWUgcHVydXMgc2VkIGxhY3VzLiBJbiBhYyB1cm5hIGFkaXBpc2NpbmcgcHVydXMgdmVuZW5hdGlzIHZvbHV0cGF0IHZlbCBldCBtZXR1cy4gTnVsbGFtIG5lYyBhdWN0b3IgcXVhbS4gUGhhc2VsbHVzIHBvcnR0aXRvciBmZWxpcyBhYyBuaWJoIGdyYXZpZGEgc3VzY2lwaXQgdGVtcHVzIGF0IGFudGUuIE51bmMgcGVsbGVudGVzcXVlIGlhY3VsaXMgc2FwaWVuIGEgbWF0dGlzLiBBZW5lYW4gZWxlaWZlbmQgZG9sb3Igbm9uIG51bmMgbGFvcmVldCwgbm9uIGRpY3R1bSBtYXNzYSBhbGlxdWFtLiBBZW5lYW4gcXVpcyB0dXJwaXMgYXVndWUuIFByYWVzZW50IGF1Z3VlIGxlY3R1cywgbW9sbGlzIG5lYyBlbGVtZW50dW0gZXUsIGRpZ25pc3NpbSBhdCB2ZWxpdC4gVXQgY29uZ3VlIG5lcXVlIGlkIHVsbGFtY29ycGVyIHBlbGxlbnRlc3F1ZS4gTWFlY2VuYXMgZXVpc21vZCBpbiBlbGl0IGV1IHZlaGljdWxhLiBOdWxsYW0gdHJpc3RpcXVlIGR1aSBudWxsYSwgbmVjIGNvbnZhbGxpcyBtZXR1cyBzdXNjaXBpdCBlZ2V0LiBDcmFzIHNlbXBlciBhdWd1ZSBuZWMgY3Vyc3VzIGJsYW5kaXQuIE51bGxhIHJob25jdXMgZXQgb2RpbyBxdWlzIGJsYW5kaXQuIFByYWVzZW50IGxvYm9ydGlzIGRpZ25pc3NpbSB2ZWxpdCB1dCBwdWx2aW5hci4gRHVpcyBpbnRlcmR1bSBxdWFtIGFkaXBpc2NpbmcgZG9sb3Igc2VtcGVyIHNlbXBlci4gTnVuYyBiaWJlbmR1bSBjb252YWxsaXMgZHVpLCBlZ2V0IG1vbGxpcyBtYWduYSBoZW5kcmVyaXQgZXQuIE1vcmJpIGZhY2lsaXNpcywgYXVndWUgZXUgZnJpbmdpbGxhIGNvbnZhbGxpcywgbWF1cmlzIGVzdCBjdXJzdXMgZG9sb3IsIGV1IHBvc3VlcmUgb2RpbyBudW5jIHF1aXMgb3JjaS4gVXQgZXUganVzdG8gc2VtLiBQaGFzZWxsdXMgdXQgZXJhdCByaG9uY3VzLCBmYXVjaWJ1cyBhcmN1IHZpdGFlLCB2dWxwdXRhdGUgZXJhdC4gQWxpcXVhbSBuZWMgbWFnbmEgdml2ZXJyYSwgaW50ZXJkdW0gZXN0IHZpdGFlLCByaG9uY3VzIHNhcGllbi4gRHVpcyB0aW5jaWR1bnQgdGVtcG9yIGlwc3VtIHV0IGRhcGlidXMuIE51bGxhbSBjb21tb2RvIHZhcml1cyBtZXR1cywgc2VkIHNvbGxpY2l0dWRpbiBlcm9zLiBFdGlhbSBuZWMgb2RpbyBldCBkdWkgdGVtcG9yIGJsYW5kaXQgcG9zdWVyZS4= " == base64, " medium base64 conversion should work " )
2277
2277
}
2278
2278
2279
+ @Test func testBase64LineLengthOptions( ) {
2280
+ let expected46 = " AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== "
2281
+ let length46String = Data ( repeating: 0 , count: 46 ) . base64EncodedString ( options: . lineLength64Characters)
2282
+ #expect( length46String == expected46)
2283
+ let length46Data = Data ( repeating: 0 , count: 46 ) . base64EncodedData ( options: . lineLength64Characters)
2284
+ #expect( length46Data. count == 64 )
2285
+ #expect( String ( decoding: length46Data, as: Unicode . UTF8. self) == expected46)
2286
+
2287
+ let expected47 = " AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= "
2288
+ let length47String = Data ( repeating: 0 , count: 47 ) . base64EncodedString ( options: . lineLength64Characters)
2289
+ #expect( length47String == expected47)
2290
+ let length47Data = Data ( repeating: 0 , count: 47 ) . base64EncodedData ( options: . lineLength64Characters)
2291
+ #expect( length47Data. count == 64 )
2292
+ #expect( String ( decoding: length47Data, as: Unicode . UTF8. self) == expected47)
2293
+
2294
+ let expected48 = " AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA "
2295
+ let length48String = Data ( repeating: 0 , count: 48 ) . base64EncodedString ( options: . lineLength64Characters)
2296
+ #expect( length48String == expected48)
2297
+ let length48Data = Data ( repeating: 0 , count: 48 ) . base64EncodedData ( options: . lineLength64Characters)
2298
+ #expect( length48Data. count == 64 )
2299
+ #expect( String ( decoding: length48Data, as: Unicode . UTF8. self) == expected48)
2300
+
2301
+ let length49 = Data ( repeating: 0 , count: 49 ) . base64EncodedString ( options: . lineLength64Characters)
2302
+ #expect( length49 == #"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\#r\#nAA=="# )
2303
+ #expect( Array ( length49. utf8) [ 64 ] == 13 )
2304
+ #expect( Array ( length49. utf8) [ 65 ] == 10 )
2305
+ }
2306
+
2307
+ // we have more encodeToStringTests than we have encodeToDataTests.
2308
+ // lets fix this by ensuring data output matches string output.
2309
+ @Test func testBase64DataOutputMatchesStingOutput( ) {
2310
+ for count in 0 ..< 10_000 {
2311
+ let data = Data ( repeating: 0 , count: count)
2312
+ let stringBase64 = data. base64EncodedString ( options: . lineLength64Characters)
2313
+ let dataBase64 = data. base64EncodedData ( options: . lineLength64Characters)
2314
+
2315
+ #expect( stringBase64 == String ( decoding: dataBase64, as: Unicode . UTF8. self) )
2316
+ }
2317
+
2318
+ for count in 0 ..< 10_000 {
2319
+ let data = Data ( repeating: 0 , count: count)
2320
+ let stringBase64 = data. base64EncodedString ( options: . lineLength76Characters)
2321
+ let dataBase64 = data. base64EncodedData ( options: . lineLength76Characters)
2322
+
2323
+ #expect( stringBase64 == String ( decoding: dataBase64, as: Unicode . UTF8. self) )
2324
+ }
2325
+
2326
+ for count in 0 ..< 10_000 {
2327
+ let data = Data ( repeating: 0 , count: count)
2328
+ let stringBase64 = data. base64EncodedString ( )
2329
+ let dataBase64 = data. base64EncodedData ( )
2330
+
2331
+ #expect( stringBase64 == String ( decoding: dataBase64, as: Unicode . UTF8. self) )
2332
+ }
2333
+ }
2334
+
2279
2335
@Test func anyHashableContainingData( ) {
2280
2336
let values : [ Data ] = [
2281
2337
Data ( base64Encoded: " AAAA " ) !,
0 commit comments