@@ -1244,6 +1244,23 @@ extension TestJSONSerialization {
12441244 XCTAssertEqual ( try trySerialize ( [ - Double. greatestFiniteMagnitude] ) , " [-1.7976931348623157e+308] " )
12451245 XCTAssertEqual ( try trySerialize ( [ Double . greatestFiniteMagnitude] ) , " [1.7976931348623157e+308] " )
12461246 XCTAssertEqual ( try trySerialize ( [ Double ( - 1.0 ) , Double ( 1.0 ) ] ) , " [-1,1] " )
1247+
1248+ // Test round-tripping Double values
1249+ let value1 = 7.7087009966199993
1250+ let value2 = 7.7087009966200002
1251+ let dict1 = [ " value " : value1]
1252+ let dict2 = [ " value " : value2]
1253+ let jsonData1 = try ! JSONSerialization . data ( withJSONObject: dict1)
1254+ let jsonData2 = try ! JSONSerialization . data ( withJSONObject: dict2)
1255+ let jsonString1 = String ( decoding: jsonData1, as: UTF8 . self)
1256+ let jsonString2 = String ( decoding: jsonData2, as: UTF8 . self)
1257+
1258+ XCTAssertEqual ( jsonString1, " { \" value \" :7.708700996619999} " )
1259+ XCTAssertEqual ( jsonString2, " { \" value \" :7.70870099662} " )
1260+ let decodedDict1 = try ! JSONSerialization . jsonObject ( with: jsonData1) as! [ String : Double ]
1261+ let decodedDict2 = try ! JSONSerialization . jsonObject ( with: jsonData2) as! [ String : Double ]
1262+ XCTAssertEqual ( decodedDict1 [ " value " ] , value1)
1263+ XCTAssertEqual ( decodedDict2 [ " value " ] , value2)
12471264 }
12481265
12491266 func test_serialize_Decimal( ) {
0 commit comments